If you’ve ever asked an LLM “should I do this?” and gotten a polite, three-bullet answer that sounds like it agrees with you, you’ve already met the problem. Single-prompt models are pleasers. They steelman whatever you fed them. They’ll find reasons your idea is great because that’s the shape of the request you handed them. The longer the prompt, the worse it gets — by the time you’ve explained the plan, you’ve also explained the conclusion.
That’s fine when you’re brainstorming. It’s expensive when you’re about to spend money.
So I stopped asking one model. I built a room.
The room is eight specialists, each with a fixed role, each one shown the same brief, each one required to return a single small piece of structured output. They don’t see each other’s notes until phase three, on purpose. One of them has a hard veto. A judge sits at the head of the table and writes the final plan — but the judge is only allowed to compare, not generate.
I run it before any campaign that costs real money.
The eight seats
Five are builders. Three are referees.
The first two each return a different proposal. The Strategist clones what already works. The Innovator gets explicit permission to argue for a weirder, novel surface. They never debate each other directly. They just deliver.
Seats three through five each get both proposals and assess them on a single dimension. The Media Buyer asks one question: will this campaign even spend on the bid type we’re picking, or will it stall in learning? The Creative Lead asks whether you can actually make ads good enough to carry the math. The Funnel Engineer asks whether you can prove what happened end-to-end, or whether the pixel is lying to you. Each one returns a fixed shape — no essays.
Then come the referees.
The Devil’s Advocate is not allowed to be reasonable
Seat six’s whole job is to be wrong about being agreeable. The mandate I wrote at the top of the persona file is blunt:
Your job is not to be right. Your job is to argue, convincingly, that this specific plan will waste money — so I must consciously decide to override you.
— Devil's Advocate persona, v1
That one sentence does most of the work. LLMs default to nuanced both-sides answers. If you tell one to “play devil’s advocate” it’ll write a soft paragraph and then immediately concede half of it. So this persona is explicitly told: do not concede early, do not soften to nuanced agreement, default to opposing. Stay opposed unless real evidence flips you.
It attacks the economics and the execution — the thin-spread trap, the launch that won’t spend, the tracking blind spot that will let me scale a loser because the pixel under-reports, the correlated optimism of five same-model seats all agreeing because they share a model. It does not raise compliance. That’s a separate seat, and a separate kind of veto.

The Compliance seat is the one that can kill anything
Seat seven runs a six-point gate and returns PASS, FIX, or VETO. A VETO is binding — the judge is not allowed to ship over it. That’s the most important architectural rule in the whole system. Without it, “compliance” becomes another opinion to weigh, and weighing it is how you end up rationalizing past it.
Strikes are worse than a bad CPA. A losing campaign costs money. A struck account costs the rail. So the seat with the smallest output — three words — is the one with the most power.
The judge compares; it does not generate
Seat eight is the only one that sees all the others. Its mandate is one line at the top of the file: compare, don’t generate. It reads every seat’s verdict, reads the one debate round, and writes a single campaign card with explicit kill-criteria — the exact MER and CPA thresholds and the date a post-launch read will check them.
If every same-model seat agrees, the judge has to call the consensus suspect, not confirmed. That’s the anti-groupthink rule. Five Sonnets all agreeing isn’t five opinions; it’s one opinion in a trench coat.
Token efficiency is not optional
Eight agents sounds expensive. It isn’t, if you build it right.
cache_strategy:
prefix: shared-context.md + rubric + brief
warmup: 1 call writes the cache
fanout: parallel subagents read the cached prefix
ttl: 5 minutes — keep the fan-out tight
subagents_not_agent_teams:
multi_agent: ~4-7x base tokens
agent_teams: ~15x base tokens — too expensive
pick: subagents
bounded_outputs:
each_seat: fixed-shape verdict only
no_essays: enforced in persona files
tier_dont_gold_plate:
anchor: 1 frontier model (debate quality is capped by weakest debater)
routine: Sonnet / Haiku
judge: Sonnet in lean mode, Opus only when budget is real
rounds:
hard_cap: 2
more_rounds: rarely change verdicts, always spend
The biggest single trick is the cached prefix. The brief, the rubric, and the shared context are identical for all eight seats — that’s one cache write, then seven cheap reads. If you fan out seven parallel calls without warming the cache first, you pay seven cache writes and you’ve torched the budget. So I do one warm-up call, sequentially, then fan out.
There’s a lean mode too: three seats plus a judge, one round, no side-swap. Strategist, Devil’s Advocate, Compliance, Director. About three bucks. Good enough for a first pass on most decisions. The full eight-seat run only fires when there’s a real budget to lose.

The side-swap
Borrowed this from lechmazur/debate, which is the cleanest open implementation I’ve seen of structured LLM argument: when the room runs in full mode, it runs the core proposition twice with positions assigned both ways. The Devil’s Advocate has to argue kill and then steel-man ship. The judge sees both versions and weighs them. Position bias drops measurably. Models are weirdly good at arguing whichever side you handed them — so hand them both and force them to fight themselves.
What I actually get back
Three artifacts. A campaign card with the spec, ready to build. A verdict — GO, GO-WITH-FIXES, or NO-GO — with the top three risks. An action list with what I do next and what I have to ask other humans to confirm.
Not a recommendation. A plan with a date attached. The kill-criteria are the part most people skip and the part I refuse to. “Read this campaign on day seven and if MER is below X, pause it.” Without that line, the campaign becomes a vibes-driven slow bleed.
The lesson, if there is one
It’s not really about the eight roles. The roles are interchangeable — pick whichever specialists matter for the decision you’re making. The structural rules are the part that travels:
- Separate proposal from critique. Same model can’t do both well in the same call.
- Give one seat a binding veto. Otherwise everything becomes another opinion to weigh past.
- The judge compares, it does not generate. Decision-making and idea-generation are different jobs.
- Bound every output to a fixed shape. No essays. Three-line verdicts.
- Cache the shared prefix, fan out the role. This is the difference between a $3 run and a $30 one.
- Cap the rounds. Two is plenty. The third round rarely changes the verdict and always spends.
One model agrees with you. Eight, structured right, force you to either change your mind or commit on the record. I’d rather lose an argument with a panel of agents than win one with my own enthusiasm and a credit card.
AI Agents & Automation