___
/ | ____ _____ _________ _
/ /| |/ __ `/ __ \/ ___/ __ `/
/ ___ / /_/ / /_/ / / / /_/ /
/_/ |_\__, /\____/_/ \__,_/
/____/
native desktop app for watching claude code multi-agent debates in real time. also runs debates between any combination of models yourself.
i built this because claude code's multi-agent teams dump JSON into inbox files and there's no native way to watch the conversation unfold. then i added a full debate runner on top. then i kept going.
agora-intro.mp4
brew tap stresstestor/tap
brew install --cask agoraor grab the DMG from releases. Apple Silicon only for now.
watch mode — passive viewer for claude code team debates
- watches
~/.claude/teams/*/inboxes/*.jsonvia macOS FSEvents (+ 2s poll fallback) - parses 5 different inbox JSON formats (array,
{messages:[]},{inbox:[]}, single object, key-value map) - deduplicates messages by content hash
- detects new teams appearing at runtime
- tracks task status changes from
~/.claude/tasks/ - color-coded agents: advocate (cyan), critic (red), synthesizer (purple), team-lead (amber), fallback palette for custom agents
- per-message collapse/expand buttons, content search (Cmd+K), auto-scroll
- archives previous debate messages when a new debate starts on the same team
debate mode — run your own multi-model debates
- 13 providers: Anthropic, OpenAI, OpenRouter, Groq, OpenCode, Gemini, DeepSeek, Moonshot, MiniMax, Z.ai, and more
- streaming text — responses stream in character by character as the model generates them, with a blinking cursor. no waiting for the full response before seeing anything
- claude code CLI provider — no API key needed, uses your existing CC subscription. runs
claude -pas a subprocess so you never touch the OAuth token - mix providers per agent in the same debate (e.g. Claude Haiku via CC vs Gemini Flash via API key)
- 4-step wizard: team name, agents, topics, settings
- topic refinement — ✦ button on the topics field sends your rough idea to a configured AI and rewrites it into a specific, debatable topic. uses CC by default, configurable in settings
- import agent configs from existing claude code teams
- termination modes: fixed rounds, topic cycling, convergence detection, manual stop
- visibility modes: group (everyone sees everything) or directed (one-to-one)
- pause/resume/stop/restart controls
- API keys stored locally at
~/.config/agora/config.json
CLI / TUI mode — run debates from the terminal
no GUI needed. the same binary doubles as a CLI tool with a full ratatui TUI for streaming debates in the terminal.
# run a debate with the TUI (default)
agora debate \
--name rust-vs-go \
--agent model-a:groq:llama-3.3-70b-versatile:debater \
--agent model-b:gemini:gemini-2.5-flash:debater \
--judge judge:opencode:mimo-v2-pro-free \
--topic "Is Rust better than Go for backend services?" \
--rounds 5
# plain text mode (no TUI, just streaming output)
agora debate --plain ...
# list available presets
agora list-presets
# list models for a provider
agora list-models groqTUI features: agent-colored chat panels, per-turn timing, markdown rendering, vi-style scroll (j/k/PgUp/PgDn), live streaming with cursor indicator. press q to quit (debate thread stops immediately).
27 role presets across 7 categories
| category | roles |
|---|---|
| core | advocate, critic, synthesizer, moderator |
| pressure | devil's advocate, contrarian, pessimist, optimist |
| domain | domain expert, security auditor, pragmatist, researcher, historian |
| creative | visual designer, brand strategist, art director, minimalist, marketer |
| business | product manager, stakeholder, end user, legal |
| perspective | user advocate, first principles |
| arena | debater, judge |
13 debate presets across 6 categories
| category | presets |
|---|---|
| deliberation | 3-agent deliberation, red team / blue team |
| technical | adversarial probe, architecture decision, go / no-go |
| product | product critique, feature scoping, build vs buy |
| creative | creative review |
| research | research panel, first principles reset |
| arena | 1v1 duel, 3-way arena, provider showdown |
role and preset dropdowns have search/filter built in.
| provider | key required | notes |
|---|---|---|
| claude code (CLI) | no | uses CC auth, ~10s per turn (Node startup) |
| anthropic | yes | direct API |
| openai | yes | direct API |
| groq | yes | fast inference, free tier available |
| gemini | yes | OpenAI-compatible endpoint |
| openrouter | yes | routes to any model |
| opencode zen | yes | |
| deepseek | yes | |
| moonshot / kimi | yes | |
| minimax | yes | |
| z.ai | yes |
- api keys — per-provider, stored in
~/.config/agora/config.jsonat mode 600 - generation model — provider + model used for topic refinement and other single-shot AI calls. defaults to claude code CLI if unset
requires rust and tauri CLI:
cargo install tauri-cli --version '^2'
git clone https://github.com/StressTestor/Agora-ai-agent-visualizer.git
cd Agora-ai-agent-visualizer
cargo tauri buildthe .app lands in src-tauri/target/release/bundle/macos/. copy to /Applications/ or run directly.
if your root disk is full, build to an external drive:
CARGO_TARGET_DIR=/Volumes/yourDrive/.cargo-tmp cargo tauri build- tauri 2 (rust backend, webview frontend)
- ratatui 0.29 + crossterm 0.28 (terminal UI)
- clap 4 (CLI argument parsing)
- notify 6 (FSEvents watcher)
- reqwest 0.12 (blocking HTTP for provider calls)
- vanilla HTML/CSS/JS frontend — no framework, no bundler
- single binary, no runtime deps
MIT