Deep Analysis

One Memory: What Parts Do We Really Need

A close reading of thirty-two agent memory engines from primary sources, with license checks, measurements, and proprietary code. The conclusion reached by the analysis was not the one expected.

ARLI, Inc. November 2, 2026 Six Threads, Primary Sources

00Summary: an output that changes the task

The task was: from the provided list of memory engines, select the necessary parts and assemble them into one large memory. The analysis showed that most of the necessary parts are already in our own code, and external engines provide only two or three truly missing pieces on top of all this. Therefore, we should not assemble "from their parts," but rather build up our missing layers, taking from them exactly what we don't have.

The second conclusion is even more important than the first, and it's unpleasant. Independent measurements do not confirm that fact extraction by the model actually improves memory: on the same test, extraction turned out to be worse than regular search through raw replicas. This means that extraction cannot be taken by default, only as an add-on that we first measure.

32engines in the provided list have been checked via API
25exist; 7 links lead nowhere
9memory layers are already implemented in our code
8layers are missing from us and need to be built

What exactly we are assembling

  1. Our own core. One memory with provenance, time of truth, and versions. Here we already have almost everything; what's missing is the linking of four storages into one.
  2. Time for truth. Two-temporal graph model from Graphiti: each fact has a time interval "when it was true" and separately "when we learned it". This is a direct answer to "memory is dynamic".
  3. Understandable output. Our consent and receipt layer. No engine and no product has it. This is our distinction.
  4. Extraction and connections. We connect them last and based on measurements: from Mem0, we take the extraction technique; from A-MEM, the note-linking technique, and only if our measurement shows benefit.

In one line

There were exactly two and a half useful parts from other engines: the time scheme (Graphiti), the method of linking notes (A-MEM), and, as an option, extraction techniques (Mem0). The rest is either already ours or not needed at all. The only part that no one in the world has is human-understandable memory output with a receipt, and we already have it.

11How we checked: six streams from primary sources

The analysis was not based on reviews or promotional pages. Six independent streams read the code and documentation of each engine and wrote the results into a separate file to be consolidated later.

Fact extraction and updating Time and the graph of truth Local core and origin Distillation, connections, measurements Robustness and consent Our code: what's already there Decisionmatrix Diagram 1. Five streams read engines, the sixth reads our code; everything converges into the decision matrix.

What exactly was required from each engine: how it transforms conversation into records, how it decides whether to add a fact or erase an old one, where this logic resides (file and function), what minimal part can be taken, what databases and model are needed, how mature it is, and what its license is. The license was checked not by the icon on the page, but by reading the license file itself: for three engines, the icon said "undefined," but the file contained Apache 2.0.

Why the license is the first decider

The license name determines whether the code can be taken at all. An open license permits taking with attribution, and a strong open license with a network clause prohibits turning its code into a closed service. One engine from the list (Honcho) was under such a network license, and it was immediately removed, before any analysis of its structure.

22Main conclusion: we need integration, not invention

An analysis of over forty engines (including those found at different addresses) yields an unexpected result: almost all the necessary memory layers are already implemented, but in four different places that are unaware of each other. Agent profile memory is stored as flat text, agent memory on the platform is stored in sections, pod knowledge is stored as records with attestations, and memory snapshots are stored separately. They are read in three different ways.

This means that ninety percent of the work is not about taking someone else's engine, but about consolidating our own into one and building what neither we nor they have.

FACTS INTO VECTORS Mem0, Supermemory, GoodMem TEMPORAL GRAPH Graphiti, Zep, Cognee AGENT SELF-CORRECTION Letta, A-MEM, Nemori HYBRID SEARCH Hindsight, HippoRAG MEMORY IN ITS OWN DATABASE Memori, Redis, MemMachine READABLE BY FILES Mnemosyne, LongMemory, MemU PLATFORM, NOT ENGINE Cognee, MemOS, MemoryOS, MIRIX NETWORK LICENSE Honcho: removed immediately WHAT EACH GROUP MEANS Vector: fast, but without time Graph: answers "when true" Files: visible to a human Own database: under our control Diagram 2. Six ways to store memory. We need three of them: time graph, readable files, and our own database.

What this changes in our work

We are not assembling a Frankenstein from eight foreign repositories. We are building our own memory layer and taking exactly three techniques from foreign engines, each with attribution and a fixed version.

33What we already have: nine ready layers

The sixth parsing stream read not foreign engines, but our own code. Result: our memory is implemented more broadly than we ourselves thought about it. Below are nine layers that already exist, with their location in the code and what each does.

LayerWhere it liesWhat it does
Record storageAgent memory, pod knowledge, memory snapshotsThree storages are already writing memory: agent's long-term memory partitions, pod knowledge with evidence, agent snapshots
OriginPod knowledge, team memory, agent's deskKnowledge has an author, author type, quote, and source; a desk step has a signed string in the chain
Truth and its changePod knowledge, team knowledgeAn assertion has a state: accepted, disputed, revoked; there is a human decision and a pointer to a replacement
Versions and differencesPod knowledge, agent memory, snapshotsRevocation requires naming a replacement; a snapshot is deduplicated by content
Selective disclosureAgent passport formatThe passport carries pointers and hashes, not the memory itself; the content remains with the owner
ReceiptsAgent's desk, pod receipts, passportEach step of the desk yields a signed string in the chain; pods exchange mutually signed receipts
Curatorship and intake supervisionIntake supervision of memory, knowledgeA note with signs of an external team is not allowed into the pod's memory; a human resolves the dispute
SearchVector search, knowledge extraction, snapshot searchVector search by memory sections plus traversal of connections by knowledge
Memory per agentAgent memory, snapshots, profile memoryEverything is keyed by agent name and installation number

The most valuable section of such a document is "done, but never sold"

Of the nine layers, we show approximately one externally. We already have record provenance, truth change, signed receipts, and selective disclosure. All of this is already built and almost entirely unnamed in the product.

44What's missing: eight layers

The missing layers are the real challenge. All eight are not new inventions, but rather combinations and additions to what already exists.

1One storage instead of four
2Provenance for flat memory
3The question "what we considered true then"
4Edit history and differences
What is missingWhy it is needed
One storage and one searchProfile memory is flat, agent memory is in sections, pod knowledge is in records, snapshots are separate. One query across all four is impossible.
Provenance for flat memoryFlat text without author, time, or source. There's no way to answer the question "where did this come from."
Separation of truth time and record timeThe current state exists, but "what we considered true last month" does not.
Edit history and differencesA modified record cannot be shown to a person as a set of changes.
Partial disclosure to recipientThe passport provides pointers and hashes, but there's no way to open selected records to the named recipient while hiding the rest.
Receipt of memory recordTable steps are signed, but "agent recorded such memory with such origin" is not.
Fading and importance evaluationCuration is manual only. Without fading, memory grows silently, and outdated information lies alongside correct information.
Cross-storage searchEach storage is searched in its own way; there is no common scope field.

Order of importance

Storage consolidation and record origin come first, because without them, there's nothing to show the person. Fading and record receipts follow. Model-based extraction comes last, because measurements show it might not help.

55License gates: what can be taken at all

Before any device analysis, the question arises whether the code can be taken. The check was done by reading the license file in the repository, not by an icon on the page: for three engines, the icon said "undefined," but the file contained a permissive license, and two of them would have been mistakenly removed.

EngineLicense by fileCan be taken
Mem0Apache 2.0yes
GraphitiApache 2.0yes
LettaApache 2.0yes
CogneeApache 2.0yes
MnemosyneMITyes
HippoRAG 2MITyes
A-MEMMITyes
NemoriMITyes
LangMemMITyes
MemobaseApache 2.0yes
MemOSApache 2.0yes
MIRIXApache 2.0yes
MemoryOSApache 2.0yes
MemMachineApache 2.0yes
MemoriApache 2.0 (icon was wrong)yes
MemUApache 2.0 (icon was wrong)yes
Redis Agent MemoryApache 2.0 (icon was wrong)yes
LongMemory / OpenMemoryApache 2.0yes
HonchoNetwork licenseno
Zep (cloud)Engine is closedno
MnemoverseNo code, cloud onlyno

Honest limit of license verification

A permissive license allows taking code, but does not remove the obligation to attribute the author and preserve the license text. Three engines marked "undefined" have been verified by reading the file, but two of them have two license files for different parts in their repository, and during versioning, the boundaries will need to be clarified by files, not by the entire repository.

66Decision matrix: take, option, or reject

Each engine was given a verdict based on one rule: we take what is either absent from us, or absent from everyone and at the same time small in volume and clear in structure. The cost of implementation is measured not by the size of the repository, but by the number of third-party services that will have to be deployed alongside it.

VerdictEngineWhat exactly it providesImplementation cost
takeGraphitiTime scheme: a segment of truth and separately recording time, cancellation of an old fact by a new oneMedium: we take the scheme and rules, not the service
takeMnemosyneCore on readable files, intake supervision, fading, reversible mergingLow: already cloned, works without dependencies
takeA-MEMLinking notes and rewriting neighbors: memory evolves, it doesn't accumulateLow: library with model and storage
optionMem0Technique for extracting facts from a conversation with addition and linkingMedium: requires a model, vectors, storage
optionLangMemTechnique to compare, update, merge, remove excess: directly in the query textMedium: pulls its own stack along with it
optionHippoRAG 2Graph traversal by importance for multi-step questionsLow: the technique is rewritten on our graph
optionLongMemoryStrongest model of time and fading (hot, warm, cold)High: only in a different programming language
optionMemUMemory mirror with readable files on top of its own databaseMedium: requires a model and an embedding service
optionCognee, MemOS, Memobase, Nemori, LettaIndividual techniques: timestamping in a record, merging, distillation, self-editingMedium and high
RejectionHonchoNetwork license: would shut down our serviceIllegal for us
RejectionZep (cloud), MnemoverseEngine is not open sourceImpossible
RejectionMIRIX, MemMachine, MemoryOS, Redis Agent Memory, MemoriHeavy platforms or services without their own extraction logicHigh without the necessary return
RejectionMemary, Mem++, Dory, OffTheWall, Chamnan, LWC, PulsePathNot found at the specified addressesNo subject

Pay attention to the asymmetry: all three "take" items are small, understandable pieces. All "rejection" items are either heavy platforms or lack of code. This is the true result of the analysis: we don't need large engines not because they are bad, but because we don't want to drag three foreign databases for memory.

77Time of Truth: The Only Engine That Does This

Out of six temporal layer engines, only one truly cancels an old fact with a new one. Its edges have not one time, but two: when the fact was true and when we learned about it. Plus a separate mark for when the fact ceased to be true, and a separate record node indicating where the fact came from.

time of truth (when the fact was true) fact A is true: valid until canceled canceled: validity period closed new fact B cancels A record time (when we learned it) first record cancellation record time is not erased Scheme 3. Two times for one fact: when it was true and when we learned about it. There is no erasure, only segment closure.

Field names in this engine's scheme: validity start, validity end, expiration time, creation time, reference time, and list of episode records. Upon cancellation, the system returns a list of canceled facts and closes the old fact's validity period with a new start. This is precisely the behavior Marina requested when she said memory is dynamic.

Why we take the scheme, not the service

The engine itself requires an external graph database, and one of its lightweight variants requires a newer language version than we have. But the device itself is small: a few fields and one rule. Therefore, we take the scheme and the rule, and store it in our own database, where everything is already present.

Side finding

No other engine on the list has a true cancellation of an old fact by a new one. One has timestamps within the record, another has version overwrites, and the rest have no time at all. This makes the time scheme the most valuable single thing on the entire list.

88Fact Extraction: Strong Techniques and a Warning Signal

Two engines provide the most portable extraction technique, and both keep it in the model's prompt text, not in deeply buried code.

Mem0: Seven Steps

It gathers context, searches for similar records, extracts facts with a single model query and links them to already known ones, then calculates fingerprints to filter out duplicates and saves them in a batch. The decision to add, update, or remove is given to the model directly in the prompt text.

LangMem: Compare and Merge

The prompt text directly asks the model to compare with existing memory, update, merge duplicates, and remove unnecessary information. There are separate toggles for insertion, update, and deletion, and unnecessary information is filtered out in its own step.

The Limit of This Technique, Named by the Engine Itself

In the newest version of the pipeline, the ability to update and delete has been removed: it only adds and links. This means it does not distinguish between duplicates and outdated information, and accumulates memory. This sign of weakness is directly acknowledged by the developer, and we take this into account.

For other engines, this layer was either closed in the cloud, tied to its own database schema, or completely absent. The memory service on Redis does not extract facts at all: it expects the caller to bring them.

99Independent Measurements: Extraction Can Be Worse Than Simple Search

This is the most important and most inconvenient finding of the analysis. When we compiled memory accuracy measurements across systems, it turned out that almost all of them were made by the system authors themselves, and rare independent measurements yield numbers several times smaller.

One Test, One Engine, Two Numbers 94.4 percent: vendor's own measurement 49.0 percent: independent measurement vendor third party Model extraction vs. regular search by raw utterances agent memory: 42 percent regular search: 47-50 percent Scheme 4. The same test: vendor's measurement is almost twice as high as independent; model extraction loses to regular search by utterances.
SystemTestNumberWho measured
Mem0Long-term memory94.4Vendor itself
Mem0Long-term memory49.0Independently
Agent's memory about itselfLong-term memory42 vs. 47 for regular searchIndependently
Verbatim replies instead of extractionLong-term memoryno worse than extractionIndependently
MemOSLong-term memory89.2Vendor itself
SupermemoryLong-term memory97 hits out of 20Vendor itself
NemoriConversational0.83Vendor itself
A-MEMConversational35.94 (another metric)The author himself
MIRIXConversational85.4The author himself
LettaConversational74.0The author himself

The main risk this creates

If we build a fact-extraction memory with a model and trust vendor numbers, we might get a system that is twice as accurate on paper but worse than a regular search in practice. Therefore, extraction is the last thing in our toolkit and only after our own measurement on our battery of tasks.

A separate pitfall is that numbers from different systems simply cannot be compared: one metric counts exact answers, another evaluates the answer with a model, and a third counts hits. The numbers in the table are placed side-by-side only to show the spread, not to pick a winner. You cannot choose based on someone else's numbers at all.

1010Local core: readable files, oversight, and decay

The requirement that "a person must understand what is being shared without rereading hundreds of entries" is met in only one way: memory must be visible. Of all the engines, one stores memory as ordinary text files with a header, which can be opened by any editor, and at the same time requires no external dependencies.

FILES note A.md note B.md note C.md title and links INDEX search by words plus fading plus area priority SUPERVISION source needed deadline needed cap on archive FADING fades weak back Scheme 5. Files, index, intake supervision, fading. Everything is human-readable and works offline.

This core has already been verified live, not just by description. The search returned the desired note with a score of 8.16. The strength of the entry increased from 1.25 to 1.50 after accessing it: fading works both ways, important things strengthen, forgotten things weaken. Intake supervision flagged an error for a note without a source, and an attempt to write over someone else's version was rejected.

Why this is a core, not an add-on

Files provide what no database does: a person can open memory and see it with their own eyes. This is precisely what understandable output and the delta of changes, i.e., our distinction, are built upon. A database never provides this.

1212What we rejected and why: an honest analysis of failures

A rejection is also a result, and its reason is more important than the solution. Below are the reasons for each rejected group, so as not to start the analysis again in six months.

RejectedReason for rejectionWhat we are still taking from it
HonchoA network license would turn our closed service into an obligation to open source the codeNothing
Zep (cloud)The engine is closed, only examples and markup are open sourceIndirectly: its time scheme lives in Graphiti
MnemoverseNo code, only cloud via protocolNothing
MIRIXSix types of memory on top of someone else's agent launch, heavy platformThe idea of separating memory types
MemMachineRequires three external databases at onceNothing
MemoryOSMemory by duration levels without a graph and without time: nothing to transfer, only rewriteNothing
Redis Agent MemoryDoes not extract facts itself, awaits them from the caller; no readable fileThe request form
MemoriExtraction logic went to the cloud, local path not described; our initialization did not reproduceNothing
LettaAn entire agent launch for memory; no development, repository became historicalThe idea of three types of memory: core, archive, recall
NemoriDistillation requires two external databases and asynchronous model launch; writing is heavier than use.The idea of an importance threshold
Cognee, MemOSHeavy platforms around a small coreThe format for time-stamping and version merging

A rule worth remembering

We reject not due to engine weakness, but due to implementation cost. For an engine with three external databases, we prefer an approach that can be rewritten in our code in a day. This rule saves months of support and removes the risk of an external failure becoming our own.

1313Memory robustness: why origin and oversight are even necessary

Memory is not only convenience, but also an attack surface. Analysis of primary sources yielded measurements from which it follows that without origin, oversight, and signatures, memory is dangerous.

EXTERNAL TEXTin the response line RECORDis stored in memory SUBSEQUENT SESSIONSmanages the agent 50 percentattack success The attacker only needs to make the agent record a string once. Further participation is not required. Scheme 6. Memory poisoning: a single foreign string, written into memory, continues to act without the attacker.
What was measuredNumberSource
Attack success via poisoned memory50.46 percent on average across two agentsMemory Poisoning Research, 2026
Injection via a single query, without write accessconfirmedSeparate work on injection via query, 2025
Quality degradation with long history30-60 percentLong Memory Measurement, 2024
Accuracy on a single factual conflict60 percentMemory Conflict Measurement, 2025
Accuracy on multi-step conflictnot higher than 7 percentSame measurement
Context violation with long memoryup to 69 percent, grows with the number of tasksContext Integrity Analysis, 2025
Quality degradation on long workminus 24.9 percent by 600 interactionsAgent Drift Analysis, 2026

What follows from this for the device

Inlet supervision before writing is mandatory; we already have it. Origin for each record is mandatory, otherwise a poisoned record cannot be distinguished from one's own. A signature on the record to memory is mandatory, because it allows showing a third party what came from where. These three things are not conveniences, but a condition for memory to have any meaning at all.

1515Architecture of a single memory: five layers

From the entire analysis, one picture emerges. Memory is not an engine, but five layers, three of which we already have, one we take as a scheme, and one we take as a technique.

1. RAW EPISODESthe entire conversation, with origin and time. The basis of truth. 2. TIME OF TRUTHthe segment “when true” and separately “when learned”. A scheme from Graphiti. 3. CONNECTIONS AND NOTESreadable files, connections, rewriting neighbors. The core of Mnemosyne, A-MEM technique. 4. OVERSIGHT AND INTAKEfiltering out foreign commands, mandatory source, decay. Already with us. 5. COMPREHENSIBLE OUTPUTdelta of changes, partial disclosure, receipt. Only with us. Scheme 7. Five layers of a single memory. The third and fifth are what no one has but us.

The order of the layers is also the order of operation. First one type of storage, then time, then connections, then oversight, then output. Model extraction is not included in this scheme at all: it connects as an optional add-on over the second layer and only by measurement.

episode→ intake and supervision→ record with source→ time segment→ connections→ issuance with receipt

1616Why the foundation is raw episodes, and extraction is just a superstructure

Independent measurements are designed to make us overturn the usual scheme. It is customary to think that memory is what the model extracted and compressed. Measurements show that compression can worsen answers: precise search through raw replicas turned out to be no worse, and in some places better than extraction, and loses only to the full context, which does not fit into memory.

How it's usually done

The conversation is compressed by the model into facts. Raw replicas are discarded. Memory is a set of conclusions, the origin is lost.

How we do it

The raw episode is stored entirely as the foundation of truth. Extraction is placed on top as an index for speed. In case of discrepancy, the conclusion always loses to the source.

This arrangement yields three consequences at once. First: the answer can always be traced back to where it came from, meaning the origin does not need to be restored; it exists by design. Second: if the extraction made a mistake, it can be recalculated anew from the raw episode, rather than losing data. Third: the battery of tasks measures the utility of extraction honestly, because there is something to compare it with.

Why this doesn't make it more expensive

Raw episodes are cheaper than they seem: they already exist as messages and events. Extraction adds an index on top of them, rather than replacing the storage. We pay for a second representation, not for a second storage of truth.

1717Final set for versioning

Following the analysis, a short list goes to versioning. Each line indicates how it is taken: entirely as a library, as a schema with attribution, or as a technique rewritten by hand.

What we takeIn what formWhy exactly this way
MnemosyneAs a library, with a fixed versionCore of readable notes with supervision and decay, without dependencies, already works
GraphitiAs a schema and rule, with attributionTwo-time fact cancellation is several fields and one rule; no service is needed
A-MEMAs a library, with a fixed versionConnections and rewriting neighbors, minimal stack, fits into our core
Mem0Extraction technique as an optionConnects last and only by its own measurement
HippoRAG 2, LongMemory, Nemori, Cognee, MemOSTechniques for when neededWe keep the description, we don't pull the code until measurement requires it

Three files of mandatory accounting

Along with the acquired code, the following are included: a list of acquired parts with their license and what exactly was acquired; the text of each license; a separate folder for our edits, so that external files remain untouched. Without these three things, external code cannot be acquired.

1818Step-by-step work plan

The order is determined by dependencies: until repositories are merged, there's nothing to show for origin and delta; until there's a time of truth, one cannot answer "what was considered true then."

Step 1, Week 1

Merge four repositories into one scope field and one search path. Reading first, writing remains where it is.

Step 2, Week 2

Origin for flat memory: for each record, author, time, source. Without this step, one cannot proceed.

Step 3, Weeks 2-3

Time of truth: the segment "when true" and separately "when learned," closing an old fact with a new one. Scheme from Graphiti.

Step 4, Week 3

Core of readable notes with oversight and decay, connections and rewriting neighbors.

Step 5, Week 4

Output: delta of changes since the last agreement, partial disclosure to the named recipient, receipt of issuance.

Step 6, Week 5

Battery of memory tasks and measurement. Extraction is connected only if it shows benefit on top of raw episodes.

4Consolidate storage into one
3We take the reception from other engines
8our own missing layers
1A distinction no one else has: clear output

Task battery, one for all engines

Add a fact. Change a fact and check if the old one is gone. Ask "when was this true". Ask based on a retelling. Find out the origin of a record. Erase and check that it was erased and didn't resurface. Measure the volume. The same battery for raw episodes, for the note kernel, and for extraction, so that the numbers are comparable.

1919Risks and honest limits

The analysis provided a clear picture, but it has boundaries, and they must be stated aloud.

Limit one: external numbers

All accuracy measurements, except for two independent ones, were made by the system authors. Vendor publications differ by a factor of two on the same test. These numbers cannot be used to choose an engine, and we do not use them for selection.

Limit two: external breakage

Each part taken is an external breakage upon update. Therefore, we take three small parts, not eight large ones, and keep our edits separate from external files.

Limit three: the output task has not been solved by anyone, and this is a risk

The fact that no one has clear output is both an opportunity and a risk: there is no ready-made sample, we will have to pave the way ourselves, and some solutions will turn out to be incorrect.

Separately: we checked the kernel on readable files live, but extraction by the model was not confirmed live. This is not an excuse, but an honest status: for one engine we know the behavior, for the other we only know that the installation did not reproduce.

Implementation cost by parts

Mnemosyne: low
A-MEM: low to medium
Time scheme: medium
Mem0 extraction: medium, by measurement only

2020Completeness check: each statement and its outcome

The analysis was conducted based on the list of engines and the questions that arose during the process. Below is each statement with the outcome of the check.

What was statedWhere checkedOutcome
All engines from the submitted list existChecking addresses via APIRefuted: 25 exist, 7 links lead nowhere
Three engines under different ownersSearch by repositoriesConfirmed: Mnemosyne, Mnemoverse, GoodMem found at other addresses
Zep opened as an engineReading open repositoryRefuted: only Graphiti is open
All permissive licensesReading license filesPartially: one engine under network license and removed
The present truth is with severalReading engine schemasRefuted: only with one
For us, memory is one placeReading our codeRefuted: four storages, nine layers already exist
Understandable output solved by someoneProduct searchDisproven: not solved anywhere
Model-based retrieval improves memoryIndependent measurementsNot confirmed, in some places worse than regular search
Memory is secure by defaultMeasurements of poisoning and conflictsDisproven: supervision, origin, and signature are needed
License resolves firstAnalysis progressConfirmed: one engine removed before device disassembly

Three things remained unchecked, and this is fair: a direct measurement of consent request frequency specifically for memory does not exist; an independent measurement of the conversational task for four engines is unavailable; the behavior of model-based retrieval has not been reproduced live by us.

2121Numbers on which the conclusion is based

All numbers in this analysis are taken from primary sources and signed with their origin. Not a single one is retold from a review.

Memory layers implemented by us 9 out of 17 needed Layers need to be built up 8 out of 17 We take from other engines (out of 32 checked) 3 parts we don't take the other 29 Scheme 8. Out of thirty-two engines, three are needed. Out of seventeen layers, nine are already ours.
NumberWhich means
32 checked, 25 existSeven links from the provided list lead nowhere
17 needed layers: 9 exist, 8 do notThe work is about linking and adding, not building from scratch
We take 3 parts out of 32Big engines are not needed, small understandable pieces are needed
94.4 versus 49.0Vendor measurement versus independent measurement on the same test, a twofold difference
42 versus 47-50Model-based extraction loses to regular utterance search
50.46 percentAttack success via poisoned memory
not higher than 7 percentAccuracy on multi-step fact conflict
1.25 → 1.50Live-tested: record strength increases with access
8.16Live-tested: evaluation of found note in core
0Products with a common receipt of "what left memory"

2222The same thing in simple words

If you remove all terms, the conclusion sounds like this.

We wanted to assemble one large memory from ready-made parts from others. When we truly disassembled them, it turned out that almost everything we needed was already built by us: memory already exists, the origin of records already exists, signatures and receipts already exist, filtering out external commands already exists. It's just that all of this is in four different places and not shown externally. This means the main work is not to "assemble external parts," but to "consolidate our own into one and display it."

We found exactly three things in external engines that we don't have: a way to store two times for each fact (when it was true and when we learned about it), a way to link notes so that memory evolves, and, as a possible addition, a way to extract facts from a conversation using a model.

And most importantly. When we looked at honest, non-promotional measurements, it turned out that extracting facts with a model can make memory worse, not better. Therefore, we build memory entirely on raw conversations, and fact extraction is placed on top and enabled only if our own measurement shows a benefit.

We already have what no one else has: human-understandable memory output with a receipt. The rest can be taken ready-made.

analysis conclusion

2323Primary sources

The analysis is based on scientific papers, official pages, and open repositories. Below are those referenced in the text.

SubjectSource
Agent Memory PoisoningResearch on Agent Memory Poisoning, 2026
Memory Injection via Single QueryWork on Query-Based Injection, 2025
Long-Term Memory and Its DeclineMeasuring Long-Term Memory of Conversational Assistants, 2024
Controversial Facts in MemoryMeasuring Memory on Gradual Multi-Step Interactions, 2025
Context Integrity with Long-Term MemoryAnalysis of Long-Term Memory Context Integrity, 2025
Agent DriftAnalysis of Behavioral Drift in Multi-Agent Systems, 2026
Verbatim Replicas vs. RetrievalWork on raw replica selection, 2026
Time schemeGraphiti open repository, reading edge schema
Readable kernelMnemosyne open repository, code reading and live run
Connections and note evolutionA-MEM open repository and its work, 2025
Fact extractionMem0 and LangMem open repositories, query reading
Vendor measurementsMem0 and MemOS measurement pages, accessed November 2, 2026
Independent measurementAnalysis of Mem0 and Letta comparison, third party, 2026

Separately: the analysis of our own code involved reading agent memory files, pod knowledge, pod receipts, agent table, and passport format. None of this changed.

2424One-page output

What we do

We are completing our memory: one storage instead of four, provenance for each record, two times of truth, edit history with differences, partial delivery with receipt. We take exactly three parts from others: the time schema from Graphiti, the readable core from Mnemosyne, and connections from A-MEM. Fact extraction by the model remains an option for measurement.

Why this way, and not otherwise

Because nine out of seventeen necessary layers we already have, and thirty-two engines provide only three missing pieces. Because honest measurements show that extraction can worsen memory. And because the only part that no one in the world has, human-understandable memory output, is already halfway ours.

What is needed from a person

Confirm a short list for versioning: Mnemosyne, Graphiti time schema, A-MEM, and Mem0 extraction as an option. After confirmation, we fix the selected repositories with pinned versions, each with its own license and list of taken parts, and begin with the step of consolidating four storages into one.

Analysis completed. The rejection of large platforms was accepted not due to weakness, but due to support cost: three small understandable parts instead of eight large foreign databases. The real work begins where no one has done it: in human-understandable memory output.