A validator with standing to veto
The fair question first: Claude and Gemini ship brilliant chat engines. Rebuilding one in 2026 looks like not-invented-here syndrome. So why did I do it — and why three agents instead of one?
The honest answer: separation of powers. It's a structural answer to the exact bug that keeps biting every agent product, including the best ones. A single agent that plans the work, does the work, and grades the work will pass the work. Not occasionally — reliably. A language model narrates success more fluently than it achieves it, and when the same context window holds both the effort and the evaluation, the evaluation bends. Everyone building with agents has met this bug. It's the false green: "done, tests pass" — about code that never ran.
Self-grading doesn't work
We tried the prompt-level fixes everyone tries. Ask the model to double-check itself: it double-narrates instead. Ask it to be critical of its own output: it performs criticality, then approves. This isn't a model-quality problem that the next frontier release fixes — it's structural. The incentive gradient inside a single generation runs toward coherence, and "I did it and it works" is the most coherent ending to a story about doing something.
Real organizations solved this centuries ago, and never with better intentions — with seats. The author is not the editor. The builder is not the inspector. The powers are separated not because anyone is untrustworthy but because the roles are contradictory when held by one mind.
You can't ask the same context window to want the work to pass and to want to find out why it shouldn't.
So the three agents aren't theater
When people see Phoebe, Theo and Niko, they sometimes read it as personality design — chatbot roleplay. It's the opposite: the cast is the org chart of a separation of powers. Phoebe proposes — product mind, drafts the intent, never certifies it. Niko executes — decomposes, dispatches builders, never grades his own output. Theo is the independent validator: he reads everything, writes nothing he grades, and he has standing to veto — a blocking review before a build dispatches, and a challenge on the floor when the room is converging on something incoherent. His independence isn't a personality trait; the runtime enforces it. He is never handed the builder's incentive to be finished.
Beneath all three sits the layer that makes the arrangement trustworthy: a deterministic oversight component with no chat persona and no model calls at all. It commits every artifact change and reads it back; it computes "done" from system-emitted events — deploys, test runs, boot checks — never from an agent's claim. A model can sweet-talk another model. Nobody sweet-talks plumbing.
Why you can't get this from a single-agent product
This is the part that answers "why rebuild the engine." Inside a one-agent chat product, everything above is a prompt away from dissolving. You can ask for a critic; you'll get a paragraph of critique, generated by the same seat that did the work, graded on the same curve. The validator's independence — separate context, separate incentives, standing to block — is a property of the engine, not of the conversation. That's not something Claude or Gemini hands you off the shelf, because their product is a brilliant single seat. To get separated seats, you have to build the room.
The design rule we follow everywhere: the drafter is never the committer; the builder is never the verifier; narration is never evidence. Any place those collapse into one seat is a place the false green comes back.
What the veto buys you
Concretely: builds that boot and click through before "done" is utterable. Contradictions surfaced before dispatch, when they cost a conversation, instead of after, when they cost a rebuild. And an honest room — because when one seat's job is to find the strongest objection, agreement stops being ambient noise and starts meaning something.
Related: The day after the demo →