Plan-Doc-Do-Follow スキル
計画 → 文書化 → 実行 → 追跡
意図にマッチ → 最初のルートが勝利 → routes/a-b.md(ルート a/b)を読む → それに従う → グローバル不変条件 + ステータスモデルを適用。必要なルート、テンプレート、サブエージェントのみを読み込み、すべてを読み込まない。
ルート
計画
| 意図 | ルート | パラメータ |
|---|---|---|
| プロダクトビジョンからエピックを抽出 | plan/proj | |
| エピックをステークホルダーと検証 | plan/proj-review | |
| エピックPRDと追跡を作成 | plan/epic | E{n} |
| エピック仕様またはアーキテクチャを検証 | plan/epic-review | E{n} {prd |
| エピックアーキテクチャを設計 | plan/epic-arch | E{n} |
| 機能PRDを作成 | plan/feat | E{n} F{n} |
| 機能仕様またはアーキテクチャを検証 | plan/feat-review | E{n} F{n} {prd |
| 機能アーキテクチャ(例外のみ) | plan/feat-arch | E{n} F{n} |
| 機能をタスクに分解 | plan/tasks | E{n} F{n} |
| スコープ変更 — 機能やエピックを追加/更新(実装済み含む) | plan/change | description |
| v2プロジェクトドキュメントをv3に移行(一括) | plan/migrate |
実行
| 意図 | ルート | パラメータ |
|---|---|---|
| トークン節約ツールをセットアップ(LSP、フィルター、エコノミー、ネイティブエージェント) | do/init | |
| 1つのタスクを実行 | do/task | E{n} F{n} T{n} |
| すべての機能タスクを実行し、インラインで検証 | do/all-tasks | E{n} F{n} |
| 完了した作業を検証(タスク単位のパス) | do/verify | E{n} F{n} |
| すべてのステータスを再計算して修復 | do/sync-status | |
| グッドプラクティスを記憶 | do/memorize |
グローバル不変条件(全ルート)
- スピリットチェック:
docs/product.mdと整合させる。製品スピリット(docs/project-status.mdの先頭)をすべての計画ルートとレビュアーブリーフにそのまま含める。 - ユーザーの意思:
docs/decisions.mdを拘束する。逸脱する場合は質問し、黙って適用しない。 - ビジネス優先: 仕様レビューは次のフェーズの前に行う。
- アーキテクチャチェック:
docs/global_architecture.md+docs/technical-stack.mdと整合させる。 - 1つの事実、1つのファイル: ステータス/事実は1つの所有ファイルを持つ(ステータスモデル)。他のファイルはリンクし、コピーしない。
- オーディエンス言語: 人間/ビジネス向け = 完全な文、説明のない略語は禁止。エージェント向け = ドキュメントスタイル(原人簡潔)。
- 空のスキャフォールディング禁止: 未使用のテンプレートセクションは削除する。「N/A」やプレースホルダーは絶対に使用しない。
- 推測禁止: ブロックするあいまいさ → 最初に質問する。ブロッキング / 重要 / 軽微にラベル付けする。
- トレーサビリティ: 各ドキュメントは親を参照する。ストーリー ↔ 要件 ↔ タスク ↔ テストをリンクする。
- 生きたグローバルドキュメント:
docs/data-model.md、docs/ui-map.md、docs/decisions.mdは、それらに影響を与える変更と同じ変更で更新する — 「後で」は絶対にしない。 - モデル階層化:
plan/*+ レビュアー = 強力なモデル。すべてのplan/tasksタスクは、PRDを開かなくても弱いモデルで実行可能。 - ステータス同期: ステータスを変更するすべてのルートは、ステータス同期手順で終了する。
- 引き継ぎ形式: 短いサマリー · 現在の進捗 · 正確な次のコマンド · 未解決の質問。
- スコープ制限されたサブエージェント: 定義リストでリストされた入力のみ。
- ルートごとのマインドセット: ルートのマインドセット行を採用する。
- 熟考は内部に留める: 批評家のやり取りはドキュメントや引き継ぎに決して含めない — 人間は最終結果と検証すべきものだけを見る。
- どこでもエコノミー: すべてのルートとサブエージェントでワーキングエコノミーを適用する。
ステータスモデル
⚪ TODO · 🟡 SPEC 仕様決定済み · 🟣 PLAN タスク生成済み · 🔵 DEV 開発中 · 🟢 DONE 完了・検証済み
所有権 — 単一情報源
| 事実 | 所有ファイル(書かれる唯一の場所) |
|---|---|
| タスクステータス | feat-tasks.md — タスクサマリーテーブル |
| 機能ステータスと進捗 | epic-status.md — 機能テーブル |
| エピックステータスと進捗 | docs/project-status.md — エピックロードマップテーブル |
| プロジェクト進捗 | docs/project-status.md — 進捗セクション |
feat-status.mdは存在しない。タスクごとのセクション: ステータス行なし。Mermaid = 装飾用、所有テーブルから再生成され、情報源ではない。
導出ルール
- 機能:
feat-prd.mdがない → ⚪ · PRDが存在する → 🟡 ·feat-tasks.mdが存在し、TODOを超えるタスクがない → 🟣 · いずれかのタスクがDEV/DONE → 🔵 · 🟢 のみ 検証ゲート(do/verify、またはdo/all-tasksの最終フェーズ)を介して。🟢 機能にタスクが追加された → 🔵 に戻す。 - エピック:
epic-prd.mdがない → ⚪ · PRDが存在する → 🟡 · すべての機能が ≥ 🟣 → 🟣 · いずれかの機能が 🔵/🟢(すべてが 🟢 ではない) → 🔵 · すべて 🟢 → 🟢 - プロジェクト: エピックに対する同じ集約。
- 進捗: 完了タスク数 / 全タスク数(0の場合は0)、エピックおよびプロジェクトレベルで集計。
ステータス同期手順
ステータスを変更するルートの終了時(スタンドアロン: do/sync-status、すべてのエピック):
- 影響を受ける機能のタスクサマリーテーブルを読む。
- 各機能のステータス + 進捗を再計算し、
epic-status.mdの行を更新する。 - 影響を受ける各エピックを再計算し、その行、進捗セクション、
docs/project-status.mdの円グラフを更新する。ステータス同期は変更ログを決して書き込まない — マイルストーンを生成したルートによって書かれる、変更ログハードルール(ドキュメントスタイル)によって命名されたイベントのみ。 - 引き継ぎでずれ(保存されたもの ≠ 導出されたもの)を報告する。
決定論的かつ冪等。
サブエージェント
定義は subagents/ に — エージェントごとに1ファイル(形式: subagents/README.md)。呼び出し: ファイルを読む → 正確にリストされた入力を組み立てる(レビュアーは常に製品スピリットを取得) → ファイル本文をシステムプロンプトとしてエージェントを spawn する。
エコノミープロファイル
リポジトリ指示ファイルの ツーリング セクションから Subagent economy: を読む(do/init が書き込む)。欠落時 → balanced
| プロファイル | 動作 |
|---|---|
strict | インラインファーストを厳守 · スカウトはほとんどの場合インライン · 質問/ツール/リターン上限を強制 · 批評家は依然として spawn する |
balanced | 以下に書かれているようにインラインファースト · 上限を強制 · >5スカウト質問でソフト警告 |
quality | コストゲートはアドバイスに留める · 上限はスカウトツール使用とリターンサイズに依然適用 |
spawn 前(インラインファースト)
順に実行 — 最初のマッチが勝利 → spawn しない:
- 事実が既にプリンシパルコンテキストにある → インラインで作業
- プリンシパルが ≤5回の Grep/Glob/Read(またはLSP)呼び出しで回答可能 → インライン(
subagents/repo-scout.mdのスカウトライトチェックリストを使用) - ブリーフが期待される回答のサイズに近づく → インライン
- 発見事項が小さな範囲に対する表面的/機械的チェックリストである可能性が高い → インライン(今日のコストゲートと同じ)
- それ以外は spawn する
repo-scout 追加(strict / balanced 下): spawn するのは、≥3 の反証可能な質問 かつ 検索がプリンシパルが開いていない ≥2 の領域にまたがる場合、または プリンシパルコンテキストが既に大きく、分離が明らかに安い場合のみ。 それ以外はインラインでスカウトライト。
spawn 時:
- ツール注入: ブリーフには、リポジトリ指示ファイルからの1行ツールブロック(CLIフィルタープレフィックス、LSP設定、エコノミープロファイル)を含める — サブエージェントはそれに従わなければならない。
- 正確なブリーフ: 正確な質問/チェック · 照らして構築する標準 · スコープ外 · スカウトの場合、エリアが判明している場合は開始パス/glob · スカウトウェーブごとに ≤5 質問(
balanced/strict; 残りは分割するかインラインで処理)。 - ハードルを前もって設定: ドラフト前に、批評家のレビュー質問を読む。最初の試行でパスするようにドラフトする。
- リターンペイロード上限: スカウト ≤15行 · 批評家 ≤25行 · プリンシパルは必要な事実のみ保持 — スカウトダンプをドキュメントに貼り付けない。
批評家の発見事項: 動作、契約、または人間の決定を変更する場合に適用。無駄/表面的なものは黙って破棄。拒否された判断 → 人間への決定質問。収束: ドキュメントごとに1回の実行。ブロッキング発見事項の実質的な再作業後、最大1回の再実行。再実行はブロッキングのみを受け入れる。3回目の実行は絶対にしない。やり取りを決して報告しない(不変条件16)。
| サブエージェント | 種類 | 呼び出し元 | いつ |
|---|---|---|---|
repo-scout | 調査 | plan/epic-arch, plan/feat, plan/feat-arch, plan/change | 計画は既存コードに基づく必要がある |
prd-critic | レビュアー | plan/epic, plan/feat | 常に |
arch-critic | レビュアー | plan/epic-arch, plan/feat-arch | 常に |
perf-critic-backend / -frontend | レビュアー | アーキテクチャルート、検証ゲート | トリガー基準(ファイル先頭)が発火した場合のみ |
task-checker | レビュアー | plan/tasks | セルフレビュー後、最大2回実行 |
feature-coder | 実行者 | do/all-tasks | ウェーブごとに並列化可能なタスク1つにつき1回 |
ui-consistency-reviewer | レビュアー | 検証ゲート | UI機能、重要な表面 |
doc-coherence-reviewer | レビュアー | 検証ゲート · plan/change · plan/migrate | エピック完了時 · 変更後 · 移行後 |
検証ゲート(+ そのサブエージェント)は do/verify で実行されるか、do/all-tasks の最終フェーズとしてインラインで実行される。
人間レビューUX
結論、プロセスではない。機械的チェックは自動検証 → 1行のサマリー。「あなたの検証を必要とする決定」: ≤10の平易な文によるステートメント + ブロッキング/重要/軽微にラベル付けされた未解決質問。検証された決定 → docs/decisions.md。ステークホルダーの回答は そのまま — 言い換えず、再質問しない(あいまいな場合は、明確化のみ質問する)。
ワーキングエコノミー(不変条件17)
入力エコノミー
- ファイル全体の読み取りよりもLSP/セマンティックナビゲーションを優先。スコープ指定された行範囲を使用。
- コード検索には Shell よりも Grep/Glob/LSP を優先 — 必要な場合のみ Shell を使用。
- 長いCLI出力(テスト、ビルド、git、パッケージマネージャー)はリポジトリ宣言されたフィルター(例:
rtk,snip)を介して —do/initがセットアップ。アクティブなフックなしで Shell を使用する場合、手動でプレフィックス。 - コンテキストにあるものを再読み取りしない。'念のため'にドキュメントを読み込まない。
- エコノミープロファイルと spawn 前のインラインファーストに従う(サブエージェント)
出力スタイル(プリンシパルとサブエージェント)
- 原人簡潔(エージェント向けドキュメントと同じ基準): 前置きなし、リクエストの再述なし、末尾のサマリーなし、フィラー/ヘッジなし。
- コード、コマンド、パス、エラー: バイト単位で正確 — 言い換え禁止。
- コード変更は差分または対象指定された編集として — 要求されない限り、ファイル全体のリストは禁止。
- 調査回答は ≤10行(深さが要求されない限り)。サブエージェントの戻り値はリターンペイロード上限に従う。
- 引き継ぎ(不変条件13) = クロージングブロックのみ: ≤5行。
最小実装(do ルートと feature-coder)
完全に理解し、保持する最初の段で停止する:
- 存在する必要がない → スキップ(YAGNI)
- コードベースに既にある → 再利用
- 標準ライブラリが提供する → それを使用
- ネイティブプラットフォーム機能 → それを使用
- インストール済み依存関係 → それを使用
- 1行で十分 → 1行
- その場合のみ、動作する最小限を書く
決して削減しない: 信頼境界の検証、データ損失処理、セキュリティ、アクセシビリティ。
ドキュメントスタイル
2つのオーディエンス — ファイルの目的で選択。ルートのムードではない。
人間 / ビジネス(完全な散文) — PRD(epic-prd.md, feat-prd.md)、docs/product.md、製品スピリット、人間レビュー本文(*-review.md 決定セクション)、ユーザー向けドキュメント(developer-setup、オンボーディング、人間向け README)。完全な文。ステークホルダーが読める。説明のない略語は禁止。
エージェント向け(原人簡潔) — スキルプレイブック(SKILL.md, routes/, subagents/, テンプレートコメント)、feat-tasks.md、epic-arch.md / feat-arch.md、ステータステーブル/メモ、生きた技術ドキュメント(data-model.md, ui-map.md, decisions.md)、docs/patterns/*。原人 完全 に触発:
- 事実と命令のみ — 意味が明確な場合、冠詞/フィラー/ヘッジを削除。断片も可。
- 短い同義語。パターン
[もの] [動作] [理由]·[次のステップ] - 発明された略語禁止(
cfg/impl/fn)。よく知られた技術頭字語は可(DB/API/HTTP)。 - パス、シンボル、コード、コマンド、エラー文字列: 正確に。
not/never/no/only/exceptを決して削除しない。- 改行前の末尾ピリオドなし(複数句の行内の中間ピリオドは残す)。
- 決定と事実のみ — プロセスは絶対に含めない('レビュアーが示唆…'、'議論の後…')。
- 将来のエージェントが理由を必要とする場合のみ正当化(トレードオフ、スコープカット): ≤2行の短い行。
- 自動明確化: セキュリティ警告、不可逆的なステップ、または順序/否定を誤読するリスクがある断片にはより完全な散文 — その後、簡潔に戻る。
変更ログハードルール: 1行 {日付}: {事実}、≤25語。対象のみ — プロジェクト: エピック完了、主要なスコープ変更、移行。エピック: 機能検証 🟢、スコープ変更。その他すべて(タスク生成、PRD起草/承認、ウェーブ、同期、ずれ修復) = エントリなし。決して: 批評家のやり取り(不変条件16)、タスクリスト、ゲート結果、進捗数値、Next: コマンド。冗長な既存エントリ = レガシー、決して先例にならない — 対象となる行のみを書くか、何も書かない。
ファイル構成
docs/
├── product.md (入力: プロダクトビジョン)
├── global_architecture.md (入力: アーキテクチャ概要)
├── technical-stack.md (入力: 技術決定)
├── project-status.md (所有: 製品スピリット、エピックステータス、進捗)
├── project-review.md
├── decisions.md (生きた: 拘束力のあるユーザー決定、各行1つ)
├── data-model.md (生きた: グローバルデータスキーマ、存在する場合)
├── ui-map.md (生きた: グローバルナビゲーションマップ、UIの場合)
├── design-guidelines.md (生きた: UIスタイル規約、UIの場合)
├── patterns/{pattern-name}.md (do/memorize から)
└── epics/e{n}-{epic-name}/ (スラッグ例 e2-orm-discovery)
├── epic-brief.md (plan/proj)
├── epic-prd.md (plan/epic)
├── epic-status.md (所有: 機能ステータス)
├── epic-arch.md (plan/epic-arch)
├── epic-review.md (plan/epic-review)
└── f{n}-{feat-name}/ (直接の子 — features/ レベルはなし)
├── feat-prd.md (plan/feat; エントリポイント + アーキテクチャ差分を含む)
├── feat-arch.md (plan/feat-arch — 例外のみ)
├── feat-tasks.md (所有: タスクステータス)
└── feat-review.md (plan/feat-review)
プラットフォーム統合
リポジトリ規則、優先順位: CLAUDE.md · AGENTS.md · .github/copilot-instructions.md · .cursor/rules/ · .github/instructions/。do/memorize は実際に存在するファイルに書き戻す。
テンプレート
templates/ にあり — 名前は出力ファイルをミラーする。