Describe the bug
The Module Builder ships an invalid SKILL.md frontmatter template for generated setup skills at:
skills/bmad-module-builder/assets/setup-skill-template/SKILL.md
The template currently starts with:
---
name: { setup-skill-name }
description: Sets up {module-name} module in a project. Use when the user requests to 'install {module-code} module', 'configure {module-name}', or 'setup {module-name}'.
---
That name: value is not valid YAML for the frontmatter contract used by skill loaders. Before substitution, it is parsed as a flow mapping rather than a string. In Codex, the generated setup skill is skipped on load because the resulting SKILL.md frontmatter is considered invalid.
I first reported this in bmad-code-org/BMAD-METHOD#2196, then closed it after confirming the source of truth is bmad-builder, not BMAD-METHOD.
Steps to reproduce
- In Codex, install BMad Builder and use the Module Builder to scaffold a multi-skill module so it generates a
bmad-<code>-setup skill.
- Inspect the source template at
skills/bmad-module-builder/assets/setup-skill-template/SKILL.md or inspect the generated setup skill's SKILL.md.
- Let Codex load the generated skill from the workspace skills directory.
- Observe that the setup skill is skipped because its frontmatter is invalid.
If you parse the frontmatter payload directly as YAML, name: { setup-skill-name } becomes a map instead of a string.
Expected behavior
The setup skill template should ship valid YAML frontmatter so generated setup skills load successfully. Quoting the placeholders fixes this while preserving templating, for example:
---
name: "{setup-skill-name}"
description: "Sets up {module-name} module in a project. Use when the user requests to 'install {module-code} module', 'configure {module-name}', or 'setup {module-name}'."
---
It would also be good to add a regression test that parses the generated SKILL.md frontmatter and asserts that name is a string after scaffolding.
Environment (if relevant)
- Model(s) used: Codex workload; model is not material to the failure because the loader rejects the generated
SKILL.md before normal skill execution
- Agentic IDE used: Codex
- BMad version: BMad Builder main branch as of 2026-04-03; issue also observed in distributed asset previously reported from a local BMad install
- Project language: N/A
Screenshots or links
If helpful, I can open a PR for the template quote fix plus a regression test in skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py.
PR
I can contribute a fix.
Additional context
Relevant public source locations:
skills/bmad-module-builder/assets/setup-skill-template/SKILL.md
skills/bmad-module-builder/scripts/scaffold-setup-skill.py
skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py
Current gap: the existing test checks placeholder substitution but does not validate that generated frontmatter parses as YAML with name as a string.
Describe the bug
The Module Builder ships an invalid
SKILL.mdfrontmatter template for generated setup skills at:skills/bmad-module-builder/assets/setup-skill-template/SKILL.mdThe template currently starts with:
That
name:value is not valid YAML for the frontmatter contract used by skill loaders. Before substitution, it is parsed as a flow mapping rather than a string. In Codex, the generated setup skill is skipped on load because the resultingSKILL.mdfrontmatter is considered invalid.I first reported this in
bmad-code-org/BMAD-METHOD#2196, then closed it after confirming the source of truth isbmad-builder, notBMAD-METHOD.Steps to reproduce
bmad-<code>-setupskill.skills/bmad-module-builder/assets/setup-skill-template/SKILL.mdor inspect the generated setup skill'sSKILL.md.If you parse the frontmatter payload directly as YAML,
name: { setup-skill-name }becomes a map instead of a string.Expected behavior
The setup skill template should ship valid YAML frontmatter so generated setup skills load successfully. Quoting the placeholders fixes this while preserving templating, for example:
It would also be good to add a regression test that parses the generated
SKILL.mdfrontmatter and asserts thatnameis a string after scaffolding.Environment (if relevant)
SKILL.mdbefore normal skill executionScreenshots or links
If helpful, I can open a PR for the template quote fix plus a regression test in
skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py.PR
I can contribute a fix.
Additional context
Relevant public source locations:
skills/bmad-module-builder/assets/setup-skill-template/SKILL.mdskills/bmad-module-builder/scripts/scaffold-setup-skill.pyskills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.pyCurrent gap: the existing test checks placeholder substitution but does not validate that generated frontmatter parses as YAML with
nameas a string.