Skill Tracer
Skills › BMAD Method › bmad-customize

bmad-customize

skill · 111 lines · MIT · skills/bmad-customize/SKILL.md

The facts

Its description

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'

The description the agent reads to decide when to use it.

From its settingsline 3

When it starts

A person asks to change or override how an installed BMad agent or workflow skill behaves — for example retuning an agent's persona or facts, or swapping a workflow's template, output path, or step behavior. The skill is picked when the user names a target skill and a desired change, or asks what can be customized.

Things a person might say (the model's guesses)

  • “customize bmad”
  • “I want to override the PM agent so it always uses our house writing style”
  • “Can I customize the PRD workflow to point at our own template?”

A model's summary of when it is used.

A model's reading

Starts other agents

1 line mentions starting other agents

Lines in the file that mention starting another agent. Found by matching words, so treat them as pointers.

Found by matching wordsline 56

Runs scripts

scripts/resolve_customization.py, scripts/list_customizable_skills.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 17 line 34 line 90

What it leads to

Other skills this one hands off to, calls, requires or offers instead, as a model read them.

A model's reading

What leads to it

Other skills that hand off to this one, call it, require it or offer it instead, as a model read them.

A model's reading

Licence

MIT, from LICENSE

The terms its author shares it under, which let it be shown here.

From the repositorylicence text
Other files in this skill (2) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: bmad-customize
3description: 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'
4---
5
6# BMad Customize
7
8Translate 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.
9
10Scope 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](https://docs.bmad-method.org/how-to/customize-bmad/).
12When the target's `customize.toml` doesn't expose what the user wants, say so plainly. Don't invent fields.

BMad Customize

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.

Raw lines 1 to 13
14## Preflight
16- No `{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.
17- `{project-root}/_bmad/scripts/resolve_customization.py` missing → continue, but Step 6 verify falls back to manual merge.
18- Both present → proceed.

Preflight

  • No {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.
  • Both present → proceed.
Raw lines 14 to 19
Names a skill bmad :16
Runs code scripts/resolve_customization.py :17
20## Activation
22Greet the user. If the user's invocation already names a target skill AND a specific change, jump to Step 3.

Activation

Greet the user. If the user's invocation already names a target skill AND a specific change, jump to Step 3.

Raw lines 20 to 23
24## Step 1: Classify intent
26- **Directed** — specific skill + specific change → Step 3.
27- **Exploratory** — "what can I customize?" → Step 2.
28- **Audit/iterate** — wants to review or change something already customized → Step 2, lead with skills that have existing overrides; read the existing override in Step 3 before composing.
29- **Cross-cutting** — could live on multiple surfaces → Step 3, choose agent vs workflow explicitly with the user.

Step 1: Classify intent

  • Directed — specific skill + specific change → Step 3.
  • Exploratory — "what can I customize?" → Step 2.
  • Audit/iterate — wants to review or change something already customized → Step 2, lead with skills that have existing overrides; read the existing override in Step 3 before composing.
  • Cross-cutting — could live on multiple surfaces → Step 3, choose agent vs workflow explicitly with the user.
Raw lines 24 to 30
31## Step 2: Discovery
33```
34uv run {skill-root}/scripts/list_customizable_skills.py --project-root {project-root}
35```
37Use `--extra-root <path>` (repeatable) if the user has skills installed in additional locations.
39Group 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.
41Empty list: show `scanned_roots`, ask whether skills live elsewhere (offer `--extra-root`); otherwise stop.

Step 2: Discovery

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.

Raw lines 31 to 42
Runs code scripts/list_customizable_skills.py :34
43## Step 3: Determine the right surface
45Read the target's `customize.toml`. Top-level `[agent]` or `[workflow]` block defines the surface.
47If a team or user override already exists, read it first and summarize what's already overridden before composing.
49**Cross-cutting intent — walk both surfaces with the user:**
50- Every workflow a given agent runs → agent surface (e.g. `bmad-agent-pm.toml` with `persistent_facts`, `principles`).
51- One workflow only → workflow surface (e.g. `bmad-prd.toml` with `activation_steps_prepend`).
52- Several specific workflows → multiple workflow overrides in sequence, not an agent override.
54**Single-surface heuristic:**
55- Workflow-level: template swap, output path, step-specific behavior, or a named scalar already exposed (`*_template`, `on_complete`). Surgical, reliable.
56- Agent-level: persona, communication style, org-wide facts, menu changes, behavior that should apply to every workflow the agent dispatches.
58When ambiguous, present both with tradeoff, recommend one, let the user decide.
60Intent 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, if `bmad-toolsmith` is installed, recommend it to create a custom skill.

Step 3: Determine the right surface

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:

  • Every workflow a given agent runs → agent surface (e.g. bmad-agent-pm.toml with persistent_facts, principles).
  • One workflow only → workflow surface (e.g. bmad-prd.toml with activation_steps_prepend).
  • Several specific workflows → multiple workflow overrides in sequence, not an agent override.

Single-surface heuristic:

  • Workflow-level: template swap, output path, step-specific behavior, or a named scalar already exposed (*_template, on_complete). Surgical, reliable.
  • Agent-level: persona, communication style, org-wide facts, menu changes, behavior that should apply to every workflow the agent dispatches.

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, if bmad-toolsmith is installed, recommend it to create a custom skill.

Raw lines 43 to 61
Names a skill bmad-agent-pm :50
Names a skill bmad-prd :51
Starts an agent dispatches :56
Names a skill bmad-toolsmith :60
62## Step 4: Compose the override
64Translate plain-English into TOML against the target's `customize.toml` fields. If an existing override was read, frame the change as additive.
66Merge semantics:
67- **Scalars** (`icon`, `role`, `*_template`, `on_complete`) — override wins.
68- **Append arrays** (`persistent_facts`, `activation_steps_prepend`/`append`, `principles`) — team/user entries append in order.
69- **Keyed arrays of tables** (menu items with `code` or `id`) — matching keys replace, new keys append.
71Overrides are sparse: only the fields being changed. Never copy the whole `customize.toml`.
73**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.

Step 4: Compose the override

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:

  • Scalars (icon, role, *_template, on_complete) — override wins.
  • Append arrays (persistent_facts, activation_steps_prepend/append, principles) — team/user entries append in order.
  • Keyed arrays of tables (menu items with 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.

Raw lines 62 to 74
75## Step 5: Team or user placement
77Under `{project-root}/_bmad/custom/`:
78- `{skill-name}.toml` — team, committed. Policies, org conventions, compliance.
79- `{skill-name}.user.toml` — user, gitignored. Personal tone, private facts, shortcuts.
81Default by character (policy → team, personal → user), confirm before writing.

Step 5: Team or user placement

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.

Raw lines 75 to 82
83## Step 6: Show, confirm, write, verify
851. Show the full TOML. If the file exists, show a diff. Never silently overwrite.
862. Wait for explicit yes.
873. Write. Create `{project-root}/_bmad/custom/` if needed.
884. Verify:
89 ```
90 uv run {project-root}/_bmad/scripts/resolve_customization.py --skill <install-path> --project-root {project-root} --key <agent-or-workflow>
91 ```
92 Show the merged output, point out the changed fields.
94 **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.
96 **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.
975. Summarize what changed, where the file lives, how to iterate. Remind the user to commit team overrides.

Step 6: Show, confirm, write, verify

  1. Show the full TOML. If the file exists, show a diff. Never silently overwrite.
  2. Wait for explicit yes.
  3. Write. Create {project-root}/_bmad/custom/ if needed.
  4. Verify: `` 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.

  1. Summarize what changed, where the file lives, how to iterate. Remind the user to commit team overrides.
Raw lines 83 to 98
Runs code scripts/resolve_customization.py :90
99## Complete when
101- Override file written (or user explicitly aborted).
102- User has seen resolver output (or manual fallback merge summary).
103- User has acknowledged the summary.
105Otherwise the skill isn't done — finish or tell the user they're exiting incomplete.

Complete when

  • Override file written (or user explicitly aborted).
  • User has seen resolver output (or manual fallback merge summary).
  • User has acknowledged the summary.

Otherwise the skill isn't done — finish or tell the user they're exiting incomplete.

Raw lines 99 to 106
107## When this skill can't help
109- **Central config** (`{project-root}/_bmad/custom/config.toml`) — see the [How to Customize BMad guide](https://docs.bmad-method.org/how-to/customize-bmad/).
110- **Step logic, ordering, behavior not in `customize.toml`** — open a feature request, or, if `bmad-toolsmith` is installed, use it to create a custom skill. Offer to help with either.
111- **Skills without a `customize.toml`** — not customizable.

When this skill can't help

  • Central config ({project-root}/_bmad/custom/config.toml) — see the How to Customize BMad guide.
  • **Step logic, ordering, behavior not in customize.toml** — open a feature request, or, if bmad-toolsmith is installed, use it to create a custom skill. Offer to help with either.
  • **Skills without a customize.toml** — not customizable.
Raw lines 107 to 111
Names a skill bmad-toolsmith :110

From bmad-code-org/BMAD-METHOD at bd70c64, 2026-10-31. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.