the-council
v0.2.0
Published
Subscription-friendly, multi-LLM debate orchestrator. Spawns local CLI agents as a council, runs structured rounds, and produces a markdown consensus report.
Downloads
299
Maintainers
Readme
🏛 council
Multi-LLM debate orchestrator that uses your own subscription-auth'd CLIs — no API keys, no third-party token forwarding.
What is this?
council spawns the LLM CLIs you already have installed (Claude Code, OpenAI Codex, Gemini CLI, GitHub Copilot CLI, Cursor Agent, Ollama) as parallel debate agents, runs them through a structured multi-round debate, and synthesizes a markdown consensus report.
Why?
Most multi-LLM tools require provider API keys and bill you again on top of the subscriptions you already pay for. council calls the official CLIs as subprocesses, so each request hits your subscription quota — and your CLI-level memory (CLAUDE.md, ChatGPT custom instructions, Gemini Gems) is automatically in scope.
Quick start
pnpm install -g council-cli # or: npx council-cli
council init # creates ~/.council/profile.md and ./.councilrc.json
council doctor # checks which CLI agents are installed
council ask "Will remote work normalize long-term in Turkey?"Or use the built-in web dashboard:
council dashboard # boots server + opens browserFor headless / programmatic use:
council serve --port 7474 # just the API + SSEAdapters
| Adapter | Binary | Auth | Notes |
|-----------|----------------|-----------------------|---------------------------------------------|
| claude | claude | Claude subscription | claude -p ... --output-format json |
| codex | codex | ChatGPT Plus / API | codex exec --json |
| gemini | gemini | Google account | falls back to antigravity post-2026-06-18 |
| copilot | gh copilot | GitHub Copilot | multi-model via --model |
| cursor | cursor-agent | Cursor subscription | --headless --format json |
| ollama | HTTP :11434 | local | great for a free devil's advocate |
| mock | (internal) | none | deterministic, used for tests |
Example output
# Council Report: Will remote work normalize long-term in Turkey?
**Stopped because:** consensus
**Rounds:** 3 / 4
## Verdict
The council converges on "partially yes": industries with strong digital
infrastructure normalize remote/hybrid; legacy sectors regress to office.
## Strong agreements
- Hybrid is the steady state, not pure remote.
- Tax & labor-law incentives are the lagging variable.
## Persisting disagreements
- Whether SMB hiring will be remote-default by 2030.
## Confidence: mediumConfiguration
./.councilrc.json (created by council init):
{
"agents": [
{ "adapter": "claude", "id": "claude-sonnet", "role": "rigorous-analyst" },
{ "adapter": "codex", "id": "gpt-5", "role": "creative-strategist" },
{ "adapter": "ollama", "id": "qwen-local", "role": "devils-advocate", "model": "qwen2.5:14b" }
],
"judge": "claude-sonnet",
"budgets": { "maxRounds": 4, "maxTotalTokens": 60000, "wallClockMs": 600000, "perRoundTimeoutMs": 120000 },
"consensus": { "stabilityThreshold": 0.9, "minRoundsBeforeStop": 2 },
"output": { "dir": "./council-runs", "saveTranscript": true, "saveReport": true }
}CLI flags override the file: --rounds, --agents, --judge, --output, --config, --json, --quiet, --mock.
Memory & personalization
~/.council/profile.mdis injected into every agent prompt as<user_context>...</user_context>.~/.council/agents/<agentId>.mdlets you give per-agent overrides.- Override the profile path with
COUNCIL_PROFILE_PATH=....
See docs/MEMORY.md.
Cost & limits
Rough rule of thumb: a default 4-round debate with 3 agents ≈ 40k–60k tokens of subscription budget total (judge included). Use the Ollama adapter as a free devil's advocate to cut paid-side usage roughly in half. See docs/COST.md.
FAQ
Is this ToS-compliant?
⚠️ Every adapter shells out to the official CLI provided by the upstream vendor.
councildoes no reverse engineering, no web-UI automation, no token forwarding. That said, some providers may discourage heavy agentic usage — keep an eye on your account.
Does it forward tokens between providers? No. Each CLI uses its own login. We never read, store, or transmit auth tokens.
Does it phone home? No telemetry, ever. The only network calls are the ones the user's own CLIs make.
Architecture
┌──── claude ─┐
thesis →│──── codex ─┼─→ summary → critique round → judge → consensus report
└──── ollama ─┘A single Orchestrator event-bus drives both CLI mode and HTTP/SSE serve mode. Details: docs/ARCHITECTURE.md, docs/SERVER.md.
Contributing
To add a new adapter:
- Create
src/adapters/<name>.tsthat extendsBaseAdapter. - Implement
available()(usually a--versionprobe) andask(options). - Register the kind in
src/config/schema.tsandsrc/adapters/registry.ts. - Add a unit test under
tests/adapters/. - Update
docs/ADAPTERS.mdwith binary, flags, auth model, ToS notes. - Open a PR — see
.github/PULL_REQUEST_TEMPLATE.md.
License
MIT — see LICENSE.
Acknowledgements
Inspired by prior multi-LLM-debate experiments (llm-council, metaswarm, AutoGen). council keeps the spirit, but routes through subscription-auth'd CLIs instead of provider APIs.
