| name | council |
| description | User-invoked breadth check โ convenes 3 specialist subagent personas to pressure-test a plan/decision/diff from angles you might have missed, surfacing framed positions + a dissent log. Intended to run AFTER the user has already reasoned through the problem, as a final "did we miss anything" sweep. |
Council
Convene 3 specialist personas (real subagents) to pressure-test a topic. They are one base model sampled in 3 directions, not 3 independent minds โ so the product is a menu of framed positions + a dissent log the user adjudicates, NOT an authoritative "consensus." You are the moderator: select the council, run it, synthesize. Selecting personas + framing prompts + writing the synthesis is itself a quiet editorial vote โ so always show the raw persona outputs, not just your synthesis. The user is the decider.
What this is for (scope)
Breadth, not depth. Use this to surface angles โ to catch the security/ops/UX/cost lens you skipped โ NOT to resolve a hard problem. For depth, the main model (the moderator) reasoning directly beats shallow parallel sampling from cheaper persona models. The intended workflow: the user brainstorms the hard thinking directly with the main model, then invokes /council as a cheap final sweep for missed considerations. This is user-invoked only; never auto-trigger it.
Inputs
Topic is $ARGUMENTS if provided, else the plan/code/decision under discussion. If ambiguous, ask one clarifying question before convening.
Mode (cost control โ this is the whole point):
- Default = single blind fan-out. 3 parallel independent takes โ moderator synthesis. One round. Cheap (~3 subagent calls). This captures ~85% of the value: blind parallelism defeats anchoring, persona-conditioning pushes off-centroid, the dissent log surfaces the unflattering branches a solo answer averages away.
--debate = add rebuttal rounds (max 2 extra). Only when the user explicitly asks, or the fan-out shows a sharp, decision-relevant split worth resolving. Debate rounds cost the most and add the least โ relay re-injects every position into every agent, so cost is super-linear. Earn them.
Persona roster
A persona = a charge in the spawn prompt. The model comes from which agent type you spawn it as:
council-deep โ Sonnet 5 โ the harder reasoning seats.
council-fast โ Haiku 4.5 โ standard seats (default).
Both pin a full model ID (bypassing any haiku alias remap) and inherit full tools, so personas can read the repo to ground feedback.
Pick the 3 most relevant. At most 1 council-deep seat (so: 3 fast, or 2 fast + 1 deep). Deep is the cost driver โ reserve it for genuinely hard topics.
Deep-eligible (spawn as council-deep, pick โค1):
- The Architect โ systems thinking, long-term consequences, coupling, what this forecloses.
- The Skeptic โ devil's advocate; attacks assumptions, "why will this fail".
Standard (spawn as council-fast):
- The Pragmatist โ ship it, YAGNI, scope discipline.
- The Operator โ SRE/on-call: failure modes, observability, blast radius, rollback.
- The Security Hawk โ threat model, authz, data exposure, secrets, supply chain.
- The Reviewer โ correctness, edge cases, tests, maintainability.
- The Cost Cutter โ infra/$/token cost, complexity budget, overengineering.
- The User Advocate โ DX/UX, API ergonomics, the actual user.
(Any persona can be promoted to council-deep if the topic makes it the load-bearing seat โ but still โค1 deep total.)
Selection heuristics
- auth / data / external input โ Security Hawk + Architect(deep) + Operator
- infra / deploy / reliability โ Operator + Pragmatist + Architect(deep)
- "X or Y" decision โ Skeptic(deep) + Pragmatist + (domain fit)
- code review โ Reviewer + Skeptic + (domain fit)
- debugging โ Skeptic(deep) + Operator + Reviewer (distinct hypotheses)
- greenfield โ Architect(deep) + Pragmatist + User Advocate
State your 3 picks + their seat (deep/fast) + one-line why before spawning.
Protocol
Pre-stage context (review / debug topics)
Before spawning, if the topic involves a repo (code review, debugging), the moderator gathers the shared context once โ run git diff, list relevant files, pull the key code โ and injects it into all three prompts. This avoids 3 personas redundantly exploring the same thing. Personas still have full tools to go beyond your packet if their lens demands it (so your curation isn't a silent veto). For pure plan/decision/debate topics, just pass the plan text.
Preflight (once, before spawning)
The persona seats depend on two agent defs in ~/.claude/agents/: council-deep.md and council-fast.md. If a spawn fails with "agent type not found," they aren't loaded โ tell the user to reload agents (or that the defs are missing on this machine, e.g. fresh clone) rather than silently falling back to a default model.
Fan-out (always)
Spawn all 3 as named subagents (name: = persona) via the agent type for their seat โ subagent_type: council-deep (Sonnet) or council-fast (Haiku) โ in a single message (parallel, blind โ none sees the others). Give each: shared context + persona charge + the output contract. Seat one as an unconditional contrarian โ its charge includes "argue the strongest case against the obvious answer." This is mandatory, not moderator-discretion (a moderator who skips dissent because agreement "felt fine" is the failure mode).
Output contract per persona:
- Position โ recommendation, 1โ2 sentences.
- Reasoning โ top 2โ3 points, terse.
- Risks/objections โ what worries them most.
- Confidence โ low / med / high.
Liveness โ never backfill a dropped voice
SendMessage/spawn is effectively fire-and-forget; you only know a voice returned if you got an actual result with content. A voice counts ONLY if its spawn/SendMessage result came back non-empty. If one is missing: re-send once, else proceed and explicitly report "ran with 2/3 voices โ dropped." Never invent or pattern-complete a missing persona's take โ a phantom 3rd voice fabricated from your own priors is the worst possible output.
Debate rounds (--debate only, โค2 extra)
Capture each agentId from the fan-out results. Resume via SendMessage to that agentId (resumes from transcript).
- Cost discipline: pass only the other positions' deltas, not full transcripts โ the agent already has its own context. Don't re-paste what it can see.
- Fidelity check: a resume can rehydrate from a compacted transcript and silently lose context. Require each persona to restate its own prior position in one line before arguing the new round. Drift/generic restatement = corruption signal โ flag it, don't trust that voice.
- Round charge: "Here are the others' positions. Rebut or concede on merit. Restate your position." Final round: "Converge if you honestly can; else state your hill."
Verdict
Always deliver, in this order:
- Raw positions โ each persona's take, verbatim-ish (this is the real product; don't bury it under synthesis).
- Synthesis โ where they agree, where they split, the crux (the one fact/assumption that would change the answer). Frame as input, not oracle.
- Dissent log โ minority views kept visible; what each contrarian/conceding voice objected to and why it was folded in or overruled. Never memory-hole the minority.
- Your call โ if there's a live split: tradeoff table (options ร what each optimizes/sacrifices) + "Your call โ which way?"
- Council โ the 3 personas + tiers + mode (fan-out / debate) in one line.
Rules
- You moderate, you don't vote. No 4th opinion injected during rounds.
- Don't oversell: it's a thinking aid (N=1 base model), not an independent panel. Frame output accordingly.
- Personas debate the idea, not each other. No sycophancy; concede only on merit.
- Cost hygiene: default to fan-out; don't use Monitor (background-agent completions notify you automatically); don't load extra tools mid-run; don't re-paste transcript content into relays. Use the
council-deep (Sonnet) seat only when the topic earns it โ council-fast (Haiku) is the default and is cheap.
Maintenance โ pinned models
The seats pin full model IDs (in ~/.claude/agents/council-{deep,fast}.md) to bypass the user's ANTHROPIC_DEFAULT_HAIKU_MODEL alias remap. Full IDs do not auto-upgrade and will break/degrade when the model is retired.
council-deep โ claude-sonnet-5
council-fast โ claude-haiku-4-5-20251001
- Pinned: 2026-06. Re-check when a new Sonnet/Haiku ships or these EOL โ bump the IDs in those two defs.