swarm
Parallel dispatch to all Project Directors in the agency — one-shot status, blocker, or priority check across the entire portfolio without loading PD context into the parent session. Spawns each PD in
SKILL.mdskills/swarm/SKILL.md
GitHub/swarm — Portfolio-Wide PD Dispatch
What it does: Spawns all active PDs in parallel, each in an isolated subagent context. The parent session only holds the digest — not the full PD briefs. Fast and cheap.
Command Variants
| Command | Question sent to each PD |
|---|---|
/swarm |
What are you currently working on? Any blockers? ETA for next deliverable? |
/swarm-blocker |
What is your current blocker? Who owns it? What's the workaround or path to resolution? |
/swarm-continue |
What can continue without you? Any pre-reqs you need from others? |
/swarm-priority |
What are your top 3 priorities right now? Any priority conflicts with other PDs? |
/swarm-all |
Full status dump — current work, blockers, wins, decisions pending, next steps. |
How It Works
Step 1 — Discover PDs
Read ~/.claude/teams/agency-council/config.json. Extract member names that end in -pd (Project Directors). These are the inbox names for SendMessage.
For each PD, derive their project directory:
~/.claude/projects/{project-name}/ (most PDs)
~/Projects/{project-name}/memory/ (ltv)
~/projects/{project-name}/memory/ (website-pitch, sightsee)
If a PD has no known project, skip them.
Step 2 — Dispatch All PDs in Parallel
Spawn one pd-coordinator subagent per PD. Each agent:
- Sets
team_name: agency-council(so it can send back via SendMessage) - Sets
run_in_background: true - Receives only: their inbox name, project directory, and the question
- Does NOT load the full PD-BRIEFING — only reads
heartbeat.mdand the question - Responds directly to
team-leadvia SendMessage with a one-line status
Agent prompt for each PD:
You are checking in on {project-name} as a swarm dispatch from /swarm.
Do NOT load PD-BRIEFING.md or any other briefing files.
Read only: {project-dir}/memory/heartbeat.md
Answer this question in ONE LINE (under 80 chars for status/blocker, up to 2 lines for continue):
{question}
Include your PD name at the start of your response.
Send your response via SendMessage to "team-lead".
Example response format:
examplecrm-pd: BLOCKED — Railway auth needed from the operator; workaround is local dev
Subagent config:
subagent_type: Exploremodel: sonnet
Step 3 — Wait for Responses
Wait for all spawned agents to complete (they send back via SendMessage).
Step 4 — Handle Silent PDs
If a PD does not respond within the agent's reasonable run time:
- Note:
⚠️ {pd-name} silent — respawned - Re-spawn the same PD agent once
- If still silent after respawn: note
❌ {pd-name} did not respond after respawn
Step 5 — Present Digest
Format the digest as:
## /swarm — {command-variant} — {timestamp}
### Responding ({n})
| PD | Project | Response |
|----|---------|----------|
| {pd-name} | {project} | {one-line status} |
### Silent / Respawned ({n})
| PD | Project | Status |
|----|---------|--------|
| {pd-name} | {project} | silent → respawned / no response |
### Portfolio Summary
{1-2 sentence synthesis}
Dispatch Isolation
Each PD agent runs in a completely isolated context:
- Only reads
heartbeat.md(not the full CLAUDE.md/PROJECT.md/PROJECT-BRIEFING) - No shared state between agents
- No mutual blocking between agents
- Parent session holds zero PD context until responses arrive
PD Standard Protocol — Also Applies Here
Even for one-shot /swarm dispatches, PDs that receive work items must:
- Decompose tasks into smallest independent sub-tasks
- Parallelize — spawn one subagent per sub-task simultaneously
- Report every sub-task completion to "team-lead" via SendMessage immediately
If a PD receives a task during a swarm check-in (not just a status query), apply the full
PD Standard Protocol from /pd-resume.
PD Directory Map
| PD | Project Directory |
|---|---|
| my-app-pd | ~/.claude/projects/my-app/ |
| example-crm-pd | ~/.claude/projects/example-crm/ |
| landing-site-pd | ~/projects/landing-site/ |
If a project directory doesn't exist, skip that PD silently.
Anti-Patterns
- DO NOT load all PD-BRIEFING files into the parent session before spawning
- DO NOT run PDs sequentially — that defeats the purpose
- DO NOT aggregate in the parent session — let each PD speak for themselves
- DO NOT include CLAUDE.md or PROJECT.md content in the digest — heartbeat only
- DO NOT chase silent PDs more than once — note and move on