How to Build an LLM Council in Claude Code
Build a five-advisor LLM council as a Claude Code skill that runs five independent AI advisors on one decision, in one command, with no two-terminal setup.
>This builds the idea council. The LLM Council goes further: the chairman that picks a verdict, multi-model routing, a code-review board, and a fact-gate.

The LLM Council
Stop Your Yes-Man AI and Build a Board of Advisors That Argues Before It Agrees
Summary:
- Build a working five-advisor council as a Claude Code skill that runs on one command.
- Five independent
claude -pcalls (Contrarian, First-Principles, Outsider, Executor, Expansionist) give you five real angles, not one model nodding along.- Each advisor gets a mandate and a forbidden move, so they pull in different directions instead of agreeing.
- Bonus: the full
SKILL.mdto copy, the fixes for when it misfires, and the chairman upgrade that turns five opinions into one verdict.
If you want to know how to build an LLM council, the short version is this: you wire five independent AI advisors to one command so they argue over your decision instead of one model nodding along. Andrej Karpathy sketched the pattern, it blew up, and almost nobody finished it into something you actually use. We finish it here, as a Claude Code skill you run in one word.
How do you build an LLM council in Claude Code?
You build it as a skill: a directory with one file that tells Claude to run five separate model calls and print all five answers. A Claude Code skill is a folder named for the command, holding a SKILL.md with a description and plain-English instructions. The moment that file exists, you have a /council command. No server, no framework, no two-terminal juggling.
Create exactly this path in your project:
.claude/skills/council/SKILL.md
Be pedantic about it, because the wrong version looks right. The skill is a directory called council containing SKILL.md. A flat .claude/skills/council.md does not register and will not give you /council.
What is the council actually doing?
The council collects independent answers, has them peer-review each other anonymously, then a chairman writes one verdict. That shape is Karpathy’s, and he was refreshingly blunt about the state he left it in:
This project was 99% vibe coded as a fun Saturday hack… 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.
His llm-council repo describes three stages, verbatim:
- Stage 1: First opinions. The user query is given to all LLMs individually, and the responses are collected.
- Stage 2: Review. Each individual LLM is given the responses of the other LLMs… the LLM identities are anonymized so that the LLM can’t play favorites when judging their outputs.
- Stage 3: Final response. The designated Chairman of the LLM Council… compiles them into a single final answer.
Twenty thousand people starred it and bounced off the setup. This article rebuilds stage one as a skill today, and bolts on the chairman at the end.
Pick your five advisors
Before any code, decide who is in the room. Five personas, each tuned to pull a different way on the same decision. Take the real example from the build: should you rewrite your payments service from Python to Go?
- The Contrarian makes the strongest case it is a mistake. Forbidden move: validating any part of the plan.
- The First-Principles advisor rebuilds the question from scratch. You ask “Python or Go,” it asks “have you even defined the unit of work?” Forbidden move: accepting your framing.
- The Outsider asks the dumb, obvious questions a smart stranger would ask. Forbidden move: assuming context everyone on the inside takes for granted.
- The Executor assumes the call is made and asks what Monday morning actually looks like. Forbidden move: recommending without a concrete first step.
- The Expansionist asks what the bigger version looks like. Forbidden move: thinking small or just listing risks (that is the Contrarian’s job).
The trick is the forbidden move. A persona gets sharp when you tell it what it is not allowed to do, not just what it is. Vague advisors converge into five polite yes-men. Opposed mandates diverge into a real spread.

Write the /council skill
Here is the build. Put this in .claude/skills/council/SKILL.md. Each advisor is one claude -p call, which runs Claude non-interactively, so five calls means five fresh instances that never saw each other.
---
description: Convene a five-advisor council on a hard decision. Each advisor answers independently in its own context, then print all five answers side by side.
---
# Council
Treat the user's whole message after /council as the DECISION.
Do NOT answer the decision yourself. Your only job is to run the five
commands below with the Bash tool and print their outputs.
Run each as a separate claude -p call, substituting the DECISION:
1. claude -p "You are the CONTRARIAN. You are forbidden from validating any
part of this. Make the strongest honest case it is a mistake. End with the
one reason you'd bet against it. DECISION: DECISION"
2. claude -p "You are the FIRST-PRINCIPLES advisor. You are forbidden from
accepting the framing. Restate the real problem, then reason up from
fundamentals. DECISION: DECISION"
3. claude -p "You are the OUTSIDER. You have no context and are forbidden from
assuming any. Ask the obvious questions a smart stranger would. DECISION: DECISION"
4. claude -p "You are the EXECUTOR. Assume it is decided. Give concrete first
steps, real costs, and what breaks in week two. DECISION: DECISION"
5. claude -p "You are the EXPANSIONIST. You are forbidden from listing risks.
Make the case for the upside: if it works, what does it open up? DECISION: DECISION"
Print each answer under its own heading, in order, with no synthesis yet.
Save it, then run it on a real decision you actually have to make this week:
/council Should I rewrite our payments service from Python to Go? It's slow
under load, the team knows Python well, and we have three months to launch.
Five answers come back. The Contrarian goes at the timeline and the risk of an unfamiliar language in a money path. The First-Principles advisor refuses the framing: is it the language, or three slow queries you never profiled? The Outsider asks if any user has actually complained. The Executor maps the rewrite-and-re-audit cost. The Expansionist alone is bullish. A single model would have helped you plan the rewrite you walked in wanting. The council just handed you the two objections you did not want to hear.
What broke when I first ran it
The first run sputters in predictable ways. Here are the failures in the order you will hit them.
/councilis not recognized. Almost always the path. Confirm the file sits at.claude/skills/council/SKILL.md(directory plus file), and that you launched Claude Code from the project root holding.claude.- It returns one blended answer. Claude read your file as a vibe and answered the decision itself. Make it imperative. The line that fixes it:
Do not answer the decision yourself. Run the five commands and print their outputs.
- All five answers sound the same. The personas are too soft. Sharpen the forbidden moves, and tell the Contrarian to argue against and never validate. A soft Contrarian is the top reason a council drifts back into agreement.
- It is slow. Five calls run one after another, so it takes roughly five times a single question. That is real, and you only pay it on decisions that earned a council.
Upgrade it: add the chairman
Five opinions is not a decision; it is homework. The fix is a chairman: one more call that reads all five answers and writes a single verdict, with the dissent named instead of buried. Append a stage to your SKILL.md:
After the five answers, run one more call:
claude -p "You are the CHAIRMAN. Below are five advisor answers. Write ONE
verdict. Open with GO, NO-GO, or RECONSIDER and one sentence of reason. Give
the strongest leading case. Name the single most important objection. End with
a line starting 'Dissent:' naming the minority view. Do not average into mush.
Take a position. ANSWERS: paste all five"
Run the payments decision again and the top of your screen reads RECONSIDER: fix the slow queries first, the rewrite risk is large and slow, and the dissent (the Expansionist) is right only if Python is already proven the ceiling. That is a verdict you can act on, not a transcript you have to squint at.
What should you actually do?
- If you only have an hour → ship stage one (the five advisors). Five raw angles already beat one agreeable answer.
- If the verdict reads like mush → your chairman is not forced to take a side. Make the opening GO / NO-GO / RECONSIDER line non-negotiable.
- If every advisor agrees with you → the personas are too polite, not too dependent. Sharpen the Contrarian and run it on a decision you suspect is shaky.
- If you are tempted to council everything → don’t. Convene only when being wrong is expensive and hard to reverse.
The bottom line
- A council is structure, not a prompt. Five independent calls break the yes-man in a way “be brutally honest” never will.
- The forbidden move is the whole game. Tell each advisor what it cannot do, or you get five clones.
- Stage one is worth shipping alone, but the chairman is what turns it from a debate into a decision you trust.
Frequently Asked Questions
What is an LLM council?+
An LLM council is a setup where several AI advisors answer the same question independently, rank each other's answers without seeing the authors, and a chairman writes one verdict. It fights the single-model yes-man problem with structure, not a better prompt.
Do I need MCP to build an LLM council?+
No. A council is a Claude Code skill that shells out to model calls and prints the results. There is no server. MCP is optional packaging you only add later if you want to call the council from outside Claude Code.
How is a council different from asking one model for five opinions?+
One model giving five opinions is one mind wearing five hats, each answer aware of the last and sharing the same blind spots. A council runs five separate calls in parallel, so the opinions are genuinely independent before any of them see each other.