Fight ClubBlog

Anatomy of a memory for LLMsPart 2 of 7

Type is a lifespan

In 1879 a young German philosopher, Hermann Ebbinghaus, started an experiment with only one subject: himself. Very few people at the time thought memory could be measured at all. Ebbinghaus made syllables that meant nothing (DAX, BOK...), put them in rows of thirteen and read each row aloud at a steady pace until he could repeat it twice without a mistake. Then he waited (twenty minutes, one hour, nine hours, one day, two days, a month...) and learned the same row again. What he measured was the time he saved the second time. If the row took ten minutes the first time and four minutes the second time, he had saved six tenths of the work, so six tenths of it was still somewhere in his head. He chose nonsense on purpose. Meaning helps memory. A word like "mother" brings a different amount of meaning to every reader, so he removed meaning to get one clean measurement. The result, published in 1885 in his book "Memory", is the forgetting curve: most of a row was gone within a day, then the loss slowed down a lot. After a month he still saved about a fifth of the original effort. In 2015 Jaap Murre and Joeri Dros repeated the whole experiment with one subject who spent seventy hours learning syllables. The curve came out very close to the one Ebbinghaus had drawn.

The part of the book people quote less is the part I find most useful. Ebbinghaus also tested himself on verses of Byron's Don Juan (in English, which was not his language). They needed far fewer repetitions than the nonsense syllables, because they meant something. His curve was clean because nothing in it meant anything. A memory for an AI agent has the opposite problem. Every fact in it means something, so one curve can't fit all of them: "staging is down" is useless by next week, while "we chose Postgres because the reports need joins" stays true until somebody decides otherwise. If both fade at the same speed, either the outage keeps ranking high for months or the database decision disappears after a few weeks. Andres Servin, a former CTO, wrote under one of my posts that knowing what to forget is harder than retrieving on demand. In his view, decay rules at the agent layer are still unsolved. I agree that no rule can guess how long a fact will live by looking at its words. "The server is on 10.0.0.5" can be true for years or until tomorrow afternoon. Only the one who stores the fact knows the reason behind it.

When I built ns-brain I gave that decision to the writer. The AI agent (Claude Code, Codex, Cursor...) picks a type for every fact when it stores it, at the moment it still knows why the fact matters. Each type has its own fade rate:

A faded fact is still in ns-brain and a search for its exact words still finds it. It only stops ranking above fresher facts when the agent asks a general question. When the agent stores the same preference again, or someone confirms that it still holds, its clock starts again. Ebbinghaus saw something similar in himself: a row he learned again needed less work each time. It also means nobody has to clean the memory by hand. Last week's "staging is down" sinks by itself and never needs a person to delete it.

This has a real cost: the type is a judgement made by a model, so it is sometimes wrong. A rule filed as a preference fades when it should have stayed. That happened to me with three of my own rules. It gets its own article later this month. The rates are also choices that someone made. A support team or a hospital may need different ones. So the open question becomes how many types we need and how long each one lives. That is configuration on a mechanism that already works. Hive, the server edition of ns-brain, uses the same types and the same rates, so a fact fades at the same speed on every machine and for everyone on the team. Part 3 tomorrow: why divers who learned words underwater remembered them best underwater. It shows something about where a memory should live.

The project behind this series ns-brain.fightclub.pro