basic BMAD setup

This commit is contained in:
Ebbe Baß
2026-10-15 08:57:23 +02:00
parent 44029127dc
commit 5e747654b9
438 changed files with 41818 additions and 0 deletions
@@ -0,0 +1,21 @@
# {title} knowledge
This document covers the skills of the `{code}` module: what each one gives the user, when to recommend it, and what to offer next.
## The skills
- `{skill}`: {does}. Recommend it when {when}. Afterwards offer {next}.
## Where things land
{output} is chosen at setup as `modules.{code}.{key}`; `bmad setup {code}` shows and changes the answers.
{if-topics}
## More detail
This document should be enough to route the user. Read a topic file only when the question is about its subject.
| Topic file | Read when the user asks about |
|---|---|
| `help/{topic}.md` | {topic_subject} |
{/if-topics}
@@ -0,0 +1,15 @@
[skill]
bmod = "bmod-{code}"
source = "{update_source}"
{if-needs}
# This skill's own needs, on top of the module's. A plain name is a skill from this module's
# source; a table names one from elsewhere: { skill = "...", source = "github:<owner>/<repo>/<path>" }.
required_skills = [{required_skills}]
recommended_skills = [{recommended_skills}]
{/if-needs}
{if-scripts}
# Files this skill ships into _bmad/scripts, as paths under its scripts/ folder.
scripts = [{scripts}]
{/if-scripts}
@@ -0,0 +1,5 @@
---
name: bmod-{code}
description: Required bmod metadata. Never invoke this skill.
---
This folder is the {title} module's record, not something to run. Invoke the `bmad` skill with `setup {code}`; it sets the module up if it never was, and otherwise reports its state. If there is no `bmad` skill, say so and offer `npx skills add bmad-code-org/BMAD-METHOD --skill bmad`.
@@ -0,0 +1,23 @@
# Everything true of the whole {code} module. Unknown keys and tables are ignored.
[bmod]
code = "{code}"
version = "{version}"
update_source = "{update_source}"
skills = [{skills}]
required_skills = [{ skill = "bmad", version = "{bmad_version}", source = "github:bmad-code-org/BMAD-METHOD/skills" }]
{if-recommended}
# Nice to have alongside. `bmad` mentions these once and does not insist.
recommended_skills = [{recommended_skills}]
{/if-recommended}
pre_install_message = ""
post_install_message = ""
{if-questions}
# Asked by `bmad setup` in this order. Members read each answer as modules.{code}.<key>.
# `scope = "user"` makes an answer personal and uncommitted; leave it out for a team answer.
[[bmod.config_questions]]
key = "{key}"
prompt = "{prompt}"
default = "{default}"
{/if-questions}
@@ -0,0 +1,8 @@
# Skills this module no longer ships. `bmad setup` offers to delete any still installed and moves a
# renamed skill's `_bmad/custom/` files to the new name. A retired name is never reused.
{if-renamed}
renamed = [{renamed}]
{/if-renamed}
{if-removed}
removed = [{removed}]
{/if-removed}
@@ -0,0 +1,20 @@
# The people the {code} module offers and the groups they form. A member with `skill` is an agent,
# present only while that skill is installed; its name, title and icon follow the skill's
# customization. A member without `skill` is a guest who exists only in groups.
[[members]]
code = "{agent_skill}"
skill = "{agent_skill}"
name = "{agent_name}"
icon = "{agent_icon}"
title = "{agent_title}"
persona = "{agent_persona}"
{if-group}
[[groups]]
id = "{group_id}"
name = "{group_name}"
scene = "{group_scene}"
members = [{group_members}]
memory = false
{/if-group}
@@ -0,0 +1,33 @@
# Multi-skill module
A `bmod-<code>/` record folder beside the skills it ships, and a `[skill]` `bmod.toml` in each of them. The record is inert: `bmad` reads it for setup, help, the roster and update checks.
## When the conversation is here
The read-back lists two or more skills that ship and install together, or one skill joining a module that already has a record. Planning what a large module should contain is the user's own discovery with you, or the method's planning skills; this shape starts once the skill list exists. One skill with its own questions is `shapes/single-skill-module/shape.md`.
## Files
The record, `bmod-<code>/`:
- `SKILL.md` from `assets/record-SKILL-template.md`: `name: bmod-<code>`, the fixed description `Required bmod metadata. Never invoke this skill.`, and a body that only redirects to `bmad setup <code>`.
- `bmod.toml` from `assets/record-bmod-template.toml`: `[bmod]` with `code`, `version`, `update_source`, `skills` (every member), `required_skills`, optional `recommended_skills`, the `[[bmod.config_questions]]`, and both install messages, empty when unused.
- `roster.toml` from `assets/roster-template.toml`, only when a member is an agent.
- `help/help.md` from `assets/help-template.md`, always. `help/<topic>.md` for depth, each named in `help.md` with when to read it; a topic `help.md` does not name is never read.
- `retired.toml` from `assets/retired-template.toml`, only when the module has renamed or removed a skill.
Each member: `bmod.toml` from `assets/member-bmod-template.toml`, with `bmod = "bmod-<code>"`, `source` equal to the record's `update_source`, and its own `required_skills`, `recommended_skills` and `scripts` (files it ships into `_bmad/scripts`) when it has them. A skill belongs to one module; a skill it uses from another module is a dependency entry, not a member.
## Joining an existing record
When the read-back registers one skill as a member of a record that exists, the scaffold writes the member `bmod.toml` (`--bmod bmod-<code> --source <the record's update_source>`); then change the record: add the name to `[bmod].skills`; add a row to `help/help.md`, and a `help/<topic>.md` only when the skill has depth the row cannot hold; for an agent, a `[[members]]` entry in `roster.toml`. The record's version is not yours to bump. The read-back's files list shows these edits.
## Rules
- Names: members carry the code as prefix (`acme-brainstorm`, agents `acme-agent-<name>`); `bmad-` names belong to the bmad-code-org, which writes `bmad-<code>-<skill>`. The record folder is `bmod-` plus the code exactly.
- Config: a question is `key`, `prompt`, `default`, optional `scope = "team"|"user"`, nothing else; `key` is not the code and does not start with `<code>.`. Every member reads answers as `modules.<code>.<key>` through `resolve_config.py`. One question serves every skill that needs the value, so the record is the only place a path is asked.
- Dependencies: `{ skill = "bmad", version = "{bmad_version}", source = "github:bmad-code-org/BMAD-METHOD/skills" }` in the record's `required_skills`, because members run `_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. A plain name is a skill from this module's source; a table names one from elsewhere. Module-wide needs go in the record, one skill's needs in its own file.
- Roster `[[members]]`: `code`, `skill`, `name`, `icon`, `title`, `persona`, copied from the agent's `customize.toml`. A member without `skill` is a guest who exists only in `[[groups]]`.
- Help has one reader, the `bmad` help agent, answering a user: what each skill gives, when to recommend it, what to offer next, where output lands and which `bmad setup` answer sets it. Leave out install mechanics and manifest keys, which it cannot act on while answering.
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.