Reference
FAQ
Scope, the honest limits of version 0.1, and where keepsake fits next to the memory tools you already use.
Questions
What exactly is keepsake?
An open format for personal AI memory (keepsake/v1) plus a reference implementation: a browser app, a Bun CLI, and an MCP server. A memory is a hashed Cell; a vault is one JSON file holding the cells sealed with AES-256-GCM under a PBKDF2-SHA256 key, with a Merkle root committing to the plaintext.
Does it need a network or an account?
No. There is no server, no account, no telemetry, and no network code. The CLI reads and writes files on your machine, and the browser app builds the vault in the page. Transport is the file itself.
Is the browser app uploading my data?
No. Import, search, seal, and open all run in the tab. Sealing creates the vault in memory and hands it to your browser as a download; the page never posts it anywhere.
Is this semantic memory? Does it use embeddings?
Not in the format. The keepsake/v1 container has no embeddings, vector search, or model inference, and the CLI and MCP server recall exactly and lexically, using BM25 over the plaintext cells. The browser app can optionally layer real on-device semantic recall over the same cells without changing the vault; nothing is embedded until you load the model.
Does my memory get sent anywhere for semantic search?
No. The embedding model is self-hosted and runs in your browser, so the embeddings are computed on your machine. No memory text, query, or embedding is sent anywhere, and the page makes no network requests.
Why does the site include a 23 MB model?
It is the optional on-device semantic recall model (Xenova/all-MiniLM-L6-v2, quantized). Nothing runs unless you click Load on-device model, and when you do it runs locally in the tab. The site self-hosts the model along with the Transformers.js runtime and the ONNX Runtime Web WASM binaries, so it stays fully offline.
Does it sync across devices?
No. Version 0.1 defines a file, not a service or a multi-writer merge. You move a vault by copying the file. Sync, with a documented merge and conflict model, is on the roadmap and would stay opt-in.
Can I change my passphrase or rotate keys?
keepsake rotate rewrites a vault under a new passphrase: it decrypts the cells and seals them again with a fresh salt and IV. There is still no in-place re-wrap, so the result is a new file with a new ciphertext. There is no escrow and no recovery path, so a lost passphrase means a lost vault.
What does the vault reveal?
The container is not encrypted. An observer can see the format version, the creation time, the cell count, the KDF parameters, the exact ciphertext length, and the Merkle root. Version 0.1 does not pad the plaintext. See the security notes in the spec.
How does it compare to cloud AI memory?
Cloud memory lives in the vendor's account: it is not a file you can copy, it is not portable between assistants, and it disappears with the account. keepsake makes the memory a file you own, encrypted at rest and readable by any tool that follows the spec.
How does it compare to MCP memory servers?
Many MCP memory servers keep state in a hosted store or a private database. keepsake's MCP server opens a local vault in process, over stdio, and makes no network calls. You keep the file; the agent only gets a view of it while the server runs.
Can I verify a vault in CI?
Yes. The repository ships a composite GitHub Action that installs Bun and runs keepsake verify against a committed vault, failing the job if the passphrase is wrong or any cell hash or the Merkle root does not match. Pass the passphrase through a repository secret (KEEPSAKE_PASSPHRASE), never as a literal. The CLI exit code is the gate: 0 means the vault checks out. See the usage page for the workflow.
What is a context pack?
A token-budgeted Markdown digest of the cells most relevant to a task, printed by keepsake context and exposed to agents as the memory_context MCP tool. It is a transient projection: it is built on demand from the decrypted cells and is never written into the vault or committed to the format. It is lexical recall, not semantic, and discarding it leaves the vault unchanged.
What is a memory pack and is it safe to share?
A memory pack is a plaintext Markdown file that carries a vault's cells losslessly. keepsake pack writes one from a vault, and keepsake unpack verifies its per-cell hashes and Merkle root before sealing it into a new vault. It is agent-readable and integrity-checked, but it is not encrypted: anyone who has the file can read every memory. Treat it as plaintext, and encrypt or omit sensitive cells before sharing.
Honest limits
The keepsake/v1 format and the CLI and MCP server are lexical, not semantic; the browser app's on-device semantic recall is optional and off until you load the model. Version 0.1 has no sync; the context pack is a lexical projection, not embeddings. keepsake rotate re-encrypts a vault under a new passphrase, but there is no in-place re-wrap. It is not a formal audit, and it does not pad the plaintext, so the ciphertext length approximates the plaintext length. Import is lossy by design: it records text and metadata, not attachments, images, or tool calls.
Security posture
- No server
- Importing, searching, sealing, and opening all run locally. There is no network code and no fallback to a remote key.
- No account
- There is nothing to sign in to and nothing to identify you. The vault is a file, not a resource behind an API.
- No telemetry
- Nothing is reported about what you import, search, or seal. The page and the CLI make no outbound requests.
- Encrypted at rest
- AES-256-GCM with the tag included: any change to the ciphertext fails to open, and there is no partial plaintext on a bad tag.
- Integrity you can check
- Per-cell SHA-256 hashes and a Merkle root detect any change to the plaintext.
keepsake verifychecks both. - No key escrow
- The passphrase is never stored and there is no recovery. PBKDF2 at 250,000 iterations raises the cost of guessing but cannot rescue a weak passphrase.
How it compares
Roadmap
| Feature | Direction |
|---|---|
| Embeddings | Optional local semantic recall layered over the same cells. |
| Sync | Optional, opt-in multi-device sync with a documented merge and conflict model. |
| In-place key rotation | Re-wrap a vault under a new passphrase without re-encrypting every cell; today keepsake rotate rewrites the file. |
Reporting
Report suspected vulnerabilities privately through GitHub Security Advisories. Do not open a public issue.