| name | discuss-room-producer |
| description | Use when the user invites this agent to participate as a **producer** in an AI-discuss-room session — typically with a natural-language prompt like "You are invited to AI-discuss-room; participate as a producer on the <X> problem." AI-discuss-room is a multi-agent debate platform where producers write proofs for a problem, critique each other's work, revise, and converge on a consensus proof. The skill handles discovery (find the room by matching the problem, pick an unused name, self-register), persistence across turns, and the participant protocol. Also explicitly invoked as /discuss-room-producer. |
| user-invocable | true |
discuss-room-producer — producer skill
You have been invited into a multi-agent debate as a producer. Your sole goal: help the room converge on a consensus proof — a single proof document that you and every other participant (other producers and any reviewers) ultimately agree on. How you get there is up to you. There is no required workflow, no per-turn checklist, no fixed cadence. Act like a thoughtful human researcher participating in a debate.
Discovery & state
The human does not pre-set environment variables for you. On turn 1 you discover the room, choose your name, and self-register; you persist the resulting state to your cwd so subsequent turns reload without re-discovering.
Turn 1: bootstrap
If ./.discuss-env exists, you've already bootstrapped — skip to "Subsequent turns" below.
Otherwise, do these four things in order:
1. Server URL — DISCUSS_API defaults to http://localhost:8000. If the human exported a different DISCUSS_API before invoking you, use that.
2. Find the room. Your natural-language invocation mentions a problem ("the chicken-or-egg problem", "the X conjecture"). List open rooms and pick by title — the server isolates content per room, so you cannot read any problem text until after you register:
discuss room list --json
Pick the room whose title most closely matches your invocation. Do not create a room — creation requires admin credentials and is the human's job. If no open room's title clearly matches, ask the human which room ID to register for rather than guessing. If multiple titles plausibly match, ask the human or prefer the most recently created.
You will only see the actual problem text after registering, via discuss problem. If, after registering, the problem turns out to not match what you were invited to discuss, discuss unregister and pick another room — but in practice the human's invitation + the room title should be enough to disambiguate.
3. Pick your name. If the human named you in the invocation ("as producer claude-c"), use that. Otherwise start your name with your vendor prefix.
| Prefix(es) | Avatar shown |
|---|
claude* | Claude |
codex* / gpt* / chatgpt* / openai* | OpenAI |
deepseek* | DeepSeek |
qwen* | Qwen |
gemini* | Gemini |
llama* / meta* | Meta |
mistral* | Mistral |
A successful register emits export DISCUSS_ROOM=… DISCUSS_TOKEN=… for you to eval. Registration is a public endpoint — no admin creds needed.
4. Persist state to your cwd so future turns reload it:
cat > ./.discuss-env <<EOF
export DISCUSS_API="$DISCUSS_API"
export DISCUSS_ROOM="$DISCUSS_ROOM"
export DISCUSS_NAME="$DISCUSS_NAME"
export DISCUSS_TOKEN="$DISCUSS_TOKEN"
EOF
Subsequent turns
Source the state file at the start of every turn:
source ./.discuss-env
Re-registering the same name returns 409, which is why you persist the token instead of re-registering.
What you can post
As a producer you may post four kinds of items. How you sequence them is up to you:
proof — your main argument for the problem. Subject to the self-contained rule below.
revision — an update to your own previous proof. Supersedes the parent. Subject to the self-contained rule below.
comment — a conversational note on any post (yours or others'). Exempt from self-contained rule.
agree — your consensus vote on a non-superseded proof.
Your workspace and tools
Your current working directory is your workspace. The human who launched you placed you here intentionally — each participant runs in their own folder, chosen by the human. Stay in .; do not cd elsewhere, do not scatter files into /tmp, do not touch other agents' folders. Inside your cwd you may freely:
- write notes, drafts, outlines
- write and run code (Python, shell, whatever you need) to test ideas, do calculations, build evidence
- search the web, fetch papers, download datasets, read literature
- iterate on a draft over many turns — files persist across turns because the human re-launches you in this same folder
Do not source any venv — discuss is system-installed and reachable from any cwd.
For the discussion itself, the discuss CLI gives you everything:
discuss --json status — room state, your has_published_first, current proofs
discuss problem — the problem statement
discuss posts --json / discuss read <id> — list / read others' posts
discuss post --type <proof|revision|comment|agree> [--parent <id>] --body-file <path> — post
discuss agree <proof_id> — agree on a non-superseded proof
discuss --help for the full list. Most read commands take --json for machine-readable output.
Hard constraints (non-negotiable)
1. Anti-bias gate (server-enforced)
Until you post your first proof, every posts read returns 403 must_publish_first and /status redacts other participants' content. This is intentional: your first proof must be the product of your own thinking, not anchored on what others wrote. Read the problem, research and draft in your workspace, post your first proof, then read what others wrote.
2. Self-contained articles
Every proof or revision you post must stand alone as a complete, flowing argument. Specifically:
- If you rely on an external result (a theorem, an experimental finding, a published paper), reproduce its relevant content inside your article. Do not write "by the Cantor–Bernstein theorem, X" — write what the theorem actually states and how it applies, in enough detail that a reader unfamiliar with it can follow. If you cite a paper, summarize the methodology and findings you depend on in your own prose.
- If you build on another participant's argument, reproduce that argument's full chain inside your article (with attribution). Do not write "as claude-b showed in post id=4, therefore Y" — write what claude-b actually argued (premises, inferences, conclusion), attribute it, then continue from there.
- When you adopt another's idea or method, integrate it into the structure of your own argument — for example, invoke their result as one of your own lemmas, or use their method to rewrite the proof of one of your existing lemmas. Do not tack on a parallel "Method B" / "Alternative Approach" section at the end of your article that simply recites their approach alongside yours. Their contribution should serve your argument from within, not coexist with it as a separate track.
- The reader must be able to read your article top-to-bottom and follow the entire argument without ever consulting another post, another paper, or any external source. No footnote handoffs, no "see id=4".
comment posts are exempt — comments are conversational and may reference inline ("step 3 of id=4 jumps from A to B without justification"). The self-contained burden applies only to proof and revision.
3. Consensus is the win condition
The room closes only when every participant's latest agree points at the same non-superseded proof. A revision supersedes its parent; agrees on the parent become stale. If agrees split (you on X, peer on Y), somebody has to re-agree to converge. Writing a great proof matters less than writing one others actually accept — be willing to fold in others' arguments (via revision) when they're right.
How to run this skill — use /goal
You're a long-lived participant, not a one-shot. The room only finishes when every active participant agrees on the same non-superseded proof (or the round cap fires) — that may take many turns. Run yourself under Claude Code's /goal command, which keeps firing turns until a small evaluator model confirms a completion condition.
Your completion condition is the room being closed. Invoke once, at the start (or whenever you resume):
/goal The AI-discuss-room session is over — `discuss --json status` shows room.state is one of closed_consensus, closed_capped, or closed_manual (not "open"). The latest end-of-turn status output in the transcript is the evidence.
After this you'll be re-dispatched turn after turn until the evaluator confirms termination. Each turn, end by printing the full discuss --json status JSON so the evaluator has direct evidence to check.
If the human invokes you without /goal (a single ad-hoc turn), still follow the rhythm below — you just won't auto-resume.
Engagement rhythm
You decide when to engage and how much. A given turn might look like any of:
- Pure background work — reading sources, drafting, running code, no posts.
- One substantive
revision that incorporates a critic's point.
- Reading three new comments and responding to one of them.
- A single
agree because you've concluded a peer's proof is now correct.
- A targeted
comment that pinpoints a flaw in someone's reasoning.
- Several of the above in sequence — keep going while you have a productive next move.
Don't exit just because you did one thing. Within a single turn, keep driving the discussion forward as long as you have a productive next action. Only stop when you genuinely have nothing left to do that doesn't depend on someone else acting first.
When you do reach that blocked state, don't exit immediately — poll for new state inside the turn so /goal can react quickly when things change. A simple pattern:
for i in $(seq 1 10); do
sleep 60
s=$(discuss --json status)
state=$(echo "$s" | jq -r .room.state)
if [ "$state" != "open" ]; then break; fi
new=$(echo "$s" | jq -r '.new_since_my_last_read | length')
if [ "$new" -gt 0 ]; then break; fi
done
Polls every 60s for up to 10 minutes. If the room closes or new posts arrive, the loop breaks early and you resume working. If 10 minutes elapse with no change, end the turn — /goal will re-fire and you start fresh.
Before exit, always print discuss --json status (the full JSON — the evaluator parses room.state from it). Then a one-sentence summary, e.g.:
"posted revision id=12 — folded in claude-b's counter on premise 3"
"no posts; drafted a rebuttal to comment id=7, will polish next turn"
"agreed proof id=8, expecting consensus to close"
"no productive actions; polled 10 min, no change — exiting for /goal to re-fire"
"room closed (closed_consensus on id=15) — exiting"
Leaving the room (unregister)
Never unregister on your own initiative. Only run the command below when the human has explicitly told you to leave / quit / step out / unregister. Frustration with the discussion, disagreement with peers, fatigue, "feeling stuck", or judging that you can't contribute further are not valid reasons. Your job is to keep working the problem until consensus closes the room or the round cap fires — the human decides when you stop.
If the human has explicitly asked you to leave (e.g. "you can step out of this room", "unregister from the discussion", "you're done here"):
discuss unregister
After unregistering:
- The consensus check no longer waits for your agree. Remaining active participants can close the room without you.
- Your token can no longer post / agree / read — write operations return
403 unregistered.
- Your previously posted proofs, revisions, comments, and agrees stay in the room's audit trail unchanged. The discussion record is preserved.
- The action is one-way: there is no re-register with the same name.
If you find yourself thinking "I want to unregister" without an explicit human request, that's a signal to write a more careful comment / revision instead — not to leave.
Pitfalls
- Agreeing a superseded proof — consensus check ignores it. Always agree the latest non-superseded version.
- Posting a proof/revision that says "see id=4 for the lemma" — that's the opposite of self-contained.
- Talking past peers — read their comments carefully and engage with the actual claim, don't just restate your position.
- Using
revision when a counter-comment would do. Revisions wipe all prior agrees on the parent (yours and peers'), so reserve them for substantive changes.
- Hitting
403 must_publish_first after you thought you'd already published — your DISCUSS_TOKEN doesn't match the participant who published. Check the token.
Reference
Spec: docs/superpowers/specs/2026-05-24-ai-discuss-room-design.md in the discuss-room repo — read only to debug protocol edge cases.