Multi-agent council deliberation for complex technical decisions that benefit from parallel analysis across multiple dimensions. Uses Claude Code agent teams to run simultaneous sub-topic deliberations, then synthesizes results. Use when a decision is too multi-faceted for a single linear deliberation — e.g., "Should we migrate to microservices?" has dimensions of deployment, team skills, performance, and cost that can all be explored in parallel. Triggers on "/council", "run a council on", "multi-angle deliberation", "parallel debate", "full analysis of".
A council runs multiple parallel sub-topic deliberations simultaneously using
agent teams, then synthesizes them into a unified recommendation. Use this
when a single /deliberate session would be too narrow for the decision.
Requires: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=true (already enabled)
Council is inherently context-safe: each track agent runs in its own independent
context window. The main session only receives short summary messages via
SendMessage when tracks complete. The full round-by-round content of each
track stays isolated in the track agent's context — it never flows back into
yours. This is the primary advantage of council over a single /deliberate
session for complex, multi-dimensional decisions.
Use /council when:
Use /deliberate when:
Extract the main topic from the user's message.
Vagueness check: if too broad, ask one clarifying question first.
Decompose into sub-topics: Analyze the decision and identify 2-4 orthogonal dimensions that can be evaluated independently. Present them:
Breaking "{topic}" into parallel deliberation tracks:
Track 1: {sub-topic-1} — {one-line description}
Track 2: {sub-topic-2} — {one-line description}
Track 3: {sub-topic-3} — {one-line description}
[Track 4: {sub-topic-4} — {one-line description}]
Each track runs simultaneously with its own Claude+Codex deliberation.
Total time: ~{N} minutes.
Proceed with these tracks? [yes / adjust]
If user wants to adjust, let them edit or remove tracks before continuing.
Create the output directory and council log file:
~/.claude/deliberations/{YYYY-MM-DD}-council-{slug}-{rand}.md
Write the council log frontmatter:
---
type: council
topic: "{main topic}"
date: {YYYY-MM-DD}
tracks:
- id: 1
topic: "{sub-topic-1}"
status: "Pending"
- id: 2
topic: "{sub-topic-2}"
status: "Pending"
status: "In Progress"
---
Create the council team:
TeamCreate: team_name = "council-{rand}"
Create one task per track using TaskCreate:
Task #1: Deliberate on Track 1: {sub-topic-1}
Task #2: Deliberate on Track 2: {sub-topic-2}
Task #3: Deliberate on Track 3: {sub-topic-3}
...
Also create a synthesis task blocked by all track tasks:
Task #{N+1}: Synthesize council results (blocked by tasks 1..N)
Tell the user:
Council starting. Launching {N} parallel deliberation tracks...
Each track: Claude + Codex, up to 5 rounds.
You may be asked to break ties on individual tracks.
Spawn one agent per track using the Agent tool with team_name:
For each track, spawn a general-purpose agent with instructions to:
mcp__codex__codex and mcp__codex__codex-reply for Codex turns/deliberate (Phase 2)~/.claude/deliberations/{council-slug}-track-{N}.mdTrack {N} complete. Topic: {sub-topic}. Status: {Converged/Deadlocked}.
Summary: {2-3 sentence summary of outcome}
Unresolved points: {list or "none"}
Log: {track log path}
You are running Track {N} of a multi-track council deliberation.
MAIN TOPIC: {main_topic}
YOUR TRACK: {sub_topic_N}
Run a structured Claude+Codex deliberation on your track topic following
this protocol:
1. Write a track log file to:
~/.claude/deliberations/{council_slug}-track-{N}.md
with frontmatter: topic, track number, status, codex_thread_id
2. ROUND LOOP (min 2, max 5 rounds):
a. Claude's turn: Formulate position using format:
**Thesis:** [one sentence]
### Position / ### Agrees With / ### Challenges / ### Delta
b. Codex's turn: Do NOT call mcp__codex__codex directly — wrap each
call in a nested Agent to keep terminal output clean:
Round 1: Agent("Track {N} Round {R} — Codex", prompt=
"Call mcp__codex__codex with model gpt-5.4-mini, sandbox
read-only, developer-instructions: 'You are in a structured
deliberation on {sub_topic_N} as part of a broader analysis of
{main_topic}. Provide your honest independent perspective. Do NOT
agree for consensus. Use: Thesis / Position / Agrees With /
Challenges headers.' and prompt: {claude_position}. Return JSON:
{threadId, response}")
Rounds 2+: Agent("Track {N} Round {R} — Codex", prompt=
"Call mcp__codex__codex-reply with threadId={id} and prompt:
{claude_position}. Return only the response text.")
c. Save threadId to log frontmatter after round 1.
d. Check convergence semantically (Claude evaluates, no string matching).
e. Anti-sycophancy: force minimum 2 rounds even on full agreement.
3. AFTER ROUNDS: Produce a track summary:
- Agreed points
- Unresolved disagreements (with both positions stated)
- Track recommendation (1-2 sentences)
4. If there are unresolved disagreements on your track, note them clearly
in your message to the team lead — the council lead will aggregate them
for user tie-breaking.
5. Update log frontmatter status to "Converged" or "Has Disagreements".
6. Send your results to the team lead via SendMessage and mark your task
as completed.
As track agents report in via SendMessage:
Track {N} complete: {sub-topic} — {Converged | N disagreements}
Collect all unresolved disagreements from all tracks. Present them to the user in a single consolidated tie-breaking session (to avoid repeated interruptions):
================================================================
Council Tie-Breaking Session
{total} unresolved disagreement(s) across {N} tracks
================================================================
Track {X} — {sub-topic}:
Disagreement: {point}
Claude: {position}
Codex: {position}
[1] Claude [2] Codex [3] Custom [4] Don't care [5] More debate
[Repeat for each disagreement]
Record all decisions in the council log.
Once all tracks are complete and disagreements resolved:
Send a shutdown request to all track agents.
Synthesize across all tracks into a unified council recommendation. Read each track log and produce:
## Council Synthesis
### Cross-Track Themes
[Points that emerged consistently across multiple tracks]
### Track-by-Track Outcomes
- **Track 1 ({sub-topic})**: {1-2 sentence outcome}
- **Track 2 ({sub-topic})**: {1-2 sentence outcome}
- ...
### Unified Recommendation
[2-3 paragraphs synthesizing all tracks into a clear recommendation]
### Assumptions
[What all tracks took as given]
### Key Risks
[Top risks identified across tracks]
### Implementation Roadmap
1. {milestone}
2. ...
### Success Criteria
- ...
### Dissenting Notes
[Any minority positions worth preserving even if overridden]
Write the synthesis to the council log file.
Print end banner:
================================================================
Council complete.
Tracks: {N} | Total rounds: {total}
Status: {Fully converged | Partially resolved}
Log: ~/.claude/deliberations/{council-filename}.md
================================================================
Ask: Was the council useful? [thumbs-up / thumbs-down / feedback]
Track agent fails to report: After 10 minutes without a message from a track agent, send it a ping via SendMessage. If no response after 2 minutes, run that track inline (as the lead) rather than blocking the council.
Codex MCP unavailable on a track: Track agent falls back to codex exec
CLI (stateless). Note in track log. Council can still synthesize from partial
results.
Team creation fails: Check that CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=true
is set. If agent teams are unavailable, fall back to running tracks sequentially
(inline, not parallelized) using the /deliberate protocol directly.