Skip to main content

Karpathy LLM Council

Local web app implementing the Council Pattern — multiple LLMs answer independently, peer-review each other’s work (anonymized), then a Chairman model synthesizes the final response. Created by Andrej Karpathy as a Saturday hack for reading books alongside multiple LLMs simultaneously. GitHub: https://github.com/karpathy/llm-council
“Vibe coded as a fun Saturday hack… I’m not going to support it in any way.” — Karpathy
Not production-grade. Provided as an architectural reference.

Three-Stage Protocol

Anonymization rationale: model identities hidden during review so no LLM can play favorites toward its own provider or discriminate against competitors. Chairman model: configurable. Karpathy defaults to Gemini Pro. Conceptually: the model with the best synthesis/summarization capability for the domain.

Tech Stack

  • Backend: FastAPI (Python), async httpx, OpenRouter API
  • Frontend: React + Vite, react-markdown
  • Storage: JSON files in data/conversations/
  • Package manager: uv (Python), npm (frontend)
  • Single API key: OpenRouter provides access to all council models

Configuration


How It Differs from Other Council Implementations

Key architectural fork: Karpathy delegates final synthesis to a Chairman model. AgentOps and our workflow surface disagreements and leave synthesis to the human. Human-in-the-loop synthesis preserves judgment but adds latency; Chairman synthesis is fully automated but introduces a new single point of failure (Chairman’s bias).

OpenRouter Trade-off

Using OpenRouter simplifies multi-vendor access (one API key, one endpoint) at the cost of:
  • Potential reasoning effort stripping for DeepSeek models (our wiki concern — less relevant here since council models are GPT/Gemini/Claude/Grok)
  • Rate limits vary by model and account tier
  • Adds a reseller intermediary in the call path
For Karpathy’s Q&A use case (no DeepSeek, no max-reasoning requirement), OpenRouter is appropriate. For workflows requiring DeepSeek V4 Flash on max reasoning: use direct API.