wickedagilewicked-studio
wicked-studio · the coder’s front door of the wicked platform

Launch. Watch. Steer.
Verified.

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.

127.0.0.1:7701 · served by your crew daemon · same-origin
live events · ws /ws
studio › term attach r-7c19 # real PTY · /ws/terminals/:id
insight rail

Tokens, cost, and rework per CLI — live during the run, not on the invoice.

  1. 1
    Launch a run from a plain-text brief: add rate-limiting to the public API
  2. 2
    Watch live CoreEvents stream over /ws — phase ladder, unit list, burn, diffs
  3. 3
    Steer the gate — approve, amend, or reject. schema-drift · DENY → held for you
pure client of /api/v1 + /wszero crew source importedbundled or standalonethe decision is yoursdark / lightlocal-first
The run board · the SPA’s real panels

If the daemon exposes it, the board shows it.

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

runsGET /runs · WS /ws

The run board itself: launch from a brief, watch the phase ladder and unit list move, read live output, answer the steering timeline.

The experience plane · one project model

One project. Two front doors.

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.

project · payments-refresh
  1. crewrun r-7c19feature workflow · build → adversarial-review → test — held once, steered, landed
  2. crewgate decisionschema-drift DENY → approved with steer · on the decisions ledger
  3. interactivedoc payments-deckthe creator skin’s deck, in this same feed — created, drafted, delivered
  4. crewchat c-2214roster fan-out: “what breaks if we shard the ledger?” — three seats answered
  1. interactivewicked.interactive.doc.createdthe deck asks for a first draft — over the bus
  2. crewgoverned run answersa crew run drafts it — heartbeats stream while it works
  3. interactivewicked.interactive.draft.completeda real draft, idempotency-keyed — replays can’t double-deliver
  4. crewrun r-7c19 · evidencethe coder’s run sits in the creator’s view too — same feed, other door
GET /api/v1/projects/payments-refresh/activitysame project · same feed · rendered by the coder’s skin

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

One API · zero private seams

If the skin can show it, the API serves it.

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 CoreEvents

Crew’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 origin

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

the carve, provene2e/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.
The wicked platform

Two skins. One control plane.
One catalog. One record.

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.

ExperienceTwo front doors, one project modelRendering and editing surfaces — nothing semantic lives here.
wicked-interactivecreator skin

Describe it, watch it build in-browser, point at what to change. Ships HTML, PDF, decks, video.

wicked-studiocoder skin

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.

you are here
submit intent · watch the run · answer gates — one crew API, both skins are pure clients
ControlIntent in, verified work outOrchestration, governance, gates — runs the coding agents you already use as governed workers.
wicked-crewthe control plane

Evaluator ≠ creator — no agent grades its own homework. “Done” is re-derived from evidence, never asserted. Workflows are data.

invokes skills as governed workers — deny dominates, every verdict lands in the record
CapabilityThe catalog — what agents can doSkills, tools, playbooks, councils; the QE specialist fleet. The only sanctioned way agents touch the record.
wicked-gardenthe catalog

Multi-model review councils, graph-aware refactors, repo playbooks — plus an open naming contract to ship your own pack.

reads & writes the record through its contract — never around it
FoundationThe system of recordCode graph · memory · knowledge · evidence · events. Zero-infra and local-first today; a team profile is on the roadmap.
wicked-estatethe record

A 102-language code graph, memory, and knowledge in one binary (MCP) — including the injected edges grep never sees.

Get it

One command. The studio is already in it.

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.

Recommended · bundled with crew
npx wicked-crew serve   # daemon + this studio · one port · same origin

Node ≥ 22. The daemon serves the studio at its own origin — open the printed URL and launch a run. wicked-studio npm v0.1.0

Standalone · your own daemon
VITE_API_HOST=127.0.0.1:7701 npm run build
npx serve dist          # any static server · SPA fallback to index.html
View on GitHub