lore について
lore はコーディングエージェント向けのローカルメモリストア兼 CLI で、複数ツールのセッション履歴を集約して検索できます。オプションの MCP サーバーを通じて、MCP クライアントから共有履歴を検索・取得できます。
主な機能
- 01セッション履歴をローカル DB に集約
- 02対応するエージェントツールの履歴をインデックス化
- 03コードに関連する語句でメッセージを検索
- 04メッセージの前後関係とセッションのタイムラインを表示
- 05データの鮮度確認とセッション追加
活用シーン
- 01過去のコーディングセッションでの決定を再確認
- 02共有履歴を使って別のエージェントで作業を継続
- 03引き継ぎ前に関連する前後のメッセージを確認
MCP 対応
オプションの MCP サーバーは、共有ストアに対する検索、取得、状態確認、タイムライン、書き込みのツールを公開します。CLI は MCP サーバーなしでもストアを直接利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
📖 Lore
使用するすべての AI エージェントで共有できる、完全な内容を保ったセッション履歴です。
どのエージェントでも。どのセッションでも。どのターンでも。いつでも。
今朝 Claude Code で実行したセッションを、Openclaw で今日の午後に呼び出せます。 先週 Cursor が進めたデバッグのスレッドを、Hermes はその場にいたかのように読み取れます。Lore は、あらゆるツール、あらゆるセッションで、期限切れになることのない共有メモリを、すべてのコーディングエージェントに提供します。
これこそ、多くの「エージェントメモリ」が見落としている点です。他のツールは、1つのアプリ内で1つのエージェント向けに情報を記憶します。Lore では、エージェントがこれまでに行ったすべてのセッションを、いつでも別のエージェントから検索できます。Codex が解明したことを、Claude Code が把握できます。火曜日に解決した問題は、金曜日に、どのエージェントを使っていても検索ひとつで見つかります。
そして、はい。コンパクション後も残ります。コンテキストウィンドウがいっぱいになってコンパクションされても、作業内容は失われません。ディスク上にそのまま残っています。Lore を使えば、エージェントが作業する場所から、完全に検索可能な状態で再びアクセスできます。ローカルで、プライベートに、いつまでもあなたのものです。
https://github.com/user-attachments/assets/b5c0f077-47da-4502-bf78-2ce08abf034f
RLM に着想を得ています
v0.2.0 リリース
このリリースにより、Lore は古いトランスクリプトを検索するだけの機能から、実際の作業を継続する必要があるエージェント向けの、小規模なワークフロー基盤へと進化します。
- Schema 5 の書き込みに対応。 現在のインストール環境から、ライブストアへの読み書きが再び可能になりました。
lore status --jsonはschemaVersionとsupportedSchemaVersionの両方を報告するため、同期、インデックス作成、プッシュの書き込みに失敗する前に、グローバル環境に古いバージョンがインストールされていることがわかります。 - 鮮度チェック。
lore statusは、不完全なメモリからブリーフや引き継ぎ情報を書き出す前に、ソース/プロジェクトのウィンドウが準備完了、欠落、古い状態、または未同期の可能性がある状態のいずれかをエージェントに知らせます。 - 検出済みソースのライブ同期。
lore sync <source>は、検出されたアクティブなトランスクリプトツリーを段階的にインデックス化します。これにより、エージェントが生のパスを覚えておかなくても、codex(~/.codex/sessions。互換性のため、アーカイブ済みセッションも代替として使用)とclaude-code(~/.claude/projects)に対応できます。 - ワークフロースキル。 npm パッケージには、基本の
loreスキルに加えて、lore-recall、lore-brief、lore-handoff、lore-dev-verificationが含まれるようになりました。これらには、リファレンス、例、評価仕様、バリデーター、コミット済みのテストレポートが含まれます。 - パッケージのスモークテスト。
npm run package:smokeは、実際の tarball をビルド、パック、展開して検証します。README、ヘルプテキスト、スキルフォルダー、実行可能モード、パッケージメタデータをまとめて確認できます。
すでにインストール済みですか? スキーマや同期の動作をテストする前に、グローバルコマンドを更新してください。
npm install -g @jordanhindo/lore@latest
lore help
lore status --json
シェルが古いパスをキャッシュしている場合は、新しいターミナルを開くか、hash -r を実行してから lore help を再試行してください。
✨ おすすめする理由
- 🔀 1つのメモリを、すべてのエージェントで共有。 Claude Code、Codex、openclaw、Cursor、Hermes の履歴はすべて、各自の /. ストアとは別の1つのストアに格納され、どの MCP クライアントからも読み取れます。あるエージェントのセッションは、他のすべてのエージェントからすぐに読み取れます。Codex が解明したことを、Claude Code が把握できます。
- 🧠 コンテキストウィンドウがいっぱいになっても残ります。 コンパクション後も記憶が失われることはありません。先週の推論も、検索ひとつで見つかります。
- 🔍 コードを理解する検索。
getUserById、foo.bar.ts、trust-metadataを、細切れのノイズにせず、単語全体として検索できます。 - 🔒 デフォルトでローカルに保存。 すべてのデータは、あなたのマシン上の
~/.lore/lore.dbに保存されます。外部にデータが送信されることはありません。
🚀 クイックスタート(これをエージェントに貼り付けてください)
Lore は自動でセットアップされます。以下の説明をコーディングエージェントに貼り付けてください。Lore をインストールし、あなた自身の履歴をインデックス化し、完了と判断する前に検索が機能することを確認します。デフォルトではサーバーを使わず、MCP 登録も必要ありません。
Set up Lore (full-fidelity session memory) for yourself. Install it with
`npm install -g @jordanhindo/lore@latest`, then run `lore setup` to index my
history and self-verify. Prove it by running `lore search` for a word from
a past session and showing me a hit. The MCP server is optional: only
register it (`lore serve`) if you specifically want MCP tool calls instead
of the CLI; if you do, tell me the reload step I have to do.
エージェントが従う決定論的な手順は
AGENT-ONBOARD.md にあり、MCP 登録は
オプションの手順として扱われます。代わりにスキルを使いたいですか? npx skills add jordanhindo/lore
(以下)を実行すると、セルフブートストラップ型の lore スキルが追加されます。このスキルは、次に何かを思い出すよう頼んだときに、これらすべてを実行します。
🛠️ 自分でインストールする
おすすめ:スキルをインストールしてください。残りのセットアップも行います。
npx skills add jordanhindo/lore
これにより、バンドルされた lore スキルがエージェントに追加されます(~/.claude/skills/)。このスキルはセルフブートストラップ型です。次にエージェントに何かを「記憶」/「思い出す」よう頼むか、「lore をセットアップして」と頼むと、スキル自身が references/setup/index.md を読み込み、lore CLI をインストールし、履歴をインデックス化して、検索が機能することを確認します。MCP サーバーは必要ありません。1 つのコマンドで必要なものがすべてインストールされます。
または、CLI を直接インストールする:
npm install -g @jordanhindo/lore@latest # puts the `lore` command on your PATH
Node 22 以降が必要です。これでインストールは完了です。あとは lore setup が処理します。npm install が better-sqlite3 で失敗する場合や、その後 lore が見つからない場合は、Windows も含めて、トラブルシューティング
のセクションを参照してください。
グローバル CLI をアップグレードする
グローバルの lore コマンドは、npm バイナリのシムにすぎません。古いパッケージを使っていた場合は、lore sync、lore index、lore push を信頼して使う前に更新してください。
npm install -g @jordanhindo/lore@latest
lore help
lore status --json
lore status --json に表示されるストアの schemaVersion が
supportedSchemaVersion より大きい場合、コマンドがまだ古いままです。パッケージを再インストールし、必要に応じて新しいシェルを開いてから、lore status --json を再実行してください。
ソースからインストールする
クローンはコントリビューター、または新しいアダプターの開発者向けです(ソースツリーが必要です)。
git clone https://github.com/jordanhindo/lore && cd lore
npm install
npm run build
npm link # optional: puts `lore` on your PATH
📥 履歴をバックフィルする
lore setup が最も手軽な方法です。マシン上のハーネスを検出し、それぞれをインデックス化して、検索が機能することを確認し、Lore を MCP クライアントに接続する方法を表示します。
lore setup
より細かく制御したい場合は、lore index にトランスクリプトディレクトリを指定します。Claude
Code の場合は ~/.claude/projects です。
lore index ~/.claude/projects # primary transcripts
lore index ~/.claude/projects --subagents # include subagent transcripts
lore index ~/.claude/projects --no-redact # keep credentials verbatim (see Privacy)
その他のハーネスは --source で追加できます。Codex、openclaw、Cursor、Hermes はすべて組み込みで対応しています。
lore index ~/.codex/sessions --source codex
lore index ~/.openclaw/sessions --source openclaw
lore index ~/.cursor --source cursor # reads Cursor's SQLite state store
lore index ~/.hermes --source hermes # reads Hermes's SQLite state store
Cursor と Hermes は履歴を JSONL ファイルではなく SQLite データベースに保存します。lore index にディレクトリを指定すると、アダプターがストアを直接読み込みます。現在サンプルで確認されている Cursor の行には toolResults フィールドがありますが、中身は空の配列のみです。そのため、Cursor アダプターはテキストのみをインデックス化し、ツール呼び出しを捏造することはありません。
これらのコマンドはいつでも再実行できます。変更されていないファイルはスキップされるため、繰り返し実行しても負荷は軽微です。
一部のハーネスは、Lore 互換のフックペイロードを出力するのではなく、トランスクリプトのツリーを書き込みます。アクティブなセッションを手動で追跡するには、インクリメンタル同期コマンドを使用してください。
lore sync codex
lore sync claude-code
lore sync hermes
codex の同期では ~/.codex/sessions をインクリメンタルにインデックス化し、互換性のためのフォールバックとして ~/.codex/archived_sessions のみを使用します。claude-code の同期では、サブエージェントのトランスクリプトも含め、~/.claude/projects をインクリメンタルにインデックス化します。hermes の同期では ~/.hermes をインクリメンタルにインデックス化します。
cron、launchd、タスクスケジューラ、またはその他の無人タイマーでは、複数のソースジョブが同時に ~/.lore/lore.db に書き込まないよう、lore sync を直接実行するのではなく、同梱のロック付きラッパーを使用してください。
./scripts/lore-sync-once.sh codex
./scripts/lore-sync-once.sh claude-code
./scripts/lore-sync-once.sh hermes
💻 CLI から呼び出す。サーバーは不要です
Lore を使うのに MCP サーバーは必要ありません。lore コマンドは SQLite
ストアを直接開くため、シェルが使える環境ならどこでも、検索、読み返し、移動、書き込みをすべて
サーバーなしで実行できます。下記の MCP サーバーは、同じストアを読み取るもうひとつの手段にすぎず、ここで説明する内容はサーバーに依存しません。
手順は常に同じです。掘り下げて、すべてを一度に出力しないでください。 セッションは数百万トークンに及ぶ場合があるため、全体をコンテキストに読み込むことはありません。広く検索し、返された実際の ID(自分で作り出すことはありません)を取得して、それを使います。
lore search "fts tokenizer" --relevant # → hits, each leading with a message + session id
lore get <message-id> --full # read that one message in full
lore context <message-id> # 5 before / 5 after, anchor flagged
lore session <session-id> --around <message-id> # jump to that spot, read forward
ほかのコマンドも、この手順を補います。lore status(鮮度/状態確認)、lore sessions(最近の会話)、lore timeline(日/時間ごとのアクティビティ)、lore push(標準入力の JSON バッチからライブセッションを追加)があります。どのコマンドにも --json を追加すると、機械可読な形式で出力されます。
MCP ツールで使用できる検索フィルターは、こちらでもすべて使用できます(--project、--source、--session、--branch、--agent、--skill、--tool、--role、--model、--since、--until、--limit)。
最新の概要や引き継ぎ情報を求める前に、鮮度を確認してください。
lore status --json --source codex --project "$PWD"
schemaVersion と supportedSchemaVersion は、このビルドがストアに書き込めるかどうかを示します。読み取り専用の検索は、新しい互換性のあるストアに対しても動作する場合がありますが、sync/index/push は、インストール済みビルドがストアのスキーマに対応している場合にのみ実行されます。ソースチェックアウトでは、グローバルな lore shim を信頼する前に npm run build を実行してください。npm からインストールした場合は、npm install -g @jordanhindo/lore@latest を実行し、もう一度 lore status --json を確認してください。
CLI ⇄ MCP の同等性は、主張ではなく実証されています。 各 lore … --json エンベロープは、対応する MCP ツールの応答とバイト単位で同一です。これは、共有のフィクスチャストアに対して両方の経路を実行する同等性テストスイートで検証されています。そのため、CLI はサーバーの忠実な代替手段です。
| タスク | CLI | MCP ツール | --json エンベロープ |
|---|---|---|---|
| キーワード検索 | lore search | search_memory | { count, hits } |
| 新しさを加味した検索 | lore search --relevant | find_relevant | { count, hits } |
| 1 件のメッセージ | lore get | get_message | 詳細オブジェクト/{ error, message_id } |
| 前後のメッセージ | lore context | get_context | { messages } |
| セッションのページ | lore session | get_session | { messages, nextCursor } |
| セッション一覧 | lore sessions | list_sessions | { count, sessions } |
| アクティビティ | lore timeline | timeline | { buckets } |
| 状態/鮮度 | lore status | status | 状態エンベロープ |
| 書き込み | lore push | push | 結果/{ error, detail } |
同梱の lore スキル(skills/lore/)は、検索するタイミング、どの ID を使うか、すべてを一度に出力せずに掘り下げる方法など、この一連の手順をエージェントに教えます。これ自体で導入を開始できます。references/setup/index.md では、履歴にインデックスを付ける方法(インストール、ハーネスのインデックス作成/バックフィル、アダプターの作成、または push)を最初から説明しています。そのため、npx skills add jordanhindo/lore を一度実行するだけで、必要なものがすべてインストールされます。
エージェントワークフロースキル
低レベルの skills/lore/ スキルでは、エージェントが Lore をインストールし、トランスクリプトをインデックス化し、メモリを検索し、メッセージ ID を詳しく調べ、ハーネスが対応している場合は MCP サーバーを使用する方法を学びます。ワークフローパックは、その基盤の上位に位置します。
lore:recallはskills/lore-recall/に対応します。範囲を限定した検索を計画し、lore status --jsonを確認し、鮮度をラベル付けし、コンテキストウィンドウを詳しく調べ、トランスクリプトをそのまま出力する代わりに、引用付きの証拠パケットを生成します。lore:briefはskills/lore-brief/に対応します。デフォルトで直近24時間を対象にし、完了した作業と未完了の作業を要約し、フォローアップのスキル、ジョブ、イシュー、修正、タスク、メモリーカード、Wiki の更新を提案しますが、実行はしません。lore:handoffはskills/lore-handoff/に対応します。検証済み/未解決/古い/リスクありのセクション、成果物、共有提案オブジェクト、メモリーカード候補、矛盾候補、次のアクションを含む簡潔な引き継ぎパケットを作成します。lore:dev-verificationはskills/lore-dev-verification/に対応します。Lore リポジトリの変更を対象としたプロジェクト固有の検証ゲートです。CLI/MCP の同等性、ストアの互換性、アダプターの忠実性、プライバシーと破壊的なメモリー操作の挙動、パッケージのスモークテスト、ワークフロースキルの評価証明を確認します。
これらはインストール可能なスキルバンドルであり、単一ファイルのプロンプトスニペットではありません。各ワークフロースキルには、SKILL.md、リファレンス、例、評価仕様、構造が決定的な場合のバリデータースクリプト、evals/test-report.md が含まれます。テストレポートで評価/レビューの実行が証明され、バンドルバリデーターに合格するまでは、ワークフロースキルは完成していません。
このリリースには、汎用のプラグインラッパーはありません。将来的にプラグインが lore:recall、lore:brief、lore:handoff などの名前をバンドルする可能性はありますが、現在提供されているのは、パッケージの skills/ ツリーと lore CLI/MCP 基盤です。ワークフロースキルはアクションを提案できますが、ユーザーが次の手順を明示的に依頼しない限り、ジョブの作成、プロンプトの編集、Wiki ページの更新、タスクの作成、コードの変更、破壊的なメモリー操作の実行をしてはなりません。
このパックの一部を変更する場合は、対応する項目も併せて更新してください。CLI ヘルプ、README、AGENT-ONBOARD.md、skills/lore、ワークフロースキルのドキュメント、バリデーター、例、評価レポート、パッケージのスモークテストは、まとめて更新する必要があります。
パッケージ化の検証は次の場所にあります。
npm run package:smoke
このスモークテストでは、CLI をビルドし、dist/cli/lore.js の実行可能モードを保持し、パッケージのドライランメタデータを検証し、実際の tarball を作成し、パッケージ化されたツリーからワークフロースキルのフォルダーを読み込み、内容が空でないテストレポートの見出しを確認し、依存関係が存在する状態でパッケージ化された CLI ヘルプを実行できることを検証します。
🔌 クライアントに接続する
lore serve は stdio 経由で MCP サーバーを起動します。任意の MCP クライアントから接続してください。
Claude Code(~/.claude/settings.json に追加):
{
"mcpServers": {
"lore": { "command": "lore", "args": ["serve"] }
}
}
Cursor / Cline などの場合:クライアントの MCP 設定に、同じ command / args 形式の stdio サーバーエントリーを追加してください。
エージェントができること
| ツール | 機能 |
|---|---|
status | ストアの健全性/鮮度、スキーマバージョン、ソース/プロジェクトごとの件数を確認します。 |
search_memory | すべてのトランスクリプトを対象に、BM25 で順位付けされたキーワード検索を行い、フィルターを適用します。 |
find_relevant | search_memory と同様ですが、関連性と新しさを組み合わせます。 |
get_message | ID でメッセージを取得します(full=true を指定すると、省略されていないテキストを返します)。 |
get_context | 基準となるメッセージの前後の範囲を取得します。 |
get_session | 1 つの論理セッションを、折りたたまれたページ分割形式のタイムラインで取得します。 |
list_sessions | セッションの集計情報(件数、最初/最後のアクティビティ)を取得します。フィルターを適用できます。 |
timeline | 日または時間ごとに、時間経過に沿ったアクティビティを分類して表示します。 |
push | CLI の lore push と同じ形式で、正規化されたライブ JSON バッチを 1 つ書き込みます。 |
すべての検索ツールで同じディメンションフィルターを使用できます:project、branch、
source、agent、skill、tool、role、model、since、until、limit。
検索結果の内容
エージェントがクエリ(および任意のフィルター)を指定して search_memory を呼び出すと、
件数と、順位付けされたヒットのリストが返されます。各ヒットには一致したテキストと完全な
出所情報が含まれるため、エージェントはメモリーの_出所_を把握し、get_message で残りの
内容を取得できます:
// search_memory({ query: "fts tokenizer", source: "claude-code", limit: 2 })
{
"count": 2,
"hits": [
{
"messageId": "9f3c…a71b", // synthetic, stable across re-index
"sessionId": "0c1d2e3f-…",
"sourceFileId": "claude-code:…",
"source": "claude-code", // harness namespace the hit came from
"role": "assistant",
"timestamp": "2026-06-05T18:22:41.103Z",
"project": "/Users/you/lore",
"branch": "main",
"model": "claude-opus-4",
"agent": null,
"score": 11.27, // higher is a better match (bm25)
"text": "Switched the FTS5 tokenizer to unicode61 with tokenchars '_-.' so getUserById and foo.bar.ts stay whole…",
"textTruncated": false
}
// …one more hit
]
}
長いメッセージは、省略を示すマーカー付きで返されます。これによりエージェントは
get_message(message_id, full=true) で全文を取得できるため、巨大なトランスクリプトが
コンテキストウィンドウを圧迫することはありません。
🪄 コンパクションを乗り切る
メモリーが最も重要になるのはコンパクションの瞬間です。そのため、アクティブなコンテキストから
消えてしまう前に、セッションの新しい内容を取り込みましょう。使用するハーネスによって
正確なフックは異なります。Claude Code では、フックのペイロードが利用可能な場合、
PreCompact/SessionEnd から lore hook を呼び出すか、トランスクリプトツリーを
更新するだけでよい場合は、手動で追いつくために lore sync claude-code を実行できます。
タイマーからは、共有ストアへの書き込みがロックされるように
scripts/lore-sync-once.sh claude-code を呼び出してください。Codex では、
transcript_path のフックペイロードではなくセッションツリーを書き込むため、
通知ラッパーを使うか、タイマーから scripts/lore-sync-once.sh codex を実行してください。
スキル設定のリファレンスに、正確な手順が記載されています:
skills/lore/references/setup/claude-code-hooks.md、
skills/lore/references/setup/codex-hooks.md、
および
skills/lore/references/setup/other-harness-hooks.md。
🧩 独自のハーネスを使う
お使いのエージェントが一覧にありませんか? lore sample <transcript-dir> を実行すると、
ディスク上の形式を要約できます。このツールは JSONL、SQLite データベース(ファイルヘッダーを
読み取って判定し、データベースを読み込むことはありません)、およびファイル全体が JSON の形式を
認識するため、書き込みを始める前に未知のハーネスの構造を確認できます。同梱の**lore スキルにある
references/setup/index.md(skills/lore/references/setup/index.md)では、新しい
アダプターの作成と動作検証、またはハーネスがファイルを一切保持しない場合にライブの push
経路を使う方法などを含め、エージェントが「インストール済み」の状態から「自分のセッションを検索できる」
状態になるまでを案内します。push はデータのみ**を扱います。境界で各レコードを検証し、
コードを受け取ったり実行したりすることはありません。
🔒 プライバシー
- ストアはローカル(
~/.lore/lore.db)にあり、リポジトリの外に保存されます。また、*.dbは gitignore の対象です。LORE_DBを使って移動できます。 - 認証情報はデフォルトでマスキングされます。 保守的なスクラバーが、書き込み前に メッセージテキストとツールのペイロードを処理します(OpenAI / GitHub / AWS / Slack のキー、Bearer トークン、PEM 秘密鍵ブロック)。それ以外はすべて そのまま保持されます。これはあなた自身のメモリです。スクラバーは安全策として利用し、 完全な保証とは考えないでください。
- 認証情報もそのまま保存したい場合は、
lore index/lore hook/lore setupで--no-redactを指定してオプトアウトできます。 - 残したくなかったメモリを削除できます。
lore forgetはセッションまたは プロジェクトを(指定時点で)削除します。lore excludeはプロジェクトを削除し、 そこから今後データが取り込まれないようにします。どちらも対象範囲を正確にプレビューし、--confirmを追加した場合にのみ実行されます。また、どちらも墓標を書き込むため、 再インデックスしてもデータは復元されません。プレビュー後に確認する手順の詳細はloreスキルを参照してください。
🧬 内部での仕組み
- 共有ストアは1つ、ハーネスは複数。 各ハーネスはそれぞれ独自の
source名前空間(claude-code、codex、openclaw、cursor、hermes)に書き込みます。 どの MCP クライアントからでも、すべての履歴を読み取れます。 - IDは3種類です。
source_file_idは物理的なトランスクリプトファイル(取り込みと 再開ウォーターマークの単位)です。session_idは、プライマリファイルとその サブエージェントファイルで共有される論理セッションです。生の UUID は重複するため、 各メッセージには合成されたmessage_id = hash(source_file_id + uuid + seq)が割り当てられます。 - 増分処理を前提に設計されています。 ファイルごとのウォーターマークによって変更されていない ファイルはスキップされ、新しい末尾部分のみが追加され、書き換えられたファイルはすべて 再インデックスされます。数千件のトランスクリプトに対してバックフィルを再実行しても、 変更された箇所のみが処理されます。
- コードを考慮した検索です。 FTS5 のトークナイザーは識別子とパスを分割せずに保持するため、 実際に検索したい文字列をそのまま検索できます。
⚙️ 環境
| 変数 | デフォルト | 意味 |
|---|---|---|
LORE_DB | ~/.lore/lore.db | ストアの場所。 |
LORE_LOG_LEVEL | info | debug / info / warn / error。 |
👷 開発
npm run check # typecheck + lint + format + test
npm run test:watch
ライセンス:MIT。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。