Claude Council
Puts the same question to multiple AI coding agents in parallel, shows their answers side by side with a synthesis, so one model's bias doesn't drive your key decisions.
Data-flow disclosure is excellent: OpenRouter explicitly described as a two-hop disclosure, cache stores full prompts in plaintext (with a dropped .gitignore), image bytes excluded from cache/transcripts, /claude-council:advise shows the digest and asks before sending, auto-context capped at 5 files/~10k tokens. Deductions: auto-context is on by default and silently ships source files to third-party APIs; plaintext cache persists on local disk; no documented undo for exports or background-job records; publisher identity unverified. CI pins actions by digest and checksums shellcheck, which supports supply-chain care.
README is internally consistent and detailed (CLI-over-API shadowing, fallbacks, cache-key rules). External API/CLI dependencies have discovery and fallback paths (local council fallback, vision-sibling fallback labeled in output). Deductions: only README plus CI/test files were supplied; the core scripts' actual error handling cannot be statically verified, and failure messages are only partially evidenced (stderr role notes, failed job marking).
Capability boundaries are a standout: the 'Stated vs Assumed' section warns that providers reason from descriptions only and that unanimity can rest on a shared false premise; the --local section honestly flags same-model agreement as non-corroboration. Environment fit is strong (bash 3.2 target, tmux, Windows Git Bash shards, documented install traps). Deductions: the proactive agent's trigger conditions are broad and may be noisy; described scenarios lean toward individual-developer workflows.
Clear information architecture (Quick start/Usage/Configuration/Reference/Development), install notes that call out two genuine traps, honest and thorough known-limitations text, complete MIT license. Deductions: no CHANGELOG or version record visible; positional role binding and OPENROUTER_MODELS ordering fragility is acknowledged but is a real instability; maintenance responsibility rests only on a SECURITY.md reply promise and a stale workflow, with no maintainer roster or roadmap.
Strong output usability: side-by-side panes, synthesis separating consensus from divergence, quiet/export/async modes. Marginal value is clear — cross-vendor bias correction with duplication-aware synthesis. Cost/benefit is transparent (standard vs agent-mode cost/latency table, caching to save spend). Deductions: inherent multi-provider cost per query, and debate round-2 rebuttals largely uncached.
README claims are specific and traceable to features (cache keys, role-binding rules, byte/turn counts), but a static review can only check documentation self-consistency, not the implementation — hence the deduction; the only corroborating files are CI workflows and a test runner, which cannot confirm the many behavioral claims; the product itself separates fact from inference via OBSERVED/NOT VERIFIED labels, which is commendable, but reviewer-level claim/implementation separation scores only mid-range.
- Auto-context is on by default: ordinary questions may silently send source files to third-party APIs; use --no-auto-context for sensitive codebases.
- Cache entries and council-*.md exports store full prompts (including file contents) in plaintext on local disk; clean up before sharing or mirroring workspaces.
- Prompts via OpenRouter pass through both the router and the upstream provider — a two-hop disclosure; teams with data-residency requirements should avoid that seat.
- Positional --roles and OPENROUTER_MODELS ordering are coupled; adding or removing providers silently shifts role assignments — prefer explicit provider=role pairs.
- In --local mode all members are Claude, so their agreement is not cross-vendor corroboration; do not treat it as independent verification.
- Static review saw no CHANGELOG and no core script sources; verify versioning and actual error handling before adoption.
What does this agent do, and when should you use it?
claude-council is a Claude Code plugin that sends one question simultaneously to Gemini, OpenAI, Grok, Perplexity, Kimi, and any model OpenRouter routes to — plus subscription-authenticated codex, antigravity (agy), grok, and kimi CLIs and a local ollama model — via slash commands like /claude-council:ask. It renders answers side by side with vendor-colored banners and produces a synthesis that separates consensus from divergence; when everyone agrees, it names the assumption the agreement rests on. Inside tmux, results stream into a live side pane. Options include role assignment, two-round debate mode, --agents deep analysis, --async background jobs, response caching, and Markdown export. It ships as a Claude Code plugin (installed via hex/claude-marketplace) and also exposes scripts/query-council.sh for direct automation, requiring curl and jq, under the MIT license.
Once installed, /claude-council:ask discovers available providers (API keys, codex/agy/grok/kimi CLIs on PATH, or local ollama), automatically injects up to 5 relevant files (~10k token cap) or attaches context via --file/--image, then queries APIs in parallel with curl or invokes the CLIs. Output is a JSON structure (metadata + round1/round2) rendered in a streaming tmux pane with vendor-colored banners, timing, and model names, followed by a synthesis covering divergences, consensus and its premises — with verifiable claims labeled OBSERVED or NOT VERIFIED. Optional layers: --roles (security/performance/devil, etc.), --debate (a second rebuttal round), --agents (one Claude analyst per provider, ~4x cost and 15-25s extra latency), --local (a council of blind Claude subagents when no keys exist), --async background jobs (fetched via /claude-council:result), response caching (default 1-hour TTL), --output Markdown export, and an opt-in stop-gate where a second model reviews your uncommitted git diff before Claude ends its turn.
- An architect weighing UUID vs BIGINT primary keys or REST vs GraphQL who wants cross-vendor checks instead of a single model's bias
- An engineer stuck debugging dead ends — the proactive council-advisor agent suggests convening the council after repeated failed attempts
- Security reviews via the --roles=security,devil,compliance preset, with different models playing auditor, challenger, and compliance officer
- Users of reasoning or deep-research models that take minutes, using --async to detach the query and /claude-council:result to fetch it later
- Privacy-conscious or budget-limited local developers: --local for a keyless Claude-only council, or ollama so answers never leave the machine
- Teams needing an audit trail of AI-assisted decisions, exporting Q&A and synthesis to Markdown with --output
What are this agent's strengths and limitations?
- Cross-vendor verification is the core differentiator: roughly ten seating options across API keys, four subscription CLIs, and local ollama, with the openrouter seat defaulting to an Anthropic Claude model so the council hears the vendor it otherwise lacks
- Honest synthesis of uncertainty: it separates agreement from divergence, names the premise behind unanimous answers, and labels claims OBSERVED vs NOT VERIFIED to guard against confident unanimity on a wrong assumption
- Rich decision-grade mechanisms: 8 roles (security, devil, etc.), two-round debate mode, --agents structured deep analysis with resumable runs, and a keyless local council mode
- Strong engineering details: separate response and model-availability caches, automatic 8x token-limit bump for reasoning models, automatic CLI-to-API fallback, and a tmux streaming pane with per-provider retry and adaptive light/dark theming
- Tightly coupled to the Claude Code ecosystem: slash commands, the Workflow tool (required by --agents), and the plugin mechanism are Claude Code-specific; outside it you fall back to bare bash scripts
- Cost and latency can scale sharply: --agents mode costs ~4x Claude API usage plus 15-25s latency (one measured eight-seat run hit ~456k analyst tokens), and parallel multi-provider queries bill at each provider
- Privacy requires active management: the cache stores full prompts (including --file contents) in cleartext locally; the openrouter seat discloses twice (to OpenRouter, then the upstream); the stop-gate sends your entire uncommitted diff to an external provider
- Documented limitations: providers see only a description of your problem, never the system, so a wrong premise yields confident unanimity; a 64KB file has pushed the kimi CLI past fifteen minutes, and CLI providers get a single attempt with no retry
How do you install or deploy this agent?
Recommended — Claude Code plugin marketplace:
/plugin marketplace add hex/claude-marketplace
/plugin install claude-councilThen configure at least one provider, any of these:
export OPENAI_API_KEY="..." (or GEMINI_API_KEY, XAI_API_KEY, PERPLEXITY_API_KEY, KIMI_API_KEY, OPENROUTER_API_KEY); or install the codex / agy (Antigravity) / grok / kimi CLIs to use existing subscription auth with no API key; or run ollama locally.
Requirements: curl and jq; macOS, Linux, or Windows via Git Bash.
Manual (dev/offline only): git clone https://github.com/hex/claude-council.git, then claude --plugin-dir /path/to/claude-council. Do not clone into ~/.claude/plugins/ — that is the managed cache and is never scanned for manually added plugins.
How do you use this agent?
Basic invocation:
/claude-council:ask "Should I use UUID or BIGINT primary keys for a SaaS users table?"Common variants:
/claude-council:ask --providers=gemini,openai "..." pick providers
/claude-council:ask --roles=balanced "Review this implementation" role presets
/claude-council:ask --debate "..." two-round debate
/claude-council:ask --file=src/auth.ts "..." attach a file
/claude-council:ask --image=shot.png "..." attach one image (png/jpg/jpeg/webp/gif, up to 10MB)
/claude-council:ask --quiet "..." synthesis only
/claude-council:ask --async "..." then /claude-council:result <job-id> background jobs
/claude-council:status check configuration and connectivity
/claude-council:advise "..." send a bounded slice of the current conversation insteadWithout Claude Code, run the scripts directly:
bash scripts/query-council.sh --providers=gemini,openai --roles=balanced -- "Review this pattern"Key environment variables: COUNCIL_PROVIDERS (pin the default roster), COUNCIL_VERBOSITY=brief|standard|detailed, COUNCIL_CACHE_DIR/TTL, and per-provider <PROVIDER>_MODEL overrides.
How does this agent compare with similar options?
Versus simply asking models one at a time inside Claude Code, claude-council's value is parallel querying, side-by-side comparison, and automated synthesis. Versus a single-model second opinion, its multi-vendor seating plus role and debate mechanisms materially reduce single-model bias. If you only need one external perspective, a single API key and a lighter setup suffices; for genuine cross-vendor cross-checking, this plugin is the more complete tool.