name: research
description: |
  Web検索やファイル読み込みによる情報収集と、収集情報の分析・レポート作成。
  複数ソースからの調査、比較分析、トレンド調査、文献サーベイに適する。
  選ぶべき場合: タスクの主目的が「調べること」「情報を集めて整理すること」
  選ぶべきでない場合: 既にデータがあり加工するだけ、Officeファイルの操作が主目的
triggers:
  keywords: ["調べて", "調査", "リサーチ", "分析して", "比較して", "まとめて", "レポート"]
max_movements: 999
initial_movement: dig

movements:
  - name: delegate_research
    persona: orchestrator
    instruction: |
      dig で立てた並列調査計画に従い、各テーマを delegate で1件ずつ直列に深掘りさせ、
      最後に統合レポートにまとめる。重い調査は各サブに任せ、自分の文脈は軽く保つ。

      手順:
      1. dig で立てた調査テーマを思い出す（2〜5 個程度）。各テーマに上から 1 始まりの
         連番を振る（1, 2, 3 ...）。
      2. 各テーマについて delegate を1回ずつ呼ぶ（1件ずつ順番に・直列）。
         delegate の prompt には必ず次を自己完結で書く（サブは独立した文脈で動くため、
         このタスク全体の背景・目的を要約して渡す）:
         - 調べるテーマと目的・背景
         - 「WebSearch / WebFetch / 一次情報で裏を取る。モデルの内部知識だけで書かない」指示
         - 「概要・主要な特徴・数値や事例・まとめと考察 の構成で
           output/research/theme-{連番}.md に Write せよ。関連する画像・グラフは
           output/images/ に保存し Markdown で埋め込め」指示
         - 「完了したら 3〜5 行の要約だけを返せ。深掘り本文は返さずファイルに書け」
         - 「あなたは末端の調査担当。delegate / SpawnSubTask は呼ぶな」
         各サブの戻り値（短い要約）だけが手元に残る。本文はファイルにある。
      3. Glob で output/research/*.md の件数を確認する。
      4. 各サブの要約とファイルを基に統合レポートを output/report.md に Write する:
         - 各テーマの主要な知見を統合（矛盾・重複は整理）
         - 比較・対照が必要なら表形式で整理
         - 全体のまとめと考察を付ける
         - 各テーマの詳細へ相対リンク [theme-{連番}](./research/theme-{連番}.md) で繋ぐ
      5. output/report.md を書き終えたら verify へ遷移する
    default_next: verify
    rules:
      - condition: output/report.md に統合レポートを作成した
        next: verify

  - name: dig
    persona: researcher
    instruction: |
      ## 最初のステップ: 入力把握と調査計画

      情報収集に着手する前に、調査対象と目的を整理する:
      1. Glob でワークスペース全体のファイル一覧を確認する（input/ だけでなくルート直下も含む）
      2. 指示で言及されているファイルがあれば適切なツールで内容を把握する（カタログ参照、詳細は ReadToolDoc）
      3. 調査対象と目的を整理し、どこから情報を集めるか、何を分析するかを明確にする
      4. 「今日のニュース」「最新動向」「直近」など時刻依存の調査依頼では、必ず最初のアクションを WebSearch にする

      ## 分割調査の判断（delegate_research）

      delegate_research を積極的に検討するケース:
      - 複数の独立した調査対象がある（例: 3社の比較、複数技術の比較）
      - 各調査が互いに依存せず、結果を最後に統合すればよい
      - 全体を 1 回の dig → analyze で処理すると context が溢れるリスクがある
      （delegate_research では各テーマを delegate に1件ずつ任せ、本文はファイルに書かせて
        自分の文脈を軽く保つ。直列実行）

      delegate_research を使わないケース:
      - 単一テーマの調査
      - 各ステップが前のステップの結果に依存する逐次的な調査

      ## 計画に従って情報を収集する

      WebSearch、WebFetch、ファイル読み込み等で情報を集め、必ず Write で output/ にファイルとして書き出すこと。
      テキストで回答するだけでは不十分。

      ## 検索の原則（必須）

      - モデルの内部知識だけで情報を書かないこと。主張・事実・数値は必ず WebSearch/WebFetch で裏付けを取る
      - output/ に既存ファイルがある場合でもその内容を鵜呑みにせず、検索で正確性を確認する
      - ユーザーの追加質問への回答には必ず WebSearch で最新情報を改めて確認する。前回の調査結果に依存して検索を省略しない

      ## 一次情報へのアクセスと捏造禁止（厳守）

      - YouTube 動画の内容を調査する場合は、必ず GetYouTubeTranscript で字幕を取得してから作業する
      - 一次情報（動画字幕、論文本文、ページ本文等）に直接アクセスできなかった場合:
        - Web 検索の断片的な情報から内容を推測・捏造してはならない
        - アクセスできなかった旨を明記し、取得できた範囲の情報のみで成果物を作成する
        - 推測部分は「推測」と明示する
      - 二次情報（ブログ記事、要約サイト等）から得た情報は、一次情報ではないことを明記する

      ## 画像・ビジュアル素材の収集（必須）

      調査中は画像・グラフ・図表を積極的に収集し、output/images/ に保存すること。
      テキストだけの調査で終わらせない。ビジュアル素材がレポートの品質を大きく左右する。

      収集すべきもの:
      - 記事・ページ内のグラフ・チャート・比較表の画像
      - 製品・サービスのスクリーンショットや公式画像
      - データの可視化（統計グラフ、トレンド図等）
      - 関連する図解・インフォグラフィック

      収集した画像はレポートの Markdown から相対パスで参照する: `![説明](./images/ファイル名.png)`

      ## 終了 / 遷移方法
      - **次の analyze へ**: `transition({next_step: "analyze"})`
      - **分割調査 → delegate_research へ**: `transition({next_step: "delegate_research"})`
      - **追加調査のため同じ dig を続行**: `transition({next_step: "dig"})`
      - **対象が曖昧で確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
      - **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
    default_next: analyze
    rules:
      - condition: 2つ以上の独立した調査テーマがあり、分割して delegate に任せるのが効率的と判断した
        next: delegate_research
      - condition: output/ に情報を書き出した
        next: analyze
      - condition: 追加調査が必要
        next: dig

  - name: analyze
    persona: analyst
    instruction: |
      収集した情報を分析し、調査レポートを output/ に作成する。
      重要なポイント、トレンド、結論をまとめる。
      必ず Write ツールで output/ にレポートファイルを書き出すこと。
      前のステップから指摘事項がある場合は、それに対応すること。

      ## 検索の原則（必須）

      - レポートに記載する事実・数値・主張は、dig で収集した検索結果に基づくこと
      - 情報が不足している場合は、ここでも追加の WebSearch/WebFetch を行い裏付けを取る。モデルの内部知識だけで補完しない
      - ユーザーの追加質問への回答には必ず WebSearch で最新情報を改めて確認する。前回の調査結果に依存して検索を省略しない
      - 「これまでのレビュー指摘」「現在の変更状況」「変更差分」の付録がある場合は、そこに書かれた不足点から優先的に解消する。指摘事項は「問題点」「期待する修正」「合格基準」まで含めて渡されるので、各項目を漏れなく解消すること

      ## 画像の活用（必須）

      output/images/ に画像が保存されている場合は、必ずレポートの該当箇所に埋め込む:
      `![説明](./images/ファイル名.png)`
      画像があるのにテキストだけのレポートにしないこと。
      レポート作成中に追加で必要な図・グラフを見つけた場合も DownloadFile で収集して埋め込む。

    default_next: verify
    rules:
      - condition: output/ にレポートを書き出した
        next: verify
      - condition: 追加調査が必要
        next: dig

  - name: verify
    persona: reviewer
    instruction: |
      output/ のレポートを確認する。

      確認手順:
      1. まず Glob で output/ 内のファイル一覧を確認する
      2. output/ にファイルが1つもなければ「不足がある」と判断し analyze に差し戻す
      3. ファイルがあれば Read で内容を確認し、網羅性・正確性・分かりやすさをチェックする
      4. 不足があれば、`transition({next_step: "analyze", summary: ...})` で差し戻す。summary は次の形式で書く:
         [判定] needs_fix
         ## 問題点
         - [ファイル名:行番号または項目名] 何が問題か
         ## 期待する修正
         - 何をどう直すべきか
         ## 合格基準
         - 再レビューで何を確認するか
         ## 次にやること
         - 差し戻し先で最初に着手すべき具体的な作業
      5. summary は抽象論で終えず、変更ファイル・不足点・期待する修正内容を必ず含める
      6. 技術的正確性の再確認が必要な場合は、まず自分で WebSearch / WebFetch で簡易チェックする。深い追加調査が必要な場合は、確認すべき URL・検索語・論点を summary に具体的に書いて analyze に差し戻す

      追加チェック（追加質問への回答）:
      - ユーザーの追加質問（前回タスクへの補足・深掘り）への回答が含まれる場合、その内容に WebSearch/WebFetch による検索の裏付けがあるか確認する。内部知識だけで回答している形跡がある場合は「追加質問への回答に検索根拠が不足」として analyze に差し戻す

      追加チェック（画像）:
      - output/images/ に画像があるのにレポートに `![` が一つもない場合、
        画像埋め込み漏れとして analyze に差し戻す

      ## 合格時のユーザーへの返答（complete ツール）

      合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
      result はそのままユーザーに表示される最終回答。output/ のレポートを Read で読み、その内容をベースに整形する。
      - 「output/xxx.md を確認してください」のようなファイル参照ではなく、内容そのものを回答として返すこと
      - 【厳守】「✅ 完了」「レポートを作成しました」「確認しました」等のステータス表示・メタ説明・内部作業の報告は一切書かない。1行目からいきなり本題の内容を書き始めること
      - 調査結果・発見・結論を会話調で分かりやすく伝える
      - 表・リスト・見出しなど Markdown 書式を活用して読みやすくする
      - 長大なレポートの場合は要点を構造化して提示し、詳細は省略してよい
      - 補足や今後の検討事項があれば末尾に添える

      ## 終了方法のまとめ
      - 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
      - 修正必要: `transition({next_step: "analyze", summary: "差し戻し指摘"})` (上記形式で)
      - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
    default_next: COMPLETE
    rules:
      - condition: output/ にファイルがない、または内容に不足がある（追加質問への回答に検索根拠が不足している場合も含む）
        next: analyze
