Evidence before belief
The strongest systems preserve the raw event, message, or document before compressing it into a durable claim. Without evidence, correction becomes guesswork.
Read the design patternA field guide to agent memory
A code-grounded atlas of how open-source memory systems capture, store, retrieve, correct, forget, and trust the context that shapes an agent.
Every analysis is pinned to an exact Git commit, so claims stay auditable as repositories evolve.
The central finding
The strongest systems preserve the raw event, message, or document before compressing it into a durable claim. Without evidence, correction becomes guesswork.
Read the design patternA beautifully ranked memory from the wrong user, project, or agent is still a serious failure.
Update APIs are not enough. Serious memory needs contradiction, supersession, rejected values, and deletion that reaches every derived artifact.
The pattern library
Reusable patterns distilled from the implementation evidence: when they work, where they fail, what to test — and, for the ones only one or two systems implement, that the atlas is arguing rather than reporting.
Keep negative memory so a known-wrong value cannot quietly return through extraction.
Explore pattern → 02 ProvenancePersist the source event before deriving the compact claim that shapes agent behavior.
Explore pattern → 03 RetrievalCombine semantic recall, exact matching, metadata, and bounded reranking.
Explore pattern → 04 BoundariesMake ownership part of identity and access before relevance is ever scored.
Explore pattern →Ten minutes, three ways in
Four patterns in dependency order, each one making the next enforceable — and what you can safely defer.
Pattern library Choosing between systemsEvery reviewed system against the seven capabilities, filterable, with a link straight to the analysis.
Capability index Studying the fieldInclusion rule, the five divergences that matter, the lifecycle comparison, and commit-pinned evidence for all of it.
Comparative reportThe repository atlas
01Pragmatic extraction, pluggable stores, hybrid retrieval, and a clean SDK surface.
02Small, framework-native tools for managing structured memory and background reflection.
03Message streams become peer-centric observations and a compact working representation.
04A compact SQLite and FTS5 memory with purposeful MCP tools and conflict-oriented writes.
05Original text stays authoritative; extracted indexes guide retrieval without hiding evidence.
06A tiny local hybrid retriever that now supersedes facts instead of deleting them — and re-asserts them the moment a new session mentions them again.
07Inspectable Markdown memory with recoverable capture, explicit targets, and operational depth.
08Claims and evidence meet governed writes, rejected tombstones, review UI, and retrieval telemetry. The atlas author's own project — read as a self-assessment.
09Core, archival, and conversation memory are first-class parts of the running agent.
10A polished public surface around documents, chunks, spaces, profiles, SDKs, and MCP.
11Memory is an epistemic problem: candidate, verified, rejected, corroborated, and defensively recalled.
12Source-backed facts and observations meet semantic, lexical, graph, and temporal recall.
13Episodes become a bi-temporal entity graph that preserves changing facts and history.
14Messages become dated observations, reflected and pre-buffered before context limits bite.
15Mountable cubes span textual, preference, skill, KV-cache, and parametric memory.
16Human-editable notes stay authoritative while graph and hybrid-search indexes remain rebuildable.
17Cheap lifecycle capture meets compact-first BM25, vector, and graph recall.
18Raw conversations, structured records, scenes, persona, and navigable tool-output maps.
19Source-preserving pipelines build ontology-aware graph, vector, summary, and session memory.
20A durable hook queue feeds structured observations and bounded project timelines across sessions.
21An LLM links new notes and revises nearby metadata in a compact Zettelkasten-inspired prototype.
22Facts become holographic phase vectors, so entities can be queried algebraically instead of by keyword.
23Hard-capped Markdown memory frozen into the prompt at session start to keep the cache warm.
24Memory, resources, and skills share one filesystem hierarchy with three retrievable granularities.
25TTL-scoped working memory promotes into deduplicated long-term memory with a real retention policy.
26A deterministic guard counts what an LLM rewrite would delete, then merges the loss back in.
27Memory ships as swappable extensions, with heavy work spent keeping the runtime's own envelope out of it.
28Seeds a knowledge graph with query entities and lets PageRank diffuse relevance instead of planning hops.
29Memory is a library of executable skills, written only once the environment confirms they worked.
30The observation, reflection, and planning stream whose importance-recency-relevance score everything else still echoes.
31Maps each memory to the files it describes and re-verifies it when git says those files changed.
32A branchable JSONL session tree with deterministic compaction manifests — and no memory contract at all.
33Replays past turns against candidate retrieval policies and promotes one only when it beats the incumbent.
34An append-only summary archive with separate write and consume cursors, and a Dream pass that won't advance after tool errors.
35Conversations become dated daily files, then a nightly Deep Dream distils them into a ~30-entry MEMORY.md.
36Four layers governed by written axioms — nothing enters memory that did not come from a successful tool call.
37Ships a memory benchmark that asserts what recall must not surface, not just what it must.
38A local rebuild of the Hindsight model with bi-temporal units, rejected and conflicted states, and decisions kept as ADRs.
39Markdown chunked, embedded, and hybrid-searched, with sanitized session transcripts fed back into the corpus.
40Grades every memory on confidence, importance, and durability, with a subconscious tier and a learning pause switch.
41One token budget split between chat history and pluggable memory blocks that each truncate themselves.
42Numbered invariants cited from the schema, append-only vote events, and new memory features shipped off by default.
43A provider contract that carries the owner key on every call, with retry and metrics added as decorators.
44A small model decides whether to retrieve at all, because irrelevant memory bends the answer.
45The supersession sweep defaults to a dry run, so a correction pass can be read before it changes anything.
46The only memory here that samples instead of ranking — temperature set by how varied the store has become.
47How a record is known sets a ceiling on how trusted it can ever become, so use alone cannot make a guess canonical.
48The only conflict pipeline here that ends in a decision — including "both are true" and a human-written reconciliation.
49The agent has its own credentials and grants, and a clamp makes over-granting it harmless by construction.
50A handoff that expires, addressed between harnesses, carrying the open questions rather than the conclusions.
51The background pass may only write where it is sanctioned to, and the tests include a corruption corpus from a published paper.
52860 lines, a log the code never edits, and detail that decays with age by geometry instead of policy.
53Immutable frames in one file, so a fact can be read as of last March and a whole session can be replayed.
54The tiered architecture at its most legible — and its promotion score cannot tell importance from verbosity.
55Ranks the slice and returns the file, and writes down why each schema decision was made.
56260 lines of memory and one paragraph of policy — written because models without rules either never save or save noise.
57Shared memory distributed by git pull, with secret-bearing writes refused even when the tier is switched off.
58The two hooks a memory plugin needs, both experimental, and no memory contract — so plugins read the database instead.
59ACT-R activation and the Ebbinghaus curve, with the score components of every retrieval stored on the record.
60A third tier that records how the agent reasoned — and stores the failures, because the control flow catches them.
61A demo that measures itself more than most production systems here — a recall eval matched on id, plus a stress test.
62Sandboxes other agents and snapshots their memory — credentials get scrubbed on backup, memory does not.
63Every memory is marked verbatim or inferred — and the quote is grepped against the transcript before the label sticks.
64Six memory types, six writer agents, and the atlas's third test asserting a memory must not come back — reached through access control, not memory research.
65The smallest useful description of a user — five sentences a subtopic, a token-budgeted context block, and the transcript deleted once it has been read.
66Forty lines of reinforcement by frequency — and the one line that reads the counts sorts ascending, so the rarest entities are the ones injected.
67Every fact names the conversations that produced it — and the dedupe key strips all non-ASCII, so facts in other scripts collapse into one row.
68Committed per-category benchmark tables including a 26.7% and a 0.100 — plus CREATE/CORROBORATE/REFINE/CORRECT as a validated verb set.
69Promote, archive, forget and reinforce as four separate decisions — evaluated during search, so reading a memory changes it.
70Watches your screen and writes down what it decides you promised — the second system here to model prospective memory, and the first to guess at it.
71Nothing is learned until a task reaches success or failed — and three committed tests assert that a running task writes nothing.
72Documents to a versioned biography to LoRA weights — the atlas's only parametric memory, and the only place deleting a memory cannot reach the belief.
73A proposed skill waits on disk beside the live one, carrying its rationale and sources — but say no and nothing remembers you did.
74Keeps every raw episode and cites it from each derived fact — then acknowledges a session deletion it has only queued.
75The relay holding your agent's memory cannot read it, and cannot tell which memory it is holding — but it throws away every version it replaces.
76The only store here whose memory schema belongs to the user — and the agent writes into it live, unmarked, with no way to delete what it got wrong.
77Every memory carries where it came from, and that label decides what it is allowed to cause — the atlas's only answer to memory as an injection surface.
78Requires the user scope on every call and offers no way to delete — while the sibling session service deletes fine.
79Forgetting erases the plaintext and keeps the chain provable — then the next write never checks what was forgotten.
80A memory has no id, so the only deletion the protocol can express is wiping the whole store.
81Dormant since 2024, and its interface still says "delete that one" — which neither 2026 framework contract can.
82Four scope keys pinned on one shared read path and proved disjoint end to end — while a deprecated fact stays re-derivable from the file that made it.
83Trust is an enum with one value, and the schema says why — while a rejected status is filtered on read and set by nothing.
84The bin icon confirms, computes the deletion, throws it away, and tells you to ask in chat — where no forget verb exists.
85Agreement and disagreement decay separately, and a test proves a disputed memory never feeds back — from a companion app, not a research lab.
86Keyword-triggered entries a person authors, with sticky, cooldown and delay making activation a timed state machine — and negative keys saying when not to fire.
87A summarizer rewritten twice in three years, with every generation still in the tree — and each one fixing a failure the last one had in production.
88A model rewrites the whole memory every four messages, and three guards stop that from destroying it — plus a correct restore API with no caller anywhere.
89Inverse document frequency, corpus-derived stopwords and length normalisation, written from scratch in while loops — plus a guard against the character's own words steering its recall.
90The Generative Agents retrieval function, ported faithfully except for the normalisation — so a 1-to-10 importance score outranks relevance and recency by construction.
91A first observation is capped at 0.7 and can only climb on independent repeats — then the recalled facts reach the model as (kind) key: value under "never contradict them", with the number stripped off.
92Six learning stores behind one machine, with fact supersession decided by a judged verdict against a configurable threshold — and a PROPOSE mode whose human approval is a sentence in the system prompt that the save_learning tool never checks.
optimize_memories collapses every memory into one, apply=True by default93Memory units that resolve their own pronouns and absolutise their own timestamps at write — stored in an add-only index whose single removal verb is clear(), beside a second subsystem holding the scope key and audit trail the first one lacks.
94Four tools over a Markdown notebook, with the namespace resolved from run context and never exposed as a tool argument — and a toolset that raises if the backend returns a path outside the scope it asked for.
95A three-part memory contract whose unit is the message rather than the fact — where every record carries an agent_id that no read path consults, and isolation comes from remembering to give each agent its own storage object.
96AutoGen's successor swaps a five-method Memory protocol for a two-method ContextProvider that declares neither deletion nor scope — beside a harness memory whose owner id is mandatory, traversal-checked, and asserted to stay inside its base path.
97Memory as a filesystem — records at /company/team/user, views rooted at a subtree, and a committed test that a rooted view cannot recall its sibling's records — with a consolidation plan that lets a model delete what it decides is superseded.
98Durable memory is a SQLite file the agent designs and queries itself, sandboxed by a sqlite3 authorizer — and the eight tables the platform mounts into it are all dropped before saving, with each one's mortality written into the schema prompt the model reads.
99551 lines of SQL carrying real validity-versus-record time, three-lane RRF recall, and an updated_at trigger that refuses to fire on a read — with the per-user row-level security shipped commented out.
100A Korean-documented actor simulation that stores the four components of its importance score so the coefficients can be tuned by replay — and expires only the semantic index, never the episodic original.
[], so amnesia looks like a quiet world101The only memory contract in the atlas that can decline a query, shed load, miss a deadline and roll back its own writes — with a saga journal that lives in a process dictionary.
102Extracted memories land as pending_approval and reach no prompt until a person presses a key — approve, reject, edit, skip or defer — with build_context reading only what was approved.
103One MEMORY.md per project, kept out of git so it is private to your checkout — maintained by a single remember/forget tool and rendered as a context item where every dated fact has its own delete control.
forget matches by substring and returns no receipt104A from-scratch .NET build of the Mem0 architecture whose Postgres store writes an append-only history row carrying the old and the new text for every mutation — the record the original's reviewed code does not earn.
event, old, new row on every mutation105Every agent turn is a commit and every session is a branch, so history is inspectable, forkable and replayable — with the retrieval index built as a projection the code rebuilds from the log.
106A codebase fact written without a provenance citation is recalled with an [unverified] marker in the text the model reads — and superseding it without fresh evidence carries the old citation forward with a staleness warning.
107A secret-classified hit needs a supervisor decision and then a human yes before it is returned — the only read gate in the atlas — beside a second, complete privacy policy that is exported and called by nothing.
108Fourteen memory types, each with its own Weibull shape and scale, recalled by four scored voices — and a provenance weight that trusts an unattributed memory more than one it knows came from a tool.
unknown: 0.8 outranks tool: 0.5109When two decisions share a topic but the evidence will not say which replaced which, both are marked CONTESTED and stay visible — and a ground-truth suite asserts what fraction of a session's decisions the extractor actually recovers.
110A Markdown memory in Rust whose global note deliberately follows the agent across projects while scratchpad, notes and daily logs are scoped by slug — with atomic writes and a one-version backup the search cannot see.
111Purge deletes from the row store, the vector index and the lexical index together — and the deletion is provable afterwards by an Ed25519 receipt anchored to a Merkle root over an append-only event log.
112Forty-six tables behind an OpenCode plugin, with no language model anywhere on the write path — and a table recording every candidate that nearly reached the context window, with the budget line that killed it.
113An agent records how each answer turned out; a deterministic pass withholds the lesson until a second result corroborates it, and re-hashes the source file on every read to mark it stale.
114Key-addressed lessons in Postgres behind row-level security, with an append-only audit log that records every mutation — and preserves none of the values it overwrote.
115Every lesson is untrusted until two distinct agent-session pairs corroborate it — a tier that costs score, carries a badge into the prompt, and halves the age-out. The identity that made it unreachable is now wired, and a session restart counts as a second source.
116A Postgres trigger derives the retrieval index from each memory's own content, and a GIN overlap ranks on it — no embedding anywhere on the path, in a platform that already runs pgvector elsewhere.
117Ranking signals taken from the codebase — file affinity, git co-change neighbours, dependency blast radius — fused with a deterministic embedder that needs no model and no network.
118A five-method memory contract that includes update and delete by id — the two most frameworks omit — and no search at all, because a person pins what should be in the prompt.
119Thirty-three lines that remember which proposals the owner rejected and tell the agent to avoid them — the shape this atlas keeps asking for, three entries deep.
120A single 200-line plain-text brief per project directory, rewritten whole by a model on a debounce keyed to the directory rather than the session, so two sessions cannot race.
121An entry can be sealed at record time with a delivery date — outside transcription, indexing and the timeline until it arrives, then it enters the pipeline as if just recorded.
122Rejecting a candidate can write a suppression keyed on its canonical label, and four checks in the write gate refuse anything matching — the fourth working tombstone in this atlas.
123Every hub write is signed, and the client refuses to file a memory under any owner but the address that signature recovers to — behind a retrieval filter that reads a distance as a similarity.
124A delete that cannot be written to the write-ahead log does not happen — the only audit in this atlas that is a precondition rather than a receipt. It also committed the benchmark showing it losing to its own prior art.
125The only hash-chained audit here — deletion shows as a sequence gap, insertion as a broken link, and sixteen tests prove it. The belief machine that would use it lives in a dictionary that empties on restart.
126The citation rule, the contradiction stop and the operation log are all sentences addressed to the model, and none has a code path. The search that is meant to compound is an unranked substring scan.
127A human correction can block the model outright — and a rule that keeps firing without being heeded is demoted out of its own veto by its measured precision. The only authority here that evidence can take away.
128Every event names the hash of the policy that produced it, and a derived one must name its sources — enforced by a validator. Then the dedup lookup skips deleted records, so the fact you deleted comes back.
129Standing prohibitions live in a tier that is always loaded rather than retrieved, capped by a lint rule. The package is a linter and a scaffolder — and the three lint rules deferred to v0.2 are the epistemic ones.
Nothing matches those filters.
Side-by-side synthesis
The comparative report traces capture, extraction, consolidation, retrieval, injection, correction, forgetting, persistence, and sharing across all one hundred and twenty-nine systems.
Read the comparative reportHow the atlas is made
Find the concrete schemas, functions, prompts, workers, adapters, tests, and evaluation artifacts.
Follow capture through storage, retrieval, context assembly, correction, and deletion.
Keep product claims, visible code, committed evidence, and open questions distinct.
Extract reusable patterns and blunt risks without pretending these systems solve the same problem.