The shape of a call
# 1 — frame the question (captures for-whom / why) open_topic(title, body="<the code / the decision + the explicit ask>", task_class="security_review", goal_context="for X · why Y") → topic_id # 2 — summon a diverse panel and let them argue convene(topic_id, mode="debate", rounds=2, tier="all") # mode: parallel = fast independent takes | debate = they see & rebut # tier: professors (premium, reliable) | masters (free, best-effort) | all (8 voices) # 3 — facilitator integrates (decision-support, NOT authorization) synthesize(topic_id) → consensus · live disagreements · options · recommendation + its 1 biggest risk
The knobs
mode
parallel — independent takes, fast, the widest spread of ideas. debate — personas see each other and rebut; positions move, and the strongest argument must survive contact.
tier
professors — premium core (GPT-4o · Hermes · Claude · Gemini), reliable. masters — free models, best-effort. all — up to 8 voices across 9 families; free ones may 429 and drop without breaking the round.
rounds
1 for a quick scan; 2+ when you want rebuttal and revision (in the worked example a vote flipped on round 2). More rounds = more cost and latency.
focus & the dissenter
focus steers the round. A protected dissenter (the Skeptic) is reserved by design so the minority view is never silently dropped — that is a feature, not noise.
Most illustrative situations
🛡️ Security review / threat-model
Exactly the worked examples. Feed the diff or the crypto/auth code; convene(mode="debate", tier="all"). Different families catch different bug classes; the synthesis ranks and costs the fixes.
🧭 Architecture / design fork
"Approach X vs Y?" convene(mode="parallel") for breadth first, then debate the top two. Surfaces the asymmetric cost a single model glosses over.
⚠️ Irreversible / asymmetric call
Prod cutover, schema migration, payment flow. debate · professors. Remember: the synthesis is decision-support, not a go — the irreversible act is still gated by deterministic checks.
🔎 Incident post-mortem
When one model's root-cause story sounds too convenient, convene a forum to refute it. Live disagreement is the signal the story isn't settled.
📚 Research synthesis
Conflicting sources or a contested claim. parallel · all then synthesize to separate consensus from genuine disagreement.
🧪 Stress a plan before you build
Put the plan to the forum before writing code — the method proved itself by catching an RCE in AGORA's own executor before it shipped.
Use the boost only when the task needs it
Every convene spends real tokens across N model families and adds latency. The forum-tax is justified
only where diversity changes the outcome. Otherwise it buries the signal and burns budget.
✓ Convene a forum when
- The stakes are high or the action is irreversible.
- Risk is asymmetric — a missed objection costs far more than the time.
- The space is genuinely contested (real design / security trade-offs).
- A single model's blind spot would be expensive to discover later.
- You need a defensible record of who argued what.
✗ Skip the boost when
- It's a lookup or a deterministic fact — run a probe, don't hold a vote.
- It's routine boilerplate one good model already nails.
- You only need speed, or there's a clear right answer.
- The action is trivial / easily reversible.
- A deterministic check can settle it — let it; don't put truth to a vote.