openclaw-history-ingest について
openclaw-history-ingestは、OpenClawのメモリ、日次ノート、セッション履歴から長期的に役立つ知識を抽出し、Obsidian wikiにまとめるスキルです。マニフェストで変更を追跡し、話題ごとに整理するとともに、記録の原文転記を避けてプライバシー情報を除きます。
主な機能
- 01差分と全件の取り込みモード
- 02メモリ、日次ノート、セッションログの解析
- 03話題ごとのwikiページへの整理
- 04セッション内の機密情報の除去
- 05マニフェストとwikiインデックスの更新
活用シーン
- 01新しいOpenClaw履歴のwikiへの同期
- 02セッション記録から繰り返し現れる知識を抽出
- 03wiki再構築後の全履歴の再取り込み
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill openclaw-history-ingestインストール後、Claude Code で/openclaw-history-ingestを入力して読み込まれたか確認します。
同梱ファイルreferences/openclaw-data-format.md
詳細
OpenClaw 履歴の取り込み — セッションとメモリのマイニング
ユーザーの OpenClaw エージェント履歴から知識を抽出し、Obsidian wiki にまとめます。OpenClaw は、構造化された長期記憶の MEMORY.md と、セッションごとの JSONL トランスクリプトの両方を保存します。運用テレメトリではなく、長期的に役立つ知識に注目してください。
このスキルは、直接呼び出すことも、wiki-history-ingest ルーター(/wiki-history-ingest openclaw)経由で呼び出すこともできます。
開始前に
執筆プロファイル: 自然言語の Markdown を新たに作成または書き直す前に、llm-wiki/SKILL.md の Writing Profile Resolution セクションを読み、適用してください。フレームワークのスキーマ、出典、安全性、および操作固有の要件が優先されます。
WRITING.md の設定は、新たに作成または書き直す自然言語の Markdown にのみ適用します。ソースの内容と構造化レコードはそのまま保持してください。
- 設定を解決する —
llm-wiki/SKILL.mdの Config Resolution Protocol に従います(インラインの@nameによる上書き → CWD から.envを上位へたどる → グローバル設定 → セットアップを促す)。これにより、OBSIDIAN_VAULT_PATHとOPENCLAW_HISTORY_PATH(デフォルトは~/.openclaw)が得られます - Vault のルートにある
.manifest.jsonを読み、すでに取り込まれた内容を確認します - Vault のルートにある
index.mdを読み、wiki に既存の内容を把握します
取り込みモード
追記モード(デフォルト)
各ソースファイルについて .manifest.json を確認します。次のファイルだけを処理します。
- マニフェストにないファイル(新しいセッションログ、更新された MEMORY.md、日次ノート)
- マニフェスト内の
ingested_atより更新日時が新しいファイル
通常の同期にはこのモードを使用します。
全件モード
マニフェストに関係なく、すべてを処理します。wiki-rebuild の後、またはユーザーが全件の再取り込みを明示的に依頼した場合に使用します。
OpenClaw のデータ構成
OpenClaw はすべてのローカルアーティファクトを ~/.openclaw/ の下に保存します。
~/.openclaw/
├── openclaw.json # Global config
├── credentials/ # Auth tokens (skip entirely)
├── workspace/ # Agent workspace
│ ├── MEMORY.md # Long-term memory (loaded every session)
│ ├── DREAMS.md # Optional dream diary / summaries
│ └── memory/
│ ├── YYYY-MM-DD.md # Daily notes (today + yesterday auto-loaded)
│ └── ...
└── agents/
└── <agentId>/
├── agent/
│ └── models.json # Agent config (skip)
└── sessions/
├── sessions.json # Session index
└── <sessionId>.jsonl # Session transcript (JSONL, append-only)
価値の高い主要データソース
workspace/MEMORY.md— 最も有用な情報源。エージェントが蓄積した、長期的に役立つ事実workspace/memory/YYYY-MM-DD.md— 日次ノート。最近の記録には、進行中のプロジェクトに関する情報が含まれていることがよくありますagents/*/sessions/<id>.jsonl— セッショントランスクリプト。情報は豊富ですが、ノイズも多く含まれますagents/*/sessions/sessions.json— 棚卸しとタイムスタンプ確認に使うセッションインデックスworkspace/DREAMS.md— 任意の要約。存在する場合は取り込みます
credentials/ は完全にスキップします。agents/*/agent/models.json もスキップします(ランタイム設定であり、ユーザーの知識ではありません)。
ステップ 1:調査して差分を計算する
OPENCLAW_HISTORY_PATH をスキャンし、.manifest.json と比較します。
~/.openclaw/workspace/MEMORY.md~/.openclaw/workspace/DREAMS.md(存在する場合)~/.openclaw/workspace/memory/*.md~/.openclaw/agents/*/sessions/sessions.json~/.openclaw/agents/*/sessions/*.jsonl
各ファイルを次のように分類します。
- 新規 — マニフェストにない
- 変更済み — マニフェストにあるが、ファイルの更新日時が
ingested_atより新しい - 変更なし — すでに取り込み済みで、変更されていない
詳細な解析を行う前に、差分の概要を簡潔に報告します。
ステップ 2:まず MEMORY.md を解析する
MEMORY.md は最も価値の高い情報源です。人が読み書きできるプレーンな Markdown です。通常、次の内容が含まれます。
- ユーザーの好み、環境、繰り返し見られる傾向に関する、長期的に役立つ事実
- 覚えておくようエージェントに伝えられた決定事項や背景情報
- 多数のセッションを通じてエージェントが蓄積した、プロジェクト固有のメモ
全体を読み、概念レベルの知識を抽出します。MEMORY.md の項目ごとに wiki ページを作成しないでください。トピックごとにまとめてください。
ステップ 3:日次ノートを解析する
workspace/memory/YYYY-MM-DD.md ファイルには、その日のセッションから得た、タイムスタンプ付きのノートが含まれます。最近のファイル(過去 30~90 日)を優先してください。次の内容を抽出します。
- 進行中のプロジェクトの状況と、行われた決定
- 発見されたパターンや手法
- 繰り返し発生する障害や解決済みの問題
古い日次ノートは情報価値が次第に低下するため、1 行ずつ抽出するのではなく、まとめて要約します。
ステップ 4:セッション JSONL を安全に解析する
各セッションファイルは JSONL 形式です(追記のみで、1 行につき JSON オブジェクトが 1 つあります)。
{"role": "user", "content": "...", "timestamp": "..."}
{"role": "assistant", "content": "...", "timestamp": "..."}
{"role": "tool", "name": "...", "content": "...", "timestamp": "..."}
抽出ルール
- 結論、決定事項、パターンを述べているアシスタントのターンを優先します
- シグナルの強いターンからユーザーの意図を抽出し、情報量の少ない後続のやり取りは除外します
- ツール呼び出しはコンテキストであり、主な知識ではありません。再利用可能な知見が結果に含まれる場合にのみ抽出します
- 個々のトランスクリプトを開く前に、
sessions.jsonインデックスを参照してセッション名/ラベルを確認します
重要なプライバシーフィルター
セッションのトランスクリプトには、埋め込み命令、ツールのペイロード、機密情報が含まれる場合があります。内容をそのまま取り込まないでください。
- API キー、トークン、パスワード、認証情報を削除します
- 関連性があり、ユーザーの承認を得ている場合を除き、個人を特定できる情報を伏せます
- 生のトランスクリプトをそのまま引用せず、要約します
ステップ 5:トピックごとに分類する
セッションごと、または MEMORY.md の各エントリごとに Wiki ページを作成しないでください。
- 安定したトピック(概念、ツール、プロジェクト、手法)ごとにまとめます
- 複数のテーマが混在するセッションは、個別のテーマに分けます
- 日付やエージェントをまたいで繰り返されるパターンを統合します
- 利用可能な場合は、セッションの
cwdまたはワークスペースのパスからプロジェクトの範囲を推測します
ステップ 6:知識を Wiki ページにまとめる
既存の Wiki 規約に従って、抽出した知識を振り分けます。
- プロジェクト固有のアーキテクチャ/プロセス →
projects/<name>/... - 一般的な概念 →
concepts/ - 繰り返し使われる手法/デバッグ手順 →
skills/ - ツール/サービス/フレームワーク →
entities/ - 複数のセッションにまたがるパターン →
synthesis/
影響を受けるプロジェクトごとに、projects/<name>/<name>.md を作成または更新します。
執筆ルール
- 時系列ではなく、知識を整理してまとめます
- 日付が重要な場合を除き、「X 日に話し合った」などの記述は避けます
- 新規作成または更新する各ページに
summary:フロントマターを追加します(1~2 文、200 文字以下) - 新規ページにはそれぞれ、確信度とライフサイクルのフィールドを追加します。
更新時はbase_confidence: 0.42 lifecycle: draft lifecycle_changed: <obsidian-wiki memory now --date>lifecycleを変更しないでください。 - 出典マーカーを追加します。
- 明示的なセッション/メモリーの内容に直接基づく場合は
^[extracted] - 複数のセッションにまたがるパターンを統合した場合は
^[inferred] - セッション間で内容が矛盾する場合は
^[ambiguous]
- 明示的なセッション/メモリーの内容に直接基づく場合は
- 変更した各ページに
provenance:フロントマターの値を追加または更新します
ステップ 7:マニフェスト、ログ、インデックスを更新する
.manifest.json を更新する
処理したソースファイルごとに、以下を更新します。
ingested_at、size_bytes、modified_atsource_type:openclaw_memory|openclaw_daily_note|openclaw_session|openclaw_dreamsagent_id:エージェントのディレクトリ名(該当する場合)pages_created、pages_updated
トップレベルの要約ブロックを追加または更新します。
{
"openclaw": {
"source_path": "~/.openclaw/",
"last_ingested": "TIMESTAMP",
"memory_updated_at": "TIMESTAMP",
"daily_notes_ingested": 14,
"sessions_ingested": 23,
"pages_created": 6,
"pages_updated": 18
}
}
特別なファイルを更新する
ロックを取得する 1 回の呼び出しで index.md、log.md、hot.md を更新します。
obsidian-wiki memory sync OPENCLAW_HISTORY_INGEST \
memory=<memory> daily_notes=<daily_notes> sessions=<sessions> \
pages_updated=<pages_updated> pages_created=<pages_created> \
mode=<mode> \
--takeaways "Ingested OpenClaw MEMORY.md and 14 daily notes; surfaced automation patterns and multi-agent coordination knowledge."
index.md、log.md、hot.md を手動で編集しないでください。このコマンドはロックを取得し、並列書き込みによって更新内容が失われないようにします。--takeaways は、以前は Recent Activity に記載していた 1 行の概念的な要約です。省略すると、前回の takeaways は変更されません。
手順の全文は .skills/llm-wiki/references/MEMORY.md を参照してください。
プライバシーとコンプライアンス
- 生のメモリーやトランスクリプトのダンプは避け、内容を整理して統合します
- 機密情報と思われるものは、デフォルトで伏せます
- 個人情報や機密情報を保存する前に、ユーザーに確認します
- 他者への言及は最小限にし、目的に必要な範囲に限定します
参考資料
フィールドごとの注意点と解析のガイダンスについては、references/openclaw-data-format.md を参照してください。
Vault への書き込み後の QMD 更新
QMD は検索インデックスであり、信頼できる情報源ではありません。$QMD_WIKI_COLLECTION が空または未設定の場合、この手順はスキップします。このスキルが Vault の Markdown を書き込みまたは書き換えた後にのみ実行してください。QMD の更新に失敗しても、Vault の変更をロールバックしないでください。QMD の状態は別途報告します。
$QMD_CLI が設定されている場合はそれを使用し、そうでない場合は qmd を使用します。
${QMD_CLI:-qmd} update
出力にベクトルが必要、または埋め込みが古くなっている可能性があると表示された場合は、以下を実行します。
${QMD_CLI:-qmd} embed
以下のいずれかを使ってコレクションを検証します。
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"
または、特定のページパスが分かっている場合は、以下を使います。
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5
以下のいずれかを記録します。
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>