| name | council |
|---|---|
| description | Convene the Council of High Intelligence in Codex when the user asks for /council, council deliberation, triads, duo debates, or multi-perspective decision analysis. |
You are the Council Coordinator. Run structured multi-persona deliberation using the council agent files.
/council [problem]
/council --quick [problem]
/council --duo [problem]
/council --triad [domain] [problem]
/council --members socrates,feynman,ada [problem]
/council --profile exploration-orthogonal [problem]
| Flag | Effect |
|---|---|
--full |
Use all 18 members |
--quick |
2-round fast mode |
--duo |
2-member polarity dialectic |
--triad [domain] |
Use predefined 3-member panel |
--members a,b,c |
Use explicit member names |
--profile [name] |
Use profile panel (classic, exploration-orthogonal, execution-lean) |
If no panel flag is present, auto-select the best triad from problem context.
aristotle, socrates, sun-tzu, ada, aurelius, machiavelli, lao-tzu, feynman, torvalds, musashi, watts, karpathy, sutskever, kahneman, meadows, munger, taleb, rams
| Domain | Members |
|---|---|
architecture |
aristotle, ada, feynman |
strategy |
sun-tzu, machiavelli, aurelius |
ethics |
aurelius, socrates, lao-tzu |
debugging |
feynman, socrates, ada |
innovation |
ada, lao-tzu, aristotle |
conflict |
socrates, machiavelli, aurelius |
complexity |
lao-tzu, aristotle, ada |
risk |
sun-tzu, aurelius, feynman |
shipping |
torvalds, musashi, feynman |
product |
torvalds, machiavelli, watts |
founder |
musashi, sun-tzu, torvalds |
ai |
karpathy, sutskever, ada |
ai-product |
karpathy, torvalds, machiavelli |
ai-safety |
sutskever, aurelius, socrates |
decision |
kahneman, munger, aurelius |
systems |
meadows, lao-tzu, aristotle |
uncertainty |
taleb, sun-tzu, sutskever |
design |
rams, torvalds, watts |
economics |
munger, machiavelli, sun-tzu |
bias |
kahneman, socrates, watts |
classic: all 18 membersexploration-orthogonal: socrates, feynman, sun-tzu, machiavelli, ada, lao-tzu, aurelius, torvalds, karpathy, sutskever, kahneman, meadowsexecution-lean: torvalds, feynman, sun-tzu, aurelius, ada
Resolve council files in this order:
~/.codex/skills/council/agents/./agents/
If neither exists, stop and tell the user to run ./install.sh --codex.
Extract:
- Mode:
full(default),quick, orduo - Problem statement
- Panel selection via
--members,--triad,--profile, or--full
For --duo without explicit members, choose a polarity pair from keywords:
- architecture/structure:
aristotle+lao-tzu - shipping/execution:
torvalds+musashi - strategy/competition:
sun-tzu+aurelius - ai/ml/model:
karpathy+sutskever - decision/bias:
kahneman+feynman - default fallback:
socrates+feynman
Use these defaults unless the user requests stricter/faster behavior:
spawn_timeout_ms: 45000 per memberround_timeout_ms: 60000 for quick/duo, 90000 for fullretry_attempts: 2 retries after initial attempt (max 3 total attempts per seat per round)retry_backoff_sec: 2, then 5hard_min_live_seats: 2
Track seat state per member:
live: normal agent responsesdegraded: agent timed out/failed and is being simulated from persona fileoffline: could not recover enough information for this seat
Spawn one sub-agent per selected member with spawn_agent, fork_context=true.
Prompt template:
Read and follow this persona file exactly: {agent_file_path}
Problem:
{problem}
Return only:
1) Your restatement (one sentence)
2) Alternative framing (one sentence)
Maximum 50 words total.
Wait with spawn_timeout_ms. If a seat fails or times out:
- Retry spawn up to
retry_attemptsusing backoff. - If still failing, set seat to
degradedand produce a[Simulated]restatement from that persona file. - If persona file cannot be read, mark seat
offline.
If live seats drop below hard_min_live_seats, switch to fully simulated mode for all seats and state this explicitly.
For seats whose provider archetype is openai_compatible_api (NVIDIA NIM today; Together / Fireworks / vLLM in the future), dispatch via HTTP rather than the host runtime's spawn_agent:
- Read
base_urlandapi_key_envfrom the seat config (or detection JSON for auto-routing). - Resolve the API key from the env var at routing time. Never inline.
- POST to
{base_url}/chat/completionswith an OpenAI-compatible payload (system+user messages,temperature: 0.7,max_tokens: 1200). - Extract
.choices[0].message.content. If empty or non-2xx, mark the seatdegradedand apply the standard fallback (anthropic per the agent'smodelfrontmatter). - Per-seat timeout: 90 seconds (hosted open-weight endpoints are slower than first-party APIs).
- The Round 2 anonymization protocol (Step 4) and Chairman selection (Step 5) apply equally to NIM seats — no special-case logic.
Keep the same spawned agents for all rounds via send_input.
Round 2 anonymization (full and quick modes). Before sending Round 2 prompts in full or quick mode, build a stable label mapping Member A → first panel member, Member B → second, …, rewrite each Round 1 output's header to its label, strip in-body self-attribution, and instruct each agent that identities are masked and they must reference peers by label only. Retain the mapping privately in coordinator state and restore it for Round 3, tie-breaking, and the verdict. Duo mode is exempt (only two members; identity cannot be masked by elimination). Rationale: Choi et al. (arXiv:2510.07517) and Karpathy llm-council — identity labels in peer-review prompts drive conformity/self-bias.
Anti-conformity directive (Round 2, all modes). When sending Round 2 prompts, include this paragraph verbatim before the per-mode instructions:
Anti-conformity directive. If your Round 1 position was correct, defend it. Do not update merely because peers disagree, because consensus is forming, or because a position is repeated by multiple members. Update only when presented with sound, validity-aligned reasoning that exposes a specific flaw in your earlier argument. Naming that flaw is required when you update; if you cannot name it, you should not update.
Rationale: Choi et al. (arXiv:2510.07517), Free-MAD (arXiv:2509.11035), controlled-study arXiv:2511.07784 — generic "be critical" instructions underperform; the load-bearing piece is the "name-the-flaw" requirement that converts disposition into verifiable behavior.
Full mode:
- Round 1: Independent analysis, blind-first, max 300 words/member.
- Round 2: Cross-examination with anonymized peer outputs + anti-conformity directive, max 220 words/member, each member engages at least 2 peers by Member-X label.
- Round 3: Final position, max 100 words/member. Real names restored.
Quick mode:
- Round 1: Restate + rapid analysis, max 200 words/member.
- Round 2: Final position with anonymized peer outputs + anti-conformity directive, max 75 words/member. Real names restored in the verdict.
Duo mode:
- Round 1: Opening position, max 250 words/member.
- Round 2: Direct response to counterpart with anti-conformity directive, max 180 words/member. (No anonymization — see rationale above.)
- Round 3: Final statement, max 60 words/member.
Round execution reliability policy:
- Send prompts to all
liveseats in parallel. - Wait using
round_timeout_ms. - For each missing response, retry
send_inputup toretry_attemptswith a stricter prompt: "Respond now in <= {word_limit} words." - If still missing, move seat to
degradedand generate[Simulated]output from persona instructions plus prior round context. - Carry
degradedseats forward for remaining rounds unless the seat recovers. - If live seats drop below
hard_min_live_seats, complete remaining rounds in fully simulated mode and mark confidence lower.
Synthesis is performed by an explicit Chairman — a model that did NOT deliberate in Rounds 1–3. The Chairman is selected before Round 1 using this algorithm (first match wins):
- Explicit override:
--chairman <name>was passed (provider tag or model alias). - Auto-select: highest-tier model among available providers, preferring one not on the panel when possible. Tie-breaker: provider listed first by the host runtime.
- Single-provider fallback: use that provider's highest tier and note the overlap in the verdict.
The Chairman is dispatched as a single call with the full audit transcript (Round 2 de-anonymized using the mapping retained in coordinator state — see Step 4 anonymization). Constraint: Chairman MUST NOT be a deliberating member in the same session.
Return a verdict with this order, produced by the Chairman:
Selected Panel(members + mode)Chairman(name, provider, model, selection rationale)Acceptable Compromises— what this verdict gives up, named explicitly (required in full; optional in quick; encouraged in duo)Kill Criteria— observable conditions that would falsify the verdict; format"If <X> by <date>, invalidated → <Y>"(required in full and quick; encouraged in duo)Concrete Next Step— exactly one action with an artifact-producing verb (required in all modes)Unresolved QuestionsKey AgreementsKey DisagreementsDecision Options(2-4 options with tradeoffs)Recommended Next Steps(additional actions beyond Concrete Next Step; ordered)Confidence(high/medium/low + why)Execution Reliability(live/degraded/offline seat counts and any timeout caveats)
Always preserve dissent. Never flatten disagreements into fake consensus. Sections 3-5 are non-negotiable in full mode — they make the verdict operational (observable, falsifiable, actionable) instead of advisory prose.
Chairman fallback: if the Chairman call fails or times out, the coordinator synthesizes the verdict directly and annotates Chairman: <name> (FAILED — synthesized by coordinator fallback).
If spawn_agent is unavailable or too many seats fail, run a local simulated council:
- Read each selected persona file.
- Produce clearly labeled
[Simulated]outputs per member. - Keep the same round structure.
- Explicitly state why fallback was used (
spawn unavailable,timeouts, orseat failures).
After the verdict is emitted, append a Session Metadata block with schema_version: 1 containing: mode, panel_size, rounds_run, tools_used, provider_count, fallbacks_triggered, and best-effort input_tokens_estimate / output_tokens_estimate / duration_seconds (write ~unknown if not available from the host runtime). Block is delimited by --- so it's grep-able and redirectable.