Per-user memory your ops team can open and fix.
Most memory tools give you a retrieval API. MemexAI gives you a correction surface — per-tenant files your support team can inspect, edit, and audit without writing a single migration.
Memory that works in dev breaks trust in production.
When an AI agent behaves differently for two users, you need to understand why. The question you're actually asking is: what does the agent currently believe about this user?
With embedding-based memory, you can't answer that. You can query for similar entries, but you can't open a file and read what's stored. You can't see when a wrong fact was written, which tool call wrote it, or who has read it since.
Support escalations become guessing games. You know the agent said the wrong thing — but you can't tell whether it was a write failure, a retrieval miss, or retrieved-and-ignored. Fixing it means either prompting around the problem or nuking the user's memory and starting over.
At scale, this becomes an operational liability. You're shipping an AI product where the memory layer is invisible to the people responsible for keeping it working.
Tenant isolation is also non-trivial to get right. A filter on a shared vector index is not the same as physical isolation. An edge case in your userId filtering can leak one user's context into another's session — silently.
When you need to demonstrate data residency, explain what the agent knows about a user to a regulator, or just answer a support ticket, "it's in the vector index" is not an answer.
Memory as tenant-scoped files with a full audit trail.
Every user gets their own physical path namespace. Everything the agent learns is stored as structured files under users/{userId}/** — not a filtered view of a shared index.
What your agent sees
The agent calls memory_remember and memory_context. MemexAI resolves all paths relative to the current user. The agent never sees physical paths or other users' data — the isolation is structural, not filtered.
const memex = createMemex(DATABASE_URL)
// Build prompt block for this user
const { block } = await memex.getPromptBlock({
userId: req.user.id
})
// Wire tools — all scoped to this userId
const tools = memex.tools({ userId: req.user.id })
const result = await generateText({
model,
system: `${systemPrompt}\n\n${block}`,
messages,
tools,
})What your ops team sees
The admin console shows every memory file for every user. Click into any file to read its current content, see every revision with timestamps and tool call IDs, and view the full access log showing every read and write the agent has made.
Correcting a wrong fact is a single edit. The change takes effect on the next agent session — no redeployment, no re-extraction, no migration.
Revision history means you can reconstruct exactly what the agent believed at the time of any incident. If a user files a complaint, you can pull up their memory state from that exact moment.