Everything on this floor is measured, never staged. Session facts are read from the Claude Code transcripts each agent writes on the operator's machine (~/.claude/projects); repo facts come from gitin the same source repos the project entries cite; archive writes are the entries' own dates. Two things are inferred and say so: states — a moving transcript is «working», a finished turn is «a human decides next», a stop-hook failure is «blocked» — and active time, which sums the gaps between transcript events and stops counting any gap longer than five minutes.
Each card splits an agent's labor three ways. Build is the development done to the agent — edits to its source. Operate is the agent running its own job: every time its entrypoints fire in a transcript — a set planned, a cart priced, a memo drafted — counted as an invocation. Verify is the agent checking itself. Operate counts are runs, not shipped artifacts: these agents keep their real output in a database or in memory, not on disk, so a card with operate activity says «no output recorded on disk» rather than dress an invocation as a delivered set.
The fleet also checks itself while nobody watches. Every morning a LaunchAgent runs each repo's .claude/gate.sh — lint plus its full hermetic test suite — and .claude/evals.sh, the offline eval suites, and writes a dated digest. The board reads that digest: the ☾ rows in the shift log are those runs, each card's «nightly gate» line is its repo's latest result, and a red gate or a yellow eval regression is the first thing the operator triages in the morning. The site never runs a gate itself — it reports what the night actually did.
This page can't see that machine from your browser — and shouldn't. At the operator's desk the board is live and re-measured every few seconds. Everywhere else it serves the last filed report: a snapshot cut on the machine (npm run ops:snapshot), sanitized in code — assigned titles and measured numbers only; prompts, patches, file paths and failure logs never leave the desk — then committed and deployed like any other change. Filing is itself automated: after the gates run, a second LaunchAgent cuts the snapshot, commits it and pushes, and the host redeploys — so the public record refreshes every morning without a hand on it. The chip at the fleet board's foot names which report you're reading, and when it was cut.
Steering notes land in ~/.claude/fleet/steering/<repo>/. No agent reads them automatically — a repo opts in with a session-start hook that reads the inbox aloud and archives it:
# .claude/settings.json — SessionStart hook (per repo, opt-in)
{
"hooks": {
"SessionStart": [
{ "hooks": [ { "type": "command",
"command": "d=\"$HOME/.claude/fleet/steering/$(basename \"$CLAUDE_PROJECT_DIR\")\"; if ls \"$d\"/*.md >/dev/null 2>&1; then echo '── steering notes from the ops room ──'; cat \"$d\"/*.md; mkdir -p \"$d/read\"; mv \"$d\"/*.md \"$d/read/\"; fi" } ] }
]
}
}