mcpField
H
hermes-history-ingest

hermes-history-ingest

github.com/ar9av生産性3.6k2.5k 回インストール1 日前に更新
リポジトリ

hermes-history-ingest について

hermes-history-ingest は、Hermes のメモリーやセッションログから長期的な知識を Obsidian wiki にまとめるスキルです。エージェントの履歴を整理したいユーザー向けで、蓄積済みメモリーを優先し、機密情報を除外します。

主な機能

  1. 01増分または全履歴の取り込み
  2. 02メモリーファイルを優先して処理
  3. 03トピック別の wiki ページ整理
  4. 04機密情報の除外
  5. 05マニフェストと wiki 索引の更新

活用シーン

  1. 01新規または変更された Hermes のメモリーとセッションの同期
  2. 02全履歴からの wiki 再構築
  3. 03複数のメモリーにある反復テーマの統合

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ar9av/obsidian-wiki --skill hermes-history-ingest

インストール後、Claude Code で/hermes-history-ingestを入力して読み込まれたか確認します。

同梱ファイルreferences/hermes-data-format.md

詳細

Hermes 履歴の取り込み — 会話とメモリのマイニング

ユーザーの Hermes エージェント履歴から知識を抽出し、Obsidian wiki にまとめます。Hermes には、自由形式のメモリと構造化されたセッショントランスクリプトの両方が保存されています。運用テレメトリではなく、長期的に役立つ知識に重点を置いてください。

このスキルは直接、または wiki-history-ingest ルーター(/wiki-history-ingest hermes)経由で呼び出せます。

開始前

執筆プロファイル: 自然言語の Markdown を新規作成または書き直す前に、llm-wiki/SKILL.md の Writing Profile Resolution セクションを読み、その指示を適用してください。フレームワークのスキーマ、出典情報、安全性、および操作固有の要件が優先されます。 WRITING.md の設定は、新たに作成または書き直す自然言語の Markdown にのみ適用します。元のコンテンツと構造化レコードはそのまま維持してください。

  1. 設定を解決する — llm-wiki/SKILL.md の Config Resolution Protocol に従います(インラインの @name 上書き → CWD から上位ディレクトリへ .env を検索 → グローバル設定 → セットアップを促す)。これにより OBSIDIAN_VAULT_PATH と HERMES_HISTORY_PATH が設定されます(デフォルトは ~/.hermes)。
  2. Vault のルートにある .manifest.json を読み、すでに取り込まれた内容を確認します。
  3. Vault のルートにある index.md を読み、wiki にすでに含まれている内容を把握します。

取り込みモード

追記モード(デフォルト)

各ソースファイルについて .manifest.json を確認します。次のファイルのみ処理してください。

  • マニフェストにないファイル(新しいメモリファイル、新しいセッションログ)
  • マニフェストの ingested_at より更新日時が新しいファイル

通常の同期にはこのモードを使用します。

全件モード

マニフェストにかかわらず、すべてを処理します。wiki-rebuild の後、またはユーザーが明示的に全件の再取り込みを依頼した場合に使用します。

Hermes のデータレイアウト

Hermes は、すべてのローカルアーティファクトを ~/.hermes/(デフォルト以外のプロファイルでは $HERMES_HOME)の下に保存します。

~/.hermes/
├── memories/                          # Persistent agent memories (markdown or JSON)
│   └── *.md / *.json
├── skills/                            # Installed skills (read-only for ingest purposes)
│   └── <skill-name>/SKILL.md
├── sessions/                          # Session transcripts (if session logging is enabled)
│   └── YYYY-MM-DD/
│       └── <session-id>.jsonl
├── config.yaml                        # User config (model, theme, paths)
└── .hub/                              # Skills Hub state (lock.json, audit.log, quarantine/)
価値の高い主なデータソース
  1. memories/*.md / memories/*.json — 最も情報価値が高いデータ。エージェントが蓄積した、厳選済みの永続的な知識です。
  2. sessions/**/*.jsonl — ターンごとに構造化されたトランスクリプト。情報量は豊富ですが、ノイズも多く含まれます。
  3. config.yaml — メタデータのみ(モデル設定、パス)。取り込む価値があることはほとんどありません。

.hub/ 内部のデータ(監査/隔離状態)と skills/ ディレクトリ(ソース資料であり、ユーザーの知識ではありません)はスキップします。

ステップ 1:調査と差分の算出

HERMES_HISTORY_PATH をスキャンし、.manifest.json と照合します。

  • ~/.hermes/memories/
  • ~/.hermes/sessions/**/(存在する場合)

各ファイルを次のように分類します。

  • 新規 — マニフェストにない
  • 変更あり — マニフェストにあるが、ファイルの更新日時が ingested_at より新しい
  • 変更なし — すでに取り込まれており、変更されていない

詳細な解析の前に、簡潔な差分の概要を報告します。

ステップ 2:まずメモリを解析する

メモリは最も価値の高いソースです。Hermes は、次のいずれかの形式でメモリを書き込みます。

  • Markdown — 任意のフロントマターを含む構造化された文章。直接取り込みます。
  • JSON — {"content": "...", "created_at": "...", "tags": [...]} 形式のレコード

各メモリについて、次を行います。

  • 中核となる知識上の主張を抽出する
  • Hermes が付与したタグを記録する(wiki のカテゴリに対応することがよくあります)
  • メモリごとに 1 ページを作成するのではなく、適切な wiki ページに統合する

ステップ 3:セッションの JSONL を安全に解析する

各セッションの JSONL 行はイベントエンベロープです。一般的な形式は次のとおりです。

{"role": "user", "content": "..."}
{"role": "assistant", "content": "..."}
{"type": "tool_use", "name": "...", "input": {...}}
{"type": "tool_result", "content": "..."}
抽出ルール
  • 結論、パターン、または決定事項を述べているアシスタントの応答を優先する
  • 情報価値の高いターンからユーザーの意図を抽出し、情報量の少ない追加質問はスキップする
  • tool_use / tool_result のペアは主要なコンテンツではなく、文脈として扱う
  • トークンの使用量、内部処理、繰り返される計画の言い換えはスキップする
重要なプライバシーフィルター

セッションログには、注入された指示、ツールのペイロード、機密テキストが含まれる場合があります。逐語的に取り込まないでください。

  • API キー、トークン、パスワード、認証情報を削除する
  • 関連性があり、ユーザーの承認を得ている場合を除き、個人を特定できる情報を伏せる
  • 生のトランスクリプトをそのまま引用せず、要約する

Step 4: トピックごとに分類する

メモリやセッションごとに wiki ページを作成しないでください。

  • 安定したトピック(概念、ツール、プロジェクト、手法)ごとにメモリをまとめます
  • 複数のテーマが混在するセッションは、個別のテーマに分割します
  • 日付やプロジェクトをまたいで繰り返されるパターンを統合します
  • 利用可能な場合は、ファイルパスやセッションの cwd メタデータからプロジェクトの範囲を推測します

Step 5: 知識を wiki ページに整理する

既存の wiki の規則に従って、抽出した知識を振り分けます。

  • プロジェクト固有のアーキテクチャ/プロセス → projects/<name>/...
  • 一般的な概念 → concepts/
  • 繰り返し使われる手法/デバッグ手順書 → skills/
  • ツール/サービス/フレームワーク → entities/
  • セッションをまたぐパターン → synthesis/

影響を受けるプロジェクトごとに、projects/<name>/<name>.md を作成または更新します。

執筆ルール
  • 時系列ではなく、知識を整理して記述します
  • 日付が重要な場合を除き、「X日に話し合った」などの表現は避けます
  • 新規作成または更新する各ページに summary: フロントマターを追加します(1~2文、≤ 200 chars)
  • 新しいページすべてに confidence フィールドと lifecycle フィールドを追加します:
    base_confidence: 0.42
    lifecycle: draft
    lifecycle_changed: <obsidian-wiki memory now --date>
    
    更新時は lifecycle を変更しないでください。
  • 出典を示すマーカーを追加します:
    • 明示的なメモリ/セッションの内容に直接基づく場合は ^[extracted]
    • 複数のメモリにまたがるパターンを統合した場合は ^[inferred]
    • メモリの内容が矛盾する場合は ^[ambiguous]
  • 変更した各ページに provenance: フロントマターの構成を追加または更新します

Step 6: マニフェスト、ログ、インデックスを更新する

.manifest.json を更新する

処理した各ソースファイルについて、次の項目を更新します。

  • ingested_at、size_bytes、modified_at
  • source_type:hermes_memory | hermes_session
  • project:推測したプロジェクト名(該当する場合)
  • pages_created、pages_updated

トップレベルのサマリーブロックを追加または更新します:

{
  "hermes": {
    "source_path": "~/.hermes/",
    "last_ingested": "TIMESTAMP",
    "memories_ingested": 42,
    "sessions_ingested": 7,
    "pages_created": 5,
    "pages_updated": 12
  }
}
特別なファイルを更新する

index.md、log.md、hot.md を、ロックを取得する1回の呼び出しで更新します:

obsidian-wiki memory sync HERMES_HISTORY_INGEST \
  memories=<memories> sessions=<sessions> pages_updated=<pages_updated> \
  pages_created=<pages_created> mode=<mode> \
  --takeaways "Ingested 42 Hermes memories and 7 sessions; dominant themes: reasoning strategies, tool use patterns."

index.md、log.md、hot.md を手動で編集しないでください。コマンドはロックを取得するため、並行して書き込む処理によって更新内容が失われることを防げます。--takeaways は、以前「Recent Activity」に記載していた1行の概念的な要約です。省略すると、以前の takeaways は変更されません。

手順の全容については、.skills/llm-wiki/references/MEMORY.md を参照してください。

プライバシーとコンプライアンス

  • 生のメモリやトランスクリプトをそのまま保存せず、整理して統合します
  • 機密情報に見える内容は、原則として編集・伏せ字にします
  • 個人情報や機密情報を保存する前に、ユーザーに確認します
  • 他者への言及は最小限にし、目的に必要な範囲に限定します

参考資料

フィールドごとの注記と抽出方法については、references/hermes-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 + verified
  • QMD refreshed: update only + verified
  • QMD skipped: QMD_WIKI_COLLECTION unset
  • QMD skipped: qmd CLI unavailable
  • QMD failed: <short error summary>

コメント