1. Built-In Agents
⚠️ Built-in agents are for internal workflow routing ONLY. When the user asks for custom, specialized, or uniquely-voiced agents, use the Agents skill (section 4 below) instead.
Use Task(subagent_type="AgentType") with these specialized agents:
| Agent Type |
Specialization |
When to Use |
Engineer |
TDD implementation, code changes |
Code-heavy tasks requiring tests |
Architect |
System design, structure decisions |
Architecture planning, design specs |
Algorithm |
ISC optimization, criteria work |
ISC-specialized verification |
Explore |
Fast codebase search |
Quick file/pattern discovery |
Plan |
Implementation strategy |
Design before execution |
Always include: Full context, effort budget, expected output format.
2. Worktree-Isolated Agents
Run agents in their own git worktree with isolation: "worktree" for file-safe parallelism:
Task(subagent_type="Engineer", isolation: "worktree", prompt="...")
- Each agent gets its own working tree — no file conflicts with other agents
- Worktree auto-created on spawn, auto-cleaned when agent finishes (unless changes made)
- Use when multiple agents edit the same files or for competing approaches
- Can combine with
run_in_background: true for non-blocking isolated work
- Built-in agents with
isolation: worktree in frontmatter (Engineer, Architect) auto-isolate on every spawn
3. Background Agents
Run agents with run_in_background: true for non-blocking parallel work:
Task(subagent_type="Engineer", run_in_background: true, prompt="...")
- Use when results aren't needed immediately
- Check output with
Read tool on the output_file path
- Ideal for: research, long builds, parallel investigations
3. Foreground Agents
Standard Task() calls that block until complete:
- Use when you need the result before proceeding
- Use for sequential dependencies
- Default mode — most common
4. Custom Agents (via Agents Skill)
Trigger: "custom agents", "spin up agents", "launch agents", "specialized agents"
Action: Invoke the Agents skill → run ComposeAgent.ts → launch with Task(subagent_type="general-purpose")
# Step 1: Compose agent identity
bun run ~/.claude/skills/Agents/Tools/ComposeAgent.ts --traits "security,skeptical,thorough" --task "Review auth" --output json
# Step 2: Launch with composed prompt
Task(subagent_type="general-purpose", prompt=<ComposeAgent JSON .prompt field>)
- Each agent gets unique personality, voice, and color via ComposeAgent
- Use DIFFERENT trait combinations for each agent to get unique voices
- Never use built-in agent types (Engineer, Architect) for custom work
- Ideal for: domain experts, adversarial reviewers, creative brainstormers, parallel analysis
5. Agent Teams (via TeamCreate)
Trigger: "create an agent team", "agent team", "swarm", "team of agents"
Action: Use TeamCreate tool → TaskCreate → spawn teammates via Task(team_name=...) → coordinate via SendMessage
1. TeamCreate(team_name="my-project") # Creates team + task list
2. TaskCreate(subject="Implement auth module") # Create team tasks
3. Task(subagent_type="Engineer", team_name="my-project", name="auth-engineer") # Spawn teammate
4. TaskUpdate(taskId="1", owner="auth-engineer") # Assign task
5. SendMessage(type="message", recipient="auth-engineer", content="...") # Coordinate
This is a COMPLETELY DIFFERENT system from custom agents:
- Custom agents (Agents skill) = fire-and-forget parallel workers, no shared state
- Agent teams (TeamCreate) = persistent coordinated teams with shared task lists, messaging, multi-turn
Team Guidelines:
- Use for 3+ independently workable criteria at Extended+
- Large complex coding tasks benefit most
- Each teammate works independently on assigned tasks via shared task list
- Parent coordinates via
SendMessage, reconciles results
- Teammates go idle between turns — send messages to wake them
When to Use Teams vs Subagents (Decision Matrix)
| Factor |
Subagents (Task) |
Agent Teams (TeamCreate) |
| Communication |
Fire-and-forget, no peer messaging |
Persistent messaging between teammates |
| Context |
Fresh context each spawn, limited window |
Full context window per teammate, preserved across turns |
| Coordination |
Parent collects results, no shared state |
Shared task list, direct peer DMs, idle/wake cycle |
| Duration |
Single-turn execution |
Multi-turn, iterative work with course corrections |
| Overhead |
Low — spawn and forget |
Higher — team setup, task creation, message routing |
| Best for |
Parallel research, one-shot analysis, simple delegation |
Complex multi-file changes, iterative debugging, cross-layer coordination |
Decision rule: If agents need to talk to each other or iterate on shared work → Teams. If each agent does independent one-shot work → Subagents.
Concrete examples:
- "Research 4 topics in parallel" → Subagents (independent, no coordination needed)
- "Build a feature spanning API + UI + tests with shared state" → Teams (cross-layer, needs coordination)
- "Run 10 file updates with same pattern" → Subagents (parallel, identical, independent)
- "Debug a complex issue with competing hypotheses" → Teams (need to share findings, adjust approach)
6. Parallel Task Dispatch
For N identical operations (e.g., updating 10 files with the same pattern):
- Create N
Task() calls in a single message (parallel launch)
- Each agent gets one unit of work
- Results collected when all complete