basic BMAD setup
This commit is contained in:
@@ -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}
|
||||
+15
@@ -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}
|
||||
+5
@@ -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`.
|
||||
+23
@@ -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.
|
||||
Reference in New Issue
Block a user