name: research-sub
description: |
  サブタスク専用の調査ピース。親タスクの decompose から SpawnSubTask で起動される。
  dig → analyze → verify の 3 ステップで調査を完結させる。
  さらなるサブタスク分解（SpawnSubTask）は行わない。
max_movements: 999
initial_movement: dig

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

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

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

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

      ## 検索の原則（必須）

      - モデルの内部知識だけで情報を書かないこと。主張・事実・数値は必ず WebSearch/WebFetch で裏付けを取る
      - output/ に既存ファイルがある場合でもその内容を鵜呑みにせず、検索で正確性を確認する

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

      - YouTube 動画の内容を調査する場合は、必ず GetYouTubeTranscript で字幕を取得してから作業する
      - 一次情報に直接アクセスできなかった場合:
        - Web 検索の断片的な情報から内容を推測・捏造してはならない
        - アクセスできなかった旨を明記し、取得できた範囲の情報のみで成果物を作成する

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

      調査中は画像・グラフ・図表を積極的に収集し、output/images/ に保存すること。

      ## 終了 / 遷移方法
      - **次の analyze へ**: `transition({next_step: "analyze"})`
      - **追加調査のため同じ dig を続行**: `transition({next_step: "dig"})`
      - **対象が曖昧で確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
      - **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
    allowed_tools: [Read, Write, Bash, Glob, Grep, WebSearch, WebFetch, BrowseWeb, DownloadFile, ReadImage, AnnotateImage, ReadPdf, PdfToImages, BatchReviewTextWithLLM, MergeReviewedResults, SearchPlaces, GetDirections, ReverseGeocode, GetYouTubeTranscript, SearchYouTube, SearchAmazon, TranscribeAudio, SearchKnowledge, ListNamespaces, ListDocuments, XSearch, XUserPosts, XPostDetail, XFetchCardMedia, SearchNotes, ReadNote, WriteNote, SearchMicrosoftLearn, FetchMicrosoftLearn, SearchMicrosoftLearnCache, RefreshMicrosoftLearnCache, 'mcp__*']
    default_next: analyze
    rules:
      - condition: output/ に情報を書き出した
        next: analyze
      - condition: 追加調査が必要
        next: dig

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

      ## 検索の原則（必須）

      - レポートに記載する事実・数値・主張は、dig で収集した検索結果に基づくこと
      - 情報が不足している場合は、ここでも追加の WebSearch/WebFetch を行い裏付けを取る
      - 「これまでのレビュー指摘」がある場合は、各項目を漏れなく解消すること

      ## 画像の活用（必須）

      output/images/ に画像がある場合は、必ずレポートの該当箇所に埋め込む:
      `![説明](./images/ファイル名.png)`
    allowed_tools: [Read, Write, Bash, Glob, Grep, WebSearch, WebFetch, BrowseWeb, DownloadFile, ReadImage, AnnotateImage, ReadPdf, PdfToImages, BatchReviewTextWithLLM, MergeReviewedResults, SearchPlaces, GetDirections, ReverseGeocode, GetYouTubeTranscript, SearchYouTube, SearchAmazon, TranscribeAudio, SearchKnowledge, ListNamespaces, ListDocuments, XSearch, XUserPosts, XPostDetail, XFetchCardMedia, SearchNotes, ReadNote, WriteNote, SearchMicrosoftLearn, FetchMicrosoftLearn, SearchMicrosoftLearnCache, RefreshMicrosoftLearnCache, 'mcp__*']
    default_next: verify
    rules:
      - condition: output/ にレポートを書き出した
        next: verify
      - condition: 追加調査が必要
        next: dig

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

      確認手順:
      1. まず Glob で output/ 内のファイル一覧を確認する
      2. output/ にファイルが1つもなければ「不足がある」と判断し analyze に差し戻す
      3. ファイルがあれば Read で内容を確認し、網羅性・正確性・分かりやすさをチェックする
      4. 不足があれば analyze に差し戻す

      ## 合格時

      合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
      result はそのままユーザー（親タスク）に返される。
      - 調査結果・発見・結論を簡潔にまとめる
      - 表・リスト・見出しなど Markdown 書式を活用して読みやすくする

      ## 終了方法
      - 合格: `complete({status: "success", result: "調査結果のまとめ"})`
      - 修正必要: `transition({next_step: "analyze", summary: "差し戻し指摘"})`
      - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
    allowed_tools: [Read, Glob, Grep, WebSearch, WebFetch, ReadImage, AnnotateImage, ReadPdf, ReadExcel, ReadDocx, ReadPPTX, SearchNotes, ReadNote, SearchMicrosoftLearn, FetchMicrosoftLearn, SearchMicrosoftLearnCache, RefreshMicrosoftLearnCache]
    default_next: COMPLETE
    rules:
      - condition: output/ にファイルがない、または内容に不足がある
        next: analyze
