bmad-handoff について
bmad-handoffはBMAD Planning & Orchestratorプラグインのスキルで、ready-for-devのストーリーファイルをバージョン付きJSON引き継ぎマニフェストにまとめます。特定のランナーに依存せず、計画工程から外部の開発ツールへ情報を渡す用途に向いています。
主な機能
- 01出力フォルダー内のストーリーファイルを検索
- 02ready-for-devのストーリーだけを対象化
- 03フィールドを抽出してJSONマニフェストを生成
- 04依存ウェーブを計算して並べ替え
- 05必須セクションの不足を報告
活用シーン
- 01完了したストーリーを外部開発ツールへ渡す
- 02ストーリー更新後にマニフェストを再生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aj-geddes/ claude-code-bmad-skills --skill bmad-handoffインストール後、Claude Code で/bmad-handoffを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
REFERENCE.mdtemplates/handoff-manifest.schema.jsonhandoff-manifest.template.json詳細
BMAD Handoff
目的: 計画出力フォルダー内でステータスが ready-for-dev のすべてのストーリーをスキャンし、単一の handoff-manifest.json にまとめ、特定のランナーに依存させることなく、後続の任意の開発ツールが読み取れる場所に配置します。
これは、計画プラグインが生成する最後の成果物です。この後の処理はこのスキルではなく、外部の開発ツールが担います。
実行するタイミング
ストーリー作成フェーズが完了し、少なくとも1つのストーリーに ready-for-dev ステータスが付いていることをあなた(またはユーザー)が確認した後に、このスキルを実行してください。マニフェストは特定時点のスナップショットです。更新するには、スキルを再実行してください。
ワークフロー
TodoWrite を使って、以下の手順の進捗を管理してください。
1. 出力フォルダーを特定する
bmad-output/project-context.md(デフォルトの出力フォルダー)を探すか、ユーザーに出力フォルダーを尋ねてください。デフォルト:bmad-output/。
2. ストーリーファイルを検出する
出力フォルダー内で **/{epic}.{story}.*.story.md を Glob で検索してください。
何も見つからない場合は、代替のフラット構成(stories/*.story.md)を受け入れてください。
3. ready-for-dev に絞り込む
各ストーリーファイルの **Status:** ヘッダーフィールド(ストーリーヘッダーブロック内。## Status 見出しではありません)を読み取ってください。ステータス値が厳密に ready-for-dev のストーリーのみを含めてください。
見つからない場合は、確認されたステータスを報告して終了してください。空のマニフェストは生成しないでください。
4. ストーリーごとのフィールドを抽出する
条件に該当する各ストーリーファイルから、以下を抽出してください。
| フィールド | ストーリーファイル内のソース |
|---|---|
id | ファイル名の拡張子を除いた部分、または ## Story 見出しの ID |
storyFilePath | プロジェクトルートからの相対パス |
status | **Status:** ヘッダーフィールドの値 |
epic | ファイル名の最初のセグメント。例:2.1.stripe.story.md の "2" |
storyNumber | 2番目のセグメント。例:"1" |
title | 最初の H1 または ## Story 見出しのテキスト |
ownedScope | ## Owned File/Module Scope — すべてのパスをそのまま列挙 |
wave | ## Dependency Maps → wave/parallel_set アノテーション(整数または null) |
parallelSet | 同じセクション — parallel set ラベルがある場合(文字列または null) |
dependencies | ## Dependency Maps → blocked-by のストーリー ID(配列。空の場合もあります) |
acceptanceCriteriaSummary | ## Acceptance Criteria の最初の3項目。それぞれ120文字以下 |
lockedSectionsNote | 固定文字列 — スキーマを参照 |
devAgentRecord | 固定値の null — 開発ツールが入力するためのプレースホルダー |
5. wave の順序を計算する
ストーリーに明示的な wave アノテーションがない場合:
dependencies配列が空のストーリーは wave 1 です。- すべての依存先が wave N 以下にあるストーリーは、wave N+1 です。
- 算出した
wave値を追加してください。アノテーションがない場合、parallelSetは null のままにしてください。
6. マニフェストを書き込む
{outputFolder}/handoff-manifest.json に書き込んでください。
構造上の契約として、
${CLAUDE_PLUGIN_ROOT}/skills/bmad-handoff/templates/handoff-manifest.schema.json
のスキーマを使用してください。schemaVersion: "1.0" を設定してください。
ストーリーは wave の昇順で並べ、各 wave 内では id の昇順で並べてください。
7. ユーザーに報告する
簡潔な概要を出力してください。
Handoff manifest written → bmad-output/handoff-manifest.json
schemaVersion : 1.0
stories : <N> ready-for-dev
waves : <W> (wave 1 has <X> stories, can start immediately)
output path : bmad-output/handoff-manifest.json
必須セクションが欠けているストーリー(例:## Owned File/Module Scope がないもの)があれば、警告として列挙してください。黙って省略したり、データを捏造したりしないでください。
マニフェストのフィールド定義(クイックリファレンス)
スキーマの詳しい説明とアダプターに関する注意事項については、REFERENCE.md を参照してください。
| フィールド | 型 | 必須 | 備考 |
|---|---|---|---|
schemaVersion | string | はい | Semver 文字列。現在の値 = "1.0" |
generatedAt | string | はい | ISO-8601 UTC タイムスタンプ |
projectName | string | はい | project-context.md またはユーザー入力から取得 |
outputFolder | string | はい | ストーリーの検索に使用する相対パス |
stories | array | はい | 開発準備完了のストーリーごとに 1 つのオブジェクト |
stories[].id | string | はい | ストーリーの一意の識別子 |
stories[].storyFilePath | string | はい | .story.md ファイルへの相対パス |
stories[].status | string | はい | このマニフェストでは常に "ready-for-dev" |
stories[].epic | string | はい | エピックの識別子 |
stories[].storyNumber | string | はい | エピック内のストーリー番号 |
stories[].title | string | はい | 人が読めるストーリーのタイトル |
stories[].ownedScope | array | はい | このストーリーで変更できるファイル/モジュールのパス |
stories[].wave | integer | はい | 実行ウェーブ(1 = 依存関係なし) |
stories[].parallelSet | string|null | いいえ | 明示的にグループ化されている場合のラベル |
stories[].dependencies | array | はい | 先に完了する必要があるストーリー ID |
stories[].acceptanceCriteriaSummary | array | はい | 最初の 3 つの AC 項目。各項目は 120 文字以下 |
stories[].lockedSectionsNote | string | はい | 開発ツールへの指示 |
stories[].devAgentRecord | null | はい | 開発ツールが入力。出力時は常に null |
lockedSectionsNote は常に次の文字列です。
"Sections Acceptance Criteria, Dev Notes, and Testing are LOCKED. External dev tools must not edit them. Populate only the Dev Agent Record section."
サブエージェント戦略
小規模なバックログ(ストーリー数 15 以下)では、このスキルはシングルスレッドで実行されます。抽出ループが高速で、1 回のセッション内にコンテキストが収まるためです。
大規模なバックログ(ストーリー数 16 以上)では、ストーリーの抽出を並列に分散します。
| エージェント | タスク |
|---|---|
| Agent 1…N | 割り当てられた範囲のストーリーファイルを読み、フィールドを抽出して、JSON フラグメントを返します |
| Coordinator | フラグメントを結合し、ウェーブ順を計算して、マニフェストを書き込みます |
各エージェントには、担当範囲のファイルパスの一覧と、上記のフィールド抽出テーブルが渡されます。エージェントは、ストーリーオブジェクトの JSON 配列を返します(wave フィールドはまだ含めません)。 Coordinator はそれらを結合し、ウェーブを計算して並べ替え、マニフェストを書き込みます。
主なガイドライン
- フィールドの値を決して捏造しないでください。ストーリーファイルにフィールドがない場合は
nullを出力し、サマリーに警告を追加してください。 - ストーリーファイルを変更しないでください。このスキルはストーリーの内容に対して読み取り専用です。
ownedScopeは並列処理時の競合を防ぐうえで重要です。決してまとめたり要約したりしないでください。- このマニフェストは、バージョン管理された安定したインターフェースです。フィールドを追加または削除する前に(今回の実行内ではなく、別のスキーマ改訂として)
schemaVersionをインクリメントしてください。 ready-for-devステータス以外の条件でストーリーを除外しないでください。依存関係の解決は開発ツールの役割です。- ユーザーがマニフェストの「再実行」または「更新」を依頼した場合は、既存のファイルを上書きしてください。
BMAD Code Organization による BMAD Method 用の Claude Code ハーネスである BMAD Planning & Orchestrator プラグインの一部です(https://github.com/bmad-code-org/BMAD-METHOD)。`bmad-handoff` の理念を実装しています。手法に関するクレジットはすべて BMAD Code Organization に帰属します。