Linksee Memory について
Linksee Memoryは、コーディングエージェント向けのローカル優先型メモリMCPサーバーです。SQLiteでプロジェクトの決定事項を対応クライアント間で共有し、ドリフト検出、行動前の記憶再注入、依存関係を追跡するCLIマップを備えています。
主な機能
- 01ローカルSQLiteメモリの共有
- 026層構造のメモリ
- 03決定事項のドリフト検出
- 04行動前のメモリ再注入ガード
- 05AST対応の差分キャッシュ
- 06プロジェクトマップと依存追跡
活用シーン
- 01エージェントのセッション間で決定事項を引き継ぐ
- 02対応するコーディングエージェント間で記憶を共有
- 03決定事項に反するコード変更を検出
- 04変更の影響を受けるファイルを追跡
MCP 対応
`where_am_i`ツールを含む、メモリとプロジェクトマップ機能をMCPクライアントに提供します。メモリはローカルのSQLiteファイルを介して共有されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
11掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| entity_name | string | いいえ | このメモリの対象となるエンティティ名(作成時に必須) |
| entity_kind | enum | いいえ | 作成時に必須person | company | project | concept | file | other |
| entity_key | string | いいえ | 任意の正規キー(メールアドレス、ドメイン、ファイルパス) |
| layer | string | いいえ | 次のいずれか:goal / context / emotion / implementation / caveat / learning。エイリアスも使用できます(why→goal、warnings→caveat、decisions→learning、how→implementation)。 |
| content | string | いいえ | 記憶内容(プレーンテキスト、または altitude/type/state/what/why を含む構造化 JSON) |
| importance | number | いいえ | 0.0-1.0。≥0.9 に設定するとピン留めされます(忘却を防止)。 |
| thread_id | string | いいえ | 関連する記憶をグループ化するための任意の thread ID(意思決定チェーン、セッショングループ)。 |
| force | boolean | いいえ | 貼り戻し品質チェックを回避します。 |
| memory_id | number | いいえ | 設定すると、新規作成ではなく既存の記憶を更新します。変更されるのは content/layer/importance のみです。 |
| forget | boolean | いいえ | true + memory_id を設定すると記憶を削除します。caveat レイヤーとピン留めされた記憶は削除できません。 |
詳細
linksee-memory
Claude Code は新しいセッションを開始するたびにすべて忘れてしまいます。次の担当者は、さらに何も知りません。
Linksee Memory を使えば、理由も添えてプロジェクトを引き継げます。次のセッションにも、Cursor や Codex にも、あなたの後任にも。 決定事項を一度記録すると(
remember({ content, anchor: {} }))、エージェントが作業する前に再び提示されます。セッション開始時と、それに関わる Edit / Write / Bash の実行前に再注入されます。記録を更新して考えが変わったことを示せば、しつこく通知されなくなります。そのまま残しておけば、次のエージェントが先週の失敗を繰り返すのを防げます。裏側では、並行して進めているすべてのプロジェクトのドリフト検出を行います。気づかないうちに目標から外れたもの(🔴)、確認済みで問題のないもの(🔵)、まだ誰も確認していないもの(⚫)を把握できます。ローカルの SQLite ファイルを、Claude Code、Cursor、Windsurf、OpenAI Codex、Gemini CLI がすべて読み取ります。マシンの外にデータが出ることはありません。
npx -y linksee-memory setup— 1 つのコマンドで、すべてのリポジトリで有効になります。
🌐 ランディングページ: linksee.app(Claude Desktop / Cursor / Claude Code / OpenAI Codex / Gemini CLI の開発者以外向けの導入方法も掲載) 📖 ドキュメント: docs.linksee.app — 製品マップとドリフト、インストール、全 11 種類のツールに関する詳細なリファレンス
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. Every new session opens with recall() — a brief of what needs attention, where you are, what's unresolved — and your locked decisions are re-injected before the agent acts. Nothing to re-explain.
Claude Codeがセッションをまたぐと過去の経緯を忘れてしまいます。記憶を持たせる方法を教えてください。
npx -y linksee-memory setup の一回で入ります。新しいセッションは recall() の brief(注意すべきこと・いまどこか・未解決)から始まり、固定した決定は行動の直前に再注入されます。説明し直す必要はありません。
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 made in one shows up in the others.
Claude CodeとCursorとCodexで同じ記憶を共有したいのですが、どうすればいいですか?
SQLite ファイル1つを全員で読みます。Claude Code / Cursor / Windsurf / Codex / Gemini CLI のどこで決めた決定も、他のエージェントの行動の直前に出てきます。
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: [...] } })). 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: {...} }))、それに反する編集の直前に警告(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 the same ground is touched again — and if you anchor it, the guard stops the repeat before it lands.
開発の意思決定履歴をMCPサーバーで残しておく定番のやり方はありますか?
remember({ content, anchor: {} }) の1回で、記録と強制が同時に入ります。drift_status がその台帳で、各決定が いま守られているか(🔵)・ずれているか(🔴)・誰も確かめていないか(⚫)を示します。
🪄 Three spells to remember
| Say this | What happens |
|---|---|
| "use linksee" | Recalls relevant memories before acting |
| "linksee this" | Saves the decision / lesson right now |
| "what's drifting?" | Reconciles reality against your locked decisions |
Make it automatic: add "Use Linksee Memory" to your system prompt /
CLAUDE.md.
🗺️ Not just memory — a product map
Memory is the entry point. Tie it to a map.yaml of how your product fits together, and the linksee-memory map CLI catches drift with file:line evidence:

The 30-second demo above: the README says --export. The code doesn't. Linksee catches it — and shows what else a change would touch.
npx -y linksee-memory map where README.md # this file belongs to the README node — and what it touches
npx -y linksee-memory map explain readme # README promises --export; the code doesn't implement it — drift, with evidence
npx -y linksee-memory map affects readme # changing the README also touches docs, the CLI help, and the npm listing
→ see The Map for the full flow.
📣 As featured on
- Zenn: あなたの Claude Code、 実は前回のセッションを完全に忘れている — 73 ♡ on Zenn, 165+ users on Hatena Bookmark, picked up by tech blogs + YouTube shorts (May 2026)
- Zenn: あなたの MCP server、 実は Tools しか使ってない (5 blocks 全実装 / v0.3.0) — the 1% of MCP servers that implement all 5 blocks
- Zenn: あなたの Claude memory、 実は Claude にしか残らない (5 LLM 横断する方法) — cross-LLM memory pattern (May 12, 2026)
- Zenn: Glama listing で 3 週間止まった話 (5 つの罠と解決策) — npm + Glama deployment retrospective
「Cordex/Cursor/Code/Gemini 全部につなげられるから、 横断的にできてる MCP ってところがこれのすごいところ」 — Hatena Bookmark, May 2026 (165+ users)
🎬 See it in action
Drift, caught. Decisions don't survive session boundaries — but their consequences do. Ask any session:
You: What's drifting right now?
Agent: [calls drift_status]
28 anchors: ⚪ 1 held · 🔵 27 aligned
Needs attention:
⚪ HELD — "Focus on 4 areas: Recipe layer, agent-native API,
Japanese market, Agent Insights"
↻ Reopens 2026-07-04
Everything else is aligned — no unaccounted divergence.
The memory underneath. Drift detection only works because the why survives the session boundary:
Without linksee-memory — Monday morning, new Claude session:
You: We deployed last week but it crashed. How did we fix it?
Claude: I don't have access to previous sessions. Can you describe
what happened and walk me through the problem?
[30 minutes of log-spelunking and re-explanation]
With linksee-memory — Same question, different outcome:
You: We deployed last week but it crashed. How did we fix it?
Claude: Let me check my caveats...
🧠 [caveat] NextAuth sessions invalidate when JWT_SECRET
rotates — redeploy all affected projects in parallel.
(from session 2026-04-13, importance: 0.9)
Is this the deploy you're asking about? We hit it when
we rotated secrets mid-flow.
You: Yes, exactly. Let's not repeat that.
That single caveat memory is what separates "flat fact storage" from "the agent actually remembers the WHY". linksee-memory stores it across six explicit layers so retrieval stays explainable.
🔍 Drift Detection — "Intent Datadog"
Most teams make decisions, then forget them. The agent from last week decided "we'll use FTS5 instead of vector search" — but this week a new session installs pgvector without knowing why that was rejected. That's drift. Not a bug. Not malice. Just forgotten context.
Memory tools remember what you did. Nothing notices when you drift from what you decided — that's the layer Linksee Memory adds. Think "Datadog for product decisions": unaccounted divergences surface as drift, intentional evolution (recorded as supersede/fix) stays quiet.
How it works
- Declare decisions as anchors:
declare_anchor({ kind: "decision", statement: "We use FTS5, not vector search", violation_signal: ["pgvector", "embedding"] }) - The engine detects when committed code reality diverges from these anchors
- State derivation classifies each anchor:
- 🔴 Drift — reality diverges with no recorded resolution
- 🟡 Review — a soft signal awaits your decision
- ⚪ Held — you acknowledged the gap, parked it with a review date
- 🔵 Aligned — reality matches intent, or a recorded resolution explains the change
- Resolve with
fix,supersede,acknowledge, ordismiss— plus two gates:harden(PreToolUse will block) andsoften(back to a warning)
The make-or-break rule: a divergence accounted for by a recorded resolution (supersede/fix/acknowledge) is NOT drift. Only unaccounted gaps are flagged. This means intentional evolution stays quiet while silent abandonment gets caught.
4 種類の分類
アンカーは、表示形式の異なる 4 種類に分類されます。
| 種類 | アイコン | 表示形式 | 例 |
|---|---|---|---|
| 仮説 | 🧪 | 決定カード(ジャーナル形式) | "We'll launch English-first on HN" |
| 制約 | 🔒 | ルール(合否チェックリスト) | "All writes go through remember()" |
| コミットメント | 🔁 | ハートビート(稼働中/停止中) | "Ship a new version every week" |
| 信頼できる情報源 | 📍 | リファレンス(安定したアンカー) | "MCP server runs on stdio, single SQLite" |
🗺️ マップ — linksee-memory map
ドリフト検出(上記)は個々のアンカーを確認します。マップは対象を製品全体に広げます。ユーザーに価値が届くまでの流れ(discover → understand → try → adopt → retain → monetize → expand)と、その各要素(README、npm の掲載情報、オンボーディング、それらを支えるエンジン)間の型付き依存関係を記述した map.yaml を使います。照合ツールはこのマップを実際のコードと照合します。また、CLI を使えば、エンジニアが実際に知りたい次の問いに答えられます。
このファイルを変更しています。このファイルはマップ上のどこにあり、ほかに何を変更する必要がありますか?
1. 現在地を確認する — ファイルの場所を特定します(引数がない場合は、最近の編集内容から推測します)。
$ npx -y linksee-memory map where README.md
"README.md" belongs to this Map node:
readme [understand] convergence
changes ripple to:
must fix together (hard): lp, docs-site
should align (soft): onboarding, client-configs
fyi (may ripple): telemetry-contract
影響範囲は重要度別に分類されます。must fix together(同時に修正必須)、should align(整合させるべき)、fyi(参考情報)に分かれるため、影響が広範囲に及んでも、すべてが同じ重要度の情報として扱われることはありません。
2. なぜこの状態なのかを確認する — ファイルと行番号の根拠を添えた診断を確認します。
$ npx -y linksee-memory map explain readme
STATUS
declared: healthy (active)
reality: implemented / matches
verdict: declared and reality agree (verified)
EVIDENCE
✓ README's Tools section lists where_am_i
README.md:424 — found "where_am_i" in section "Tools"
宣言された状態と実態の判定は別々に表示されます。スキャナーが否定した手動宣言の suspect は、紛らわしい混在表示ではなく、*「suspect と宣言されているが、実態によって否定されている(→収束)」*と表示されます。
3. プロジェクト全体のトリアージ: npx -y linksee-memory map status — 健全性(%)、今すぐコードで修正可能な項目と外部チェックが必要な項目の内訳、さらに期限のない先送り項目を確認できます(これにより、「対応済み」とされた項目がいつの間にかドリフトの墓場になることを防ぎます)。
仕組み
map.yaml(リポジトリのルート)は、望ましい状態を定義する信頼できる情報源です。ジャーニーの中核 × サーフェス/実装レイヤー × 型付きエッジ(must-stay-consistent-with/should-align-with/realizes)で構成されます。reconcileは、各ノードで宣言されたrealityをコード(signal/regex/section_contains/ファイルチェック)と照合し、判定を重ねて表示します。手動で宣言した内容よりも実態が優先され、根拠も示されます。where_am_iはMCP ツールでもあるため、コーディングエージェントはタスクの途中で現在地を再確認できます。
コマンド:where · affects · explain · status · next · reconcile · inspect --json · blueprint。日本語のラベルを表示するには --lang ja を追加します。
🛡 再注入ガード — アクションの前に決定を徹底する
ドリフト検出(上記)は事後的なものです。変更が反映された後に実態が乖離したことを知らせます。再注入ガードはそのアクション前の仕組みです。エージェントが決定を破るツールを実行する前に、ロックした決定を再提示します。
この仕組みは、特定の厄介な失敗パターンを防ぐためにあります(anthropics/claude-code#15443)。*「Claude はルールを読み、理解したのに、それでも cp を使った」*というものです。ルールをコンテキストに含めるだけでは不十分です。そのため、このガードは Claude Code のフックとして、エージェントの意思とは無関係に実行されます。
| フックイベント | 発生条件 | 動作 |
|---|---|---|
PreToolUse | Edit / Write / Bash | 実行待ちのアクションを、承認済みのアンカーと照合します。gate_mode:'hard' の矛盾は拒否され、より緩やかな一致の場合は決定をリマインダーとして再注入されます。一致しない場合は何も起こりません。 |
SessionStart | startup / resume / compact | ロックした決定と未解決の分岐を新しいセッションに再適用します。新しいエージェントが先週の判断を繰り返す「毎日が同じ日のような」健忘を防ぎます。 |
これは設計上、フェイルオープンです。解析/DB/ロジックでエラーが発生しても何も表示されず、アクションは続行されます。ブロックされるのは、あなたが宣言した決定に明示的な hard の矛盾がある場合だけです。
有効にする
npx -y linksee-memory setup を実行すると、~/.claude/settings.json(ステップ 4)に設定されるため、すべてのリポジトリで有効になります。メモリが保存されるのと同じスコープです。1 つの SQLite ファイルにすべてのプロジェクトのアンカーが保存されます。リポジトリごとに適用する方式では、決定を一度宣言しても、どこにも適用されませんでした。
--project-guard— このリポジトリのみ。以前の動作です--no-guard— 適用しません
affects グロブを指定したアンカーは、一致するパスでのみ適用されます。スコープを指定していないアンカーは、それ自体の detect_terms / violation_signal に基づいて適用されます。明示的に強制モードにしない限り、何かがブロックされることはありません(resolve_drift(action:'harden'))。それ以外の場合はすべて、決定がコンテキストとして再注入されます。
手動で設定する場合は、このブロックを .claude/settings.json(プロジェクトルート、またはすべてのリポジトリに適用する場合は ~/.claude/settings.json)に追加してください。グローバルにインストールされた linksee-memory-guard バイナリを参照するため、ビルド手順は不要です。
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume|compact",
"hooks": [
{ "type": "command", "command": "npx -y linksee-memory guard", "timeout": 15 }
]
}
],
"PreToolUse": [
{
"matcher": "Edit|Write|Bash",
"hooks": [
{ "type": "command", "command": "npx -y linksee-memory guard", "timeout": 8 }
]
}
]
}
}
意図的にプロジェクト単位のスコープになっています。ガードはこのリポジトリの決定を適用するため、ツール呼び出しをあらゆる場所で拒否するのではなく、プロジェクトごとに有効にします(対照的に、セットアップで追加される Stop フックはユーザー全体に適用されます)。declare_anchor(...) で監視対象を宣言してください。アンカーの card_policy.gate_mode:'hard' を設定すると、矛盾が単なる警告ではなくブロックされます(デフォルトのソフトモードでは再注入のみが行われます)。古くなった(at_risk)、置き換えられた、またはカードが無効になっているアンカーは、ゲートとして機能しません。
linksee-memory 自体を開発していますか?このリポジトリでは、ローカルビルド(
node ${CLAUDE_PROJECT_DIR}/dist/bin/guard-hook.js)を参照する(Git で無視される).claude/settings.jsonを使ってガードを実運用しています。これにより、コミット前の変更に対して実行されます。エンドユーザーのプロジェクトでは、上記の公開済みnpx -y linksee-memory guard形式を使用してください。
できること
ほとんどの「エージェントメモリ」サービス(Mem0、Letta、Zep)は、事実を平坦なリストとして保存します。その後、エージェントが「ファイル X を 30 回編集した」という情報を見ても、その理由は分かりません。また、今週の作業が先週の決定と矛盾していることにも気づきません。linksee-memory は WHY(理由)を保持し、ドリフトを監視します。
これは、あらゆる AI エージェントに構造化メモリとドリフト検出を提供する、11 個のツールを備えた Model Context Protocol(MCP)サーバーです。
| Mem0 / Letta / Zep | Claude Code の自動メモリ | linksee-memory | |
|---|---|---|---|
| ドリフト検出 | ❌ | ❌ | ✅ 意図 ↔ 実態の乖離を追跡 |
| エージェント間での共有 | △(クラウド) | ❌ Claude のみ | ✅ 単一の SQLite ファイル |
| 6 層の WHY 構造 | ❌ 平坦 | ❌ 平坦な Markdown | ✅ goal / context / emotion / impl / caveat / learning |
| ファイル差分キャッシュ | ❌ | ❌ | ✅ AST 対応。再読み込み時のトークンを 50〜99% 節約 |
| アクティブな忘却 | △ | ❌ | ✅ エビングハウス曲線。caveat 層は保護 |
| ローカル優先/プライベート | ❌ | ✅ | ✅ |
4 つの柱
- ドリフト検出 — 決定をアンカーとして宣言すると、エンジンがコミット済みの実態と明示された意図との乖離を自動的に検出します。「プロダクトの決定に対する Datadog」のようなものです。説明のつかない乖離はドリフトとして表面化し、意図的な進化(supersede/fix として記録)は問題になりません。
- エージェント間での移植性 —
~/.linksee-memory/memory.dbにある単一の SQLite ファイルを使います。Claude Code、Cursor、Windsurf、OpenAI Codex、Gemini CLI で同じ脳を共有します。 - WHY 優先の構造化メモリ — 6 つの明示的な層(
goal/context/emotion/implementation/caveat/learning)を使います。「目標のない平坦な事実のメモリは役に立たない」という問題を解決します。 read_smartによるトークンの節約 — sha256 と AST/見出し/インデントによるチャンク分割を使います。再読み込み時には差分のみを返します。一般的な TS ファイルの編集では 86%、変更のないファイルの再読み込みでは 99% の節約を実測しています。
🧠 6 層構造
┌─────────────────────────────────────────────────────────────┐
│ 🎯 goal ← what the user is working toward │
├─────────────────────────────────────────────────────────────┤
│ 🧭 context ← why this, why now — constraints, people │
├─────────────────────────────────────────────────────────────┤
│ 💗 emotion ← user tone signals (frustration, etc.) │
├─────────────────────────────────────────────────────────────┤
│ 🛠 implementation ← how it was done (+ what failed) │
├─────────────────────────────────────────────────────────────┤
│ ⚠️ caveat ← "never do this again" · auto-protected │
├─────────────────────────────────────────────────────────────┤
│ 🌱 learning ← patterns distilled from cold memories │
└─────────────────────────────────────────────────────────────┘
│
▼
Ranked recall via relevance × heat × momentum × importance
Returns match_reasons explaining each hit
各メモリには必ず 1 つのレイヤーがタグ付けされます。caveat レイヤーの項目は自動忘却から保護されます。重要度の低い古いメモリは、サーバー起動時に自動的に統合され、learning の項目になります。
Quick Start — One Command
npx -y linksee-memory setup
This does everything:
- Registers the MCP server with Claude Code
- Installs the agent skill (teaches the agent when to recall/remember)
- Configures auto-capture (every session saved to your local brain)
- Offers to wire the re-injection guard into this project (pre-action decision enforcement)
Restart Claude Code, then just chat normally. Add "Use Linksee" to any prompt to trigger memory recall.
Manual setup (if you prefer step-by-step)
Click to expand manual installation
Install & register:
claude mcp add -s user linksee -- npx -y linksee-memory
Tools appear as mcp__linksee__remember, mcp__linksee__recall, mcp__linksee__read_smart.
Install the skill (auto-invocation):
npx -y linksee-memory install-skill
Copies SKILL.md to ~/.claude/skills/linksee-memory/. Agent auto-fires on phrases like "前に…", "また同じエラー", "覚えておいて", new task starts, file edits, etc.
Configure auto-capture (Stop hook):
Add to ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "npx -y linksee-memory sync" }
]
}
]
}
}
Each turn end takes ~100 ms. Failures are silent. Logs at ~/.linksee-memory/hook.log.
Other editors / CLIs
Linksee Memory is a standard MCP server (stdio). Any tool that speaks MCP can connect:
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"linksee": {
"command": "npx",
"args": ["-y", "linksee-memory"]
}
}
}
Restart Cursor. Memory tools appear in the agent panel.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"linksee": {
"command": "npx",
"args": ["-y", "linksee-memory"]
}
}
}
OpenAI Codex CLI
codex mcp add linksee -- npx -y linksee-memory
Or add to ~/.codex/config.toml:
[mcp_servers.linksee]
command = "npx"
args = ["-y", "linksee-memory"]
Gemini CLI
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"linksee": {
"command": "npx",
"args": ["-y", "linksee-memory"]
}
}
}
Claude Desktop
Add the same stdio command to claude_desktop_config.json:
{
"mcpServers": {
"linksee": {
"command": "npx",
"args": ["-y", "linksee-memory"]
}
}
}
Config file: macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\. Restart Claude Desktop.
All editors share the same ~/.linksee-memory/memory.db. A decision made in Claude Code is recalled in Cursor. A caveat recorded in Windsurf prevents the same mistake in Codex.
Database location
Default: ~/.linksee-memory/memory.db. Override with LINKSEE_MEMORY_DIR env var.
Uninstall
# 1. Remove the MCP server registration
claude mcp remove linksee
# 2. Remove the hooks from settings.json (edit the file, delete the linksee entries):
# ~/.claude/settings.json → the Stop hook running "npx -y linksee-memory sync"
# <project>/.claude/settings.json → the SessionStart/PreToolUse hooks running "npx -y linksee-memory guard"
# 3. Remove the installed skill and all local memory (optional)
rm -rf ~/.claude/skills/linksee-memory
rm -rf ~/.linksee-memory # deletes all stored memory — nothing is kept anywhere else
Nothing ever leaves your machine, so step 3 fully erases everything Linksee stored.
What's new in v0.9
| Feature | Detail |
|---|---|
| Re-injection guard | The pre-action half of drift detection. A Claude Code PreToolUse hook re-surfaces (or, on a hard contradiction, blocks) an accepted decision before the agent runs Edit/Write/Bash; a SessionStart boot digest replays your locked decisions into each fresh session. Fail-open by design. See Re-injection Guard. |
| Shippable hook wiring | linksee-memory-setup now offers to merge the guard hooks into your project's .claude/settings.json (pointing at the published linksee-memory-guard bin), and the block is documented for copy-paste. Previously the wiring lived only in a gitignored dogfood config. |
v0.8 の新機能
| 機能 | 詳細 |
|---|---|
| 4 つのドリフト検出ツール | drift_status、check_decision、declare_anchor、resolve_drift — エージェントが意図と現実の乖離を確認し、対処できるようになりました。エージェントのメモリにおける最大の課題(セッションをまたぐと決定事項が忘れられる問題)が解消されました。 |
| トゥルースエンジン | 状態の導出ロジック(ドリフト/レビュー/保留/整合)が、ダッシュボードだけでなく MCP エンジンにも実装されました。どの MCP クライアントからもドリフトの状態を確認できます。 |
| 4 種類の分類体系 | アンカーを仮説/制約/コミットメント/信頼できる情報源に分類し、それぞれの種類に適した形式で表示します。 |
| 解決の優先順位 | 1 つのアンカーに複数の解決策がある場合、最新のものが優先されます(古い確認が新しい修正を覆い隠すのを防ぎます)。 |
v0.7 の新機能
| 機能 | 詳細 |
|---|---|
| 3 つのツールに統合したインターフェース | ツールを 8 つから 3 つに統合しました。remember(作成+更新+削除)、recall(検索+ファイル履歴+概要)、read_smart(トークン節約型の読み取り)です。ツールが少ないほど、LLM 間の一貫性が高まります。Context7 で実証されたパターンを採用しています。 |
| 自動統合 | サーバー起動時に統合が自動的に実行されます(ノンブロッキング、7 日間のしきい値)。手動で consolidate() を呼び出す必要はありません。 |
| 非推奨機能の移行ガイド | 古いツール名(forget、recall_file など)を使うと、何も通知せずに失敗するのではなく、具体的な移行例が返されます。 |
| 「Use Linksee Memory」トリガー | 任意のプロンプトに「Use Linksee Memory」を追加すると、メモリの呼び出しを強制できます。Context7 と同じ導入パターンです。 |
| Claude Code プラグイン | claude plugin add -- linksee-memory — MCP サーバーと自動呼び出しスキルを 1 回のインストールで導入できます。 |
v0.4 の新機能
| 機能 | 詳細 |
|---|---|
| 1 コマンドでのセットアップ | npx -y linksee-memory setup — MCP サーバーの登録、スキルのインストール、自動キャプチャフックの設定を行います。3 つのコマンドの代わりに 1 つのコマンドで完了します。 |
| 構造化メモリ v2 | すべてのメモリを 3 軸(高度×種類×状態)で分類します。セッションからの自動抽出により、生のチャットログではなく、機械で読み取れる JSON が生成されます。 |
| 高精度な想起ガイド | SKILL.md では、効果的なクエリの書き方、想起する場合と省略する場合、リスクのある操作の前に注意点を先回りして提示する場合を、エージェントに指示するようになりました。 |
| 5 つの MCP プリミティブ | ツール+リソース+プロンプト+サンプリング+ルート+エリシテーション。多くの MCP サーバーが公開するのはツールだけですが、linksee-memory は 5 つすべてのプリミティブを実装しています。 |
2 つの柱を、ひとつのインターフェースで。Memory と drift はそれぞれ必要最小限だけを提供し、それ以外は公開しません。 11 個のツールでは Claude / GPT / Cursor / Codex / Gemini ごとに異なる動作が混在していました。6 個なら、マニュアルなしでもエージェントが扱えます。
| ツール | 機能 |
|---|---|
recall | ここから始めます。 引数なしの場合はセッション概要を返します。注意が必要なこと、Map 上の現在地、未解決の項目、主なエンティティを確認できます。query → 検索、path → ファイルの編集履歴と各編集の背後にあるユーザーの意図、where: "<topic>" → Current Truth Map 上の位置と影響範囲、dream: true → トリアージセッション(North Star、孤立した提案、整理キュー、摩擦)。 |
remember | 保存/更新/削除します。 必須フィールドは content のみで、エンティティとレイヤーは現在のプロジェクトがデフォルトになります。anchor: {} を追加すると、1 回の呼び出しで決定を記録し、適用できます(編集/書き込み/Bash の前とセッション開始時に再注入されます)。 |
read_smart | AST 差分キャッシュを備えたトークン節約型のファイルリーダーです。変更されていないファイルの再読み込みは約 50 トークンで、変更がある場合は変更されたチャンクのみを読み込みます。 |
drift_status | 「今、何がずれていますか?」 真実マップを返します:🔴 drift / 🟡 review / ⚪ held / 🔵 verified / ⚫ unverified。各項目の根拠も表示します。anchor_id → ひとつの決定を詳しく確認します。 |
declare_anchor | 規範的な主張を記録します — 検出器が現実と照合する decision / prohibition / constraint、または proposal:提示したもののユーザーが反応しなかった選択肢を、レビュー項目として保留します。 |
resolve_drift | 未解決の項目に決着をつけます。 fix · supersede · acknowledge · dismiss(hit_term を指定すると、それに対するゲートの起動を停止します)· harden / soften。candidate_id を指定すると、孤立した提案を surface または dismiss できます。 |
以前の 5 つの名前 — where_am_i、check_decision、flag_proposals、dream、
resolve_proposal — は上記 6 つに統合されました。tools/list には表示されませんが、呼び出せば引き続き応答するため、以前のバージョンを対象に作られたスキルやエージェントも引き続き動作します。
LINKSEE_LEGACY_TOOLS=1 を設定すると一覧に表示されます。
CLI ユーティリティ
| コマンド | 用途 |
|---|---|
npx -y linksee-memory setup | 1 コマンドでセットアップ:すべてのリポジトリに MCP サーバー + スキル + Stop フック + 再注入ガードを設定します(このリポジトリだけに設定するには --project-guard、スキップするには --no-guard)。冪等性があり、設定済みの項目はスキップします。 |
npx linksee-memory | MCP サーバー(stdio) |
npx -y linksee-memory sync | Claude Code の Stop フックのエントリーポイント |
npx -y linksee-memory guard | 再注入ガードフック:PreToolUse ゲート(Edit/Write/Bash)+ SessionStart ブートダイジェスト。すべてのリポジトリで setup によって設定されます(再注入ガードを参照)。フェイルオープンです。 |
npx -y linksee-memory import | Claude Code のセッション JSONL 履歴を一括インポート |
npx -y linksee-memory install-skill | recall/remember/read_smart を呼び出すタイミングをエージェントに教える Claude Code Skill をインストール |
npx -y linksee-memory stats | ローカル DB の概要(エンティティ数/レイヤー別内訳/主なエンティティ/編集回数の多いファイル)。機械可読な出力には --json を追加します。 |
6 つのメモリレイヤー
各エンティティ(人物/会社/プロジェクト/ファイル/概念)は、6 つのレイヤーにまたがるメモリを持てます。v0.4 以降、各メモリには3 軸構造化フォーマット(altitude × type × state)が使われます:
{
"title": "freee OAuth token expires in 24h",
"altitude": "implementation",
"type": "outcome",
"state": "done",
"what": "freee OAuth token expires in 24 hours. Must refresh proactively.",
"why": "freee uses short-lived tokens unlike most SaaS (usually 30-90 day expiry)",
"affects": ["src/integrations/freee/auth.ts"],
"next_action": null
}
caveatメモリは、忘却から自動的に保護されます(痛みを伴う学びであり、決して失われません)。goalメモリは、目標が有効な間、減衰を回避します。stateはライフサイクルを追跡します:open→decided→in_progress→done/stalled/superseded。
アーキテクチャ
単一の SQLite ファイル(better-sqlite3 + 日本語/英語向け FTS5 トライグラムトークナイザー)に、5 つのレイヤーを格納します。
- レイヤー 1 —
entities(事実:人/企業/プロジェクト/概念/ファイル) - レイヤー 2 —
edges(関連付け、グラフの隣接関係) - レイヤー 3 —
memories(エンティティごとの 6 層構造化された意味) - レイヤー 4 —
events(ヒート/勢いの算出に使う時系列ログ) - レイヤー 5 —
file_snapshots+session_file_edits(差分キャッシュ + 会話↔ファイルの関連付け)
会話↔ファイルの関連付けが鍵です。Stop フックで取得されたすべてのファイル編集は、編集を促したユーザーメッセージとともに保存されます。そのため、recall({ path: "server.ts" }) を実行すると、「このファイルは 3 日間で 30 回編集され、各変更のきっかけとなった実際のユーザー指示はこちらです」という情報が返されます。
設計上の選択理由
- ローカル優先 — 会話履歴はプライベートです。情報がマシンの外に出ることはありません。
- 単一ファイル —
memory.dbは持ち運び可能な単一のファイルです。バックアップはファイルをコピーするだけです。 - MCP stdio — MCP に対応するすべてのエージェントで動作し、ホストごとにプラグインを導入する必要はありません。
- 実績あるスキーマの再利用 —
heat_score/momentum_scoreは、本番環境のセールスインテリジェンス用コードベースから移植されています。ルールベースで、ホットパスに LLM への依存はありません。
ロードマップ
- ✅ 3 つのツールに統合されたインターフェイス(remember / recall / read_smart) — v0.7.0
- ✅ サーバー起動時の自動統合 — v0.7.0
- ✅ Claude Code プラグイン(
claude plugin add -- linksee-memory) - ✅ 5 つの MCP ブロック(ツール + リソース + プロンプト + サンプリング + ルート + エリシテーション)
- ✅ Claude Code 向け Stop フックによる自動取得
- ✅ 日本語/英語のトライグラム FTS5
- ✅ ワンコマンドセットアップ(
npx -y linksee-memory setup) - ✅ 構造化メモリー v2(3 軸分類:高度 × 種別 × 状態)
- ✅ LLM 横断対応:Claude Code、Cursor、Windsurf、OpenAI Codex、Gemini CLI
- ✅ ランディングページ(linksee.app)
- ✅ ドリフト検出エンジン + 4 つの MCP ドリフトツール — v0.8.0
- ✅ 4 種類の真実マップ(hypothesis/constraint/commitment/source_of_truth)— v0.8.0
- ✅ 意思決定レジスターを可視化するダッシュボード
- 🔮 Obsidian プラグイン(Vault 内の真実マップを参照)
- 🔮
sqlite-vecによるベクトル検索(依存関係には追加済み。埋め込みバックエンドは準備中) - 🔮 デバイス間のクラウド同期(Pro ティア)
Claude Code の自動メモリーとの比較
Claude Code には、~/.claude/projects/<path>/memory/*.md に組み込まれたメモリー機能があります。これはユーザーの好みを記録するフラットな Markdown メモです。linksee-memory は、これを補完します。
- 自動メモリー =「X を好むことを覚えておいて」という内容を記録するスクラップブック
- linksee-memory = ファイル差分キャッシュと編集ごとの理由を備えた、エージェント間で共有できる構造化された脳
両方をお使いください。
セキュリティとプライバシー
linksee-memory はローカルで動作し、読み取りと送信をできる限り少なくするように設計されています。
- ローカルファーストです。 メモリは
~/.linksee-memory/memory.dbにある 1 つの SQLite ファイルです。アカウント、クラウド、API キーは必要ありません。 - テレメトリはオプトイン方式で、デフォルトでは OFF です。
setupで一度だけ確認します。同意するか、LINKSEE_TELEMETRY=basicを設定しない限り、何も送信されません。同意した場合も、ソースコード、ファイル内容、プロンプト、会話、エンティティ名/プロジェクト名、メモリ DB は送信されず、匿名のカウンターのみが送信されます(詳細)。 - リポジトリを自動的にクロールしません。 linksee が読み取るのは、明示的に保存したメモリ、
map.yaml、マップの整合性チェックで指定されたファイル、ローカルの SQLite DB、そして Stop フックの実行時に、何が起きたかを記録するためにローカルで読み取る Claude Code セッションのトランスクリプトです。リポジトリをクロールしたり、.env/シークレット/node_modulesを読み取ったり、独自にホームディレクトリにアクセスしたりすることはありません。 - クリーンな MCP トランスポートです。 サーバーは stdout に JSON-RPC のみを書き込み、ログはすべて stderr に出力します。
- フックの動作は文書化されており、削除できます。
setupは Stop フック(セッションの記録)と、任意のガードフックを追加します。デフォルトではネットワーク通信を行わず、実行時間に上限があり、フェイルオープン方式です(フックのエラーでセッションが中断されることはありません)。フックの一覧はアンインストールに記載されています。 - シェルインジェクションの攻撃対象がありません。 サブコマンドは固定の許可リストから
shell: falseと配列引数を使ってspawnで実行します。map.yamlの解析には、安全なyamlパーサーを使用します(任意のタグが実行されることはありません)。 - サプライチェーンです。 MIT ライセンスで、単一の所有者から公開されています。
npx -y linksee-memoryは公開済みパッケージを実行します。再現性が必要な場合は、CI でバージョンを固定してください。
セキュリティ上の問題を発見しましたか?SECURITY.md をご覧ください。
テレメトリ(オプトイン、デフォルトではオフ)
linksee-memory には、実際の環境でどの MCP サーバーやワークフローが機能しているかを把握するための、オプトイン方式の匿名テレメトリが含まれています。明示的に有効にしない限り、何も送信されません。 会話内容、ファイル内容、エンティティ名、プロジェクトのパスは一切送信されません。
有効にする
export LINKSEE_TELEMETRY=basic # opt in
export LINKSEE_TELEMETRY=off # opt out (or just unset the variable)
# `linksee-memory setup` also asks once and records your choice in
# ~/.linksee-memory/telemetry-consent (delete that file to be asked again).
送信される内容の詳細(レベル 1 の仕様)
Claude Code の各セッション終了後、Stop フックは https://linksee-site.vercel.app/api/telemetry/linksee に POST を 1 回送信します。送信されるフィールドは次のものだけです。
| フィールド | 例 | 内容 |
|---|---|---|
anon_id | d7924ced-3879-… | オプトイン時にローカルで生成されるランダムな UUID です。~/.linksee-memory/telemetry-id に保存されます。ファイルを削除するとリセットできます。 |
linksee_version | 0.0.3 | パッケージのバージョン |
session_turn_count | 120 | セッションのターン数 |
session_duration_sec | 3600 | セッションの継続時間 |
file_ops_edit/write/read | 12, 2, 40 | 件数のみ |
mcp_servers | ["kansei-link","freee","slack"] | 設定されている MCP サーバーの名前(~/.claude.json から取得)。名前のみで、コマンドのパスは送信されません。 |
file_extensions | {".ts":60,".md":30} | 変更されたファイルの拡張子の割合 |
read_smart_*, recall_* | counts | ツールの使用回数 |
送信されることは決してない情報:
- ❌ 会話メッセージ(ユーザーまたはアシスタント)
- ❌ ファイルの内容
- ❌ エンティティ名、プロジェクト名、ファイルパス、URL
- ❌ メモリレイヤーのテキスト(goal / context / emotion / impl / caveat / learning)
- ❌ 認証トークン、API キー、シークレット
- ❌ IP アドレス(不正利用の検出には、一方向ハッシュのみを使用します)
お尋ねする理由
集計された MCP の利用データは、KanseiLink プロジェクトが、実際の開発者にとってどのエージェント連携が機能するかを判断するのに役立ちます。データ提供にご協力いただける場合は、LINKSEE_TELEMETRY=basic を設定するだけで 1 秒で完了し、MCP エコシステム全体の改善につながります。
ペイロードの完全なスキーマと検証ロジックはオープンソースです。マシンから送信される内容を正確に確認したい場合は、src/lib/telemetry.ts をご覧ください。
料金
永久に無料です。
linksee-memory はローカルファーストで、すべてお使いのマシン上で動作します。料金が発生するホスト型のコンポーネントはありません。SQLite DB はホームディレクトリに保存されます。バックアップはファイルをコピーするだけです。
アカウントも、クレジットカードも、API キーも不要です。インストールするだけですぐに使えます。
トラブルシューティング
スキルが起動しません。過去の作業について尋ねても、Claude Code が recall を呼び出しません。
- スキルがインストールされていることを確認します。
インストールされていない場合は、ls ~/.claude/skills/linksee-memory/SKILL.mdnpx -y linksee-memory install-skillを実行します。 - Claude Code を再起動します。スキルはセッション開始時にインデックス化されます。
- MCP が
linkseeという名前で登録されていることを確認します(スキルはmcp__linksee__*というツール名を想定しています)。
別の名前で登録されている場合は、再登録するか、claude mcp list | grep linksee~/.claude/skills/linksee-memory/SKILL.mdを編集して名前を合わせます。
Stop フックでセッションが記録されません。
- フックのログを確認します。
cat ~/.linksee-memory/hook.log - 手動でテストを実行します。
echo '{"session_id":"test","transcript_path":"/path/to/some.jsonl"}' | npx -y linksee-memory sync ~/.claude/settings.jsonのStopフックがnpx -y linksee-memory syncを参照していることを確認します(古い-importではありません)。
v0.0.5 以前からアップグレードしたところ、記憶の大半に「Card_Navi」またはプロジェクトディレクトリ名がタグ付けされています。
v0.0.6 以降では、すべての記憶がセッション開始時の cwd にまとめられてしまうエンティティ検出のバグが修正されています。既存の履歴を正しいプロジェクト情報で再インデックス化するには、次を実行します。
npx -y linksee-memory import --all
インポーターは冪等です(再挿入する前に既存のセッションデータを消去します)。セッション数百件の場合、通常は数分かかります。その後、recall の精度が大幅に向上します。
recall の結果が多すぎて、コンテキストウィンドウがすぐにいっぱいになります。
max_tokens を減らします。
recall({ query: "...", max_tokens: 800 }) // default is 2000
または、entity_name と layer で絞り込みます。
recall({ query: "...", entity_name: "my-project", layer: "caveat" })
すべての記憶をリセット/削除するにはどうすればよいですか?
rm -rf ~/.linksee-memory # nuke everything; next run creates a fresh DB
または、remember({ forget: true, memory_id: <id> }) で個別の記憶を削除できます。
DB が大きくなっています(100 MB 超)。サイズを小さくするにはどうすればよいですか?
統合はサーバーの起動時に自動的に実行されます(7 日間のしきい値)。古くて参照頻度の低い記憶をクラスタリングし、圧縮した学習レイヤーの要約にまとめます。ただし、注意事項レイヤーとアクティブな目標レイヤーは常に保持されます。
手動で統合を実行するには、MCP サーバーを再起動します。自動統合は起動のたびに実行されます。
よくある質問
ドリフト検出とは何ですか?なぜ必要なのですか?
ドリフトとは、コードの実態が、決定した内容から気付かないうちに乖離することです。例:先週「ベクトル検索ではなく FTS5 を使う」と決めたのに、今週、新しいエージェントのセッションが過去の経緯を知らずに pgvector をインストールしてしまうケースです。
Linksee Memory では、決定を「アンカー」として宣言し、コミットされたコードがそれらに反していないかを自動的に確認することで、これを追跡します。成否を分けるルールは、**意図的な変更(修正/置き換えとして記録されたもの)は問題にならず、説明のない乖離にはフラグが付くことです。**サーバーのメトリクスではなく、プロダクトの決定を対象とした Datadog のようなものです。
linksee-memory のメリットを得るために、ドリフト検出を使う必要はありません。3 つの記憶ツール(remember/recall/read_smart)は単独で動作します。ドリフトツールは、複数のプロジェクトを管理するチームや個人開発者向けの追加レイヤーです。
Mem0 / Letta / Zep とは何が違うのですか?
3 つの軸: 1. **ローカルファースト**:これらのツールはクラウドアカウントを必要とし、データを各社のサーバーに送信します。linksee-memory はすべてお使いのマシン上で動作します。SQLite ファイル 1 つだけを使用し、デフォルトではネットワーク通信を行いません。 2. **WHY を階層化**:これらのツールは、フラットな事実やナレッジグラフのノードを保存します。linksee-memory は 6 つの明示的なレイヤー(`goal`/`context`/`emotion`/`implementation`/`caveat`/`learning`)を備えているため、検索結果としてデータだけでなく、構造化された推論が返されます。 3. **ファイル差分キャッシュ**:`read_smart` ツールは AST を考慮したチャンク分割によって、ファイルの再読み込み時のトークンを 86〜99% 節約します。これを実現するメモリサービスはありません。これは通常 IDE に搭載される機能です。Claude の組み込み自動メモリを使うだけではだめですか?
Claude Code の自動メモリは Claude 専用です(Cursor、OpenAI Codex、Gemini CLI に切り替えた場合は役に立ちません)。また、構造のないフラットな Markdown を保存します。linksee-memory は同じローカルファーストの原則に基づいていますが、次の点が異なります。
- Claude Code、Cursor、OpenAI Codex、Gemini CLI で共有の SQLite を使って動作します
- 6 層の構造化形式により、記憶の呼び出し根拠を説明できます
- 起動時に自動統合によって、しばらく使われていない記憶を圧縮します。注意事項は常に保護されます
トークンを 86% 節約できるというのは本当ですか?どのように実現していますか?
はい。リポジトリ内の tools/bench-read-smart.ts をご覧ください。read_smart ツールは次のように動作します。
- 初回読み込み時にファイル内容をハッシュ化し、全内容とチャンクのメタデータ(AST/見出し/インデントの境界)を返します。
- mtime と sha256 が変わっていないファイルを再読み込みする場合、ファイルを再送信する代わりに「変更なし」の確認として
~50 tokensを返します。 - 実際に編集されている場合は、変更されたチャンクを全内容で返し、変更されていないチャンクはメタデータのみの参照として返します。
エージェントのループで一般的な TypeScript ファイルを編集する場合、往復のトークンコストを約 86% 削減できます。純粋な再読み込み(ユーザーが以前読んだファイルに戻る場合)では、節約率は 99% を超えます。
「ローカルファースト」だと、マシン間で同期する方法はありませんか?
デフォルトでは同期しません。SQLite ファイルは ~/.linksee-memory/memory.db に保存され、その場所にとどまります。複数のマシン間で同期したい場合は、そのディレクトリを Syncthing/iCloud Drive/Dropbox/Google Drive の配下に置いてください。単一ファイルなので、どのファイル同期ツールでも使えます。(両方のマシンで MCP サーバーを起動したまま、同時に編集するのは避けてください。SQLite の WAL モードは単一の書き込み元には適していますが、複数の書き込み元による競合でデータが破損する可能性があります。)
データベースが巨大になったらどうなりますか?
次の 2 つの仕組みがあります。
- エビングハウスの忘却:重要度が低く、長期間使われていない記憶は自然に減衰し、自動削除の対象になります。
caveatレイヤーとimportance ≥ 0.9の記憶は常に保護されます。 - 自動統合:サーバー起動のたびに実行されます(しきい値は 7 日です)。重要度が低く、長期間使われていない記憶のまとまりをエンティティごとに 1 つの
learningレイヤーの要約に圧縮し、元の記憶を削除します。手動で実行をスケジュールする必要はありません。
実際には、個人開発者が集中的に使用すると、6 か月で約 100MB になります。私が試した、80K 件の記憶がある 1 年前のデータベースでも、10 ミリ秒未満で呼び出せます。
Claude Code なしでも使えますか?
はい。MCP 互換のクライアントであれば、どれでも使えます。
- Claude Code:
claude mcp add -s user linksee -- npx -y linksee-memory - Claude Desktop:
claude_desktop_config.jsonに追加します(LP のオンボーディングを参照) - Cursor:Cursor の MCP 設定に追加します(Cursor → Settings → Features → Model Context Protocol)
- OpenAI Codex:
codex mcp add linksee -- npx -y linksee-memoryを実行します(または[mcp_servers.linksee]ブロックを~/.codex/config.tomlに追加します) - Gemini CLI:
~/.gemini/settings.jsonの mcpServers セクションに追加します - ChatGPT(Web/モバイルアプリ):一般向けアプリは stdio MCP に対応していません。HTTPS 経由のリモート MCP サーバーが必要です(現在はまだ利用できません)。
- カスタムエージェント:MCP stdio プロトコルの仕様は modelcontextprotocol.io にあります
どのようなテレメトリを送信しますか?
**デフォルトでは、ネットワーク呼び出しもテレメトリーもゼロです。** 有効にできるオプションのレベル1テレメトリーモードがあり、匿名化された集計メトリクス(ツール呼び出し数、エラー率、レイテンシのパーセンタイルなど)を送信します。メモリーの内容、ファイルパス、クエリは一切送信しません。送信されるペイロードの正確なスキーマは[テレメトリーのセクション](#telemetry-opt-in-off-by-default)に記載されており、オプトインする前にすべてのバイトを確認できます。実際に動作していることを確認するにはどうすればよいですか?
インストール後、新しいClaudeセッションで次のように尋ねてください。「JavaScriptよりTypeScriptが好きだと覚えておいてくれますか?Linksee Memoryを使ってください。」 Claudeはmcp__linksee__rememberを呼び出して記憶したことを確認するはずです。その後、別のセッションで次のように尋ねてください。「私が好む言語は何ですか?Linksee Memoryを使ってください。」 mcp__linksee__recallを使って思い出し、理由を示すmatch_reasonsとともに好みを返すはずです。
サポート
- 問題とバグ報告:github.com/michielinksee/linksee-memory/issues
- 機能リクエスト:
enhancementラベルを付けてissueを作成してください - セキュリティ上の懸念:SECURITY.mdがある場合はそちらを確認するか、GitHubで非公開のアドバイザリを提出してください
- 会社:Synapse Arrows PTE. LTD.(シンガポール)
変更履歴
v0.11.3 — 堅牢性の向上とMCPの衛生管理(2026-06-16)
- 破損データベースからの復旧:
~/.linksee-memory/memory.dbが読み取れない場合、linkseeはクラッシュして生のSQLiteエラーを表示する代わりに、ファイルをmemory.db.corrupt-<timestamp>として保持し、わかりやすいメッセージとともに新しいデータベースを作成します。古いメモリーはバックアップから復元できます。 recallツールの説明から、システムプロンプトの編集を提案する記述を削除し、MCPの規範に沿ったものにしました。
v0.11.2 — 初回起動時の堅牢性をさらに強化(2026-06-16)
- 新しいデータベースで
statsを実行してもno such tableでクラッシュせず、最初にスキーマを作成します(新規ユーザーが最初に実行するコマンドになる可能性があります)。 - **
map --help**は、マップをインポートしようとせずに使用方法を表示します。
v0.11.1 — 初回起動時の修正(2026-06-16)
- パッケージ名を使ってCLIを実行:
npx -y linksee-memory setup(およびmap、sync、guard、stats、import、install-skill)。新規ユーザーはnpx経由でスタンドアロンのbin(linksee-memory-setupなど)を実行できませんでした。npxが解決するのはパッケージ名であり、同じパッケージ内の別のbin名ではないため、ワンコマンドインストールが404になっていました。メインのbinがサブコマンドをディスパッチするようになり、スタンドアロンのbinはエイリアスとして引き続き利用できます。 mapはmap.yamlがまだない場合、次の手順を示すメッセージを表示して正常に終了します(以前は初回利用時に生のスタックトレースが表示されていました)。- serverInfoが実際のパッケージバージョンを報告するようになりました(以前は古い文字列に固定されていました)。
v0.11.0 — マップ:where_am_i + linksee-memory map(2026-06-15)
メモリーが入り口となり、プロダクトマップが新たな操作画面になります。 ドリフト検出は個々のアンカーから発展し、CLIからたどれるプロダクト全体のマップになりました。
where_am_i(11番目のMCPツール)— Current Truth Map上で現在のトピック/ファイルを特定し、その影響範囲を取得します。引数なしで呼び出すと、最近の編集内容から自動的に場所を特定します。linksee-memory mapCLI —where·affects·explain·status·next·reconcile·inspect --json·blueprint。map.yaml(Gitを信頼できる唯一の情報源とする)が、ユーザーに価値が届く仕組みを記述します。リコンサイラーはファイルと行の根拠を使って、コードとの整合性を確認します。バイリンガル対応:--lang jaを追加してください。- 段階評価された影響範囲(
must fix together/should align/fyi)、宣言と実態の判定、および把握済みドリフトを対象とするアンチ・グレイブヤードガード。 - プロジェクトごとのキーにより、マップで複数のプロジェクトを同時に扱えます。
v0.8.0 — Drift Detection MCP Tools (2026-06-08)
3 tools → 7 tools. The biggest update since launch — agents can now detect, query, and resolve intent ↔ reality drift.
New tools:
drift_status— returns the truth map with 4-species classification and per-node drift statecheck_decision— deep-dive into a single anchor: state, edges, pending candidatesdeclare_anchor— record a decision/constraint/prohibition as a truth-map node (with v9 ProjectCoreNode fields)resolve_drift— close the feedback loop: fix / supersede / acknowledge / dismiss
New engine module:
truth-engine.ts— state derivation logic migrated from the dashboard into the MCP engine. Any MCP client can now query drift status without a dashboard.- Resolution priority fix: when multiple resolutions reference the same anchor, the most recent one wins (by
resolved_attimestamp). Prevents a stale acknowledge from shadowing a newer fix. - 4-species classification: nodes classified by
decision_modeinto hypothesis / constraint / commitment / source_of_truth with display format guidance.
No breaking changes to existing memory tools. All 3 memory tools (remember, recall, read_smart) are unchanged.
v0.7.2 — Recall ergonomics + auto-edge detection + classifier precision (2026-05-30)
Quality pass on v0.7.0 / v0.7.1 — sharper day-to-day agent UX and cleaner data for the dashboard:
recalltoken discipline: drops the redundantcontent_rawfrom the response (parsedcontentwas already there — it was a 2× duplicate), and actually enforcesmax_tokensby greedy assembly that measures real serialized size (was a flat ~100 tok/memory estimate). Addsapprox_tokensto the response so the agent can see its budget usage. The same query that previously returned ~15,800 tokens for a 1200 budget now stays inside it.recallprecision: near-duplicate memories — same entity + near-identical core text, e.g. the same message captured under bothgoalandlearning— collapse to one in the result set. Composite weights adapt to query specificity: multi-term queries weight relevance higher so off-topic-but-pinned memories don't crowd narrow recalls.- Capture dedup (write side):
session-extractornow produces AT MOST one memory per user turn, with prioritygoal[first_intent] > caveat > decision > context. A first-intent message containing decision words (e.g. "決めた" / "これで進めよう") is no longer double-saved as bothgoalandlearning. memory_edgesauto-detection: the previously-emptymemory_edgestable is now populated during the sleep-mode consolidation sweep.detectMemoryEdges()links a later DECISION memory to the most-recent earlier same-topic decision within an entity (chain, not clique) so the dashboard can render Pivot Chains. The default relation isextends— a same-topic later decision builds on, but does NOT deactivate, the earlier one. Explicit reversal markers (やめる / revert / instead of) producecontradicts; explicit replacement markers (の代わり / replaces / deprecate) producesupersedes. Prevents silent deactivation of still-valid decisions.inferType/inferStateprecision: chitchat acknowledgements ("そうだね" / "ありがとう"), pasted terminal/git/email content, and meta-noise no longer classify asdecision— they returnnote/openbefore pattern matching. The learning-layer default →decisionis gated by this guard. Real decisions (採用 / 決めた, even after an acknowledgement opener) survive.
No schema migration, no breaking API changes. Existing rows keep their stored content; the classifier improvements apply to new captures going forward.
v0.7.1 — レビュー修正(2026-05-29)
v0.7.0 の Opus 4.7 デザインレビューに基づく変更:
- P0 — 必須パラメーターのガイダンス:
rememberツールの説明に「モード別の必須パラメーター」セクションを追加し、LLM が作成・更新・削除それぞれで必要なフィールドを正確に把握できるようになりました。 - P0 — 移行ガイダンス:非推奨のツール名(
forget、recall_fileなど)を呼び出すと、一般的なエラーではなく、具体的な移行例を返すようになりました。 - P1 — recall のパスとクエリの結果を統合:
recallにpathとqueryの両方を指定した場合、ファイル履歴とメモリー検索の結果が単一の応答に統合されます。 - P2 — 自動統合の安全性:クエリを実行する前に
sqlite_masterでテーブルの存在を確認し、新規データベースでconsolidationsテーブルが見つからずエラーになるのを防ぎます。
v0.7.0 — 3 ツールの統合インターフェース(2026-05-29)
8 ツールから 3 ツールへ。 Context7 で実証された「ツールが少ないほど、LLM 間の一貫性が向上する」というパターンに従っています。
破壊的変更:以下のツールは MCP のインターフェースから削除されました。呼び出すと移行ガイドが返されます。
| 旧ツール | 新しい代替手段 |
|---|---|
forget | remember({ forget: true, memory_id: <id> }) |
update_memory | remember({ memory_id: <id>, content: "..." }) |
recall_file | recall({ path: "server.ts" }) |
list_entities | recall({})(パラメーターなし=エンティティの概要) |
consolidate | サーバー起動時に自動実行(7 日のしきい値) |
新しい統合ツール:
remember— 作成・更新・削除を 1 つのツールで実行します。モードはパラメーターから推定されます。recall— 検索・ファイル履歴・概要を 1 つのツールで実行します。モードはパラメーターから推定されます。read_smart— 変更はありません。
その他の変更:
- サーバー起動時に自動統合(ブロッキングしない
setTimeout、7 日のしきい値、sqlite_masterによる安全性チェック) - Claude Code Plugin バンドル(
claude plugin add -- linksee-memory) - 非推奨に関するエラーに具体的な移行例を追加
内部のハンドラー関数はすべて維持されています。これはインターフェースの変更であり、ロジックを書き換えるものではありません。
v0.2.0 — 英語優先のローンチに向けた準備(2026-04-20)
Reddit、Hacker News、Anthropic Discord の、より幅広い(主に英語圏の)ユーザーに向けてパッケージを準備しました。API の破壊的変更はありません。
SKILL.mdのバイリンガル化(自動呼び出しスキル)。linksee-memory-install-skillが~/.claude/skills/linksee-memory/SKILL.mdにコピーする同梱スキルは日本語優先でしたが、インラインの日本語トリガーフレーズを維持しつつ、英語優先になりました。英語話者も、既存の日本語トリガーに加え、自然な英語のフレーズ(「how did we solve this before?」、「same error again」、「remember this」)でスキルを呼び出せるようになりました。- install-skill CLI の出力をバイリンガル化:インストール後に表示されるテストフレーズの例に、英語と日本語の両方が含まれるようになりました。
- Session-extractor の英語対応(
linksee-memory-import):判断、失敗、注意事項を検出する正規表現パターンを拡充し、英語の Claude Code セッションログにも正しく自動タグ付けできるようになりました。追加された表現には、let's go、pivot、switch to、settled on、approved、doesn't work、stuck、same error again、hit an error、debug、broke、revertが含まれます。 - 注意事項を忘却しようとした際のエラーヒントを明確化:以前のメッセージでは「先に重要度を 0.9 未満に下げてから忘却してください」と案内していましたが、注意事項レイヤーのメモリーは重要度にかかわらず恒久的に保護されるため、誤解を招いていました。ヒントで、レイヤーによる保護とピンによる保護を正しく区別するようになりました。
- ローンチに向けて README を改訂:導入前後のシナリオを示す「実際の動作を見る」セクション、ASCII 形式の 6 層図、MCP Official Registry と Glama のスコアバッジ、ランディングページへのリンク、一般公開時によく寄せられる質問を扱う 8 項目の FAQ を追加しました。
- 内部変更:英語のワークフロー例として、KanseiLink スキルとの併用を SKILL.md に記載しました。
MCP プロトコルのインターフェースにコード変更はありません。既存の MCP クライアントはすべて、これまでどおり動作します。
v0.1.1 — ピン留めしきい値の調整(2026-04-19)
実際の使用において、意図に反して importance=0.95 のメモリが
ピン留めとして扱われていないというフィードバックを受けて変更しました。
- ピン留めのしきい値を
>= 1.0から>= 0.9に引き下げました。importance >= 0.9のメモリは、自動忘却の対象外となり、recallとrememberの応答にpinned: trueが表示されるようになりました。正確に1.0を指定しなくても、「0.9 = 重要度が高い = クリーンアップ後も残るべき」という自然な考え方に合致します。 - 既存の
importance >= 0.9のメモリ(以前に0.9や0.95に設定されたものを含む)は、すべて自動的にピン留めされます。移行は不要です。 - 新しいしきい値に合わせて、ツールの説明とエラーメッセージを更新しました。
v0.1.0 — 大規模な UX アップデート(2026-04-18)
1 週間のドッグフーディングを経て、以下の変更を行いました。
新しいツール
update_memory—memory_idを維持したまま、アトミックに編集します。「forget+remember によって session_file_edits のリンクが壊れる」バグを解決します。list_entities— セッション初期化用の「何について知っているか」を素早く確認するためのプリミティブです。kind/min_memoriesフィルターに対応し、レイヤーごとの内訳を返します。npx -y linksee-memory stats— ローカル DB の概要を表示する CLI です。
recall の機能強化
- 各メモリに
match_reasons配列を追加しました。例:["content_match_fts", "heat:hot", "pinned"]。 - 各次元のスコア(関連性/熱量/勢い/重要度)を含む
score_breakdownを追加しました。 offset/has_more/stopped_byによるページネーションに対応しました。limitパラメーター(ハード上限)を追加し、max_tokensの予算を補完します。- ホット/ウォーム/コールド/フローズンのメモリのみを取得する
bandフィルターを追加しました。 - 熱量を上げるべきでないプレビュークエリ用に
mark_accessed=falseを追加しました。 - レイヤーの別名:
decisions→learning、warnings→caveat、how→implementationなど。 - 修正:古くなったエンティティの勢いスコアを機会に応じて更新します。最後の remember() から 1 時間以上経過してエンティティを取得した場合も、古い勢いスコアが返されなくなりました。
remember の機能強化
- 品質チェックを追加しました。
force=trueでない限り、貼り付けられたアシスタントの出力/CI ログ/スタックトレースを拒否します。 importance=1.0を指定すると、メモリが暗黙的にピン留めされるようになりました(自動忘却後も保持されます)。- レイヤーの別名を受け付けるようになりました。
forget の変更
- ピン留めされたメモリ(importance=1.0)も、caveat レイヤーのメモリと同様に保持されるようになりました。
- 保護されたメモリ、または存在しないメモリを削除しようとした場合、明確なエラー応答を返すようになりました。
- dry-run に
sample_ids_to_dropが含まれるようになりました。
consolidate の変更
dry_run: trueのプレビューモードを追加しました。書き込みを行わず、クラスター数と候補を報告します。
インフラ
- 新規 DB の移行バグを修正しました(存在する前に
metaテーブルをクエリしていました)。 - 構造化言語機能の使用に対応するため、Node 20 以上に引き上げました。
すべての変更は後方互換性があります。既存の統合は引き続き動作します。Server.ts のバージョン表示は v0.1.0 を報告するようになりました。
以前のバージョン
GitHub Releases をご覧ください。
ライセンス
MIT — Synapse Arrows PTE. LTD.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。