A structured deliberation protocol across diverse AI models
Project description
Council Engine
A structured deliberation protocol across diverse AI models.
Single-model outputs are fluent, fast, and often wrong in the same direction. Council runs a bounded deliberation across different models, processes critique explicitly, and returns a decision you can inspect. The point is not more text. It is better judgment.
Website: councilengine.dev
How it works
Council orchestrates a bounded 3-stage protocol:
- Proposals — Multiple models respond to the same task independently. Each produces a clear position.
- Critique — Models review each other through a constrained vocabulary: challenge, alternative, refinement, and question. Silence is treated as approval.
- Resolution — A lead model classifies the disagreement and produces one of four adaptive outcomes:
- Recommendation — Council agrees; single clear guidance.
- Alternatives — Real tradeoffs remain; presented with decision rules.
- Question — A missing fact is decisive; outputs a clarifying question.
- Investigate — Evidence is needed; outputs an investigation plan.
Why heterogeneous models
Research shows that multi-agent debate improves reasoning when the agents are actually different. Same-model personas tend to converge on the same errors. Council uses genuinely different foundation models — not different prompts to the same model — because diverse architectures surface conflicting assumptions and different failure modes.
Supported providers
| Provider | Auth | Web search |
|---|---|---|
| Gemini (Google) | API key (AI Studio or Vertex AI) or ADC | Yes (Google Search) |
| ChatGPT (OpenAI) | API key | Yes (web_search_preview) |
| Claude (Anthropic) | API key | No |
| Ollama (local) | None — runs locally | No |
Install
pip install council-engine
All providers are included. No optional extras needed.
Setup
Run the guided setup:
council init
This creates ~/.council/config.toml with your API keys and validates each connection. You need at least one provider configured; for multi-model deliberation, configure two or more.
Manual configuration
Edit ~/.council/config.toml directly:
[providers.gemini]
api_key = "your-google-api-key" # from https://aistudio.google.com/apikey
[providers.chatgpt]
api_key = "your-openai-api-key" # from https://platform.openai.com/api-keys
[providers.claude]
api_key = "your-anthropic-api-key" # from https://console.anthropic.com/settings/keys
[providers.ollama]
host = "http://localhost:11434" # ollama serve && ollama pull <model>
model = "llama3.1:8b" # browse models: https://ollama.com/library
Environment variables override the config file: COUNCIL_GEMINI_API_KEY, COUNCIL_OPENAI_API_KEY, COUNCIL_CLAUDE_API_KEY, COUNCIL_OLLAMA_HOST.
Usage
Interactive REPL
council
Launches a persistent session with tab completion, slash commands, and multi-model deliberation by default. Type a question and press Enter to convene the full council.
@gemini <msg>— send to a single model/attach <file>— attach files for the council to read/discuss <prompt>— reconvene after follow-up/new— start a new conversation/resume <name>— resume a past conversation
Structured deliberation
council discuss --models gemini,claude "Should we use event sourcing or CRUD for our collaborative editor?"
Runs the full 3-stage protocol (Proposals → Critique → Resolution) and outputs the result.
Quick query
council ask --model chatgpt "What are the tradeoffs of gRPC vs REST for internal services?"
Single-model query. Promote to a full conversation with council promote <name>.
Multi-model chat
council chat --models gemini,chatgpt,claude "my-conversation" "Your message here"
Architecture
Council is built with explicit boundaries and auditability:
- Event bus — orchestration decoupled from rendering; same protocol drives terminal UI, plain text, or custom consumers
- Persistent audit trail — every proposal, critique, and resolution stored in SQLite with full metadata
- Chair subsystem — sandboxed file operations with mediated reads (workspace-wide) and writes (council-output/ only)
- Provider abstraction — pluggable model backends with parallel execution via asyncio
- Two integration surfaces — interactive REPL for humans, CLI commands for automation and agent tooling
See the full architecture documentation.
Research
Council's design is informed by research on multi-model deliberation:
- Du, Y. et al. 2023. Improving Factuality and Reasoning in Language Models through Multiagent Debate.
- Understanding Agent Scaling in LLM-Based Multi-Agent Systems via Diversity. 2026.
- If Multi-Agent Debate is the Answer, What is the Question? 2025.
- Dipper: Diversity in Prompts for Producing Large Language Model Ensembles. 2024.
- Zheng, et al. 2023. Persona prompting and factual task performance.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file council_engine-0.3.0.tar.gz.
File metadata
- Download URL: council_engine-0.3.0.tar.gz
- Upload date:
- Size: 57.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68f1ece363ae6bb906edd90bc1f161f18765c8191f0071a106942a25f73e1e66
|
|
| MD5 |
ba22ebe713fbf191ecca6cc6464f0f38
|
|
| BLAKE2b-256 |
e54560d901c2a74fea62a5ea6abe815d385d2977da0187fbaef176bb9e97804a
|
File details
Details for the file council_engine-0.3.0-py3-none-any.whl.
File metadata
- Download URL: council_engine-0.3.0-py3-none-any.whl
- Upload date:
- Size: 64.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76ef48aa029a53a332f52876a254250e02154797b622894c5645ae4d4dde1bf4
|
|
| MD5 |
f04bca3e8e4c0991d12c74955cd1059c
|
|
| BLAKE2b-256 |
a14d01f485a66299adc5ceab0b8d859f8b2a42fef53e3cb9f9909271e313fba4
|