The run board for governed agent delivery. Describe the problem, watch the live event stream phase by phase, and answer the gates that hold it — the decision is always yours. This is not a mock of the product: it is the interface, and the one below is live. Drive it.
Tokens, cost, and rework per CLI — live during the run, not on the invoice.
add rate-limiting to the public API/ws — phase ladder, unit list, burn, diffsEvery panel below is a real route in the SPA, fed by a real route on the daemon —nothing rendered here is privileged. The governance vocabulary you’ll meet (deny-dominates gates, evaluator ≠ creator) is crew’s; the skin surfaces it and never grades anything. The board auto-cycles — click a panel to pin it.
The run board itself: launch from a brief, watch the phase ladder and unit list move, read live output, answer the steering timeline.
The Project model lives in the control plane — /api/v1/projects, nine routes — and both skins are pure clients of it. A project groups runs, chats, and docs; its activity feed merges crew’s durable core events withwicked-interactive’s bus events carrying the sameproject_id. The coder’s door and the creator’s door open onto thesame room — flip the skin below and watch the same project re-render.
run r-7c19feature workflow · build → adversarial-review → test — held once, steered, landedgate decisionschema-drift DENY → approved with steer · on the decisions ledgerdoc payments-deckthe creator skin’s deck, in this same feed — created, drafted, deliveredchat c-2214roster fan-out: “what breaks if we shard the ledger?” — three seats answeredwicked.interactive.doc.createdthe deck asks for a first draft — over the busgoverned run answersa crew run drafts it — heartbeats stream while it workswicked.interactive.draft.completeda real draft, idempotency-keyed — replays can’t double-deliverrun r-7c19 · evidencethe coder’s run sits in the creator’s view too — same feed, other doorGET /api/v1/projects/payments-refresh/activitysame project · same feed · rendered by the coder’s skinWhere this stands: the Project model is shipped in the control plane — nine routes, the merged activity feed, durable gate prompts across member runs (GET /projects/:id/prompts). The studio’s dedicated project browser is landing in this skin next; the run board you saw above already rides the same daemon.
Studio imports zero crew source. The only artifact the two products share is the published wire contract — wicked-crew-api-types. Everything on this page rides/api/v1 and the /ws CoreEvent stream; there is no back channel. How the SPA finds its daemon is one deliberate seam — flip it.
$ npx wicked-crew serve # UI + API · one port · same origin
apiBase() → window.location.origin + '/api/v1'
wsBase() → wss? + window.location.host # /ws CoreEventsCrew’s release build copies studio’s built dist/ into the daemon’s serving tree — one command, one port. No host is baked into the bundle:--port / CREW_PORT just work.
$ VITE_API_HOST=127.0.0.1:7701 npm run build
$ npx serve dist # any static server · SPA fallback
apiBase() → http://127.0.0.1:7701/api/v1
wsBase() → ws://127.0.0.1:7701 # same contract, other originThe daemon’s loopback CORS admits any localhost origin, so a standalone studio on its own port drives a local daemon out of the box — the daemon stays fully functional headless either way.
e2e/studio_standalone_test.py builds the SPA, serves dist/ from a plain static server, points it at a live daemon, and drives a real browser through a real flow — list runs → open a run → approve a human gate → watch CoreEvents over WS.Four planes, four contracts. Hover or tab through a plane to see its role and what crosses its seams — every cross-plane interaction goes through the contract, never around it.
Describe it, watch it build in-browser, point at what to change. Ships HTML, PDF, decks, video.
The run board: launch runs, watch phases stream, answer gates. A pure client of crew’s /api/v1 — its own product; crew still bundles it.
Evaluator ≠ creator — no agent grades its own homework. “Done” is re-derived from evidence, never asserted. Workflows are data.
Multi-model review councils, graph-aware refactors, repo playbooks — plus an open naming contract to ship your own pack.
A 102-language code graph, memory, and knowledge in one binary (MCP) — including the injected edges grep never sees.
The studio ships bundled inside wicked-crew: npx wicked-crew servestarts the daemon and serves this skin same-origin on one port — nothing else to install. Running the skin standalone against any daemon is equally supported; it’s the same build, pointed by one env var.
Prefer the whole family? npx wicked-installer is the interactive, cross-CLI installer for every wicked-* product.
npx wicked-crew serve # daemon + this studio · one port · same originNode ≥ 22. The daemon serves the studio at its own origin — open the printed URL and launch a run. wicked-studio npm v0.1.0
VITE_API_HOST=127.0.0.1:7701 npm run build
npx serve dist # any static server · SPA fallback to index.html