Your coding agent starts every session with amnesia. memo fixes that — 100% on your own machine.
Persistent, searchable memory for Claude Code, Codex, Cursor, Cline, Devin, and OpenCode. No cloud, no API keys, no Ollama, no vector DB to run. And it spends fewer tokens, not more.
Save a fact once — every later session recalls it automatically, all stored locally.
curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v4.13.3/install.sh | bash
memo doctor --strict-runtime
On Linux or just want to look around first?
bash
docker run --rm ghcr.io/jagoff/memo:latest memo doctor
Why this saves you money
Most memory servers add context. memo is built to remove it.
Profile
Tools
Schema tokens
agent (default)
41
~9.4k
core / slim
58
~12.9k
full / default
164
~30.4k
The default MCP surface is 41 tools, not 164 — 75% fewer tools, and about 69% less schema context: 41 tools / ~9.4k schema tokens versus 164 tools / ~30.4k tokens on the full surface — overhead paid every session, in every client.
Ambient recall injects one relevant memory before the model answers. The bundled Claude Code hook caps that injection at ~160 tokens. memo roi reads the real grounding and re-ask ledgers, then estimates accumulated savings with disclosed defaults (350 tokens per grounded recall and 900 per avoided re-ask).
bash
memo roi # value from grounded recalls and avoided re-asks
memo tokens # usage-savings ledger
Three things nothing else does
🕰️ Time-machine — query your knowledge as it was
bash
memo as-of ask "what was the deploy strategy?" --date 2026-02-01
memo diff --from 2026-01-01 --to 2026-03-01
Full historical reconstruction by reverse-replaying history.db. Useful when you need to know why past-you made a call, not just what past-you decided.
⚡ Contradiction radar — memory that notices when you change your mind
Change a decision and memo flags the now-stale version, so the agent stops reintroducing what you already threw out.
🔮 Dream — it optimizes itself while you sleep
bash
memo dream run
A 7-phase nightly pipeline: inventory → mine signals → resolve conflicts → prune stale → synthesize cross-cluster insights → optimize → pre-warm the top-100 query embeddings so tomorrow's recall stays under 200 ms. Every run writes a receipt you can audit. Zero intervention.
How it works
Hybrid retrieval. A vector leg (MLX on Apple Silicon, sentence-transformers on CPU) and a BM25 leg (FTS5, diacritic-folding for Spanish) run in parallel, fuse via Reciprocal Rank Fusion, then go through an optional MLX cross-encoder rerank.
Markdown is the source of truth. Every memory is a plain .md file you can read, grep, and version-control. SQLite is a derived index that rebuilds from the files at any time — hand-edit in Obsidian and your edit wins on the next memo reindex. Nothing is locked in a database you can't open.
Prompts and memories stay on your machine. Embedder, reranker, and LLM all run in-process. No telemetry. Memory travels only if you point memo sync at a git remote you own. Normal startup is fully offline; remote update checks and auto-update require an explicit opt-in. → Privacy and network policy
Also in the box: cross-agent memo resume (reopen any session from any agent), cross-Mac git sync, a knowledge graph with optional codegraph symbol edges, encrypted secret storage, OCR/audio ingestion, evidence packs, outcome learning, signed federation, and a local chat UI over your memory (memo chat serve). → Full feature reference
How it compares
Verified July 2026 against each project's own docs. Corrections welcome — open an issue and I'll fix the table.
Python ≥ 3.13 (the installer handles this via uv if you don't have it). First install pulls ~8 GB of models, 5–15 min. Optional: an Obsidian vault — without one, memo uses ~/Documents/memo/.