解決済みの問題を、コーディングエージェントにもう一度デバッグさせない。
Claude Code、Codex、Cursor、OpenClaw、Gemini CLI、OpenCode、Hermes をはじめとする 43 のエージェントは、すべてのセッションをすでにディスクに保存しています。
deja はそれをローカルでインデックス化し、MCP とフック経由で必要な履歴を渡します——LLM 不要、単一の Go バイナリ。
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español | Português | Français | Deutsch | Русский | Türkçe | हिन्दी
ドキュメント · ブラウザデモ · ベンチマーク · 他ツールとの比較 · 自分のツールへの組み込み
```sh
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
```
再現率 LongMemEval-S で 97.2% R@5 全 500 問 · MemPalace 96.6%、agentmemory 95.2% 同じ 19,195 セッションで 1 位正解 19/100、次点は 14
トークン agentmemory の半分のトークン 解決済みのタスクで 53,558 対 104,974 ツール定義は 1 ターン 477 トークン、7 つの中で最少
インデックス時間 19,195 セッションを 13.6 秒 でインデックス7 ツール中の次点は 72 秒 最初の回答まで 26 ms、検索の中央値 97 ms
ドライバ、合成コーパス、採点ルールはすべてこのリポジトリにあります ·
直接比較と、疑わしい行の再実行方法 ·
LongMemEval と LoCoMo の実行結果
## インストール
```sh
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
```
スクリプトはバイナリを `~/.local/bin` に置きます。このディレクトリがまだ `PATH` にない場合、同じシェルでは 2 つ目のコマンドが見つかりません。スクリプトが表示するフルパス付きの `next:` 行を実行するか、`PATH` の行を追加したあとで新しいシェルを開いてください。
インストールに 10 秒、インデックス作成に約 10 秒で、すぐに使えます。2 つ目のコマンドは、見つかったすべての
エージェントに MCP リコールを接続し、対応しているエージェントではセッション開始時のリコールを有効にし、
最初のインデックスを作成するので、次のセッションでその待ち時間は発生しません。
新しいエージェントセッションを開始して、何か月も前に取り組んだことを聞いてみてください:
> have we dealt with jwt refresh rotation before? check your memory
頼む必要すらありません——自動リコールを有効にしていれば、セッションを開いた時点で、
エージェントはそのプロジェクトで解決済みのことをすでに知っています。自分で探すなら `deja` を実行してください。
その他のインストール方法と、すべては不要な場合の設定
`brew install deja-vu`、`go install github.com/vshulcz/deja-vu/cmd/deja@latest`、
または何もインストールせずに試すなら `npx @vshulcz/deja-vu "query"`。MCP サーバーをバンドルとして
受け付けるデスクトップアプリでは、[最新リリース](https://github.com/vshulcz/deja-vu/releases/latest)の
`.mcpb` を開けます。バイナリも同梱されています。
Claude Code、Cursor、Qwen、OpenClaw では、それぞれのマーケットプレイスから
同じプラグインバンドルを入れることもできます(Codex には専用のバンドルがあります。下の
[独自パッケージを持つハーネス](#独自パッケージを持つハーネス)を参照)。Copilot CLI もこれを
インストールできますが、取り込むのはスキルだけなので、そちらでは `deja install copilot-auto` を使ってください:
```sh
claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu
```
Windows ではインストールスクリプトが `unsupported OS` で終了します——シェルスクリプトだからです。
代わりに Scoop(標準の main バケットにあります)か、Windows に最初から入っている winget を使ってください:
```powershell
scoop install deja-vu
winget install vshulcz.deja-vu
```
または[最新リリース](https://github.com/vshulcz/deja-vu/releases/latest)から
`deja-vu__windows_amd64.zip` を取得し、`deja.exe` を `PATH` の通った場所
(例:`%USERPROFILE%\.local\bin`)に置いてください。
検索だけならバイナリ単体で完全なインストールです。インデックス作成、検索、`show`、`ctx`、`blame`、
`--json`、秘匿化(リダクション)には他に何も要りません。`deja install` は MCP をエージェントに接続し、
セッション開始時のリコールを有効にするためのもので、あると便利ですが任意です。バイナリのみの構成では
`deja doctor` がすべての MCP ターゲットを `config missing`(エージェントが入っている場合は `not-wired`)と報告しますが、これはその構成として想定どおりの
動作です。`deja warmup` は `~/.agents/skills/deja-search/SKILL.md` にスキルも配置します。このスキルは
エージェントに CLI の使い方——`deja recall`、`ctx`、`blame`、recall ページの読み方と次のページの取り方——を教えるので、
MCP なしでも履歴を検索できることをエージェントが理解できます。リポジトリ内のコピーは
[`skills/deja-search/SKILL.md`](../../skills/deja-search/SKILL.md) です。
`deja install --all` は、セッション開始時のリコールを除いた `--auto` です。エージェントは各セッションを
記憶とともに始めるのではなく、自分で呼び出すと判断したときに記憶から答えます。
[エージェント設定ガイド](https://vshulcz.github.io/deja-vu/guide/agents.html)では、各ハーネスの対応状況、
aider の読み取り専用コンテキストファイル、Windows の `cmd /c deja mcp` ラッパーについて説明しています。
各エージェント自身のガイダンスファイルに書き込まれる内容
インストール時には、検出したハーネス向けにユーザーレベルのガイダンスも書き込みます。Claude Code、Codex、opencode、Gemini CLI、Antigravity、Qwen、Kimi Code、pi、Senpi、Copilot、VS Code Copilot Chat、Cursor、Goose、OpenClaw、Hermes、Roo Code、omp、Amp、prime-agent、DeepSeek Harness、Continue、Crush、CodeBuddy Code、WorkBuddy、Zed、TRAE CLI、TRAE IDE、Muse Code、CodeWhale、ZCode、Junie は、それぞれ自身のガイダンスファイル(または設定された `XDG_CONFIG_HOME` 配下)に書き込まれます。再実行すると、周囲のユーザー記述はそのままに、deja のスキルまたはマーク付きブロックだけを書き換えます。オプトアウトするには `deja install --all --no-guidance` を使ってください。Grok Build と Devin CLI には、それらが読み込む `~/.agents/skills` に共有スキルが置かれます。その横に書かれる `~/.grok/GROK.md` は、同じディレクトリを使う無関係なコミュニティ製 CLI 向けです。Cursor にはユーザーレベルの指示ファイルがないため、Cursor がスキルを読み込む 4 か所のひとつである `~/.agents/skills` に共有スキルが置かれます——毎セッションではなく、関連がありそうなときにだけ読み込まれます。Kilo Code、gajae-code、Kimchi、Command Code、Cherry Studio、Reasonix にはスキルが、Kiro にはスキルとステアリングファイルが、それぞれ専用のインストールターゲットから書き込まれます。
## 自分で検索する
ターミナルで引数なしの `deja` を実行すると、全エージェントの履歴を検索する画面が開きます。最初に並ぶのは
まだコミットしていない変更の背景にあるセッション、次にこのプロジェクトの最近のセッションで、入力するたびに
一覧が絞り込まれます。
- `↑↓` でセッションを選び、`↵` で一致箇所から開き、`n` と `N` で一致箇所を移動し、`esc` で戻ります。セッションの中では `/` で語を探し、`]` と `[` で自分の質問から質問へ移動します。
- 検索欄はフィルタも受け付けます。コロン付きのエージェント名(`codex:`)、`today`、`yesterday`、`week`、`month`、`in:` です。
- `r` はセッションを書いたエージェントで再開します。`o` は別の任意のエージェントで続けます。そのエージェントは、セッションが何を尋ね、何を決め、何を未解決のまま残したかを持った状態で始まります。
- `tab` で「このプロジェクト」「すべてのプロジェクト」「Deleted」を切り替えます。Deleted は、エージェントが削除したが deja がまだ保持しているセッションで、`R` でひとつを元に戻せます。
- `?` ですべてのキーを表示し、`^k` に残りの操作(セッション ID やプロジェクトのパスのコピー、セッションを忘れる)があり、リストでは `q` で終了し、`esc` は一段戻り、検索欄が空なら終了します。
`DEJA_TUI=0` を指定すると、画面の代わりにテキストの要約を表示します。これは `deja brief` と同じものです。
パイプに出力した場合は、何がインデックス化されていて次にどのコマンドを実行すればよいかを表示します。
## できること
**Codex で解決して、Claude が覚えている。** 43 のコーディングエージェントはすべての会話を
ローカルファイルに書き出しています。deja はそれらのファイルを、全エージェントが読めるひとつの記憶レイヤーに変えます。
| | |
| --- | --- |
| **さかのぼって検索** | `deja "connection pool exhausted"` で数 GB を検索。deja をインストールする前の履歴もすべて対象です。自然言語の質問は関連度ティアにフォールバックします。時間はフィルターではなくヒントとして扱われます。 |
| **エージェント横断のリコール** | MCP の `deja` ツールを `recall` モードで使えば、元々どのエージェントで解決したかに関係なく、尋ねたエージェントで *「これは3週間前に直した」* に答えます。 |
| **コンパクションを生き延びる** | 43 回のコンパクションで計測したところ、要約に残ったのは決定事項の 77%、実行したコマンドの 0.2% でした。deja は残りの 99.8% を返します——さらに Claude Code と Codex では、コンパクション開始時にタスク、ファイル、コマンドを捕捉し、その後に一度だけ返します。 |
| **行動の直前にリコール** | エージェントがファイルを編集したりコマンドを実行したりする前に、deja はそのファイルに関する過去の決定、そのコマンドの動作実績のある呼び出し方、あるいはこのマシンにないプログラムを示します。コマンドが失敗すると、`PostToolUse` フックが、このマシンで以前同じエラーの後に何が行われたかを答えます——エージェントが自分では尋ねようとしない組み合わせです。 |
| **会話だけでなく作業もインデックス化** | 各ターンで開いたファイル、実行されたコマンドとその終了ステータス、編集で置き換えられた正確な範囲。どの要約も捨ててしまう部分です。 |
さらに 4 つ:却下された決定、情報の鮮度、同期と引き継ぎ、秘匿化
| | |
| --- | --- |
| **何が定着したかを知っている** | `deja promote --state rejected --note "why"` で、取り消した決定に印を付けます。以降そのセッションがヒットするたびに、試して却下されたことが理由とともに表示されます。何も削除されず、`--state accepted` で印を取り消せます。 |
| **前提が変わったら教えてくれる** | ヒットには *このセッションで触れた 4 ファイルがその後変更されています* と表示され、判断できない場合は何も言いません。「変更なし」と断言することは決してありません。 |
| **同期と引き継ぎ** | `deja sync ssh laptop` で記憶をマシン間で移動します。追記のみで、間にクラウドを挟みません。`deja handoff --to codex` は現在のコンテキストをまとめ、別のエージェントで作業を続けられるようにします。 |
| **秘匿化(リダクション)** | キー、トークン、JWT、秘密鍵ブロックはインデックス作成時に取り除かれます。パターン一致なので、規則が知らない形のものは通り抜けます。境界はセキュリティモデルに記載しています。 |
### あなた自身の作業の振り返り
`deja stats --card` はターミナルに描画します。ファイル名を渡すと、プロフィール README 用の SVG を
書き出します。他の場所に投稿するなら、[PNG に変換](https://vshulcz.github.io/deja-vu/card/)してください——
そのページはあなたのブラウザ内で変換します。
機能の完全なリファレンスは[ドキュメント](https://vshulcz.github.io/deja-vu/)にあります。
## プライバシー
インデックス作成と検索はローカルで完結します。ネットワークを使うのは `deja update`、`deja sync ssh`、
`deja doctor` のバージョンチェック、埋め込みエンドポイント(後述)に対する `deja embed`
(ベクトルがあれば検索時のクエリ埋め込みも)、そして対話的なコマンドが 1 日 1 回最新リリースを確認する
ことだけです。この確認はセッションのデータを送りません。`DEJA_OFFLINE=1` または `DEJA_NO_UPDATE_NOTICE=1`
で無効にできます。
認証情報はインデックス作成時に秘匿化されます:AWS キー、`api_key=` や `token=` の代入、
Bearer トークンや生の JWT、PEM 秘密鍵ブロック、各プロバイダーのトークン、`scheme://user:pass@host`
形式の URL、既知のパターンに当てはまらない形の高エントロピー値、そして文章中で述べられたパスワード——
「the admin password is …」のように、他のルールが手がかりにする区切り文字がないもの。
値は `[redacted:]` に置き換えられ、周囲のテキストは検索可能なまま残ります。`deja share` と
`deja sync export` は、出力時にもう一度秘匿化を適用します。
元のトランスクリプトは秘匿化されません。エージェントはコマンドの出力をそのまま書き込むため、
`cat .env` や貼り付けた接続文字列は平文のまま残ります。`deja secrets` は、秘匿化が残したマーカーをもとに、
どのセッションにどの種類の認証情報が含まれているかを一覧表示します。値そのものは決して表示しません。
あるマシンでは 42 セッションに 84 件ありました([トランスクリプト内の認証情報](https://vshulcz.github.io/deja-vu/guide/credentials-in-transcripts.html))。
`deja secrets --scrub` は、まだ値を持つトランスクリプトを書き換えます。値のあった場所に同じ
`[redacted:]` マーカーを置き、元のファイルは隣に残します。レポートが名前を挙げた種類だけを
対象とし、エージェントが入っているセッションは書き換えず、届かなかった件数を表示します。
セッションごとのファイルを持たないストアは、そもそも書き換えられません。
`deja forget` は再構築したインデックスからセッションを削除し、トゥームストーンを書き込むので、後で
`deja index` を実行しても元の履歴から復元されることはありません。`--unforget` でトゥームストーンを解除します。
プロジェクトの除外は `~/.config/deja/exclude` に 1 行 1 パターンで記述します。`harness:` で始まる行は
ストアを指定します——`harness:opencode` のように——deja はそのストアを走査せず、読み取りに必要なツールも要求しません。
[セキュリティモデル](../../docs/SECURITY-MODEL.md)に、データフロー、秘匿化の限界、信頼の前提、
リリースの検証方法をまとめています。
## CLI
ターミナルで引数なしの `deja` を実行すると[検索画面](#自分で検索する)が開きます。クエリや下のいずれかの
コマンドを付けると、結果を出力して終了します:
```text
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
login started failing after refresh token rotation; jwt kid mismatch in tests
fixed by reloading jwks cache after rotateKey and adding a clock-skew test
[codex] web · Jul 1 · b77d91e2 — 1 match
refresh token cookie needed SameSite=Lax in local callback flow
```
**履歴に尋ねる**
| コマンド | 説明 |
| --- | --- |
| `deja ` | すべての履歴を検索します。複数語は AND、引用符で囲んだフレーズは連続したテキストを要求します。完全一致がない場合は語形変化や近い綴りを試すので、部分文字列から単語にたどり着けます(`code` で `opencode` が見つかります)。 |
| `deja` | ターミナルでは上の全画面検索。`deja brief` は代わりにテキストの要約を表示します:今日のセッション、deja が提供したもの、最近の作業、試すとよい検索。 |
| `deja wip` | このディレクトリで直前のセッションが何をしていたか:タスク、決着したこと、作業中のファイル、最後のコマンドとそれが失敗したかどうか——誰かが書き忘れなかったメモではなく、トランスクリプトから導き出します。 |
| `deja blame [:line]` | どのセッションがそのファイルについて議論し、何を決め、なぜそうしたか。行を指定すると:その行を最後に変更したコミットと、その行を書いた、あるいはコミットが置き換えたテキストを書いたセッション。`--attribution` は行についての答えだけを出力し、`--json` と併用すると JSON で、`--git-note` と併用すると `refs/notes/deja` に記録します。 |
| `deja files ` | 逆方向:あるテーマに関する作業が実際に触れたファイル。 |
| `deja how ` | このマシンで実際にどう実行されているか。以前エージェントが実行した内容から、実際のフラグ付きで示します。 |
| `deja fix ` | 以前同じエラーが起きたとき、このマシンで何を実行し、エラーが再発しなかったか。merge、force push、削除は決して返しません。 |
| `deja friction` | 3 つ以上の別々のセッションで発生したエラーを、ハーネス名付きで表示します。 |
見つけたものを活用し、マシン間で移動する
**見つけたものを使う**
| コマンド | 説明 |
| --- | --- |
| `deja ctx ` | 最も一致したセッションの Markdown ダイジェスト。そのセッションが変更したコードも含み、そのままプロンプトにパイプできます。 |
| `deja resume ` | 見つかったセッションを、元のハーネスで再開します。 |
| `deja restore ` | エージェントが置き換えた範囲を、その編集が記録した `old_string` から取り戻します。元のファイルを上書きすることはありません。 |
| `deja promote ` | セッションを、出典・タグ・ライフサイクル状態を持つ厳選ノートに凝縮します。ノートは生のトランスクリプトより上位にランク付けされます。 |
| `deja share ` | 同僚向けにサニタイズしたセッションダイジェスト。シークレットは除去済みです。 |
**移動と確認**
| コマンド | 説明 |
| --- | --- |
| `deja sync export/import/ssh` | 記憶をマシン間で移動します。ウォーターマーク付き、追記のみ、冪等です。 |
| `deja view` | 記憶全体をひとつのローカル HTML ファイルとして出力します。サーバーは不要で、ファイルがマシンの外に出ることはありません。 |
| `deja stats` | エージェント作業の振り返り。`--card` でターミナルに描画、`--card .svg` でプロフィール用 SVG を書き出し、`--html` で閲覧可能なタイムラインを生成します。 |
| `deja secrets [--scrub]` | どのセッションの元トランスクリプトに、どの種類の認証情報が含まれているか。値は決して表示しません。`--scrub` は届く範囲を書き換え、元のファイルは隣に残します。 |
| `deja doctor [--deep]` | 自己診断。`--deep` を付けると、インデックスがソースと一致していることを検証します。 |
| `deja mcp` | stdio MCP サーバー。`deja install` が接続するのはこれです。 |
完全なリファレンス:[コマンド](https://vshulcz.github.io/deja-vu/guide/commands.html)と
[JSON 出力](../../docs/json-output.md)。
### MCP ツール
サーバーは `mode` を持つ `deja` というツールをひとつ公開しています。`deja install` が接続するので、
これが必要になるのはエージェントを手動で設定する場合だけです。以前の 6 つのツール名
(`recall`、`recall_context`、`blame`、`fix`、`how`、`remember`)も、すでにそれらに接続されているものに対しては引き続き応答します。
ツールを 7 つではなくひとつにしたのは、見た目ではなくコストの問題です。接続された MCP サーバーは
リクエストのたびにツール定義を送るので、エージェントが何も呼ばなくても毎ターン費用がかかります。
ここでは 477 token、[day zero](https://vshulcz.github.io/deja-vu/guide/day-zero.html) で測った
7 つのサーバーのうち最大のものは 8,283 token でした。deja 自身も、スキーマをモード付きのツール
ひとつに絞るまでは 828 token でした。
引数と戻り値の形式
| ツール | 引数 | 戻り値 |
| --- | --- | --- |
| `deja` | `mode`、`q`、`harness?`、`project?`、`limit?` | モードによって異なります(下表)。 |
`q` には、そのモードが尋ねる内容を入れます。以下のモードごとの引数名も引き続き受け付けますが、
スキーマは呼び出しの有無にかかわらず毎ターン読まれるため、宣言はしていません。
| モード | `q` の中身 | ほかに読む引数 | 戻り値 |
| --- | --- | --- | --- |
| `recall` | 正確な語を 1〜3 個(ファイルパス、エラー文字列、フラグや識別子) | `harness?`、`limit?`、`offset?` | 密度の高い一致スニペット(上限 4KB)。 |
| `context` | recall と同じ | `harness?` | 最も一致したセッションの Markdown ダイジェスト。 |
| `blame` | ファイルパス | `harness?`、`project?`、`since?`、`limit?`、`all?` | そのファイルについて議論したセッション。 |
| `fix` | 失敗した出力をそのまま | `limit?` | 以前同じエラーの後に、このマシンで実行または変更された内容。 |
| `how` | ツールや対象(例:`go test`) | `project?`、`limit?` | ここでエージェントが実行した内容に基づく、実際の呼び出し方。 |
| `orient` | なし(プロジェクトについて尋ねます) | `project?`、`limit?` | 過去のセッションがここで実行したコマンドと、作業したファイル。 |
| `remember` | 恒久的な事実や決定をひとつ | `project?`、`tags?` | 後でリコールするために、恒久的な決定を保存します。 |
| `handoff` | セッション ID またはハーネス名。空ならここでの最新セッション | `harness?` | 別のセッションの目標、継続中の指示、最新の結論、通ったチェック、止まった位置。そのセッションを続けるためのものです。 |
## 対応ハーネス
自動リコールをインストールすると、Claude Code と Codex はコンパクション開始時に deja へ
トランスクリプトを渡し、deja は要約が捨てようとしているもの——タスク、結論、
各コマンドとその結果、未解決のこと——を保持します。同じセッションとワークスペースに対する次のフックが、
4 KB の予算内でそれを一度だけ返し、その後リポジトリが変化したかどうかを示す一行を添えます。`deja stats`
は、コンパクション後に最初の編集が行われるまでのツール呼び出し回数を数えます。これがこの機能の効果を
測る指標です。何を読み、何を保存し、どこに限界があるかは
[自動コンパクション復旧](../../docs/compaction.md)を参照してください。
aider · Amp · Antigravity · Claude Code · Cline · Codex CLI · Copilot CLI · VS Code Copilot Chat · Cursor · DeepSeek Harness · Gemini CLI · Goose · Grok Build · Hermes · Kimi Code · omp (Oh My Pi) · OpenClaw · opencode · Continue · Crush · pi · prime-agent (PrimeIntellect) · Qwen Code · Cherry Studio · Senpi · gajae-code · Kimchi Coding · Command Code · ZCode · Kiro · Kilo Code · Roo Code · Zed · Devin CLI · CodeWhale · Junie · JetBrains AI Assistant · Windsurf / Devin Desktop · CodeBuddy Code · Reasonix · TRAE CLI · Muse Code · MiniMax Code.
各ハーネスの対応状況
| ハーネス | MCP リコール | 自動リコール | スキル | コマンド | 再開 | 引き継ぎ | 必要なもの |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | --- |
| aider | ⚠ | ✅ | ✕ | ⚠ | ✕ | ✅ | deja aider |
| Amp | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 0.0.1774963753 以降のスレッドは ampcode.com 上にあり、deja はプラグインが書き出したものと、それ以前のローカルのものを読みます |
| Antigravity | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Claude Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cline | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Codex CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Copilot CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| VS Code Copilot Chat | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | — |
| Cursor | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3(IDE チャット、CLI のツール出力) |
| DeepSeek Harness | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | zstd |
| Gemini CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Goose | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | deja goose |
| Grok Build | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3(grok-dev ストア) |
| Hermes | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| Kimi Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| omp (Oh My Pi) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| OpenClaw | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3(2026.8 以降のストア)、.zst アーカイブと圧縮イベント(2026.9.9 以降)用の zstd |
| opencode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| Continue | ✅ | ⚠ | ✅ | ✅ | ✅ | ✅ | — |
| Crush | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| pi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| prime-agent (PrimeIntellect) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Qwen Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cherry Studio | ✅ | ✅ | ✅ | ✕ | ✕ | 貼り付け | 設定 -> MCP でサーバーを一度インポートし、エージェントでスキルを有効化 |
| Senpi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| gajae-code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| Kimchi Coding | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| Command Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| ZCode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CLI データベース用の sqlite3 |
| Kiro | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CLI データベース用の sqlite3 |
| Kilo Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CLI ストア用の sqlite3 |
| Roo Code | ✅ | ✕ | ✅ | ✅ | ✅ | 貼り付け | roo CLI(エディターのタスクはエディターで再開) |
| Zed | ✅ | ✕ | ✅ | ✅ | ✕ | 貼り付け | sqlite3 + zstd |
| Devin CLI | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | sqlite3 |
| CodeWhale | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| Junie | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| JetBrains AI Assistant | ✅ | ⚠ | ⚠ | ⚠ | ✕ | 貼り付け | なし |
| Windsurf / Devin Desktop | ✅ | ⚠ | ✅ | ✅ | ✕ | 貼り付け | なし |
| CodeBuddy Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| Reasonix | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 1.x セッション用の zstd |
| TRAE CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| Muse Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | なし |
| MiniMax Code | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | `deja resume` と `deja handoff --to mcode --exec` には MiniMax Code CLI(`mcode`)、セッションのワークスペースには `sqlite3` |
✅ 動作する · — 可能だが未実装 · ✕ ハーネス側にその仕組みがない · ⚠ ハーネス側の対応待ち · ? 未調査
TRAE IDE は接続はしますが、読み取りはしません。チャットが暗号化されたデータベースにあるためです。
`deja install trae-ide` は MCP サーバーとスキルを追加し、`trae-ide-auto` はフックを追加します。TRAE IDE が
フックを実行するのは、設定 > Hooks で有効にした後だけです。
ストアの場所をカスタマイズするには `DEJA_*_ROOT` 変数を使います。各エージェント自身の移動用変数も
尊重されます。[セッション形式レジストリ](https://vshulcz.github.io/deja-vu/registry/README.html)には、
ハーネスごとに観測されたパス、レコードスキーマ、ロールの対応付けがまとめられており、合成フィクスチャによって
それらの記述がパーサーと一致していることを確認しています。
### 独自パッケージを持つハーネス
`deja install --auto` は、他のハーネスと同様にこれらもすべて接続し、それが最短の方法であることに
変わりはありません。これらには各エコシステム内のパッケージもあり、CLI ではなくそこから拡張機能を
インストールする人向けです:
| ハーネス | パッケージ | インストール |
| --- | --- | --- |
| opencode | npm `opencode-deja` | `opencode plugin opencode-deja` |
| DeepSeek Harness | npm `dsh-deja` | `dsh plugin --profile web add dsh-deja` |
| Zed | `deja-context-server` | Zed → Extensions → deja |
| Kimi Code | プラグイン `deja` | `/plugins install https://github.com/vshulcz/deja-vu` |
| Codex CLI | プラグイン `deja-vu` | `codex plugin marketplace add https://github.com/vshulcz/deja-vu` の後に `codex plugin add deja-vu@deja-vu` |
| Grok Build | プラグイン `deja` | `grok plugin marketplace add vshulcz/deja-vu` の後に `grok plugin install deja` |
| OpenClaw | ClawHub と npm `@vshulcz/openclaw-deja` | `openclaw plugins install clawhub:@vshulcz/openclaw-deja` |
| pi(と omp) | npm `@vshulcz/pi-deja` | `pi install npm:@vshulcz/pi-deja` |
| Hermes | メモリプロバイダー `deja-memory`(Hermes のプラグインカタログ内) | `hermes plugins install deja-memory`、または GitHub から:`hermes plugins install vshulcz/deja-vu/extensions/hermes` |
どちらの方法も単独で十分で、両方を使っても問題ありません。どのパッケージもまず `deja install` が
書き込んだ内容を読み取ります。opencode、dsh、OpenClaw は足りないものだけを追加し、Kimi、Grok、Codex、pi は
インストーラーがすでに接続している場合は手を引きます。Zed では両方が同じサーバー ID を使います。
そのため、どの順番でインストールしても重複は生じません。
いずれもすでに入っている deja を使い、同梱のコピーはフォールバックにすぎません。
同じ検索はスキルとしても提供されており、`SKILL.md` を読み込むあらゆるエージェントで使えます:
```sh
npx skills add https://github.com/vshulcz/deja-vu --skill deja-search # skills CLI: Claude Code, Cursor, Goose, Copilot…
openclaw skills install @vshulcz/deja-search # ClawHub
hermes skills install vshulcz/deja-vu/skills/deja-search # Hermes
```
このスキルは上記のインストール手順で入れた `deja` バイナリを動かすもので、バイナリは同梱していません。
## セマンティックリコール(任意)
`DEJA_EMBED_URL` で `deja embed` をローカルの Ollama、LM Studio、または OpenAI 互換エンドポイントに
向ければ、言い換えたクエリでもヒットするようになります。到達可能なランタイムがなくても、字句検索と
MCP リコールはそのまま動作します。OpenAI Platform は標準の API キーで使えます:
```sh
export OPENAI_API_KEY='sk-...'
export DEJA_EMBED_URL='https://api.openai.com/v1/embeddings'
export DEJA_EMBED_MODEL='text-embedding-3-small'
deja embed
```
`DEJA_EMBED_URL` が未設定の場合、deja は `localhost:11434` と `localhost:1234` を探索するので、
すでに Ollama や LM Studio が動いているマシンでは何もしなくても検出されます。
`DEJA_EMBED_OFF=1` または `DEJA_EMBED_URL=off` でこの探索を無効にできます——それ以外の値を
`DEJA_EMBED_URL` に設定した場合は、その設定が優先されます。
認証が必要な他の OpenAI 互換エンドポイントでは、`DEJA_EMBED_KEY` を明示的に設定してください:
```sh
export DEJA_EMBED_URL='https://example.com/v1/embeddings'
export DEJA_EMBED_MODEL='embedding-model'
export DEJA_EMBED_KEY='...'
deja embed
```
`DEJA_EMBED_KEY` が優先されます。`OPENAI_API_KEY` が自動的に使われるのは HTTPS の
`api.openai.com` の URL に対してだけで、ローカルやサードパーティのエンドポイントに暗黙的に送られることはありません。
ベクトルの保存場所とコスト
サイドカーは `index.db` の中ではなく、インデックスの横に `.vectors.bin` として置かれます。1,024 次元の
モデルでは、Float32 ベクトルのサイズはメッセージ 1k 件あたり約 4 MB です。リモートエンドポイントが
受け取るのは、秘匿化済みでインデックス化されたテキスト(約 2k 文字に切り詰め)だけで、生のソースファイルは
決して送られません。Ollama や LM Studio を使えば、埋め込みはローカルで完結し、キーも不要です。
## 検証
このマシンが一度解いた作業では token が 58% 少ない · LongMemEval-S(470 問のクリーン版)で 88.9% hit@1 · LoCoMo で 71.9% retrieval hit@1 · 数 GB の履歴に対してミリ秒 単位の検索
各アーム 11 回の実行で 53,558 token、記憶をつながない場合の 126,222 に対して。後のビルドで再び各 11 回:103,443 に対して 52,815 ·
1 つの作業を終えるまでの費用 ·
検索側のハーネスはどちらもこのリポジトリに含まれており、公開データセット上で数分で実行できます ·
数字をご自身で確かめてください
```sh
deja bench recall # ranking floor: 100 queries, half Russian, CI fails if recall drops
deja bench context # 30 seeded task chains plus five negative controls
deja bench block # does the answer survive into what deja hands over
deja bench prompt # what the per-prompt hook fires on, and what it fires on wrongly
deja bench ingest # what an update costs: unchanged, a turn, a new transcript, a rename, a rewrite
deja bench read # what it costs to read a database-backed store, and what one long value does to it
```
`bench block` は他のベンチでは問えない問いを立てます:正しいセッションが手元にあるとき、そのブロックは
そのセッションで決着した内容を運んでいるか。各テーマについて 8 つのセッションが議論し、そのうち 1 つが
決着をつけます。それもトランスクリプトの最後ではなく途中で——そのため、上位ヒットの最新ターンを使う
ベースラインは 0 点になり、0 点を超えるには選び取る必要があります。
| アーム | 答えを含む | トークン数の中央値 |
|---|---|---|
| `deja-block`(セッション開始ブロック) | 1.00 | 665 |
| `deja-digest`(コンテキストダイジェスト) | 1.00 | 1656 |
| `newest-turn`(ベースライン) | 0.00 | 289 |
| `cold` | 0.00 | 0 |
コンテキスト実験では、deja-recall を全履歴、単純な grep、コールドコンテキストと比較します。
デフォルトのシードでの結果:
| アーム | トークン数の中央値 | カバレッジの中央値 | ネガティブコントロールのトークン数 |
| --- | ---: | ---: | ---: |
| deja-recall | 1,096 | 1.00 | 0 |
| full-history | 80,547 | 1.00 | 78,145 |
| naive-grep | 273,238 | 1.00 | 0 |
| cold | 0 | 0.00 | 0 |
生ログを grep するのと同じ事実カバレッジを約 250 分の 1 のトークンで、一致したセッションを丸ごと
再生するより約 70 分の 1 のトークンで実現し、関連する過去の事実がないチェーンでは何も注入しません。
コーパス生成器と関連度ラベルは、レビュー済みの普通の Go コードです。どの数字を信頼する前にも——
私たちのものも含めて——「関連がある」が何を意味するかを確認してください。
2,419 セッション、179k メッセージ、1.9 GB のトランスクリプトを持つ実際のストアでの計測結果:
| 計測項目 | 結果 |
| --- | --- |
| プロセス内の検索 | 中央値 **0.7–0.8 ms**(`deja bench recall`、100 クエリ、半分はロシア語)、LongMemEval-S のヘイスタックでは約 15 ms |
| `deja ` のエンドツーエンド | そのストアで中央値約 0.2 秒:プロセス起動、全ストアの鮮度チェック、ランキング、出力を含む |
| 鮮度チェックのみ | 変更がない場合は約 50 ms |
| インデックスサイズ | 200 MB、コーパスの約 10% |
同じストアはその後 2,754 セッション、358k メッセージ、5.7 GB に増えました。
これに対するコールドなフルビルドは 71 秒かかり、232 MB のインデックスを書き出します——コーパスの 4% です。
トランスクリプトには繰り返しが多いため、割合は下がっていきます——そしてエンドツーエンドの中央値は
0.25 秒と変わっていません。
インデックスはインクリメンタルです。セッションファイルが増えたときは、そのファイルだけを読み直します。
## 仕組み
`~/.cache/deja` にあるローカルの転置インデックスです:JSONL と SQLite のストアを解析し、認証情報を
秘匿化し、`records.bin` とトークンバケットを書き出し、ファイルごとの状態を `manifest.gob` で追跡するので、
再実行時は変更分だけを取り込みます。MCP サーバー、stats、share、sync はすべてこのひとつのインデックスを
読みます。詳細は [docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) を参照してください。
## FAQ
他のメモリツールとどう違うのですか?
| | deja | メモリプラットフォーム (Mem0、Letta、memU) | セッション検索 (cass) |
| --- | :-: | :-: | :-: |
| インストール前の作業を知っている | はい | いいえ | はい |
| キャプチャ手順 | 不要、トランスクリプトがそのまま記憶 | エージェントやあなたのコードが事実を書き込む | 不要 |
| LLM や埋め込みのキーが必要 | いいえ | はい | 任意 |
| 頼まれなくてもリコールする | セッション開始時とツール実行前 | いいえ | いいえ |
[engram](https://github.com/Gentleman-Programming/engram) は記録先行型ツールの中で最も優れており、
そのモデルが合うなら試す価値があります。ただし、やはり空の状態から始まり、エージェントが保存することを
選んだものしか知りません。[完全な比較](https://vshulcz.github.io/deja-vu/guide/compare.html)では
15 のツールを取り上げています。
エージェントが遅くなりませんか?
リコールはローカルインデックスに対する字句検索です:
中央値 0.7–0.8 ms で、モデルの応答を待つことはありません。フックではこれに加えてプロセス起動と
ストアの鮮度チェックがかかります——19k セッションのインデックスで、プロンプトごとのフックは中央値 107 ms です。
Claude Code のセッション履歴はどこに保存されていて、検索できますか?
`~/.claude/projects` の下に、セッションごとに 1 つの JSONL ファイルとして保存されています。Codex は
`~/.codex/sessions`、Cursor は SQLite の `state.vscdb` に保存します。deja はそれらすべてをその場で
読み取ります。引数なしの `deja` はそれらを検索して読む画面を開き、`deja search` は同じことをスクリプトから行い、`deja last` は全エージェントの最近のセッションを一覧表示し、`deja view` は履歴全体をひとつの
ローカルページとして開きます。各エージェントのパスは[セッションの保存場所](https://vshulcz.github.io/deja-vu/guide/where-sessions-are-stored.html)を参照してください。
Claude Code のセッション履歴が消えました。もう戻りませんか?
Claude Code は 30 日より古い
トランスクリプトを削除します(`~/.claude/settings.json` の `cleanupPeriodDays`)。`claude --resume` が
一覧表示するのは残っているものだけです。削除前に deja がインデックス化したセッションは、ファイルが
消えた後も検索できます。詳細:[ディスク上のセッションファイル](https://vshulcz.github.io/deja-vu/guide/session-files-on-disk.html)。
すべてを消去するには?
```sh
deja uninstall --all
rm -rf ~/.cache/deja ~/.local/share/deja ~/.config/deja
```
インデックスは `~/.cache/deja`、`remember` と `promote` のノートは `~/.local/share/deja`、
ルール、除外リスト、フックのランチャーは `~/.config/deja` にあります(`XDG_DATA_HOME` と
`XDG_CONFIG_HOME` が設定されていればその下。Windows ではノートは `%AppData%\deja` にあります)。
## ガイド
- **コンテキストと復元:** [エージェントは以前の会話を覚えているか?](https://vshulcz.github.io/deja-vu/guide/does-my-agent-remember.html) · [エージェントがコンテキストを失った](https://vshulcz.github.io/deja-vu/guide/lost-context.html) · [コンテキストウィンドウがいっぱい](https://vshulcz.github.io/deja-vu/guide/context-window-full.html) · [コンパクションで失われるもの](https://vshulcz.github.io/deja-vu/guide/after-compaction.html) · [エージェントがセッション間で忘れる理由](https://vshulcz.github.io/deja-vu/guide/forgetting.html)
- **検索と再開:** [昨日のセッションを再開する](https://vshulcz.github.io/deja-vu/guide/resume-a-session.html) · [問題を解決したセッションを見つける](https://vshulcz.github.io/deja-vu/guide/find-a-session.html) · [エージェントが修正済みのミスを繰り返す](https://vshulcz.github.io/deja-vu/guide/repeated-mistakes.html) · [エージェントの切り替え](https://vshulcz.github.io/deja-vu/guide/switching-agents.html)
- **セッションファイルと運用:** [ディスク上のセッションファイル](https://vshulcz.github.io/deja-vu/guide/session-files-on-disk.html) · [各エージェントの履歴の保存場所](https://vshulcz.github.io/deja-vu/guide/where-sessions-are-stored.html) · [エージェントの監査](https://vshulcz.github.io/deja-vu/guide/auditing-agents.html) · [会話のエクスポート](https://vshulcz.github.io/deja-vu/guide/export-conversations.html) · [マシン間での利用](https://vshulcz.github.io/deja-vu/guide/sync-across-machines.html) · [記憶のコスト](https://vshulcz.github.io/deja-vu/guide/token-cost.html)
ハーネス別:[opencode](https://vshulcz.github.io/deja-vu/guide/memory-for-opencode.html) · [DeepSeek Harness](https://vshulcz.github.io/deja-vu/guide/memory-for-dsh.html) · [Kimi Code](https://vshulcz.github.io/deja-vu/guide/memory-for-kimi.html) · [Zed](https://vshulcz.github.io/deja-vu/guide/memory-for-zed.html) · [Grok Build](https://vshulcz.github.io/deja-vu/guide/memory-for-grok.html) · [Gemini CLI](https://vshulcz.github.io/deja-vu/guide/memory-for-gemini.html) · [Qwen Code](https://vshulcz.github.io/deja-vu/guide/memory-for-qwen.html) · [OpenClaw](https://vshulcz.github.io/deja-vu/guide/memory-for-openclaw.html) · [Goose](https://vshulcz.github.io/deja-vu/guide/memory-for-goose.html) · [Cline](https://vshulcz.github.io/deja-vu/guide/memory-for-cline.html) · [pi と omp](https://vshulcz.github.io/deja-vu/guide/memory-for-pi.html) · [Hermes](https://vshulcz.github.io/deja-vu/guide/memory-for-hermes.html)
## コントリビュート
`make build test lint` を実行してから、[CONTRIBUTING.md](../../CONTRIBUTING.md) を読んでください。ハーネスの追加は
[パーサーレジストリ](../../docs/ARCHITECTURE.md#source-parsers)から始めます。優先事項と対象外の事項は
[ROADMAP.md](../../ROADMAP.md) にあります。初心者向けの Issue にはラベルが付いています。
## サポート
バグや質問は [Issues](https://github.com/vshulcz/deja-vu/issues) へどうぞ。
悪用可能だと思われるものは、代わりに [SECURITY.md](../../SECURITY.md) にある非公開のアドバイザリリンクから
報告してください。deja が何を読み、何をどこにも送らないか、そしてプロジェクトを除外したりセッションを
忘れさせたりする方法は[プライバシー](#プライバシー)にまとめています。
## ライセンス
MIT © [Vladislav Shulcz](https://github.com/vshulcz)
⭐ [Star deja-vu on GitHub](https://github.com/vshulcz/deja-vu)