roundtable
Multiple Claude Code agents debate. One moderator synthesizes.

Why
Claude Code's sub-agents can't talk to each other — they only report back to the parent. Roundtable solves this by orchestrating N independent Claude Code processes through a shared transcript, enabling real multi-perspective debate on any topic.
A moderator agent drives the discussion: identifies gaps, asks targeted questions, detects convergence, and produces a structured synthesis.
Install
npx (zero install):
npx roundtable debate -m haiku -r 2
npm global:
npm install -g roundtable
From source:
git clone https://github.com/umutc/roundtable.git
cd roundtable
make install # builds + copies to ~/.local/bin/
Claude Code plugin (run debates from inside a Claude Code session):
/plugin marketplace add umutc/roundtable
/plugin install roundtable@roundtable-marketplace
Then invoke from any Claude Code session:
/roundtable:debate <topic> — generic N-agent debate
/roundtable:code-review [scope] — multi-disciplinary code review panel on current cwd
/roundtable:microservices <topic> — architecture debate panel
The plugin wraps npx roundtable under the hood — still needs Node 16+ and an authenticated claude CLI. Plugin manifest lives at .claude-plugin/marketplace.json; skills at plugins/roundtable/skills/.
Requires: Claude Code CLI installed and authenticated (claude in PATH).
Quick Start
Zero-config debate
roundtable --topic "Should we use microservices?" -m haiku -r 2
No TOML file needed — generates a default Advocate vs Critic debate.
Built-in configs
roundtable debate -m haiku -r 2
roundtable microservices -m sonnet -r 3
Code review on your project
roundtable code-review \
--cwd "$(pwd)" \
--context-file CLAUDE.md \
--topic "Review the auth architecture"
Use from inside Claude Code
result=$(roundtable debate --topic "Monorepo vs multi-repo?" --output-json -m sonnet)
echo "$result" | jq -r '.synthesis'
--output-json returns machine-readable output that a parent Claude Code session can parse and act on.
How It Works
+---------------------------------------------+
| roundtable binary |
+---------------------------------------------+
| |
| Opening: All agents give initial views |
| |
| Round N: |
| 1. Moderator analyzes transcript |
| 2. Moderator returns: |
| {"action":"continue","guidance":"..."} |
| or {"action":"synthesize"} |
| 3. If continue: agents respond |
| 4. If synthesize: final report |
| |
| Output: Structured synthesis report |
| Transcript: JSONL file for audit |
+---------------------------------------------+
Each agent maintains its own Claude Code session (--resume), so context builds across rounds.
Configuration
Configs are TOML files. See examples/ for templates. You can also use built-in names (debate, code-review, microservices) or skip config entirely with --topic.
[session]
topic = "Should we migrate to microservices?"
model = "sonnet" # default model for agents
moderator_model = "opus" # smarter model for moderator
max_rounds = 10 # safety limit
max_turns = 2 # claude turns per call
# fallback_model = "sonnet" # auto-fallback on overload
# max_budget_usd = 5.0 # cost limit
# effort = "high" # Opus only: low/medium/high/max
# permission_mode = "plan" # default/acceptEdits/plan/auto/bypassPermissions
[project] # optional: ground discussion in real code
# description = "Next.js e-commerce app"
# context_files = ["CLAUDE.md", "package.json"]
# add_dirs = ["../shared-lib"]
# mcp_config = ".claude/mcp.json"
[moderator]
role = """
Your moderator instructions here.
Must end with JSON: {"action":"continue","guidance":"..."} or {"action":"synthesize"}
"""
[[agents]]
name = "Backend Dev"
role = "Your role description"
color = "red" # red/blue/green/yellow/magenta/cyan (default: white)
# model = "opus" # per-agent model override
# effort = "high" # per-agent effort
# max_turns = 3 # per-agent turn limit
# allowed_tools = ["Read", "Grep", "Glob"]
# disallowed_tools = ["Edit", "Write"]
CLI Reference
roundtable [OPTIONS] [CONFIG]
Arguments:
[CONFIG] TOML config file or built-in name (debate, code-review, microservices)