mcpField
C
ContextSearch

ContextSearch

github.com/danielmiesslerエージェントワークフロー19.6k54 回インストール今日更新
リポジトリ

ContextSearch について

ContextSearchは、セッション、ISA、会話から過去のLifeOSの作業を探すスキルです。5つのソースを並列検索し、語句の一致度と新しさで順位付けして、日付でも絞り込めます。

主な機能

  1. 015つの履歴ソースを並列検索
  2. 02語句の一致度と新しさで順位付け
  3. 03日付表現の解析と絞り込み
  4. 04スニペットまたはJSONで出力

活用シーン

  1. 01トピックに関する最近の作業を検索
  2. 02日付で過去のセッションを閲覧
  3. 03新しい依頼に関連する文脈を取得

インストール

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

$npx skills add https://github.com/danielmiessler/lifeos --skill contextsearch

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

同梱ファイルTools/ContextSearch.ts

詳細

ContextSearch

カスタマイズ

実行する前に、次の場所にユーザーによるカスタマイズがあるか確認してください: ~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/ContextSearch/

このディレクトリが存在する場合は、そこにある PREFERENCES.md、設定、またはリソースを読み込み、適用してください。これらはデフォルトの動作より優先されます。ディレクトリが存在しない場合は、スキルのデフォルト設定で進めてください。

機能

トピック、部分的な単語、「昨日」や「先週」のような日付表現を使って、過去の LifeOS の作業(セッション、ISA、会話)を検索します。決定論的な Bun CLI が5つの情報源を並列検索し、トークンの重複度に新しさを掛け合わせてスコアを算出し、日付フィルターを適用して、スニペット付きのランキング結果を返します。

課題

作業はセッション、ISA、会話ログに分散しているため、1週間後にはプロジェクトがどこにあったのか、何という名前だったのかを思い出せなくなることがあります。覚えているのは概要で、正確なタイトルではないため、部分文字列検索では見つかりません。いくつかの単語や「昨日やったこと」のような表現ですばやく、うろ覚えの作業を呼び出し、すべてを手作業で読み返さずに続きを始める必要があります。

仕組み

次の条件で過去の作業を検索します:$ARGUMENTS

スキルの本文は、決定論的な Bun CLI に処理を委ねます。ツールは5つの情報源を並列検索し、トークンの重複度 × 新しさでスコアを算出して日付フィルターを適用し、ランキング結果を返します。

ワークフローの振り分け

単一ツールのスキルです。Workflows/ ディレクトリはありません。すべての呼び出しを、次の1つの CLI に振り分けます:

ワークフロートリガーファイル
検索(インライン)コンテキスト検索、/cs、過去の作業、想起、セッションの検索、再開、日付表現Tools/ContextSearch.ts

検索の実行

bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --pretty --limit 10

ツールは出力モードを自動判定するために TTY を検出します。明示的に --pretty を指定すると、スキルが Claude Code セッション内から呼び出された場合(stdout が実際の TTY ではない場合)も、人が読みやすいブロック形式で出力されます。構造化出力を jq に渡すには、--json にパイプしてください。

便利なフラグの指定例

# Limit results
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --limit 5

# Constrain by date
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --since 2026-05-01

# JSON for programmatic use
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --json | jq '.results[0]'

ツールは日付表現もインラインで解析します。"yesterday markdown" は、「昨日」のみを対象とする範囲指定の since/until と、markdown のトークン検索に変換されます。

使用モード

  1. 単独 — 検索を実行し、整形済みブロックを提示して、「[トピック] のコンテキストを読み込みました。最も新しい結果:[X]。次は何をしますか?」と伝えます。
  2. リクエストと併用 — まず検索を実行し、見つかったコンテキストを踏まえてリクエストを実行します。結果の path が有望に見える場合は、詳細を確認するために Read で読み込みます。

出力形式

整形済みブロック:

═══ CONTEXT: <query> ═══════════════════════

📋 RESULTS (N, newest+best first):
  • <slug>
    task: ... | phase: ... | progress: ... | effort: ... | <recency>d ago | score: ... | sources: ...
    ↳ "<snippet from matched source>"
    <path to ISA or jsonl>

Searched: work.json=N, names=N, dirs=N, isa=N, jsonl=N
════════════════════════════════════════════════

JSON:{ query, cleaned_query, tokens, since, until, stats, results: [{ source[], slug, sessionUuid, name, task, phase, progress, effort, score, recencyDays, snippet, path }] }

注意点

  • 部分文字列の一致ではなく、トークンの重なりでスコアを付けます。 markdown extended のようなクエリでは、「markdown extended」が名前に含まれていなくても、Research Type Markdown Extended Images という名前のセッションが見つかります。クエリはトークン化(小文字化し、[^a-z0-9]+ で分割して、ストップワードを除去)され、ストップワード以外のトークンを1つ以上共有する候補にスコアが付けられます。
  • 日付表現は独立した条件として扱われます。 today、yesterday、day before yesterday、last week、last month、N days ago、YYYY-MM-DD はクエリから解析され、範囲が限定された日付フィルターになります。残りのトークンは引き続きコンテンツとの照合に使われます。yesterday と today には1日分の期間(開始日と終了日の両方)が適用され、last week には直近7日間のローリング期間が適用されます。
  • JSONL の日付には、ファイルの更新日時ではなく、最初のユーザーメッセージのタイムスタンプを使います。 Claude Code が会話の jsonl ファイルを再読み込みするたびに更新日時が変わるため、更新日時は実際の日時を反映しません。このツールは最初の type:"user" 行の timestamp を解析して、実際のセッション開始日を取得します。日付フィルターとの照合にはこの日付を使います。
  • jsonl コンテンツの検索対象は、~/.claude/Projects/ 内にある ~/.claude プロジェクト固有の会話ディレクトリに限定されます(ディレクトリ名は実行時の $HOME から生成され、パス内の / と . は - に置き換えられます)。同じマシン上にある他の Claude プロジェクトディレクトリは、意図的に対象外です。
  • 永続的なインデックスはありません。 クエリのたびにディスクを再スキャンします。約9,000個の jsonl ファイルを ripgrep で検索する場合でも約1秒で完了し、クエリ全体の遅延は通常1~2秒で、対話的な使用に十分な速さです。将来的に規模の変化で許容できなくなった場合は、オプトイン方式のキャッシュインデックス(例:jsonl ごとの最初のユーザーのタイムスタンプと単語頻度マップ)を v2 とします。
  • 単独で使う場合と、別の依頼と組み合わせて使う場合があります。 ユーザーが ContextSearch を単独で呼び出した場合(/cs <topic>)、結果を提示して、次に何をしたいかを尋ねます。無関係な依頼の前段として組み合わせて呼び出された場合は、検索を静かに実行し、上位の結果を回答の文脈として使います。ユーザーから求められない限り、検索結果のブロックを回答にそのまま含めないでください。
  • Session-names.json の日付は jsonl の更新日時です(利用可能な範囲でのフォールバック)。 一部のセッション UUID は work.json にも MEMORY/WORK/ ディレクトリにも存在しません。これらは会話のみのセッションであり、構造上の痕跡は自動生成された名前だけです。その場合、このツールは新しさの判定に jsonl の更新日時を使います。最近ファイルが再読み込みされていると、実際の会話日時より新しい日付になります。

結果を受け取った後

単独の場合:「[topic] のコンテキストを読み込みました。最も新しいものは [X] です。次に何をしますか?」

**組み合わせて使う場合:**上位の結果のコンテキストを踏まえて、ユーザーの依頼に対応します。さらに詳しい情報が必要な場合は、ツールが返したパスを指定して読み込みます。

例

例1:特定のトピックについて作業を再開する

User: "what did we do with the Telegram bot?"
→ bun run Tools/ContextSearch.ts "telegram bot"
→ Tokens [telegram, bot] hit work.json + ISA bodies + jsonl
→ Returns telegram-monitor-revival, fix-telegram-channels-plugin-broken, ranked by recency

例2:うろ覚えのセッションを探す

User: "open up that test extended markdown document that you made yesterday"
→ bun run Tools/ContextSearch.ts "test extended markdown document yesterday"
→ Date phrase 'yesterday' parses out → since/until = 2026-05-07 only
→ Tokens [test, extended, markdown, document] hit jsonl content
→ Returns "Research Type Markdown Extended Images" session in top-3 with snippet

例3:日付だけで検索する

User: "what did I work on last week?"
→ bun run Tools/ContextSearch.ts "last week"
→ Date phrase parses to since=7d-ago, no token filter
→ Returns all sessions from the past 7 days, newest first

実行ログ

ワークフローの完了後、JSONL のエントリを1つ追記します。

echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"ContextSearch","workflow":"Search","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl

コメント