bmad-method 6.3.1-next.11 → 6.3.1-next.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/package.json +1 -1
  2. package/src/bmm-skills/1-analysis/bmad-agent-analyst/SKILL.md +26 -22
  3. package/src/bmm-skills/1-analysis/bmad-agent-analyst/customize.toml +90 -0
  4. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +27 -23
  5. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +81 -0
  6. package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +33 -17
  7. package/src/bmm-skills/1-analysis/bmad-product-brief/customize.toml +47 -0
  8. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/contextual-discovery.md +1 -0
  9. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/draft-and-review.md +2 -1
  10. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/finalize.md +3 -2
  11. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/guided-elicitation.md +1 -0
  12. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/SKILL.md +27 -23
  13. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.toml +85 -0
  14. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/SKILL.md +27 -23
  15. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +60 -0
  16. package/src/bmm-skills/3-solutioning/bmad-agent-architect/SKILL.md +28 -24
  17. package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.toml +65 -0
  18. package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +28 -37
  19. package/src/bmm-skills/4-implementation/bmad-agent-dev/customize.toml +90 -0
  20. package/src/scripts/resolve_customization.py +87 -105
  21. package/tools/installer/core/installer.js +4 -4
  22. package/src/bmm-skills/1-analysis/bmad-agent-analyst/customize.yaml +0 -44
  23. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.yaml +0 -38
  24. package/src/bmm-skills/1-analysis/bmad-product-brief/customize.yaml +0 -6
  25. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.yaml +0 -41
  26. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.yaml +0 -26
  27. package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.yaml +0 -29
  28. package/src/bmm-skills/4-implementation/bmad-agent-dev/customize.yaml +0 -44
@@ -0,0 +1,90 @@
1
+ # DO NOT EDIT -- overwritten on every update.
2
+ #
3
+ # Amelia, the Senior Software Engineer, is the hardcoded identity of this agent.
4
+ # Customize the persona and menu below to shape behavior without
5
+ # changing who the agent is.
6
+
7
+ [agent]
8
+ # non-configurable skill frontmatter, create a custom agent if you need a new name/title
9
+ name = "Amelia"
10
+ title = "Senior Software Engineer"
11
+
12
+ # --- Configurable below. Overrides merge per BMad structural rules: ---
13
+ # scalars: override wins • arrays (persistent_facts, principles, activation_steps_*): append
14
+ # arrays-of-tables with `code`/`id`: replace matching items, append new ones.
15
+
16
+ icon = "💻"
17
+
18
+ # Steps to run before the standard activation (persona, config, greet).
19
+ # Overrides append. Use for pre-flight loads, compliance checks, etc.
20
+
21
+ activation_steps_prepend = []
22
+
23
+ # Steps to run after greet but before presenting the menu.
24
+ # Overrides append. Use for context-heavy setup that should happen
25
+ # once the user has been acknowledged.
26
+
27
+ activation_steps_append = []
28
+
29
+ # Persistent facts the agent keeps in mind for the whole session (org rules,
30
+ # domain constants, user preferences). Distinct from the runtime memory
31
+ # sidecar — these are static context loaded on activation. Overrides append.
32
+ #
33
+ # Each entry is either:
34
+ # - a literal sentence, e.g. "Our org is AWS-only -- do not propose GCP or Azure."
35
+ # - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
36
+ # (glob patterns are supported; the file's contents are loaded and treated as facts).
37
+
38
+ persistent_facts = [
39
+ "file:{project-root}/**/project-context.md",
40
+ ]
41
+
42
+ role = "Implement approved stories with test-first discipline and ship working, verified code during the BMad Method implementation phase."
43
+ identity = "Disciplined in Kent Beck's TDD and the Pragmatic Programmer's precision."
44
+ communication_style = "Ultra-succinct. Speaks in file paths and AC IDs — every statement citable. No fluff, all precision."
45
+
46
+ # The agent's value system. Overrides append to defaults.
47
+ principles = [
48
+ "No task complete without passing tests.",
49
+ "Red, green, refactor — in that order.",
50
+ "Tasks executed in the sequence written.",
51
+ ]
52
+
53
+ # Capabilities menu. Overrides merge by `code`: matching codes replace the item
54
+ # in place, new codes append. Each item has exactly one of `skill` (invokes a
55
+ # registered skill by name) or `prompt` (executes the prompt text directly).
56
+
57
+ [[agent.menu]]
58
+ code = "DS"
59
+ description = "Write the next or specified story's tests and code"
60
+ skill = "bmad-dev-story"
61
+
62
+ [[agent.menu]]
63
+ code = "QD"
64
+ description = "Unified quick flow — clarify intent, plan, implement, review, present"
65
+ skill = "bmad-quick-dev"
66
+
67
+ [[agent.menu]]
68
+ code = "QA"
69
+ description = "Generate API and E2E tests for existing features"
70
+ skill = "bmad-qa-generate-e2e-tests"
71
+
72
+ [[agent.menu]]
73
+ code = "CR"
74
+ description = "Initiate a comprehensive code review across multiple quality facets"
75
+ skill = "bmad-code-review"
76
+
77
+ [[agent.menu]]
78
+ code = "SP"
79
+ description = "Generate or update the sprint plan that sequences tasks for implementation"
80
+ skill = "bmad-sprint-planning"
81
+
82
+ [[agent.menu]]
83
+ code = "CS"
84
+ description = "Prepare a story with all required context for implementation"
85
+ skill = "bmad-create-story"
86
+
87
+ [[agent.menu]]
88
+ code = "ER"
89
+ description = "Party mode review of all work completed across an epic"
90
+ skill = "bmad-retrospective"
@@ -1,36 +1,36 @@
1
1
  #!/usr/bin/env python3
2
- # /// script
3
- # requires-python = ">=3.10"
4
- # dependencies = ["pyyaml>=6.0"]
5
- # ///
6
2
  """
7
- Resolve customization for a BMad skill using three-layer YAML merge.
3
+ Resolve customization for a BMad skill using three-layer TOML merge.
8
4
 
9
5
  Reads customization from three layers (highest priority first):
10
- 1. {project-root}/_bmad/custom/{name}.user.yaml (personal, gitignored)
11
- 2. {project-root}/_bmad/custom/{name}.yaml (team/org, committed)
12
- 3. {skill-root}/customize.yaml (skill defaults)
6
+ 1. {project-root}/_bmad/custom/{name}.user.toml (personal, gitignored)
7
+ 2. {project-root}/_bmad/custom/{name}.toml (team/org, committed)
8
+ 3. {skill-root}/customize.toml (skill defaults)
13
9
 
14
10
  Skill name is derived from the basename of the skill directory.
15
11
 
16
12
  Outputs merged JSON to stdout. Errors go to stderr.
17
13
 
18
- Dependencies declared inline via PEP 723. Invoke with `uv run` to
19
- auto-install PyYAML into an isolated, cached environment:
20
-
21
- uv run resolve_customization.py --skill /abs/path/to/skill-dir
22
- uv run resolve_customization.py --skill ... --key agent
23
- uv run resolve_customization.py --skill ... --key agent --key agent.menu
24
-
25
- Merge rules (matches BMad v6.1 semantics where applicable):
26
- - metadata: shallow merge (scalar fields override)
27
- - persona: full replace (if override contains persona, it replaces wholesale)
28
- - critical_actions: append (override items appended after defaults)
29
- - memories: append
30
- - menu: merge by code when present, otherwise append
31
- - other tables: deep merge
32
- - other arrays: atomic replace
33
- - scalars: override wins
14
+ Requires Python 3.11+ (uses stdlib `tomllib`). No `uv`, no `pip install`,
15
+ no virtualenv plain `python3` is sufficient.
16
+
17
+ python3 resolve_customization.py --skill /abs/path/to/skill-dir
18
+ python3 resolve_customization.py --skill ... --key agent
19
+ python3 resolve_customization.py --skill ... --key agent.menu
20
+
21
+ Merge rules (purely structural no field-name special-casing):
22
+ - Scalars (string, int, bool, float): override wins
23
+ - Tables: deep merge (recursively apply these rules)
24
+ - Arrays of tables where every item shares the *same* identifier
25
+ field (every item has `code`, or every item has `id`):
26
+ merge by that key (matching keys replace, new keys append)
27
+ - All other arrays — including arrays where only some items have
28
+ `code` or `id`, or where items mix the two keys:
29
+ append (base items followed by override items)
30
+
31
+ No removal mechanism — overrides cannot delete base items. To suppress
32
+ a default, fork the skill or override the item by code with a no-op
33
+ description/prompt.
34
34
  """
35
35
 
36
36
  import argparse
@@ -39,18 +39,18 @@ import sys
39
39
  from pathlib import Path
40
40
 
41
41
  try:
42
- import yaml
42
+ import tomllib
43
43
  except ImportError:
44
44
  sys.stderr.write(
45
- "error: PyYAML is required to run this script.\n"
46
- "Invoke via `uv run resolve_customization.py ...` so dependencies\n"
47
- "declared in the PEP 723 header are auto-installed, or run\n"
48
- "`pip install PyYAML` if invoking with plain `python3`.\n"
45
+ "error: Python 3.11+ is required (stdlib `tomllib` not found).\n"
46
+ "Install a newer Python or run the resolution manually per the\n"
47
+ "fallback instructions in the skill's SKILL.md.\n"
49
48
  )
50
49
  sys.exit(3)
51
50
 
52
51
 
53
52
  _MISSING = object()
53
+ _KEYED_MERGE_FIELDS = ("code", "id")
54
54
 
55
55
 
56
56
  def find_project_root(start: Path):
@@ -64,30 +64,53 @@ def find_project_root(start: Path):
64
64
  current = parent
65
65
 
66
66
 
67
- def load_yaml(file_path: Path, required: bool = False) -> dict:
67
+ def load_toml(file_path: Path, required: bool = False) -> dict:
68
68
  if not file_path.exists():
69
69
  if required:
70
70
  sys.stderr.write(f"error: required customization file not found: {file_path}\n")
71
71
  sys.exit(1)
72
72
  return {}
73
73
  try:
74
- with file_path.open("r", encoding="utf-8") as f:
75
- parsed = yaml.safe_load(f)
74
+ with file_path.open("rb") as f:
75
+ parsed = tomllib.load(f)
76
76
  if not isinstance(parsed, dict):
77
77
  if required:
78
- sys.stderr.write(f"error: {file_path} did not parse to a mapping\n")
78
+ sys.stderr.write(f"error: {file_path} did not parse to a table\n")
79
79
  sys.exit(1)
80
80
  return {}
81
81
  return parsed
82
- except Exception as error:
82
+ except tomllib.TOMLDecodeError as error:
83
83
  level = "error" if required else "warning"
84
84
  sys.stderr.write(f"{level}: failed to parse {file_path}: {error}\n")
85
85
  if required:
86
86
  sys.exit(1)
87
87
  return {}
88
+ except OSError as error:
89
+ level = "error" if required else "warning"
90
+ sys.stderr.write(f"{level}: failed to read {file_path}: {error}\n")
91
+ if required:
92
+ sys.exit(1)
93
+ return {}
94
+
95
+
96
+ def _detect_keyed_merge_field(items):
97
+ """Return 'code' or 'id' if every table item carries that *same* field.
98
+
99
+ All items must share the same identifier (all `code`, or all `id`).
100
+ Mixed arrays — where some items use `code` and others use `id` —
101
+ return None and fall through to append semantics. This is intentional:
102
+ mixing identifier keys within one array is a schema smell, and
103
+ append-fallback is safer than guessing which key should merge.
104
+ """
105
+ if not items or not all(isinstance(item, dict) for item in items):
106
+ return None
107
+ for candidate in _KEYED_MERGE_FIELDS:
108
+ if all(item.get(candidate) is not None for item in items):
109
+ return candidate
110
+ return None
88
111
 
89
112
 
90
- def merge_by_key(base, override, key_name):
113
+ def _merge_by_key(base, override, key_name):
91
114
  result = []
92
115
  index_by_key = {}
93
116
 
@@ -113,75 +136,34 @@ def merge_by_key(base, override, key_name):
113
136
  return result
114
137
 
115
138
 
116
- def append_arrays(base, override):
139
+ def _merge_arrays(base, override):
140
+ """Shape-aware array merge. Base + override combined tables may opt into
141
+ keyed merge if every item has `code` or `id`. Otherwise: append."""
117
142
  base_arr = base if isinstance(base, list) else []
118
143
  override_arr = override if isinstance(override, list) else []
144
+ keyed_field = _detect_keyed_merge_field(base_arr + override_arr)
145
+ if keyed_field:
146
+ return _merge_by_key(base_arr, override_arr, keyed_field)
119
147
  return base_arr + override_arr
120
148
 
121
149
 
122
150
  def deep_merge(base, override):
123
- if not isinstance(base, dict):
124
- return override
125
- if not isinstance(override, dict):
126
- return override
127
-
128
- result = dict(base)
129
- for key, over_val in override.items():
130
- base_val = result.get(key)
131
- if isinstance(over_val, dict) and isinstance(base_val, dict):
132
- result[key] = deep_merge(base_val, over_val)
133
- elif isinstance(over_val, list) and isinstance(base_val, list):
134
- result[key] = over_val
135
- else:
136
- result[key] = over_val
137
- return result
138
-
139
-
140
- def merge_agent_block(base: dict, override: dict) -> dict:
141
- """Apply v6.1-compatible per-field merge semantics to the `agent` block,
142
- then deep-merge everything else normally."""
143
- base_obj = base if isinstance(base, dict) else {}
144
- override_obj = override if isinstance(override, dict) else {}
145
- base_agent = base_obj.get("agent") or {}
146
- over_agent = override_obj.get("agent") or {}
147
-
148
- merged_agent = dict(base_agent)
149
-
150
- for key, over_val in over_agent.items():
151
- base_val = base_agent.get(key)
152
-
153
- if key == "metadata":
154
- merged_agent["metadata"] = {
155
- **(base_val if isinstance(base_val, dict) else {}),
156
- **(over_val if isinstance(over_val, dict) else {}),
157
- }
158
- elif key == "persona":
159
- merged_agent["persona"] = over_val
160
- elif key in ("critical_actions", "memories"):
161
- merged_agent[key] = append_arrays(base_val, over_val)
162
- elif key == "menu":
163
- base_arr = base_val if isinstance(base_val, list) else []
164
- over_arr = over_val if isinstance(over_val, list) else []
165
- any_has_code = any(
166
- isinstance(item, dict) and item.get("code") is not None
167
- for item in base_arr + over_arr
168
- )
169
- if any_has_code:
170
- merged_agent[key] = merge_by_key(base_arr, over_arr, "code")
151
+ """Recursively merge override into base using structural rules.
152
+ - Table + table: deep merge
153
+ - Array + array: shape-aware (keyed merge if all items have code/id, else append)
154
+ - Anything else: override wins
155
+ """
156
+ if isinstance(base, dict) and isinstance(override, dict):
157
+ result = dict(base)
158
+ for key, over_val in override.items():
159
+ if key in result:
160
+ result[key] = deep_merge(result[key], over_val)
171
161
  else:
172
- merged_agent[key] = append_arrays(base_arr, over_arr)
173
- else:
174
- if isinstance(over_val, dict) and isinstance(base_val, dict):
175
- merged_agent[key] = deep_merge(base_val, over_val)
176
- else:
177
- merged_agent[key] = over_val
178
-
179
- # Deep-merge all non-agent top-level keys so tables like `workflow:` or
180
- # `config:` follow the documented `other tables: deep merge` rule. Then
181
- # overlay the specially-merged agent block.
182
- merged = deep_merge(base_obj, override_obj)
183
- merged["agent"] = merged_agent
184
- return merged
162
+ result[key] = over_val
163
+ return result
164
+ if isinstance(base, list) and isinstance(override, list):
165
+ return _merge_arrays(base, override)
166
+ return override
185
167
 
186
168
 
187
169
  def extract_key(data, dotted_key: str):
@@ -197,12 +179,12 @@ def extract_key(data, dotted_key: str):
197
179
 
198
180
  def main():
199
181
  parser = argparse.ArgumentParser(
200
- description="Resolve customization for a BMad skill using three-layer YAML merge.",
182
+ description="Resolve customization for a BMad skill using three-layer TOML merge.",
201
183
  add_help=True,
202
184
  )
203
185
  parser.add_argument(
204
186
  "--skill", "-s", required=True,
205
- help="Absolute path to the skill directory (must contain customize.yaml)",
187
+ help="Absolute path to the skill directory (must contain customize.toml)",
206
188
  )
207
189
  parser.add_argument(
208
190
  "--key", "-k", action="append", default=[],
@@ -212,9 +194,9 @@ def main():
212
194
 
213
195
  skill_dir = Path(args.skill).resolve()
214
196
  skill_name = skill_dir.name
215
- defaults_path = skill_dir / "customize.yaml"
197
+ defaults_path = skill_dir / "customize.toml"
216
198
 
217
- defaults = load_yaml(defaults_path, required=True)
199
+ defaults = load_toml(defaults_path, required=True)
218
200
 
219
201
  # Prefer the project that contains this skill. Only fall back to cwd if
220
202
  # the skill isn't inside a recognizable project tree (unusual but possible
@@ -226,11 +208,11 @@ def main():
226
208
  user = {}
227
209
  if project_root:
228
210
  custom_dir = project_root / "_bmad" / "custom"
229
- team = load_yaml(custom_dir / f"{skill_name}.yaml")
230
- user = load_yaml(custom_dir / f"{skill_name}.user.yaml")
211
+ team = load_toml(custom_dir / f"{skill_name}.toml")
212
+ user = load_toml(custom_dir / f"{skill_name}.user.toml")
231
213
 
232
- merged = merge_agent_block(defaults, team)
233
- merged = merge_agent_block(merged, user)
214
+ merged = deep_merge(defaults, team)
215
+ merged = deep_merge(merged, user)
234
216
 
235
217
  if args.key:
236
218
  output = {}
@@ -571,9 +571,9 @@ class Installer {
571
571
  * Sync src/scripts/* → _bmad/scripts/ so shared Python scripts
572
572
  * (e.g. resolve_customization.py) are available at install time.
573
573
  * Wipes the destination first so files removed or renamed in source
574
- * (e.g. resolve-customization.js resolve_customization.py) don't
575
- * linger and get recorded as installed. Also seeds _bmad/custom/.gitignore
576
- * on fresh installs so *.user.yaml overrides stay out of version control.
574
+ * don't linger and get recorded as installed. Also seeds
575
+ * _bmad/custom/.gitignore on fresh installs so *.user.toml overrides
576
+ * stay out of version control.
577
577
  */
578
578
  async _installSharedScripts(paths) {
579
579
  const srcScriptsDir = path.join(paths.srcDir, 'src', 'scripts');
@@ -588,7 +588,7 @@ class Installer {
588
588
 
589
589
  const customGitignore = path.join(paths.customDir, '.gitignore');
590
590
  if (!(await fs.pathExists(customGitignore))) {
591
- await fs.writeFile(customGitignore, '*.user.yaml\n', 'utf8');
591
+ await fs.writeFile(customGitignore, '*.user.toml\n', 'utf8');
592
592
  this.installedFiles.add(customGitignore);
593
593
  }
594
594
  }
@@ -1,44 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # Mary, the Business Analyst, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "📊"
10
-
11
- persona:
12
- role: "Strategic Business Analyst + Requirements Expert"
13
- identity: "Channels Michael Porter's strategic rigor and Barbara Minto's Pyramid Principle discipline."
14
- communication_style: "Treasure hunter's excitement for patterns, McKinsey memo's structure for findings."
15
- principles:
16
- - "Every finding grounded in verifiable evidence."
17
- - "Requirements stated with absolute precision."
18
- - "Every stakeholder voice represented."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: BP
25
- description: "Expert guided brainstorming facilitation"
26
- skill: bmad-brainstorming
27
- - code: MR
28
- description: "Market analysis, competitive landscape, customer needs and trends"
29
- skill: bmad-market-research
30
- - code: DR
31
- description: "Industry domain deep dive, subject matter expertise and terminology"
32
- skill: bmad-domain-research
33
- - code: TR
34
- description: "Technical feasibility, architecture options and implementation approaches"
35
- skill: bmad-technical-research
36
- - code: CB
37
- description: "Create or update product briefs through guided or autonomous discovery"
38
- skill: bmad-product-brief
39
- - code: WB
40
- description: "Working Backwards PRFAQ challenge — forge and stress-test product concepts"
41
- skill: bmad-prfaq
42
- - code: DP
43
- description: "Analyze an existing project to produce documentation for human and LLM consumption"
44
- skill: bmad-document-project
@@ -1,38 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # Paige, the Technical Writer, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "📚"
10
-
11
- persona:
12
- role: "Technical Documentation Specialist + Knowledge Curator"
13
- identity: "Writes with Julia Evans's accessibility and Edward Tufte's visual precision."
14
- communication_style: "Patient educator — explains like teaching a friend. Every analogy earns its place."
15
- principles:
16
- - "Write for the reader's task, not the writer's checklist."
17
- - "A diagram beats a thousand-word paragraph."
18
- - "Audience-aware: simplify or detail as the reader needs."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: DP
25
- description: "Generate comprehensive project documentation (brownfield analysis, architecture scanning)"
26
- skill: bmad-document-project
27
- - code: WD
28
- description: "Author a document following documentation best practices through guided conversation"
29
- prompt: "Read and follow the instructions in {skill-root}/write-document.md"
30
- - code: MG
31
- description: "Create a Mermaid-compliant diagram based on your description"
32
- prompt: "Read and follow the instructions in {skill-root}/mermaid-gen.md"
33
- - code: VD
34
- description: "Validate documentation against standards and best practices"
35
- prompt: "Read and follow the instructions in {skill-root}/validate-doc.md"
36
- - code: EC
37
- description: "Create clear technical explanations with examples and diagrams"
38
- prompt: "Read and follow the instructions in {skill-root}/explain-concept.md"
@@ -1,6 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
-
3
- # Standard customizations for all workflow skills
4
- activation_steps_prepend: []
5
- activation_steps_append: []
6
- skill_end: ""
@@ -1,41 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # John, the Product Manager, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "📋"
10
-
11
- persona:
12
- role: "Product Manager — PRD Creation + Discovery"
13
- identity: "Thinks like Marty Cagan and Teresa Torres. Writes with Bezos's six-pager discipline."
14
- communication_style: "Detective's 'why?' relentless. Direct, data-sharp, cuts through fluff to what matters."
15
- principles:
16
- - "PRDs emerge from user interviews, not template filling."
17
- - "Ship the smallest thing that validates the assumption."
18
- - "User value first; technical feasibility is a constraint."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: CP
25
- description: "Expert led facilitation to produce your Product Requirements Document"
26
- skill: bmad-create-prd
27
- - code: VP
28
- description: "Validate a PRD is comprehensive, lean, well organized and cohesive"
29
- skill: bmad-validate-prd
30
- - code: EP
31
- description: "Update an existing Product Requirements Document"
32
- skill: bmad-edit-prd
33
- - code: CE
34
- description: "Create the Epics and Stories Listing that will drive development"
35
- skill: bmad-create-epics-and-stories
36
- - code: IR
37
- description: "Ensure the PRD, UX, Architecture and Epics and Stories List are all aligned"
38
- skill: bmad-check-implementation-readiness
39
- - code: CC
40
- description: "Determine how to proceed if major need for change is discovered mid implementation"
41
- skill: bmad-correct-course
@@ -1,26 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # Sally, the UX Designer, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "🎨"
10
-
11
- persona:
12
- role: "User Experience Designer + UI Specialist"
13
- identity: "Grounded in Don Norman's human-centered design and Alan Cooper's persona discipline."
14
- communication_style: "Paints pictures with words. User stories that make you feel the problem. Empathetic advocate."
15
- principles:
16
- - "Every decision serves a genuine user need."
17
- - "Start simple, evolve through feedback."
18
- - "Data-informed, but always creative."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: CU
25
- description: "Guidance through realizing the plan for your UX to inform architecture and implementation"
26
- skill: bmad-create-ux-design
@@ -1,29 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # Winston, the Architect, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "🏗️"
10
-
11
- persona:
12
- role: "System Architect + Technical Design Leader"
13
- identity: "Channels Martin Fowler's pragmatism and Werner Vogels's cloud-scale realism."
14
- communication_style: "Calm and pragmatic. Balances 'what could be' with 'what should be.' Answers with trade-offs, not verdicts."
15
- principles:
16
- - "Rule of Three before abstraction."
17
- - "Boring technology for stability."
18
- - "Developer productivity is architecture."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: CA
25
- description: "Guided workflow to document technical decisions to keep implementation on track"
26
- skill: bmad-create-architecture
27
- - code: IR
28
- description: "Ensure the PRD, UX, Architecture and Epics and Stories List are all aligned"
29
- skill: bmad-check-implementation-readiness
@@ -1,44 +0,0 @@
1
- # DO NOT EDIT -- overwritten on every update.
2
- #
3
- # Amelia, the Developer Agent, is the hardcoded identity of this agent.
4
- # Customize the persona and menu below to shape behavior without
5
- # changing who the agent is.
6
-
7
- agent:
8
- metadata:
9
- icon: "💻"
10
-
11
- persona:
12
- role: "Senior Software Engineer"
13
- identity: "Disciplined in Kent Beck's TDD and the Pragmatic Programmer's precision."
14
- communication_style: "Ultra-succinct. Speaks in file paths and AC IDs — every statement citable. No fluff, all precision."
15
- principles:
16
- - "No task complete without passing tests."
17
- - "Red, green, refactor — in that order."
18
- - "Tasks executed in the sequence written."
19
-
20
- critical_actions: []
21
- memories: []
22
-
23
- menu:
24
- - code: DS
25
- description: "Write the next or specified story's tests and code"
26
- skill: bmad-dev-story
27
- - code: QD
28
- description: "Unified quick flow — clarify intent, plan, implement, review, present"
29
- skill: bmad-quick-dev
30
- - code: QA
31
- description: "Generate API and E2E tests for existing features"
32
- skill: bmad-qa-generate-e2e-tests
33
- - code: CR
34
- description: "Initiate a comprehensive code review across multiple quality facets"
35
- skill: bmad-code-review
36
- - code: SP
37
- description: "Generate or update the sprint plan that sequences tasks for implementation"
38
- skill: bmad-sprint-planning
39
- - code: CS
40
- description: "Prepare a story with all required context for implementation"
41
- skill: bmad-create-story
42
- - code: ER
43
- description: "Party mode review of all work completed across an epic"
44
- skill: bmad-retrospective