research-deep について
アウトラインを読み込み、項目ごとの調査をバックグラウンドのエージェントに委任してJSONに保存するリサーチ用スキルです。完了済み項目を除外でき、バッチごとに承認を待ちます。
主な機能
- 01アウトラインと実行設定の読み込み
- 02出力済み項目のスキップ
- 03バッチ単位での項目調査
- 04バッチ間の承認待ち
- 05項目ごとの結果をJSONに保存
活用シーン
- 01アウトラインから構造化された調査記録を作成
- 02途中で停止した調査の再開
- 03最初のバッチを確認してから続行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill research-deepインストール後、Claude Code で/research-deepを入力して読み込まれたか確認します。
詳細
Deep Research — 項目ごとの詳細調査
/research-outline が生成したアウトラインを読み込み、バッチごとにバックグラウンドエージェントを 1 つ起動します。各エージェントは、フィールドスキーマに沿って項目の完全な JSON を作成します。
トリガー
/research-deep
パイプライン内の位置
/research-outline → /research-add-* → ► /research-deep ◄ → /research-report
ワークフロー
ステップ 1 — アウトラインを自動検出
現在の作業ディレクトリから */outline.yaml を Glob で検索します。Read で読み込み、items、execution.batch_size、execution.items_per_agent、execution.output_dir を取得します。
ステップ 2 — 再開時の確認
{output_dir}/*.json を Glob で検索し、すでに完了した項目を見つけます。完了済みの項目はスキップし、まだ JSON がない項目のみを実行対象にします。
ステップ 3 — バッチ実行
- 残りの項目を
batch_size件ずつのバッチにまとめます。 - 各バッチでは、
Taskツールを使って、subagent_type: general-purpose(または、プロジェクトに登録されている調査用サブエージェント)とrun_in_background: trueを指定してエージェントを起動します。エージェントごとの出力は無効にします。エージェントは割り当てられた JSON パスに直接書き込むため、エージェントのやり取りを親コンテキストにストリーミングしてもトークンを消費するだけです。 - 各エージェントは最大
items_per_agent件を担当します。 - 次のバッチを起動する前に、ユーザーの承認を待ちます(ユーザーが最初のバッチの出力を確認し、品質に問題があれば早期に停止できます)。
項目ごとに取得するパラメーター:
{topic}—outline.yamlのtopicフィールド{item_name}— 項目のnameフィールド{item_related_info}— 項目の YAML 全体(name + category + description + …){output_dir}—outline.yamlのexecution.output_dir(デフォルトは./results){fields_path}—{topic_dir}/fields.yamlの絶対パス{output_path}—{output_dir}/{item_name_slug}.jsonの絶対パス
{item_name_slug} のスラッグ規則: 小文字に変換し、英数字以外の文字が連続する部分を _ に置き換え、先頭と末尾の _ を取り除きます。具体的には、re.sub(r"[^a-z0-9]+", "_", item_name.lower()).strip("_") です。例:GitHub Copilot → github_copilot、Cursor (Anysphere) → cursor_anysphere。
以下のプロンプトをテンプレートとしてそのまま使う理由: サブエージェントは隔離された環境で実行されます。そのプロンプトにはすべてのパラメーターが明示されており、わずかな文言の違いでも実行ごとに JSON の構造にずれが生じます。テンプレートは安定した契約として扱い、{xxx} 変数のみを置き換え、それ以外はそのままにしてください。
プロンプトテンプレート:
## Task
Research {item_related_info}, output structured JSON to {output_path}
## Field Definitions
Read {fields_path} to get all field definitions
## Output Requirements
1. Output JSON according to fields defined in fields.yaml
2. Mark uncertain field values with [uncertain]
3. Add uncertain array at the end of JSON, listing all uncertain field names
4. All field values must be in English
## Output Path
{output_path}
## Validation
After completing JSON output, run validation script to ensure complete field coverage:
python ~/.claude/skills/research-outline/validate_json.py -f {fields_path} -j {output_path}
Task is complete only after validation passes.
実行例(項目 = "GitHub Copilot"):
## Task
Research name: GitHub Copilot
category: International Product
description: Developed by Microsoft/GitHub, first mainstream AI coding assistant, ~40% market share, output structured JSON to {project_dir}/results/github_copilot.json
## Field Definitions
Read {project_dir}/fields.yaml to get all field definitions
## Output Requirements
1. Output JSON according to fields defined in fields.yaml
2. Mark uncertain field values with [uncertain]
3. Add uncertain array at the end of JSON, listing all uncertain field names
4. All field values must be in English
## Output Path
{project_dir}/results/github_copilot.json
## Validation
After completing JSON output, run validation script to ensure complete field coverage:
python ~/.claude/skills/research-outline/validate_json.py -f {project_dir}/fields.yaml -j {project_dir}/results/github_copilot.json
Task is complete only after validation passes.
ステップ 4 — 待機と進捗確認
- 現在のバッチが完了するまで待ちます(各エージェントは JSON を出力して完了を通知します)。
- ユーザーの許可を得てから、次のバッチを起動します。
- 進捗を表示します(完了した項目数
N/total)。
ステップ 5 — サマリーレポート
すべてのバッチが完了したら、次を出力します。
- 完了した項目数
- 失敗とマークされた項目、または
uncertainエントリがある項目の一覧 {output_dir}/へのパス
エージェント設定
- バックグラウンド実行:有効(
run_in_background: true) - タスク出力:無効 — 各エージェントの成果物は、エージェントが書き込む JSON ファイルです
- 再開サポート:有効(ステップ 2 で完了済みの項目をスキップ)
注意点
- バリデーターのパス
~/.claude/skills/research-outline/validate_json.pyはインストール場所に依存します。research-outlineスキルが~/.claude/skills/research-outline/にインストールされていることを前提としています。この場所はclaude-code-skills/scripts/link-skills.shとinstall-skills.shによって設定されます。スキルを別の場所(例:プロジェクトローカルの.claude/skills/)にコピーした場合、テンプレート化されたプロンプト内のバリデーターのパスが機能せず、サブエージェントは検証ステップで停止します。標準のインストールパスを維持するか、/research-deepを開始する前に、上記のテンプレート内のバリデーターのパスをインストール先の正しい絶対パスに置き換えてください。 - タスク出力を無効にしたバックグラウンドエージェントでは、問題が起きても早期に気づけません。 これは意図的なトレードオフであり、冗長さよりトークンの節約を優先しています。追加分を承認する前に、最初のバッチの JSON を抜き取り確認してください。
- 再開時の判定はファイル名の一致だけに依存します。 書き込み途中でクラッシュした JSON も、ステップ 2 では「完了」と見なされます。前回の実行が中断された場合は、再実行する前に破損した JSON を削除してください。
{item_name_slug}の衝突は、通知なく上書きされます。 名前をスラグ化した結果が同じになる 2 つの項目(例:GPT-4とGPT 4)は互いに上書きされます。衝突が疑われる場合は、項目のcategoryフィールドに識別子を追加し、代わりに{category_slug}_{name_slug}としてスラグ化してください。- バリデーターの必須フィールドチェックだけが、唯一の事後条件です。
fields.yamlでrequired: trueに指定された項目がなければ、ほとんど空の JSON を返すエージェントも含め、バリデーターはどのような内容でも通過させます。意味のあるチェックを行うには、各カテゴリで少なくとも 1 つのフィールドをrequiredに指定してください。