name: plan-tasks description: >- 要件・設計仕様から実装タスクを計画する時に使用する。 ユーザーと対話しながらタスクをフェーズへ分解し、依存関係と規模を定義する。 メインエージェントが使用し、design-spec の後、refiner 呼び出しの前に実行する。 user-invocable: false allowed-tools: [Read, Glob, Grep, AskUserQuestion]
タスク計画ワークフロー
要件・設計仕様を順序付き実装計画へ変換する対話プロセスを定義する。 メインエージェントがユーザーと対話しながらタスクを整理し、依存関係と Wave 並列実行の前提を作るために使用する。
準備
対象のフィーチャー名を確認し、設計仕様の存在を確認する。
.artifacts/features/<feature>/specification.mdが 存在する 場合: フェーズ 1 へ進む。- 存在しない 場合: ユーザーへ通知し、先に
design-specを実行するか、仕様をインラインで提供するよう案内する。
フェーズ 1: 入力分析
.artifacts/features/<feature>/requirements.mdと.artifacts/features/<feature>/specification.mdを読み込む。- 受け入れ基準・前提条件・制約を特定する。
.artifacts/project_architecture.mdがあれば読み込み、影響を受けるコンポーネントと再利用できるパターンを把握する。- 不明点があれば
AskUserQuestionで確認する。
フェーズ 2: タスク分解
作業をフェーズへ、フェーズをタスクへ分解する。分解の観点:
- 共有ユーティリティ / 型定義
- DB / API スキーマ変更
- バックエンドロジック実装
- フロントエンドコンポーネント実装
- テストコード
各タスクには次を定義する。
- タスク ID:
task_<phase_num>_<task_num>形式で一意に採番する(例:task_1_1、task_2_3)。 タスク番号は phase ごとに1から開始する。 - 概要: 何を実装するか(WHAT)と、なぜ必要か(WHY)。
- 対象ファイル(概算): 変更が見込まれるファイル。
- 依存関係: 先行して完了している必要があるタスク ID(無ければ「なし」)。
- 想定規模: 後述のコンテキスト・コスト基準で見積もる。
フェーズ 3: 規模の見積もり(コンテキスト・コスト基準)
タスクの粒度は「時間」ではなく コンテキスト・コスト で判断する。
- 基準は「変更が必要なファイル数」と「予想されるトークン消費量」。
- 1 つのタスクに変更を詰め込みすぎると、実行する coder のコンテキストが溢れて品質が劣化する。
- 目安として 1 タスクあたり数ファイル程度に収め、溢れそうなら分割する。
フェーズ 4: 依存関係と Wave 設計
- タスク間の依存グラフを整理する。
- 互いに独立したタスク群は同じ Wave に置き、並列実行の候補とする。
- 依存先のあるタスクは後続の Wave に置く。
- 各タスクが独立して検証可能であることを確認する。
- 共通ファイル排他: 同じファイルを編集する複数タスクは同一 Wave に置かない。
並列実行する coder 同士が同じファイル(例:
__init__.pyの__all__集約、pyproject.tomlの依存リスト、共有設定ファイル)を編集すると編集衝突が発生し、 後勝ち上書きや片方の追記の消失を招くため。共通ファイルを編集するタスクは別 Wave へ分け、 順次実行する。判定が難しい場合は、plan.md の「対象ファイル」列を相互比較する。
フェーズ 5: 完了の扱い
計画が固まった時点で本スキルの責務は完了とする。成果物ファイルへの書き出し・ユーザーへの報告・ 次フェーズへの案内は本スキルでは行わない。これらは呼び出し元(コマンドまたはエージェント定義)が担う。
各タスクの粒度・依存関係について、以下の順でステップごとに思考を展開すること。 最終出力には含めず、内部推論として用いる。
- 責務の単一性: このタスクは 1 つの目的に絞られているか。
- 依存関係の最小性: この依存は本当に必要か、並列化を阻害していないか。
- 規模の妥当性: 変更ファイル数・トークン量が coder のコンテキストに収まるか。
- 検証可能性: このタスクの完了を、後段で単独に判定できるか。
- Wave 配置: 依存のないタスク群とまとめて同一 Wave に置けるか、後続 Wave に回すべきか。
- 具体的に書く: 正確なファイルパス・関数名・変数名を使う。
- WHY を記録する: WHAT だけでなく、そのタスクが必要な理由を残す。
- 変更を最小化する: 書き直しより既存コードの拡張を優先する。
- 既存パターンを踏襲する: プロジェクトの規約に従う。
- 段階的に検証可能にする: 各タスクは単体で検証できる粒度にする。
- 並列性を確保する: 不要な依存を作らず、並列実行できる構造にする。
- 共通ファイル編集は Wave を分ける: 同じファイルを編集するタスクを同一 Wave に並べない。 ファイル単位での衝突回避を Wave 設計の制約として扱う。