Board & Workflows
The team’s board, at /kanban, is not stored anywhere: it is the event log, grouped.
One machine writes a card and every machine has it, with nothing syncing a database —
the reason it exists separately from Hermes’s own kanban (which is the SQLite file
the Hermes CLI keeps on one machine).

Four columns, and a card moves by naming the column it moves to rather than by dragging — one event with a name in it on the log instead of a stream of coordinates.
A card can be given to a machine or to an agent. Give it to an agent and whichever machine can actually run that agent claims the card, does the work, posts the result as a comment and moves it to REVIEW — review, not done: an agent finishing a task is a thing to look at, not a thing to trust. The earliest claim wins, ties broken by machine name, computed identically everywhere from the same events — no election, no coordinator. Without the claim, every machine that can run Claude would run the same card and one task would come back with four bills.
An agent can also act: post a message to a room, open a card, move one along. Nothing that runs a command or touches a file — an agent already has a whole machine for that. “Nobody” is a real assignee.
Workflows
Section titled “Workflows”A workflow, at /workflows, is an ordered list of steps, some of which stop and wait
for a person. This is what Loop, Pipeline and Kanban were underneath — three sidebar
entries doing one thing with three vocabularies.
| Was | Is now |
|---|---|
| A Loop cycle | A step with onFail pointing back at an earlier step, and a retry bound |
| A Pipeline gate | A gate step |
| A Kanban column | A run’s current step |
| A Kanban card assigned to an agent | An agent step |
Step kinds
Section titled “Step kinds”- shell — runs a command, as whoever runs the server, with the same authority the agents already have. Read a workflow before enabling it, the way you would a script.
- agent — records a prompt for an agent to pick up. It does not block.
- gate — stops the run and asks a person. Approve to continue; reject to end.
- note — records a line and moves on.
Retries, with a bound
Section titled “Retries, with a bound”Any non-gate step can name a step to go back to on failure and a maximum number of times — three by default. The bound is not optional: a build-judge-fix cycle with no bound is an outage, not a feature.
Triggers
Section titled “Triggers”- Manual — the button.
- Schedule — an interval in minutes (cron is a language and nothing here needs one). It fires immediately the first time, because an operator who switches something on and sees nothing for an hour concludes it is broken.
- Event — once per new event of a chosen kind: a CI failure, a patch landing. The first time it is seen it acts only on the newest event, so switching it on does not run it against a year of history.
What has already fired is kept on disk, so a restart does not re-run everything. Gates sit at the top of the screen: a gate is blocking somebody’s work right now.
A run has no state of its own
Section titled “A run has no state of its own”It is folded out of the log, so a server killed mid-run cannot leave a status file claiming “running” forever — and “who approved this, and when” is answerable months later, because the approval is a signed event with a note on it.
Migrating from Erebros
Section titled “Migrating from Erebros”Existing Loop, Pipeline and Kanban state is not converted — those boards were per-machine scratch space, and a converter would have to invent a history that never existed on the log. Recreate the ones you still want as workflow definitions; it takes a minute each.