Multi-model deliberation for important decisions. 5 frontier LLMs debate, then a judge synthesizes consensus.
Project description
Frontier Council
Multi-model deliberation for important decisions. 5 frontier LLMs debate a question, then a judge synthesizes consensus.
Inspired by Andrej Karpathy's LLM Council, with added blind phase (anti-anchoring), explicit engagement requirements, devil's advocate role, and social calibration mode.
Models
- Claude (claude-opus-4.5)
- GPT (gpt-5.2-pro)
- Gemini (gemini-3-pro-preview)
- Grok (grok-4)
- Kimi (kimi-k2.5)
- Judge: Claude Opus 4.5
Installation
pip install frontier-council
Or with uv:
uv tool install frontier-council
Setup
Set your OpenRouter API key:
export OPENROUTER_API_KEY=sk-or-v1-...
Optional fallback keys (for flaky models):
export GOOGLE_API_KEY=AIza... # Gemini fallback
export MOONSHOT_API_KEY=sk-... # Kimi fallback
Usage
# Basic question
frontier-council "Should we use microservices or monolith?"
# With social calibration (for interview/networking questions)
frontier-council "What questions should I ask in the interview?" --social
# With persona context
frontier-council "Should I take the job?" --persona "builder who hates process work"
# Multiple rounds
frontier-council "Architecture decision" --rounds 3
# Save transcript
frontier-council "Career question" --output transcript.md
# Share via GitHub Gist
frontier-council "Important decision" --share
Options
| Flag | Description |
|---|---|
--rounds N |
Number of deliberation rounds (default: 2, exits early on consensus) |
--output FILE |
Save transcript to file |
--named |
Let models see real names during deliberation (may increase bias) |
--no-blind |
Skip blind first-pass (faster, but first speaker anchors others) |
--context TEXT |
Context hint for judge (e.g., "architecture decision") |
--share |
Upload transcript to secret GitHub Gist |
--social |
Enable social calibration mode (auto-detected for interview/networking) |
--persona TEXT |
Context about the person asking |
--advocate N |
Which speaker (1-5) should be devil's advocate (default: random) |
--quiet |
Suppress progress output |
How It Works
Blind First-Pass (Anti-Anchoring):
- All models generate short "claim sketches" independently and in parallel
- This prevents the "first speaker lottery" where whoever speaks first anchors the debate
- Each model commits to an initial position before seeing any other responses
Deliberation Protocol:
- All models see everyone's blind claims, then deliberate
- Each model MUST explicitly AGREE, DISAGREE, or BUILD ON previous speakers by name
- After each round, the system checks for consensus (4/5 agreement triggers early exit)
- Judge synthesizes the full deliberation
Anonymous Deliberation:
- Models see each other as "Speaker 1", "Speaker 2", etc. during deliberation
- Prevents models from playing favorites based on vendor reputation
- Output transcript shows real model names for readability
When to Use
Use the council when:
- Making an important decision that benefits from diverse perspectives
- You want models to actually debate, not just answer in parallel
- You need a synthesized recommendation, not raw comparison
- Exploring trade-offs where different viewpoints matter
Skip the council when:
- You're just thinking out loud (exploratory discussions)
- The answer depends on personal preference more than objective trade-offs
- Speed matters (council takes 60-90 seconds)
Python API
from frontier_council import run_council, COUNCIL
import os
api_key = os.environ["OPENROUTER_API_KEY"]
transcript, failed_models = run_council(
question="Should we use microservices or monolith?",
council_config=COUNCIL,
api_key=api_key,
rounds=2,
verbose=True,
social_mode=False,
)
print(transcript)
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
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 frontier_council-0.1.1.tar.gz.
File metadata
- Download URL: frontier_council-0.1.1.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
642cf548d79cd519d8a03a6317573d009800c074987cb64059a4780ffc5b80f2
|
|
| MD5 |
f836a1e36ea933e8b3d2e831bf0ba51d
|
|
| BLAKE2b-256 |
3f236ff9882c77a1c4a13bd925847d32b0ab786332934d37e0b328c00b71118e
|
File details
Details for the file frontier_council-0.1.1-py3-none-any.whl.
File metadata
- Download URL: frontier_council-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79808fe4cb5bd59030645dabe0f9f5a9bb243057d0c0f4fe97f73164f5e35da7
|
|
| MD5 |
cc6866419e36083ac5b634d5198ca785
|
|
| BLAKE2b-256 |
cc6e7e23de5b810302b2f52bd73ebc8b231a8f0e344ca79fa682c27e68e80e5b
|