{"_id":"@akshaykarle/pi-tools","_rev":"2-a20986252ad9f7d7d8ebb11f472b92b1","name":"@akshaykarle/pi-tools","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@akshaykarle/pi-tools","version":"0.1.0","keywords":["pi-package"],"license":"MIT","_id":"@akshaykarle/pi-tools@0.1.0","maintainers":[{"name":"akshaykarle","email":"akshay.a.karle@gmail.com"}],"pi":{"skills":["./skills","node_modules/@plannotator/pi-extension/skills"],"extensions":["./extensions/security.ts","./extensions/sandbox.ts","./extensions/agent-teams.ts","./extensions/git-worktree.ts","node_modules/@plannotator/pi-extension"]},"dist":{"shasum":"9f02b176f19bfab3d67ea1573dc2a95dd1402f9f","tarball":"https://registry.npmjs.org/@akshaykarle/pi-tools/-/pi-tools-0.1.0.tgz","fileCount":4298,"integrity":"sha512-BlnZN0apjSqBeST859bh1WYrBS4dlbwnFlJmtuWEEmLMHu8l9uOYk7tY0+qPQH7uX9s56z06AMuGxAnhv9+FDQ==","signatures":[{"sig":"MEUCIGYtx7Bmwpfqutm6MR8ItNHetgWD7RmKJd5+75UPSCD1AiEAqkFFxhqbIiwNoqb3Llt5juSYTQYdirKHDW3A3ZCP+gg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59402634},"gitHead":"3fc065a5987dff2bc6abda16a4f39c1ae54c9141","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"akshaykarle","email":"akshay.a.karle@gmail.com"},"_npmVersion":"10.9.7","description":"Pi coding agent extensions — security hardening, and more","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@plannotator/pi-extension":"^0.19.5","@anthropic-ai/sandbox-runtime":"^0.0.49"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","typescript":"^6.0.3","@types/node":"^22.0.0"},"peerDependencies":{"@mariozechner/pi-coding-agent":">=0.66.1"},"bundleDependencies":["@plannotator/pi-extension"],"_npmOperationalInternal":{"tmp":"tmp/pi-tools_0.1.0_1777712948424_0.8884883495292653","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@akshaykarle/pi-tools","version":"0.1.1","description":"Pi coding agent extensions — security hardening, agent teams and more","author":{"name":"akshaykarle"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/akshaykarle/pi-tools.git"},"homepage":"https://github.com/akshaykarle/pi-tools","bugs":{"url":"https://github.com/akshaykarle/pi-tools/issues"},"keywords":["pi-package"],"pi":{"extensions":["./extensions/security.ts","./extensions/sandbox.ts","./extensions/todos.ts","./extensions/agent-teams.ts","./extensions/git-worktree.ts","node_modules/@plannotator/pi-extension"],"skills":["./skills","node_modules/@plannotator/pi-extension/skills"]},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","tui":"npx tsx scripts/team-tui.ts","prepublishOnly":"npm run build && npm test"},"peerDependencies":{"@mariozechner/pi-coding-agent":"^0.73.0"},"dependencies":{"@anthropic-ai/sandbox-runtime":"^0.0.50","@plannotator/pi-extension":"^0.19.10"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.0.0","typescript":"^6.0.3","vitest":"^4.1.5"},"publishConfig":{"access":"public"},"_id":"@akshaykarle/pi-tools@0.1.1","bundleDependencies":["@plannotator/pi-extension"],"gitHead":"2cc863edb0b20d2fa286556c51483377a45c36b0","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-czSmMe1nhKSn6PRYRFMqHDjSW6BEUgPz7jbKxdtO9I2lnEWeGkHSg7uDNux+Gpqq41R+b2wydmy6fdfJ20AMZg==","shasum":"1822664e70572c428ae0501d3213d14e6d4a4308","tarball":"https://registry.npmjs.org/@akshaykarle/pi-tools/-/pi-tools-0.1.1.tgz","fileCount":4372,"unpackedSize":59812945,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDKD8A/7bm+IJylLEgn1zhnyGXMBVuTkBcLUsO8GXhQqwIhAL6tvwDSRKtBIR+FqZzqrCEWeNqASr1FvsqEKw7Klbdc"}]},"_npmUser":{"name":"akshaykarle","email":"akshay.a.karle@gmail.com"},"directories":{},"maintainers":[{"name":"akshaykarle","email":"akshay.a.karle@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-tools_0.1.1_1778162646960_0.42757965054381275"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-02T09:09:08.315Z","modified":"2026-05-07T14:04:07.754Z","0.1.0":"2026-05-02T09:09:08.985Z","0.1.1":"2026-05-07T14:04:07.640Z"},"license":"MIT","keywords":["pi-package"],"description":"Pi coding agent extensions — security hardening, agent teams and more","maintainers":[{"name":"akshaykarle","email":"akshay.a.karle@gmail.com"}],"readme":"# @akshaykarle/pi-tools\n\nPi coding agent extensions for security hardening, sandboxing, task management, and multi-agent orchestration.\n\n## Installation\n\n```bash\npi install @akshaykarle/pi-tools\n```\n\nOr add to your `~/.pi/agent/settings.json`:\n\n```json\n{\n  \"packages\": [\"@akshaykarle/pi-tools\"]\n}\n```\n\n## Extensions\n\nAll extensions are registered in `package.json` under `pi.extensions` and load automatically when the package is installed.\n\n### `security.ts`\n\nDefense-in-depth extension that intercepts tool calls and results.\n\n- **Hard blocks:** destructive filesystem commands (`rm -rf /`, `mkfs`, `dd of=/dev`, fork bombs), secret exfiltration (posting env vars or credential files to network), self-protection (cannot remove/modify the agent's extensions, `settings.json`, or `AGENTS.md`).\n- **Confirmation prompts:** `sudo`, `chmod`/`chown`, `git push --force`, `git reset --hard`, `git clean -f`, privileged Docker, network listeners.\n- **Secret masking:** redacts known secret env-var values from tool output. Covers explicit names plus `*_SECRET`, `*_TOKEN`, `*_API_KEY`, `*_PASSWORD`, `*_CREDENTIAL`, `*_PRIVATE_KEY` patterns.\n- **Prompt injection detection:** flags instruction hijacking, fake conversation markers, hidden zero-width Unicode, suspicious markdown image/link exfiltration. Warns rather than blocks to avoid false positives.\n\n### `sandbox.ts`\n\nOS-level sandbox via `@anthropic-ai/sandbox-runtime` plus an in-process tool guard for read/write paths and network domains.\n\n- Per-bash-call wrapping using `SandboxManager.wrapWithSandbox`.\n- Config loaded from `~/.pi-${profile}/sandbox.json` and `./.pi-${profile}/sandbox.json` (project overrides user).\n- Interactive prompts for blocked domains and write paths, with session/project/global persistence options.\n- Adds `--no-sandbox` flag and `/sandbox status|show|validate|reload|off|on` command.\n- Always scrubs configured env vars even when sandbox is disabled.\n\n### `todos.ts`\n\nStandalone task-board extension. Provides the `manage_tasks` tool with actions: `add`, `add_batch`, `update`, `list`, `get`. Tasks support dependencies, status (`queued|in-progress|done|failed`), and assignee. Storage directory resolved as: `setActiveTodosDir()` override → `PI_TODO_PATH` env → `.pi/todos/`.\n\n### `agent-teams.ts`\n\nMulti-agent orchestrator. Turns the pi session into a dispatcher that coordinates specialist agents running as separate pi processes. Each agent has its own context window, workspace, and tool allowlist. Includes a live terminal panel widget with per-agent status, tokens, and elapsed time.\n\nCommands: `/team-select`, `/team-list`, `/team-status`, `/team-handoffs`, `/team-off`. Tools (orchestrator-only): `dispatch_agent`, `manage_tasks`.\n\nSupports `shared` and `worktree` workspace modes. Crash recovery detects interrupted runs at startup. Full filesystem layout, agent definition format, skill decision rule, and team config — see [`extensions/agent-teams/README.md`](extensions/agent-teams/README.md).\n\n### `git-worktree.ts`\n\nStandalone git worktree management. Command: `/worktree list | create <name> | switch <name> | remove <path>`. Also adds `--worktree <name>` startup flag (creates if missing, switches into it). Re-exports helper functions consumed by `agent-teams.ts` worktree mode.\n\n### `@plannotator/pi-extension` (bundled)\n\nBundled from [@plannotator/pi-extension](https://github.com/backnotprop/plannotator). Interactive plan review for coding agents — annotate plans visually, share with your team, and automatically send feedback.\n\n## Skills\n\nProgressive-disclosure skills under `skills/`:\n\n- **`read-only`** — constrains an agent to read-only operations.\n- **`workspace-notes`** — instructs the agent to track progress on the shared task board via `manage_tasks` (from `todos.ts`) and write a final summary to `output.md` in its workspace.\n\nSkills are listed in `package.json` under `pi.skills` and auto-discovered by child pi processes (see the agent-teams skill decision rule).\n\n## Development\n\nThis repo uses [nix-direnv](https://github.com/nix-community/nix-direnv). Once installed, run `direnv allow` once — deps from `flake.nix` auto-load on `cd`.\n\nWithout direnv: `nix develop` then `npm install`.\n\n### Commands\n\n```bash\nnpm run build           # compile TypeScript → dist/\nnpm test                # run all tests once\nnpm run test:watch      # vitest interactive watch mode\nnpx tsc --noEmit        # type-check only\nnpx vitest run path/to/file.test.ts    # run a single test file\nnpx vitest run -t \"name pattern\"       # filter tests by name\nnpm run tui             # launch the agent-teams TUI dashboard\n```\n\n### Testing\n\n- Vitest with Node environment. Test files live next to source as `*.test.ts`.\n- Excluded paths: `node_modules`, `dist`, `.pi`, `.direnv` (see `vitest.config.ts`).\n- Internal helpers are exposed for tests via a `__testing__` export object (e.g. `sandbox.ts`).\n- CI (`.github/workflows/test.yml`) runs `npx tsc --noEmit` then `npm test` on Node 22 for every push to `main` and every PR.\n\n### Project layout\n\n```\nextensions/        # extension source — each *.ts is registered in package.json\n  agent-teams/     # agent-teams internals (loaders, runner, handoff log, ...)\n  sandbox/         # sandbox internals (config, path-guard, prompt, session-state)\n  git-worktree/    # worktree-manager\n  todos/           # task-board\nskills/            # progressive-disclosure skills (SKILL.md per skill)\nscripts/team-tui/  # TUI dashboard for monitoring agent-teams runs\n.pi/agents/        # local agent definitions and teams.yaml (consumed by agent-teams)\n```\n\n### Conventions\n\n- ESM-only — imports between local TS files use `.js` extensions (`tsconfig.json` uses `module: ES2022`, `moduleResolution: bundler`).\n- Never import implementation details from `@mariozechner/pi-coding-agent` — only its public API surface (it's a `peerDependency`).\n- Runtime state in `.pi/agent-teams`, `.pi/plans`, `.pi/todos` is git-ignored.\n- Publish is automated: GitHub release → `.github/workflows/publish.yml` → npm with provenance.\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/akshaykarle/pi-tools","repository":{"type":"git","url":"git+https://github.com/akshaykarle/pi-tools.git"},"author":{"name":"akshaykarle"},"bugs":{"url":"https://github.com/akshaykarle/pi-tools/issues"}}