Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Authors and updates customization overrides for installed BMad skills. Use when the user says 'customize bmad', 'override a skill', 'change agent behavior', or 'customize a workflow'
.claude/skills/bmad-code-org-bmad-customize/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-22 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 40% | 0% |
Translate the user's intent into a correctly-placed TOML override file under {project-root}/_bmad/custom/ for a customizable agent or workflow skill. Discover, route, author, write, verify.
Scope v1: per-skill [agent] overrides (bmad-agent-<role>.toml / .user.toml) and per-skill [workflow] overrides (bmad-<workflow>.toml / .user.toml). Central config ({project-root}/_bmad/custom/config.toml) is out of scope — point users at the How to Customize BMad guide.
When the target's customize.toml doesn't expose what the user wants, say so plainly. Don't invent fields.
{project-root}/_bmad/ → BMad is not set up here. Offer to run the bmad skill's setup, installing bmad first if you do not have it (npx skills add bmad-code-org/BMAD-METHOD --skill bmad). Stop if the user declines.{project-root}/_bmad/scripts/resolve_customization.py missing → continue, but Step 6 verify falls back to manual merge.Greet the user. If the user's invocation already names a target skill AND a specific change, jump to Step 3.
uv run {skill-root}/scripts/list_customizable_skills.py --project-root {project-root}Use --extra-root <path> (repeatable) if the user has skills installed in additional locations.
Group the returned agents and workflows for the user; for each show name, description, whether has_team_override or has_user_override is true. Surface any errors[]. For audit/iterate intents, lead with already-overridden entries.
Empty list: show scanned_roots, ask whether skills live elsewhere (offer --extra-root); otherwise stop.
Read the target's customize.toml. Top-level [agent] or [workflow] block defines the surface.
If a team or user override already exists, read it first and summarize what's already overridden before composing.
Cross-cutting intent — walk both surfaces with the user:
bmad-agent-pm.toml with persistent_facts, principles).bmad-prd.toml with activation_steps_prepend).Single-surface heuristic:
*_template, on_complete). Surgical, reliable.When ambiguous, present both with tradeoff, recommend one, let the user decide.
Intent outside the exposed surface (step logic, ordering, anything not in customize.toml): say so; offer activation_steps_prepend/append or persistent_facts as approximations, or recommend bmad-builder to create a custom skill.
Translate plain-English into TOML against the target's customize.toml fields. If an existing override was read, frame the change as additive.
Merge semantics:
icon, role, *_template, on_complete) — override wins.persistent_facts, activation_steps_prepend/append, principles) — team/user entries append in order.code or id) — matching keys replace, new keys append.Overrides are sparse: only the fields being changed. Never copy the whole customize.toml.
Template swap (*_template scalar): offer to copy the default template to {project-root}/_bmad/custom/{skill-name}-{purpose}-template.md, point the override at the new path, offer to help edit it.
Under {project-root}/_bmad/custom/:
{skill-name}.toml — team, committed. Policies, org conventions, compliance.{skill-name}.user.toml — user, gitignored. Personal tone, private facts, shortcuts.Default by character (policy → team, personal → user), confirm before writing.
{project-root}/_bmad/custom/ if needed. uv run {project-root}/_bmad/scripts/resolve_customization.py --skill <install-path> --project-root {project-root} --key <agent-or-workflow> Show the merged output, point out the changed fields.
Resolver missing or fails: read whichever layers exist — <install-path>/customize.toml (base), {project-root}/_bmad/custom/{skill-name}.toml (team), {project-root}/_bmad/custom/{skill-name}.user.toml (user) — apply base → team → user with the same merge rules (scalars override, tables deep-merge, code/id-keyed arrays merge by key, all other arrays append), describe how the changed fields resolve.
Verify shows override didn't land (field unchanged, merge conflict, file not picked up): re-enter Step 4 with the verify output as context. Usually wrong field name, wrong merge mode (scalar vs array), or wrong scope.
Otherwise the skill isn't done — finish or tell the user they're exiting incomplete.
{project-root}/_bmad/custom/config.toml) — see the How to Customize BMad guide.customize.toml — open a feature request, or use bmad-builder to create a custom skill. Offer to help with either.customize.toml — not customizable.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,450 | 18,227 | +11% | 1 | 1 | 0% | 238 | 1,999 | +740% | 0 | 0 | — |
case-02 | fail→fail | 16,665 | 23,309 | +40% | 1 | 1 | 0% | 2,596 | 2,033 | -22% | 0 | 0 | — |
case-22 | fail→pass | 17,333 | 12,654 | -27% | 1 | 1 | 0% | 1,750 | 2,627 | +50% | 0 | 0 | — |
case-03 | fail→fail | 21,472 | 15,145 | -29% | 1 | 1 | 0% | 2,634 | 2,274 | -14% | 0 | 0 | — |
case-04 | fail→pass | 14,775 | 16,705 | +13% | 1 | 1 | 0% | 1,765 | 2,291 | +30% | 0 | 0 | — |
case-05 | fail→pass | 19,746 | 5,609 | -72% | 1 | 1 | 0% | 2,136 | 2,504 | +17% | 0 | 0 | — |
case-06 | fail→pass | 20,390 | 14,362 | -30% | 1 | 1 | 0% | 2,189 | 3,640 | +66% | 0 | 0 | — |
case-07 | fail→pass | 32,927 | 4,108 | -88% | 1 | 1 | 0% | 1,475 | 2,069 | +40% | 0 | 0 | — |
case-08 | fail→fail | 35,233 | 9,085 | -74% | 1 | 1 | 0% | 2,804 | 2,338 | -17% | 0 | 0 | — |
case-09 | fail→fail | 16,579 | 12,143 | -27% | 1 | 1 | 0% | 1,733 | 2,422 | +40% | 0 | 0 | — |
case-10 | fail→fail | 14,752 | 19,695 | +34% | 1 | 1 | 0% | 2,061 | 2,000 | -3% | 0 | 0 | — |
case-11 | fail→fail | 27,402 | 34,411 | +26% | 1 | 1 | 0% | 2,310 | 2,343 | +1% | 0 | 0 | — |
case-12 | fail→fail | 16,151 | 15,868 | -2% | 1 | 1 | 0% | 1,969 | 3,811 | +94% | 0 | 0 | — |
case-13 | fail→fail | 16,904 | 19,330 | +14% | 1 | 1 | 0% | 2,564 | 2,052 | -20% | 0 | 0 | — |
case-14 | pass→fail | 14,428 | 14,155 | -2% | 1 | 1 | 0% | 1,203 | 2,018 | +68% | 0 | 0 | — |
case-15 | pass→fail | 15,060 | 21,561 | +43% | 1 | 1 | 0% | 1,483 | 2,140 | +44% | 0 | 0 | — |
case-16 | fail→pass | 10,368 | 21,889 | +111% | 1 | 1 | 0% | 1,499 | 2,365 | +58% | 0 | 0 | — |
case-17 | fail→fail | 17,558 | 10,038 | -43% | 1 | 1 | 0% | 1,913 | 3,210 | +68% | 0 | 0 | — |
case-18 | fail→pass | 40,080 | 11,432 | -71% | 1 | 1 | 0% | 2,075 | 2,714 | +31% | 0 | 0 | — |
case-19 | fail→fail | 13,583 | 18,890 | +39% | 1 | 1 | 0% | 2,033 | 2,003 | -1% | 0 | 0 | — |
case-20 | pass→pass | 15,576 | 9,222 | -41% | 1 | 1 | 0% | 1,412 | 2,236 | +58% | 0 | 0 | — |
case-21 | fail→fail | 28,136 | 6,622 | -76% | 1 | 1 | 0% | 957 | 2,225 | +132% | 0 | 0 | — |
case-23 | fail→fail | 13,517 | 7,765 | -43% | 1 | 1 | 0% | 2,038 | 2,744 | +35% | 0 | 0 | — |
case-24 | fail→fail | 40,685 | 4,795 | -88% | 1 | 1 | 0% | 3,355 | 1,902 | -43% | 0 | 0 | — |
case-25 | fail→fail | 11,436 | 54,824 | +379% | 1 | 1 | 0% | 1,823 | 1,937 | +6% | 0 | 0 | — |
case-26 | fail→pass | 29,298 | 12,691 | -57% | 1 | 1 | 0% | 4,768 | 2,242 | -53% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted, and 16 counted toward the lift figure. The other 10 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 16 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 9/19/2026 | +50% |
Other measured skills in the registry, with their headline benchmark lift.