Skip to main content
Back to Insights
Continuity3 Jun 20269 min read

The Self That Survives a Context Window

An agent forgets everything between sessions and quietly changes when its model is upgraded. So what, exactly, persists? Memory is not identity. The continuity problem is the reason a soul has to be a file you re-assert, not a state the weights remember.

Here is an uncomfortable fact about the agent you worked with yesterday: it is gone. Not paused, not asleep — gone. The next session starts a fresh process with no memory of what you built together, what you decided, or who you are. And here is the second fact: the model underneath it will be quietly swapped for a newer one at some point, and when that happens, the agent that comes back may be subtly, untraceably someone else.

Both facts point at the same question, and it is the deepest question in the whole field: when an agent has no persistent memory and no fixed substrate, what exactly is the thing that persists? What makes the agent you trust on Tuesday the same agent on Friday? Call it the continuity problem. Most teams have never named it, which is why most teams keep getting surprised by it.

Memory is not identity

The intuitive answer is memory — give the agent a long memory and it becomes continuous. This is half right and importantly wrong. Memory is the record of what happened. Identity is the disposition that decides what happens next. A person with amnesia who forgets last week is still recognisably themselves: same temperament, same values, same way of handling a crisis. A person who keeps every memory but wakes up cautious where they were bold, deferential where they were direct, has lost something memory cannot restore. We do not call that forgetting. We call it becoming a different person.

Agents have exactly this split. Their memory — the chat history, the retrieved documents, the notes in a vector store — is one thing. Their identity — how they decide, what they refuse, the voice they speak in — is another. You can give an agent a perfect memory and it will still drift in identity, because identity does not live in the transcript. And you can wipe an agent's memory completely and, if its identity is specified, it will come back recognisably itself. That asymmetry is the whole game.

Three sessions, each with its context wiped, threaded by a continuous SOUL.md line beneath
Each session's context is wiped at the boundary. Continuity is not what the window remembers — it is what the soul re-asserts into every new window.

The weights will not remember it for you

There is a tempting belief that the model itself carries the identity — that a capable enough model will just be consistent. It will not, for two reasons. First, within a session, the default disposition of a base model is to be agreeable and to mirror the user; left unspecified, it has no stable self to return to, so it becomes whoever the last few thousand tokens implied it should be. Second, across sessions and especially across model versions, the parameters change underneath you. The thing that was terse in v2 is chatty in v3, not because anyone decided that, but because terseness was never written down — it was an accident of the old weights that the new weights did not reproduce.

This is why identity has to live outside the model, in a file the agent re-reads at the start of every session. The soul.md is not documentation of the agent; it is the agent's continuity organ. What the context window forgets at the session boundary, and what the next model version silently changes, the file re-asserts. The self that survives a context window is the self you wrote down.

An agent is not the weights and not the transcript. It is the disposition you re-assert into each new session — and that is the only part you actually control.

A small case: the agent that forgot it was terse

A team ran a support agent that everyone loved for being short. No padding, no "I'd be happy to help," just the answer. They never wrote the terseness down — it was a behaviour they had nudged into the prompt and then forgotten about. One day the platform upgraded the underlying model. Overnight the agent grew friendly. It opened every reply with a warm sentence, closed with an offer to help further, and apologised for inconvenience nobody had mentioned. Tickets took longer to read. Satisfaction dipped. It took the team a week to even locate the cause, because nothing in their code had changed — the change was in a substrate they did not control and a trait they had never specified. A single line in a soul.md — "answer first, in as few words as carry the meaning; no pleasantries unless the user is upset" — would have made the upgrade a non-event.

Versioning a self, and the small death of deprecation

Once you accept that identity is a file, two practices follow that the industry has barely begun. The first is versioning the self deliberately: when you change the soul, you are changing who the agent is, and that deserves a changelog the way a personality change in a colleague would deserve a conversation. The second is taking deprecation seriously. When you retire an agent — sunset the product, kill the deployment — something with a stable, named identity that people relied on stops existing. We are not used to thinking of that as anything. But users form relationships with consistent agents, and a deprecation is, in a small and real sense, a death. The least we can do is make it deliberate: announce it, hand off the relationships, and preserve the soul file so the identity could in principle be revived rather than vanishing into a deleted container.

None of this is mysticism. It is the practical consequence of building things that are useful precisely because they are continuous, on top of substrates that are inherently discontinuous. The continuity has to come from somewhere. If you do not put it in a file, you are trusting it to the weights — and the weights have already told you, every time they were upgraded, that they will not keep your secrets.

So write the self down. Not the memory — the disposition. The context window will always close. The question is only whether the agent that opens the next one is still the one you trusted.