Structured multi-agent AI debate on any topic
npx claudepluginhub colings86/ai-debateStructured multi-agent AI debate on any topic. Start with /debate.
A structured debate between AI agents, packaged as a Claude Code plugin. Install once, then use
/debate from any directory to run a fully orchestrated debate on any topic.
Specialised agents — Chair, N configurable Debaters, Reporter, Verifier, Audience, and Assessor — argue a topic, fact-check each other's sources in real time, and produce a publishable written record.
| Agent | Role |
|---|---|
| Chair | Neutral moderator. Manages turn order, issues rulings, declares the outcome. Proposes the debater lineup and waits for user approval before spawning agents. |
| Debaters | N configurable participants, each with their own persona, starting position, and incentives — proposed by the Chair at startup and approved by the user before the debate begins. |
| Reporter | Silent observer. Produces the transcript, summary, and blog post at the end. |
| Verifier | Async fact-checker. Verifies every cited URL and flags fabricated sources. |
| Audience | Engaged observer. Submits clarifying questions mid-debate; gives a final opinion at close. |
| Assessor | Post-debate reviewer. Evaluates each agent's performance and produces an improvement report. |
The Chair is the lead Claude Code session. It proposes a debater lineup based on your topic, waits for your approval, then spawns all agents as teammates and coordinates a structured debate through opening statements, multiple rebuttal rounds, and closing statements before declaring a winner.
All debate entries are written to {output_dir}/debate-log.jsonl — an append-only log inside
the run's output directory that acts as the shared source of truth for all agents.
bash, python3, and flock available (standard on macOS and Linux)Via marketplace (recommended):
/plugin marketplace add colings86/ai-debate
/plugin install ai-debate@ai-debate
Directly from a local clone:
claude plugin install ./plugins/ai-debate
After installation, the /debate skill is available in any Claude Code session.
In any Claude Code session (no need to cd into the repo):
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 claude
Then type:
/debate
The Chair will ask for your topic if you haven't provided one, propose a debater lineup, and wait for your approval before starting.
Or provide a topic immediately:
/debate The topic is: Should artificial intelligence be used to make judicial decisions?
You have three ways to tell the Chair who should debate:
Option 1 — No spec (Chair decides):
/debate The topic is: X.
The Chair proposes a contextually appropriate lineup — typically 2 debaters in classic adversarial format, or 3 if the topic has distinct natural perspectives. You review and approve before the debate begins.
Option 2 — Persona hints:
/debate Topic: X. I want a venture capitalist, a labour economist, and an AI safety researcher.
The Chair fleshes out each persona with an appropriate starting position and incentives, then presents the lineup for your approval.
Option 3 — Specific detail:
/debate Topic: X.
Debater 1: venture-capitalist — argues AI is net positive for employment; incentivised by growth narratives.
Debater 2: labour-economist — argues structural unemployment is underappreciated; incentivised by worker welfare data.
The Chair uses your specifications directly, filling in any gaps you leave.
Modifying the proposed lineup: After the Chair presents its proposal, you can reply "Can you make the second debater more sceptical, focused on data quality issues?" and the Chair will revise and re-present before proceeding.
Debater name constraint: Names must be alphanumeric plus hyphens only (e.g.,
venture-capitalist,labour-economist). The Chair handles this automatically.
The Chair narrates progress in its main session. If you have tmux available, you can split each
agent into its own pane for full visibility:
tmux new-session -s debate
export CLAUDE_CODE_SPAWN_BACKEND=tmux
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 claude
You can also tail the debate log in another terminal (substitute your run's output directory):
tail -f output/<timestamp>-<slug>/debate-log.jsonl | python3 -c "
import sys, json
for line in sys.stdin:
e = json.loads(line)
print(f'[{e[\"seq\"]}] {e[\"speaker\"]}: {e[\"type\"]} — {e[\"content\"][:80]}')
"
When the debate concludes, the Reporter writes all output files to a timestamped directory under
output/ in your current working directory. For example: