PBI INPUT PACKAGE から PlanGate の plan.md / todo.md / test-cases.md を B-1→B-2→B-3 フローで作成する。Use when: docs/working/TASK-XXXX/pbi-input.md を元に実行計画を作りたい時。
Scanned 9/5/2026
Install to Claude Code
npx -y skills add s977043/PlanGate --skill ai-dev-plan --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ai Dev Plan?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/s977043-ai-dev-plan-5c8fcb27)More formats (shields.io, HTML) on the badges page.
---
name: ai-dev-plan
description: "PBI INPUT PACKAGE から PlanGate の plan.md / todo.md / test-cases.md を B-1→B-2→B-3 フローで作成する。Use when: docs/working/TASK-XXXX/pbi-input.md を元に実行計画を作りたい時。"
---
# AI-Driven Plan (PlanGate / Codex 共用)
PlanGate ワークフローの **plan フェーズ(WF-02〜WF-03)** を Codex / Claude Code 両方で実行する skill。skill が担うのは読む順序と入出力規約であり、**機械化された実行ロジックは上流リポジトリ(`s977043/plangate`)の `scripts/ai-dev-workflow` / `bin/plangate` CLI 側にある**。
> **その CLI は導入先には配布されない**(Human 決定 #1144: plugin が配るのは読み物層のみで、CLI と enforcement 層〔`scripts/hooks/`〕は含めない)。**plan フェーズ自体は CLI 非依存で完結する**(本 skill の手順どおり `plan.md` / `todo.md` / `test-cases.md` を手で作る)。CLI が必須なのは `plan_hash` の機械検証など一部に限られ、その分離と代替手順は下記「CLI 呼び出し」節と「CLI 不在時のフォールバック」節を正本とする。
> 本スキルは **bundled resources**(`references/`)で自己完結する。
>
> **パス表記の規約(重要)**: 本 SKILL.md 中の `references/…` は、すべて **本スキル
> ディレクトリからの相対パス**(= `<skill_dir>/…`)であって、導入先リポジトリのルートからの
> 相対パスではない。実行時はまず `<skill_dir>`(このファイルが置かれているディレクトリ)を
> 解決してから使う:
>
> | 環境 | `<skill_dir>` |
> | --- | --- |
> | plugin 導入先(Claude marketplace) | `<plugin_root>/skills/ai-dev-plan/` |
> | `install.sh --claude` 導入先 | `.claude/skills/ai-dev-plan/` |
> | Codex 導入先 | `.codex/skills/ai-dev-plan/` |
> | 上流リポジトリ(正本側) | `.agents/skills/ai-dev-plan/` |
>
> 導入先が独自の正本(上流リポジトリの `docs/` 配下に相当するもの)を別途保持している
> 場合は、そちらを優先すること。
## Read First
### 参照解決順(導入先で必ずこの順に探す)
本 Skill は **上流リポジトリ基準の `docs/**` パスを直接参照しない**(#1232)。`docs/**` は
`install.sh --claude` / plugin(Claude marketplace)/ Codex の **3 経路とも配布対象外**であり、
書いた時点で導入先では必ず空振りするためである。参照の解決は次の順で行う:
1. **`<skill_dir>` 配下の同梱物(`references/`)を第一に読む** — 契約 doc・テンプレートは
本スキルに同梱されている(「同梱リファレンス」節の一覧)
2. 導入先リポジトリが独自の正本(上流の `docs/` 配下に相当するもの)を保持していれば、
そちらを優先する
3. **rules(`rules/*.md`)だけは配布経路によって着地が異なる**ため、次の順で探す:
1. 導入先リポジトリの相対パス(例: `.claude/rules/mode-classification.md`)
2. 無ければ plugin root 配下(例: `${CLAUDE_PLUGIN_ROOT}/rules/mode-classification.md`)
- **解決は Bash で `ls "${CLAUDE_PLUGIN_ROOT}/rules/"` を実行して確認する**。
Read ツールは絶対パスを要求し環境変数を展開しないため、`${CLAUDE_PLUGIN_ROOT}/...`
という文字列をそのまま Read しても必ず失敗する
- **変数が空・未設定なら glob(`~/.claude/plugins/cache/**` 等)で推測せず次へ進む**。
キャッシュには複数バージョンが並存しうるため、当て推量は版の取り違えを招く
4. いずれでも解決できなければ **「正本 `<path>` を参照できなかった」と明示**し、本 Skill 内の
記述と同梱 `references/` を代替正本として扱い、推測で内容を補わない
**plugin root 直下に `docs/` を探しに行かないこと**: plugin が配布するのは
`agents` / `commands` / `skills` / `rules` 等の定義ディレクトリのみで `docs/` を配布対象として
認識せず、plugin root 配下に相当する配布物が存在しないため必ず空振りする(クラス A の rules
参照が plugin root 配下で解決できるのは `rules/` が実際に配布されるからであり、この非対称を
`docs/**` に持ち込まない)。
導入経路は 3 つあり、配置されるものが違う(**「同じ 4 ディレクトリが配られる」わけではない**):
- **`install.sh --claude` 経由**: コピー対象は `agents` / `skills` / `commands` / `rules`
の 4 ディレクトリのみ(一次ソース: `install.sh` の `for dir in agents skills commands rules`)
- **plugin(Claude marketplace)経由**: バンドルは `agents` / `assets` / `commands` /
`hooks` / `rules` / `scripts` / `skills` + `README.md` / `.claude-plugin/`。ただし
`scripts/` の中身は `install-plangate-skills.sh` のみで、**`ai-dev-workflow` も
`bin/plangate` も含まれない**
- **Codex(`install.sh --codex` / marketplace)経由**: 配置されるのは **skills だけ**。
`install_codex()` は `install-plangate-skills.sh` を呼ぶのみで、同スクリプトは
`rules` を一切扱わない(`.claude/rules/` は作られない)。`${CLAUDE_PLUGIN_ROOT}` も
Claude Code の変数であり Codex には無い
| 参照 | `install.sh --claude` 経由 | plugin(Claude marketplace)経由 | Codex 経由 |
|------|---------------------------|----------------------------------|-----------|
| `rules/*.md` | `.claude/rules/` に着地(解決可) | `${CLAUDE_PLUGIN_ROOT}/rules/` で解決 | **未配置(解決不可 → 手順 4 へ)** |
| 契約 doc・テンプレート | **`<skill_dir>/references/` に同梱(解決可)** | **`<skill_dir>/references/` に同梱(解決可)** | **`<skill_dir>/references/` に同梱(解決可)** |
| `bin/**` | コピー対象外(解決不可) | バンドル対象外(解決不可) | 未配置(解決不可) |
| `scripts/**` | コピー対象外(解決不可) | `${CLAUDE_PLUGIN_ROOT}/scripts/` は存在するが `install-plangate-skills.sh` のみ(目的の CLI は解決不可) | 未配置(解決不可) |
> **例外(上流リポジトリ内のドッグフーディング経路 / #1249 MINOR-3)**: 上表「Codex 経由」の
> 「同梱(解決可)」が成立するのは **配布物経由**(`plugin/plangate/scripts/install-plangate-skills.sh`。
> source は `plugin/plangate/skills/`)に限る。上流リポジトリ自身が `.codex/skills/` を作る
> `scripts/install-plangate-skills-to-codex.sh` は source が `.agents/skills/` であり、そこには
> 本 skill の `references/` が **存在しない**(`references/` は `scripts/sync-plugin-plangate.sh` が
> `plugin/plangate/skills/**` にだけ生成する)。したがって上流 repo の
> `.codex/skills/<skill>/references/` は **構造上つねに不在**であり、この経路では契約 doc・
> テンプレートは手順 4(解決できなかったと明示)に落ちる。上流では `docs/**` の正本を直接
> 読めるため実害は無いが、上表の「解決可」を上流の `.codex/` にまで拡大解釈しないこと。
> 経路自体の是正(source の一本化)は #1086 の裁定待ち。
**Codex 経路では rules の解決順 3-1・3-2 とも成立しない**ため、rules 参照は手順 4
(解決できなかったと明示)に落ちる。その場合、正本の内容は **同梱 `references/` と本 skill の
記述で代替**し、plan.md の Questions / Unknowns に「正本 `<path>` を参照できなかった」旨を
記録する。
### 同梱リファレンス(`<skill_dir>/references/`)
| ファイル | 役割 |
|---------|------|
| `references/ai-driven-development.md` | ワークフロー全体像・モード分岐・ゲート条件・Prompt 1 の正本 |
| `references/plan-metrics-verification.md` | 事前メトリクス検証(B-1 → B-2 mandatory gate)の正本 |
| `references/core-contract.md` | 実行契約(Iron Law / Stop rules / Output discipline)の正本 |
| `references/plangate.md` | PlanGate 概要ガイド |
| `references/plan-template.md` | `plan.md` の雛形(**配布先ではこの名前**。理由は下記注記) |
| `references/todo.md` | `todo.md` の雛形 |
| `references/test-cases.md` | `test-cases.md` の雛形 |
| `references/INDEX.md` | `INDEX.md` の雛形 |
| `references/current-state.md` | `current-state.md` の雛形 |
| `references/review-self.md` | `review-self.md`(C-1 全項目)の雛形・項目定義の正本 |
| `references/review-external.md` | `review-external.md`(C-2 / R-NNN 集約)の雛形 |
| `references/pbi-input.md` | `pbi-input.md` の雛形 |
> **`plan.md` の雛形が `plan-template.md` である理由**: 承認境界 hook(EH-3)は
> **basename `plan.md`** を block 対象として判定する(パスではなく basename)。雛形を
> `plan.md` の名前で同梱すると、hook を配線した導入先で雛形そのものが編集不能になる。
> 配布名だけを変えており、**生成する成果物のファイル名は `plan.md` のまま**。
### 読む順序
> 下記 3〜5 の fallback にある `<plugin_root>` は、上の「参照解決順」手順 3-2 のとおり
> **Bash で `${CLAUDE_PLUGIN_ROOT}` を展開して得た絶対パス**を指す(変数を含む文字列を
> そのまま Read しない)。
1. `CLAUDE.md`
2. `AGENTS.md`
3. `.claude/rules/working-context.md` → fallback `<plugin_root>/rules/working-context.md`
(B フェーズ 3 ファイル同時生成・段階別出力・ゲート条件の正本)
4. `.claude/rules/mode-classification.md` → fallback `<plugin_root>/rules/mode-classification.md`
(5 段階 mode + `lite_eligible` 派生属性の正本)
5. `.claude/rules/hybrid-architecture.md` → fallback `<plugin_root>/rules/hybrid-architecture.md`
(Rule 1〜5 / handoff 必須化)
6. `references/ai-driven-development.md`(**同梱**。導入先が独自正本を持つ場合はそちらを優先)
- 最低限: `## ワークフロー全体像`、`### タスク規模によるモード分岐(5 モード)`、`## ゲート条件`、`### Prompt 1: Plan + ToDo + Test Cases生成`
7. `docs/working/TASK-XXXX/pbi-input.md`(**導入先で作成する入力**。配布物ではない。無ければ plan を開始しない)
## Output
- `docs/working/TASK-XXXX/plan.md`
- `docs/working/TASK-XXXX/todo.md`
- `docs/working/TASK-XXXX/test-cases.md`
- `docs/working/TASK-XXXX/INDEX.md`(任意・無ければ生成)
- `docs/working/TASK-XXXX/decision-log.jsonl`(初期化)
## Rules
### フロー(詳細は正本参照)
- **B-1 / B-2 / B-3** フローおよび plan.md 必須セクション(確認事項 / アプローチ比較 / Mode判定 / lite_eligible 等)は同梱 `references/ai-driven-development.md` の `### Prompt 1: Plan + ToDo + Test Cases生成` と `.claude/rules/mode-classification.md` を **正本** とする。skill は順序のみを示す。生成物の雛形は同梱 `references/plan-template.md` / `references/todo.md` / `references/test-cases.md` を使う。
- B-1(最大 3 問の確認質問)→ **事前メトリクス検証 (mandatory gate)** → B-2(2〜3 案の trade-off 比較)→ B-3(3 ファイル同時生成)
### 事前メトリクス検証 (B-1 → B-2 mandatory gate / #351 TASK-0117)
> 正本: 同梱 `references/plan-metrics-verification.md`
> (導入先が独自正本を保持する場合はそちらを優先。どちらも解決できない環境では以下の要約に従い、正本未参照である旨を plan に記録する)
「全部 / 全件 / 残り N 件」系の対象は **実数を取得** してから B-2 へ進む。
**検証コマンド例** (.git / node_modules 等を除外):
```sh
grep -rln --exclude-dir={.git,node_modules,dist,docs/working} <symbol> --include='*.md' -- . | wc -l
find . -name <pattern> -not -path './.git/*' -not -path './node_modules/*' | wc -l
# 推奨: rg --files <path> | wc -l
```
**判定基準** (実数 / AI 見積もり):
- ≥ 3 倍 → **スコープ縮小 or 別タスクへ切替**
- 1〜3 倍 → 採用、plan の Risks に記録
- < 1 倍 → 採用、Mode を 1 段下げる候補
**plan.md template に `## Metrics Evidence` 欄を必須化** (実数 / 見積もり / ratio / 判定 を残す出力契約 / AC-8)。
**未取得時の分岐 (安全側 / R-001/R-004)**: 実数取得不能 / Plan Health 未算出 / 「全件」系の対象が曖昧な場合は **必ず Mode 引き上げ側に倒す** (`mode-classification.md` AC-8 安全側不変条件と一貫)。
### todo.md 規約
- タスク粒度 2-5 分、`Owner: agent / human` 必須、`depends_on` / `files` 必須
- L-0〜V-4・PR 作成は workflow-conductor が自動制御するため含めない
- 各タスクに `rollback:` を記載(戻し手順)。**必須=high-risk / critical の実装タスク**。standard 以下は任意、検証/読取のみは `rollback:不要` と明記可
- rollback 手順が長い場合はタスク直下に補助ブロックで記述してよい
### test-cases.md 規約
- 各 AC → テストケースのマッピング必須、Edge case を含める
- **各ケースの期待値に出所を明記する**(`デザイン実測` / `規約` / `既存実装`)
- 出所が `規約` の期待値は、`## Convention Evidence` に **規約の記述 / 実値 / 一致 / 判定** を残す(#934)。
事前メトリクス検証が「全部 / 全件」系に実数を要求するのと同じ理由で、**規約由来の期待値には実値との突合を要求する**
- **不一致(規約 ≠ 実値)のときは AC に採用しない**。安全側に倒して plan の 🚩 人間確認ポイントへ落とし、
規約と実装のどちらを正とするかは人間の設計判断に委ねる(`mode-classification.md` の安全側不変条件と一貫)。
AI が黙って片側へ寄せて一括変更しない
### 監査
- decision-log.jsonl に B-1/B-2/B-3 の主要判断を append-only で記録
- mode が `critical` で `lite_eligible=true` の場合は人間の C-3 明示承認記録が前提(`mode-classification.md` AC-11)
## 計画の構造化観点(river-review rr-upstream-create-plan-001 由来 / #517 受け入れ)
plan.md 生成時、以下の観点を Work Breakdown / Risks に反映する:
1. **仮説と確定事項の分離** — 判断に必要な事実が欠けていれば Questions / Unknowns に
質問として先出しし、仮説(未確認の前提)と確定事項を混ぜない。情報不足のまま
推測で進めない
2. **リスクの 3 点セット** — Risks には `内容 / 検証手段 / Fallback` を揃える。
不確実性(互換性・性能・移行・セキュリティ)ごとに検証方法が無いリスクを残さない
3. **人間ゲートの明示** — 設計確認・仕様確認など人間レビューが必要なブレーキ
ポイントを Work Breakdown の 🚩 チェックポイントとして明示する(自己設置 Gate は
勝手に解除しない — responsibility-classes.md 準拠)
4. **速く学べる順** — ステップは検証が早く回る順に並べ、クリティカルパスを明示。
並列可能な作業はまとめて示す
> 出典: river-review `rr-upstream-create-plan-001`(skill インベントリ監査で
> 「plan を作る側 = PlanGate の責務」と整理され移管。s977043/river-review#1105)
## CLI 呼び出し
> **前提(Human 決定 #1144)**: plugin / `install.sh --claude` / Codex が導入先へ配るのは
> **読み物層(`skills` / `rules` / `agents` / `commands`)だけ**であり、**CLI(PlanGate CLI 本体)も
> enforcement 層(`scripts/hooks/`)も配布物に含まれない**。したがって下表の「上流リポジトリの cwd」
> 列にしか成立しない手順は、導入先では **上流リポジトリ(`s977043/plangate`)の clone が無いかぎり
> 実行できない**。そこへ到達したら「CLI が無いため実行できない/上流リポジトリの clone が必要」と
> **明示して停止する**か、同表の代替手順へ置き換える。**CLI が無いことを理由に手順を黙って省略し、
> 実施済みと読める記録を残してはならない。**
**呼び出し表記は実行環境で変わる**。相対パス形式(`./scripts/...` / `bin/...`)が成立するのは
**上流リポジトリ(`s977043/plangate`)を clone した cwd に居るときだけ**で、導入先には `bin/` も
`scripts/` も配置されない(次節参照)。導入先で PATH を通した場合のコマンド名は
**`plangate`**(`bin/plangate` ではない)。変わるのは**コマンド表記だけでなく
`TASK-XXXX` の解決先**でもある(表の下の注意)。どちらの環境かを確定してから使う。
| 実行環境 | plan 生成 | plan_hash 機械検証 |
|---------|----------|-------------------|
| 上流リポジトリの cwd | `./scripts/ai-dev-workflow TASK-XXXX plan` | `bin/plangate validate TASK-XXXX` |
| 導入先 + PATH に `plangate` あり | `plangate plan TASK-XXXX` は**実在するが出力先が CLI 側**(下記注意)→ 導入先の TASK には使えず手動生成 | `plangate validate --dir <導入先の TASK ディレクトリ>` |
| 導入先 + PATH に無い(**既定**) | 手動生成 | 次節のフォールバック(sha256 突合) |
> **注意: `TASK-XXXX` 位置引数は cwd ではなく CLI 本体の位置を基準に解決される。**
> `bin/plangate` は自身のパスから `plangate_root`(= `bin/` の親)を求め、
> `scripts/ai-dev-workflow` も同じ規則で repo root を求めたうえで、
> どちらも `<CLI の repo root>/docs/working/TASK-XXXX` を読み書きする。
> `bin/` は導入先に配置されない(次節)ため、PATH 上の `plangate` は必ず
> **別の場所にある上流 clone** の実体を指す。つまり導入先のプロジェクトで
> `plangate plan TASK-XXXX` / `plangate validate TASK-XXXX` を実行しても、
> 対象は導入先の `docs/working/` ではなく **その clone 側の `docs/working/`** になる。
> 導入先の TASK を検査したいときは、cwd 非依存でパスを明示できる
> `validate --dir <パス>` を使う(`plan` 側に相当オプションは無いため手動生成)。
### CLI 不在時のフォールバック(導入先では既定)
`scripts/ai-dev-workflow` と `bin/plangate` は **3 経路のいずれでも導入先に
配置されない**。根拠は経路ごとに異なる:
- `install.sh --claude` 経由: コピー対象が `agents` / `skills` / `commands` / `rules` の
4 ディレクトリに限られ、`bin/` も `scripts/` も対象外
- plugin(Claude marketplace)経由: `${CLAUDE_PLUGIN_ROOT}/scripts/` は存在するが中身は
`install-plangate-skills.sh` のみ。`bin/` はバンドルに無い
- Codex 経由: 配置されるのは skills のみ
上表の「導入先 + PATH に無い(既定)」に該当する場合は次に従う:
1. **手動生成に切り替える** — 「Output」の 5 ファイルを skill の手順どおり手で作る。
B-1 →(事前メトリクス検証)→ B-2 → B-3 の順序と出力契約は **CLI の有無に関わらず不変**
2. **`plan_hash` 整合検証は標準コマンドで代替する(スキップしない)** — `plangate validate`
の plan_hash 検査は **`plan.md` の素の sha256**(正規化・前処理なし)と `c3.json` の
`plan_hash` から `sha256:` prefix を除いた値の単純比較なので、CLI 無しで再現できる:
```sh
# 算出(sha256sum が無い環境では shasum -a 256 を使う)
sha256sum docs/working/TASK-XXXX/plan.md | awk '{print $1}'
# 突合先: docs/working/TASK-XXXX/approvals/c3.json の "plan_hash": "sha256:<この値>"
```
**不一致なら C-3 承認後に plan が改変されている** → exec に進まず、再承認
(`c3.json` の `plan_hash` 更新)または plan の revert を行う。
`sha256sum` / `shasum` の**両方とも無い場合に限り**スキップし、その事実を
`decision-log.jsonl` と plan.md に記録して **「機械検証済み」と書かない**
(未検証を検証済みと誤記しない)
3. **ゲートは人手で維持する** — plan_hash を照合する hook も導入先には配線されないため、
item 2 の突合は **exec 開始前に自分で実行する**。C-3 は人間の明示承認記録
(`docs/working/TASK-XXXX/approvals/c3.json` 相当)で成立させ、CLI が無いことを理由に
C-3 を省略しない
4. CLI による機械検証が必要なら、上流リポジトリ(`s977043/plangate`)を clone して
`bin/plangate validate --dir <導入先の TASK ディレクトリの絶対パス>` を実行する。
**位置引数形式(`validate TASK-XXXX`)は使わない** — 上表の注意のとおり clone 側の
`docs/working/TASK-XXXX` を見に行ってしまい、導入先の TASK は検査されない
## 次フェーズへ
plan 完了後は `plan-review-gate` skill で C-1 → C-2 → C-3(c3.json APPROVED)。exec は `ai-dev-exec` skill。
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!