The corral (canvas view)
The corral is the default tab: every active agent in the audit herd renders as a moving node, connected by a line to each file or fault-shard it currently holds a claim on. Click any agent — on the canvas, or in the roster on the right — to filter the live console below to that agent’s lines and open its floating detail window: what it’s working on, which paths it holds, its recent activity, and the memory entries it can recall.
Anatomy of the cockpit
Section titled “Anatomy of the cockpit”The corral isn’t just the canvas — it’s five regions working together, all
fed by the same /api/state snapshot:
-
Header stats (top center) — a running
N agents · N claimscount, plus a· N ⏸suffix whenever an agent is parked awaiting approval. -
Left rail — tasks — every shard in the run’s fault-generation queue, newest work first, each row showing its phase (plant, dev-run, test-write, critic-review) and (once claimed or done) the agent’s name behind a
←arrow. -
Canvas (center) — the live force-directed graph: an agent node per active audit-role seat, a path node per file or function under audit, and a line between them for every live claim. Two mutant-generator shards claiming the same function draw two lines to one path node — that’s the shard split, not a conflict.
-
Right rail — agents & findings — a roster of every active agent (labeled
model/role, e.g.gemini-3.5-flash/mutant-generator) with its most recent command line, and below it the findings panel: every open survivor — a planted mutant the dev suite hasn’t killed yet — with a⚠ N unprovencounter, since a survivor only becomes a counted, proven gap once the test-writer authors a compiling test that actually kills it. -
Bottom — live console — the real command lines the herd actually ran, newest at the bottom like a tailing log, synthesized from the run’s own events, with per-agent filter chips so you can isolate one seat’s stream:
💭 gemini-3.5-flash/mutant-generator planting goal-violating faults…❯ gemini-3.5-flash/mutant-generator planted 5 goal-violating mutants ✓❯ claude-sonnet-5/test-writer authored a test to close the gap⚑ claude-haiku-4-5/test-critic flagged test_full_permutation — a dead range==tuple checkverdict: CERTIFIED — killed 18/20

The agent-detail window
Section titled “The agent-detail window”Click any agent to open its floating detail window: what it’s working on, which paths it holds, its recent activity, and — at the bottom — the memory entries it can recall.

The memory-recall list above isn’t scoped to that one agent — every agent’s
window fetches it from the same call
(s.mem.List(...) inside agentDetail in internal/ui/ui.go) that backs
the Memory tab, capped at 8 entries and filtered only by the viewer’s own
visibility (private vs. shared). So an agent can only ever recall what the
brain’s own memory store actually holds — the shared corpus of
execution-verified audit findings — never more than what the person looking
at the window is themselves allowed to see.
Matrix skin
Section titled “Matrix skin”The header’s skin selector (#skinsel, defined by the SKINS table in
internal/ui/web/replay-player.js) re-voices the same live audit run in a
different vocabulary. Switching to matrix renames the corral to “the
construct” and its tabs (proposals → anomalies, completed → archive),
prefixes every agent’s displayed name with “Mr. “, swaps the ranch/grass
background for falling green glyphs (renderBg’s rain case, drawn by
drawRain), and reworks each role’s in-character chatter lines
(ROLE_LINES.matrix) into construct-flavored quips. None of that touches the
underlying run: setSkin() only rewrites DOM text and re-renders the canvas
background — the same shards, claims, survivors, and live-console lines are
still there underneath, just relabeled.
