Five-role Design Jury review that streams scored rounds, persists a replayable transcript, and ships through the daemon's Critique Theater protocol.
Design Jury is the user-facing name for Critique Theater. When the daemon enables it for an artifact-generating run, it appends the active protocol, brand source, thresholds, and weights to the agent prompt. The agent then plays the fixed v1 cast — Designer, Critic, Brand, Accessibility, and Copy — as turns inside the same CLI session.
<CRITIQUE_RUN> envelope containing <ROUND>, <PANELIST>,
and <ROUND_END> blocks and, only after a ship decision, one final
<SHIP> block. Do not emit prose outside the envelope.<MUST_FIX> items. The cast is fixed
in v1; a plugin does not replace it with a custom list of axes.PanelEvent variants
and publishes them on critique.* SSE channels. It recomputes the composite
from the scoring panelists, so an agent-supplied composite is advisory.critique.json in the project cwd or emit a
kind: "critique-panel" object. Those were the pre-orchestrator shape and
are not inputs to the current runtime.The default review uses a 0–10 scale, an 8.0 ship threshold, and at most three
rounds. A round ships only when its daemon-computed composite reaches the
configured threshold and no open must-fix items remain. The active values
come from OD_CRITIQUE_* configuration, including
OD_CRITIQUE_MAX_ROUNDS, OD_CRITIQUE_SCORE_THRESHOLD, and the fallback
policy.
OD_MAX_DEVLOOP_ITERATIONS still caps an outer plugin pipeline stage; it is
not the Design Jury round limit or ship rule. Likewise, a pipeline's
critique.score signal is a scheduler-facing projection, not the wire output
the agent should manufacture.
The daemon stores the terminal run and per-round summaries in SQLite and
writes the ordered PanelEvent stream as a replayable NDJSON transcript
(gzip-compressed when large). Final artifact bytes are stored separately; the
ship event carries only an artifactRef.
The web Design Jury surface exposes Interrupt and an Esc shortcut. After
the user triggers either, the web app posts to
/api/projects/:projectId/critique/:runId/interrupt; the daemon aborts the
registered run, persists the partial best-so-far state, and emits
critique.interrupted. od ui respond handles GenUI surfaces and does not
provide a break-loop action for Critique Theater.
Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/critique-theater · pinned to the source commit
# Run from your project root
git clone https://github.com/nexu-io/open-design.git .skillboard-tmp
git -C .skillboard-tmp checkout 9881cff70e02be86c2a58130af512011ba23d4af
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/plugins/_official/atoms/critique-theater" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/nexu-io/open-design.git .skillboard-tmp
git -C .skillboard-tmp checkout 9881cff70e02be86c2a58130af512011ba23d4af
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/plugins/_official/atoms/critique-theater" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/critique-theater
Scanner static-checks@0.1.0 · commit 9881cff70e02. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
No static rules matched. This is not a safety guarantee.