Skip to content

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.

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 claims count, 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 unproven counter, 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 check
    verdict: CERTIFIED — killed 18/20

The corral cockpit mid-audit: header reads “4 agents · 6 claims”; the left rail lists fault-generation shards (“2 CLAIMED · 1 READY · 3 DONE”) including a mutant-plant shard claimed by gemini-3.5-flash/mutant-generator and done rows credited to claude-sonnet-5/test-writer and claude-haiku-4-5/test-critic; the canvas shows four agent nodes — two mutant-generator shard seats, one test-writer, and one test-critic — with claim lines to the audited file and its planted-mutant shards, and an amber dashed ring on the test-writer marking it “awaiting jail result”; the right rail lists all four agents with their latest command and a findings panel reading “SURVIVORS · 2 OPEN ⚠ 1 UNPROVEN” with one proven gap and one unproven survivor; the bottom strip reads “LIVE CONSOLE · 8” with ALL / per-agent filter chips and real scrolled command lines including a mutant-plant, a dev-suite run, and the CERTIFIED verdict line

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.

A floating agent-detail window for claude-sonnet-5/test-writer showing it has been active 40 seconds, is working on “author a test to kill the surviving mutant in full_permutation”, holds a claim on the audited file, and lists “MEMORY IT CAN RECALL (5)” with five execution-verified audit findings such as demo-corral-tour-lesson-length-only-password-test, demo-corral-tour-lesson-dead-range-tuple-check, and demo-corral-tour-note-kill-rate-not-pass-count

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.

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 (proposalsanomalies, completedarchive), 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.

The same seeded audit run as above, switched to the matrix skin: the header reads “CorralAI — the construct” with tabs relabeled “anomalies” and “archive”, a falling-green-glyph background behind the canvas, every agent name prefixed “Mr.” (Mr. mutant-generator, Mr. test-writer, Mr. test-critic), and the identical claims, survivor findings, and live-console lines from the ranch-skin screenshot above