Instead of asking one LLM, convene a Quorum. Multiple models answer your question independently, critique each other anonymously, then a chairman synthesizes the final answer.
Fully local, lightweight web app. Minimal, readable code. Runs on localhost.
Each query goes through 3 stages:
- Stage 1 — Individual Responses: All council models answer independently. Tab view lets you inspect each response.
- Stage 2 — Peer Rankings: Each model evaluates the others' responses. Identities are anonymized (Response A, B, C…) to prevent bias. Each model ranks the rest by accuracy and insight.
- Stage 3 — Final Synthesis: The Chairman model (strongest) reads all responses + peer rankings and compiles the definitive answer.
- Dark mode UI with progressive streaming (each stage appears as it completes)
- Sidebar with conversation history — create, rename, and delete chats
- Transparent: inspect raw model outputs, extracted rankings, and aggregate scores
- Persistent conversations (JSON storage, no database needed)
- Single OpenRouter API key covers all model providers
Sign up at openrouter.ai and create an API key. Create a .env file in the project root:
OPENROUTER_API_KEY=sk-or-v1-...
Never commit this file. It is already in
.gitignore.
Backend (requires Python 3.10+):
With uv (recommended):
uv syncOr with pip:
pip install fastapi uvicorn python-dotenv httpx pydanticFrontend:
cd frontend
npm installEdit backend/config.py to customize the council:
COUNCIL_MODELS = [
"openai/gpt-4o-mini",
"google/gemini-2.5-flash",
"anthropic/claude-haiku-4-5",
"meta-llama/llama-3.3-70b-instruct",
]
CHAIRMAN_MODEL = "google/gemini-2.5-flash"Any model available on OpenRouter works here.
Option 1: Start script
./start.shOption 2: Manual
Terminal 1 — Backend:
uv run python -m backend.main
# or: python -m backend.mainTerminal 2 — Frontend:
cd frontend
npm run devOpen http://localhost:5173 in your browser.
| Layer | Technology |
|---|---|
| Backend | FastAPI (Python 3.10+), async httpx |
| Frontend | React 19 + Vite, react-markdown, SweetAlert2 |
| Models | OpenRouter API (single key, all providers) |
| Storage | JSON files in data/conversations/ |
| Package mgmt | uv (Python), npm (JS) |
- Backend:
http://localhost:8001 - Frontend:
http://localhost:5173
