Route swarm requests to the appropriate pattern skill. Read the
preset config, determine the pattern, and follow the corresponding
skill.
Pass the goal slug through to the pattern skill along with the
goal, target, and preset.
If worktrees exist that are not associated with the current session
(stale branches from crashed or abandoned swarms), offer the user
two options
-
Identify goal and target from the user's request. If unclear,
ask
-
Read roles config from
$CLAUDE_PLUGIN_ROOT/config/swarm-roles.yaml
-
Select preset or roles using the same priority as v1. When resolving
roles, check for inline definitions in the preset first (entries with a
name and prompt field), then fall back to global role names in the
roles: section
- User specifies a preset name -> use it
- User specifies individual role names -> use those (fan-out)
- User describes what they want -> match to preset/roles
- Default for "review" ->
pr-review preset
-
Validate config — check the resolved preset and roles for
structural problems before routing to a pattern skill. Abort or
warn as indicated
Required role fields
Every role referenced by the preset (whether global or inline)
must have
prompt — non-empty. An inline role missing prompt means the
agent would be spawned with no instructions. Abort
subagent_type — must be one of Explore or general-purpose.
Missing or unrecognized values (typos like Explorer) cause
opaque spawn failures. Abort
Isolation consistency
If a role specifies isolation: worktree but its subagent_type
is not general-purpose, warn that subagent_type will be
overridden to general-purpose at spawn time (worktree isolation
requires write access). This is not an error — pattern skills
handle the override — but the role definition is internally
inconsistent and should be fixed.
Numeric fields
worker_count (swarm) and approach_count (speculative) must be
positive integers when present. Non-numeric values, zero, or
negative values are invalid. Abort
Topology-pattern agreement
The preset's declared pattern must match the topology keys
present in the preset config:
| Pattern | Expected keys | Unexpected keys |
|---|
fan-out | roles | stages, nodes |
pipeline | stages or nodes | bare roles |
task-graph | nodes | stages without depends_on |
map-reduce | map_role, reduce_role | roles, stages |
speculative | approach_role, judge_role | roles, stages |
swarm | worker_role | roles, stages |
If unexpected keys are present, warn that the declared pattern
may not match the intended topology. Ask the user to confirm.
Watchdog prerequisite
If the preset has watchdog: true, verify that the monitor role
exists in the global roles: section. If missing, abort —
the watchdog cannot be spawned without a role definition.
Deprecated preset completeness
If the preset has deprecated: true but no successor field,
warn that no replacement can be suggested. The user can still
proceed.
Reserved names
If any role name in the preset matches monitor or judge,
warn that these names have special behavior in hooks
(exemption from quality gates, speculative gate branching). Using
them as regular specialist names will cause incorrect gate logic.
-
Determine pattern from the selected preset's pattern field.
If absent, default to fan-out. If the preset has
deprecated: true, warn the user and suggest the successor
preset instead. Proceed only if the user confirms
-
Route to pattern skill — read and follow the corresponding
skill
| Pattern | Skill |
|---|
fan-out (or absent) | swarm-fan-out |
swarm | swarm-swarm |
pipeline | swarm-pipeline |
task-graph | swarm-pipeline |
map-reduce | swarm-map-reduce |
speculative | swarm-speculative |
Read the skill file and follow its checklist from step 1.
Pass through: goal, target, selected roles/preset, and any
user context.
-
Watchdog modifier — if the preset has watchdog: true, the lead
must spawn a monitor agent immediately after creating the team (the
pattern skill's "Create Team" step). Spawn it BEFORE spawning any
specialist/worker agents.
Use the monitor role from
$CLAUDE_PLUGIN_ROOT/config/swarm-roles.yaml.
Read monitor_cron_interval_seconds from
$CLAUDE_PLUGIN_ROOT/.claude-plugin/settings.json (default: 60).
Include the resolved interval in the monitor's spawn prompt.
name: monitor
subagent_type: from the monitor role config (typically Explore)
run_in_background: true
prompt:
- Identity: "Your name is monitor. You are part of team {team_name}."
- Immediately send a "Monitoring started" message to the team lead
via SendMessage (this satisfies the idle hook gate)
- Call CronCreate with:
intervalSeconds: {monitor_cron_interval_seconds} (read from
$CLAUDE_PLUGIN_ROOT/.claude-plugin/settings.json, default 60)
prompt: "Check TaskList for anomalies: tasks stuck in_progress,
idle workers without findings, failed or blocked tasks. Send a
SendMessage alert to the team lead for each anomaly found. Do not
intervene directly — report only."
- Do not intervene directly — report to the lead
The monitor does not get its own task — it observes and reports.
Include the monitor in shutdown (send shutdown_request to it).
Pattern skills do NOT spawn the monitor. This section is the single
source of truth for monitor spawning.