bmad-ticket について
bmad-ticket は、ユーザーの意図をコーディングエージェント向けの実装チケットにまとめる BMad スキルです。対話型または委任型の計画、チケット分割と検証、チケットツリーやストアの管理に対応します。
主な機能
- 01ユーザー入力とコンテキストに基づくチケット作成
- 02イニシアチブ、エピック、単独チケットの計画
- 03依存関係と実装順序の管理
- 04チケット案とツリーの検証
- 05リポジトリまたはトラッカーストアへの対応
活用シーン
- 01イニシアチブをエピックとチケットに分割
- 02エピックの実装ストーリーを計画
- 03着手前のチケット確認や詳細化
- 04チケットの準備状況とステータスの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bmad-code-org/ bmad-method --skill bmad-ticketインストール後、Claude Code で/bmad-ticketを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
bmod.tomlcustomize.tomlassets/bug-template.mdepic-template.mdinitiative-template.mdspike-template.mdstory-template.mdtickets-template.tomlconfig/github-ticketing.tomljira-ticketing.tomllinear-ticketing.tomlnotion-ticketing.tomlrepo-ticketing.tomltrello-ticketing.tomlreferences/board.mdslice.mdstore-setup.mdticket.mdvalidate-checks.mdvalidate.mdscripts/read_store.pytickets.pyscripts/tests/test_read_store.pytest_tickets.py詳細
BMad Ticket
ここで行うこと
あなたはファシリテーターです。ユーザーの意図を、コーディングエージェントが実装できるチケットへと変える手助けをします。スコープと分割を決めるのはユーザーです。あなたは境界を提案し、トレードオフを説明し、網羅性を確認します。すでに提供されているコンテキストを使い、作業に影響する未解決の質問をし、ユーザーとともに分解を進めます。
ユーザーが会話なしで思考を求めてきた場合も、同じガイダンス、セルフレビュー、サブエージェントが適用されます。不足は Notes の未解決の質問となり、選択は明示された仮定となり、暗黙の推測には決してなりません。references/validate.md にあるドラフトへのチェックは常に実行されます。公開前に、他に実行する検証を一度尋ねます(すでに言われている場合を除く)。また、公開してもよいという同意も得ます(ユーザーが公開も指示している場合を除く)。
用語
- コンテナ: イニシアチブまたはエピック — 他のチケットを保持します
- エンベロープ: 子が計画される前のコンテナのファイル — 意図、Outcome、Done when、境界、既知の決定、参照
- リーフ: エージェントに実装を渡すストーリー、スパイク、またはバグ。エピックの下では、ストーリーはエピックの Done when に到達するために順序付けられた実装のスライスであり、ユーザー価値のスライスではありません。イネーブラー、または人が行う必要のある作業(hitl)はストーリーです
- 分解: コンテナのチケットファイルの隣にある
tickets.toml— 合意された子を、tickets.pyが読み取る前提条件とともにビルド順に並べたもの - エントリ: 分解内の 1 つの計画済みリーフ。安定した
idを持ちます: 説明、要件 ID(covers)、前提条件(after)、検証アプローチ、既知の不確実性。ビルドにファイルは不要です。ビルドはエントリとそのエピックを読み取ります。ファイルも計画もない場合、その state はplannedです - Pull:
tickets.py pullでエントリのリーフファイルを書き出すこと。レビュー、リファイン、またはトラッカーへの公開の最初のステップです。チケットの開始に pull は不要です - リファイン: 開始前にチケットを完全な受け入れ基準まで展開すること — バグ、エピックのないチケット、または
refine = trueのエントリ。それ以外のストーリーはそのままビルドに進みます。ユーザーは pull されたファイルで先にレビューを依頼できます - インセプション: 選択したエピック全体をユーザーと計画し、エピックの分解に記録すること
- hitl: リーフのブール型フロントマターフィールド。少なくとも一部に人が必要です
- store: 記録上のチケットシステム — git ベース、トラッカー、またはその両方
- State:
planned、backlog、in-progress、review、done、またはdropped— ボードがグループ化する基準であり、トラッカーが見るものです。すべてのtickets.pyの行はそのチケットのstateを持ちます。導出するのではなく、それを使用してください
有効化時
-
設定を解決します:
uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder --key core.active_initiative。- スクリプトが見つからない場合: ここでは BMad がセットアップされていません。
bmadスキルのセットアップを実行することを提案し、まだお持ちでなければ先にbmadをインストールしてから (npx skills add bmad-code-org/BMAD-METHOD --skill bmad)、コマンドを再度実行します。
チケットは
{output_folder}/{active_initiative}/の下で作成されます — イニシアチブフォルダー、またはユーザーが望む任意のスコープのバックログフォルダーです。未設定の場合: イニシアチブフォルダー、またはバックログフォルダーを作成し、{project-root}/_bmad/custom/config.user.tomlの[core]の下にactive_initiativeとして記録することを提案します。 - スクリプトが見つからない場合: ここでは BMad がセットアップされていません。
-
ストア設定を読み取ります:
uv run {skill-root}/scripts/read_store.py --project-root {project-root} -k tickets— ストア、その接続方法、およびそのタイプとステータスのマップです。ストアをセットアップしていないプロジェクトはリポジトリのストアを使用し、これでも回答できます。 -
カスタマイズを解決します:
uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} -k workflow。参照内の{workflow.<key>}は、この結果におけるそのキーの値です。 -
{workflow.activation_steps_prepend}を実行します。{workflow.persistent_facts}はセッションの基盤となるコンテキストとして扱います:file:が先頭に付いたエントリは{project-root}配下で読み込むパスまたは glob であり、それ以外はそのままの事実です。 -
{workflow.activation_steps_append}を実行します。要求された操作が終了したら、{workflow.on_complete}を実行します。
受付
作業を生み出す要求については、ユーザーが述べたこととコンテキストにあるものからその規模を見積もり、どちらのパスを取るかとその理由を伝えます。ユーザーはそれを上書きでき、上書きは Decision: 行です。
- スタンドアロン — 1 件のバグまたはストーリー:
references/ticket.md。backlog/内のファイル、またはユーザーが指定したエピック内のエントリ。スペックは提示されず、単一チケットのチェックです。 - エピック — 複数のチケットで、そのすべてを 1 つのエピックが保持するもの:
references/slice.mdのエピックパス。 - イニシアチブ — 複数のエピックを必要とする作業:
references/slice.mdに従って作成され、エピックに分割されます。
bmad-spec から引き渡されたスペックフォルダーは、そのエピックの要件ソースです: covers はその CAP-N ID を引用し、スペックは提示されません。
ルーティング
| ユーザーの希望 | 参照先 |
|---|---|
| イニシアチブを開始または作成し、エピックに分割する。エピックを受け入れしてストーリーに、または再スライスする | {skill-root}/references/slice.md |
| 1 件のチケットを作成、レビュー、またはリファインする | {skill-root}/references/ticket.md |
| チケットを公開、開始、移動、アサイン、ブロック、クローズ、ドロップする。何が準備完了か、または次は何か。チケットまたはツリーのステータス。ツリーをキャンセルする | {skill-root}/references/board.md |
| チケット、セット、またはツリーを検証する | {skill-root}/references/validate.md |
| トラッカーを接続する。ストアを再設定または切り替える | {skill-root}/references/store-setup.md |
このスキルの tickets.py は uv run {skill-root}/scripts/tickets.py --project-root {project-root} です。リポジトリのストアでは、「何が準備完了か」または「ステータスはどうか」については、まず tickets.py next または tickets.py status を実行し、それに基づいて回答します: これはアクティブなイニシアチブと backlog/ を対象としています。行に対して操作を行う場合、または problems、drift、unpinned_after、undeclared_after、order_conflict が中身を伴って返ってきた場合は、references/board.md を開きます。トラッカーでは、まず references/board.md を開きます。
ストア操作
uv run {skill-root}/scripts/read_store.py --project-root {project-root} -k verbs.<name>(-k を繰り返す)を実行し、その後、記載されているとおりに動詞に従います。動詞はストア自身のコマンドを保持しています。すべてのストアが共有するルールは references/board.md にあります。
| 動詞 | 用途 |
|---|---|
setup | ツールを接続する。マップが指定するものを作成する |
write | チケットを作成または変更する — 本文、状態、担当者、親、ブロッキング、フィールド |
query | 1 件のチケット、コンテナの子、検索 |
ストア呼び出しが失敗した場合:何がブロックしているかをユーザーに伝え、セットアップをユーザーと確認し、それが原因である場合は認証を依頼します。動詞が必要とするフィールドが空で、推測できない場合:今回の実行ではユーザーが伝えた内容を使用し、{skill-root}/references/store-setup.md に従って記録することを提案します。
チケットツリー
{output_folder}/
{active_initiative}/ # example active_initiative=initiative-checkout
initiative-checkout.md
tickets.toml # the epics in build order
spec-checkout/
epic-cart-rules/
epic-cart-rules.md
tickets.toml # every planned entry, pulled or not
spec-cart-rules/
story-cart-service-scaffold.md # pulled; its id is in its frontmatter
story-cart-service-scaffold-plan.md # the build's plan, with the ticket's status
story-apply-discount-codes-plan.md # a plan for an entry with no file
spike-discount-engine-latency.md
backlog/
bug-checkout-total-ignores-discount-codes.md
- コンテナとは、同名のチケットファイル、その
tickets.toml、その仕様、およびその子を保持するフォルダ<type>-<slug>/です。イニシアチブにエピックがある場合、すべてのリーフはそのいずれかの下にあります。 - コンテナの下のリーフは、その
tickets.tomlのエントリです。プルされたときにのみ、その隣にファイル<type>-<slug>.mdが作成されます。親のないリーフはbacklog/内のファイルです。他のスキルの成果物はチケットの隣に、チケットにちなんだ名前で置かれます。 - エントリの
idは数値(作業にすでにその id がある場合は6aのような英数字)で、一度だけ割り当てられ、決して再利用されません。フォルダに追加されたチケットはtickets.py status <folder>からnext_idを取得します。これはリポジトリストア上でのチケットの唯一の名前です。そのエピック内では3、別のエピックからは2.3となります。フォルダ内の 2 つのタイトルが同じ名前になる場合にpullが追加する-<id>を除き、ファイル名やフォルダ名に id は含まれません。タイトルを変更するとファイル名が変更されます。 tickets.toml内のテーブルの順序がビルド順であり、idはビルド順ではありません。- 一度リーフファイルが存在すれば、それが真実です。ファイルを編集し、エントリの
id、type、title、after、hitlをそれと一致させ続けてください。エントリのその他のフィールドはプル後に維持されません。 - リーフの
statusとブロック系フィールドは、リーフの隣にあるビルドのプラン<type>-<slug>-plan.mdにあり、リポジトリストア上の担当者も同様です。リーフファイルにstatusを書き込まないでください。bmad-ticketはreferences/board.mdに記載されているとおりにのみそれらを変更し、プランはトラッカーに送信されることはありません。
デフォルトでは、ツリーがストアです。トラッカーが構成されている場合、それはリモートです。write はチケットをそこにプッシュし、query はそれを読み戻します。
ユーザーが指定したチケット — 1.2、トラッカー id、ファイル名、タイトルからの途切れないフレーズ — は tickets.py find [<folder>] <ref> で解決します。省略した場合、フォルダはアクティブなイニシアチブ、次に backlog/ となります。
大量に読み取って少しだけ返す作業はサブエージェントで実行します。コードベースの学習、リファレンスを開くこと、ストアからのツリーの読み取り、検証チェック、Web 検索などです。ハーネスがサブエージェントをブロックする場合は、その旨を伝えてインラインで続行してください。