A Claude Code plugin that consults multiple AI coding agents in parallel and shows you their answers side-by-side.
$ npx -y skills add hex/claude-council --agent claude-code
Repo: hex/claude-council
What's inside
A Claude Code plugin that consults multiple AI coding agents in parallel and shows you their answers side-by-side. Useful when one model's bias could mislead you and the right call depends on cross-checking โ architecture decisions, debugging dead ends, security reviews, framework picks.

Five providers answering the same question. Each banner names the provider, the
model that answered and how long it took. The synthesis separates what they all
agreed on from where they diverged โ here, whether trapping EXIT INT TERM on
one handler is correct, or whether signals should be converted into exits
first โ and when they agree instead, it names the assumption the answer rests
on.
Quick start ยท Usage ยท Configuration ยท Reference ยท Development
# 1. Install via Claude Code plugin marketplace
/plugin marketplace add hex/claude-marketplace
/plugin install claude-council
# 2. Configure at least one provider โ any of these works:
export OPENAI_API_KEY="..." # or GEMINI_API_KEY, XAI_API_KEY, PERPLEXITY_API_KEY, KIMI_API_KEY,
# OPENROUTER_API_KEY
# OR install the codex / antigravity (agy) / grok / kimi / cursor-agent CLIs (uses your
# existing subscription โ no API key needed)
# 3. Ask anything
/claude-council:ask "Should I use UUID or BIGINT primary keys for a SaaS users table?"
You get side-by-side responses from each configured provider:
๐ณ Codex - default
Use UUID primary keys โ they avoid enumeration, work across distributed
services, and survive imports/exports cleanly.
๐ฆ Antigravity - default
UUIDv7 specifically: security of non-guessable IDs plus the index
locality of time-ordered sequences.
๐ฅ Grok - grok-latest
BIGINT autoincrement โ smaller index, faster joins. Handle public-
exposure concerns with a separate UUID slug column.
๐ฉ Perplexity - sonar-reasoning-pro
BIGINT: 25% smaller than UUID, better cache locality, with citations
to Postgres benchmarks.
## Synthesis
Two providers prefer UUID(v7), two prefer BIGINT. Choice depends on
whether you need distributed ID generation.
When they all agree instead, the synthesis says what that agreement rests on, because agreement is where it is easiest to stop asking:
## Synthesis
All five recommend SQLite. Read that as agreement about the reasoning, not
as verification: every provider was given the same description of a system
none of them can inspect. The answer assumes this stays single-node โ the
one premise that would flip it, and the one nobody here could check.
Inside tmux, results stream into a side pane in real time with vendor-colored banners. Run /claude-council:status to confirm what's configured and connected.
codex, agy (Antigravity), grok, and kimi (Kimi Code) CLIs (subscription auth) when installed โ preferred over their API siblingsollama model as a council member โ no key, no subscription, no network--async) for long-running queries, with /claude-council:result to fetch, list, and cancel/claude-council:advise, which shows you what would leave the machine before it goes# Add the hex-plugins marketplace
/plugin marketplace add hex/claude-marketplace
# Install claude-council
/plugin install claude-council
For normal use, prefer the marketplace or GitHub install above โ both persist across sessions. A manual clone is for running from a local working copy (development, or offline). Clone the repo anywhere, then point Claude Code at the repo root for the current session:
git clone https://github.com/hex/claude-council.git
claude --plugin-dir /path/to/claude-council # repo root; loaded for this session only
Cloned it and nothing loads? Two traps to avoid:
- Don't clone into
~/.claude/plugins/(Windows:%USERPROFILE%\.claude\plugins\). That's Claude Code's managed install cache โ it is never scanned for manually-added plugins, so the plugin won't appear in the Installed tab or respond to its slash commands.pluginDirectoriesinsettings.jsondoes nothing โ it isn't a real setting, so it's silently ignored (no error shown). Use--plugin-dirabove for a local clone, or install via the marketplace / GitHub for a persistent setup.
# Query all configured providers
/claude-council:ask "How should I structure authentication in this Express app?"
# Query specific providers
/claude-council:ask --providers=gemini,openai "What's the best approach for caching here?"
# Include a specific file for review
/claude-council:ask --file=src/auth.ts "What's wrong with this implementation?"
# Attach a screenshot for visual critique
/claude-council:ask --image=shot.png "Why does this dialog render off-center?"
# Export response to markdown file
/claude-council:ask --output=docs/auth-decision.md "How should we implement authentication?"
# Quiet mode - show only synthesis
/claude-council:ask --quiet "What's the best caching strategy?"
# Check connectivity and configured models for each provider
/claude-council:status
# Run a long query in the background, fetch it later
/claude-council:ask --async "Deep-dive the tradeoffs of event sourcing here"
/claude-council:result <job-id>
| Flag | Description |
|---|---|
--providers=list | Query specific providers (e.g., gemini,openai,codex). Naming one in plain words works too: "check with grok" runs the council with that provider alone. There is no --grok style flag |
--roles=list | Assign roles (e.g., security,performance, a preset like balanced, or provider=role pairs) |
--debate | Enable two-round debate mode |
--file=path | Include specific file in context |
--image=path | Attach one image (e.g. a screenshot) for vision-capable providers |
--output=path | Export response to markdown file |
--quiet | Show only synthesis, hide individual responses |
--agents | Agent-enhanced analysis, one Claude analyst per provider (slower, deeper) |
--local | Local Claude-only council when you have no provider keys (see below) |
--async | Detach the query as a background job; fetch with /claude-council:result |
--no-cache | Force fresh queries, skip cache |
--no-auto-context | Disable automatic file detection |
--no-pane | Disable streaming tmux pane (default: on inside tmux) |
--verbosity=LEVEL | Response style: brief / standard / detailed |
Assign different perspectives to each provider for more comprehensive reviews:
# Use specific roles
/claude-council:ask --roles=security,performance,maintainability "Review this auth code"
# Use a preset
/claude-council:ask --roles=balanced "Review this implementation"
# Bind a role to a named provider instead of a position
/claude-council:ask --roles=openrouter-2=security,perplexity=devil "Review this design"
Available roles:
security - Security Auditor (vulnerabilities, OWASP Top 10)performance - Performance Optimizer (efficiency, bottlenecks)maintainability - Maintainability Advocate (clarity, future changes)devil - Devil's Advocate (challenges assumptions)simplicity - Simplicity Champion (identifies over-engineering)scalability - Scalability Architect (growth, scaling)dx - Developer Experience (API ergonomics)compliance - Compliance Officer (GDPR, regulations)Presets:
balanced - security, performance, maintainabilitysecurity-focused - security, devil, compliancearchitecture - scalability, maintainability, simplicityreview - security, maintainability, dxA bare list is positional: the first role goes to the first provider
discovery returns, the second to the second, and so on. That is fine for a fixed
roster and fragile for a growing one โ adding a provider script shifts every
later provider's role by one, and reordering OPENROUTER_MODELS reassigns which
router seat plays which part. Both happen silently, because only non-empty roles
are printed.
provider=role pairs bind the two explicitly and survive both. The two forms
cannot be mixed in one --roles (a bare entry alongside a keyed one is
ambiguous); a pair naming a provider that is not being queried, or naming one
provider twice, is refused rather than resolved; and any provider left without a
role is named on stderr:
Note: no role for openai grok
Enable multi-round discussions where providers critique each other:
/claude-council:ask --debate "How should I structure the database schema?"
How it works:
Debate mode surfaces blind spots and stress-tests recommendations. The synthesis includes:
Combine with roles for focused debates:
/claude-council:ask --debate --roles=security,performance,simplicity "Review this architecture"
For complex decisions where deeper analysis justifies the extra time and cost, --agents runs
one Workflow of parallel Claude analyst agents that each independently query, evaluate, and
analyze their provider's response before the orchestrator synthesizes everything. Each analysis
is returned as schema-enforced structured output, and an interrupted run can be resumed with the
finished analysts served from cache. Needs a Claude Code with the Workflow tool.
# Explicit flag
/claude-council:ask --agents "Should we migrate from REST to GraphQL? What are the tradeoffs?"
# Combine with other flags
/claude-council:ask --agents --roles=security,scalability --providers=gemini,openai "Review this auth architecture"
What each analyst does (beyond a simple API call):
Enhanced synthesis includes:
Natural language triggers: The command also detects complex questions automatically. If your question contains architecture, security review, tradeoff analysis, or similar signals, you'll be asked whether to enable agent mode.
FAQ
claude-council is a Claude Code plugin with 4 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes council-execution, deep-execution, local-council-execution. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it