apache 2.0local-first · cross-provider · open protocolscroll
02
the lede
what this is
MMemory has become the lock-in of the AI era. Every chatbot, every assistant, every agent now learns who you are — your preferences, your projects, your patterns — and stores it on servers you don't run, in schemas you can't read, locked to a product you might want to leave. mneme is the structural inverse: an open protocol for memory that lives on your device, encrypted with keys only you hold, and synced through whichever backend you trust.
100 samples, six everyday contexts, scored two ways. Same models on both sides.
We extract memories from real conversation transcripts, then check whether the right things were extracted. Two matchers run on every sample: a strict keyword check (does the extracted memory mention the expected facts?) and an independent LLM judge (does the extracted memory mean the same thing as the expected one?). Both numbers are reported every run.
Against Mem0 v3.0.3 — the open-source memory system most often cited as state of the art — we tie on semantic F1 and dominate on strict F1 by 53.9 points. The semantic tie means we extract roughly the same underlying facts. The strict gap is structural: Mem0 paraphrases inputs into its own canonical form; mneme preserves the user's source language.
We compete on whose memory it is — not on whose retrieval scores half a point higher.
Every existing memory system — Mem0, Letta, Zep, ChatGPT Memory, Claude Projects — chose the same model: your data on their servers, in their schema, available only inside their product. mneme is the structural inverse. Six principles, in order of how much they constrain every decision.
01device
Your memory lives on your device.
The store is a SQLite file on your machine. Sealed on disk with AES-256-GCM, signed with Ed25519, queryable in milliseconds. No round trip to a server for a single recall. No subpoena risk we can satisfy in plaintext — we never have it in plaintext.
02keys
You hold the keys. We never do.
Master keys derive from your passphrase via Argon2id — slow on purpose. A 24-word BIP-39 phrase recovers the same store if the passphrase is lost. The server, when there is one, sees only encrypted envelopes.
03protocol
An open, versioned spec.
remember, recall, forget, supersede, export, sync. Five verbs and a schema. Anyone can implement it — Python next, then Go, then Rust. Conformance tests in the same repo as the reference SDK.
04cross-provider
One memory. Every model.
The MCP server ships today; HTTP and SSE adapters follow. The same protocol speaks to every host — no model-specific schema, no provider lock-in.
05portable
Take your encrypted store with you.
One verb to export the whole file. The format is the same one we use internally — no proprietary wrapper. If a better memory system ships tomorrow, copy your file there. Our advantage is quality and neutrality, not friction.
06boring
Boring where it doesn't matter. World-class where it does.
Postgres. SQLite. Bun. tsdown. Apache 2.0. Tested against real backends, not mocks. The novelty budget goes to the genuinely hard problems — encrypted semantic retrieval, CRDT sync across devices, cross-provider portability. The rest is meant to be unremarkable.
05
the architecture
how it actually works
Four layers. Each one replaceable. Each one inspectable. Each one capable of being its own product.
A cross-section, top to bottom. The app surface is where users see memory; the protocol is what apps speak; the encryption layer is where keys do their work; the store is the single SQLite file on your device. The server, when there is one, never holds plaintext.
L1the storeSQLite file on your device · syncable via any SyncPeer · CRDT-style convergence
~/.mneme/store.sqliteencrypted at rest · queryable in milliseconds
The server is just another SyncPeer. WebSocket ships today (LAN-only, no auth); HTTP+JSON with bearer-token auth ships with Mneme Cloud in v0.2. Self-host the same code if you'd rather. The boundary between you and us is encryption, not trust.
06
try it
five minutes from cold to first recall
bun add @mnemehq/sdk. Or paste an npx line into Claude Code.
installthe core sdk
$ bun add @mnemehq/sdk
$ bun add @mnemehq/embedder-local # optional, on-device search$ bun add @mnemehq/sync-websocket # optional, multi-device
mcpone line in claude code, cursor, any mcp host
$ claude mcp add mneme -- npx -y @mnemehq/mcp-server
worked exampleinitialize → remember → recall · 24-word phrase shown once