← Blog

Product · shared memory

Actor, Critic, Judge: three models, one memory that can't contradict itself

By Rajamohan Jabbala · July 2, 2026

Most "multi-agent" demos are the same trick: chain two or three models together, pass the output of one as the input of the next, call it a pipeline. It looks impressive for a minute. Then you correct something in turn one, ask a follow-up in turn three, and the model answers from the old, wrong fact because nothing actually shares memory. Three models, three blank slates.

I built something different: a council. Three roles, any model in any seat, and one memory underneath all three that's built to never let a stale fact quietly outlive the correction that replaced it.

Actor drafts. Critic challenges. Judge decides.

You ask one question. It runs through three seats, in order, each one reading the same shared memory:

Actor

Writes the turn to memory, reads it back, drafts the first answer grounded in whatever's currently true.

Critic

Reads the Actor's draft against the same memory and pushes back: what's missing, what's wrong, what it got right.

Judge

Sees the question, the draft, and the critique, and writes the final answer — resolving disagreements against the current truth, not a stale one.

Why one memory, not three

The obvious way to build this is to give each seat its own context window and let it re-derive the facts from scratch every turn. That's also the fragile way. Tell it something in the Actor's turn, correct it two questions later, and the Critic or the Judge can end up defending the old value simply because nobody told them it changed.

All three seats read and write the same CLS++ memory instead of three private ones. When you correct a fact, the old value doesn't get silently deleted and it doesn't get left sitting next to the new one to contradict it either — it's archived, marked superseded, and every seat sees the current truth on the very next turn. That's the actual hard problem in a multi-model setup, and it's the one nobody demos because it's not as visually interesting as three chat bubbles filling in one after another.

The workbench: remix, don't just regenerate

If the Judge's answer isn't quite it, you don't have to throw the whole thing away and re-roll. Select the exact sentence you want from any of the three answers, drag it down, add a note if you want one, and regenerate — the council reruns the same three seats steered by exactly what you pulled out, not a vague "try again."

Drag a whole answer's header in for the full draft, or just highlight a phrase for the one piece worth keeping. Either way, only what you actually pick moves — not the whole card.

Pick your own council

Nobody's locked into one vendor per seat. By default GPT-5 drafts, Claude critiques, and Gemini judges — but any of the three can sit in any seat. Want two OpenAI models arguing with each other and Claude breaking the tie? That's one dropdown per seat, not a config file.

Three models. One memory. Try the council.

Tell it something, correct it a few turns later, and watch the whole council stay on the current truth.

This is what "memory for AI agents" actually has to survive: not one model in one chat window, but several opinions that all need to agree on what's currently true. If you're stitching models together and hitting the same wall, the shared-memory piece is the part worth getting right first.

Found this useful? Share it.