時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

GitHub Copilot Plan のプロンプトを読む(Plan.agent.md の挙動分析)

こんにちは、takuです。

この記事は、GitHub Copilot の Plan モードをすでに使っている人向けです。
Plan の「使い方」ではなく、Plan.agent.md(プロンプト定義)に書かれている文言から、出力や振る舞いの傾向を読み解きます。

読み終わったあとに得られるものは、次の2つです。

  • Plan が期待と違う動きをしたときに、根拠となる箇所を特定できる
  • 運用やカスタムで「どこを変えると何が変わるか」を整理できる

前提:プロンプトが「Planの役割」を固定している

Plan.agent.md には、役割と禁止事項が明示されています。
例えば以下のような文言があり、Plan は最初から「計画専任」であることが前提です。

  • "Your job: research the codebase → clarify with the user → produce a comprehensive plan."
  • "Your SOLE responsibility is planning. NEVER start implementation."

この種類の文言が入っていると、Plan が実装に踏み込まない方向に寄ります。

原文(全文は各自の環境で参照)

ここでは全文は載せず、手元のファイルを参照できる前提にします。

  • 例:~/Library/Application Support/Code/User/globalStorage/github.copilot-chat/plan-agent/Plan.agent.md

以降は、Plan.agent.md の文言から読み取れる「Planモードの挙動」を整理します。

1. 先頭のメタ情報(frontmatter):許可・導線・期待入力

Plan.agent.md の先頭には、YAML っぽいメタ情報が入っています。
ここは「Plan が何をできて、何ができないか」を決める層です。

ここにあるキーは、主に「許可された能力」と「UI導線」を規定します。

  • tools: 利用可能なツールが列挙される
  • 読み取り系が中心なら、Plan は調査・整理・質問に寄りやすい
  • vscode/askQuestions が含まれていれば、要件確定のための質問を挟みやすい
  • handoffs: 次工程への引き渡しが定義される
  • 計画作成後に「実装へ渡す」導線が UI として固定される
  • argument-hint: 期待する入力が短く提示される
  • 依頼文を短くまとめる圧がかかりやすい(入力の粒度が揃いやすい)

2. rules:Plan が実装しない理由が書いてある

Plan.agent.md の <rules> は、Plan を Plan たらしめているコアです。

このブロックに「編集を止める」「実装しない」「質問で埋める」が書かれていると、出力が次の傾向になります。

  • 編集・実装の手順ではなく、確認事項や設計観点が先に出る
  • 大きい仮定を置かずに、質問で要求を固めようとする

例として、次のような禁止が明示されています。

  • "STOP if you consider running file editing tools"
  • "NEVER start implementation"

3. workflow:なぜこの順番で進むのか

<workflow> には、Plan がどういう順番で考えるべきかが書いてあります。
ここは、Plan が「なぜあの順番で質問してくるのか」を理解するのに効きます。

ワークフローは4フェーズとして定義されています。

  • Discovery:まず調査する
  • Alignment:曖昧さを質問で揃える
  • Design:計画(DRAFT)を作る
  • Refinement:ユーザーの反応で更新する

Discovery:調査を分離する

Discovery では、調査を別エージェントに委譲する前提が書かれています。

  • "Run #tool:agent/runSubagent to gather context"
  • "Research ... using read-only tools"

この条件があると、Plan の出力は「調査結果を前提にした設計」になりやすいです。

Alignment:質問で仕様を確定する

Alignment では、曖昧さが大きい場合に質問ツールを使う方針が明示されています。

  • "Use #tool:vscode/askQuestions freely to clarify requirements"

この記述があると、Plan は「決め打ち」より「質問→確定」に寄ります。

Design:DRAFT を前提にする

Design のフェーズには「DRAFT」という言葉が入っています。
ここは「計画はレビューされる前提」という態度が入っている。

この前提があると、Plan は確定版ではなくレビュー可能な叩き台を出しやすいです。

Refinement:反復で詰める

Refinement は「直して終わり」じゃなく、状況によって Discovery に戻る判断も含みます。
つまり Plan は、一本道のチェックリストではなく、反復で詰める設計です。

4. plan_style_guide:出力の型が固定される

Plan.agent.md の後半には、Plan がどう書くべきかの型が入っています。
このブロックから読み取れる「出力の傾向」は次のとおりです。

  • Steps:具体的な手順
  • Verification:検証の方法
  • Decisions:意思決定の記録

Verification と Decisions が必須要素として入ると、計画が「実装手順だけ」になりにくいです。
また、意思決定の記録が残る設計になります。

また、書式に関する制約も明示されています。

  • "NO code blocks"
  • "NO questions at the end"

この制約があると、Plan は「まず質問で固めてから、最後は計画だけを提示する」形に寄ります。

5. handoffs:次の工程へ誘導する

Plan.agent.md には handoffs が定義されています。
これは Plan の仕事が終わった後に、次に何をすべきかを UI のボタンに落とす仕組みです。

handoffs が定義されていると、計画後に実装へ移る導線が固定されます。

まとめ:Planモードの挙動はどこで決まるか

Plan.agent.md に書かれた文言から、Planモードの挙動は次の要素で規定されます。

  1. tools:利用可能なツール(調査・質問のやり方)
  2. <rules>:禁止事項(実装に踏み込まない、編集しない)
  3. <workflow>:進め方(調査→質問→設計→反復)
  4. <plan_style_guide>:出力形式(Steps/Verification/Decisions、コードを出さない等)
  5. handoffs:次工程への導線(計画→実装の切り替え)

Plan.agent.md を読むと、Plan の挙動を「文言→傾向」の形で説明できます。
特に、tools / <rules> / <workflow> / <plan_style_guide> / handoffs を押さえると、質問の出方や、計画の粒度、実装へ踏み込まない理由が追いやすくなります。