Key takeaways
- One person's agents keep separate memories: what Claude learns is invisible to Cursor, and both are invisible to the agents your team shipped.
- MCP already solves the plumbing — any client can reach the same memory server. Sharing memory is the easy half.
- Memory should be bound to the signed-in identity, not passed as a tool argument. An argument an agent can set is an argument an agent can set wrong.
- Organizational context needs a directory of shared corpora: route on human-authored metadata first, then search inside the one corpus that matched.
- Filtering after the match is not access control, and tombstoning a vector is not deletion — both are consequences of renting someone else's storage.
- Because Axon is our own engine, scope can be applied during matching and erasure can propagate through the HNSW index rather than around it.
- Honest status: the engine is shipped and running our own memory today; the governance tier — Corpus — is being built now, and there is still no clustering.
Four agents, four memories, none of them shared
Look at one engineer's actual week. Claude for thinking a problem through and drafting the write-up. Claude Code or Cursor in the editor all afternoon. ChatGPT for a research detour into a vendor's API. And, increasingly, the agents their own company built — the one that triages incidents, the one that answers questions about the product.
Every one of those remembers something. None of them remember the same thing.
So the preference you corrected on Monday — we don't use that library any more, here's what we use instead — is known to exactly one of them. The architecture decision your internal agent captured in an incident review is invisible to the assistant you ask about it on Friday. The context your team pays to build, one careful correction at a time, is scattered across four products that cannot see each other.
The fix is easy to describe: one memory, behind all of them. The reason it isn't already everywhere isn't the plumbing. It's the second half of the sentence — the moment a single memory serves every agent and every person in a company, you have built a system whose defining requirement is who is allowed to see what.
Connecting every agent to one memory is a weekend of protocol work. Governing it is the product.
The easy half: one memory, reached over MCP
Since the Model Context Protocol became the common plug, this part stopped being interesting in a good way. Any compliant client — Claude, Claude Code, ChatGPT, Cursor, or an agent someone on your team wrote last month — can call the same memory server without a bespoke integration for each one.
The tool surface should stay small, because a large one is a surface agents get wrong: search the memory, ask it a question and get an assembled answer with the evidence attached, write facts back with the evidence that supports them, inspect the ontology when the agent needs to know what kinds of things the organization tracks.
Two properties matter more than the tool list.
Memory is bound to identity, not passed as an argument. None of the user-memory tools take a user, tenant or graph parameter. The target is fixed by whoever signed in, at connection time. That isn't a convention agents are politely asked to respect — it's the difference between a rule and a hope, because an argument an agent can set is an argument an agent can set wrong.
Both directions are the same memory. Context written from an assistant is read by the agents you build against the SDK, and what those agents learn is there the next time a person asks. There is no "assistant memory" and "agent memory" to reconcile later, because there was only ever one graph.
The hard half: the organization remembers too
Personal memory is only half of what an agent needs. The other half belongs to the company: product knowledge, customer history, incident history, the conventions that only exist because somebody got burned once.
That context doesn't live in any one person's memory — it lives in shared corpora. And an agent that can reach more than one of them needs a way to know which is which, without reading them all first.
So there's a directory: a catalog of the corpora a project holds, each with a stable identifier and a name and description a human wrote. We don't generate those descriptions from the contents. Routing metadata is exactly the kind of thing a person should be accountable for, and a summary inferred from a graph tends to describe what happens to be in it rather than what it's for.
The flow an agent follows is two steps, and it matters that they're separate. First it searches the directory — that search matches routing metadata only. Then it picks one corpus and searches inside it, and that search touches content. Discovery and retrieval are different operations with different blast radii, so they get different tools.
Absent, not denied
A corpus a person isn't entitled to reach doesn't appear in their directory results at all — not as a locked row, not as a count. "Access denied" is still an answer: it tells you the thing exists, who else has it, and roughly what it's called. Default-deny only means something if the excluded results are invisible rather than greyed out.
Why we're building this inside the engine
Here's the argument the whole product rests on.
Almost every memory layer in this category is composed from storage somebody else wrote — a hosted vector database, a graph database, a queue. That's a perfectly reasonable way to build a memory API, and it puts a hard ceiling on how well you can govern one, for two reasons.
Filtering after the match is not access control. Retrieval is a ranking operation over the whole index. If scope is applied to the result set afterwards, out-of-scope data has already voted: on which neighbours came back, on how they were ranked, on the counts, and on any summary assembled over them. The rows are gone from the response; their influence isn't. Enforcing scope during the match — as a predicate the planner pushes down into the index traversal — requires owning the planner and the index.
Deletion you can't propagate isn't deletion. Delete a source document from a typical memory stack and you've removed one row. The facts derived from it, the edges those facts support, the summaries compacted over them and — most stubbornly — the embeddings in the vector index all survive. No mainstream vector store offers provable removal of an embedded record; the honest description of what happens is that the vector is tombstoned and filtered at query time. That is a difference between "we no longer return it" and "it is gone", and only one of those two sentences is what a GDPR erasure request asks for.
We wrote our own graph database for reasons that were mostly about operational weight at the time. This turned out to be the more important consequence: because Axon owns the Cypher planner and the HNSW vector index sits in the engine rather than beside it, scope can be applied while matching, and erasure can propagate through the index instead of around it.
| The question | Composed on third-party stores | Enforced in the engine |
|---|---|---|
| Out-of-scope data in a result? | Yes — it is filtered after ranking | No — scope is a predicate applied during matching |
| Delete a source? | The row goes; derived facts and vectors remain | Deletion propagates to derived facts, summaries and vectors |
| Prove what was destroyed? | An application-level log, at best | A signed certificate naming what died with it |
| Where a claim came from? | Usually not modelled | Every fact links to the episode it was derived from |
| What was known, and when? | Timestamps on rows | Bi-temporal edges: when it was true, and when we learned it |
Scroll the table sideways on a narrow screen.
That is an architectural difference, not a feature gap — which is a useful thing to know in both directions. It's not something a competitor ships next quarter, and it's not something we can bolt onto the parts we didn't write.
Where this actually is
The category has a bad habit of describing the roadmap in the present tense, so here is the boring version.
The engine is not a prototype: it runs EdgeX11's own organizational memory every day, and the agents in this company read and write it through exactly the MCP path described above. The governance tier on top of it — the part this post is really about — is what we're building now, under the name Corpus. It isn't shipped. We'd rather write that sentence than let a launch post imply otherwise.
Why we're doing it in this order
Because the deadline is external. The EU AI Act reaches full application this month, and it brings record-keeping duties measured in years for systems that land in its high-risk categories. Those duties sit directly alongside the GDPR's right to erasure, and the two pull in opposite directions: keep a durable, inspectable record of what the system did and why — and, on request, remove one person's data from it.
You can only satisfy both if you can say precisely what was derived from what. Provenance stops being a nice property for debugging and becomes the mechanism that lets you delete a person without deleting the audit trail, and prove afterwards that you did.
Where we'd tell you not to use us
If you're building a consumer product with no regulatory exposure, the open memory libraries in this space are mature, better distributed and free. Use them — that's the right call, and we'd rather say it than sell you a governance layer you don't need. Come back when a security questionnaire stalls a deal.
What it adds up to
One memory across every agent is the visible half — the half your engineers feel immediately, when the thing they explained on Monday is still true on Friday no matter which window they're typing into.
The half that decides whether a company can actually deploy it is the one underneath: memory bound to an identity rather than a parameter, organizational context discoverable but scoped, policy applied while matching rather than after it, and deletion that propagates all the way down to the vectors and leaves a receipt.
That's not a feature you add to a memory API. It's a property of the database, which is why we're building one.
Common questions
Can one person's agent reach another person's memory?
No. The memory tools take no user, tenant or graph argument — the target is fixed by the identity that signed in, so a token cannot select somebody else's memory. Shared corpora are separate objects, reachable only where policy grants them.
Does this work with agents we already built ourselves?
Yes, and that's the point. An MCP client and an agent written against the SDK operate on the same graph in the same project, so context written through either path is served to both. There is no separate 'assistant memory' and 'agent memory'.
What actually gets written back?
Durable facts with the evidence behind them — decisions, corrections, conventions, procedures — not raw chat. Every derived fact links to the episode it came from, so you can always answer where a claim came from, and writes are only accepted where the connection permits them.
Is this available today?
The engine is. Axon runs our own organizational memory now: Cypher, bi-temporal facts, provenance, in-engine vector search and an MCP server, in one ~19 MB binary. The governance tier — access policy enforced during matching, propagating erasure with certificates, retention, legal hold and an append-only audit log — is what we are building, under the name Corpus. It is not shipped, and we'd rather say so than imply otherwise.
How is this different from Mem0, Zep or Letta?
They compose storage they did not write, so scoping happens after the match and deletion stops at the boundary of a vector index they don't control. We own the planner and the index, which lets policy run during matching and erasure propagate through storage. If you have no regulatory exposure, those tools are mature, well distributed and free — use them.
What is Corpus, and what is Axon?
Axon is the graph engine: Cypher, bi-temporal fact edges, provenance episodes and HNSW vector search in a single Go binary. Corpus is the governed memory product built on it — identity-bound user memory, shared organizational corpora, and the policy, erasure and audit layer around them.
Want to try governed memory early?
Corpus is being built now on top of Axon, the engine already running EdgeX11's organizational memory. If you are shipping agents into a regulated environment — or your security review has stalled on where the memory lives — we'd like to hear what you need from it.
Talk to us