pi-landstrip
Sandboxed Bash and process-backed agents for Pi
Package details
Install pi-landstrip from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-landstrip- Package
pi-landstrip- Version
0.19.19- Published
- Oct 18, 2026
- Downloads
- 3,810/mo · 1,317/wk
- Author
- jarkkojs
- License
- Apache-2.0
- Types
- extension
- Size
- 316.7 KB
- Dependencies
- 5 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./dist/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-landstrip
Sandboxed Bash, primary agents, and process-backed subagents for Pi. Requires Pi ≥0.82.0 and Node.js ≥22.19.0.
Install
pi install npm:pi-landstrip
Unusable sandboxing fails closed; --no-sandbox or enabled: false permits
unsandboxed execution.
Permissions and configuration
With sandboxing enabled, Bash (bash, !, !!) and workers are OS-isolated.
Primary file tools remain in trusted Pi; toolFilesystemPolicy: "sandbox"
adds policy checks, not isolation. Tool approval never bypasses hard denials.
Configuration: bundled sandbox.json → ~/.pi/agent/sandbox.json
→ trusted-project .pi/sandbox.json. Arrays combine; later scalars win.
Persistent approvals update global/project overrides. For policy-only shell reads:
{ "shell": { "readAccess": "policy" } }
Shell reads default to "host"; workers always use policy reads. See
landstrip(1) for native policy, traps,
and platform limits, including Windows read grants and hard-denial restrictions.
Worker boundaries:
- Workers can read their startup files despite the bundled
denyReaddefaults. If your own sandbox settings block a needed path withdenyRead, Pi asks for approval before starting the worker. Declining prevents startup. ExistingallowReadgrants and session approvals are reused.denyReadAlwaysblocks startup without asking. - Hard read denials also apply to shell host reads. Private workers protect
parent auth-file/lock roots with
denyReadAlwaysanddenyWrite; private worker authentication is unsupported on Windows. filesystem.denyWriteAlwaysrejects write attempts without prompting.- External skills/prompts/themes may need directory discovery grants; resolved-file grants do not include parent directories.
Agents and tasks
Configure ~/.pi/agent/landstrip.json, trusted-project .pi/landstrip.json, or
landstrip in the corresponding Pi settings file. Global definitions load first.
{
"maxSubagents": 2,
"toolFilesystemPolicy": "sandbox",
"permission": { "task": { "*": "deny", "review": "allow" } }
}
maxSubagents: 0–16. Agent definitions can override model, prompt, mode, options,
and permissions.
Use /landstrip for the management pane and /landstrip help for commands.
Task IDs accept unique prefixes; bare IDs open logs. /landstrip tasks kill <id>
terminates a task. Ctrl+Shift+A cycles primary agents while idle.
The task tool accepts background: true for immediate return and task_id
to continue a saved task. Press Enter in running/queued logs to steer workers.
Worker environment and authentication
Workers start --offline; install resources and refresh model catalogs in the
parent first. Provider endpoints still need network permission.
Only runtime paths, locale, certificate paths, and supported Pi config are inherited—not parent API keys, tool tokens, proxy URLs, or arbitrary variables. The parent refreshes selected-provider auth and sends it, along with selected Bedrock/Vertex/Azure settings, over a private Unix pipe, not arguments or environment. Configure tool logins separately; authenticated workers cannot launch on Windows.
Ambient AWS profiles need an explicit region for non-ARN Bedrock models. Custom credential-chain environment paths are unsupported; use scoped keys or a Bedrock bearer token. Provider credential files need filesystem grants.
Extension API
pi-landstrip/api exports createLandstrip. prepareProcess() returns
undefined without a runtime. Dispose prepared processes separately from the
discovery handle; generic spawn() returns ChildProcess, RPC workers use
piped streams.
Development
From this package: npm ci && npm run all (Bun required).
npm run ci:fmt checks formatting without edits.