Skip to content

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).

Workflows in Erebros-T — steps, gates, retries and triggers

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.

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
  • 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.

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.

  • 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.

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.

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.