Skip to main content

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:

  1. Proposals — Multiple models respond to the same task independently. Each produces a clear position.
  2. Critique — Models review each other through a constrained vocabulary: challenge, alternative, refinement, and question. Silence is treated as approval.
  3. 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:

  1. Du, Y. et al. 2023. Improving Factuality and Reasoning in Language Models through Multiagent Debate.
  2. Understanding Agent Scaling in LLM-Based Multi-Agent Systems via Diversity. 2026.
  3. If Multi-Agent Debate is the Answer, What is the Question? 2025.
  4. Dipper: Diversity in Prompts for Producing Large Language Model Ensembles. 2024.
  5. Zheng, et al. 2023. Persona prompting and factual task performance.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

council_engine-0.3.0.tar.gz (57.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

council_engine-0.3.0-py3-none-any.whl (64.6 kB view details)

Uploaded Python 3

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

Hashes for council_engine-0.3.0.tar.gz
Algorithm Hash digest
SHA256 68f1ece363ae6bb906edd90bc1f161f18765c8191f0071a106942a25f73e1e66
MD5 ba22ebe713fbf191ecca6cc6464f0f38
BLAKE2b-256 e54560d901c2a74fea62a5ea6abe815d385d2977da0187fbaef176bb9e97804a

See more details on using hashes here.

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

Hashes for council_engine-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 76ef48aa029a53a332f52876a254250e02154797b622894c5645ae4d4dde1bf4
MD5 f04bca3e8e4c0991d12c74955cd1059c
BLAKE2b-256 a14d01f485a66299adc5ceab0b8d859f8b2a42fef53e3cb9f9909271e313fba4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page