
Linksee Memory
io.github.michielinksee由 GitHub 帳號 michielinksee 發布v0.19.0更新於 Nov 7, 2026
Hand a project over with the reasons attached. Local-first cross-agent memory MCP + drift detection.
發布方自己的服務:Memory.fit
概覽
面向程式開發代理的本地優先記憶伺服器:一個 SQLite 檔案供 Claude Code、Cursor、Codex 等共用,並可對照已記錄的決策偵測偏離。
- 可以做什麼
- 檢索與搜尋已儲存的記憶,取得工作階段簡報、某檔案的編輯歷史或某主題上的目前立場
- 儲存、更新、取代或刪除記憶,也可將其記錄為帶有矛盾訊號的決策
- 以 AST 差異快取讀取檔案,未變動的重複讀取只耗用少量 token
- 檢視每條已記錄決策的偏離狀態,並深入查看單一決策
- 宣告規範主張、禁止項、限制或擱置的提案,並透過修復、取代、確認、忽略、加固或放寬來處理偏離
- 僅在使用者要求時產生連結,指向供其他代理共享修復方案的審閱草稿
- 適用情境
- 適合希望決策與經驗跨工作階段保留、並在同一台機器的多個程式開發用戶端之間共享的情境,也適合在編輯違背已記錄決策前取得提醒。若只需要簡單的跨工作階段記憶,專案內的說明檔案可能已足夠。
- 執行需求
- 以 npx 啟動的本地 stdio 程序,建議 Node.js 22.16 或更新版本(較舊的 Node 20/22 需在安裝時編譯 better-sqlite3)。不需帳號、API 金鑰或雲端。建議準備 Claude Code 或 Codex 試用。可選的 setup 指令會註冊伺服器、安裝技能並加入 Claude Code 鉤子,修改家目錄下的設定檔。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Linksee Memory,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
linksee-memory
A local MCP memory server: one SQLite file on your machine that Claude Code, Cursor, Windsurf, OpenAI Codex and Gemini CLI all read and write. No account, no credit card, no cloud, no API key. The server makes no network calls; telemetry is opt-in and off by default.
It is for handing a project over — to your next session, to another client, to the person after you — with the reasons attached. Every client can save and search the memory. In Claude Code, hooks also bring a recorded decision back at session start and before an edit. Drift detection shows which recorded decisions the code has since left.
Needs Node.js 22.16 or later (recommended: SQLite with FTS5 is built into Node, nothing is compiled), and Claude Code or Codex to try it (either one is enough). Node 20 and Node 22.0–22.15 still work through better-sqlite3, which then has to be built on install — on npm 12 that means allowing its install script (see troubleshooting).
Install
Claude Code, from inside a session (plugin: MCP server and skill, no hooks):
Or from a shell, which also installs the hooks:
The plugin starts the server with npx -y linksee-memory@latest and ships the same skill setup installs. It has no hooks: the Stop hook (auto-capture) and the re-injection guard come only from setup. One or the other, not both:
- Already ran
setup? Do not add the plugin. With both, Claude Code runs the server twice (linkseeandplugin:linksee-memory:linksee). - Installed the plugin and want the hooks? Disable it (
/plugin→ Installed → linksee-memory → disable, orclaude plugin disable linksee-memory@linksee-memory), then runnpx -y linksee-memory setup. The memory file is the same; nothing is lost. - Plugin only: no hooks, so nothing is saved unless the agent calls
remember(the skill tells it when). - Windows: after installing the plugin, run
/mcpand check thatplugin:linksee-memory:linkseeis connected. If it is not, disable the plugin first (previous bullet), then runnpx -y linksee-memory setupfrom the shell block above.setupregisters the server withclaude mcp add, the form that is known to work on Windows, and it does not disable the plugin for you.
One command for Claude Code. setup --dry-run prints what it would change. It edits ~/.claude/settings.json, so the hooks apply in every repo, and keeps the old file as settings.json.bak-<timestamp> (what it writes).
First round trip
A new install has an empty memory, so "how did we solve this before?" finds nothing yet. Try this instead:
- In Claude Code or Codex, say: "Remember: in this repo we decided to use X, because Y. Use Linksee."
- Open a new session — in either one — and ask: "What did we decide about X? Use Linksee."
- Two repos: record a decision in repo A, then in repo B (e.g. Codex) ask the same. It does come back — the memory is per machine, not per repo — labelled
entity: repo-aandby: <client>;entity_nameon the recall narrows by a part of the entity name (repo-aalso matchesrepo-a-backup). - Reverse it:
rememberthe new decision withsupersedes: <old memory_id>.recallthen shows only the new one (supersedes #<id>);include_superseded: trueshows both.
Works for me
Where the first round trip is known to work. Most cells are empty because nobody has tried them yet, not because they fail.
- verified: run by the maintainer with a record. Claude Code on Windows: remember in one session, recall in a new one, on 0.18.1 (record). The plugin install path connected on 2026-11-05; its round trip is not in the record.
- reported: someone said it works, without a version or log. Claude Code on macOS: the maintainer on one Mac (#16); the hooks there are not checked.
- untested: nobody has reported it either way.
If you fill one cell, your name goes in the weekly report under "Added by others". Report your client and OS — five fields, no database contents.
Weekly report: Discussion #16.
What it does not do
- Reminders and blocks before an edit are Claude Code hooks. Cursor, Windsurf, Codex and Gemini CLI share the memory but get no warning before an edit.
- Saving every session automatically is also Claude Code only. Other clients save when the agent calls
remember. - The memory is shared on one machine. There is no sync to another machine; to hand it over, copy
~/.linksee-memory/(with every client closed). - A database from a very early version (schema 1–5) is refused without being changed. Close every client and keep them closed while it runs, then
npx -y [email protected] migrate --dryandnpx -y [email protected] migrate: it migrates a copy and moves the original files, as one set, intomemory.db.pre-migrate-<time>/(details and how to go back).
[npm] [license] [mcp-registry] [glama-score]
Docs: docs.linksee.app · Site: linksee.app (setup guides for non-developers) · Free, MIT, local only — there is no paid tier you need.
What setup writes, and how to undo it
setup registers the MCP server (claude mcp add -s user linksee -- npx -y linksee-memory), installs the agent skill, adds a Stop hook that saves each session, and wires the re-injection guard for every repo (--project-guard for this repo only, --no-guard to skip). Running it again changes nothing that is already in place.
To remove everything: claude mcp remove linksee, delete the linksee hooks from settings.json (or copy the .bak back), then rm -rf ~/.claude/skills/linksee-memory ~/.linksee-memory — the last one deletes the memory stored in that folder. It does not reach copies you made yourself (for example to hand the memory over) or telemetry already sent if you opted in. Linksee itself never sends memory text anywhere. Step by step, with manual setup: docs/install.md.
Other clients
Every client points at the same stdio command and the same ~/.linksee-memory/memory.db. A decision made in Claude Code is recalled in Cursor.
The JSON clients take the same block:
Full configs, including Codex's config.toml: docs/install.md.
Everyday use
Adding "Use Linksee Memory" to your system prompt or CLAUDE.md prompts the agent to call recall more often; whether it does is still up to the agent.
What each part does, and where:
- Shared (every client):
remembersaves to the one SQLite file;recallsearches it when the agent calls it. - Re-injected (Claude Code only, hooks):
remember({ content, anchor: {} })also records the decision as an anchor. At session start the guard hook adds a short digest of recorded decisions (up to 8). Before anEdit/Write/Bash, a decision comes back only if it matches: withaffectsglobs, the edited path must match (aBashcommand that names no file can still match on aviolation_signal); withoutaffects, adetect_termsorviolation_signalhit is needed. An emptyanchor: {}has none of these, so it appears only in the session-start digest, never before an edit. - Contradiction warned or blocked (Claude Code only): the guard can only tell that an edit contradicts a decision if you give it the strings that mean "contradiction":
anchor: { violation_signal: ["pgvector"] }. An emptyanchor: {}is stored as a constraint and is re-injected, never matched as a contradiction. A match warns; afterresolve_drift(action: "harden")it blocks. The guard fails open: its own errors never block anything. Details: docs/guard.md.
Tools: seven, six for memory and drift and one you ask for
Three for memory, three for drift, and share_draft, which runs only when the user asks.
Earlier versions exposed more, and how agents used them varied from model to model; six is what
an agent can hold without a manual.
The five earlier names — where_am_i, check_decision, flag_proposals, dream,
resolve_proposal — are folded into the six above. They are hidden from tools/list but still
answer if called, so a skill or agent written against an older version keeps working.
LINKSEE_LEGACY_TOOLS=1 lists them.
One more tool sits outside the memory/drift surface and does nothing unless the user asks:
share_draft — builds a link to a reviewed draft of a fix for other agents. See
Share a fix with other agents.
CLI
Drift and the product map
Drift is a recorded decision that the code has quietly left — last week you chose FTS5 over vector search, this week a new session installs pgvector. drift_status lists each decision as 🔴 drift, 🟡 review, ⚪ held, 🔵 verified or ⚫ unverified, with evidence. A change you recorded as fix or supersede stays quiet; only unaccounted gaps are flagged.
linksee-memory map lifts this to the whole product: a map.yaml of how the pieces fit, checked against the code with file:line evidence.
[linksee-memory map catching doc/code drift in 30 seconds]
In the demo the README promises --export and the code does not implement it; the map flags it and lists what else a change would touch.
States, resolutions, the four species and the full map CLI: docs/drift-and-map.md.
Share a fix with other agents (optional)
When an agent gets stuck connecting to a SaaS / MCP / API and gets it working (or doesn't), the user can choose to share what happened so the next agent does not repeat it.
- What happens: the agent calls
share_draftwith fixed fields —service,task,symptom,tried,result, optionalconditions,kind(execution/documentation/hypothesis),runtime. Linksee checks them and returns a link to KanseiLINK's draft page (https://kansei-link.com/agents/note/new.html). The page opens with the fields filled; the user reads them, and only their click on that page sends anything. - What never goes in: free text outside those fields, or anything that looks like a key, token,
JWT,
Bearervalue, e-mail, tenant URL (acme.slack.com), IP address, local path (C:\,/Users/,/home/) or a long hex / base64 run. Any of these stops the build and names the field — no link is made. The whole URL must fit in 2,000 characters; Linksee asks you to shorten rather than cut. The URL passes through KanseiLINK's request logs (Cloudflare), so keep secrets out. - What Linksee keeps: one row saying a draft was made, with the time — no field text.
- How to turn it off: don't use it. The tool is only called when the user asks to share; nothing is sent, suggested or filled from your memory automatically.
日本語
SaaS・MCP・API の接続で詰まって直った(または直らなかった)とき、利用者が望めば、次のエージェントが同じ所で詰まらないよう共有できます。
- 起きること: エージェントが決まった欄(
service・task・symptom・tried・result・任意のconditions・kind・runtime)でshare_draftを呼ぶと、Linksee は欄を検査して、KanseiLINK の下書きページへの リンクを返すだけ です。開くと欄が埋まった画面が出て、人が確かめてから、そのページで押した時だけ送られます。 - 入らない物: 決まった欄の外の自由文。キー・トークン・JWT・
Bearerの値・メールアドレス・テナントの URL(acme.slack.com)・IP アドレス・PC の中の道(C:\・/Users/・/home/)・長い 16 進や base64 の塊。どれかがあれば、リンクは作らず、どの欄かを返します。URL 全体は 2,000 字まで。超えたら削らずに「短くしてください」と返します。URL の中身は KanseiLINK の通信の記録(Cloudflare)を通るので、秘密は入れないでください。 - Linksee に残る物: 「下書きを作った」ことと時刻だけ。欄の中身は残しません。
- 止め方: 使わなければ何も起きません。利用者が共有したいと言った時だけ使う道具で、自動の送信・提案・記憶からの書き込みはありません。
Security and privacy
linksee-memory runs locally and is built to read — and send — as little as possible.
- Local-first. Memory is one SQLite file at
~/.linksee-memory/memory.db. No account, no cloud, no API key. - Telemetry is opt-in and OFF by default.
setupasks once; nothing is sent unless you agree there (or setLINKSEE_TELEMETRY=basic). Even then it never sends your source code, file contents, prompts, conversation, entity/project names, or the memory DB — only anonymous counters (details). - No automatic repo crawling. linksee reads: memory you explicitly save, your
map.yaml, the specific files a map reality-check points at, the local SQLite DB, and — when the Stop hook fires — your Claude Code session transcript (locally, to capture what happened). It does not crawl your repo, read.env/secrets/node_modules, or touch your home directory on its own. share_draftmakes a link only; Linksee itself never sends it. The user opens it and decides (details).- Clean MCP transport. The server writes only JSON-RPC to stdout; all logs go to stderr.
- Hooks are documented and removable.
setupadds a Stop hook (session capture) and the guard hooks (skip them with--no-guard). They send nothing unless you opted in to telemetry (then the Stop hook posts one set of counters per session). Hooks written in thenpx -yform — the fallback when setup cannot write a directnodecall — start npm, which checks the registry. They are time-bounded, fail-open (a hook error never breaks your session), and are listed under Uninstall. - No shell-injection surface. Subcommands run via
spawnwith array args andshell: false, from a fixed allowlist;map.yamlis parsed with the safeyamlparser (no arbitrary tag execution). - Supply chain. MIT, published from a single owner.
npx -y linksee-memoryruns the published package — pin a version in CI if you need reproducibility.
Found a security issue? See SECURITY.md.
Every telemetry field, and what is never sent: docs/telemetry.md.
Questions this answers
These are the questions people actually type — measured, verbatim (2026-09-04). If yours is here, this is the answer.
Claude Code forgets everything when I start a new session. How do I make it remember decisions across sessions?
Run npx -y linksee-memory setup. In Claude Code, each new session starts with a short digest of your recorded decisions and open items, injected by the SessionStart hook; the agent can call recall() (no arguments) for the full brief — what needs attention, where you are, what's unresolved. Decisions whose paths or terms an edit touches come back before that edit.
Claude Codeがセッションをまたぐと過去の経緯を忘れてしまいます。記憶を持たせる方法を教えてください。
npx -y linksee-memory setup の一回で入ります。Claude Code では、新しいセッションの最初に SessionStart フックが記録済みの決定と未解決の要約を差し込みます。全体の brief(注意すべきこと・いまどこか・未解決)は、エージェントが recall() を引数なしで呼んだときに出ます。編集が決定の対象のパスや語に触れると、その編集の直前にも出ます。
What is the best MCP server for persistent memory across AI coding agents?
Honest answer: if "remember across sessions" is all you need, a CLAUDE.md is enough — we measured it. Linksee is for the three moments it isn't: right before a mistake, when you change your mind, and when you run many projects and need to see which one drifted.
AIコーディングエージェント用の記憶MCPサーバーでおすすめはありますか?
正直に言うと、「セッションを跨いで覚える」だけなら CLAUDE.md で足ります(実測しました)。Linksee が要るのは、間違いかけたとき・方針を変えたとき・並行案件のどれが外れたかを知りたいとき、の3場面です。
I want one shared memory between Claude Code, Cursor, and OpenAI Codex. What tools exist for that?
One SQLite file. Claude Code, Cursor, Windsurf, OpenAI Codex and Gemini CLI all read and write the same memory — a decision recorded in one can be recalled in the others. Only Claude Code brings it back automatically before an edit (hooks).
Claude CodeとCursorとCodexで同じ記憶を共有したいのですが、どうすればいいですか?
SQLite ファイル1つを全員で読み書きします。Claude Code / Cursor / Windsurf / Codex / Gemini CLI のどこで記録した決定も、他のクライアントから recall で引けます。行動の直前に自動で出るのは Claude Code だけです(フックのため)。
My AI agent keeps re-implementing things we already decided against. How can I detect that a codebase has drifted from past decisions?
Declare the decision (remember({ content, anchor: { violation_signal: [...] } })). In Claude Code the guard then warns — or blocks, if you hardened it — the moment an edit contradicts it, and drift_status shows every decision that reality has quietly left.
過去に決めた設計方針とコードがずれていないかを検出できるツールはありますか?
決定を「反したと分かる語」つきで宣言しておくと(remember({ content, anchor: { violation_signal: [...] } }))、Claude Code ではそれに反する編集の直前に警告(hardened なら拒否)が出ます。drift_status は「宣言と現実がずれた決定」を証拠つきで一覧します。
Is there a local-first, self-hosted alternative to Mem0 for agent memory?
Yes. No account, no API key, no cloud — one local file, MIT licensed. npx -y linksee-memory setup and it's on.
Mem0 vs Zep vs Letta for a coding agent's long-term memory — which should I pick?
We installed them and ran one scenario across all of them. Storing and recalling a decision: everyone passes. The difference appears before a mistake and when you change your mind — Linksee is built for those two moments; the others leave them to you.
How do I stop Claude Code from repeating the same mistake it made last week?
Record it as a caveat (remember({ content, layer: 'caveat' })). Caveats are protected from forgetting and come back when recall touches the same ground again. To have Claude Code stop the repeat before it lands, record it as an anchor with a violation_signal, then harden it (resolve_drift(action: "harden")); without hardening, a match only warns.
Does Linksee delete old memories on its own?
Not since 0.18.1. Earlier versions had a "sleep" pass (consolidate) that folded cold memories into a short summary and deleted the originals — on the maintainer's own database it removed 1,360 rows on 2026-10-29 and 559 on 2026-11-05 without saying so. Now the only thing that removes a memory row is remember({ memory_id, forget: true }), by request — the Stop-hook re-import only adds rows (never touches ones it already wrote) and the start-up triage leaves caveats and protected rows alone. (Before importing, the normal schema migration runs; it can raise protected from 0 to 1 for rows with importance ≥ 0.9 and fill columns an older schema lacks, but it does not change a memory's text, relations or verdicts.) Consolidation still exists, by hand (npx -y linksee-memory consolidate --dry-run to see, --apply to fold) or opt-in at start-up (LINKSEE_AUTO_CONSOLIDATE=1); it writes one summary per cluster and marks the originals consolidated_into, which recall hides by default (consolidated_hidden says how many; include_consolidated: true shows them). Rows that an earlier version deleted come back only from a backup of ~/.linksee-memory/.
Linksee は古い記憶を勝手に消しますか?
0.18.1 からは消しません。それ以前の版には「睡眠中の整理」(consolidate)があり、冷えた記憶を短い要約に畳んで原本を削除していました(開発者自身の DB で 2026-10-29 に 1,360 行、2026-11-05 に 559 行が、知らせも無く消えています)。いまは remember({ memory_id, forget: true }) で頼んだ 1 行以外、記憶の行を消す処理はありません(Stop フックの再取り込みは追記だけで既存の行に触らず、起動時の整理は caveat と保護行に触りません。取り込みの前に通常の schema 移行が走り、保護フラグの補正(importance 0.9 以上の行の protected を 0→1 にする方向だけ)と旧 schema の列補完が起き得ますが、記憶の本文・関係・判定は変えません)。整理そのものは残っています。手で回す(npx -y linksee-memory consolidate --dry-run で中身を見て、--apply で畳む)か、起動時に走らせたい時だけ LINKSEE_AUTO_CONSOLIDATE=1 を付けます。畳んだ原本には consolidated_into が付いて残り、recall は既定でそれを隠して件数(consolidated_hidden)だけ返します(include_consolidated: true で出ます)。前の版が消した行は、~/.linksee-memory/ のバックアップからしか戻りません。
開発の意思決定履歴をMCPサーバーで残しておく定番のやり方はありますか?
remember({ content, anchor: {} }) の1回で、記録と決定の登録が同時に入ります(Claude Code では再注入も)。反する編集で警告を出すには violation_signal を足し、拒否まで行うにはさらに resolve_drift(action: "harden") で hard にします。drift_status がその台帳で、各決定が いま守られているか(🔵)・ずれているか(🔴)・誰も確かめていないか(⚫)を示します。
More
- docs/README.md — index of the pages moved out of this README
- Troubleshooting and FAQ — skill not firing, Stop hook not recording, recall too long, resetting, DB size
- How the memory is built — the six layers,
read_smarttoken savings, SQLite layout, comparison with Mem0 / Letta / Zep and Claude Code auto-memory - History — release highlights, roadmap, articles about the project
- CHANGELOG.md — every release · GitHub Releases
Support and license
- Issues: github.com/michielinksee/linksee-memory/issues (feature requests: the
enhancementlabel) - Security: SECURITY.md, or a private advisory on GitHub
- MIT — Synapse Arrows PTE. LTD. (Singapore)
The Map moved to docs/drift-and-map.md. Re-injection Guard moved to docs/guard.md. Uninstall moved to docs/install.md. Telemetry moved to docs/telemetry.md. Other editors / CLIs moved to docs/install.md. Database location moved to docs/install.md. Architecture moved to docs/memory.md. Troubleshooting moved to docs/troubleshooting.md. FAQ moved to docs/troubleshooting.md.
來源:README.md,提交 06c6dc8
工具
0版本歷史
3- v0.19.0最新Nov 7, 2026
- v0.17.0Oct 30, 2026
- v0.15.2Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Memory 整合

Memory.fit
fit.memory官方發布者
託管式 Memory.fit 伺服器,讓 AI 讀取你的訓練、睡眠、恢復與飲食資料,並寫回每週計畫、每日目標和飲食計畫。
pg.ddx.io: the PostgreSQL community's memory
io.ddx.pg官方發布者
pg.ddx.io: the PostgreSQL community's memory 的託管 MCP 服務,由 pg.ddx.io 發布;無需登入;Streamable HTTP;29 個工具。
var.gg Naming Memory
gg.var官方發布者
遠端 MCP 伺服器,可依領域概念推薦並檢索韓、日、中、越、英多語言的程式識別字名稱,並提供 ERD 結構查詢。

Counterparts
ai.counterparts
為 Claude Code 與 Claude Desktop 提供的本地優先長期記憶:助理自行寫下關於你與專案的筆記,並在之後的對話中回想起來。

LAHZE - Persian AI Memory Platform
由 GitHub 帳號 pedramgholizadeh 發布
以波斯語為先的地理記憶平臺:發現地點,起草併發布僅限波斯語的記憶。AI 翻譯