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

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.

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 ↗