Your agent drifts, and you can't prove why.
Every major assistant now carries state across chats. Memory is on by default. Projects and Spaces accumulate context. Custom instructions mutate in place, so editing them rewrites the history of threads that already ran. An agent you built to test websites behaves differently on session ten because it half-remembers the previous nine.
You cannot run an experiment on a substrate that is quietly changing underneath you.
Stateless, versioned agents.
An agent is a system prompt, a tool set, an output schema and model settings. In Coldcache that bundle is an immutable artifact with a number. Editing it never mutates it — it publishes the next one.
A chat binds to a version, not an agent
Every chat stores agent_version_id. The header shows site-tester v3 for the life of the chat. There is no “upgrade this chat” button, because that would be the bug.
Editing publishes v2, never rewrites v1
Published versions are frozen. v1 stays runnable, linkable and diffable forever. Publishing v6 on Monday does nothing to the chat you opened Friday on v3.
Fresh context. Memory is opt-in.
Each run loads that version's instructions into a clean window. No cross-chat memory, no personalization. Memory is declared inside the version body — turning it on is itself a version bump.
What it actually looks like.
Four surfaces do most of the work: the pinned chat, version history, the run diff and the batch rerun.
What we can promise, and what we can't.
Nobody can make a language model deterministic. We are not going to claim it. Here is exactly where the line is, and what we do on each side of it.
The claim is not that the model is deterministic. The claim is that everything on our side of the line is.
One set of semantics on every model.
Point a version at Claude, ChatGPT or Gemini. Web search, citations and JSON validation behave the same way on all three, so switching provider is a version bump you can diff — not a rewrite.
Claude
Server-side web search with dynamic filtering; adaptive thinking with an effort dial.
ChatGPT
Responses API with the hosted web-search tool; url citations harvested per run.
Gemini
Google Search grounding; grounding chunks recorded as sources.
Runs use Coldcache's model access; your own provider keys are an Enterprise option. Provider notes →
Pin an agent. Run it in a year. Get the same thing back.
Claude, ChatGPT and Gemini included — no provider account to open. Build one agent, publish v1, run it, then change the prompt and diff the two.