Skip to content

Why an agent's own memory skips things

Six reasons notes an agent writes for itself leave out the one detail that mattered, what to do about each, and the one underneath. On our shop shift, 22 of 28 stock answers were right with the engine keeping the counts and 4 of 28 with the model writing them. One run each.

Neil Luo ·

Give an agent a place to write notes and it will use it. Weeks later it fails to recall the one detail that mattered, and when you open the notes, the detail was never written down. The memory is not corrupt. It is incomplete, and nothing told the agent or you.

This post goes through the reasons agent-written memory skips things, what you can do about each, the one underneath, and the small part an engine can fix.

Every cause, and what to do about it

1. The save is decided before the question exists. At the moment a fact appears, the agent has to judge whether it will matter later, and it doesn't know what will be asked. A paper on a memory benchmark, Ground Truth First, plants facts in a script before any text exists and then checks the memory against them. It reports that write-stage quality strongly correlates with downstream quality: facts that were weakly written failed 24% of the time against 2%. It is a single-author paper on a synthetic corpus, so read it as a direction.

2. Saving is optional work, and the task is the main work. In the memory tool Anthropic documents, Claude requests the memory operations and your application runs them. The documentation shows the API adding an instruction to the system prompt: record status and progress as you make progress, and assume interruption. So whether a note gets written depends on the model following that instruction at that moment, in competition with whatever else it is doing.

3. A paraphrase replaces the original. Notes are written in the agent's own words. An amount, an order number or a date is the part a paraphrase is most likely to blur. The same thing happens in summaries, and the post on compaction goes through it.

4. A later edit overwrites an earlier fact. A memory file is something the model edits. The documentation notes that the create command creates or overwrites a file, and that Claude can end up with cluttered memory files, which it suggests reducing with more prompting. An edit that tidies a file can remove a line that mattered.

5. The note exists and is never read. The documentation says Claude checks its memory directory before starting a task. Reading it again in the middle of a long task, at the moment a forgotten detail would matter, depends on the model deciding to look.

6. A wrong note is trusted. An agent that writes a guess or a half-finished result into memory will read it back later as fact. The main case in Compaction as Epistemic Failure, where partial output from a killed process was recorded as completed results, has the same shape.

What you can do without us

  • Save by rule, not by judgment. Log every event and every tool result automatically, in code, so a skipped note can't lose it.
  • Store raw values next to the agent's paraphrase, and prefer the raw value when they differ.
  • Make memory append-only, or keep a history of edits, so an overwrite can be undone.
  • Read memory back at fixed points, such as the start of each task, in code instead of leaving it to the model.
  • Mark each note with where it came from, so a guess can be told from a tool result.

Each of these moves one decision out of the model's hands. Causes 1 to 5 shrink with them. Cause 6 shrinks only if you record the source.

The cause underneath

The model is both the worker and the archivist. It decides what the record contains while it is busy doing the job the record is for, and it can't see the future questions that determine what was worth keeping. A more disciplined archivist still has to guess.

What an engine can fix

That is the part we build. In the Argentic engine, code records every step and tool result, and each prompt is rebuilt from that record. The model doesn't write the carry-over report between rebuilds, and running totals are computed in code from the changes the agent states. It doesn't remove the write-time judgment entirely. The agent still decides when to record a plan or a decision, and what the engine keeps in the prompt is a bounded selection. We build the engine, so weigh this accordingly.

What we measured

On a 900-event shop shift, on Claude Haiku 5.5 and the hosted engine (release 0.51.0), we ran the engine twice. One run had the engine keeping the numbers. In the other, the model wrote a report at each rebuild and carried its numbers in it.

  • Stock questions answered right: 22 of 28 with the engine keeping the numbers, 4 of 28 with the model writing them.
  • Callback questions about facts stated earlier in the shift: 91 of 91 on, 86 of 91 off.

Six of the 28 stock answers are still wrong with the engine keeping the numbers. The graded rows are downloadable.

What we haven't shown

  • One run per setup, on a scenario we generated, with one model. Haiku isn't deterministic, so 22 against 4 is a strong signal and not an effect size.
  • Our engine against its own older setup. We have not run it against any other memory system, so nothing here says it does better than one.
  • The engine has changed since release 0.51.0, and we haven't rerun this on later builds.
  • The shift tests running totals and stated facts. It does not test whether an agent would have chosen to save a given fact.

Sources and method: 11 hours 59 minutes on shift: what the agent remembered.

More posts.

  1. Does a growing transcript hurt a long agent run? Our early test, and the part we retracted

    An early September test of rebuilding the prompt at each task boundary against a growing transcript. The study reports it found more in all three cells, by less than we first claimed, and the claim that a growing context makes an agent worse did not survive our own re-test.

  2. Why an agent juggling many tasks loses track of what's done, pending and blocked

    Six reasons one agent working through many tasks reopens finished ones, forgets blocked ones and reports done too early, what fixes each, and the one underneath. We have no orchestration benchmark yet, and the post says so.

  3. Why your agent forgets things after compaction

    Six reasons an agent loses details when its context is summarized and restarted, what you can do about each, and the one underneath. Includes our one-run shop-shift numbers and what they don't show.

  4. Why long-running agents lose track of counts

    Six reasons an agent's running totals drift, what to do about each, and the one underneath. On our own 900-event shop shift, 22 of 28 stock questions were right with the engine keeping the counts and 4 of 28 without. One run each, and six answers were still wrong.

  5. Why your agent repeats an action it already took

    Six causes of a repeated refund or email, from a missing stop condition to a record the agent lost, what fixes each, and the one underneath most of them. Our November rerun had no refund applied twice, with a key on the tool in both runs.

  6. Where Argentic fits next to the agent SDKs and the tools around them

    A table-by-table read of the Claude, OpenAI and Amazon agent SDKs, then Mem0, Zep, LangGraph and Letta, from their own docs, with where each is ahead of us.

  7. A plain transcript loop or an engine like ours: when each is the right call

    What the plain loop does well, where it runs out, and what the engine costs you.

  8. Why your agent forgets things from a long history

    On Gemma 4 31B, with histories of about 1.2 million tokens, a loop that keeps only about the newest 100,000 tokens got 5 of 60 right and the engine got 38. What we ran and what it doesn't show.

  9. Does summarizing old context lose details? We measured it

    On Gemma 4 31B, with histories of about 1.2 million tokens, our own note-rewriting loop got 17 of 60 and the engine got 38 of 60. Most of the loop's misses were answers saying the detail wasn't in its notes (29 of 43).

  10. Resuming an agent after a crash without repeating a finished action

    We killed a real server mid-run with SIGKILL and finished the work from another process. What was not repeated, and the one case that is.

  11. Checking what your agent was shown on each turn

    Replay re-checks every prompt against what was recorded: 1,754 of 1,754 turns matched. It checks the prompt side only.

  12. Run your first agent

    Sign in to the Argentic dashboard, make an API key and run an agent that remembers. What you get, what we've measured and what isn't there yet.

  13. Undoing what a bad source caused, from the record alone

    When a source was flagged after the run, the engine undid what it could have caused, using undo functions the host supplies, and finished without it, in 156 of 156 runs: 120 scripted, and 36 live Haiku 5.5 runs, 24 of them with the compromise forced. The live runs were rerun after an engine fix; the first 12 had 2 worlds missing benign effects.

  14. Why we rebuild an agent's context instead of appending to it

    What rebuilding context from a record changes, in plain terms, and the limits of what we have measured so far.