# Subagent Example Delegate tasks to specialized subagents with isolated context windows. ## Structure ``` subagent/ ├── README.md # This file ├── subagent.ts # The custom tool ├── agents/ # Sample agent definitions │ ├── scout.md # Fast recon, returns compressed context │ ├── planner.md # Creates implementation plans │ ├── reviewer.md # Code review │ └── worker.md # General-purpose (full capabilities) └── commands/ # Workflow presets ├── implement.md # scout -> planner -> worker ├── scout-and-plan.md # scout -> planner (no implementation) └── implement-and-review.md # worker -> reviewer -> worker ``` ## Installation From the `examples/custom-tools/subagent/` directory: ```bash # Copy the tool mkdir -p ~/.pi/agent/tools cp subagent.ts ~/.pi/agent/tools/ # Copy agents mkdir -p ~/.pi/agent/agents cp agents/*.md ~/.pi/agent/agents/ # Copy workflow commands mkdir -p ~/.pi/agent/commands cp commands/*.md ~/.pi/agent/commands/ ``` ## Security Model This example intentionally executes a separate `pi` subprocess with a delegated system prompt and tool/model configuration. Treat **project-local agent definitions as repo-controlled prompts**: - A project can define agents in `.pi/agents/*.md`. - Those prompts can instruct the model to read files, run bash commands, etc. (depending on the allowed tools). **Default behavior:** the tool only loads **user-level agents** from `~/.pi/agent/agents`. To enable project-local agents, pass `agentScope: "both"` (or `"project"`) explicitly. Only do this for repositories you trust. When running interactively, the tool will prompt for confirmation before running project-local agents. Set `confirmProjectAgents: false` to disable the prompt. ## Usage ### Single agent ``` > Use the subagent tool with agent "scout" and task "find all authentication code" ``` ### Parallel execution ``` > Use subagent with tasks: > - scout: "analyze the auth module" > - scout: "analyze the api module" > - scout: "analyze the database module" ``` ### Chained workflow ``` > Use subagent chain: > 1. scout: "find code related to caching" > 2. planner: "plan Redis integration using: {previous}" > 3. worker: "implement: {previous}" ``` ### Workflow commands ``` /implement add Redis caching to the session store /scout-and-plan refactor auth to support OAuth /implement-and-review add input validation to API endpoints ``` ## Tool Modes | Mode | Parameter | Description | |------|-----------|-------------| | Single | `{ agent, task }` | One agent, one task | | Parallel | `{ tasks: [...] }` | Multiple agents run concurrently | | Chain | `{ chain: [...] }` | Sequential with `{previous}` placeholder |
Flow Diagrams ### Single Mode ``` ┌─────────────────┐ │ Main Agent │ └────────┬────────┘ │ "use scout to find auth code" ▼ ┌─────────────────┐ │ subagent tool │ └────────┬────────┘ │ pi -p --model haiku ... ▼ ┌─────────────────┐ │ Scout │ │ (subprocess) │ └────────┬────────┘ │ stdout ▼ ┌─────────────────┐ │ Tool Result │ └─────────────────┘ ``` ### Parallel Mode ``` ┌──────────────────────┐ │ Main Agent │ └──────────┬───────────┘ │ ▼ ┌──────────────────────┐ │ subagent tool │ │ Promise.all() │ └──────────┬───────────┘ │ ┌─────┼─────┐ ▼ ▼ ▼ ┌──────┐┌──────┐┌──────┐ │Scout ││Scout ││Scout │ │ auth ││ api ││ db │ └──┬───┘└──┬───┘└──┬───┘ │ │ │ └───────┼───────┘ ▼ ┌──────────────────────┐ │ Combined Result │ └──────────────────────┘ ``` ### Chain Mode ``` ┌─────────────────┐ │ Main Agent │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ subagent tool │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ Step 1: Scout │ └────────┬────────┘ │ {previous} = scout output ▼ ┌─────────────────┐ │ Step 2: Planner │ └────────┬────────┘ │ {previous} = planner output ▼ ┌─────────────────┐ │ Step 3: Worker │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ Chain Result │ └─────────────────┘ ``` ### Workflow Command Expansion ``` /implement add Redis │ ▼ ┌─────────────────────────────────────────┐ │ Expands to chain: │ │ 1. scout: "find code for add Redis" │ │ 2. planner: "plan using {previous}" │ │ 3. worker: "implement {previous}" │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ Chain Execution │ │ │ │ scout ──► planner ──► worker │ │ (haiku) (sonnet) (sonnet) │ └─────────────────────────────────────────┘ ```
## Agent Definitions Agents are markdown files with YAML frontmatter: ```markdown --- name: my-agent description: What this agent does tools: read, grep, find, ls model: claude-haiku-4-5 --- System prompt for the agent goes here. ``` **Locations:** - `~/.pi/agent/agents/*.md` - User-level (global) - `.pi/agents/*.md` - Project-level (only loaded if `agentScope` includes `"project"`) ## Sample Agents | Agent | Purpose | Model | |-------|---------|-------| | `scout` | Fast codebase recon, returns compressed context | Haiku | | `planner` | Creates implementation plans from context | Sonnet | | `reviewer` | Code review for quality/security | Sonnet | | `worker` | General-purpose with full capabilities | Sonnet | ## Workflow Commands Commands are prompt templates that invoke the subagent tool: | Command | Flow | |---------|------| | `/implement ` | scout -> planner -> worker | | `/scout-and-plan ` | scout -> planner | | `/implement-and-review ` | worker -> reviewer -> worker | ## Limitations - No timeout/cancellation (subprocess limitation) - Output truncated to 500 lines / 50KB per agent - Agents discovered fresh on each invocation