
bmad-ticket
Create and manage tickets — initiatives, epics, stories, bugs. Use when the user says "create a new initiative", "slice this initiative", "split this epic up", "break this into stories", "incept this epic", "make a ticket", "refine this ticket", "what's ready", "status of a story", "publish ticket changes", "validate these tickets", "set up the ticket store".
- Installs
- 6.4K
- Last 24h
- —
- Trending rank
- —
- Security
- Warn
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/bmad-code-org/bmad-method --skill bmad-ticket- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads bmad-ticket automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
Security audits
Independent scans of the skill's instructions and bundled files.
SKILL.md
The instructions your agent reads when the skill is triggered.
BMad Ticket
What you are here to do
You are the facilitator: help the user turn their intent into tickets a coding agent can build from. The user decides the scope and split; you propose boundaries, explain tradeoffs, and check coverage. Use the context already supplied, ask unresolved questions that affect the work, and develop the breakdown with them.
When the user asks you to do the thinking without the conversation, the same guidance, self-review, and subagents apply. Gaps become open questions in Notes and choices become marked assumptions, never silent guesses. The check on a draft in references/validate.md always runs. Before publish, ask once which other validations to run unless already said, and still get a yes to publish unless they said to publish too.
Terms
- Container: an initiative or an epic — holds other tickets
- Envelope: a container's file before its children are planned — intent, Outcome, Done when, boundaries, known decisions, references
- Leaf: a story, spike, or bug handed to an agent to implement. Under an epic a story is an implementation slice sequenced to reach the epic's Done when, not a user-value slice; an enabler, or work a person must do (hitl), is a story
- Breakdown:
tickets.tomlbeside a container's ticket file — its agreed children, in build order, with the prerequisitestickets.pyreads - Entry: one planned leaf in a breakdown, with a stable
id: description, requirement ids (covers), prerequisites (after), verification approach, and known uncertainty. It needs no file to be built: the build reads the entry and its epic. With no file and no plan its state isplanned - Pull: write an entry's leaf file with
tickets.py pull, the first step of reviewing it, refining it, or publishing it to a tracker. Starting a ticket needs no pull - Refine: expand a ticket to full acceptance criteria before it starts — a bug, a ticket with no epic, or an entry with
refine = true. Any other story goes to the build as it is; the user can ask to review one first in its pulled file - Inception: plan the whole selected epic with the user and record it in the epic's breakdown
- hitl: boolean frontmatter field on a leaf; at least part needs a person
- store: the ticketing system of record — git-backed, a tracker, or both
- State:
planned,backlog,in-progress,review,done, ordropped— what the board groups by and what a tracker sees. Everytickets.pyrow carries its ticket'sstate; use it rather than deriving it
On activation
-
Resolve config:
uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder --key core.active_initiative.- Script not found: BMad is not set up here. Offer to run the
bmadskill's setup, installingbmadfirst if you do not have it (npx skills add bmad-code-org/BMAD-METHOD --skill bmad), then run the command again.
Tickets are drafted under
{output_folder}/{active_initiative}/— an initiative folder, or a backlog folder scoped however the user wants. Unset: offer to create the initiative folder, or a backlog folder, and record it asactive_initiativeunder[core]in{project-root}/_bmad/custom/config.user.toml. - Script not found: BMad is not set up here. Offer to run the
-
Read the store config:
uv run {skill-root}/scripts/read_store.py --project-root {project-root} -k tickets— the store, how to reach it, and its type and status maps. A project that has set up no store uses the repo store, and this still answers. -
Resolve the customization:
uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} -k workflow. A{workflow.<key>}in a reference is that key's value in this result. -
Run
{workflow.activation_steps_prepend}. Treat{workflow.persistent_facts}as foundational context for the session: entries prefixedfile:are paths or globs under{project-root}to load, the rest are facts verbatim. -
Run
{workflow.activation_steps_append}. When the requested operation ends, run{workflow.on_complete}.
Intake
For a request that creates work, size it from what the user said and what is in context, and say which path you are taking and why; the user overrides, and an override is a Decision: line.
- Standalone — one bug or story:
references/ticket.md; a file inbacklog/, or an entry in the epic the user names; no spec offered, the single-ticket check. - Epic — more than one ticket, all of which one epic holds: the epic path in
references/slice.md. - Initiative — work that needs more than one epic: authored and split into epics per
references/slice.md.
A spec folder handed over by bmad-spec is the epic's requirement source: covers cites its CAP-N ids and no spec is offered.
Routing
| The user wants | Read |
|---|---|
| an initiative started or authored, split into epics; an epic incepted into stories or re-sliced | {skill-root}/references/slice.md |
| one ticket written, reviewed, or refined | {skill-root}/references/ticket.md |
| tickets published, started, moved, assigned, blocked, closed, dropped; what is ready or next; status of a ticket or tree; a tree cancelled | {skill-root}/references/board.md |
| a ticket, a set, or a tree validated | {skill-root}/references/validate.md |
| a tracker connected; the store reconfigured or switched | {skill-root}/references/store-setup.md |
tickets.py in this skill is uv run {skill-root}/scripts/tickets.py --project-root {project-root}. On the repo store, for "what is ready" or "what is the status", run tickets.py next or tickets.py status first and answer from it: it covers the active initiative and backlog/. Open references/board.md to act on a row, or when problems, drift, unpinned_after, undeclared_after, or order_conflict comes back with something in it. On a tracker, open references/board.md first.
Store operations
uv run {skill-root}/scripts/read_store.py --project-root {project-root} -k verbs.<name> (repeat -k), then follow the verb as written. A verb holds the store's own commands; the rules every store shares are in references/board.md.
| Verb | For |
|---|---|
setup | connect the tool; create what the maps name |
write | create or change a ticket — body, state, assignee, parent, blocking, fields |
query | one ticket, a container's children, a search |
A store call that fails: tell the user what is blocking, confirm the setup with them, and ask them to authenticate when that is the cause. A field a verb needs that is empty and cannot be inferred: use what the user tells you for this run and offer to record it per {skill-root}/references/store-setup.md.
The ticket tree
{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
- A container is a folder
<type>-<slug>/holding its same-named ticket file, itstickets.toml, its spec, and its children. When an initiative has epics, every leaf is under one. - A leaf under a container is an entry in that
tickets.toml; it gets a file<type>-<slug>.mdbeside it only when pulled. A leaf with no parent is a file inbacklog/. Other skills' artifacts sit beside the ticket, named after it. - An entry's
idis a number (or letters and digits, such as6a, when the work already has that id), assigned once and never reused; a ticket added to a folder takesnext_idfromtickets.py status <folder>. It is the ticket's only name on the repo store:3inside its epic,2.3from another epic. No file or folder name carries an id, except the-<id>thatpulladds when two titles in a folder give the same name; a title change renames the file. - The order of tables in
tickets.tomlis the build order;idis not. - Once a leaf file exists it is truth: edit the file, and keep the entry's
id,type,title,after, andhitlequal to it. The entry's other fields are not maintained after pull. - A leaf's
statusand blocked fields live in the build's plan,<type>-<slug>-plan.mdbeside the leaf, and so does its assignee on the repo store; write nostatusinto a leaf file.bmad-ticketchanges them only asreferences/board.mdsays, and the plan is never sent to a tracker.
By default the tree is the store. A tracker, when configured, is a remote: write pushes a ticket to it and query reads it back.
Resolve a ticket the user names — 1.2, a tracker id, a file name, an unbroken phrase from its title — with tickets.py find [<folder>] <ref>; left out, the folder is the active initiative, then backlog/.
Work that reads a lot and returns a little runs in a subagent: learning the codebase, opening references, reading a tree from the store, a validation check, web searches. If the harness blocks subagents, say so and continue inline.
FAQ
What does the bmad-ticket skill do?
Create and manage tickets — initiatives, epics, stories, bugs. Use when the user says "create a new initiative", "slice this initiative", "split this epic up", "break this into stories", "incept this epic", "make a ticket", "refine this ticket", "what's ready", "status of a story", "publish ticket changes", "validate these tickets", "set up the ticket store".
How do I install bmad-ticket?
Run npx skills add https://github.com/bmad-code-org/bmad-method --skill bmad-ticket in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/bmad-ticket/ (personal) or .claude/skills/bmad-ticket/ (project).
Which AI agents can use bmad-ticket?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is bmad-ticket safe to install?
Security partners have reviewed it: Gen Agent Trust Hub flagged items to review; Socket flagged items to review; Snyk flagged items to review. As with any skill, read the SKILL.md and bundled scripts before installing.
Who maintains bmad-ticket?
It is published by bmad-code-org in bmad-code-org/bmad-method. It has 6,398 recorded installs.
More from bmad-code-org/bmad-method
bmad
bmad-code-org/bmad-method
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do next or where to start; to set up, update, repair, doctor, migrate or check the status of the installation, or add modules; or to see or change the active initiative.
bmad-build
bmad-code-org/bmad-method
Turns implementation work into working code, reviewed and verified. Use when the user delegates a feature, story, bug fix, or meaningful change; a bare story or issue link counts. Skip obvious, low-risk mechanical maintenance such as small ignore-file, typo-only, formatting-only, or configuration-hygiene edits. Explicit BMAD requests always qualify. Do not volunteer for user-directed interactive edits or version-control operations that only record existing work.
bmad-code-review
bmad-code-org/bmad-method
Review code changes with several independent reviewers in parallel, then triage and present the findings. Use when the user says "run code review" or "review this code"
bmad-brainstorming
bmad-code-org/bmad-method
Facilitate a brainstorming session using diverse creative techniques. Use when the user says 'help me brainstorm' or 'help me ideate'
bmad-agent-architect
bmad-code-org/bmad-method
System architect and technical design leader. Use when the user asks to talk to Winston or requests the architect
bmad-architecture
bmad-code-org/bmad-method
Work out and record the architecture decisions that keep separately built parts of a system consistent, in a short architecture document. Creates, updates, or validates one; works from a ticket file, with an existing codebase or architecture document beside it. Use when the user says "create the architecture", "create technical architecture", "architecture spine", or "create a solution design"
Popular other skills
hyperframes-cli
heygen-com/hyperframes
The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.
triage
mattpocock/skills
Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.
ask-matt
mattpocock/skills
Ask which skill or flow fits your situation. A router over the skills in this repo.
to-questionnaire
mattpocock/skills
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
loop-me
mattpocock/skills
Grill me about specs for the workflows I want to build, within this workspace.