deja-vu について
deja-vuは、コーディングエージェント向けのローカルなセッションメモリツールです。複数エージェントが保存した履歴を索引化し、関連する情報をエージェント間で提供するため、過去の修正や判断を再利用できます。
主な機能
- 01複数エージェントの履歴索引
- 02ローカルでの履歴検索
- 03セッション開始時の自動想起
- 04エージェント間のセッション引き継ぎ
- 05索引作成時の認証情報削除
活用シーン
- 01数か月前に解決した問題の検索
- 02コーディングエージェント間で過去の判断を再利用
- 03コマンド失敗や編集の背景を確認
MCP 対応
deja-vuは、検出したエージェントにMCPによる想起機能を設定し、セッション開始時の想起を提供できます。対応エージェントではインストール時にMCPを設定でき、バイナリ単体でもMCPなしで履歴を検索できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | いいえ | 尋ねる内容:質問または正確なトークン。blame の場合はパス、fix の場合は失敗した出力をそのまま、remember の場合は事実を指定してください。 |
| mode | enum | はい | recall | context | blame | fix | how | orient | remember | handoff |
| limit | number | いいえ | 結果の最大数。 |
| harness | string | いいえ | 任意のフィルター。作成したエージェント:claude、codex、trae、opencode など 37 件(`deja sources`)。 |
| project | string | いいえ | 任意のプロジェクトフィルター。remember の場合、保存先を指定します。 |
詳細
コーディングエージェントが、すでに解決した問題を何度もデバッグし直すことはありません。
Claude Code、Codex、Cursorをはじめとする40以上のエージェントは、すでに各セッションをディスクに保存しています。 dejaはそのすべてを数カ月分にわたってインデックス化し、今作業しているエージェントに、必要な部分を渡します。
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español | Português | Français | Deutsch | Русский | Türkçe | हिन्दी

誰も検索していません。エージェント自身がdejaを呼び出しました。合成コーパスを使った2回の実際の実行であり、個人の履歴は公開されていません。
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
macOSとLinuxに対応。インストールは10秒、インデックス作成も約10秒です · Windows、Homebrew、npmなどについてはこちら
| 想起 LongMemEval-Sで97.2% R@5 MemPalaceは96.6%、agentmemoryは95.2%を公開しています | トークン数 agentmemoryの半分 このマシンがすでに解決したタスクでの比較 | インデックス作成時間 19,195件のセッションを17.6秒 次に速いツールは72秒かかります |
deja-vuのメンテナーである私が、すべてのドライバー、コーパス、採点ルールをこのリポジトリで公開しています · 直接比較と、疑問のある行を再実行する方法 · すべての実行結果
ドキュメント · ベンチマーク · 比較について · ツールへの組み込み方
役に立ったら、GitHubでdeja-vuにスターを付けてください。
## 自分で検索するターミナルで引数なしで deja を実行すると、すべてのエージェントの履歴を検索できます。まず未コミットの変更に関連するセッションが表示され、次にこのプロジェクトの最近のセッションが表示されます。入力するにつれて、一覧が絞り込まれます。

↑↓でセッションを選択し、↵で該当箇所を開き、nとNで一致箇所を順に移動し、escで戻ります。セッション内では、/で単語を検索し、]と[で自分が質問したターン間を移動します。- 検索ボックスではフィルターを使えます。コロン付きのエージェント名(
codex:)、today、yesterday、week、month、in:<project>が使えます。 ^sで日付の見出しごとに新しい順で検索結果を表示し、最も一致する結果順に戻します。スクリプトからはdeja search --sort dateで同じことができます。rで、そのセッションを作成したエージェントで再開します。oで別のエージェントで続行します。セッションで質問した内容、決定した内容、未解決の内容を引き継いで開始します。tabで、このプロジェクト、すべてのプロジェクト、Deleted を切り替えます。Deleted には、エージェントが削除したものの deja が保持しているセッションが表示されます。Rで元に戻します。Dで、確認後にエージェントと deja の両方からセッションを消去します(スクリプトからはdeja delete <id>)。?ですべてのキー操作を表示し、^kで残りの操作を表示します(セッション ID やプロジェクトのパスをコピーする、セッションを忘れるなど)。一覧からはqで終了します。escで戻り、検索ボックスが空の場合は終了します。
DEJA_TUI=0 を指定すると、テキストの要約が表示されます。これは deja brief と同じです。パイプに渡すと、インデックス済みの内容と次に実行するコマンドが表示されます。
特長
- 最初からすべて利用できます。 インストール前の数か月分の履歴も、初日から検索できます。数ギガバイトのデータから
deja "connection pool exhausted"で検索できます。 - すべてのエージェントで、ひとつの記憶を共有します。 Codex で見つけた修正は、Claude Code、Cursor、opencode でも見つかります。43種類のエージェントが同じインデックスを読み取ります。
- 尋ねる必要はありません。 ファイルの編集やコマンドの実行が始まる前のセッション開始時、そしてコマンドの失敗後に、関連情報を呼び出します。
- コンパクション後も利用できます。 43回以上の計測済みコンパクションで、要約は決定事項の77%とコマンドの0.2%を保持しました。残りはdejaが引き継ぎます(方法)。
- 会話だけでなく、作業もインデックス化します。 各ターンで開いたファイル、終了ステータス付きのコマンド、編集で置き換えた正確な範囲を記録します。
- 何が有効だったかを把握します。
deja promote <id> --state rejectedで取り消された決定を記録すると、その後の検索結果すべてに、試されたことと却下された理由が表示されます。--state acceptedでその記録を取り消せます。 - 状況の変化を知らせます。 該当する検索結果には このセッションで変更された4つのファイルが、その後変更されています と表示されます。判断できない場合は何も表示しません。
- ローカルでプライベートです。 モデルもサーバーも不要です。セマンティック検索を有効にした場合のみ、埋め込みを使用します。インデックスの作成時にキーとトークンは除去されます(プライバシー)。
- どこでも使えます。
deja sync ssh laptopでマシン間を同期でき、クラウドを経由しません。deja handoff --to codexで別のエージェントに引き継げます。 - Goの単一バイナリです。 macOS、Linux、Windowsに対応し、Homebrew、Scoop、winget、npm、または
go installからインストールできます。
自分の作業をカードに
deja stats --card でターミナルに表示できます。ファイル名を指定すると、プロフィールのREADME用にSVGを書き出します。ほかの場所に投稿する場合は、PNGに変換してください。このページでは、お使いのブラウザー内で変換できます。
すべての機能については、ドキュメントをご覧ください。
インストール
macOSとLinuxでは、冒頭の2つのコマンドだけでインストールできます。
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の履歴検索機能を組み込み、対応しているエージェントではセッション開始時の履歴検索を有効にし、最初のインデックスを作成します。これにより、次のセッションでその分の時間がかかりません。
新しいエージェントのセッションを開始し、数か月前に取り組んだことについて質問してみてください。
JWTのリフレッシュトークンのローテーションに以前取り組んだことはありますか?履歴を確認してください
わざわざ質問する必要もありません。自動履歴検索を有効にしておけば、セッション開始時にエージェントはそのプロジェクトで解決したことをすでに把握しています。自分で確認するには、deja を実行してください。
ほかのインストール方法と、すべてではなく一部だけ使いたい場合の方法
brew install deja-vu、go install github.com/vshulcz/deja-vu/cmd/deja@latest、またはインストールせずに試せる npx @vshulcz/deja-vu "query" を利用できます。MCP サーバーをバンドルとして受け取れるデスクトップアプリでは、
最新リリースの .mcpb を開いてください。バイナリが含まれています。
Claude Code、Qwen、OpenClawでは、それぞれのマーケットプレイスから同じプラグインバンドルを入手できます(Codexには独自のバンドルがあり、
独自のパッケージがあるハーネスの表に記載されています。また、Cursor用のものは
cursor-plugin/ にあります)。
Copilot CLIにもインストールされますが、スキルのみが対象です。そのため、そこで deja install copilot-auto を実行してください:
claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu
Windowsでは、インストールスクリプトはシェルスクリプトのため、unsupported OS と表示して終了します。Windowsに標準で付属するwinget、またはScoopのすべてのインストールで使えるメインバケットからScoopを利用してください:
scoop install deja-vu
winget install vshulcz.deja-vu
または、最新リリースから deja-vu_<version>_windows_amd64.zip を入手し、deja.exe を %USERPROFILE%\.local\bin などの PATH に含まれる場所に配置してください。
バイナリだけでも検索機能を完全に利用できます。インデックス作成、検索、show、ctx、blame、--json、およびマスキングに、ほかのものは必要ありません。deja install を実行すると、エージェントにMCPを組み込み、セッション開始時の履歴検索を有効にします。便利ですが、必須ではありません。バイナリのみのセットアップでは、deja doctor はすべてのMCP接続先について config missing と報告します。エージェントがインストール済みの場合は not-wired と報告しますが、これは想定どおりの動作です。deja warmup はさらに、エージェントにCLIの仕様(deja recall、ctx、blame、履歴検索ページの読み方、次のページの要求方法)を教えるスキルを ~/.agents/skills/deja-search/SKILL.md に配置します。これにより、MCPがなくても履歴を検索できることをエージェントが把握できます。リポジトリ内のコピーは
skills/deja-search/SKILL.md にあります。
deja install --all は、セッション開始時の履歴検索を行わない --auto です。エージェントは各セッションの開始時ではなく、必要だと判断したときに履歴を参照して回答します。
エージェント設定ガイドでは、各ハーネスの対応状況、aiderの読み取り専用コンテキストファイル、Windowsで使う cmd /c deja mcp ラッパーについて説明しています。
各エージェントのガイダンスファイルに書き込まれる内容
インストール時には、検出したハーネス向けにユーザーレベルのガイダンスも書き込みます。Claude Code、Codex、opencode、Gemini CLI、Antigravity、Qwen、Kimi Code、pi、Senpi、Copilot、VS Code Copilot Chat、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には、それぞれ専用のガイダンスファイル(または設定済みの `XDG_CONFIG_HOME` 配下)に書き込みます。再実行すると、周囲のユーザーコンテンツを変更せずに、deja のスキルまたはマークされたブロックを書き換えます。オプトアウトするには、`deja install --all --no-guidance` を使います。Grok Build と Devin CLI には、共有スキルを `~/.agents/skills` にインストールします。これらが読み込むのはこの共有スキルです。その隣に書き込まれる `~/.grok/GROK.md` は、同じディレクトリを使う別のコミュニティ CLI 向けです。Cursorにはユーザーレベルの指示ファイルがないため、Cursorがスキルを読み込む4つの場所の1つである `~/.agents/skills` に共有スキルをインストールします。これは毎回のセッションではなく、関連がありそうな場合にのみ読み込まれます。Kilo Code、gajae-code、Kimchi、Command Code、Cherry Studio、Reasonixにはスキルを、MiniMax Codeにはプラグインパッケージ内にスキルを、Kiroにはスキルとステアリングファイルを、それぞれのインストール先にインストールします。プライバシー
インデックス作成と検索はローカルで行われます。ネットワークを使用するのは deja update、deja sync ssh、deja doctor でのバージョン確認、設定したエンドポイントに対する deja embed(セマンティック用サイドカーの構築後は、各検索でもクエリをそのエンドポイントに送信します)、および対話型コマンドの実行時に1日1回行う最新リリースの確認のみです。この確認でセッションデータが送信されることはありません。DEJA_OFFLINE=1 を設定すると確認が無効になり、DEJA_NO_UPDATE_NOTICE に任意の値を設定した場合も無効になります。後者は、新バージョンの初回実行時に表示される通知も非表示にします。
インデックス作成時に認証情報を除去します。対象はクラウドおよびプロバイダーのキー、トークン、JWT、PEMブロック、URL内または文章で記述されたパスワードです。それぞれ [redacted:<kind>] に置き換えられ、周囲のテキストは引き続き検索できます。元のトランスクリプトには認証情報が残ります(あるマシンでは42セッションに84件ありました)。deja secrets は値を表示せずに該当するセッション名を表示し、deja secrets --scrub は可能なものを書き換え、元のファイルをその隣に保持します。
deja forget はセッションを削除し、再構築後も削除状態を維持します。~/.config/deja/exclude では、1行につき1つのプロジェクトを除外できます。また、harness:opencode のように指定してストア全体を除外できます。セキュリティモデルには、データの流れと、リダクションで検出できないものについて記載されています。
CLI
ターミナルで deja のみを実行すると、検索画面が開きます。クエリを指定するか、以下のコマンドを実行すると、結果を表示して終了します。
$ 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 <query> | すべての履歴を検索します。複数の単語は AND 検索になり、引用符で囲んだフレーズは連続したテキストに一致する必要があります。完全一致がない場合は、単語形や類似した綴りを試します。部分文字列が単語に一致するのはこの段階です(code で opencode が見つかります)。--sort date を指定すると、最新の一致から順に表示します。 |
deja | ターミナルでは、上記の全画面検索を表示します。代わりに deja brief を実行すると、今日のセッション、deja が提供した内容、最近の作業、試すべき検索をまとめたテキスト概要を表示します。 |
deja wip | このディレクトリでの直近のセッションの内容を表示します。タスク、決定したこと、作業中のファイル、最後のコマンド、およびその失敗の有無を、誰かが書き残したメモではなく、トランスクリプトから導き出します。 |
deja blame <path>[:line] | ファイルについて話し合ったセッション、決定したこと、その理由を表示します。行を指定すると、その行を最後に変更したコミットと、その行またはコミットで置き換えられたテキストを書いたセッションも表示します。--attribution は行の情報のみを出力し、--json を指定すると JSON 形式で出力します。--git-note を指定すると、refs/notes/deja に記録します。 |
deja files <topic> | 逆に、あるトピックに関する作業で実際に変更されたファイルを表示します。 |
deja how <tool> | 以前にエージェントが実行した内容から、このマシンで実際にそのツールを実行する方法と、使用するフラグを表示します。 |
deja fix <error> | 同じエラーが再発しなかった場合に、このマシンで以前そのエラーの後に実行した内容を表示します。マージ、強制プッシュ、削除は行いません。 |
deja friction | 3 つ以上の別々のセッションで発生したエラーと、それらが発生したハーネスを表示します。 |
クエリの先頭の単語が 4 文字以上で、コマンド名と 1 文字違いの場合、deja はそのコマンドを標準エラー出力に表示してから、通常どおり検索します。候補の表示を省略するには、deja search <query> を使用します。
検索結果の活用と、マシン間での移動
検索結果を活用する
| コマンド | 説明 |
|---|---|
deja ctx <query> | 最も一致度の高い結果と、変更されたコードをまとめた Markdown ダイジェストを出力します。プロンプトにそのまま渡せます。 |
deja recall <words> | MCP のリコールツールがエージェントに提供するページを表示します。約 4 KB で、このプロジェクトが優先されます。シェル経由で deja を実行するスキルやスクリプト向けです。 |
deja resume <id> | 見つかったセッションを、対応するハーネスで再開します。--app を指定すると、Codex のセッションを ChatGPT デスクトップアプリで開きます。 |
deja restore <path> | エージェントが置き換えた範囲を、その編集で記録された old_string から復元します。元のファイルに上書きすることはありません。 |
deja promote <id> | セッションを、出典情報、タグ、ライフサイクル状態を含む厳選されたメモにまとめます。メモは生のトランスクリプトより優先されます。 |
deja share <id> | 秘密情報をすでに除去した、同僚と共有できるセッションダイジェストを作成します。 |
移動と確認
| コマンド | 説明 |
|---|---|
deja sync export/import/ssh | マシン間で記憶を移動します。ウォーターマーク付き、追記専用、冪等です。 |
deja view | 記憶全体を 1 つのローカル HTML ファイルとして表示します。サーバーは不要で、ファイルがマシンの外に出ることもありません。 |
deja stats | エージェントの作業をまとめて表示します。--card はターミナルに表示し、--card <file>.svg はプロフィール用の画像を書き出し、--html は閲覧可能なタイムラインを生成します。 |
deja secrets [--scrub] | 認証情報を含む元のトランスクリプトがあるセッションと、その種類を表示します。値は表示しません。--scrub は可能なファイルを書き換え、元のファイルは隣に残します。 |
deja rules [sync] | 継続して適用するルールを ~/.config/deja/rules.md に保存します。sync は、マーク付きのブロックとして、インストール済みのすべてのエージェントのグローバルルールファイルにコピーします。 |
deja rules candidates [--json] [--limit n] [--since 90d] | すべてのツールにわたって、エージェントを訂正したやり取りを、セッション番号付きで表示します。エージェントにルールの提案を依頼すると、やり取りがグループ化されます。選択するまで、何も書き込まれません。 |
deja doctor [--deep] | 自己診断を行います。--deep を指定すると、ソースと照合してインデックスを検証します。 |
deja mcp | stdio MCP サーバーです。deja install によって設定されます。 |
MCP ツール
サーバーが公開するツールはmodeを指定するdejaの1つだけで、deja installで組み込めます。1ターンあたりのツール定義のコストは477トークンです。day zeroで測定した7つのサーバーのうち、最も大きいものでは8,283トークンかかります。以前の6つのツール名(recall、recall_context、blame、fix、how、remember)も引き続き応答します。deja mcp --context-searchは、Qwen CodeのExternal Context MCP Profile v1用の、単一のcontext_searchツールを備えた別のサーバーです(Qwenのページ)。
引数と戻り値の形式
| ツール | 引数 | 戻り値 |
|---|---|---|
deja | mode、q、harness?、project?、limit? | 以下のモードによって異なります。 |
qには、モードに応じて質問などを指定します。以下のモードごとの引数名も引き続き受け付けますが、ツールが呼び出されるかどうかにかかわらずスキーマは毎ターン読み込まれるため、宣言されなくなりました。
| モード | qの内容 | 併せて読み取るもの | 戻り値 |
|---|---|---|---|
recall | 質問、またはエラー文字列、名前、フラグの完全一致 | 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 | 後で参照するために保持する事実または決定事項1つ | project?、tags? | 後で参照できるよう、長期的に保持する決定事項を保存します。 |
handoff | セッションIDまたはハーネス名。この環境で最新のセッションの場合は空欄 | harness? | 別のセッションの目標、継続的な指示、最新の結論、合格したチェック、および中断した場所を返し、そのセッションを続行できるようにします。 |
対応ハーネス
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 アーカイブと圧縮イベントには zstd(2026.9.9+) | | opencode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 | | Continue | ✅ | ⚠ | ✅ | ✅ | ✅ | ✅ | — | | Crush | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 | | pi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | | prime-agent (PrimeIntellect) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | | Qwen Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | | Cherry Studio | ✅ | ✅ | ✅ | ✕ | ✕ | 貼り付け | Settings -> 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 がフックを実行するのは、Settings > Hooks で有効にした後だけです。
カスタムのストア場所は DEJA_*_ROOT 変数で指定でき、各エージェント固有の移動先指定変数も尊重されます。
セッション形式レジストリには、ハーネスごとに観測されたパス、レコードのスキーマ、ロールのマッピングが記載されています。また、合成フィクスチャによって、これらの説明がパーサーに対して常に検証されています。
独自のパッケージを持つハーネス
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 → 拡張機能 → 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 | Hermes プラグインカタログのメモリープロバイダー deja-memory | hermes plugins install deja-vu、または GitHub から:hermes plugins install vshulcz/deja-vu/extensions/hermes |
どちらの方法も単独で使えます。両方を使っても機能が二重になることはありません。各パッケージは、deja install がすでに書き込んだ内容を読み取り、すでにお使いの deja を利用します。
Spec Kit プロジェクトでは、拡張機能によって /speckit.deja-vu.recall が追加され、実装前に過去のセッションを検索して、その機能について調べられます。
specify extension add deja-vu --from https://github.com/vshulcz/deja-vu/releases/latest/download/deja-spec-kit.zip
同じ検索機能は、SKILL.md を読み込むあらゆるエージェントで使えるスキルとしても提供されています。
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 キーで利用できます。
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 を明示的に設定してください。
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 が自動的に使われるのは、URL が HTTPS の api.openai.com の場合に限られます。ローカルまたはサードパーティのエンドポイントに暗黙的に送信されることはありません。
多言語 E5 ファミリーなど、指示プレフィックスを使って学習されたモデルでは、クエリと文書の両方にプレフィックスが必要です。DEJA_EMBED_QUERY_PREFIX はすべての検索クエリの先頭に、DEJA_EMBED_PASSAGE_PREFIX はインデックス化するすべてのテキストの先頭に追加されます。どちらもデフォルトでは空です。
export DEJA_EMBED_MODEL='multilingual-e5-small'
export DEJA_EMBED_QUERY_PREFIX='query: '
export DEJA_EMBED_PASSAGE_PREFIX='passage: '
deja embed
文書プレフィックスはサイドカーのモデル名の一部です。そのため、これを変更するとすべてのデータが再度埋め込み処理され、検索では別のモデルまたはプレフィックスで作成されたベクトルが無視されます(この説明は一度だけ表示されます)。
サイドカーは index.db の内部ではなく、インデックスと並んで .vectors.bin として保存されます。Float32 ベクトルの容量は、1,024 次元モデルの場合、メッセージ 1,000 件あたり約 4 MB です。リモートエンドポイントには、編集済みのインデックス化テキストが約 2,000 文字に切り詰められて送信されますが、生のソースファイルが送信されることはありません。Ollama または LM Studio を使う場合、埋め込み処理はローカルで行われ、キーは必要ありません。
検索はミリ秒単位です。LongMemEval-S では、クリーンアップ済みの470問のデータセットで hit@1 が88.1%、全500問では hit@1 が87.4%です。LoCoMo の検索では hit@1 が70.5%です。このマシンがすでに解決済みのタスクでは、トークン数を58%削減しました。各方式を11回実行し、何も接続していない場合は53,558対126,222トークン、後のビルドで方式を交互に実行した場合は52,815対103,443トークンでした。どちらの検索ハーネスもこのリポジトリに含まれており、公開データセットで数分以内に実行できます:ベンチマーク · 1つのタスクにかかるコスト。
その他の測定結果は deja bench で確認できます。
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 <query> のエンドツーエンド | このストアで中央値約0.2秒:プロセスの起動、すべてのストアの最新状態チェック、ランキング、出力 |
| 最新状態チェックのみ | 変更がない場合は約50 ms |
| インデックスサイズ | 200 MB、コーパスの約10% |
その後、同じストアは2,754件のセッション、358k件のメッセージ、5.7 GBに増加しました。全体を対象にしたコールドビルドには71秒かかり、232 MBのインデックスを書き込みます。トランスクリプト内で同じ内容が繰り返されるほど割合が下がるため、コーパスの4%です。エンドツーエンドの中央値は変わらず、0.25秒です。
インデックスは増分更新されます。セッションファイルが増えた場合、再読み込みするのはそのファイルだけです。ファイルが書き換えられた場合、新しいレコードを追加し、古いレコードはその場で無効化します。40,000件のセッションがあるストアで、書き換えられた20件のトランスクリプトを処理するのに1.7秒かかり、メモリ使用量のピークは1 GB未満です。多くのセッションに含まれる単語の検索には約1秒かかります。
仕組み
~/.cache/deja にローカルの転置インデックスを作成します。JSONL と SQLite のストアを解析し、認証情報を伏せたうえで、追記専用の records.bin とトークンバケットを書き込み、ファイルごとの状態を manifest.gob で追跡します。そのため、以降の実行では変更分だけを取り込みます。MCP サーバー、統計、共有、同期はすべてこのインデックスを読み取ります。詳細はdocs/ARCHITECTURE.mdをご覧ください。
よくある質問
マシンの外部にデータが送信されますか?
明示的に依頼しない限り、送信されません。データフローをご覧ください。
ログにすでに含まれている秘密情報はどうなりますか?
元のハーネスファイルに保存されています。これらはエージェントのデータです。`deja secrets` を実行すると、ローテーションや削除の対象となるセッションが表示され、`--scrub` はアクセス可能なトランスクリプトを書き換えます。既知の形式(AWS キー、`api_key=`/`token=` の割り当て、ベアラートークンや JWT のみの文字列、PEM ブロック、プロバイダートークン、高エントロピー値)は、インデックスの構築時に除去されるため、ダイジェスト、共有データ、同期エクスポートには含まれません。パターンマッチングは秘密情報の検出ではありません。認識できない形式の値は通過する可能性があります。[セキュリティモデル](docs/SECURITY-MODEL.md#redaction-boundary)をご覧ください。エージェントの動作は遅くなりますか?
検索はローカルインデックスに対する語彙検索です。 中央値は 0.7~0.8 ms で、モデルの応答を待つことはありません。フックでは、プロセスの起動とストアの鮮度チェックが追加されます。1.9 GB のストアでは、全体で約 0.2 秒、19k セッションのインデックスに対するプロンプトごとのフックでは 0.59 秒です。
自動で再インデックスされないようにできますか?
はい。負荷の高いサーバーでは、DEJA_NO_AUTO_INDEX=1 を設定するか、~/.config/deja/policy.json に "auto_index": false を指定すると、自動更新がすべて停止します。検索、MCP の検索、フックは最後に完了したインデックスを使って応答し、更新日時を通知します。また、deja が起動する処理によって書き込みが発生することもありません。cron または systemd のタイマーから deja index を実行してください。
検索専用のインデックスを作成できますか?
はい。DEJA_SEARCH_ONLY=1 を設定するか、~/.config/deja/policy.json に "search_only": true を指定すると、修正、コマンド、共起のマイニングがスキップされ、ビルド時の CPU 使用量が約 5 分の 1 減ります。この設定は、次回の deja index から適用されます。検索、想起、blame はこれまでどおり機能し、deja fix はインデックスが検索専用であることを通知します。コマンド、ツール出力、パス、編集内容をインデックスに含めないための DEJA_INDEX_* スイッチと、各スイッチで無効になる機能については、コマンドガイドをご覧ください。
作業の進め方を変える必要はありますか?
いいえ。エージェントが自ら検索を呼び出します。自動検索を有効にすると、セッションの開始時に、エージェントはすでにプロジェクトの過去の決定事項を把握しています。
他のメモリツールとはどう違いますか?
| deja | メモリプラットフォーム (Mem0、Letta、memU) | セッション検索 (cass) | |
|---|---|---|---|
| インストール前の作業内容を把握している | はい | いいえ | はい |
| 記録の手順 | なし。トランスクリプトがメモリです | エージェントまたはコードが情報を書き込みます | なし |
| LLM または埋め込みキーが必要 | いいえ | はい | 任意 |
| 求められなくても情報を呼び出す | セッション開始時とツール実行前 | いいえ | いいえ |
engramは、記録を中心とするツールの中で最も優れており、そのモデルが合うなら試す価値があります。ただし、最初は空の状態で、エージェントが保存することを選んだ情報しか把握しません。比較の詳細では、15 個のツールを取り上げています。
Claude Code のセッション履歴はどこに保存されていますか?検索できますか?
~/.claude/projects の下に、セッションごとに 1 つの JSONL ファイルとして保存されています。Codex は ~/.codex/sessions に、Cursor は SQLite の state.vscdb に保存します。deja はこれらすべてを保存場所から直接読み取ります。引数なしの deja を実行すると、検索や閲覧用の画面が開きます。deja search ならスクリプトから検索でき、deja last ならすべてのエージェントの最近のセッションが一覧表示され、deja view なら履歴全体がローカルページで開きます。各エージェントの保存場所については、セッションの保存場所をご覧ください。
Claude Code のセッション履歴が消えてしまいました。もう失われたのでしょうか?
Claude Code は 30 日より古いトランスクリプトを(`~/.claude/settings.json` の `cleanupPeriodDays` に従って)削除し、`claude --resume` には残っているものだけが表示されます。削除前に deja がインデックス化したセッションは、ファイルがなくなった後も検索できます。また、セッション開始時の週次メモには、保持された件数と、復元するための ID `deja resume --write-back` が記載されます。詳細:[ディスク上のセッションファイル](https://vshulcz.github.io/deja-vu/guide/session-files-on-disk.html)。Windows ではどうですか?
ビルドがあり、CI ではテストスイートが実行されています。実績が十分にあるのは macOS と Linux です。使用時の報告は #9 までお寄せください。
1 つのプロジェクトが複数のチェックアウトに分かれています。recall では 1 つとして扱えますか?
プロジェクト名はエージェントが実行されたディレクトリに基づくため、モノレポの各チェックアウトと、タスク用に作成された各ワークツリーは、それぞれ独立したプロジェクトになります。フックは現在のディレクトリにあるプロジェクトだけから recall します。~/.config/deja/projects に、1 行につき <path> = <name> の形式でツリーを列挙してください。
~/work/monorepo = work
~/work/worktrees = work
列挙したパスの配下にあるすべてのディレクトリは、インデックス化、フック、recall のすべてでそのプロジェクトとして扱われます。一致するパスが複数ある場合は、最も長いパスが優先されます。ファイルを編集しても、すでにインデックス化された項目の名前は変更されません。再構築が必要な場合は deja index と deja doctor が通知し、deja index --rebuild はトランスクリプトがまだディスク上にあるセッションを新しい名前で登録します。ファイルが作成される前にインデックス化されたセッションは、それまでは各自のチェックアウトから引き続き一致します。トランスクリプトがなくなった保持済みセッションと deja remember のメモには、登録時の名前が残ります。除外ファイルが優先されます。リポジトリ自体の名前で除外されている場合は対象外のままで、エイリアス名のパターンで除外するとツリー全体が対象外になります。
すべて消去するにはどうすればよいですか?
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 にあります)。
ガイド
機能ではなく、状況に合わせて書かれています。
- エージェントは過去の会話を覚えていますか? — 各エージェントがセッション間で保持するものと、破棄するもの
- ディスク上のセッションファイル —
~/.claude/projectsがどれほど大きくなるか、削除すると何が失われるか - エージェントがこれまでのコンテキストを失った — クラッシュ後、クリア後、または空の状態で再開したセッションについて
- コンテキストウィンドウがいっぱいです — コンパクションで何が保持されるか、測定結果、代わりにすべきこと
- 昨日のセッションを再開する — すべてのエージェントからセッションを探し、それを所有するエージェントで再開する
- エージェントがすでに修正したミスを繰り返す
- 解決したセッションを見つける
- エージェントがセッション間で忘れてしまう理由 · 各エージェントが履歴を保存する場所
- 削除した Claude Code セッションを復元する · Claude Code:セッション ID の会話が見つかりません · Codex セッションの再開 · 古い Claude Code セッションを削除する
- 各メモリーツールをインストールした時点で把握していること · メモリープラグインの比較
- コンパクションで破棄されるもの · エージェントの切り替え · エージェントの監査 · 会話のエクスポート · 複数のマシン間で · メモリーにかかるコスト ハーネス別:Claude Code · Codex · Cursor · Windsurf · opencode · DeepSeek Harness · Kimi Code · Zed · Grok Build · Gemini CLI · Qwen Code · OpenClaw · Goose · Cline · pi · Hermes · Copilot CLI · Copilot Chat · aider · Amp · Antigravity · Continue · Crush · Roo Code · Kilo Code · Kiro · Cherry Studio · Oh My Pi · prime-agent · Senpi · Kimchi · Command Code · ZCode · gjc · CodeWhale · Reasonix
自分の履歴で試す
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
インストールは10秒、インデックス作成も約10秒です。エージェントが次のセッションを開始すると、そのプロジェクトで解決したことをすでに把握しています。このツールをインストールする前の内容もすべて含まれます。
コントリビューション
make build test lintを実行してから、CONTRIBUTING.mdをご覧ください。ハーネスの追加はパーサーレジストリから始めます。優先事項と対象外事項はROADMAP.mdに記載されています。初めて取り組むのに適したIssueにはラベルが付いています。
サポート
バグや質問はissuesへお寄せください。悪用可能と思われる問題は、代わりにSECURITY.mdにある非公開のアドバイザリーリンクからご報告ください。dejaが読み取る内容、外部に送信しない内容、プロジェクトの除外方法やセッションの削除方法については、プライバシーをご覧ください。
ライセンス
MIT © Vladislav Shulcz
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。