Skip to content

Board

The Board is the Kanban view of task_lifecycle work plus the locally parked backlog, in both the GUI and the TUI. One card is rooted in one GitHub issue; its latest task run decides the column. As the workflow advances, the card moves.

The board has nine columns:

ColumnContents
IntakeExternal requests that still need a decision: parked in the Backlog or filed as an issue
BacklogLocal parked items that are not issues yet
QueuedIssues waiting for a worker slot, a run still at triage, or waiting_for_info
In progressThe implement, CI-fix, and rebase steps
ReviewWaiting on CI checks
DeployStaging deploy/healthchecks, merge, production deploy/healthchecks, revert
DoneCompleted runs
FailedFailed or terminated runs
ArchivedCards you retired from the stage columns

Step-to-column mapping is exact:

  • backlog, waiting_for_worker, and waiting_for_info → Queued (GUI). On the TUI Board, workflow backlog stays in Backlog; waiting_for_worker and waiting_for_info → Queued.
  • implementing, fixing_ci, rebasing_from_main, waiting_for_rebase_worker, waiting_for_ci_fix_worker → In progress
  • waiting_for_ci_checks → Review
  • deploying_to_staging, staging_healthchecks, merging_pr, deploying_to_prod, prod_healthchecks, reverting_pr → Deploy

On the GUI, a run at the workflow’s backlog triage step is shown as Queued: after promotion it is a real issue waiting to be worked, not a parked note. On both surfaces, waiting_for_info stays in Queued until a human reply or a published Decision resumes it.

The columns can overflow the window. A horizontal scrollbar spans the bottom of the board; dragging its thumb, clicking the track, and Shift+wheel all move it.

Cards are collapsed per issue from the newest-first run list. The first run seen for an issue is its current stage; title and PR are backfilled from older runs (later steps drop title from step state) and from the GitHub preview.

Each card shows the status tag, #issue and pr#, the issue title, and either step · timestamp or stopped at step · timestamp when failed. Failed cards get a danger border.

Discuss sits next to Archive on the card header. It is hidden when the card has no GitHub issue (local-only cards cannot open Discuss). Discuss opens a focused Chat session titled Discuss #N for that issue; see Chat.

On the TUI Board, e opens Discuss for the selected issue card (operator speaks first — no auto-send). d remains delete (intake or backlog item), not Discuss.

Select cards with the checkbox in a card’s header, or hold a modifier while clicking:

  • Checkbox toggles one card and stays checked while the card is selected.
  • Cmd/Ctrl+click toggles one card.
  • Shift+click extends the selection from the last clicked card, in board order.
  • Drag outside the cards draws a marquee: start in a column’s empty space, in the gaps between columns, or beside/below them. Every workflow card it covers is selected, across columns (Intake and Backlog cards are routed one at a time, so the marquee skips them). Hold Shift to add them to the existing selection instead of replacing it. Holding the drag at a column’s top or bottom edge scrolls that column, so off-screen cards can be selected too.
  • Click outside the cards clears the selection; column headers are excluded, so the column menu never clears it.
  • Right-click opens the card’s context menu. Right-clicking a card inside the selection keeps the multi-selection; right-clicking any other card selects just that card.
  • The column menu (the ⋮ button on a column header) selects every card in the column, or runs the column’s common bulk action directly (for example Retry all 3 when every card there is a stopped run).
  • The board header shows the selected count with a Clear button; the card context menu also has Select all in column and Clear selection.

Drag a card onto a column to run that column’s operation on every dragged card (a drag starting on a selected card carries the whole selection, shown as a stack with the card count). Columns map to real operations, because the workflow engine owns stage placement:

Drop onOperation
ArchivedArchive the card, or restore it when it is already archived
QueuedRetry a failed/terminated run — POST /api/workflows/{kind}/runs/{id}/retry
FailedTerminate a running run — the same call as the run modal
DoneComplete a running run without executing its remaining steps

Other columns are not drop targets: their placement is engine-owned and no operator operation sits behind it. The same actions are in the right-click menu, where they apply to the whole selection.

Retry resumes at the run’s current_step, so the card returns to the column of the step that failed, not to Queued. Complete also stops any worker still attached to the issue.

The Intake column is the queue of external requests waiting to be routed; a routed request leaves it (the parked row continues as a Backlog card, the filed one as the issue’s task card — the task card is what carries the work to Done, and the agent’s sync marks the request delivered when that run completes). Dragging an Intake card routes it — the same two operations the card’s modal offers, and filing confirms first:

Drop onOperation
BacklogPark the request in the Backlog — POST /api/intake/{id}/park
QueuedFile the issue and start its task — POST /api/intake/{id}/file

A routed request is no longer a card here, so those are the only two drops an Intake card has.

The Backlog column lists local parked items, not workflow runs. It shows a file count per item. Dragging a parked item onto Queued promotes it — the issue is filed, the task starts, and the item is deleted (POST /api/backlog/{id}/promote). That is the only drop a Backlog card has, because promoting is the only operation behind a column. See Backlog for the full workflow: create, attach files, and promote to an issue.

Select an issue card to open the run modal:

  • Status, current step, timings, and any error.
  • The step-transition history (GET /api/workflows/{kind}/runs/{id} returns run plus step_log), including retries recorded as step transitions.
  • Discuss next to Terminate when the run has a GitHub issue. Same focused Chat as the card control; the modal closes so it does not cover Chat.

Toggle the info button to show the side panel:

  • Usage — total input and output tokens (formatted 500, 1.2K, 3.4M) from GET /api/token-usage.
  • Workers — the 10 most recent agents with role, entity, status, and step.

Retire a card without deleting anything:

MethodPathPurpose
GET/api/board/archiveList archived card keys
PUT/api/board/archive/{key}Archive a card (optional github_number)
DELETE/api/board/archive/{key}Restore a card

Card keys are issue-<n> or run-<uuid> — bounded and filename-safe before they reach the DB or the audit log. Archiving is recorded as operator.board.archive; restoring as operator.board.unarchive.

MethodPath
GET/api/workflows/task_lifecycle
GET/api/backlog
GET/api/token-usage
GET/api/board/archive
  • The Backlog column count is backlog items; every other column count is issue cards.
  • Archived cards are excluded from the active board and shown only when the Archived column is open.
  • Archive keys must match [A-Za-z0-9._-], at most 128 characters; anything else is rejected.