Skill Tracer
Skills › BMAD Method › bmad-toolsmith › shape.md

shape.md

23 lines · skills/bmad-toolsmith/shapes/single-skill-module/shape.md at bd70c64

Open on GitHub

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

1# Single-skill module
2
3One folder that is both a module record and the module's only skill. It is the default offer for a standalone skill that needs its own config questions or wants `bmad` to know it: setup asks its questions, help answers from its document, updates are checked, and there is no second folder to install.
4

Single-skill module

One folder that is both a module record and the module's only skill. It is the default offer for a standalone skill that needs its own config questions or wants bmad to know it: setup asks its questions, help answers from its document, updates are checked, and there is no second folder to install.

Raw lines 1 to 4
Names a skill bmad :3
5## When the conversation is here
6
7The read-back names one skill, nothing else ships with it, and either it needs an answer that belongs to the project rather than the session (an output folder, a file it maintains, a style) or the user wants `bmad` to know it: recommend it from help, set it up, check it for updates. A skill with neither, whose user wants none of that, is a plain skill and needs no record. A second skill arriving later turns this into `shapes/multi-skill-module/shape.md`: the record moves to a `bmod-<code>/` folder and this `bmod.toml` keeps only `[skill]`.
8

When the conversation is here

The read-back names one skill, nothing else ships with it, and either it needs an answer that belongs to the project rather than the session (an output folder, a file it maintains, a style) or the user wants bmad to know it: recommend it from help, set it up, check it for updates. A skill with neither, whose user wants none of that, is a plain skill and needs no record. A second skill arriving later turns this into shapes/multi-skill-module/shape.md: the record moves to a bmod-<code>/ folder and this bmod.toml keeps only [skill].

Raw lines 5 to 8
Names a skill bmad :7
9## Files
11- `bmod.toml` from `assets/bmod-template.toml`: `[bmod]` with `code`, `version`, `update_source`, `required_skills`, the questions, both install messages (empty when unused), and an empty `[skill]`. A skill with nothing to ask drops the `[[bmod.config_questions]]` block rather than shipping a placeholder question.
12- `SKILL.md` and the rest of the skill from whichever skill shape the read-back chose; this shape adds only the record.
13- `help/help.md` from `assets/help-template.md`: what the skill gives the user and when to recommend it, written for the `bmad` help agent.

Files

  • bmod.toml from assets/bmod-template.toml: [bmod] with code, version, update_source, required_skills, the questions, both install messages (empty when unused), and an empty [skill]. A skill with nothing to ask drops the [[bmod.config_questions]] block rather than shipping a placeholder question.
  • SKILL.md and the rest of the skill from whichever skill shape the read-back chose; this shape adds only the record.
  • help/help.md from assets/help-template.md: what the skill gives the user and when to recommend it, written for the bmad help agent.
Raw lines 9 to 14
Names a skill bmad :13
15## Rules
17- `code` is the config namespace and what the user types in `bmad setup <code>`: short, lowercase, not a module the user already has. The folder name is free, because `bmad` finds a module by the `[bmod]` table, never by folder name.
18- The skill reads every answer as `modules.<code>.<key>`: `uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key modules.<code>.<key>`. Nothing a question could hold is hardcoded.
19- A question is `key`, `prompt`, `default` and optional `scope = "team"|"user"`, no other keys. `key` is not the code and does not start with `<code>.`, since the namespace already says it. `scope = "user"` for a personal preference; a path the team shares stays team. Defaults keep `{project-root}` literal.
20- `required_skills` lists `{ skill = "bmad", version = "{bmad_version}", source = "github:bmad-code-org/BMAD-METHOD/skills" }`, because the skill runs `_bmad/scripts`; `{bmad_version}` is the `version` in the `bmod-core-tools` record installed beside `{skill-root}`, asked of the user when it is not installed. Add any other skill it invokes.
21- `update_source` is where `npx skills add` fetches the skill from, `github:<owner>/<repo>` or `github:<owner>/<repo>/<path>`; ask when it is not in the conversation.
23Fill a template with `uv run {skill-root}/scripts/process_template.py <template> -o <dest> --var key=value ... --true <condition> ...`; a `{if-X}...{/if-X}` block survives only when `--true X` is given, and `{project-root}` passes through untouched.

Rules

  • code is the config namespace and what the user types in bmad setup <code>: short, lowercase, not a module the user already has. The folder name is free, because bmad finds a module by the [bmod] table, never by folder name.
  • The skill reads every answer as modules.<code>.<key>: uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key modules.<code>.<key>. Nothing a question could hold is hardcoded.
  • A question is key, prompt, default and optional scope = "team"|"user", no other keys. key is not the code and does not start with <code>., since the namespace already says it. scope = "user" for a personal preference; a path the team shares stays team. Defaults keep {project-root} literal.
  • required_skills lists { skill = "bmad", version = "{bmad_version}", source = "github:bmad-code-org/BMAD-METHOD/skills" }, because the skill runs _bmad/scripts; {bmad_version} is the version in the bmod-core-tools record installed beside {skill-root}, asked of the user when it is not installed. Add any other skill it invokes.
  • update_source is where npx skills add fetches the skill from, github:<owner>/<repo> or github:<owner>/<repo>/<path>; ask when it is not in the conversation.

Fill a template with uv run {skill-root}/scripts/process_template.py <template> -o <dest> --var key=value ... --true <condition> ...; a {if-X}...{/if-X} block survives only when --true X is given, and {project-root} passes through untouched.

Raw lines 15 to 23
Names a skill bmad :17
Runs code scripts/resolve_config.py :18
Names a skill bmod-core-tools :20
Runs code scripts/process_template.py :23