claude-history-ingest
Claude Codeの会話履歴をObsidianウィキに取り込むスキルです。ユーザーが過去のClaude会話から知見を抽出したい場合、`~/.claude`フォルダをインポートしたい場合、または「Claudeの履歴を処理して」「会話をウィキに追加して」「以前Claudeと何を話したか知りたい」といった発言をした際に使用します。`.claude`フォルダ、Claudeプロジェクト、セッションデータ、過去の会話ログ、local-agent-modeセッション、監査ログへの言及でも起動します。
description の原文を見る
> Ingest Claude Code conversation history into the Obsidian wiki. Use this skill when the user wants to mine their past Claude conversations for knowledge, import their ~/.claude folder, extract insights from previous coding sessions, or says things like "process my Claude history", "add my conversations to the wiki", "what have I discussed with Claude before". Also triggers when the user mentions their .claude folder, Claude projects, session data, past conversation logs, local-agent-mode sessions, or audit logs.
SKILL.md 本文
Claude History Ingest — Conversation Mining
ユーザーの過去の Claude Code 会話から知識を抽出し、Obsidian wiki に蒸留する作業を行っています。会話は豊かですが雑然としており、あなたの役割はシグナルを見つけ出し、それをコンパイルすることです。
このスキルは直接呼び出すか、wiki-history-ingest ルーター (/wiki-history-ingest claude) 経由で呼び出すことができます。
始める前に
- 設定を解決する —
llm-wiki/SKILL.mdの Config Resolution Protocol に従う (CWD を上に向かって歩く:.env→~/.obsidian-wiki/config→ プロンプト設定)。これによりOBSIDIAN_VAULT_PATHとCLAUDE_HISTORY_PATH(デフォルト:~/.claude) が得られます - vault ルートの
.manifest.jsonを読んで、既に取り込まれているものを確認する - vault ルートの
index.mdを読んで、wiki に既に何が含まれているかを知る
取り込みモード
追記モード (デフォルト)
各ソースファイル (会話 JSONL、メモリファイル) について .manifest.json を確認します。以下の場合にのみ処理します:
- マニフェストに含まれていないファイル (新しい会話、新しいメモリファイル、新しいプロジェクト)
- 修正時刻がマニフェストの
ingested_atより新しいファイル
これは通常、ユーザーが数個の新しいセッションを実行し、その差分をキャプチャしたい場合です。
フルモード
マニフェストに関係なくすべてを処理します。wiki-rebuild 後、または user が明示的に要求した場合に使用します。
Claude Code データレイアウト
Claude Code は 2 つの場所にデータを保存します。両方 をスキャンします。
ソース 1: ~/.claude/ (CLI セッション)
~/.claude/
├── projects/ # プロジェクトごとのディレクトリ
│ ├── -Users-name-project-a/ # パス由来の名前 (スラッシュ → ダッシュ)
│ │ ├── <session-uuid>.jsonl # 会話データ (JSONL)
│ │ └── memory/ # 構造化されたメモリ
│ │ ├── MEMORY.md # メモリインデックス
│ │ ├── user_*.md # ユーザープロファイルメモリ
│ │ ├── feedback_*.md # ワークフローフィードバックメモリ
│ │ └── project_*.md # プロジェクトコンテキストメモリ
│ ├── -Users-name-project-b/
│ │ └── ...
├── sessions/ # セッションメタデータ (JSON)
│ └── <pid>.json # {pid, sessionId, cwd, startedAt, kind, entrypoint}
├── history.jsonl # グローバルセッション履歴
├── tasks/ # サブエージェントタスクデータ
├── plans/ # 保存済みプラン
└── settings.json
ソース 2: ~/Library/Application Support/Claude/local-agent-mode-sessions/ (デスクトップアプリエージェントセッション)
Claude デスクトップアプリはローカルエージェントモードセッションをここに保存します。構造は深くネストされています:
~/Library/Application Support/Claude/local-agent-mode-sessions/
└── <outer-uuid>/
└── <inner-uuid>/
├── local_<session-uuid>.json # セッションメタデータ
└── local_<session-uuid>/
├── audit.jsonl # 監査ログ — ツール呼び出し、ファイル読み込み、実行されたコマンド
└── .claude/
└── projects/
└── <path-encoded-name>/ # ~/.claude/projects/ と同じパスエンコーディング
└── <uuid>.jsonl # 会話トランスクリプト (CLI と同じ JSONL 形式)
すべてのローカルエージェントモードセッションを見つける方法:
# すべてのセッションメタデータファイルを検索
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "local_*.json" -maxdepth 4
# すべての監査ログを検索
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "audit.jsonl"
# すべての会話トランスクリプトを検索
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "*.jsonl" -path "*/.claude/projects/*"
セッションメタデータ (local_<uuid>.json) — sessionId、cwd、startedAt、model、title などのフィールドを持つ JSON ファイル。トランスクリプトを開く前にこれを読み、セッションコンテキストを理解します。
監査ログ (audit.jsonl) — 各行は 1 つのエージェントアクションの JSON レコード: ツール呼び出し (Read、Write、Bash、Edit)、ファイルアクセス、実行されたシェルコマンド、MCP 呼び出し。エージェントが実際に何をしたのか を理解するのに有用です — 会話テキストだけより豊かなシグナルをもたらすことがよくあります。フィールド: type、toolName、input、output、timestamp、sessionId。
会話トランスクリプト (.claude/projects/.../<uuid>.jsonl) — CLI 会話 JSONL と同じ形式。~/.claude/projects/*/*.jsonl と同じ方法でパースします。
価値でランク付けされた主要データソース (両方の場所を合わせて):
- メモリファイル (
~/.claude/projects/*/memory/*.md) — 事前に蒸留され、既に wiki フレンドリー。ゴールド。 - 会話 JSONL (両方の
~/.claude/projects/*/*.jsonlとデスクトップアプリトランスクリプト) — 完全な会話トランスクリプト。豊かですがノイジー。 - 監査ログ (
audit.jsonlin デスクトップセッション) — ツール呼び出しレベルの実行内容の記録。会話がまばらな場合でも、具体的なアクション、ファイルパターン、コマンドパターンを抽出するのに有用。 - セッションメタデータ (
sessions/*.jsonとlocal_*.json) — どのプロジェクト、いつ、どの CWD かを示す。
ステップ 1: 調査とデルタを計算
両方のデータロケーションをスキャンし、.manifest.json と比較します:
# --- ソース 1: CLI セッション (~/.claude) ---
# すべてのプロジェクトを検索
Glob: ~/.claude/projects/*/
# メモリファイルを検索 (最高の価値)
Glob: ~/.claude/projects/*/memory/*.md
# 会話 JSONL ファイルを検索
Glob: ~/.claude/projects/*/*.jsonl
# --- ソース 2: デスクトップアプリローカルエージェントモードセッション ---
DESKTOP_SESSIONS="$HOME/Library/Application Support/Claude/local-agent-mode-sessions"
# セッションメタデータ
find "$DESKTOP_SESSIONS" -name "local_*.json" -maxdepth 4
# 監査ログ
find "$DESKTOP_SESSIONS" -name "audit.jsonl"
# 会話トランスクリプト
find "$DESKTOP_SESSIONS" -name "*.jsonl" -path "*/.claude/projects/*"
統合インベントリを構築し、各ファイルを分類します:
- New — マニフェストに含まれていない → 取り込み必要
- Modified — マニフェストに含まれているがファイルが新しい → 再取り込み必要
- Unchanged — マニフェストに含まれ、未修正 → 追記モードではスキップ
ユーザーに報告: "X 個の CLI プロジェクト、Y 個のデスクトップセッションを見つけました。メモリファイル: A。会話: B。監査ログ: C。デルタ: D 個新規、E 個修正済み。"
ステップ 2: メモリファイルを最初に取り込む
メモリファイルは既に YAML frontmatter で構造化されています:
---
name: memory-name
description: one-line description
type: user|feedback|project|reference
---
Memory content here.
各メモリファイルに対して:
- それを読み、frontmatter をパースする
userタイプ → ユーザーについてのエンティティページ、または彼らのドメインについての概念ページにフィードfeedbackタイプ → スキルページにフィード (ワークフローパターン、機能するもの、機能しないもの)projectタイプ → プロジェクトについてのエンティティページにフィードreferenceタイプ → 外部リソースを指す参考ページにフィード
各プロジェクトの MEMORY.md インデックスファイルは簡単なサマリーです — どの個別メモリファイルを完全に読む価値があるかを決めるために最初に読みます。
ステップ 3: 会話 JSONL をパース
各 JSONL ファイルは 1 つの会話セッション。各行は JSON オブジェクトです:
{
"type": "user|assistant|progress|file-history-snapshot",
"message": {
"role": "user|assistant",
"content": "text string"
},
"uuid": "...",
"timestamp": "2026-03-15T10:30:00.000Z",
"sessionId": "...",
"cwd": "/path/to/project",
"version": "2.1.59"
}
assistant メッセージの場合、content はコンテンツブロックの配列です:
{
"content": [
{"type": "thinking", "text": "..."},
{"type": "text", "text": "The actual response..."},
{"type": "tool_use", "name": "Read", "input": {...}}
]
}
会話から抽出するもの:
type: "user"とtype: "assistant"エントリのみにフィルタリング- assistant エントリの場合、
textブロックを抽出 (thinkingとtool_useはスキップ — ノイズです) cwdフィールドはこの会話が属するプロジェクトを教えてくれます- プロジェクトディレクトリ名 (例:
-Users-name-Documents-projects-my-app) がプロジェクトパスを教えてくれます
これらをスキップ:
type: "progress"— 内部エージェント進捗更新type: "file-history-snapshot"— ファイル状態追跡- サブエージェント会話 (
subagents/サブディレクトリの下) — ユーザーが明示的に要求しない限り
ステップ 3b: 監査ログをパース (デスクトップセッションのみ)
local-agent-mode-sessions/ 下で見つかった各 audit.jsonl に対して、行ごとに読みます。各行は 1 つのエージェントアクションの JSON レコードです:
{
"type": "tool_call",
"toolName": "Bash",
"input": {"command": "npm test"},
"output": "...",
"timestamp": "2026-04-10T14:22:00Z",
"sessionId": "..."
}
監査ログから抽出するもの:
- ファイルアクセスパターン — エージェントが繰り返し Read または Edit するファイルはどれか? これはプロジェクトの高価値ファイル。プロジェクト参照として記録します。
- シェルコマンド — 繰り返される Bash コマンドはプロジェクトの構築/テスト/デプロイワークフローを明らかにします。これらをスキルページに蒸留します (例: "このプロジェクトがどのように構築・テストされるか")。
- ツール呼び出しシーケンス — エージェントが常に Read → Edit → Bash を特定の順序で実行する場合、それはキャプチャする価値があるワークフローパターン。
- エラーパターン — 失敗したツール呼び出し (非ゼロ終了コード、エラー出力) は痛みのポイント、既知の荒れた場所、または繰り返されるバグを明らかにします。
- MCP ツール呼び出し — MCP ツール呼び出しはプロジェクトが統合している外部サービスと API を明らかにします。
監査ログからスキップ:
- パターンのないルーチンファイル読み込み (例: 設定ファイルの単一読み込み)
- ノイズであるツール出力 (長いスタックトレース、詳細ログ) — 完全な出力ではなく、エラークラスをサマライズ
- コマンド引数や出力でシークレット、トークン、資格情報のようなものすべて
会話トランスクリプトと相互参照: 監査ログは 何が起きたのか を教えてくれます; 会話は なぜ かを教えてくれます。同じセッションについて両方が利用可能な場合、それらを一緒に使用します — 監査ログは会話を具体的なアクションに基づかせます。
監査ログを処理する前に、ペアの local_<uuid>.json セッションメタデータを読みます — これはアクションをコンテキスト化するために cwd、startedAt、title を提供します。
ステップ 4: トピック別にクラスタリング
会話ごとに 1 つの wiki ページを作成しないでください。代わりに:
- 抽出された知識を会話全体で トピック別 にグループ化
- 「auth のデバッグ + CI の設定」についての 1 つの会話 → 2 つの別々のトピック
- 異なる日にわたって「React パフォーマンス」についての 3 つの会話 → 1 つのマージされたトピック
- プロジェクトディレクトリ名は自然な第 1 レベルのグループ化を提供します
ステップ 5: Wiki ページに蒸留
各 Claude プロジェクトは vault のプロジェクトディレクトリにマップします。~/.claude/projects/ からのプロジェクトディレクトリ名は元のパスをエンコードします — デコードしてクリーンなプロジェクト名を取得:
-Users/Documents/projects/my-Project → myproject
-Users/Documents/projects/Another-app → anotherapp
プロジェクト固有 vs グローバル知識
| 見つけたもの | どこに行くか | 例 |
|---|---|---|
| プロジェクトアーキテクチャ決定 | projects/<name>/concepts/ | projects/my-project/concepts/main-architecture.md |
| プロジェクト固有デバッグ | projects/<name>/skills/ | projects/my-project/skills/api-rate-limiting.md |
| ユーザーが学んだ一般的な概念 | concepts/ (グローバル) | concepts/react-server-components.md |
| プロジェクト全体の繰り返される問題 | skills/ (グローバル) | skills/debugging-hydration-errors.md |
| 使用されたツール/サービス | entities/ (グローバル) | entities/vercel-functions.md |
| 多くの会話全体のパターン | synthesis/ (グローバル) | synthesis/common-debugging-patterns.md |
コンテンツのあるプロジェクトごとに、プロジェクト概要ページを projects/<name>/<name>.md で作成または更新します — _project.md ではなく、プロジェクトで名前を付けます。Obsidian のグラフビューはファイル名をノードラベルとして使用するため、_project.md にすると、グラフですべてのプロジェクトが _project として表示されます。<name>.md で名前を付けると、各プロジェクトに異なる読みやすいノード名が与えられます。
重要: 知識 を蒸留し、会話ではありません。「3 月 15 日の会話で、ユーザーが X について尋ねました」と書かないでください。知識自体を書き、会話をソース帰属として使用します。
すべての新規/更新ページに summary: frontmatter フィールドを書く — 1~2 文、≤200 文字、「このページについて何ですか?」に答える、それを開いていない読者向け。wiki-query の安価な取得パスはこのフィールドを読んで、ページ本文を開かないようにします。
すべての新規ページの frontmatter に信頼度とライフサイクルフィールドを追加:
base_confidence: 0.42
lifecycle: draft
lifecycle_changed: <ISO date today>
更新時、lifecycle と lifecycle_changed は変更しません — 人間のエディターのみがライフサイクル状態を遷移させます。
llm-wiki の規約に従ってプロヴナンスをマーク (Provenance Markers セクション):
- メモリファイル は主に抽出されています — ユーザーがそれを手書きで書き、既に蒸留されています。メモリ由来の主張を抽出として扱います。ただし、複数のメモリファイルから主張をつなぎ合わせる場合は除きます。
- 会話蒸留 は主に推測。対話の多くのターンから首尾一貫した主張を合成し、暗黙の推論を埋める場合が多い。合成パターン、セッション全体の一般化、「ユーザーが本当に意図したこと」の解釈に
^[inferred]を自由に適用。 - ユーザーが複数セッション間で考えを変えたり、assistant とユーザーが矛盾し、解決が不明確な場合は
^[ambiguous]を使用。 - すべての新規/更新ページで
provenance:frontmatter ブロックを書き、大まかな混合をサマライズ。
ステップ 6: マニフェスト、ジャーナル、特殊ファイルを更新
.manifest.json を更新
処理した各ソースファイルに対して、以下でエントリを追加/更新:
ingested_at、size_bytes、modified_atsource_type:"claude_conversation"、"claude_memory"、"claude_audit_log"、"claude_desktop_session"の 1 つproject: デコードされたプロジェクト名pages_createdとpages_updatedリスト
マニフェストの projects セクションも更新:
{
"project-name": {
"source_path": "~/.claude/projects/-Users-...",
"vault_path": "projects/project-name",
"last_ingested": "TIMESTAMP",
"conversations_ingested": 5,
"conversations_total": 8,
"memory_files_ingested": 3,
"desktop_sessions_ingested": 2,
"audit_logs_ingested": 2
}
}
ジャーナルエントリを作成し、特殊ファイルを更新
標準プロセスに従って index.md と log.md を更新:
- [TIMESTAMP] CLAUDE_HISTORY_INGEST projects=N conversations=M desktop_sessions=D audit_logs=A pages_updated=X pages_created=Y mode=append|full
hot.md — $OBSIDIAN_VAULT_PATH/hot.md を読みます (欠落している場合、wiki-ingest のテンプレートから作成)。Recent Activity を 1 行のサマリーで更新 — 例: "2 つのプロジェクト全体で 5 つの Claude 会話を取り込み; API 設計とテスト戦略のパターンを浮き彫りに。" 最後の 3 つの操作を保持。進行中のプロジェクトがより良く理解されるようになった場合、Active Threads を更新。updated タイムスタンプを更新。
プライバシー
- 蒸留と合成 — 生の会話テキストをそのままコピーしない
- シークレット、API キー、パスワード、トークンのようなものをスキップ
- 個人的な/機密コンテンツを遭遇した場合、それを含める前にユーザーに確認
- ユーザーの会話は他の人々を参照するかもしれません — wiki に何が入るかについて思いやり深く
参考資料
詳細なデータ構造については references/claude-data-format.md を参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ar9av
- リポジトリ
- ar9av/obsidian-wiki
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/ar9av/obsidian-wiki / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。