Skip to content

[BUG] Module Builder setup skill template ships invalid SKILL.md frontmatter observed in Codex #56

@dickymoore

Description

@dickymoore

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

  1. In Codex, install BMad Builder and use the Module Builder to scaffold a multi-skill module so it generates a bmad-<code>-setup skill.
  2. Inspect the source template at skills/bmad-module-builder/assets/setup-skill-template/SKILL.md or inspect the generated setup skill's SKILL.md.
  3. Let Codex load the generated skill from the workspace skills directory.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions