@everyx/pi-subagent
Sub-agent tool for pi – delegate tasks to isolated pi instances (resident rpc children)
Package details
Install @everyx/pi-subagent from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@everyx/pi-subagent- Package
@everyx/pi-subagent- Version
1.2.0- Published
- Aug 6, 2026
- Downloads
- 254/mo · 190/wk
- Author
- every.x
- License
- MIT
- Types
- extension
- Size
- 142.1 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-subagent
Spawn isolated sub‑agents from pi. Each sub‑agent is a full pi instance running in its own context — your conversation stays clean.
You: Research this project's database schema for me
→ pi calls Agent, spawns a resident `pi --mode rpc` child
→ Child works independently in its own context window
→ Result comes back; you keep chatting
Why?
Pi doesn't have built‑in sub‑agents. When a task would flood your context with verbose intermediate output (search results, logs, test output), or you want to run independent tasks in parallel without blocking your conversation — that's what this extension is for.
Install
# npm (recommended)
pi install npm:@everyx/pi-subagent
# git
pi install git:github.com/everyx/pi-subagent
Or symlink for development:
ln -sf /path/to/pi-subagent ~/.pi/agent/extensions/subagent
Restart pi and just tell it "ask a sub‑agent to…".
Tools
Two primitive tools:
Agent— spawn an isolated sub‑agent:{ prompt, title, model?, thinking?, tools?, run_in_background? }.title(3‑5 words, required) labels the tool header, notification card, widget row, and session name — like Claude Code'sdescription/ Codex'stask_name. Foreground (default) blocks until the result is ready;run_in_background: truereturns anagent_idimmediately and delivers a completion notification carrying the final output.AgentControl— intervene in a running background agent:steer(inject a redirecting message) orstop(terminate).
The LLM is guided by promptSnippet + promptGuidelines (system-prompt injection): when to delegate, to keep prompts self-contained, and to never poll.
Usage
Kick off a task
Tell pi:
Ask a sub‑agent to analyze the auth logic under src/
Pi calls Agent (foreground), the child runs in isolation, and the result comes back.
Run several in parallel (background)
Spawn three sub‑agents to look at the auth module, the database layer, and the API routes
Pi calls Agent with run_in_background: true three times. Each completion notification carries that agent's final output — no polling, no extra result tool.
Steer or stop a running agent
That data‑layer sub‑agent — the approach won't work, rewrite it with composition instead
Pi calls AgentControl with steer to redirect the running agent. To stop a runaway agent: "kill that background sub‑agent" → stop.
Advanced
Pick a model
Spawn a sub‑agent with claude-sonnet to analyze the database design
No model specified → inherits your current session's model. Same for thinking — omit it and the sub-agent runs at your current thinking level; pass "off"…"max" to override.
Model specified but not found in the registry → error, no silent fallback.
Restrict tools
Ask a sub‑agent to research the project structure, but only let it use read and grep
Sub‑agent won't see any other tools. Read-only exploration with a cheaper model is the recommended pattern for research tasks.
How it works
Every sub‑agent is a resident pi --mode rpc child with a persisted session:
- Foreground —
Agentwaits for the child to settle, fetches the final output, then closes stdin (graceful shutdown). - Background —
Agentreturns immediately; onagent_settledthe extension delivers asubagent-notification(JSON content to the LLM, rendered card to the user) and the child shuts down gracefully. - Steer/stop —
AgentControl.steerwrites asteercommand to the child's stdin (delivered after its current turn settles);stopcloses stdin for a graceful shutdown. - Attach / review — sub‑agent sessions are stored in
<agent dir>/subagent-sessions/(default~/.pi/agent/subagent-sessions/; override withPI_SUBAGENT_SESSION_DIR, andPI_CODING_AGENT_DIRis honored for the agent dir, same as pi), deliberately outside pi's standard session tree sopi -rstays clean. They are never deleted. To resume or review one, find the session path in the main conversation (the Agent call result or the completion notification card) and runpi --session <path>— or ask the LLM, the notification carries the path too. - Graceful turn limits (opt-in) — by default the extension imposes no hidden deadline: a sub‑agent runs until it finishes or is stopped (the same restraint Claude Code shows — it has no time watchdog). The
Agenttool accepts an optionaltimeoutMs(Codex'stimeout_msstyle): when passed, the extension aborts at the deadline, waits for the settle, then shuts down. No truncated output from an abrupt SIGTERM. When the limit fires, the session file holds the full transcript; the tool result marks the run stopped. There are no token limits — usage is only reported on the notification card.
Nested sub‑agents
Sub‑agents are full pi instances and therefore spawn sub‑agents of their own if you have this extension installed globally — nesting works out of the box with no depth control. Each level is a separate process with its own context, so nesting depth multiplies startup time and token cost. You (or the model) judge when nesting is worth it.
Costs & caveats
- Headless (
pi -p) background agents die with the host. The main process exits when the agent finishes its response — background children are then torn down via stdin EOF (they never leak as orphans). Background workflows (wait for notification, steer, stop) are designed for the TUI session, which stays alive. - One process per agent. Foreground and background are identical (resident rpc child). Many background agents = many processes — spawn them in moderation.
- Notification is one-shot. A background result is delivered once; if the main session dies before delivery, the result survives only in the session file (attach it with
pi --session <path>). - Steer needs a live agent.
AgentControlonly works while the agent is still running, before its completion notification.
Cleanup
When pi exits, running sub‑agents receive a graceful stdin-EOF shutdown. Sessions remain on disk for attach/replay; nothing is killed or deleted.