Allowlist-only zsh script runner extension for pi coding agents.
pi-zsh does one job: run explicitly allowlisted .zsh scripts through one tool, zsh_script_run. It does not provide arbitrary shell execution, scheduling, or orchestration.
Most shell integrations start tight and then drift into "run anything." pi-zsh keeps a stricter boundary:
- only allowlisted
script_idvalues can execute - each script path must be absolute, executable, and
.zsh - environment variables are allowlisted
- output is truncated for context safety, with optional full-output file pointer
- non-zero exit, timeout, and abort are surfaced as
isError: true
npm install @4meta5/pi-zshThis package includes the pi-package keyword so it is discoverable by pi package indexing flows.
- Create an allowlist file:
{
"allowlist": {
"cron_review": {
"path": "/absolute/path/to/cron-review.zsh",
"defaultArgs": [],
"defaultCwdMode": "script_root"
}
},
"envAllowlist": ["PATH", "HOME", "SHELL", "LANG", "LC_ALL"],
"defaultTimeoutMs": 120000,
"maxTimeoutMs": 900000
}- Set required config:
export PI_ZSH_ALLOWLIST_FILE=/absolute/path/to/pi-zsh-allowlist.json- Load as a pi extension:
pi -e /absolute/path/to/pi-zsh/src/index.tsParameters:
script_id(required): allowlisted script identifierargs(optional): extra args appended after allowlist defaultscwd_mode(optional):script_rootorcaller_cwdtimeout_ms(optional): per-call timeout clamped by config max
Returns:
- text summary plus truncated output preview
- structured
detailsincluding path, argv, duration, and truncation metadata isError: truefor non-zero exit, timeout, or abort
Required:
PI_ZSH_ALLOWLIST_FILE: absolute path to JSON config
Optional env overrides:
PI_ZSH_ENV_ALLOWLISTPI_ZSH_DEFAULT_TIMEOUT_MSPI_ZSH_MAX_TIMEOUT_MS
Empty envAllowlist behavior:
- if config sets
"envAllowlist": [],pi-zshrequires an interactive decision at runtime - in non-UI mode, execution returns an error with remediation guidance
Author-convenience default env allowlist:
AGENT_DISPATCH_DIRAGENT_DISPATCH_CMDCLONES_DIRGITHUB_TOKENPATHHOMESHELLLANGLC_ALL
In scope:
- one extension package
- one tool (
zsh_script_run) - allowlist-only script execution
- explicit failure semantics and output truncation
Out of scope:
- arbitrary command execution
- script discovery frameworks
- schedulers and orchestrators
- auth plugin orchestration
- update and migration surfaces
npm run check
npm test
npm run buildMIT