session-search について
session-searchは、過去のエージェントセッションを検索し、その文脈を現在の作業に取り込むスキルです。類似度、トピッククラスター、ブックマーク、経過時間で順位付けし、記録が残っていないセッションも区別します。
主な機能
- 01過去のセッション検索
- 02類似度・トピック・ブックマーク・経過時間による順位付け
- 03プロジェクト、クラスター、日付、件数での絞り込み
- 04利用可能なセッション記録の読み込み
- 05履歴のみの結果の識別
活用シーン
- 01特定の話題を扱った過去のセッションの特定
- 02期間を指定したプロジェクト内の議論の検索
- 03ブックマークしたセッションの文脈の復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill session-searchインストール後、Claude Code で/session-searchを入力して読み込まれたか確認します。
詳細
セッション検索
「X について話していた過去のセッションはどれ?」という質問に答え、そのセッションのコンテキストを読み込みます。
ステップ 1:グラフが存在し、新しい状態か確認する
obsidian-wiki sessions-query "<topic>" --json
これが「run sessions-build first」というメッセージとともに終了コード 1 で終了した場合は、ユーザーに伝えて /session-brain を提案してください。graph.json が約 7 日以上前のものであれば、その旨を伝えて再構築を提案してください。ただし、ユーザーが依頼していない複数秒かかる処理のため、黙って再構築してはいけません。
ステップ 2:順位付けする
スコアにはすでに 4 つのシグナルが組み合わされているため、再順位付けせず、その順序をそのまま使います。
- 類似度 — セッションのテキストに対する TF-IDF コサイン類似度
- クラスタの上昇効果 — 最も一致するトピック内のセッションは、そのセッション自体の単語が一致していなくても高く評価されます。そのため、「telemetry」という単語が一度も出てこないセッションが検索結果に表示されることがあります。
- ブックマークの加点 — 人間がすでに、このセッションを残す価値があるものとしてマークしています
- 時間減衰 — 半減期は 90 日です。古い完全一致が新しい弱い一致よりも上位になるよう、下限値を設けて適用します
便利なフィルター:--project NAME、--cluster N、--since DATE、--top N。
ステップ 3:提示する
上位約 5 件を、タイトル、プロジェクト、日付、トピック、そして一致理由を説明する why 文字列を含む簡潔な表で示します。生の JSON をユーザーにそのまま見せてはいけません。
次の 2 点は、曖昧にせず正直に伝える必要があります。
loadable: falseのエントリは履歴のみです。トランスクリプトはディスクから削除されており、プロンプトだけが残っています。これらは理由とともにunloadableに記載されています。トランスクリプトは失われていると伝え、取得できるかのように示してはいけません。- 関連するものがすべて読み込み不可の場合は、実際に残っているプロンプトのテキストをもとに回答し、それが残っているすべてだと伝えてください。
ステップ 4:読み込む — 再実装せず、既存の手段に引き継ぐ
should_load には、トランスクリプトが存在するものにすでに絞り込まれた、読み込み対象のセッション ID が最大 3 件入っています。
ユーザーが既存のローダースキルをインストールしている場合は、そちらを優先してください。
claude-session-load— ID で Claude セッションを読み込みますbookmark-load— 該当セッションがブックマークされている場合に使います
⚠️ これらのスキルはユーザー個人のスキルディレクトリ(~/.claude/skills/)にあり、このリポジトリにはありません。存在しない場合もあります。存在するものと決めつけず、見つからなくてもエラーにせず、トランスクリプトを直接読み取る方法に切り替えてください。
# the path is in the query result as `transcript`
obsidian-wiki sessions-show <session-id> --pretty
トランスクリプトは JSONL 形式で、数十 MB に達することがあります。全体を一度に読み込んではいけません。 まず人間の発言だけに絞り込んでください。
grep -c '' <transcript> # size check before anything else
python3 -c "
import json,sys
for line in open(sys.argv[1], errors='replace'):
try: r = json.loads(line)
except ValueError: continue
if r.get('type')=='user' and not r.get('isSidechain') and not r.get('isMeta'):
c = (r.get('message') or {}).get('content')
if isinstance(c,str) and not c.lstrip().startswith('<'): print('>', c[:400])
" <transcript>
ステップ 5:回答する
読み込んだ内容をもとに要点をまとめ、使用したセッション ID を引用してください。実際のトランスクリプトではなく、履歴のみのセッションのプロンプトから回答した場合は、その旨を伝えてください。ユーザーは、実際にどの程度のコンテキストを把握しているか知る必要があります。
関連項目
/session-brain— グラフを構築または更新し、トピックを調査して名前を付けますwiki-query— コンパイル済みの Vault ナレッジを検索します。このスキルではなく、生のセッション履歴を検索しますwiki-agent— 別のエージェントの履歴からトピックを取り出し、Vault に整理して保存します