Hermes Kanban: The Swarm
Fan a goal out to N parallel workers, gate a verifier on all of them, then a synthesizer on the verifier.
Run this workflow
CI-verified, 4/4 fixtures passing.
Intended Use
Anyone with a goal that genuinely splits into parallel tracks needing a verification gate: `hermes kanban swarm` builds the whole graph (workers, a verifier that wakes after all of them, a synthesizer that wakes after the verifier) in one command.
Not for
- Small goals that don't need parallelism or a verification gate
- Pipelines you'd rather wire by hand
The Stack
Tested Against
hermes@0.15node@20.xSide effects & data flow
- Network
- your LLM provider, only in the non-CI worker steps
- Writes
- ~/.hermes/kanban.db (the board)
- Credentials
- LLM provider key (hermes setup), for the worker/verifier/synthesizer steps only
Data privacy
- your LLM provider, only in the non-CI worker steps ← the goal and each worker's findings (retention: per that provider's API policy)
Prerequisites
- Hermes Agent (MIT): `curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`
- Profiles for the worker/verifier/synthesizer roles (dispatch skips unknown assignees)
- `hermes gateway start` to actually run the swarm
- Node 20+ (used here to read the --json board state)
Steps
- 1
Build the swarm graph and verify its shape
One `hermes kanban swarm` command builds the graph. CI asserts (via the command's --json and `list --json`) that it created 3 parallel workers plus a verifier and a synthesizer, with all the named roles present on the board.
hermes kanban init >/dev/null hermes kanban swarm "Design a multi-region failover plan" --worker researcher:Research --worker architect:Architecture --worker sre:Reliability --verifier reviewer --synthesizer writer --json | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const o=JSON.parse(s);if(!o.worker_ids||o.worker_ids.length!==3||!o.verifier_id||!o.synthesizer_id){console.log("BAD GRAPH");process.exit(1)}console.log("swarm graph: "+o.worker_ids.length+" workers, verifier yes, synthesizer yes")})' hermes kanban list --json | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const o=JSON.parse(s);const t=Array.isArray(o)?o:(o.tasks||o.items||[]);console.log("assignees: "+[...new Set(t.map(x=>x.assignee))].sort().join(","))})' - 2
Run the swarm (the worker steps, not checked by CI)
Start the gateway: workers run in parallel and write findings to the blackboard; the verifier wakes only after all workers finish; the synthesizer wakes only after the verifier signs off. All three call models, so CI doesn't run them — the badge covers the graph the command builds.
Eval, 4 fixtures
Last passed: verified 11d agoswarm-graphcontainstimeout 60s · max $0Expected:
swarm graph: 3 workers, verifier yes, synthesizer yeshas-reviewercontainstimeout 60s · max $0Expected:
reviewerhas-srecontainstimeout 60s · max $0Expected:
sreclean-exitexit_codetimeout 60s · max $0Expected:
0
Results
The big-problem fan-out from the WebAfterAI guide.
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).