Run a multi-agent council for major architectural decisions — quad-model deliberation with Claude teammates (Opus) plus Codex, Gemini, and Cursor as independent external analysts. Use when a decision is too complex or high-stakes for a single agent or adversarial review.
Purpose: Operational guide for running multi-agent councils with cross-model deliberation. Councils use Claude teammates (Opus) for structured debate, plus Codex (OpenAI), Gemini (Google), and Cursor (Composer-2) as independent external analysts.
A council is a deliberation, not parallel reviews. The value comes from members seeing each other's positions, challenging them, and converging on refined recommendations. Without cross-member discussion, you just have independent reviewers — the synthesis is aggregation, not deliberation.
| Member | Role | Runtime |
|---|---|---|
| 4th Layer Advocate | Agent navigability, disambiguation, structural clarity |
| Claude teammate (Opus) |
| Visionary | Scalability, YIGNI, known future trajectory | Claude teammate (Opus) |
| Devil's Advocate | Find holes, challenge assumptions, surface what everyone missed | Claude teammate (Opus) |
| Codex | Independent autonomous analysis, no assigned role, full freedom | Background CLI (OpenAI) |
| Gemini | Independent autonomous analysis, no assigned role, full freedom | Background CLI (Google) |
| Cursor | Independent autonomous analysis, no assigned role, full freedom | Background agent (~/bin/agent, model: Composer-2) |
Optional members added per-council based on domain:
Codex, Gemini, and Cursor provide cross-model diversity — three independent analyses from different model families (OpenAI, Google, Cursor/Composer-2) that neither share context with each other nor with the Claude teammates. This surfaces blind spots that a single model family misses.
When external analysts agree on something Claude members missed → high-confidence gap. When external analysts disagree with each other → highest-signal finding in the council.
Create a council/ subdirectory in the active RUN:
council/
├── README.md # Members, process, key context files
├── SYNTHESIS.md # Final synthesis (written by lead after deliberation)
├── <member-slug>/
│ ├── SPEC.md # Role mandate, evaluation criteria, key files to read
│ └── NOTES.md # Append-only assessment log
Use TeamCreate to create the team. Each member is an Agent teammate (all Opus).
All three run in background via CLI — launched with run_in_background: true in the Bash tool.
# Codex (OpenAI)
codex -p "council prompt here" --force --model auto --output-format stream-json 2>&1
# Gemini (Google)
gemini -p "council prompt here" --yolo -m gemini-2.5-pro --output-format stream-json 2>&1
# Cursor (Composer-2)
agent --force --trust --model composer-2 --output-format stream-json --print "council prompt here" 2>&1
Rules for external agents:
stream-json output formathead -n 50 on output file — NEVER read the full streamGive all three external agents the same prompt (adjusted only for CLI syntax):
You are an independent analyst on a multi-agent council. Your job is to analyze
the following topic with complete autonomy — no assigned role, no constraints
on what you focus on.
TOPIC: [council topic]
CONTEXT FILES TO READ:
- [list of key files]
DELIVERABLE: Write your analysis to council/external-[codex|gemini|cursor]/NOTES.md
Include: key observations, concerns, recommendations, and anything surprising.
There are other council members analyzing the same topic independently.
Your value is your unique perspective — don't try to be comprehensive,
focus on what YOU find most important.
| Anti-Pattern | Why It's Wrong |
|---|---|
| Shutting down members after Phase 1 | Kills the deliberation before it starts. Individual reports are the STARTING POINT, not the output. |
| Synthesizing without cross-member discussion | Produces aggregation, not deliberation. Synthesis should reflect positions that EVOLVED through debate. |
| Treating council like parallel subagents | Subagents do independent work and report. Council members DISCUSS, DISAGREE, and CONVERGE. |
| Ignoring external agent disagreements | When two independent external models disagree, that's the highest-signal finding. Always surface and resolve. |
| Contaminating external agents | Don't share Claude members' work with Codex/Gemini/Cursor. Their value is independent perspective from a different model family. |
| Skipping Phase 4 if externals are slow | Wait for them. The cross-model check is a core part of the protocol, not optional. |
# Codex — headless, full permissions, background
codex -p "prompt" --force --model auto --output-format stream-json 2>&1
# run_in_background: true
# Gemini — headless, full permissions, background
gemini -p "prompt" --yolo -m gemini-2.5-pro --output-format stream-json 2>&1
# run_in_background: true
# Cursor — headless, full permissions, background
agent --force --trust --model composer-2 --output-format stream-json --print "prompt" 2>&1
# run_in_background: true
# Peek at output (all three)
head -n 50 /path/to/output/file
Takeaway: The protocol exists because this mistake was made. Follow every phase.
Last Updated: 2026-04-08