This is a fork of karpathy/llm-council. New in this fork since the previously published state: - Conversation history is complete again: storage loads older runs from backend/data/conversations.json and supports the legacy data/ layout (including data/conversations/ per-conversation JSON files when present), so older runs show up in the UI. - Sidebar no longer truncates early: the frontend now req
Add this skill
npx mdskills install elhamid/llm-councilMulti-LLM collaborative system with decision traceability and anonymized peer review

This is a fork of karpathy/llm-council.
New in this fork since the previously published state:
backend/data/conversations.json and supports the legacy data/ layout (including data/conversations/ per-conversation JSON files when present), so older runs show up in the UI./api/conversations?limit=500 so the conversation list reliably shows full history.backend/roles.py). This keeps the “multi-perspective” intent, but with clearer, more actionable role behavior.text/event-stream) for /api/conversations/{id}/message/stream with incremental stage*_start/complete events.meta/metadata (label_to_model, aggregate_rankings, model_roles) so Stage2 renders correctly and the run is reviewable later.msg.meta || msg.metadata so fork/upstream payload shapes both render.The idea of this repo is that instead of asking a question to your favorite LLM provider (e.g. OpenAI GPT 5.1, Google Gemini 3.0 Pro, Anthropic Claude Sonnet 4.5, xAI Grok 4, eg.c), you can group them into your "LLM Council". This repo is a simple, local web app that essentially looks like ChatGPT except it uses OpenRouter to send your query to multiple LLMs, it then asks them to review and rank each other's work, and finally a Chairman LLM produces the final response.
In a bit more detail, here is what happens when you submit a query:
This project was 99% vibe coded as a fun Saturday hack because I wanted to explore and evaluate a number of LLMs side by side in the process of reading books together with LLMs. It's nice and useful to see multiple responses side by side, and also the cross-opinions of all LLMs on each other's outputs. I'm not going to support it in any way, it's provided here as is for other people's inspiration and I don't intend to improve it. Code is ephemeral now and libraries are over, ask your LLM to change it in whatever way you like.
The project uses uv for project management.
Backend:
uv sync
Frontend:
cd frontend
npm install
cd ..
Create a .env file in the project root:
OPENROUTER_API_KEY=sk-or-v1-...
Get your API key at openrouter.ai. Make sure to purchase the credits you need, or sign up for automatic top up.
Edit backend/config.py to customize the council:
COUNCIL_MODELS = [
"openai/gpt-5.1",
"google/gemini-3-pro-preview",
"anthropic/claude-sonnet-4.5",
"x-ai/grok-4",
]
CHAIRMAN_MODEL = "google/gemini-3-pro-preview"
Option 1: Use the start script
./start.sh
Option 2: Run manually
Terminal 1 (Backend):
uv run python -m backend.main
Terminal 2 (Frontend):
cd frontend
npm run dev
Then open http://localhost:5173 in your browser.
data/conversations/Install via CLI
npx mdskills install elhamid/llm-councilLLM Council is a free, open-source AI agent skill. This is a fork of karpathy/llm-council. New in this fork since the previously published state: - Conversation history is complete again: storage loads older runs from backend/data/conversations.json and supports the legacy data/ layout (including data/conversations/ per-conversation JSON files when present), so older runs show up in the UI. - Sidebar no longer truncates early: the frontend now req
Install LLM Council with a single command:
npx mdskills install elhamid/llm-councilThis downloads the skill files into your project and your AI agent picks them up automatically.
LLM Council works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Codex, Gemini Cli, Amp, Roo Code, Goose, Opencode, Trae, Qodo, Command Code, Chatgpt, Grok. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.