Research report · 2 September 2026

Memory systems for LLM agents

Which systems let an agent keep facts, connect them, reason about when they were true, and let stale ones fade. Mechanisms, verified numbers, and a decision guide.

Scope 25 systems scored, literature 2023 to August 2026 Method six parallel surveys, primary sources, numbers re-checked Sources 0 cited
01 · Verdict

The answer first

Fact quoted from a primary source  ·  Inference follows from the facts  ·  Opinion a recommendation. Superscripts link to the source list.

Opinion No shipped system meets all six requirements. The closest are Zep’s Graphiti for temporal facts with connections, Google’s Memory Bank for managed consolidation that keeps history, and Hindsight for event-time facts with typed links. None of the three decays memories by default.

Fact The mechanisms that matter are small and documented: an extraction step that decides ADD, UPDATE, INVALIDATE or NOOP; four timestamps per fact; a read path that scores relevance plus recency plus importance; and a background job that merges duplicates and supersedes stale entries.1,3,7,82 Every strong system in this report is a combination of those four parts, and each part can be added to a store that lacks it, except the timestamps, which must be there from the first write.

Inference Benchmarks no longer separate the leaders. LoCoMo scores above 90% sit at the ceiling of a flawed answer key, and the 2026 vendor numbers use different readers and judges.20,24,29 Choose by mechanism and by measured tokens per query on your own traffic, not by leaderboard position.36,85

  1. Temporal facts, links and history, and you can run a graph database: Graphiti self-hosted or Zep Cloud. Bi-temporal edges and invalidation are built in; add recency scoring in the read path.3,4
  2. A managed layer with the least operations: Memory Bank on Google Cloud, AgentCore Memory on AWS, Mem0 Platform elsewhere. Memory Bank keeps revisions; Mem0 Platform sells temporal reasoning, expiry and decay as add-ons.26,77,78
  3. A coding agent or one long-running agent: files plus git (Claude Code auto memory, Letta MemFS, Codex memories). Add timestamps and a scheduled consolidation pass.39,70,86
  4. Forgetting: implement it as a score. Copy the Redis half-life formula or Mem0’s 0.3× to 1.5× bias, keep the record, and hard-delete only on request.26,50
  5. Multi-hop questions over entity-rich documents: Cognee, or a HippoRAG-style graph with Personalized PageRank, next to verbatim chunks.12,46,83
02 · Requirements and taxonomy

Six requirements, four memory types, six operations

Cognitive-science vocabulary is the shared language. CoALA (2023) separates working memory from three long-term stores: episodic (what happened), semantic (facts), procedural (how to act).14 Zhang et al. (2024) reduce the operations to writing, management and reading.16 Du et al. (2025) list six: consolidation, updating, indexing, forgetting, retrieval, compression.15 The surveys of December 2025 and January 2026 add two axes: the form of the memory (tokens, parameters, latent state) and its subject (the user or the agent itself).17,18

Your six requirements map onto that vocabulary. Retaining facts is semantic memory plus indexing. Connections are the structure of the store and the retrieval operation over it. Temporal data is the timestamp schema on each memory plus time-aware retrieval. Decay is the forgetting operation. Updates are consolidation with history. Figure 1 places each of them in one architecture.

Figure 1Reference architecture that satisfies all six requirements
Agent turnmessages · tool resultsWorking memory (context window)Write path (hot path or async)Long-term storeRead pathBackground (sleep-time)Core blockspersona · user profile · task stateRecent turns1 Extractfacts · entities · events2 ResolveADD · UPDATE · INVALIDATE · NOOP3 Stampvalid_at · created_at · sourceEpisodic lograw turns + timestampsSemantic factsvector + keyword indexEntity graphbi-temporal edgesProceduralrules · skills · playbook1 Hybrid searchvector + keyword + graph hops2 Scorerelevance · recency · importance3 Packrerank · dedupe · token budgetConsolidateepisodes → facts, summariesDecayexpire · archive after each turnon queryinject top-k periodic
Figure 1. Reference architecture synthesised from the systems in Table 1. The write path extracts, resolves and stamps; four stores hold episodes, facts, entities and procedures; the read path fuses vector, keyword and graph retrieval and scores by relevance, recency and importance; a background job consolidates and decays.2,15,42 Rendered with D2 from research/arch.d2.
03 · Lifecycle

Write, store, read, forget

Every production system runs the same loop. A turn arrives; an LLM extracts candidate memories; a resolver compares them with the top-k existing memories and decides what to write; the store indexes them; a query pulls a small set into the context window; a background job cleans up. MemGPT framed it as an operating system in 2023: core memory in context, recall and archival stores outside, the model editing its own memory through tool calls.9 The differences between systems are the decisions each stage makes.1,2,77,79

Two choices dominate cost. Hot-path extraction adds one or two LLM calls to every turn; Mem0’s 2026 pipeline uses a single ADD-only call, LangMem and Memobase buffer and flush in the background, Letta and OpenAI compute memory at “sleep time”.25,42,43,52 Verbatim versus extracted storage is the other: a controlled ablation found verbatim chunks beat extracted memories by 15.9 points on LoCoMo and 22.0 on LongMemEval-S, so keep the raw episodes even when you extract.83 Reinforcement learning now trains the write decision itself: Memory-R1 reports a judge score of 62.7 against 45.7 for Mem0 with the same 8B model.56

Figure 2Memory lifecycle in one loop
Figure 2. Dots are memories. Four phases repeat: write (extract, resolve, stamp), store (episodic log, semantic index, entity graph), read (hybrid search into the context window), forget (score decay, merge, archive). Timing is illustrative.
04 · Retaining facts

Extraction, then the update decision

Retention starts with the resolver. Mem0’s paper retrieves the ten most similar memories and asks an LLM to emit ADD, UPDATE, DELETE or NOOP per candidate.1 Google Memory Bank records CREATED, UPDATED or DELETED per consolidation; AWS AgentCore emits AddMemory, UpdateMemory or SkipMemory and updates only when the new fact has higher confidence.77,79 LangMem patches or, if enabled, deletes contradicted memories.43

The update decision is where history is won or lost. Overwrite policies (legacy Mem0 UPDATE, Memobase profile replacement, Letta block edits, AgentCore consolidation) keep one current value.41,52,79 Invalidate policies (Graphiti, Supermemory versions, Memory Bank revisions, Cloudflare keyed facts, Hindsight observations) keep the old value with an end date.4,47,77,81,91 In 2026 Mem0 adopted a third policy: ADD only, both facts survive, and ranking plus a background Dream job decide which one the agent sees.25,82

Figure 3Overwrite versus invalidate: the same four turns, two memory policies

Incoming turns

Policy A · overwrite in place

no facts yet

Policy B · bi-temporal invalidate

no facts yet
Figure 3. The same four turns under two policies. Policy A keeps one value and loses the Paris interval. Policy B records valid_at, invalid_at, created_at and expired_at, so “where did the user live in April?” still has an answer. Both must hard-delete on request: invalidation is not erasure.

Fact Knowledge-update questions expose the difference. On LongMemEval-S, Zep scored 83.3 on the knowledge-update category against 78.2 for full context with gpt-4o.2 A June 2026 study of bounded, self-maintained memory found a 15-point loss on the same category even with a frontier model, because the agent overwrote facts it later needed.84 A study that penalises answers built on invalidated memories found agents reuse stale facts often enough that memory systems gave only marginal gains.35

05 · Connections

Vectors find what sounds similar, graphs find what is linked

Vector search returns memories that sound like the query. Multi-hop questions need memories that are linked to the answer, which is a different relation. HippoRAG builds an OpenIE knowledge graph and runs Personalized PageRank from the query’s entities; HippoRAG 2 adds passage nodes and reports a 7% gain on associative memory tasks over the best embedding model.11,12 Graphiti combines cosine similarity, BM25 and breadth-first traversal, then reranks with reciprocal rank fusion, maximal marginal relevance, node distance from a focal node, episode mentions or a cross-encoder.5

Three link models are in use. Entity graphs with typed edges: Graphiti, Cognee, and Hindsight’s entity, temporal, semantic and causal links.46,89,91 Note-to-note links generated by an LLM, as in A-MEM’s Zettelkasten, where a new note also rewrites its neighbours’ tags.10 Spreading activation, the 1975 Collins and Loftus model, implemented in 2026 by SYNAPSE with lateral inhibition and temporal decay.60,66 Mem0’s paper measured its graph variant at +1.6 points overall on LoCoMo, helping temporal and open-domain questions and hurting single-hop ones, and Mem0 then removed graph storage from its open-source SDK in 2026.1,25

Figure 4Retrieval for one multi-hop question
Figure 4. Twelve memories, one question. Vector top-k lights the nodes that share words with the query and misses the decision node. Spreading activation from the query entity reaches it in two hops and stops at three. Illustrative, not a benchmark.

Inference Use a graph when questions chain through entities: who decided, what depends on what, what changed after an event. Use vector plus keyword search when questions are about a single fact. Every strong 2026 system runs both and fuses the lists with reciprocal rank fusion.5,33,81

06 · Temporal data

Two clocks: when it was true, and when you learned it

Temporal data needs two clocks. Valid time says when a fact was true in the world. Transaction time says when the system learned it. Graphiti stores both on every edge as valid_at, invalid_at, created_at and expired_at, resolves relative phrases such as “last month” against the episode’s reference time, and answers “what was true on date X” and “what did we believe on date X” with filters.3,6 Hindsight keeps occurred_at next to created_at; Supermemory keeps eventDate next to documentDate; Cloudflare resolves relative dates with arithmetic rather than an LLM.48,81,91

Most other systems keep one clock. Mem0 stores created_at and updated_at, bakes absolute dates into the memory text, and offers a platform-only reference_date filter and a temporal reasoning add-on.28 Memory Bank, AgentCore, LangGraph and Letta expose creation and update times but no validity interval.41,44,76,78 Cognee builds a separate event timeline when temporal_cognify is on.45

Figure 5Bi-temporal edges: valid time versus transaction time
Figure 5. One fact, two clocks. The system learns in March 2025 that the user lives in Paris (valid since February). In June 2026 it learns the user moved in May: the Paris edge gets invalid_at 2026-05 and expired_at 2026-06; the London edge gets valid_at 2026-05 and created_at 2026-06. The hatched month is the interval in which the system believed something false. Field names follow Graphiti.

Fact Temporal reasoning is the weakest category on every benchmark. In the Mem0 paper’s harness, temporal questions scored 55.5 for Mem0 and 58.1 for its graph variant, against 72.9 and 75.7 on open-domain questions.1 Zep’s paper reports 62.4 on LongMemEval temporal reasoning against 45.1 for full context.2 A January 2026 method that indexes memories on a semantic timeline instead of dialogue order reports up to 12.2 points absolute gain.61

07 · Memory decay

Forgetting is a scoring function, not a delete

Forgetting in agent memory is a scoring problem. The systems that do it well never delete: they lower a memory’s rank until it stops being retrieved and keep the record for audit and for “as of” queries. Generative Agents added a recency term of 0.995 per hour to relevance and an LLM importance score.7 MemoryBank used the Ebbinghaus curve R = e−t/S and raised S by one on each recall.8 MemoryOS promotes segments by a heat score that sums visits, interaction length and an exponential recency term.13

Cognitive science offers better-fitted curves. Human forgetting follows a power law rather than an exponential.65 ACT-R’s base-level activation, the log of summed power-law decays over every past access, captures recency and frequency in one number and has been ported to LLM agents.63,95,96 FSRS, the spaced-repetition scheduler, gives a closed-form retrievability with stability in days and is the natural model for a memory that should stay retrievable after rehearsal; no agent system uses it yet.64 Figure 6 compares the four.

Figure 6Retrievability over 30 days under four decay models
Table view: R at 1, 3, 7, 14 and 30 days
Figure 6. Retrievability over 30 days. Stability S is the time constant of the exponential and, for FSRS, the interval at which R falls to 0.9. The ACT-R curve converts activation to recall probability with an illustrative threshold τ = −1 and noise s = 0.4; add accesses to see the frequency effect. The recency curve is Generative Agents’ 0.995 per hour. Hover for values; the table view lists them.

Fact In production code, decay appears as TTLs and rank multipliers, and it is off by default everywhere. The table lists what each system ships. Two 2026 papers measure the payoff: Oblivion gates the read path by retention and reports 90.6 on LongMemEval-S against 89.0 without gating, with up to 73% fewer tokens at 120K context; FadeMem reports a 45% smaller store with better multi-hop reasoning.58,59 No study yet isolates decay-based pruning against retrieval precision on a shared benchmark, so treat these as promising rather than settled.

08 · Evidence

What the benchmarks show, and what they cannot

Two benchmarks carry most claims. LoCoMo is ten long synthetic conversations with 1,986 questions, of which vendors score 1,540 after dropping the adversarial category.19 LongMemEval-S is 500 questions over about 115k tokens of history and tests five abilities: extraction, multi-session reasoning, temporal reasoning, knowledge updates and abstention.21 Chroma’s context-rot study explains why memory beats context stuffing: all 18 models tested scored higher on a 300-token focused prompt than on the 113k-token full history.22

Fact LoCoMo is saturated and partly wrong. Penfield’s April 2026 audit found 6.4% of the answer key incorrect and the published judge accepting up to 63% of intentionally wrong answers, which puts the honest ceiling near 93.6%.20 Zep’s own experiments say LoCoMo stops discriminating above about 80%.88 One system spans 36 points depending on who ran it: Zep scored 58.4 when Mem0 re-ran it, 75.1 when Zep ran it in 2025, and 94.7 with gpt-5.4 in 2026.29,30,31 A public attempt to reproduce EverMemOS’s 93.05 reached 38 to 52.55

Figure 7Reported scores on the two most used long-term memory benchmarks
Figure 7. Reported scores. Dark blue bars were run by the vendor or authors, light blue bars by a third party, grey bars are full-context baselines from the same harness. Reader and judge models differ per row, so compare only rows from the same harness.

Inference Three results are more informative than the leaderboards. MemoryAgentBench, with four competencies including selective forgetting, placed every commercial system below a long-context GPT-5-mini baseline.35 MemDelta showed that swapping only the embedding model moves accuracy by 6.2 points and that Mem0 and a plain cloud RAG were statistically tied at about fifty times the cost.36 A June 2026 study of twelve systems across five workloads concluded that no single architecture dominates.87 BEAM extends histories to 10M tokens, where the best reported scores are 60 to 64 against 25 for plain RAG, so that frontier still discriminates.32,37 Mem0’s own 2026 advice is to read every score paired with its token cost.85,98

09 · Comparison

Systems against the six requirements

Scores are 0 to 3 per requirement, from documentation and source code read on 2 September 2026, not from benchmarks. 3 means the mechanism is built in and documented with field names; 2 means partial or opt-in; 1 means a workaround; 0 means absent. Hover a cell for the reason, click a row for the evidence. Not scored: MIRIX (little activity since February 2026), Memori (conflict handling undocumented), EverMemOS (public reproduction failed).34,55,93

Table 1Score 0 to 3 per requirement. Click a row for the justification.
Table 1. The sum is a rough guide only: a 3 on time does not compensate for a 0 on production readiness. Research rows have no production score. Mem0 appears twice because the Platform and the open-source SDK diverged in 2026.
10 · Decision guide

Pick by situation

The decision criterion is which requirement you cannot work around later. Temporal correctness and history need a bi-temporal store; that is not a feature you add after the first million memories. Connections need a graph or link model in the store. Decay and expiry can be added in the read path of any system. Production readiness you can only buy or wait for. Consumer assistants settled the user-facing side in 2026: categorized, editable, user-visible memory with sensitive topics off by default.73,92

What to build yourself, whichever store you pick

  • Stamp every memory with four times: valid_at, invalid_at, created_at, expired_at. Resolve relative dates against the message time at write time.3,81
  • Keep the raw episodes. Extraction loses information; verbatim retrieval beat extraction by 16 to 22 points in a controlled ablation.83
  • Score reads as relevance plus recency plus importance, with a power-law or exponential recency term and a floor so nothing disappears silently.7,26,50
  • Run consolidation off the request path: merge duplicates, mark superseded facts, write a new version rather than editing in place. Rewriting the whole store in one pass is how context collapses.42,57,69,82
  • Keep always-loaded instructions short and separate from learned notes; keep the prompt prefix stable so caches hit.70,71,72
  • Hard-delete on user request and on expiry policy. Invalidation and soft forgetting do not satisfy erasure obligations.27,47
  • Evaluate on your own traffic: a LongMemEval-S subset plus hand-written knowledge-update and temporal cases, reported with tokens per query.21,85
11 · Sources

Sources