diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index 59720b3..ce32527 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -11,8 +11,8 @@
"plugins": [
{
"name": "compound-engineering",
- "description": "AI-powered development tools that get smarter with every use. Make each unit of engineering work easier than the last. Includes 29 specialized agents, 24 commands, and 16 skills.",
- "version": "2.29.0",
+ "description": "AI-powered development tools that get smarter with every use. Make each unit of engineering work easier than the last. Includes 29 specialized agents, 25 commands, and 16 skills.",
+ "version": "2.30.0",
"author": {
"name": "Kieran Klaassen",
"url": "https://github.com/kieranklaassen",
diff --git a/plugins/compound-engineering/.claude-plugin/plugin.json b/plugins/compound-engineering/.claude-plugin/plugin.json
index 3b52617..842ed85 100644
--- a/plugins/compound-engineering/.claude-plugin/plugin.json
+++ b/plugins/compound-engineering/.claude-plugin/plugin.json
@@ -1,7 +1,7 @@
{
"name": "compound-engineering",
- "version": "2.29.0",
- "description": "AI-powered development tools. 29 agents, 24 commands, 16 skills, 1 MCP server for code review, research, design, and workflow automation.",
+ "version": "2.30.0",
+ "description": "AI-powered development tools. 29 agents, 25 commands, 16 skills, 1 MCP server for code review, research, design, and workflow automation.",
"author": {
"name": "Kieran Klaassen",
"email": "kieran@every.to",
diff --git a/plugins/compound-engineering/CHANGELOG.md b/plugins/compound-engineering/CHANGELOG.md
index b4bebc1..e55f5c7 100644
--- a/plugins/compound-engineering/CHANGELOG.md
+++ b/plugins/compound-engineering/CHANGELOG.md
@@ -5,6 +5,25 @@ All notable changes to the compound-engineering plugin will be documented in thi
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2.30.0] - 2026-02-05
+
+### Added
+
+- **`orchestrating-swarms` skill** - Comprehensive guide to multi-agent orchestration
+ - Covers primitives: Agent, Team, Teammate, Leader, Task, Inbox, Message, Backend
+ - Documents two spawning methods: subagents vs teammates
+ - Explains all 13 TeammateTool operations
+ - Includes orchestration patterns: Parallel Specialists, Pipeline, Self-Organizing Swarm
+ - Details spawn backends: in-process, tmux, iterm2
+ - Provides complete workflow examples
+- **`/slfg` command** - Swarm-enabled variant of `/lfg` that uses swarm mode for parallel execution
+
+### Changed
+
+- **`/workflows:work` command** - Added optional Swarm Mode section for parallel execution with coordinated agents
+
+---
+
## [2.29.0] - 2026-02-04
### Added
diff --git a/plugins/compound-engineering/README.md b/plugins/compound-engineering/README.md
index 77f60b8..94398ce 100644
--- a/plugins/compound-engineering/README.md
+++ b/plugins/compound-engineering/README.md
@@ -7,7 +7,7 @@ AI-powered development tools that get smarter with every use. Make each unit of
| Component | Count |
|-----------|-------|
| Agents | 29 |
-| Commands | 24 |
+| Commands | 25 |
| Skills | 16 |
| MCP Servers | 1 |
@@ -87,6 +87,8 @@ Core workflow commands use `workflows:` prefix to avoid collisions with built-in
| Command | Description |
|---------|-------------|
+| `/lfg` | Full autonomous engineering workflow |
+| `/slfg` | Full autonomous workflow with swarm mode for parallel execution |
| `/deepen-plan` | Enhance plans with parallel research agents for each section |
| `/changelog` | Create engaging changelogs for recent merges |
| `/create-agent-skill` | Create or edit Claude Code skills |
@@ -127,10 +129,17 @@ Core workflow commands use `workflows:` prefix to avoid collisions with built-in
| Skill | Description |
|-------|-------------|
+| `brainstorming` | Guided ideation for exploring requirements and approaches |
| `every-style-editor` | Review copy for Every's style guide compliance |
| `file-todos` | File-based todo tracking system |
| `git-worktree` | Manage Git worktrees for parallel development |
+### Multi-Agent Orchestration
+
+| Skill | Description |
+|-------|-------------|
+| `orchestrating-swarms` | Comprehensive guide to multi-agent swarm orchestration |
+
### File Transfer
| Skill | Description |
diff --git a/plugins/compound-engineering/commands/slfg.md b/plugins/compound-engineering/commands/slfg.md
new file mode 100644
index 0000000..3993855
--- /dev/null
+++ b/plugins/compound-engineering/commands/slfg.md
@@ -0,0 +1,31 @@
+---
+name: slfg
+description: Full autonomous engineering workflow using swarm mode for parallel execution
+argument-hint: "[feature description]"
+---
+
+Swarm-enabled LFG. Run these steps in order, parallelizing where indicated.
+
+## Sequential Phase
+
+1. `/ralph-wiggum:ralph-loop "finish all slash commands" --completion-promise "DONE"`
+2. `/workflows:plan $ARGUMENTS`
+3. `/compound-engineering:deepen-plan`
+4. `/workflows:work` — **Use swarm mode**: Make a Task list and launch an army of agent swarm subagents to build the plan
+
+## Parallel Phase
+
+After work completes, launch steps 5 and 6 as **parallel swarm agents** (both only need code to be written):
+
+5. `/workflows:review` — spawn as background Task agent
+6. `/compound-engineering:test-browser` — spawn as background Task agent
+
+Wait for both to complete before continuing.
+
+## Finalize Phase
+
+7. `/compound-engineering:resolve_todo_parallel` — resolve any findings from the review
+8. `/compound-engineering:feature-video` — record the final walkthrough and add to PR
+9. Output `DONE` when video is in PR
+
+Start with step 1 now.
diff --git a/plugins/compound-engineering/commands/workflows/work.md b/plugins/compound-engineering/commands/workflows/work.md
index 36f95ae..230300c 100644
--- a/plugins/compound-engineering/commands/workflows/work.md
+++ b/plugins/compound-engineering/commands/workflows/work.md
@@ -292,6 +292,76 @@ This command takes a work document (plan, specification, or todo file) and execu
---
+## Swarm Mode (Optional)
+
+For complex plans with multiple independent workstreams, enable swarm mode for parallel execution with coordinated agents.
+
+### When to Use Swarm Mode
+
+| Use Swarm Mode when... | Use Standard Mode when... |
+|------------------------|---------------------------|
+| Plan has 5+ independent tasks | Plan is linear/sequential |
+| Multiple specialists needed (review + test + implement) | Single-focus work |
+| Want maximum parallelism | Simpler mental model preferred |
+| Large feature with clear phases | Small feature or bug fix |
+
+### Enabling Swarm Mode
+
+To trigger swarm execution, say:
+
+> "Make a Task list and launch an army of agent swarm subagents to build the plan"
+
+Or explicitly request: "Use swarm mode for this work"
+
+### Swarm Workflow
+
+When swarm mode is enabled, the workflow changes:
+
+1. **Create Team**
+ ```
+ Teammate({ operation: "spawnTeam", team_name: "work-{timestamp}" })
+ ```
+
+2. **Create Task List with Dependencies**
+ - Parse plan into TaskCreate items
+ - Set up blockedBy relationships for sequential dependencies
+ - Independent tasks have no blockers (can run in parallel)
+
+3. **Spawn Specialized Teammates**
+ ```
+ Task({
+ team_name: "work-{timestamp}",
+ name: "implementer",
+ subagent_type: "general-purpose",
+ prompt: "Claim implementation tasks, execute, mark complete",
+ run_in_background: true
+ })
+
+ Task({
+ team_name: "work-{timestamp}",
+ name: "tester",
+ subagent_type: "general-purpose",
+ prompt: "Claim testing tasks, run tests, mark complete",
+ run_in_background: true
+ })
+ ```
+
+4. **Coordinate and Monitor**
+ - Team lead monitors task completion
+ - Spawn additional workers as phases unblock
+ - Handle plan approval if required
+
+5. **Cleanup**
+ ```
+ Teammate({ operation: "requestShutdown", target_agent_id: "implementer" })
+ Teammate({ operation: "requestShutdown", target_agent_id: "tester" })
+ Teammate({ operation: "cleanup" })
+ ```
+
+See the `orchestrating-swarms` skill for detailed swarm patterns and best practices.
+
+---
+
## Key Principles
### Start Fast, Execute Faster
diff --git a/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md b/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md
new file mode 100644
index 0000000..0748e28
--- /dev/null
+++ b/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md
@@ -0,0 +1,1717 @@
+---
+name: orchestrating-swarms
+description: This skill should be used when orchestrating multi-agent swarms using Claude Code's TeammateTool and Task system. It applies when coordinating multiple agents, running parallel code reviews, creating pipeline workflows with dependencies, building self-organizing task queues, or any task benefiting from divide-and-conquer patterns.
+---
+
+# Claude Code Swarm Orchestration
+
+Master multi-agent orchestration using Claude Code's TeammateTool and Task system.
+
+---
+
+## Primitives
+
+| Primitive | What It Is | File Location |
+|-----------|-----------|---------------|
+| **Agent** | A Claude instance that can use tools. You are an agent. Subagents are agents you spawn. | N/A (process) |
+| **Team** | A named group of agents working together. One leader, multiple teammates. | `~/.claude/teams/{name}/config.json` |
+| **Teammate** | An agent that joined a team. Has a name, color, inbox. Spawned via Task with `team_name` + `name`. | Listed in team config |
+| **Leader** | The agent that created the team. Receives teammate messages, approves plans/shutdowns. | First member in config |
+| **Task** | A work item with subject, description, status, owner, and dependencies. | `~/.claude/tasks/{team}/N.json` |
+| **Inbox** | JSON file where an agent receives messages from teammates. | `~/.claude/teams/{name}/inboxes/{agent}.json` |
+| **Message** | A JSON object sent between agents. Can be text or structured (shutdown_request, idle_notification, etc). | Stored in inbox files |
+| **Backend** | How teammates run. Auto-detected: `in-process` (same Node.js, invisible), `tmux` (separate panes, visible), `iterm2` (split panes in iTerm2). See [Spawn Backends](#spawn-backends). | Auto-detected based on environment |
+
+### How They Connect
+
+```mermaid
+flowchart TB
+ subgraph TEAM[TEAM]
+ Leader[Leader - you]
+ T1[Teammate 1]
+ T2[Teammate 2]
+
+ Leader <-->|messages via inbox| T1
+ Leader <-->|messages via inbox| T2
+ T1 <-.->|can message| T2
+ end
+
+ subgraph TASKS[TASK LIST]
+ Task1["#1 completed: Research
owner: teammate1"]
+ Task2["#2 in_progress: Implement
owner: teammate2"]
+ Task3["#3 pending: Test
blocked by #2"]
+ end
+
+ T1 --> Task1
+ T2 --> Task2
+ Task2 -.->|unblocks| Task3
+```
+
+### Lifecycle
+
+```mermaid
+flowchart LR
+ A[1. Create Team] --> B[2. Create Tasks]
+ B --> C[3. Spawn Teammates]
+ C --> D[4. Work]
+ D --> E[5. Coordinate]
+ E --> F[6. Shutdown]
+ F --> G[7. Cleanup]
+```
+
+### Message Flow
+
+```mermaid
+sequenceDiagram
+ participant L as Leader
+ participant T1 as Teammate 1
+ participant T2 as Teammate 2
+ participant Tasks as Task List
+
+ L->>Tasks: TaskCreate (3 tasks)
+ L->>T1: spawn with prompt
+ L->>T2: spawn with prompt
+
+ T1->>Tasks: claim task #1
+ T2->>Tasks: claim task #2
+
+ T1->>Tasks: complete #1
+ T1->>L: send findings (inbox)
+
+ Note over Tasks: #3 auto-unblocks
+
+ T2->>Tasks: complete #2
+ T2->>L: send findings (inbox)
+
+ L->>T1: requestShutdown
+ T1->>L: approveShutdown
+ L->>T2: requestShutdown
+ T2->>L: approveShutdown
+
+ L->>L: cleanup
+```
+
+---
+
+## Table of Contents
+
+1. [Core Architecture](#core-architecture)
+2. [Two Ways to Spawn Agents](#two-ways-to-spawn-agents)
+3. [Built-in Agent Types](#built-in-agent-types)
+4. [Plugin Agent Types](#plugin-agent-types)
+5. [TeammateTool Operations](#teammatetool-operations)
+6. [Task System Integration](#task-system-integration)
+7. [Message Formats](#message-formats)
+8. [Orchestration Patterns](#orchestration-patterns)
+9. [Environment Variables](#environment-variables)
+10. [Spawn Backends](#spawn-backends)
+11. [Error Handling](#error-handling)
+12. [Complete Workflows](#complete-workflows)
+
+---
+
+## Core Architecture
+
+### How Swarms Work
+
+A swarm consists of:
+- **Leader** (you) - Creates team, spawns workers, coordinates work
+- **Teammates** (spawned agents) - Execute tasks, report back
+- **Task List** - Shared work queue with dependencies
+- **Inboxes** - JSON files for inter-agent messaging
+
+### File Structure
+
+```
+~/.claude/teams/{team-name}/
+├── config.json # Team metadata and member list
+└── inboxes/
+ ├── team-lead.json # Leader's inbox
+ ├── worker-1.json # Worker 1's inbox
+ └── worker-2.json # Worker 2's inbox
+
+~/.claude/tasks/{team-name}/
+├── 1.json # Task #1
+├── 2.json # Task #2
+└── 3.json # Task #3
+```
+
+### Team Config Structure
+
+```json
+{
+ "name": "my-project",
+ "description": "Working on feature X",
+ "leadAgentId": "team-lead@my-project",
+ "createdAt": 1706000000000,
+ "members": [
+ {
+ "agentId": "team-lead@my-project",
+ "name": "team-lead",
+ "agentType": "team-lead",
+ "color": "#4A90D9",
+ "joinedAt": 1706000000000,
+ "backendType": "in-process"
+ },
+ {
+ "agentId": "worker-1@my-project",
+ "name": "worker-1",
+ "agentType": "Explore",
+ "model": "haiku",
+ "prompt": "Analyze the codebase structure...",
+ "color": "#D94A4A",
+ "planModeRequired": false,
+ "joinedAt": 1706000001000,
+ "tmuxPaneId": "in-process",
+ "cwd": "/Users/me/project",
+ "backendType": "in-process"
+ }
+ ]
+}
+```
+
+---
+
+## Two Ways to Spawn Agents
+
+### Method 1: Task Tool (Subagents)
+
+Use Task for **short-lived, focused work** that returns a result:
+
+```javascript
+Task({
+ subagent_type: "Explore",
+ description: "Find auth files",
+ prompt: "Find all authentication-related files in this codebase",
+ model: "haiku" // Optional: haiku, sonnet, opus
+})
+```
+
+**Characteristics:**
+- Runs synchronously (blocks until complete) or async with `run_in_background: true`
+- Returns result directly to you
+- No team membership required
+- Best for: searches, analysis, focused research
+
+### Method 2: Task Tool + team_name + name (Teammates)
+
+Use Task with `team_name` and `name` to **spawn persistent teammates**:
+
+```javascript
+// First create a team
+Teammate({ operation: "spawnTeam", team_name: "my-project" })
+
+// Then spawn a teammate into that team
+Task({
+ team_name: "my-project", // Required: which team to join
+ name: "security-reviewer", // Required: teammate's name
+ subagent_type: "security-sentinel",
+ prompt: "Review all authentication code for vulnerabilities. Send findings to team-lead via Teammate write.",
+ run_in_background: true // Teammates usually run in background
+})
+```
+
+**Characteristics:**
+- Joins team, appears in `config.json`
+- Communicates via inbox messages
+- Can claim tasks from shared task list
+- Persists until shutdown
+- Best for: parallel work, ongoing collaboration, pipeline stages
+
+### Key Difference
+
+| Aspect | Task (subagent) | Task + team_name + name (teammate) |
+|--------|-----------------|-----------------------------------|
+| Lifespan | Until task complete | Until shutdown requested |
+| Communication | Return value | Inbox messages |
+| Task access | None | Shared task list |
+| Team membership | No | Yes |
+| Coordination | One-off | Ongoing |
+
+---
+
+## Built-in Agent Types
+
+These are always available without plugins:
+
+### Bash
+```javascript
+Task({
+ subagent_type: "Bash",
+ description: "Run git commands",
+ prompt: "Check git status and show recent commits"
+})
+```
+- **Tools:** Bash only
+- **Model:** Inherits from parent
+- **Best for:** Git operations, command execution, system tasks
+
+### Explore
+```javascript
+Task({
+ subagent_type: "Explore",
+ description: "Find API endpoints",
+ prompt: "Find all API endpoints in this codebase. Be very thorough.",
+ model: "haiku" // Fast and cheap
+})
+```
+- **Tools:** All read-only tools (no Edit, Write, NotebookEdit, Task)
+- **Model:** Haiku (optimized for speed)
+- **Best for:** Codebase exploration, file searches, code understanding
+- **Thoroughness levels:** "quick", "medium", "very thorough"
+
+### Plan
+```javascript
+Task({
+ subagent_type: "Plan",
+ description: "Design auth system",
+ prompt: "Create an implementation plan for adding OAuth2 authentication"
+})
+```
+- **Tools:** All read-only tools
+- **Model:** Inherits from parent
+- **Best for:** Architecture planning, implementation strategies
+
+### general-purpose
+```javascript
+Task({
+ subagent_type: "general-purpose",
+ description: "Research and implement",
+ prompt: "Research React Query best practices and implement caching for the user API"
+})
+```
+- **Tools:** All tools (*)
+- **Model:** Inherits from parent
+- **Best for:** Multi-step tasks, research + action combinations
+
+### claude-code-guide
+```javascript
+Task({
+ subagent_type: "claude-code-guide",
+ description: "Help with Claude Code",
+ prompt: "How do I configure MCP servers?"
+})
+```
+- **Tools:** Read-only + WebFetch + WebSearch
+- **Best for:** Questions about Claude Code, Agent SDK, Anthropic API
+
+### statusline-setup
+```javascript
+Task({
+ subagent_type: "statusline-setup",
+ description: "Configure status line",
+ prompt: "Set up a status line showing git branch and node version"
+})
+```
+- **Tools:** Read, Edit only
+- **Model:** Sonnet
+- **Best for:** Configuring Claude Code status line
+
+---
+
+## Plugin Agent Types
+
+From the `compound-engineering` plugin (examples):
+
+### Review Agents
+```javascript
+// Security review
+Task({
+ subagent_type: "compound-engineering:review:security-sentinel",
+ description: "Security audit",
+ prompt: "Audit this PR for security vulnerabilities"
+})
+
+// Performance review
+Task({
+ subagent_type: "compound-engineering:review:performance-oracle",
+ description: "Performance check",
+ prompt: "Analyze this code for performance bottlenecks"
+})
+
+// Rails code review
+Task({
+ subagent_type: "compound-engineering:review:kieran-rails-reviewer",
+ description: "Rails review",
+ prompt: "Review this Rails code for best practices"
+})
+
+// Architecture review
+Task({
+ subagent_type: "compound-engineering:review:architecture-strategist",
+ description: "Architecture review",
+ prompt: "Review the system architecture of the authentication module"
+})
+
+// Code simplicity
+Task({
+ subagent_type: "compound-engineering:review:code-simplicity-reviewer",
+ description: "Simplicity check",
+ prompt: "Check if this implementation can be simplified"
+})
+```
+
+**All review agents from compound-engineering:**
+- `agent-native-reviewer` - Ensures features work for agents too
+- `architecture-strategist` - Architectural compliance
+- `code-simplicity-reviewer` - YAGNI and minimalism
+- `data-integrity-guardian` - Database and data safety
+- `data-migration-expert` - Migration validation
+- `deployment-verification-agent` - Pre-deploy checklists
+- `dhh-rails-reviewer` - DHH/37signals Rails style
+- `julik-frontend-races-reviewer` - JavaScript race conditions
+- `kieran-python-reviewer` - Python best practices
+- `kieran-rails-reviewer` - Rails best practices
+- `kieran-typescript-reviewer` - TypeScript best practices
+- `pattern-recognition-specialist` - Design patterns and anti-patterns
+- `performance-oracle` - Performance analysis
+- `security-sentinel` - Security vulnerabilities
+
+### Research Agents
+```javascript
+// Best practices research
+Task({
+ subagent_type: "compound-engineering:research:best-practices-researcher",
+ description: "Research auth best practices",
+ prompt: "Research current best practices for JWT authentication in Rails 2024-2026"
+})
+
+// Framework documentation
+Task({
+ subagent_type: "compound-engineering:research:framework-docs-researcher",
+ description: "Research Active Storage",
+ prompt: "Gather comprehensive documentation about Active Storage file uploads"
+})
+
+// Git history analysis
+Task({
+ subagent_type: "compound-engineering:research:git-history-analyzer",
+ description: "Analyze auth history",
+ prompt: "Analyze the git history of the authentication module to understand its evolution"
+})
+```
+
+**All research agents:**
+- `best-practices-researcher` - External best practices
+- `framework-docs-researcher` - Framework documentation
+- `git-history-analyzer` - Code archaeology
+- `learnings-researcher` - Search docs/solutions/
+- `repo-research-analyst` - Repository patterns
+
+### Design Agents
+```javascript
+Task({
+ subagent_type: "compound-engineering:design:figma-design-sync",
+ description: "Sync with Figma",
+ prompt: "Compare implementation with Figma design at [URL]"
+})
+```
+
+### Workflow Agents
+```javascript
+Task({
+ subagent_type: "compound-engineering:workflow:bug-reproduction-validator",
+ description: "Validate bug",
+ prompt: "Reproduce and validate this reported bug: [description]"
+})
+```
+
+---
+
+## TeammateTool Operations
+
+### 1. spawnTeam - Create a Team
+
+```javascript
+Teammate({
+ operation: "spawnTeam",
+ team_name: "feature-auth",
+ description: "Implementing OAuth2 authentication"
+})
+```
+
+**Creates:**
+- `~/.claude/teams/feature-auth/config.json`
+- `~/.claude/tasks/feature-auth/` directory
+- You become the team leader
+
+### 2. discoverTeams - List Available Teams
+
+```javascript
+Teammate({ operation: "discoverTeams" })
+```
+
+**Returns:** List of teams you can join (not already a member of)
+
+### 3. requestJoin - Request to Join Team
+
+```javascript
+Teammate({
+ operation: "requestJoin",
+ team_name: "feature-auth",
+ proposed_name: "helper",
+ capabilities: "I can help with code review and testing"
+})
+```
+
+### 4. approveJoin - Accept Join Request (Leader Only)
+
+When you receive a `join_request` message:
+```json
+{"type": "join_request", "proposedName": "helper", "requestId": "join-123", ...}
+```
+
+Approve it:
+```javascript
+Teammate({
+ operation: "approveJoin",
+ target_agent_id: "helper",
+ request_id: "join-123"
+})
+```
+
+### 5. rejectJoin - Decline Join Request (Leader Only)
+
+```javascript
+Teammate({
+ operation: "rejectJoin",
+ target_agent_id: "helper",
+ request_id: "join-123",
+ reason: "Team is at capacity"
+})
+```
+
+### 6. write - Message One Teammate
+
+```javascript
+Teammate({
+ operation: "write",
+ target_agent_id: "security-reviewer",
+ value: "Please prioritize the authentication module. The deadline is tomorrow."
+})
+```
+
+**Important for teammates:** Your text output is NOT visible to the team. You MUST use `write` to communicate.
+
+### 7. broadcast - Message ALL Teammates
+
+```javascript
+Teammate({
+ operation: "broadcast",
+ name: "team-lead", // Your name
+ value: "Status check: Please report your progress"
+})
+```
+
+**WARNING:** Broadcasting is expensive - sends N separate messages for N teammates. Prefer `write` to specific teammates.
+
+**When to broadcast:**
+- Critical issues requiring immediate attention
+- Major announcements affecting everyone
+
+**When NOT to broadcast:**
+- Responding to one teammate
+- Normal back-and-forth
+- Information relevant to only some teammates
+
+### 8. requestShutdown - Ask Teammate to Exit (Leader Only)
+
+```javascript
+Teammate({
+ operation: "requestShutdown",
+ target_agent_id: "security-reviewer",
+ reason: "All tasks complete, wrapping up"
+})
+```
+
+### 9. approveShutdown - Accept Shutdown (Teammate Only)
+
+When you receive a `shutdown_request` message:
+```json
+{"type": "shutdown_request", "requestId": "shutdown-123", "from": "team-lead", "reason": "Done"}
+```
+
+**MUST** call:
+```javascript
+Teammate({
+ operation: "approveShutdown",
+ request_id: "shutdown-123"
+})
+```
+
+This sends confirmation and terminates your process.
+
+### 10. rejectShutdown - Decline Shutdown (Teammate Only)
+
+```javascript
+Teammate({
+ operation: "rejectShutdown",
+ request_id: "shutdown-123",
+ reason: "Still working on task #3, need 5 more minutes"
+})
+```
+
+### 11. approvePlan - Approve Teammate's Plan (Leader Only)
+
+When teammate with `plan_mode_required` sends a plan:
+```json
+{"type": "plan_approval_request", "from": "architect", "requestId": "plan-456", ...}
+```
+
+Approve:
+```javascript
+Teammate({
+ operation: "approvePlan",
+ target_agent_id: "architect",
+ request_id: "plan-456"
+})
+```
+
+### 12. rejectPlan - Reject Plan with Feedback (Leader Only)
+
+```javascript
+Teammate({
+ operation: "rejectPlan",
+ target_agent_id: "architect",
+ request_id: "plan-456",
+ feedback: "Please add error handling for the API calls and consider rate limiting"
+})
+```
+
+### 13. cleanup - Remove Team Resources
+
+```javascript
+Teammate({ operation: "cleanup" })
+```
+
+**Removes:**
+- `~/.claude/teams/{team-name}/` directory
+- `~/.claude/tasks/{team-name}/` directory
+
+**IMPORTANT:** Will fail if teammates are still active. Use `requestShutdown` first.
+
+---
+
+## Task System Integration
+
+### TaskCreate - Create Work Items
+
+```javascript
+TaskCreate({
+ subject: "Review authentication module",
+ description: "Review all files in app/services/auth/ for security vulnerabilities",
+ activeForm: "Reviewing auth module..." // Shown in spinner when in_progress
+})
+```
+
+### TaskList - See All Tasks
+
+```javascript
+TaskList()
+```
+
+Returns:
+```
+#1 [completed] Analyze codebase structure
+#2 [in_progress] Review authentication module (owner: security-reviewer)
+#3 [pending] Generate summary report [blocked by #2]
+```
+
+### TaskGet - Get Task Details
+
+```javascript
+TaskGet({ taskId: "2" })
+```
+
+Returns full task with description, status, blockedBy, etc.
+
+### TaskUpdate - Update Task Status
+
+```javascript
+// Claim a task
+TaskUpdate({ taskId: "2", owner: "security-reviewer" })
+
+// Start working
+TaskUpdate({ taskId: "2", status: "in_progress" })
+
+// Mark complete
+TaskUpdate({ taskId: "2", status: "completed" })
+
+// Set up dependencies
+TaskUpdate({ taskId: "3", addBlockedBy: ["1", "2"] })
+```
+
+### Task Dependencies
+
+When a blocking task is completed, blocked tasks are automatically unblocked:
+
+```javascript
+// Create pipeline
+TaskCreate({ subject: "Step 1: Research" }) // #1
+TaskCreate({ subject: "Step 2: Implement" }) // #2
+TaskCreate({ subject: "Step 3: Test" }) // #3
+TaskCreate({ subject: "Step 4: Deploy" }) // #4
+
+// Set up dependencies
+TaskUpdate({ taskId: "2", addBlockedBy: ["1"] }) // #2 waits for #1
+TaskUpdate({ taskId: "3", addBlockedBy: ["2"] }) // #3 waits for #2
+TaskUpdate({ taskId: "4", addBlockedBy: ["3"] }) // #4 waits for #3
+
+// When #1 completes, #2 auto-unblocks
+// When #2 completes, #3 auto-unblocks
+// etc.
+```
+
+### Task File Structure
+
+`~/.claude/tasks/{team-name}/1.json`:
+```json
+{
+ "id": "1",
+ "subject": "Review authentication module",
+ "description": "Review all files in app/services/auth/...",
+ "status": "in_progress",
+ "owner": "security-reviewer",
+ "activeForm": "Reviewing auth module...",
+ "blockedBy": [],
+ "blocks": ["3"],
+ "createdAt": 1706000000000,
+ "updatedAt": 1706000001000
+}
+```
+
+---
+
+## Message Formats
+
+### Regular Message
+
+```json
+{
+ "from": "team-lead",
+ "text": "Please prioritize the auth module",
+ "timestamp": "2026-01-25T23:38:32.588Z",
+ "read": false
+}
+```
+
+### Structured Messages (JSON in text field)
+
+#### Shutdown Request
+```json
+{
+ "type": "shutdown_request",
+ "requestId": "shutdown-abc123@worker-1",
+ "from": "team-lead",
+ "reason": "All tasks complete",
+ "timestamp": "2026-01-25T23:38:32.588Z"
+}
+```
+
+#### Shutdown Approved
+```json
+{
+ "type": "shutdown_approved",
+ "requestId": "shutdown-abc123@worker-1",
+ "from": "worker-1",
+ "paneId": "%5",
+ "backendType": "in-process",
+ "timestamp": "2026-01-25T23:39:00.000Z"
+}
+```
+
+#### Idle Notification (auto-sent when teammate stops)
+```json
+{
+ "type": "idle_notification",
+ "from": "worker-1",
+ "timestamp": "2026-01-25T23:40:00.000Z",
+ "completedTaskId": "2",
+ "completedStatus": "completed"
+}
+```
+
+#### Task Completed
+```json
+{
+ "type": "task_completed",
+ "from": "worker-1",
+ "taskId": "2",
+ "taskSubject": "Review authentication module",
+ "timestamp": "2026-01-25T23:40:00.000Z"
+}
+```
+
+#### Plan Approval Request
+```json
+{
+ "type": "plan_approval_request",
+ "from": "architect",
+ "requestId": "plan-xyz789",
+ "planContent": "# Implementation Plan\n\n1. ...",
+ "timestamp": "2026-01-25T23:41:00.000Z"
+}
+```
+
+#### Join Request
+```json
+{
+ "type": "join_request",
+ "proposedName": "helper",
+ "requestId": "join-abc123",
+ "capabilities": "Code review and testing",
+ "timestamp": "2026-01-25T23:42:00.000Z"
+}
+```
+
+#### Permission Request (for sandbox/tool permissions)
+```json
+{
+ "type": "permission_request",
+ "requestId": "perm-123",
+ "workerId": "worker-1@my-project",
+ "workerName": "worker-1",
+ "workerColor": "#4A90D9",
+ "toolName": "Bash",
+ "toolUseId": "toolu_abc123",
+ "description": "Run npm install",
+ "input": {"command": "npm install"},
+ "permissionSuggestions": ["Bash(npm *)"],
+ "createdAt": 1706000000000
+}
+```
+
+---
+
+## Orchestration Patterns
+
+### Pattern 1: Parallel Specialists (Leader Pattern)
+
+Multiple specialists review code simultaneously:
+
+```javascript
+// 1. Create team
+Teammate({ operation: "spawnTeam", team_name: "code-review" })
+
+// 2. Spawn specialists in parallel (single message, multiple Task calls)
+Task({
+ team_name: "code-review",
+ name: "security",
+ subagent_type: "compound-engineering:review:security-sentinel",
+ prompt: "Review the PR for security vulnerabilities. Focus on: SQL injection, XSS, auth bypass. Send findings to team-lead.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "code-review",
+ name: "performance",
+ subagent_type: "compound-engineering:review:performance-oracle",
+ prompt: "Review the PR for performance issues. Focus on: N+1 queries, memory leaks, slow algorithms. Send findings to team-lead.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "code-review",
+ name: "simplicity",
+ subagent_type: "compound-engineering:review:code-simplicity-reviewer",
+ prompt: "Review the PR for unnecessary complexity. Focus on: over-engineering, premature abstraction, YAGNI violations. Send findings to team-lead.",
+ run_in_background: true
+})
+
+// 3. Wait for results (check inbox)
+// cat ~/.claude/teams/code-review/inboxes/team-lead.json
+
+// 4. Synthesize findings and cleanup
+Teammate({ operation: "requestShutdown", target_agent_id: "security" })
+Teammate({ operation: "requestShutdown", target_agent_id: "performance" })
+Teammate({ operation: "requestShutdown", target_agent_id: "simplicity" })
+// Wait for approvals...
+Teammate({ operation: "cleanup" })
+```
+
+### Pattern 2: Pipeline (Sequential Dependencies)
+
+Each stage depends on the previous:
+
+```javascript
+// 1. Create team and task pipeline
+Teammate({ operation: "spawnTeam", team_name: "feature-pipeline" })
+
+TaskCreate({ subject: "Research", description: "Research best practices for the feature", activeForm: "Researching..." })
+TaskCreate({ subject: "Plan", description: "Create implementation plan based on research", activeForm: "Planning..." })
+TaskCreate({ subject: "Implement", description: "Implement the feature according to plan", activeForm: "Implementing..." })
+TaskCreate({ subject: "Test", description: "Write and run tests for the implementation", activeForm: "Testing..." })
+TaskCreate({ subject: "Review", description: "Final code review before merge", activeForm: "Reviewing..." })
+
+// Set up sequential dependencies
+TaskUpdate({ taskId: "2", addBlockedBy: ["1"] })
+TaskUpdate({ taskId: "3", addBlockedBy: ["2"] })
+TaskUpdate({ taskId: "4", addBlockedBy: ["3"] })
+TaskUpdate({ taskId: "5", addBlockedBy: ["4"] })
+
+// 2. Spawn workers that claim and complete tasks
+Task({
+ team_name: "feature-pipeline",
+ name: "researcher",
+ subagent_type: "compound-engineering:research:best-practices-researcher",
+ prompt: "Claim task #1, research best practices, complete it, send findings to team-lead. Then check for more work.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "feature-pipeline",
+ name: "implementer",
+ subagent_type: "general-purpose",
+ prompt: "Poll TaskList every 30 seconds. When task #3 unblocks, claim it and implement. Then complete and notify team-lead.",
+ run_in_background: true
+})
+
+// Tasks auto-unblock as dependencies complete
+```
+
+### Pattern 3: Swarm (Self-Organizing)
+
+Workers grab available tasks from a pool:
+
+```javascript
+// 1. Create team and task pool
+Teammate({ operation: "spawnTeam", team_name: "file-review-swarm" })
+
+// Create many independent tasks (no dependencies)
+for (const file of ["auth.rb", "user.rb", "api_controller.rb", "payment.rb"]) {
+ TaskCreate({
+ subject: `Review ${file}`,
+ description: `Review ${file} for security and code quality issues`,
+ activeForm: `Reviewing ${file}...`
+ })
+}
+
+// 2. Spawn worker swarm
+Task({
+ team_name: "file-review-swarm",
+ name: "worker-1",
+ subagent_type: "general-purpose",
+ prompt: `
+ You are a swarm worker. Your job:
+ 1. Call TaskList to see available tasks
+ 2. Find a task with status 'pending' and no owner
+ 3. Claim it with TaskUpdate (set owner to your name)
+ 4. Do the work
+ 5. Mark it completed with TaskUpdate
+ 6. Send findings to team-lead via Teammate write
+ 7. Repeat until no tasks remain
+ `,
+ run_in_background: true
+})
+
+Task({
+ team_name: "file-review-swarm",
+ name: "worker-2",
+ subagent_type: "general-purpose",
+ prompt: `[Same prompt as worker-1]`,
+ run_in_background: true
+})
+
+Task({
+ team_name: "file-review-swarm",
+ name: "worker-3",
+ subagent_type: "general-purpose",
+ prompt: `[Same prompt as worker-1]`,
+ run_in_background: true
+})
+
+// Workers race to claim tasks, naturally load-balance
+```
+
+### Pattern 4: Research + Implementation
+
+Research first, then implement:
+
+```javascript
+// 1. Research phase (synchronous, returns results)
+const research = await Task({
+ subagent_type: "compound-engineering:research:best-practices-researcher",
+ description: "Research caching patterns",
+ prompt: "Research best practices for implementing caching in Rails APIs. Include: cache invalidation strategies, Redis vs Memcached, cache key design."
+})
+
+// 2. Use research to guide implementation
+Task({
+ subagent_type: "general-purpose",
+ description: "Implement caching",
+ prompt: `
+ Implement API caching based on this research:
+
+ ${research.content}
+
+ Focus on the user_controller.rb endpoints.
+ `
+})
+```
+
+### Pattern 5: Plan Approval Workflow
+
+Require plan approval before implementation:
+
+```javascript
+// 1. Create team
+Teammate({ operation: "spawnTeam", team_name: "careful-work" })
+
+// 2. Spawn architect with plan_mode_required
+Task({
+ team_name: "careful-work",
+ name: "architect",
+ subagent_type: "Plan",
+ prompt: "Design an implementation plan for adding OAuth2 authentication",
+ mode: "plan", // Requires plan approval
+ run_in_background: true
+})
+
+// 3. Wait for plan approval request
+// You'll receive: {"type": "plan_approval_request", "from": "architect", "requestId": "plan-xxx", ...}
+
+// 4. Review and approve/reject
+Teammate({
+ operation: "approvePlan",
+ target_agent_id: "architect",
+ request_id: "plan-xxx"
+})
+// OR
+Teammate({
+ operation: "rejectPlan",
+ target_agent_id: "architect",
+ request_id: "plan-xxx",
+ feedback: "Please add rate limiting considerations"
+})
+```
+
+### Pattern 6: Coordinated Multi-File Refactoring
+
+```javascript
+// 1. Create team for coordinated refactoring
+Teammate({ operation: "spawnTeam", team_name: "refactor-auth" })
+
+// 2. Create tasks with clear file boundaries
+TaskCreate({
+ subject: "Refactor User model",
+ description: "Extract authentication methods to AuthenticatableUser concern",
+ activeForm: "Refactoring User model..."
+})
+
+TaskCreate({
+ subject: "Refactor Session controller",
+ description: "Update to use new AuthenticatableUser concern",
+ activeForm: "Refactoring Sessions..."
+})
+
+TaskCreate({
+ subject: "Update specs",
+ description: "Update all authentication specs for new structure",
+ activeForm: "Updating specs..."
+})
+
+// Dependencies: specs depend on both refactors completing
+TaskUpdate({ taskId: "3", addBlockedBy: ["1", "2"] })
+
+// 3. Spawn workers for each task
+Task({
+ team_name: "refactor-auth",
+ name: "model-worker",
+ subagent_type: "general-purpose",
+ prompt: "Claim task #1, refactor the User model, complete when done",
+ run_in_background: true
+})
+
+Task({
+ team_name: "refactor-auth",
+ name: "controller-worker",
+ subagent_type: "general-purpose",
+ prompt: "Claim task #2, refactor the Session controller, complete when done",
+ run_in_background: true
+})
+
+Task({
+ team_name: "refactor-auth",
+ name: "spec-worker",
+ subagent_type: "general-purpose",
+ prompt: "Wait for task #3 to unblock (when #1 and #2 complete), then update specs",
+ run_in_background: true
+})
+```
+
+---
+
+## Environment Variables
+
+Spawned teammates automatically receive these:
+
+```bash
+CLAUDE_CODE_TEAM_NAME="my-project"
+CLAUDE_CODE_AGENT_ID="worker-1@my-project"
+CLAUDE_CODE_AGENT_NAME="worker-1"
+CLAUDE_CODE_AGENT_TYPE="Explore"
+CLAUDE_CODE_AGENT_COLOR="#4A90D9"
+CLAUDE_CODE_PLAN_MODE_REQUIRED="false"
+CLAUDE_CODE_PARENT_SESSION_ID="session-xyz"
+```
+
+**Using in prompts:**
+```javascript
+Task({
+ team_name: "my-project",
+ name: "worker",
+ subagent_type: "general-purpose",
+ prompt: "Your name is $CLAUDE_CODE_AGENT_NAME. Use it when sending messages to team-lead."
+})
+```
+
+---
+
+## Spawn Backends
+
+A **backend** determines how teammate Claude instances actually run. Claude Code supports three backends, and **auto-detects** the best one based on your environment.
+
+### Backend Comparison
+
+| Backend | How It Works | Visibility | Persistence | Speed |
+|---------|-------------|------------|-------------|-------|
+| **in-process** | Same Node.js process as leader | Hidden (background) | Dies with leader | Fastest |
+| **tmux** | Separate terminal in tmux session | Visible in tmux | Survives leader exit | Medium |
+| **iterm2** | Split panes in iTerm2 window | Visible side-by-side | Dies with window | Medium |
+
+### Auto-Detection Logic
+
+Claude Code automatically selects a backend using this decision tree:
+
+```mermaid
+flowchart TD
+ A[Start] --> B{Running inside tmux?}
+ B -->|Yes| C[Use tmux backend]
+ B -->|No| D{Running in iTerm2?}
+ D -->|No| E{tmux available?}
+ E -->|Yes| F[Use tmux - external session]
+ E -->|No| G[Use in-process]
+ D -->|Yes| H{it2 CLI installed?}
+ H -->|Yes| I[Use iterm2 backend]
+ H -->|No| J{tmux available?}
+ J -->|Yes| K[Use tmux - prompt to install it2]
+ J -->|No| L[Error: Install tmux or it2]
+```
+
+**Detection checks:**
+1. `$TMUX` environment variable → inside tmux
+2. `$TERM_PROGRAM === "iTerm.app"` or `$ITERM_SESSION_ID` → in iTerm2
+3. `which tmux` → tmux available
+4. `which it2` → it2 CLI installed
+
+### in-process (Default for non-tmux)
+
+Teammates run as async tasks within the same Node.js process.
+
+**How it works:**
+- No new process spawned
+- Teammates share the same Node.js event loop
+- Communication via in-memory queues (fast)
+- You don't see teammate output directly
+
+**When it's used:**
+- Not running inside tmux session
+- Non-interactive mode (CI, scripts)
+- Explicitly set via `CLAUDE_CODE_SPAWN_BACKEND=in-process`
+
+**Characteristics:**
+```
+┌─────────────────────────────────────────┐
+│ Node.js Process │
+│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
+│ │ Leader │ │Worker 1 │ │Worker 2 │ │
+│ │ (main) │ │ (async) │ │ (async) │ │
+│ └─────────┘ └─────────┘ └─────────┘ │
+└─────────────────────────────────────────┘
+```
+
+**Pros:**
+- Fastest startup (no process spawn)
+- Lowest overhead
+- Works everywhere
+
+**Cons:**
+- Can't see teammate output in real-time
+- All die if leader dies
+- Harder to debug
+
+```javascript
+// in-process is automatic when not in tmux
+Task({
+ team_name: "my-project",
+ name: "worker",
+ subagent_type: "general-purpose",
+ prompt: "...",
+ run_in_background: true
+})
+
+// Force in-process explicitly
+// export CLAUDE_CODE_SPAWN_BACKEND=in-process
+```
+
+### tmux
+
+Teammates run as separate Claude instances in tmux panes/windows.
+
+**How it works:**
+- Each teammate gets its own tmux pane
+- Separate process per teammate
+- You can switch panes to see teammate output
+- Communication via inbox files
+
+**When it's used:**
+- Running inside a tmux session (`$TMUX` is set)
+- tmux available and not in iTerm2
+- Explicitly set via `CLAUDE_CODE_SPAWN_BACKEND=tmux`
+
+**Layout modes:**
+
+1. **Inside tmux (native):** Splits your current window
+```
+┌─────────────────┬─────────────────┐
+│ │ Worker 1 │
+│ Leader ├─────────────────┤
+│ (your pane) │ Worker 2 │
+│ ├─────────────────┤
+│ │ Worker 3 │
+└─────────────────┴─────────────────┘
+```
+
+2. **Outside tmux (external session):** Creates a new tmux session called `claude-swarm`
+```bash
+# Your terminal stays as-is
+# Workers run in separate tmux session
+
+# View workers:
+tmux attach -t claude-swarm
+```
+
+**Pros:**
+- See teammate output in real-time
+- Teammates survive leader exit
+- Can attach/detach sessions
+- Works in CI/headless environments
+
+**Cons:**
+- Slower startup (process spawn)
+- Requires tmux installed
+- More resource usage
+
+```bash
+# Start tmux session first
+tmux new-session -s claude
+
+# Or force tmux backend
+export CLAUDE_CODE_SPAWN_BACKEND=tmux
+```
+
+**Useful tmux commands:**
+```bash
+# List all panes in current window
+tmux list-panes
+
+# Switch to pane by number
+tmux select-pane -t 1
+
+# Kill a specific pane
+tmux kill-pane -t %5
+
+# View swarm session (if external)
+tmux attach -t claude-swarm
+
+# Rebalance pane layout
+tmux select-layout tiled
+```
+
+### iterm2 (macOS only)
+
+Teammates run as split panes within your iTerm2 window.
+
+**How it works:**
+- Uses iTerm2's Python API via `it2` CLI
+- Splits your current window into panes
+- Each teammate visible side-by-side
+- Communication via inbox files
+
+**When it's used:**
+- Running in iTerm2 (`$TERM_PROGRAM === "iTerm.app"`)
+- `it2` CLI is installed and working
+- Python API enabled in iTerm2 preferences
+
+**Layout:**
+```
+┌─────────────────┬─────────────────┐
+│ │ Worker 1 │
+│ Leader ├─────────────────┤
+│ (your pane) │ Worker 2 │
+│ ├─────────────────┤
+│ │ Worker 3 │
+└─────────────────┴─────────────────┘
+```
+
+**Pros:**
+- Visual debugging - see all teammates
+- Native macOS experience
+- No tmux needed
+- Automatic pane management
+
+**Cons:**
+- macOS + iTerm2 only
+- Requires setup (it2 CLI + Python API)
+- Panes die with window
+
+**Setup:**
+```bash
+# 1. Install it2 CLI
+uv tool install it2
+# OR
+pipx install it2
+# OR
+pip install --user it2
+
+# 2. Enable Python API in iTerm2
+# iTerm2 → Settings → General → Magic → Enable Python API
+
+# 3. Restart iTerm2
+
+# 4. Verify
+it2 --version
+it2 session list
+```
+
+**If setup fails:**
+Claude Code will prompt you to set up it2 when you first spawn a teammate. You can choose to:
+1. Install it2 now (guided setup)
+2. Use tmux instead
+3. Cancel
+
+### Forcing a Backend
+
+```bash
+# Force in-process (fastest, no visibility)
+export CLAUDE_CODE_SPAWN_BACKEND=in-process
+
+# Force tmux (visible panes, persistent)
+export CLAUDE_CODE_SPAWN_BACKEND=tmux
+
+# Auto-detect (default)
+unset CLAUDE_CODE_SPAWN_BACKEND
+```
+
+### Backend in Team Config
+
+The backend type is recorded per-teammate in `config.json`:
+
+```json
+{
+ "members": [
+ {
+ "name": "worker-1",
+ "backendType": "in-process",
+ "tmuxPaneId": "in-process"
+ },
+ {
+ "name": "worker-2",
+ "backendType": "tmux",
+ "tmuxPaneId": "%5"
+ }
+ ]
+}
+```
+
+### Troubleshooting Backends
+
+| Issue | Cause | Solution |
+|-------|-------|----------|
+| "No pane backend available" | Neither tmux nor iTerm2 available | Install tmux: `brew install tmux` |
+| "it2 CLI not installed" | In iTerm2 but missing it2 | Run `uv tool install it2` |
+| "Python API not enabled" | it2 can't communicate with iTerm2 | Enable in iTerm2 Settings → General → Magic |
+| Workers not visible | Using in-process backend | Start inside tmux or iTerm2 |
+| Workers dying unexpectedly | Outside tmux, leader exited | Use tmux for persistence |
+
+### Checking Current Backend
+
+```bash
+# See what backend was detected
+cat ~/.claude/teams/{team}/config.json | jq '.members[].backendType'
+
+# Check if inside tmux
+echo $TMUX
+
+# Check if in iTerm2
+echo $TERM_PROGRAM
+
+# Check tmux availability
+which tmux
+
+# Check it2 availability
+which it2
+```
+
+---
+
+## Error Handling
+
+### Common Errors
+
+| Error | Cause | Solution |
+|-------|-------|----------|
+| "Cannot cleanup with active members" | Teammates still running | `requestShutdown` all teammates first, wait for approval |
+| "Already leading a team" | Team already exists | `cleanup` first, or use different team name |
+| "Agent not found" | Wrong teammate name | Check `config.json` for actual names |
+| "Team does not exist" | No team created | Call `spawnTeam` first |
+| "team_name is required" | Missing team context | Provide `team_name` parameter |
+| "Agent type not found" | Invalid subagent_type | Check available agents with proper prefix |
+
+### Graceful Shutdown Sequence
+
+**Always follow this sequence:**
+
+```javascript
+// 1. Request shutdown for all teammates
+Teammate({ operation: "requestShutdown", target_agent_id: "worker-1" })
+Teammate({ operation: "requestShutdown", target_agent_id: "worker-2" })
+
+// 2. Wait for shutdown approvals
+// Check for {"type": "shutdown_approved", ...} messages
+
+// 3. Verify no active members
+// Read ~/.claude/teams/{team}/config.json
+
+// 4. Only then cleanup
+Teammate({ operation: "cleanup" })
+```
+
+### Handling Crashed Teammates
+
+Teammates have a 5-minute heartbeat timeout. If a teammate crashes:
+
+1. They'll be automatically marked as inactive after timeout
+2. Their tasks remain in the task list
+3. Another teammate can claim their tasks
+4. Cleanup will work after timeout expires
+
+### Debugging
+
+```bash
+# Check team config
+cat ~/.claude/teams/{team}/config.json | jq '.members[] | {name, agentType, backendType}'
+
+# Check teammate inboxes
+cat ~/.claude/teams/{team}/inboxes/{agent}.json | jq '.'
+
+# List all teams
+ls ~/.claude/teams/
+
+# Check task states
+cat ~/.claude/tasks/{team}/*.json | jq '{id, subject, status, owner, blockedBy}'
+
+# Watch for new messages
+tail -f ~/.claude/teams/{team}/inboxes/team-lead.json
+```
+
+---
+
+## Complete Workflows
+
+### Workflow 1: Full Code Review with Parallel Specialists
+
+```javascript
+// === STEP 1: Setup ===
+Teammate({ operation: "spawnTeam", team_name: "pr-review-123", description: "Reviewing PR #123" })
+
+// === STEP 2: Spawn reviewers in parallel ===
+// (Send all these in a single message for parallel execution)
+Task({
+ team_name: "pr-review-123",
+ name: "security",
+ subagent_type: "compound-engineering:review:security-sentinel",
+ prompt: `Review PR #123 for security vulnerabilities.
+
+ Focus on:
+ - SQL injection
+ - XSS vulnerabilities
+ - Authentication/authorization bypass
+ - Sensitive data exposure
+
+ When done, send your findings to team-lead using:
+ Teammate({ operation: "write", target_agent_id: "team-lead", value: "Your findings here" })`,
+ run_in_background: true
+})
+
+Task({
+ team_name: "pr-review-123",
+ name: "perf",
+ subagent_type: "compound-engineering:review:performance-oracle",
+ prompt: `Review PR #123 for performance issues.
+
+ Focus on:
+ - N+1 queries
+ - Missing indexes
+ - Memory leaks
+ - Inefficient algorithms
+
+ Send findings to team-lead when done.`,
+ run_in_background: true
+})
+
+Task({
+ team_name: "pr-review-123",
+ name: "arch",
+ subagent_type: "compound-engineering:review:architecture-strategist",
+ prompt: `Review PR #123 for architectural concerns.
+
+ Focus on:
+ - Design pattern adherence
+ - SOLID principles
+ - Separation of concerns
+ - Testability
+
+ Send findings to team-lead when done.`,
+ run_in_background: true
+})
+
+// === STEP 3: Monitor and collect results ===
+// Poll inbox or wait for idle notifications
+// cat ~/.claude/teams/pr-review-123/inboxes/team-lead.json
+
+// === STEP 4: Synthesize findings ===
+// Combine all reviewer findings into a cohesive report
+
+// === STEP 5: Cleanup ===
+Teammate({ operation: "requestShutdown", target_agent_id: "security" })
+Teammate({ operation: "requestShutdown", target_agent_id: "perf" })
+Teammate({ operation: "requestShutdown", target_agent_id: "arch" })
+// Wait for approvals...
+Teammate({ operation: "cleanup" })
+```
+
+### Workflow 2: Research → Plan → Implement → Test Pipeline
+
+```javascript
+// === SETUP ===
+Teammate({ operation: "spawnTeam", team_name: "feature-oauth" })
+
+// === CREATE PIPELINE ===
+TaskCreate({ subject: "Research OAuth providers", description: "Research OAuth2 best practices and compare providers (Google, GitHub, Auth0)", activeForm: "Researching OAuth..." })
+TaskCreate({ subject: "Create implementation plan", description: "Design OAuth implementation based on research findings", activeForm: "Planning..." })
+TaskCreate({ subject: "Implement OAuth", description: "Implement OAuth2 authentication according to plan", activeForm: "Implementing OAuth..." })
+TaskCreate({ subject: "Write tests", description: "Write comprehensive tests for OAuth implementation", activeForm: "Writing tests..." })
+TaskCreate({ subject: "Final review", description: "Review complete implementation for security and quality", activeForm: "Final review..." })
+
+// Set dependencies
+TaskUpdate({ taskId: "2", addBlockedBy: ["1"] })
+TaskUpdate({ taskId: "3", addBlockedBy: ["2"] })
+TaskUpdate({ taskId: "4", addBlockedBy: ["3"] })
+TaskUpdate({ taskId: "5", addBlockedBy: ["4"] })
+
+// === SPAWN SPECIALIZED WORKERS ===
+Task({
+ team_name: "feature-oauth",
+ name: "researcher",
+ subagent_type: "compound-engineering:research:best-practices-researcher",
+ prompt: "Claim task #1. Research OAuth2 best practices, compare providers, document findings. Mark task complete and send summary to team-lead.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "feature-oauth",
+ name: "planner",
+ subagent_type: "Plan",
+ prompt: "Wait for task #2 to unblock. Read research from task #1. Create detailed implementation plan. Mark complete and send plan to team-lead.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "feature-oauth",
+ name: "implementer",
+ subagent_type: "general-purpose",
+ prompt: "Wait for task #3 to unblock. Read plan from task #2. Implement OAuth2 authentication. Mark complete when done.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "feature-oauth",
+ name: "tester",
+ subagent_type: "general-purpose",
+ prompt: "Wait for task #4 to unblock. Write comprehensive tests for the OAuth implementation. Run tests. Mark complete with results.",
+ run_in_background: true
+})
+
+Task({
+ team_name: "feature-oauth",
+ name: "reviewer",
+ subagent_type: "compound-engineering:review:security-sentinel",
+ prompt: "Wait for task #5 to unblock. Review the complete OAuth implementation for security. Send final assessment to team-lead.",
+ run_in_background: true
+})
+
+// Pipeline auto-progresses as each stage completes
+```
+
+### Workflow 3: Self-Organizing Code Review Swarm
+
+```javascript
+// === SETUP ===
+Teammate({ operation: "spawnTeam", team_name: "codebase-review" })
+
+// === CREATE TASK POOL (all independent, no dependencies) ===
+const filesToReview = [
+ "app/models/user.rb",
+ "app/models/payment.rb",
+ "app/controllers/api/v1/users_controller.rb",
+ "app/controllers/api/v1/payments_controller.rb",
+ "app/services/payment_processor.rb",
+ "app/services/notification_service.rb",
+ "lib/encryption_helper.rb"
+]
+
+for (const file of filesToReview) {
+ TaskCreate({
+ subject: `Review ${file}`,
+ description: `Review ${file} for security vulnerabilities, code quality, and performance issues`,
+ activeForm: `Reviewing ${file}...`
+ })
+}
+
+// === SPAWN WORKER SWARM ===
+const swarmPrompt = `
+You are a swarm worker. Your job is to continuously process available tasks.
+
+LOOP:
+1. Call TaskList() to see available tasks
+2. Find a task that is:
+ - status: 'pending'
+ - no owner
+ - not blocked
+3. If found:
+ - Claim it: TaskUpdate({ taskId: "X", owner: "YOUR_NAME" })
+ - Start it: TaskUpdate({ taskId: "X", status: "in_progress" })
+ - Do the review work
+ - Complete it: TaskUpdate({ taskId: "X", status: "completed" })
+ - Send findings to team-lead via Teammate write
+ - Go back to step 1
+4. If no tasks available:
+ - Send idle notification to team-lead
+ - Wait 30 seconds
+ - Try again (up to 3 times)
+ - If still no tasks, exit
+
+Replace YOUR_NAME with your actual agent name from $CLAUDE_CODE_AGENT_NAME.
+`
+
+// Spawn 3 workers
+Task({ team_name: "codebase-review", name: "worker-1", subagent_type: "general-purpose", prompt: swarmPrompt, run_in_background: true })
+Task({ team_name: "codebase-review", name: "worker-2", subagent_type: "general-purpose", prompt: swarmPrompt, run_in_background: true })
+Task({ team_name: "codebase-review", name: "worker-3", subagent_type: "general-purpose", prompt: swarmPrompt, run_in_background: true })
+
+// Workers self-organize: race to claim tasks, naturally load-balance
+// Monitor progress with TaskList() or by reading inbox
+```
+
+---
+
+## Best Practices
+
+### 1. Always Cleanup
+Don't leave orphaned teams. Always call `cleanup` when done.
+
+### 2. Use Meaningful Names
+```javascript
+// Good
+name: "security-reviewer"
+name: "oauth-implementer"
+name: "test-writer"
+
+// Bad
+name: "worker-1"
+name: "agent-2"
+```
+
+### 3. Write Clear Prompts
+Tell workers exactly what to do:
+```javascript
+// Good
+prompt: `
+ 1. Review app/models/user.rb for N+1 queries
+ 2. Check all ActiveRecord associations have proper includes
+ 3. Document any issues found
+ 4. Send findings to team-lead via Teammate write
+`
+
+// Bad
+prompt: "Review the code"
+```
+
+### 4. Use Task Dependencies
+Let the system manage unblocking:
+```javascript
+// Good: Auto-unblocking
+TaskUpdate({ taskId: "2", addBlockedBy: ["1"] })
+
+// Bad: Manual polling
+"Wait until task #1 is done, check every 30 seconds..."
+```
+
+### 5. Check Inboxes for Results
+Workers send results to your inbox. Check it:
+```bash
+cat ~/.claude/teams/{team}/inboxes/team-lead.json | jq '.'
+```
+
+### 6. Handle Worker Failures
+- Workers have 5-minute heartbeat timeout
+- Tasks of crashed workers can be reclaimed
+- Build retry logic into worker prompts
+
+### 7. Prefer write Over broadcast
+`broadcast` sends N messages for N teammates. Use `write` for targeted communication.
+
+### 8. Match Agent Type to Task
+- **Explore** for searching/reading
+- **Plan** for architecture design
+- **general-purpose** for implementation
+- **Specialized reviewers** for specific review types
+
+---
+
+## Quick Reference
+
+### Spawn Subagent (No Team)
+```javascript
+Task({ subagent_type: "Explore", description: "Find files", prompt: "..." })
+```
+
+### Spawn Teammate (With Team)
+```javascript
+Teammate({ operation: "spawnTeam", team_name: "my-team" })
+Task({ team_name: "my-team", name: "worker", subagent_type: "general-purpose", prompt: "...", run_in_background: true })
+```
+
+### Message Teammate
+```javascript
+Teammate({ operation: "write", target_agent_id: "worker-1", value: "..." })
+```
+
+### Create Task Pipeline
+```javascript
+TaskCreate({ subject: "Step 1", description: "..." })
+TaskCreate({ subject: "Step 2", description: "..." })
+TaskUpdate({ taskId: "2", addBlockedBy: ["1"] })
+```
+
+### Shutdown Team
+```javascript
+Teammate({ operation: "requestShutdown", target_agent_id: "worker-1" })
+// Wait for approval...
+Teammate({ operation: "cleanup" })
+```
+
+---
+
+*Based on Claude Code v2.1.19 - Tested and verified 2026-01-25*