swarm · git:20260911.973d1bc · 2026-09-11 · sha256 f8abeed028415f6a
swarm git:20260911.973d1bcA
Immutable. This exact content is served forever at /api/v1/blob/f8abeed028415f6a.
---
name: swarm
description: >-
Launch and watch Guaardvark's Swarm Orchestrator: parallel coding agents, each in its
own git worktree, working a markdown plan and merging back deterministically. Use when
the user wants several agents on one codebase at once, says "swarm this", or asks about
a running swarm, worktrees, or merge status.
---
# Swarm with Guaardvark
Read `setup` first; needs the `swarm` plugin (`POST /api/plugins/swarm/start`).
`B=${GUAARDVARK_URL:-http://localhost:5000}`. Status is also the MCP tool `swarm_status`.
## 1. Write the plan file
A markdown file in the target repo. Each `##` heading is one task. Structured fields are optional;
the parser infers file scope from paths in the prose when they are absent:
```markdown
# Plan: split the settings page
## Extract the GPU panel
- files: frontend/src/pages/SettingsPage.jsx, frontend/src/components/settings/GpuPanel.jsx
- backend: claude
Move the GPU section into its own component with the same props.
## Add a test for the panel
- files: frontend/src/__tests__/GpuPanel.test.jsx
- depends_on: Extract the GPU panel
```
`backend` / `assign to` picks the agent backend (Claude Code, or a local Cline/OpenClaw agent on
Ollama in Flight Mode). Tasks that touch the same files should depend on each other; the parser
warns about conflicts.
## 2. Launch
```bash
curl -s -X POST $B/api/swarm/launch -H 'Content-Type: application/json' -d '{
"plan_path": "/abs/path/repo/docs/plan.md", "repo_path": "/abs/path/repo",
"max_agents": 4, "auto_merge": false, "flight_mode": false, "dry_run": false,
"acknowledge_dirty_tree": false
}'
```
- A dirty working tree is refused unless `acknowledge_dirty_tree: true`; tell the user what is
uncommitted first.
- `self_code: true` targets Guaardvark's own checkout and is only allowed on the configured root.
- `dry_run: true` parses the plan and reports tasks and conflicts without starting agents.
## 3. Watch, merge, clean up
| call | |
|---|---|
| `GET $B/api/swarm/status` and `GET $B/api/swarm/status/<swarm_id>` | tasks, states, worktrees |
| `GET $B/api/swarm/<swarm_id>/logs/<task_id>?lines=100` | one agent's log |
| `GET $B/api/swarm/<swarm_id>/diff/<task_id>` | its diff before merge |
| `POST $B/api/swarm/<swarm_id>/bus/broadcast` | message every agent |
| `POST $B/api/swarm/merge {"swarm_id": "...", "repo_path": "..."}` | merge finished branches in dependency order |
| `POST $B/api/swarm/cancel` | stop |
| `POST $B/api/swarm/cleanup {"swarm_id": "...", "delete_branches": false}` | remove worktrees |
| `GET $B/api/swarm/templates` | saved plan templates |
## Rules
- Review diffs before `merge` unless the user asked for `auto_merge`.
- Keep `max_agents` at or below the machine's capacity; each Claude agent is a separate session and
each local agent competes for the GPU with generation jobs.
- Report per task: state, files touched, whether it merged. Never say "done" on a swarm that still
has running or failed tasks.