AI・機械学習
コーディングエージェントのためのオープンソースメモリ、SSH経由で同期
Open-source memory for coding agents, synced over SSH (github.com)
要約
dejaは、Claude Code、Codex、opencodeなどのコーディングエージェントが生成する大量の会話履歴やデバッグ記録を、SSH経由で同期可能な検索可能なメモリレイヤーに変換するツールです。数ミリ秒でギガバイト級のデータから情報を検索でき、エージェントの過去の解決策を再利用したり、機密情報を自動的に削除したりする機能を提供します。単一のバイナリで動作し、モデルのダウンロードやサービスの実行は不要です。
全文翻訳
あなたたちのエージェントはすでにこれを解決しました。dejaが見つけます。
vshulcz.github.io/deja-vu Claude Code、Codex、opencodeは、すべての会話をローカルファイルに書き込みます—検索できない、デバッグ済みの問題と設計上の決定のギガバイトです。dejaは、それらの履歴をメモリレイヤーに変換するゼロ依存のバイナリです:deja "connection pool exhausted" を検索—ギガバイト全体で7〜9ミリ秒、遡及的:インストール前の数ヶ月のログ。エージェントのリコール MCPリコールツール—エージェントは、再デバッグする代わりに「3週間前にこれを修正しました」と答えます、ハーネス全体で。自動リコール install --auto はSessionStartフックを追加します:関連するメモリが、あなたが尋ねる前にコンテキストに入ります。機密情報 APIキー、JWT、秘密鍵はインデックス時に削除されます—キャッシュは安全に保持できます。統計 deja stats — あなたのエージェントの作業、ラップされた:ハーネス、トッププロジェクト、アクティビティスパークライン。共有 deja share <id> — セッションのサニタイズされたダイジェストを同僚に渡します、秘密情報はすでにスクラブされています。同期 deja sync export/import — マシン間でメモリを移動します、追記型、冪等です。
単一のバイナリ。ダウンロードするモデルなし、実行するサービスなし、何もマシンから離れません。(opencodeのインデックス作成はsqlite3 CLIにシェルアウトします。これはmacOSとほとんどのLinuxディストリビューションにプリインストールされています。)
インストール
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
または:
go install github.com/vshulcz/deja-vu/cmd/deja@latest # Go
npx @vshulcz/deja-vu "query" # npm、インストール不要
brew install vshulcz/tap/deja-vu # Homebrew
使用しているエージェントにワイヤー接続します(設定を編集し、.bakを保持します):
deja install --all # MCPリコール for claude-code, codex, opencode
deja install claude-code --auto # + SessionStart auto-recall hook
これで完了です。次のセッションで、エージェントに尋ねてください:jwtリフレッシュローテーションを以前に扱ったことがありますか?メモリを確認してください—または--autoを使用すると、尋ねる必要はありません:エージェントは、そのプロジェクトで解決したことをすでに知ってセッションを開始します。
CLI
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2件のマッチ
ログインはリフレッシュトークンローテーション後に失敗し始めました。JWT kidの不一致は、rotateKey後にjwksキャッシュをリロードし、クロックスキューテストを追加することでテストで修正されました。
[codex] web · Jul 1 · b77d91e2 — 1件のマッチ
リフレッシュトークンCookieは、ローカルコールバックフローでSameSite=Laxが必要でした。
コマンド
何をするか
deja <query> 全ての履歴を検索します。複数単語はAND、部分文字列マッチ(codeはopencodeを見つけます)。--re, --harness, --project, --since 30d, --role, --json。
deja ctx <query> 最良のマッチのコンパクトなマークダウンダイジェスト—プロンプトにパイプします。
deja share <id> 同僚向けのサニタイズされたセッションダイジェスト:秘密情報は削除され、ツールノイズは削除されます。
deja stats 合計、ハーネスごとの分割、トッププロジェクト、月間スパークライン。--jsonも。
deja sync export <dir> [--full] / import <dir> / ssh <host> [--pull]
マシン間でメモリを移動します—共有フォルダまたは1つのsshコマンド経由。ウォーターマーク付き、追記型、冪等。
deja show <id> / deja last [n] 1つのセッションを読む/最近のものをリストします。
deja sources 発見されたストア、サイズ、メッセージおよび削除カウント。
deja mcp 標準入出力MCPサーバー(deja installがワイヤー接続するもの)。
deja warmup 検索せずにインデックスをビルド/リフレッシュします—cronまたはシェル起動に便利です。
MCPなしのコンテキストパイピング:
claude "Prior context: $(deja ctx 'database migration')"
マシン間の同期
両方のマシンを1つの共有フォルダ(Syncthing、iCloud、gitリポジトリ—ファイルを移動するあらゆるもの)に向けます:
deja sync export ~/Sync/deja # マシンA:最後のエクスポート以降の新しいバッチを追記します。
deja sync import ~/Sync/deja # マシンB:まだ見ていないものを取得します。
または、もう一方のマシンがsshホップ先にある場合は共有フォルダをスキップします:
deja sync ssh mini # miniに新しいレコードをプッシュし、そこでインポートします。
deja sync ssh mini --pull # miniの新しいレコードをこのマシンにフェッチします。
sshモードは、システムssh/scpとリモート上のdejaバイナリ(PATHで検索され、~/.local/bin/dejaにフォールバックします)を使用します。バッチはプレーンなJSONLで、出力時に削除されます。インポートは冪等なので、フォルダを追記型ログとして保持し、cronから両方のコマンドを実行しても構いません。レコードは元の場所に戻ることはありません。--fullはウォーターマークに関係なくすべてを再エクスポートします—古いバッチがなくなった後にマシンを追加する場合に便利です。同期されたセッションは、検索、リコール、およびセッションスタートの自動リコールでimported:<project>の下に表示されます。
エージェントに記憶させる
deja install --all はMCPリコールとセッションスタートフックをワイヤー接続します。エージェントが独自にメモリを参照するようにするには、Claude.md / AGENTS.md に以下を追加します:
デバッグまたは再実装する前に、`deja "<query>"`(またはMCPリコールツール)を実行してください—Claude Code、Codex、opencodeを横断する過去のエージェントセッションはローカルにインデックス化されます。再利用するものを引用してください。
MCPツール
ツール
引数
戻り値
recall
query, harness?, limit?
密なマッチングスニペット、≤4KB—コンテキストで安価。
recall_context
query
最良のマッチングセッションのマークダウンダイジェスト。
--autoを使用すると、SessionStartフックは現在のプロジェクトの最近のメモリを自動的にフィードします—読み取り専用、2KBに制限され、エージェントの起動を遅延させたり中断したりすることはありません。
セキュリティ
認証情報はインデックス時に削除されます:AWSキー、汎用api_key=/token=割り当て、ベアラートークンと生のJWT、PEM秘密鍵ブロック、プロバイダートークン(ghp_、sk-、npm_、xox.、AIza)、およびscheme://user:pass@host URL。値は[redacted:<kind>]に置き換えられます。周囲のテキストは検索可能のままです。deja sourcesはストアごとのカウントを表示します。DEJA_NO_REDACT=1(危険)でオプトアウトできます。deja shareとdeja sync exportは、出力時に削除を再適用します。
サポートされているハーネス
ハーネス
ストア
ステータス
Claude Code
~/.claude/projects/**/*.jsonl
✅
Codex CLI
~/.codex/sessions/** + history.jsonl
✅
opencode
~/.local/share/opencode/opencode.db
✅
aider, Gemini CLI #6, #7 計画済み
カスタム場所はDEJA_CLAUDE_ROOT、DEJA_CODEX_ROOT、DEJA_OPENCODE_DB、DEJA_INDEX_DIRを介して指定できます。
パフォーマンス
実際のコーパスで測定—1,250以上のセッション、約3.3GB、3つのハーネスにわたる:
ウォーム検索 7〜9 ms 通常、約40 ms 最悪ケース
コールドインデックス(1回) 約10秒
インデックスサイズ コーパスの約2.4%
インデックスは増分的です:セッションファイルが大きくなると、そのファイルのみが再読み込みされます。
仕組み
~/.cache/deja にローカル逆インデックス:JSONL/SQLiteストアを解析→資格情報を削除→records.bin + トークンバケット→manifest.jsonがファイルごとの状態を追跡するため、繰り返し実行では変更されたもののみが取り込まれます。MCPサーバー、統計、共有、同期はすべて同じインデックスを読み取ります。詳細:docs/ARCHITECTURE.md。
プライバシー:インデックス作成または検索コードにネットワークパスは存在しません。ローカルファイルが入力され、ローカルキャッシュが出力されます。
FAQ
マシンから何かが出ますか?
いいえ。ツールにはネットワークコードはありません。syncはあなたが選んだディレクトリにファイルを書き込みます。それらを移動するのはあなた次第です。
Cassとどう違うのですか?
Cassはセッション検索のキッチンシンクアプローチです:22のプロバイダー、Rust、オプションのセマンティック埋め込み、TUI。dejaは反対の賭けです—1つの小さなGoバイナリ、純粋なレキシカル、3つのハーネス、ゼロセットアップ—それにメモリレイヤーのコンポーネントが追加されています:自動リコール、削除、共有、同期。
MemPalace / Mem0 / Lettaからは?
それらはメモリプラットフォームです:埋め込み、ベクトルストア、キャプチャフックまたはAPIが今後記録します。dejaにはキャプチャステップがまったくありません—エージェントがすでにディスクに書き込んだものをインデックス化します。これには、インストール前の数ヶ月の履歴も含まれます。それらは共存できます。
私のログにすでに含まれている秘密については?
それらは元のハーネスファイル(あなたのエージェントのデータ)に残りますが、dejaのインデックス、ダイジェスト、共有、または同期エクスポートには入りません。
Windowsについては?
ビルドは存在し、CIはWindowsでスイートを実行します。macOS/Linuxはテスト済みのパスです。フィールドレポートを歓迎します:#9。
プロジェクトを除外できますか?
まだ—--exclude(#8)として計画されています。今日では、DEJA_*_ROOTをフィルタリングされたコピーに向けられます。
すべてを消去するにはどうすればよいですか?
deja uninstall --all
rm -rf ~/.cache/deja
貢献
make build test lint — CONTRIBUTING.mdを参照してください。ハーネスの追加は1つのパーサーファイルです:docs/ARCHITECTURE.md。良い最初の問題はラベル付けされています。
ライセンス
MIT © Vladislav Shulcz