Token savings, measured.
AST- and heading-aware diff cache on file reads. 86% saved on a typical TS edit, 99% on unchanged re-reads.
A local-first, cross-agent memory layer for Claude Code, Cursor, Codex, and Gemini. It helps your agent remember why decisions were made across sessions — then catches when your README, docs, and code drift apart, with file:line evidence.
No account. No cloud. One SQLite file on your machine.

AST- and heading-aware diff cache on file reads. 86% saved on a typical TS edit, 99% on unchanged re-reads.
Claude Code, Cursor, Windsurf, OpenAI Codex, Gemini CLI — all share one brain at ~/.linksee-memory/memory.db. No cloud, no account, no lock-in.
goal / context / emotion / implementation / caveat / learning. Forgetting is tuned per layer — caveats are protected.
3 core memory tools (remember / recall / read_smart) + 8 drift & map tools = 11 MCP tools total — including where_am_i, which locates the current file on your product map and reports its blast radius. Plus the full MCP protocol surface: Tools + Resources + Prompts + Sampling + Roots + Elicitation.
A map.yaml (git source of truth) describes how value reaches your user; the CLI answers where am I, what did this file promise, what does the code do, and what else must change — with file:line evidence. Add --lang ja for Japanese.
memory://stats / memory://hot / memory://recent / memory://caveats + 3 templates (memory://entity/{name}, memory://layer/{layer}, memory://memory/{id}). Browse memory in your IDE without a tool call.
summarize-session / extract-caveats / weekly-consolidation / recall-and-write / entity-handoff. Memory-before-action discipline, baked in.
Auto-consolidation on startup can optionally ask the client's LLM to rewrite cluster summaries. Falls back to the heuristic when the client declines. No server-side LLM key needed.
recall{path, scope_to_roots:true} reads the client's working roots and filters file history matches. Skips silently if the client doesn't expose roots.
remember{forget:true, memory_id:N} asks the user to confirm via the client UI before deleting. Newer MCP primitive — graceful degrade on clients without support.
Every memory is tagged with exactly one layer. Recall composites relevance × heat × momentum × importance and returns match_reasons so you — and the agent — know why a row came back.
The outcome the user is working toward. Persists across sessions so the agent doesn't drift.
Why this, why now. Surrounding constraints and stakeholders that shape the right answer.
Tone cues from the user. Frustration, excitement, exhaustion — signals that change how to reply.
How something was done — including what failed. The difference between a clean diff and a scar.
The "never do this again" drawer. Protected from auto-forgetting, always surfaced on recall.
Patterns distilled over time. Auto-consolidation compresses cold memories into protected learning entries on startup.
Last week you decided "FTS5, not vector search." This week a fresh session installs pgvector — nobody's fault, the context just died. Memory tools record what you did. Nothing watches when reality diverges from what you decided. That's the layer Linksee adds.
A drift is a question, not a verdict — "which one is correct now?"
"We use FTS5" / "never ship without tests" — declared explicitly, never mined from chat. 4 species: hypothesis, constraint, commitment, source-of-truth.
Committed code is checked against your anchors. Four states: 🔴 drift · 🟡 review · ⚪ held · 🔵 aligned. Recorded evolution stays quiet — only unaccounted gaps fire.
A hook re-surfaces the locked decision before the agent runs the violating command. It asks first; it only blocks the rules you explicitly hardened.
Resolve in conversation: fix the code / the direction changed / false positive — plus two gates: harden (block) and soften (warn).
Three spells to remember
We'll walk through everything — installing Node.js, setting up Claude Desktop, and verifying it works. No terminal experience required for Claude Desktop.
Claude Desktop uses a settings file. We'll add linksee-memory to it with one paste.
Launch Claude Desktop → Settings → Developer → "Edit Config". A JSON file opens in your editor.
Inside "mcpServers": { ... }, add the linksee key shown below. If mcpServers already has entries, add a comma before the linksee line.
"linksee": {
"command": "npx",
"args": ["-y", "linksee-memory"]
}Fully quit and reopen (not just close the window). linksee-memory loads on the next launch.
Start a new chat and type: "Can you remember that I prefer TypeScript over JavaScript?" Claude should confirm it saved this to linksee-memory.
| Feature | Mem0 / Letta / Zep | Claude auto-memory | linksee-memory |
|---|---|---|---|
| Cross-agent (Claude + GPT + Gemini) | △ | ✕ | ✓ |
| WHY-layered structure | ✕ flat | ✕ flat | ✓ 6 layers |
| AST-aware file diff cache | ✕ | ✕ | ✓ |
| Active forgetting (curve-based) | △ | ✕ | ✓ |
| Local-first · no account required | ✕ | ✓ | ✓ |
| match_reasons on recall | ✕ | ✕ | ✓ |
$19/mo. First 100 seats lock launch pricing forever. Cancel anytime — your memories stay in your local SQLite.
Start a task on your MacBook, continue on the office Linux box — the agent has the full context.
When one teammate's agent hits a pitfall, every other teammate's agent knows — no more repeating war stories across PRs.
Browse, edit, and search your memories in a web UI. Export / import. See memory growth over time.
Direct access to the builder. Responsive email support. Early access to experimental features (semantic recall, multi-agent coordination).
Who it's for: solo devs with multiple machines, or small teams (3–10) sharing agent workflows.
Drift detection and the memory core stay local and free, forever. Pro only adds sync, team sharing, and the web dashboard.
One email, max. No newsletter spam. Unsubscribe is just not replying.
MIT-licensed. One binary. Stays on your machine.