Claude council
Skill Moe1117/claude-council
Use when someone runs /council <question>, says "convene the council" or "council this", or wants a decision, tradeoff, design, or strategy question stress-tested from independent perspectives before committing — product/architecture/business calls, engineering and science design choices, "should I X or Y", "which approach". Panels adapt the bench to the question (strategy vs engineering vs science). Not for factual lookups, questions with one checkable answer, or trivial choices — answer those directly.From its SKILL.md
npx -y skills add Moe1117/claude-councilAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 27 days oldThe repository was created 27 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.5 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
Council — structured multi-mind deliberation
Flow: QUESTION → COUNCIL (independent seats) → DEBATE (challenge → revise) → SYNTHESIS → ANSWER
Core principle: independence first, adversarial debate second, one decision last. The council advises; the deliberation core (you, in main context) decides. Dissent is preserved, never averaged away.
Seats
Nine seats across two benches. A panel fires six of them (see Panels); full fires all nine.
Judgment bench
| Seat | Charter |
|---|---|
| logic | Checks reasoning: argument validity, evidence quality, hidden premises, internal consistency, fallacies |
| strategy | Sees moves ahead: second-order effects, timing, optionality, reversibility, competitive response |
| systems | Sees interactions: feedback loops, incentives, bottlenecks, where the change propagates, unintended effects |
| philosophy | Questions framing: is this the right question, definitions, hidden values, reframes that dissolve or sharpen it |
| first-principles | Strips assumptions: rebuilds from what is actually true or constrained (physics, economics, law, user behavior) |
| ethics | Checks consequences for people: stakeholders, harms/benefits, duties, trust, the regret test |
Technical bench
| Seat | Charter |
|---|---|
| empiricist | Demands evidence over argument: what observation would falsify this, the cheapest decisive experiment, what the data actually shows vs what's asserted, reproducibility, sample size, correlation ≠ causation. The seat that says "stop debating, run the test." |
| red-team | Assumes failure and traces it: pre-mortem, failure modes (FMEA), threat model, edge cases, behaviour under load/scale/adversarial input, single points of failure. Actively tries to break the proposal. |
| pragmatist | Ships the simplest thing that survives maintenance: build cost, YAGNI, complexity budget, tech debt, the maintenance tail, implementation reversibility, who owns this in a year. Resists gold-plating and premature abstraction. |
Panels
Fire the bench that fits the question, not always the same six. A panel = six seats unless full.
| Panel | Seats | Use for |
|---|---|---|
| core (default) | logic, strategy, systems, philosophy, first-principles, ethics | strategy, product, business, life, "should I X or Y" |
| technical | logic, systems, first-principles, empiricist, red-team, pragmatist | code, architecture, systems design, infra, tooling |
| science | logic, systems, first-principles, empiricist, red-team, philosophy | research, experiment design, data claims, mechanism |
| full | all nine | highest-stakes calls where cost is no object |
Orchestrator (Phase 0): pick the panel that fits and state it. Default core for judgment questions, technical for code/engineering/infra, science for research/data/mechanism. panel= overrides your pick; seats= overrides everything.
Modes
Everything after /council is the question, minus leading flags.
| Flag | Effect |
|---|---|
| (none) | Full protocol on the auto-selected panel, seats on model: "sonnet" |
panel=core|technical|science|full | Force a panel (see table above) |
seats=a,b,c | Exact seat list, overrides panel (e.g. seats=empiricist,red-team,logic) |
deep | Seats inherit the session model (≈3–5× cost; hardest questions only) |
quick | No subagents: inline mini-council, one take ≤80 words per seat + synthesis, one context |
nomap | Skip the Phase 5 deliberation-map widget |
Protocol (full)
Phase 0 — intake. Restate the question in one crisp sentence plus the decision criteria. Choose the panel and name it (or honour panel=/seats=). Seats see NOTHING but what you give them: gather whatever they need (files, memory, prior conversation) into a CONTEXT block ≤400 words BEFORE spawning. A context-starved council hallucinates specifics — if seats would need to research, do that research now, in main context.
Phase 1 — respond. Spawn ALL seats in ONE message (parallel Agent calls, subagent_type: "general-purpose", background, model: "sonnet" unless deep). Round-1 prompt per seat:
You are the {SEAT} seat on a deliberation council of {N} seats. Charter: {CHARTER}.
Other seats cover other lenses — stay in yours. You have NOT seen their views.
Do not use tools or search; reason only from CONTEXT.
QUESTION: {QUESTION}
CONTEXT: {CONTEXT}
Return exactly, ≤250 words, no preamble:
POSITION: your answer, 1-2 sentences
REASONING: through your charter's lens only
ASSUMPTIONS: the 2-3 your position rests on
FLIP: what would change your mind
Phase 1.5 / 3.5 — grounding check. Runs twice: after round 1 before the challenge digest, and after round 3 before synthesis. Both are injection points where an unsupported claim can enter shared reasoning. Skip in quick mode.
This is NOT deterministic and NOT a verifier — with no code, it is one narrow LLM pass. It may only ADD flags; it never strips a claim and never certifies one. Absence from its list means "not flagged", never "verified". Spawn one subagent (model: "haiku"):
You are a grounding checker, not a council participant. Do not judge the
reasoning or take a side.
List every SPECIFIC factual claim in the seat outputs that CONTEXT does not
support — named tools, systems, numbers, dates, people, capabilities, events,
or states of the world CONTEXT never states. Ignore reasoning, argument,
opinion, and general knowledge that makes no specific claim about THIS case.
Output ONLY:
UNSUPPORTED:
- {seat} → "{quoted claim}"
...or exactly: UNSUPPORTED: none flagged
Never mark anything verified, correct, or supported. You add flags only.
CONTEXT: {CONTEXT}
SEAT OUTPUTS: {outputs}
Measured behaviour (n=1 per variant — directional, not conclusive). Tested against a real run containing two known fabrications. The prompt above caught one of the two, produced zero false positives, and additionally caught an overstatement the author had missed. Two variants were tried and neither beat it:
- More claim-classes (adding "process mechanics" and "misquotes of CONTEXT"): gained the mechanics catch but lost the misquote — extra instructions shifted attention rather than adding recall.
- Two output tiers (
FABRICATED/INFERRED): clearly worse — given a softer bucket the checker made zero hard calls and routed every finding, including an outright fabricated quotation, into "inferred". Keep it single-tier; a hedge option gets used as an escape hatch.
Expect a real miss rate. This is exactly why an unflagged claim is never "verified", and why tuning this further needs a proper eval set rather than single runs.
Then: the digest you pass onward MUST carry an UNSUPPORTED CLAIMS: line — always present, reading none flagged when empty. Never fold it in as optional prose; a discretionary merge becomes the new skippable seam. Annotate flagged claims in place rather than deleting them, so seats can weigh the flag themselves. Any flag still standing at Phase 4 goes into the synthesis output.
Phase 2 — challenge. Load SendMessage (ToolSearch "select:SendMessage"), then message every seat (by its agent id) with the OTHER seats' positions (POSITION + one line of reasoning each):
Round 2 — challenge. The other seats' positions:
{POSITIONS}
Steelman, then attack. Pick the 2 positions weakest or most in tension with
yours; strongest objection to each, ≤80 words per target. Polite agreement is
a failed round. Then name the single strongest point any seat made AGAINST
your position.
CHALLENGE → {seat}: ...
CHALLENGE → {seat}: ...
STRONGEST-AGAINST-ME: ...
Phase 3 — revise. Message each seat the challenges aimed at IT:
Round 3 — revise. Challenges aimed at your position:
{CHALLENGES}
Return ≤150 words:
REVISED-POSITION: 1-2 sentences (unchanged is fine if defended)
CONCEDED: what you now accept
DISSENT: what you still reject and why
CONFIDENCE: low | medium | high
Phase 4 — synthesis. In main context. Weigh, then DECIDE — a 4–2 split with a sharp dissent beats mushy consensus. Output:
**Answer** — the decision first, 1-3 sentences
**Why** — which arguments won and why, short prose
**Convergence** — where seats independently agreed
**Tensions** — each live tradeoff and the call made on it
**Dissent register** — unresolved objections worth carrying, attributed by seat
**Confidence** — low/med/high + what would flip the decision
Phase 5 — deliberation map (visual, optional). AFTER the text synthesis, never instead of it. Only when mcp__visualize__show_widget is available; skip silently in terminal sessions or when nomap was passed. First call mcp__visualize__read_me (modules ["diagram","data_viz"]) without narrating it, then render ONE HTML widget. Host design system wins over house style — flat surfaces, CSS variables only, auto light/dark, sentence case, Tabler outline icons, no gradients/blur/shadows.
Structure (top to bottom), all data from the run just completed:
- Header — mono overline
deliberation map · N rounds · N seats, the question as h3, verdict chip (--bg-success/--text-success). - Core card —
--surface-2,2px solid var(--border-accent)border, four+corner ticks (--text-muted), overlinedeliberation core · synthesize, weigh, refine, decide, the Answer sentence, one muted line of implementation/alarm detail. - Seat grid —
repeat(auto-fit,minmax(200px,minmax(0,1fr))), one card per seat: Tabler icon + name + confidence chip (high → success tint, medium → warning tint, low → plain border), then three lines: position (13px, 500),Conceded — …(--text-secondary),Holds — …(--text-danger). Each cardonclick="sendPrompt('Show the {seat} seat's full three-round record from the {topic} council run')". Icons: logicti-brain, strategyti-chess-knight, systemsti-settings, philosophyti-building-bank, first-principlesti-triangle, ethicsti-scale, empiricistti-flask, red-teamti-shield-bolt, pragmatistti-tools. - Challenge ledger — wrap row of hairline chips,
attacker → target · ≤4-word gist, one per Round-2 challenge. - Dissent register — flag-icon lines (
ti-flag,--text-danger), one per carried dissent. - Metric row —
--surface-1tiles: verdict split, challenges filed, self-retractions, open dissents. - Rounds strip — dashed chips
01 question … 05 synthesiswithti-check, plus right-aligned hintclick a seat to interrogate it ↗.
Begin the widget with a sr-only h2 one-line summary. Keep <style> ≤15 lines; inline styles elsewhere. No prose paragraphs inside the widget — analysis lives in the chat text.
Quick mode
One context, no subagents: write each panel seat's take (≤80 words, charter-pure, genuinely different — if two agree, sharpen until they diverge or note real convergence), then the same synthesis block.
Failure modes
| Symptom | Fix |
|---|---|
| Round 2 comes back polite / agreeing | Failed round: resend with "find the real weakness or state which seat is wrong and why" |
| Seats assert facts not in CONTEXT | The grounding check (Phase 1.5/3.5) exists for this and fires every run — observed three times in live runs, including a seat inventing a detail during a debate about this very failure. If flags are frequent, intake was thin: rebuild CONTEXT and respawn. Never treat an unflagged claim as verified |
| Synthesis reads like an average | The core must pick; write the Answer sentence before the map |
| Seat dies or returns junk | Proceed with remaining seats; note the empty chair in the dissent register |
| Rounds bloat | Enforce the word caps; pass only POSITION + one line of reasoning between seats |
| Wrong bench for the question | Re-run with panel= or seats=; a code question on the core panel wastes philosophy/ethics |
Cost
A six-seat panel ≈ 18 sonnet subagent exchanges + 2 cheap grounding checks + main-context synthesis. full (nine) ≈ 27. quick ≈ zero subagents. Don't full-council trivia; don't quick-council a company-direction call.
What ships with it: 7 files
832.9 KB alongside SKILL.md
assets/
- deliberation-map-dark.png405.4 KB
- deliberation-map.html8.3 KB
- deliberation-map-light.png406.6 KB
- EXAMPLE.md4.9 KB
- .gitignore10 B
- LICENSE1.0 KB
- README.md6.6 KB