Persona Engineering
Building a chatbot that stays the same character across a long conversation.
Read the blog →The prototype was excellent. Twenty turns in, the character was distinctive, consistent, and did the thing you wrote it to do. You shipped it, someone had a two-hundred-turn conversation, and by the end it was a generically agreeable assistant wearing a name.
Nothing broke. No error, no degraded model, no bug in the code that assembles the input. The character definition was simply outweighed — a fixed amount of authored text competing against an ever-growing pile of conversation, most of which is the model’s own recent output.
That is the subject of this site: keeping a persona coherent across a long conversation, treated as an engineering problem rather than a prompt-writing one.
The framing that makes it tractable is that a persona is state, reassembled from scratch on every turn. Nothing about the character persists between requests. There is a definition you authored, a set of facts that accumulated per user, and some portion of history — and every turn is a fresh decision about what to include and what to leave out.
Which means all four of the interesting problems are the same problem viewed from different sides. Memory is a choice about what to reassemble, and every option is lossy in a specific direction — a window loses everything past an edge, a summary keeps gist and destroys specifics, extraction keeps whatever it thought to capture and nothing else. Drift is the definition losing a proportion battle against accumulated history. Cost is what all of it adds to every input from now on.
That last part is why every post here carries a PAID EVERY TURN line. Nothing in persona
engineering is a one-off. A continuity feature is a recurring per-message cost that grows with the
history it is there to preserve, and treating it as a feature you add once is the error that makes the
economics of a chat product surprising later.
Posts describe structure and tradeoffs, not artifacts. There is no prompt text and no code on this site — deliberately. Paste-able persona prompts are the thing that gets repurposed to get around safety systems, and prompt specifics rot within months while structural reasoning about lossy state does not. Moderation appears here as a constraint to design around gracefully, and nothing here will help anybody defeat one.
If you are using one of these apps rather than building one — why it forgot, why it changed, where your messages go — that is a different subject with a different reader, and it is covered elsewhere.
Latest posts
-
A persona is state, not a personality
Four categories of state get stored as one blob, and that is why a character cannot be versioned, corrected, or debugged when it goes wrong.
-
What the model remembers between turns
Nothing. Continuity is entirely something you build, and the four ways of building it fail in four different directions.
-
Summarisation and what it loses
Compression is not neutral. It destroys specifics first and decays generationally, so the oldest history degrades fastest — what a relationship rests on.
-
Why characters drift
A fixed definition against growing history, and the history includes the model's own output. Drift is a proportion problem that reinforces itself.
-
The cost of a turn
Costs scale with usage and with history length, so your heaviest users get more expensive the longer they stay. That shapes every state decision you make.