evaluation guide

How AI character memory works, and where it breaks

A working explanation of how AI character memory gets captured, ranked, and injected into a prompt, and the checks that reveal where it quietly fails.

Published 2026-09-06 · Reviewed 2026-09-06

When people say a character “remembers” something, they usually mean one of three different mechanisms, and the difference decides whether a fact survives an hour or a month. The first is the context window, which is just the recent transcript handed back to the model on every request. The second is a written record extracted from that transcript and stored outside it. The third is author-supplied material — a definition, a lorebook entry, a persona field — that never changed in the first place. Only the second one is memory in the sense most readers care about, and it is the one with moving parts that can fail.

The context window is not memory

Every message you send is a fresh request. The model receives a system prompt, some retrieved material, and as much of the conversation as fits, and it holds nothing between calls. Anthropic’s documentation on context windows describes this plainly for its own models, and the same shape applies to any product built on a hosted model. When a character forgets your sister’s name after two hundred turns, the ordinary cause is that the turn where you said it fell off the back of the window and nothing wrote it down.

Nothing about a larger window fixes that permanently. It moves the cliff further out. A product that only widens the window is buying time; a product that extracts records is building something that can be inspected, corrected, and carried between sessions.

What we observed

On 2026-09-06 we read Charmi’s memory implementation across charmi-web and charmi-server against its internal plan dated 2026-08-11. A memory record carries display text, a category, the source turn IDs it came from, a confidence value, a locale, timestamps, and a state. Categories are fixed: identity, preference, relationship, event, boundary, and promise. States are proposed, accepted, corrected, and deleted, and only accepted or corrected records are placed into the character’s prompt. A proposed record is shown for review first and does nothing until a person acts on it.

Ranking at prompt-build time is not recency-first. Boundary comes first, then promise, identity, relationship, preference, and event. Within that order the system sorts by lexical relevance to recent turns, then confidence, then recency. Capacity matters here too: how much is retrieved into the prompt is bounded by the user’s plan tier and a token budget, while inspection and deletion are never limited. You can always read and remove the whole set even when only part of it is being used on a given turn.

Extraction runs after a completed turn rather than during streaming, and is keyed by turn ID so a retry cannot create duplicates. The extraction contract explicitly excludes transient mood, low-value repetition, unsupported inference, and non-durable sexual detail. After extraction the chat surfaces one quiet “remembered” event with a Review action. From the memory sheet a user can list records, add one manually, accept a proposed record, correct its wording, delete it, or export the set. A correction becomes authoritative for the next message without a reload, which is the property that makes the sheet worth opening at all.

Where it breaks

Extraction is a judgement call, so the first failure mode is silence. You state something offhand in the middle of a long emotional turn, the extractor scores it as transient mood or unsupported inference, and no record appears. The rule set that excludes noise also excludes real facts phrased like noise.

A second failure mode is a record that exists but never gets retrieved. With a category order that puts boundary and promise ahead of event, a plain factual detail competes for whatever room the token budget leaves. On a tight plan tier a low-relevance event record can sit in the sheet permanently and never reach the prompt, which reads to a user as forgetting even though the data is right there.

Wrong-but-confident records are the third mode, and the most annoying. A misheard detail gets stored with high confidence, ranks well, and then contradicts you in every scene until someone corrects the wording. Deletion alone often is not enough, because the model can re-extract the same wrong fact from the same turn on a later pass unless the corrected version is present to override it.

A test you can run in twenty minutes

Pick one character and send three separate messages that each mention the same durable fact in different words — a job, a city, a standing commitment. Finish the third turn completely, wait for the “remembered” event, then open the memory sheet and check the category and state the record landed in. If it is proposed, accept it, because a proposed record contributes nothing.

Now try the negative case. Say something purely about mood, finish the turn, and confirm no record appears. Then state something the character should treat as a hard limit and check that it lands under boundary rather than preference, since that placement is what buys it priority when the budget is tight.

Finally, corrupt a record on purpose. Correct one entry to a wrong value, send one message that should touch it, and see whether the character uses the corrected wording immediately. If your correction only takes effect after a reload, the write path and the read path are not the same path, and that gap will bite you later. Working through testing AI character consistency gives you a repeatable script for the same checks across several characters.

What to carry into any product

Judge a memory system by four questions: can you see the records, can you edit them, does an edit take effect on the next message, and can you export the set. Products that answer yes to all four are auditable. Products that answer no to the first are asking you to trust an invisible store.

Character.AI’s Lorebook documentation describes a different lever — keyword-triggered world entries authored ahead of time — which solves stable setting facts rather than facts learned during a conversation. Both surfaces are useful and neither replaces the other. If you are comparing tools on this axis specifically, long-form memory alternatives walks through what to inspect, and the AI Companion Characters hub is a reasonable place to start a trial with a character you intend to keep.

Sources reviewed