@bytetrue/pi-subagent
Pi extension: lightweight subagent runner with streaming execution, live TUI progress card, parallel/chain execution, and zero framework lock-in.
Package details
Install @bytetrue/pi-subagent from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@bytetrue/pi-subagent- Package
@bytetrue/pi-subagent- Version
0.9.0- Published
- Sep 21, 2026
- Downloads
- 957/mo · 107/wk
- Author
- bytetrue
- License
- MIT
- Types
- extension
- Size
- 102.2 KB
- Dependencies
- 0 dependencies · 3 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@bytetrue/pi-subagent
Lightweight, high-performance Subagent runner for Pi coding agent.
Spawns focused child agents in isolated sessions for delegating tasks, code reviews, or investigations. Every call returns at once; the parent agent keeps working (or ends its turn) and the full result arrives as a new message. Live progress, token & cost tracking sit in the status bar and the /subagent menu. One call = one subagent; to run several at once, the model makes multiple subagent calls in the same message.
Features
- ⚡️ Zero Bloat & Minimal Context: Three lightweight tool schemas (~200 tokens) replace heavy multi-thousand-token multi-agent frameworks.
- 🎭 Built-in Golden Roles:
scout,researcher, andreviewership as ordinary agent documents inagents/— copy one into.pi/agents/to customise it.scout: Fast read-only codebase reconnaissance (read, grep, find, lowest thinking level).researcher: Autonomous web & technical documentation research (read, grep, find, web_search, web_fetch, inherits the parent session's thinking level).reviewer: Disciplined adversarial code review and test validation (read, grep, find, bash, highest thinking level).
- 🛡️ Runaway Guardrails: Default 20-minute timeout and 50-turn limit prevent infinite loops or burning quota.
- 🔄 Pi-native Session Resumption: Subagents assign clean project session IDs; paused or completed sessions can be resumed with
resume: "<sessionId>". - 🚀 Always Non-blocking: The tool call returns a task id immediately; the parent turn is never held. The complete output is delivered as a follow-up message that starts the next turn.
- 🎛️ Full Control Loop:
subagent_statuschecks a task (status, activity, recent tools, session log path);subagent_stopstops one — idempotent, session-scoped, mirroring the background-terminal run/status/kill trio. - 📊 Progress Where It Belongs: The footer shows
sub:N · <role> <elapsed>for the oldest running task;/subagent → task → View Progressshows the detailed card (duration, thinking intent, tool traces with arguments, token usage, cost). - ⚙️
/subagentInteractive Menu:- Task Monitor: View currently running, paused, and recent subagent tasks, inspect progress or output, or stop running tasks.
- Fuzzy Model Search: Model picker with real-time text filter and wrap-around keyboard navigation (Up at top loops to bottom).
- Back Navigation: Pressing
Escin any sub-menu smoothly returns to the parent menu level. - Role & Default Config: Configure global/project default models, thinking levels, and per-role overrides (built-in
scout,researcher,revieweror custom).
Installation
pi install npm:@bytetrue/pi-subagent
Or run directly from this repository:
pi -e packages/pi-subagent/src/index.ts
Interactive Configuration (/subagent)
Run /subagent in the Pi TUI to interactively:
- View Active Subagents: Browse all active/recent subagent tasks in the current session, view output, stop running tasks, or see resume instructions.
- Set default subagent model and thinking level: Use real-time fuzzy search to pick models across all configured providers with wrap-around cursor movement (
Escto go back). - Configure specific roles: Customize
scout,researcher,reviewer, or any custom role with dedicated model and thinking overrides. - Run
/subagent listor/subagent show: View effective configurations and discovered agent templates.
Tool Reference
subagent
Delegate ONE task to an isolated child agent session. The call always returns at once with a task id; the result arrives later as a new message. To run several tasks at once, make multiple subagent calls in the same message — each gets its own task id, progress card, and completion notice.
Note: in print mode (pi -p, --mode json) the process exits after one turn, so a subagent started there has no next turn to report to. Pure background is the only mode by design (issue 088).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
task |
string |
Yes | The task instruction / prompt. |
agent |
string |
No | Optional agent role (loads prompt/defaults from .pi/agents/<name>.md). |
tools |
string[] |
No | Optional tool allowlist (e.g. ["read", "grep", "find"]). |
cwd |
string |
No | Optional working directory for the task. |
resume |
string |
No | Resume a previous subagent session (session id or partial UUID). |
timeoutMs |
number |
No | Timeout in ms. Default: 1200000 (20 minutes). |
maxTurns |
number |
No | Turn limit before pausing. Default: 50. |
Usage Example
{
"agent": "reviewer",
"task": "Review packages/pi-subagent/src/index.ts for potential edge cases"
}
Parallel fanout is just several calls in one message:
[{ "agent": "scout", "task": "Locate relevant test and config files" },
{ "agent": "reviewer", "task": "Perform adversarial review on the located files" }]
subagent_status
Check one subagent task by id: status, elapsed time, current activity (running tool, turns, token/cost, model), recent tool calls, and the child session log path — the model can read that file for the full behaviour history. The task's output is never included here; it is delivered automatically as a new message when the task completes, so there is no reason to poll.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Task id from the subagent call. |
subagent_stop
Stop a running subagent task by id. Idempotent: stopping an already-finished task reports its status instead of failing. Tasks from other sessions are not visible. A cancellation notice still arrives as a new message.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Task id from the subagent call. |
Built-in roles
The built-in roles — scout, researcher, reviewer — are ordinary agent documents shipped in the package's agents/ directory. They are parsed by the same code as your own .pi/agents/*.md, and a file with the same name wins over the packaged one. Copy one out to customise it:
mkdir -p .pi/agents && cp node_modules/@bytetrue/pi-subagent/agents/scout.md .pi/agents/scout.md
---
model: your-provider/your-model
---
A document replaces the built-in entirely, so keep the fields you still want — tools in particular. Omitting tools leaves the child on pi's default set (read, bash, edit, write).
Model and Thinking Resolution
The Agent-facing tool deliberately does not expose model or thinking overrides. These execution-policy choices remain under user control through /subagent, settings, and agent documents.
The model priority chain is:
subagent.agents[role].model— per-role binding (settings)- An agent document —
.pi/agents/<name>.md,<agentDir>/agents/<name>.md, or the packaged built-in subagent.defaultModel— explicit subagent default (settings)- Parent session's current fully qualified provider/model (inherited)
- The child
piprocess's own default
Thinking follows the same user-controlled chain: role settings, agent document, subagent default, then the parent session. scout asks for the lowest available thinking level and reviewer the highest; researcher sets none, so it inherits the parent session.
Root-level pi settings defaultProvider/defaultModel/defaultThinkingLevel are deliberately not consulted — unset subagent configuration means "inherit".
License
MIT