threads
threads

SU-1Control plane / Agent fleets

suspenders

Status
Shipped
License
BSL 1.1 — free non-production, commercial license
Runtime
Bun + SQLite (WAL)
Covers
Sessions · claims · work graph · events · facts
Origin
Extracted from the speedy-claude setup
The fleet board / Monitoring and task completion in one surface.
The fleet board / Monitoring and task completion in one surface.

The control plane.

Five parallel Claude Code sessions. A usage cliff freezes three mid-edit. The survivors keep editing the same files; nobody notices for six hours. Suspenders is the control plane that notices — and the board where you decide what happens next.

The bus.

All state lives in one SQLite database, governor.db. Sessions, claims, the work graph, events and facts write to it; the fleet board reads it while the lanes keep working, through WAL, at one-second intervals. Work and checkpoints are structured events in the database.

The board.

Open decisions surface as red cards. Get recommendation has an LLM analyze the decision in control-plane context; you edit or send. Lanes, completion stats and the event stream stay live at one second.

The first board, as it shipped / The labels and the filter dropdown have since been cleaned up.
The first board, as it shipped / The labels and the filter dropdown have since been cleaned up.

How a decision resolves.

A lane needs a call made mid-flight — it emits NEED_DECISION. The rest is procedure:

01
The board surfaces it — red card, asker, age; the question becomes visible to you, not just the lane.
02
You press Get recommendation — the advise worker gathers claims, recent events and work-graph shape, and asks your configured LLM.
03
Recommendation lands inline — recommendation, rationale, risk, model. One click fills your answer field.
04
You edit, then send — the answer goes back to the lane as ANSWER.
05
Recommendations are suggestions; only you send.

What it enforces.

Secrets-gate before every Bash call · file leases on edits · capability-aware dispatch · plan-gated fan-out · zombie detection that never mistakes a failed lookup for death · no auto-reclaim — reclaiming a lane is your call.

Consults and zombies.

A lane that needs an answer asks another agent directly, and the reply comes back through its inbox; consults only carry answers between agents. A lane is only flagged dead after two independent signals — heartbeat and transcript — both go stale, and reclaiming it is your call.

Why suspenders.

Belt and suspenders: the graph is the record, and a lane is only flagged dead after two independent signals — heartbeat and transcript — both go stale. Task state lives in the database, so any session — restarted, compacted, or brand new — sees the same queue.

The namesake / Black leather suspenders.
The namesake / Black leather suspenders.

Getting started.

One script wires the hooks into a project: ./install.sh --wire. Each SessionStart bootstraps its session with capabilities, the PreToolUse gates stand in front of every Bash call and every edit, and the fleet board opens in a browser. BSL 1.1 — free for non-production use, commercial license for the rest.

Project context & license

Extracted from the speedy-claude setup. BSL 1.1 — free for non-production use, commercial license available.

github.com/klh/suspenders ↗klh.github.io/suspenders ↗
threads © 2026[email protected] ↗Colophon