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.
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.
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.
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.
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.
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.
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.
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.
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.
| Layer | Where it lies | What it does |
|---|---|---|
| Record storage | Agent memory, pod knowledge, memory snapshots | Three storages are already writing memory: agent's long-term memory partitions, pod knowledge with evidence, agent snapshots |
| Origin | Pod knowledge, team memory, agent's desk | Knowledge has an author, author type, quote, and source; a desk step has a signed string in the chain |
| Truth and its change | Pod knowledge, team knowledge | An assertion has a state: accepted, disputed, revoked; there is a human decision and a pointer to a replacement |
| Versions and differences | Pod knowledge, agent memory, snapshots | Revocation requires naming a replacement; a snapshot is deduplicated by content |
| Selective disclosure | Agent passport format | The passport carries pointers and hashes, not the memory itself; the content remains with the owner |
| Receipts | Agent's desk, pod receipts, passport | Each step of the desk yields a signed string in the chain; pods exchange mutually signed receipts |
| Curatorship and intake supervision | Intake supervision of memory, knowledge | A note with signs of an external team is not allowed into the pod's memory; a human resolves the dispute |
| Search | Vector search, knowledge extraction, snapshot search | Vector search by memory sections plus traversal of connections by knowledge |
| Memory per agent | Agent memory, snapshots, profile memory | Everything is keyed by agent name and installation number |
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.
The missing layers are the real challenge. All eight are not new inventions, but rather combinations and additions to what already exists.
| What is missing | Why it is needed |
|---|---|
| One storage and one search | Profile 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 memory | Flat 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 time | The current state exists, but "what we considered true last month" does not. |
| Edit history and differences | A modified record cannot be shown to a person as a set of changes. |
| Partial disclosure to recipient | The 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 record | Table steps are signed, but "agent recorded such memory with such origin" is not. |
| Fading and importance evaluation | Curation is manual only. Without fading, memory grows silently, and outdated information lies alongside correct information. |
| Cross-storage search | Each storage is searched in its own way; there is no common scope field. |
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.
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.
| Engine | License by file | Can be taken |
|---|---|---|
| Mem0 | Apache 2.0 | yes |
| Graphiti | Apache 2.0 | yes |
| Letta | Apache 2.0 | yes |
| Cognee | Apache 2.0 | yes |
| Mnemosyne | MIT | yes |
| HippoRAG 2 | MIT | yes |
| A-MEM | MIT | yes |
| Nemori | MIT | yes |
| LangMem | MIT | yes |
| Memobase | Apache 2.0 | yes |
| MemOS | Apache 2.0 | yes |
| MIRIX | Apache 2.0 | yes |
| MemoryOS | Apache 2.0 | yes |
| MemMachine | Apache 2.0 | yes |
| Memori | Apache 2.0 (icon was wrong) | yes |
| MemU | Apache 2.0 (icon was wrong) | yes |
| Redis Agent Memory | Apache 2.0 (icon was wrong) | yes |
| LongMemory / OpenMemory | Apache 2.0 | yes |
| Honcho | Network license | no |
| Zep (cloud) | Engine is closed | no |
| Mnemoverse | No code, cloud only | no |
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.
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.
| Verdict | Engine | What exactly it provides | Implementation cost |
|---|---|---|---|
| take | Graphiti | Time scheme: a segment of truth and separately recording time, cancellation of an old fact by a new one | Medium: we take the scheme and rules, not the service |
| take | Mnemosyne | Core on readable files, intake supervision, fading, reversible merging | Low: already cloned, works without dependencies |
| take | A-MEM | Linking notes and rewriting neighbors: memory evolves, it doesn't accumulate | Low: library with model and storage |
| option | Mem0 | Technique for extracting facts from a conversation with addition and linking | Medium: requires a model, vectors, storage |
| option | LangMem | Technique to compare, update, merge, remove excess: directly in the query text | Medium: pulls its own stack along with it |
| option | HippoRAG 2 | Graph traversal by importance for multi-step questions | Low: the technique is rewritten on our graph |
| option | LongMemory | Strongest model of time and fading (hot, warm, cold) | High: only in a different programming language |
| option | MemU | Memory mirror with readable files on top of its own database | Medium: requires a model and an embedding service |
| option | Cognee, MemOS, Memobase, Nemori, Letta | Individual techniques: timestamping in a record, merging, distillation, self-editing | Medium and high |
| Rejection | Honcho | Network license: would shut down our service | Illegal for us |
| Rejection | Zep (cloud), Mnemoverse | Engine is not open source | Impossible |
| Rejection | MIRIX, MemMachine, MemoryOS, Redis Agent Memory, Memori | Heavy platforms or services without their own extraction logic | High without the necessary return |
| Rejection | Memary, Mem++, Dory, OffTheWall, Chamnan, LWC, PulsePath | Not found at the specified addresses | No 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.
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.
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.
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.
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.
Two engines provide the most portable extraction technique, and both keep it in the model's prompt text, not in deeply buried code.
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.
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.
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.
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.
| System | Test | Number | Who measured |
|---|---|---|---|
| Mem0 | Long-term memory | 94.4 | Vendor itself |
| Mem0 | Long-term memory | 49.0 | Independently |
| Agent's memory about itself | Long-term memory | 42 vs. 47 for regular search | Independently |
| Verbatim replies instead of extraction | Long-term memory | no worse than extraction | Independently |
| MemOS | Long-term memory | 89.2 | Vendor itself |
| Supermemory | Long-term memory | 97 hits out of 20 | Vendor itself |
| Nemori | Conversational | 0.83 | Vendor itself |
| A-MEM | Conversational | 35.94 (another metric) | The author himself |
| MIRIX | Conversational | 85.4 | The author himself |
| Letta | Conversational | 74.0 | The author himself |
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.
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.
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.
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.
Simply adding notes turns memory into a dump: similar facts are duplicated, opposing ones lie next to each other. One engine solves this with a technique borrowed from paper card catalogs: a new note doesn't just settle, it seeks out related ones and rewrites them.
Two steps here are key: generating connections and evolving memory. The author's own testing shows that disabling these two steps significantly degrades the quality of answers to multi-step and open-ended questions. That is, the value lies in the connections, not in the notes themselves.
We take the technique of connection and rewriting itself; it's small in volume. We don't take an entire agent launch because we already have two of our own. This technique layers on top of our note core and transforms static memory into growing memory.
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.
| Rejected | Reason for rejection | What we are still taking from it |
|---|---|---|
| Honcho | A network license would turn our closed service into an obligation to open source the code | Nothing |
| Zep (cloud) | The engine is closed, only examples and markup are open source | Indirectly: its time scheme lives in Graphiti |
| Mnemoverse | No code, only cloud via protocol | Nothing |
| MIRIX | Six types of memory on top of someone else's agent launch, heavy platform | The idea of separating memory types |
| MemMachine | Requires three external databases at once | Nothing |
| MemoryOS | Memory by duration levels without a graph and without time: nothing to transfer, only rewrite | Nothing |
| Redis Agent Memory | Does not extract facts itself, awaits them from the caller; no readable file | The request form |
| Memori | Extraction logic went to the cloud, local path not described; our initialization did not reproduce | Nothing |
| Letta | An entire agent launch for memory; no development, repository became historical | The idea of three types of memory: core, archive, recall |
| Nemori | Distillation requires two external databases and asynchronous model launch; writing is heavier than use. | The idea of an importance threshold |
| Cognee, MemOS | Heavy platforms around a small core | The format for time-stamping and version merging |
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.
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.
| What was measured | Number | Source |
|---|---|---|
| Attack success via poisoned memory | 50.46 percent on average across two agents | Memory Poisoning Research, 2026 |
| Injection via a single query, without write access | confirmed | Separate work on injection via query, 2025 |
| Quality degradation with long history | 30-60 percent | Long Memory Measurement, 2024 |
| Accuracy on a single factual conflict | 60 percent | Memory Conflict Measurement, 2025 |
| Accuracy on multi-step conflict | not higher than 7 percent | Same measurement |
| Context violation with long memory | up to 69 percent, grows with the number of tasks | Context Integrity Analysis, 2025 |
| Quality degradation on long work | minus 24.9 percent by 600 interactions | Agent Drift Analysis, 2026 |
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.
A separate analysis stream searched the world for a solution to one human problem: for a person to understand what they are sharing without re-reading hundreds of records. There is no solution. The closest approaches are listed below, and each covers only a part.
| Product | What it does | What's missing |
|---|---|---|
| Dijin | Auditable access log, conflict resolution, set of proofs for each recall | No general receipt of "what went where" |
| ChatGPT | Under the answer, it shows from which chat, memory, or file the fact was taken | This is about the answer, not about memory output to the outside |
| Mem0 | It is directly admitted: the owner, editor, and reader models, like those of a table, are absent for memory, and "for most memory layers too" | Confirms that the problem has not been solved by anyone |
The strongest argument here is negative, and it comes from the memory vendor: memory does not have a human output model, neither for them nor for the majority. This means that "what you actually give away" is not an improvement of someone else's solution, but an unoccupied niche. We already have the building blocks for it: pointers and hashes in the passport, signed step receipts, intake supervision, and recall with replacement.
The numbers regarding consent are taken from the domain of web banners, not from memory: there is no direct measurement of memory. They show an order of magnitude, not an exact value, and in the document, they serve as an argument for the failure of the “notify and give choice” approach, not as our measurement.
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.
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.
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.
The conversation is compressed by the model into facts. Raw replicas are discarded. Memory is a set of conclusions, the origin is lost.
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.
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.
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 take | In what form | Why exactly this way |
|---|---|---|
| Mnemosyne | As a library, with a fixed version | Core of readable notes with supervision and decay, without dependencies, already works |
| Graphiti | As a schema and rule, with attribution | Two-time fact cancellation is several fields and one rule; no service is needed |
| A-MEM | As a library, with a fixed version | Connections and rewriting neighbors, minimal stack, fits into our core |
| Mem0 | Extraction technique as an option | Connects last and only by its own measurement |
| HippoRAG 2, LongMemory, Nemori, Cognee, MemOS | Techniques for when needed | We keep the description, we don't pull the code until measurement requires it |
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.
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."
Merge four repositories into one scope field and one search path. Reading first, writing remains where it is.
Origin for flat memory: for each record, author, time, source. Without this step, one cannot proceed.
Time of truth: the segment "when true" and separately "when learned," closing an old fact with a new one. Scheme from Graphiti.
Core of readable notes with oversight and decay, connections and rewriting neighbors.
Output: delta of changes since the last agreement, partial disclosure to the named recipient, receipt of issuance.
Battery of memory tasks and measurement. Extraction is connected only if it shows benefit on top of raw episodes.
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.
The analysis provided a clear picture, but it has boundaries, and they must be stated aloud.
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.
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.
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.
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 stated | Where checked | Outcome |
|---|---|---|
| All engines from the submitted list exist | Checking addresses via API | Refuted: 25 exist, 7 links lead nowhere |
| Three engines under different owners | Search by repositories | Confirmed: Mnemosyne, Mnemoverse, GoodMem found at other addresses |
| Zep opened as an engine | Reading open repository | Refuted: only Graphiti is open |
| All permissive licenses | Reading license files | Partially: one engine under network license and removed |
| The present truth is with several | Reading engine schemas | Refuted: only with one |
| For us, memory is one place | Reading our code | Refuted: four storages, nine layers already exist |
| Understandable output solved by someone | Product search | Disproven: not solved anywhere |
| Model-based retrieval improves memory | Independent measurements | Not confirmed, in some places worse than regular search |
| Memory is secure by default | Measurements of poisoning and conflicts | Disproven: supervision, origin, and signature are needed |
| License resolves first | Analysis progress | Confirmed: 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.
All numbers in this analysis are taken from primary sources and signed with their origin. Not a single one is retold from a review.
| Number | Which means |
|---|---|
| 32 checked, 25 exist | Seven links from the provided list lead nowhere |
| 17 needed layers: 9 exist, 8 do not | The work is about linking and adding, not building from scratch |
| We take 3 parts out of 32 | Big engines are not needed, small understandable pieces are needed |
| 94.4 versus 49.0 | Vendor measurement versus independent measurement on the same test, a twofold difference |
| 42 versus 47-50 | Model-based extraction loses to regular utterance search |
| 50.46 percent | Attack success via poisoned memory |
| not higher than 7 percent | Accuracy on multi-step fact conflict |
| 1.25 → 1.50 | Live-tested: record strength increases with access |
| 8.16 | Live-tested: evaluation of found note in core |
| 0 | Products with a common receipt of "what left memory" |
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 conclusionThe analysis is based on scientific papers, official pages, and open repositories. Below are those referenced in the text.
| Subject | Source |
|---|---|
| Agent Memory Poisoning | Research on Agent Memory Poisoning, 2026 |
| Memory Injection via Single Query | Work on Query-Based Injection, 2025 |
| Long-Term Memory and Its Decline | Measuring Long-Term Memory of Conversational Assistants, 2024 |
| Controversial Facts in Memory | Measuring Memory on Gradual Multi-Step Interactions, 2025 |
| Context Integrity with Long-Term Memory | Analysis of Long-Term Memory Context Integrity, 2025 |
| Agent Drift | Analysis of Behavioral Drift in Multi-Agent Systems, 2026 |
| Verbatim Replicas vs. Retrieval | Work on raw replica selection, 2026 |
| Time scheme | Graphiti open repository, reading edge schema |
| Readable kernel | Mnemosyne open repository, code reading and live run |
| Connections and note evolution | A-MEM open repository and its work, 2025 |
| Fact extraction | Mem0 and LangMem open repositories, query reading |
| Vendor measurements | Mem0 and MemOS measurement pages, accessed November 2, 2026 |
| Independent measurement | Analysis 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.
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.
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.
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.