What is Linksee Memory?
Claude Code forgets everything when you start a new session. Your successor knows even less. Linksee Memory is a local-first MCP server that lets you hand a project over — to your next session, to Cursor or Codex, to the person after you — with the reasons attached. Record a decision once and it comes back before the agent acts on it: re-injected on session start and ahead of every Edit/Write/Bash that touches it. Change your mind on the record and it stops nagging; leave it and it keeps the next agent from repeating last week’s mistake. Underneath: drift detection across every project you run in parallel — which ones quietly left their goal (🔴), which were checked and hold (🔵), which nobody has looked at yet (⚫). One SQLite file that Claude Code, Cursor, Windsurf, OpenAI Codex and Gemini CLI all read. Nothing leaves your machine.Handover
remember({ content, anchor: {} }) records a decision and enforces it. The guard re-surfaces it before the agent acts — in this session, the next one, or another agent’s.Drift detection
drift_status reads reality against what you decided: 🔴 drift · 🟡 review · ⚪ held · 🔵 verified · ⚫ unverified — with the evidence, not a colour.Cross-agent
Claude Code, Cursor, Windsurf, OpenAI Codex, Gemini CLI — one memory, all agents.
Local-first
No cloud. No account. No network calls. One SQLite file on your machine.
Quick Start
One command sets up the MCP server, the skill, the session-capture hook, and the re-injection guard — for every repo on the machine:Six tools
Two pillars, one surface. Memory and drift each get the minimum; nothing else is exposed.
Earlier versions exposed eleven. The five folded names —
where_am_i, check_decision, flag_proposals, dream, resolve_proposal — are hidden from tools/list but still answer when called. See Legacy names.
Questions this answers
The wording is deliberate: these are the questions people actually type, kept verbatim.- “Claude Code forgets everything when I start a new session.” → Run
setup. Every session starts withrecall()— the brief — and your locked decisions are re-injected before the agent acts. - “I want one shared memory between Claude Code, Cursor, and Codex.” → One SQLite file; every client reads it.
- “My agent keeps re-implementing things we already decided against.” →
remember({ content, anchor: { violation_signal: [...] } }). The guard blocks or warns before the edit, and tells you how to supersede if you really did change your mind. - “How do I stop Claude Code from repeating the same mistake it made last week?” → Record it as a
caveat. It is protected from forgetting and re-surfaced when the same ground is touched. - “Which of my twenty projects has quietly drifted from its goal?” →
drift_status()— one line per project, evidence attached.
How it works
- During a session, the agent calls
rememberto store decisions, caveats and context. A decision withanchor: {}also becomes a drift anchor. - Before it acts, the guard checks the pending Edit/Write/Bash against your anchors: a hardened contradiction is denied, a softer one is re-injected as context, no match → nothing happens.
- On the next session,
recall()opens with the brief;recall({ query })retrieves memories ranked by relevance, heat and importance. - Across the product, a
map.yamlrecords how decisions reach the user;linksee-memory map reconcilechecks it against the code and flags drift with file:line evidence.recall({ where: "<topic>" })tells the agent where it is and what else a change would touch.
System Requirements
- Node.js 20+
- Any MCP-compatible client (the guard needs Claude Code hooks)
- ~10 MB disk for the SQLite database
Next Steps
Installation
Detailed setup for every MCP client
Quick Start
Remember a decision, hand it over, watch the guard catch the contradiction
Product map & drift
The map CLI,
recall({ where }), and how drift detection worksMemory Layers
Understand the 6-layer structure