4.4 KiB
4.4 KiB
Manifest Reference
Every BMad skill has a bmad-manifest.json at its root. This is the unified format for agents, workflows, and simple skills.
File Location
{skillname}/
├── SKILL.md # name, description, persona content
├── bmad-manifest.json # Capabilities, module integration, persona distillate
└── ...
SKILL.md Frontmatter (Minimal)
---
name: bmad-{modulecode}-{skillname}
description: [5-8 word summary]. [Use when user says 'X' or 'Y'.]
---
bmad-manifest.json
NOTE: Do NOT include $schema in generated manifests. The schema is used by validation tooling only — it is not part of the delivered skill.
{
"module-code": "bmb",
"replaces-skill": "bmad-original-agent",
"persona": "A succinct distillation of who this agent is and how they operate.",
"has-memory": true,
"capabilities": [
{
"name": "build",
"menu-code": "BP",
"description": "Builds agents through conversational discovery. Outputs to skill folder.",
"supports-headless": true,
"prompt": "build-process.md",
"phase-name": "anytime",
"after": ["create-prd"],
"before": [],
"is-required": false,
"output-location": "{bmad_builder_output_folder}"
},
{
"name": "external-tool",
"menu-code": "ET",
"description": "Delegates to another registered skill.",
"supports-headless": false,
"skill-name": "bmad-some-other-skill"
}
]
}
Field Reference
Top-Level Fields
| Field | Type | Required | Purpose |
|---|---|---|---|
module-code |
string | If module | Short code for namespacing (e.g., bmb, cis) |
replaces-skill |
string | No | Registered skill name this replaces. Inherits metadata during bmad-init. |
persona |
string | Agents only | Succinct distillation of the agent's essence. Presence = this is an agent. |
has-memory |
boolean | No | Whether state persists across sessions via sidecar memory |
Capability Fields
| Field | Type | Required | Purpose |
|---|---|---|---|
name |
string | Yes | Kebab-case identifier |
menu-code |
string | Yes | 2-3 uppercase letter shortcut for menus |
description |
string | Yes | What it does and when to suggest it |
supports-autonomous |
boolean | No | Can run without user interaction |
prompt |
string | No | Relative path to prompt file (internal capability) |
skill-name |
string | No | Registered name of external skill (external capability) |
phase-name |
string | No | Module phase this belongs to |
after |
array | No | Skill names that should run before this capability |
before |
array | No | Skill names this capability should run before |
is-required |
boolean | No | If true, skills in before are blocked until this completes |
output-location |
string | No | Where output goes (may use config variables) |
Three Capability Flavors
- Has
prompt— internal capability routed to a prompt file - Has
skill-name— delegates to another registered skill - Has neither — SKILL.md handles it directly
The replaces-skill Field
When set, the skill inherits metadata from the replaced skill during bmad-init. Explicit fields in the new manifest override inherited values.
Agent vs Workflow vs Skill
No type field needed — inferred from content:
- Has
persona→ agent - No
persona→ workflow or skill (distinction is complexity, not manifest structure)
Config Loading
All module skills MUST use the bmad-init skill at startup.
Path Construction Rules — CRITICAL
Only use {project-root} for _bmad paths.
Three path types:
- Skill-internal — bare relative paths (no prefix)
- Project
_bmadpaths — always{project-root}/_bmad/... - Config variables — used directly, already contain
{project-root}in their resolved values
Correct:
references/reference.md # Skill-internal (bare relative)
capability.md # Skill-internal (bare relative)
{project-root}/_bmad/_memory/x-sidecar/ # Project _bmad path
{output_folder}/report.md # Config var (already has full path)
Never use:
../../other-skill/file.md # Cross-skill relative path breaks with reorganization
{project-root}/{config_var}/output.md # Double-prefix
./references/reference.md # Relative prefix breaks context changes