mcpField
B
bmad-handoff

bmad-handoff

github.com/aj-geddes開発49388 回インストール19 週間前に更新
リポジトリ

bmad-handoff について

bmad-handoffはBMAD Planning & Orchestratorプラグインのスキルで、ready-for-devのストーリーファイルをバージョン付きJSON引き継ぎマニフェストにまとめます。特定のランナーに依存せず、計画工程から外部の開発ツールへ情報を渡す用途に向いています。

主な機能

  1. 01出力フォルダー内のストーリーファイルを検索
  2. 02ready-for-devのストーリーだけを対象化
  3. 03フィールドを抽出してJSONマニフェストを生成
  4. 04依存ウェーブを計算して並べ替え
  5. 05必須セクションの不足を報告

活用シーン

  1. 01完了したストーリーを外部開発ツールへ渡す
  2. 02ストーリー更新後にマニフェストを再生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aj-geddes/claude-code-bmad-skills --skill bmad-handoff

インストール後、Claude Code で/bmad-handoffを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

REFERENCE.md
templates/
handoff-manifest.schema.json
handoff-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"
storyNumber2番目のセグメント。例:"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 を参照してください。

フィールド型必須備考
schemaVersionstringはいSemver 文字列。現在の値 = "1.0"
generatedAtstringはいISO-8601 UTC タイムスタンプ
projectNamestringはいproject-context.md またはユーザー入力から取得
outputFolderstringはいストーリーの検索に使用する相対パス
storiesarrayはい開発準備完了のストーリーごとに 1 つのオブジェクト
stories[].idstringはいストーリーの一意の識別子
stories[].storyFilePathstringはい.story.md ファイルへの相対パス
stories[].statusstringはいこのマニフェストでは常に "ready-for-dev"
stories[].epicstringはいエピックの識別子
stories[].storyNumberstringはいエピック内のストーリー番号
stories[].titlestringはい人が読めるストーリーのタイトル
stories[].ownedScopearrayはいこのストーリーで変更できるファイル/モジュールのパス
stories[].waveintegerはい実行ウェーブ(1 = 依存関係なし)
stories[].parallelSetstring|nullいいえ明示的にグループ化されている場合のラベル
stories[].dependenciesarrayはい先に完了する必要があるストーリー ID
stories[].acceptanceCriteriaSummaryarrayはい最初の 3 つの AC 項目。各項目は 120 文字以下
stories[].lockedSectionsNotestringはい開発ツールへの指示
stories[].devAgentRecordnullはい開発ツールが入力。出力時は常に 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 はそれらを結合し、ウェーブを計算して並べ替え、マニフェストを書き込みます。

主なガイドライン

  1. フィールドの値を決して捏造しないでください。ストーリーファイルにフィールドがない場合は null を出力し、サマリーに警告を追加してください。
  2. ストーリーファイルを変更しないでください。このスキルはストーリーの内容に対して読み取り専用です。
  3. ownedScope は並列処理時の競合を防ぐうえで重要です。決してまとめたり要約したりしないでください。
  4. このマニフェストは、バージョン管理された安定したインターフェースです。フィールドを追加または削除する前に(今回の実行内ではなく、別のスキーマ改訂として)schemaVersion をインクリメントしてください。
  5. ready-for-dev ステータス以外の条件でストーリーを除外しないでください。依存関係の解決は開発ツールの役割です。
  6. ユーザーがマニフェストの「再実行」または「更新」を依頼した場合は、既存のファイルを上書きしてください。


BMAD Code Organization による BMAD Method 用の Claude Code ハーネスである BMAD Planning & Orchestrator プラグインの一部です(https://github.com/bmad-code-org/BMAD-METHOD)。`bmad-handoff` の理念を実装しています。手法に関するクレジットはすべて BMAD Code Organization に帰属します。

コメント