bmad-method 6.0.3 → 6.0.5-next.0

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 (271) hide show
  1. package/.augment/code_review_guidelines.yaml +2 -42
  2. package/.claude/skills/bmad-os-findings-triage/SKILL.md +6 -0
  3. package/.claude/skills/bmad-os-findings-triage/prompts/agent-prompt.md +104 -0
  4. package/.claude/skills/bmad-os-findings-triage/prompts/instructions.md +286 -0
  5. package/.claude/skills/bmad-os-review-pr/SKILL.md +1 -1
  6. package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +63 -6
  7. package/.claude/skills/bmad-os-review-prompt/SKILL.md +177 -0
  8. package/.claude/skills/bmad-os-root-cause-analysis/SKILL.md +12 -0
  9. package/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md +74 -0
  10. package/.github/ISSUE_TEMPLATE/config.yaml +1 -1
  11. package/.github/ISSUE_TEMPLATE/documentation.yaml +1 -1
  12. package/.github/workflows/publish.yaml +243 -0
  13. package/CHANGELOG.md +32 -0
  14. package/CONTRIBUTING.md +1 -1
  15. package/README.md +8 -8
  16. package/README_CN.md +121 -0
  17. package/docs/_STYLE_GUIDE.md +10 -10
  18. package/docs/explanation/brainstorming.md +1 -1
  19. package/docs/explanation/party-mode.md +1 -1
  20. package/docs/explanation/preventing-agent-conflicts.md +1 -1
  21. package/docs/explanation/project-context.md +15 -15
  22. package/docs/explanation/quick-flow.md +9 -9
  23. package/docs/how-to/established-projects.md +7 -7
  24. package/docs/how-to/get-answers-about-bmad.md +2 -2
  25. package/docs/how-to/install-bmad.md +16 -6
  26. package/docs/how-to/project-context.md +2 -2
  27. package/docs/how-to/quick-fixes.md +5 -5
  28. package/docs/how-to/shard-large-documents.md +1 -1
  29. package/docs/how-to/upgrade-to-v6.md +8 -5
  30. package/docs/index.md +2 -2
  31. package/docs/reference/agents.md +14 -14
  32. package/docs/reference/commands.md +64 -70
  33. package/docs/reference/testing.md +1 -1
  34. package/docs/reference/workflow-map.md +19 -19
  35. package/docs/tutorials/getting-started.md +34 -34
  36. package/docs/zh-cn/404.md +9 -0
  37. package/docs/zh-cn/_STYLE_GUIDE.md +370 -0
  38. package/docs/zh-cn/explanation/advanced-elicitation.md +62 -0
  39. package/docs/zh-cn/explanation/adversarial-review.md +71 -0
  40. package/docs/zh-cn/explanation/brainstorming.md +43 -0
  41. package/docs/zh-cn/explanation/established-projects-faq.md +60 -0
  42. package/docs/zh-cn/explanation/party-mode.md +79 -0
  43. package/docs/zh-cn/explanation/preventing-agent-conflicts.md +137 -0
  44. package/docs/zh-cn/explanation/project-context.md +176 -0
  45. package/docs/zh-cn/explanation/quick-flow.md +93 -0
  46. package/docs/zh-cn/explanation/why-solutioning-matters.md +90 -0
  47. package/docs/zh-cn/how-to/customize-bmad.md +182 -0
  48. package/docs/zh-cn/how-to/established-projects.md +134 -0
  49. package/docs/zh-cn/how-to/get-answers-about-bmad.md +144 -0
  50. package/docs/zh-cn/how-to/install-bmad.md +105 -0
  51. package/docs/zh-cn/how-to/non-interactive-installation.md +181 -0
  52. package/docs/zh-cn/how-to/project-context.md +152 -0
  53. package/docs/zh-cn/how-to/quick-fixes.md +140 -0
  54. package/docs/zh-cn/how-to/shard-large-documents.md +86 -0
  55. package/docs/zh-cn/how-to/upgrade-to-v6.md +120 -0
  56. package/docs/zh-cn/index.md +69 -0
  57. package/docs/zh-cn/reference/agents.md +41 -0
  58. package/docs/zh-cn/reference/commands.md +166 -0
  59. package/docs/zh-cn/reference/modules.md +94 -0
  60. package/docs/zh-cn/reference/testing.md +122 -0
  61. package/docs/zh-cn/reference/workflow-map.md +104 -0
  62. package/docs/zh-cn/roadmap.mdx +152 -0
  63. package/docs/zh-cn/tutorials/getting-started.md +300 -0
  64. package/package.json +1 -1
  65. package/src/bmm/agents/analyst.agent.yaml +1 -1
  66. package/src/bmm/agents/bmad-skill-manifest.yaml +39 -0
  67. package/src/bmm/agents/dev.agent.yaml +2 -2
  68. package/src/bmm/agents/pm.agent.yaml +1 -1
  69. package/src/bmm/agents/qa.agent.yaml +1 -1
  70. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +6 -2
  71. package/src/bmm/agents/sm.agent.yaml +4 -4
  72. package/src/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  73. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  74. package/src/bmm/module-help.csv +11 -10
  75. package/src/bmm/workflows/1-analysis/create-product-brief/bmad-skill-manifest.yaml +3 -0
  76. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +1 -1
  77. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +1 -1
  78. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +1 -1
  79. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +1 -1
  80. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +1 -1
  81. package/src/bmm/workflows/1-analysis/research/bmad-skill-manifest.yaml +14 -0
  82. package/src/bmm/workflows/2-plan-workflows/create-prd/bmad-skill-manifest.yaml +14 -0
  83. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +1 -1
  84. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +1 -1
  85. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +1 -1
  86. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +1 -1
  87. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +1 -1
  88. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +1 -1
  89. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +1 -1
  90. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +1 -1
  91. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +1 -1
  92. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +1 -1
  93. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +1 -1
  94. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +1 -1
  95. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +1 -1
  96. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +1 -1
  97. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +1 -1
  98. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +1 -1
  99. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  100. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +1 -1
  101. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +1 -1
  102. package/src/bmm/workflows/2-plan-workflows/create-ux-design/bmad-skill-manifest.yaml +3 -0
  103. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +1 -1
  104. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +2 -2
  105. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +2 -2
  106. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +2 -2
  107. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +2 -2
  108. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +2 -2
  109. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +2 -2
  110. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +2 -2
  111. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +2 -2
  112. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +2 -2
  113. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +2 -2
  114. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +2 -2
  115. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +1 -1
  116. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/bmad-skill-manifest.yaml +3 -0
  117. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +1 -1
  118. package/src/bmm/workflows/3-solutioning/create-architecture/bmad-skill-manifest.yaml +3 -0
  119. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +2 -2
  120. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +2 -2
  121. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +2 -2
  122. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +2 -2
  123. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +2 -2
  124. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +2 -2
  125. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +1 -1
  126. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/bmad-skill-manifest.yaml +3 -0
  127. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
  128. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
  129. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
  130. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +2 -2
  131. package/src/bmm/workflows/4-implementation/code-review/bmad-skill-manifest.yaml +3 -0
  132. package/src/bmm/workflows/4-implementation/code-review/discover-inputs.md +88 -0
  133. package/src/bmm/workflows/4-implementation/code-review/workflow.md +271 -0
  134. package/src/bmm/workflows/4-implementation/correct-course/bmad-skill-manifest.yaml +3 -0
  135. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  136. package/src/bmm/workflows/4-implementation/correct-course/{instructions.md → workflow.md} +79 -12
  137. package/src/bmm/workflows/4-implementation/create-story/bmad-skill-manifest.yaml +3 -0
  138. package/src/bmm/workflows/4-implementation/create-story/checklist.md +9 -10
  139. package/src/bmm/workflows/4-implementation/create-story/discover-inputs.md +88 -0
  140. package/src/bmm/workflows/4-implementation/create-story/workflow.md +388 -0
  141. package/src/bmm/workflows/4-implementation/dev-story/bmad-skill-manifest.yaml +3 -0
  142. package/src/bmm/workflows/4-implementation/dev-story/{instructions.xml → workflow.md} +49 -2
  143. package/src/bmm/workflows/4-implementation/retrospective/bmad-skill-manifest.yaml +3 -0
  144. package/src/bmm/workflows/4-implementation/retrospective/{instructions.md → workflow.md} +64 -23
  145. package/src/bmm/workflows/4-implementation/sprint-planning/bmad-skill-manifest.yaml +3 -0
  146. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -0
  147. package/src/bmm/workflows/4-implementation/sprint-planning/{instructions.md → workflow.md} +55 -10
  148. package/src/bmm/workflows/4-implementation/sprint-status/bmad-skill-manifest.yaml +3 -0
  149. package/src/bmm/workflows/4-implementation/sprint-status/{instructions.md → workflow.md} +45 -8
  150. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  151. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  152. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +54 -0
  153. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +39 -0
  154. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +35 -0
  155. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +55 -0
  156. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +19 -0
  157. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  158. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +84 -0
  159. package/src/bmm/workflows/bmad-quick-flow/quick-dev/bmad-skill-manifest.yaml +3 -0
  160. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +8 -14
  161. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +1 -1
  162. package/src/bmm/workflows/bmad-quick-flow/quick-spec/bmad-skill-manifest.yaml +3 -0
  163. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +4 -6
  164. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +1 -1
  165. package/src/bmm/workflows/document-project/bmad-skill-manifest.yaml +3 -0
  166. package/src/bmm/workflows/document-project/instructions.md +5 -7
  167. package/src/bmm/workflows/document-project/workflow.md +39 -0
  168. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -1
  169. package/src/bmm/workflows/document-project/workflows/deep-dive-workflow.md +42 -0
  170. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1
  171. package/src/bmm/workflows/document-project/workflows/full-scan-workflow.md +42 -0
  172. package/src/bmm/workflows/generate-project-context/bmad-skill-manifest.yaml +3 -0
  173. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +2 -2
  174. package/src/bmm/workflows/qa-generate-e2e-tests/bmad-skill-manifest.yaml +3 -0
  175. package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +1 -1
  176. package/src/bmm/workflows/qa-generate-e2e-tests/{instructions.md → workflow.md} +40 -7
  177. package/src/core/agents/bmad-master.agent.yaml +1 -1
  178. package/src/core/agents/bmad-skill-manifest.yaml +3 -0
  179. package/src/core/module-help.csv +3 -2
  180. package/src/core/module.yaml +1 -1
  181. package/src/core/tasks/bmad-help/SKILL.md +6 -0
  182. package/src/core/tasks/bmad-help/bmad-skill-manifest.yaml +1 -0
  183. package/src/core/tasks/{help.md → bmad-help/workflow.md} +6 -4
  184. package/src/core/tasks/bmad-review-adversarial-general/SKILL.md +6 -0
  185. package/src/core/tasks/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  186. package/src/core/tasks/bmad-review-adversarial-general/workflow.md +32 -0
  187. package/src/core/tasks/bmad-review-edge-case-hunter/SKILL.md +6 -0
  188. package/src/core/tasks/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  189. package/src/core/tasks/bmad-review-edge-case-hunter/workflow.md +62 -0
  190. package/src/core/tasks/bmad-skill-manifest.yaml +19 -0
  191. package/src/core/workflows/advanced-elicitation/bmad-skill-manifest.yaml +3 -0
  192. package/src/core/workflows/advanced-elicitation/workflow.md +138 -0
  193. package/src/core/workflows/brainstorming/bmad-skill-manifest.yaml +3 -0
  194. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +31 -18
  195. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +1 -1
  196. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +3 -3
  197. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +2 -2
  198. package/src/core/workflows/brainstorming/workflow.md +5 -3
  199. package/src/core/workflows/party-mode/bmad-skill-manifest.yaml +3 -0
  200. package/src/core/workflows/party-mode/workflow.md +1 -1
  201. package/src/utility/agent-components/activation-steps.txt +2 -2
  202. package/src/utility/agent-components/handler-multi.txt +1 -2
  203. package/test/adversarial-review-tests/README.md +3 -3
  204. package/test/adversarial-review-tests/test-cases.yaml +2 -2
  205. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -1
  206. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -1
  207. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -2
  208. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +1 -1
  209. package/test/test-file-refs-csv.js +1 -1
  210. package/test/test-install-to-bmad.js +154 -0
  211. package/test/test-installation-components.js +1586 -2
  212. package/test/test-workflow-path-regex.js +88 -0
  213. package/tools/cli/installers/install-messages.yaml +1 -1
  214. package/tools/cli/installers/lib/core/installer.js +34 -1
  215. package/tools/cli/installers/lib/core/manifest-generator.js +332 -41
  216. package/tools/cli/installers/lib/ide/_base-ide.js +24 -15
  217. package/tools/cli/installers/lib/ide/_config-driven.js +547 -53
  218. package/tools/cli/installers/lib/ide/manager.js +26 -62
  219. package/tools/cli/installers/lib/ide/platform-codes.yaml +116 -29
  220. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +1 -0
  221. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +7 -0
  222. package/tools/cli/installers/lib/ide/shared/path-utils.js +68 -3
  223. package/tools/cli/installers/lib/ide/shared/skill-manifest.js +90 -0
  224. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +2 -0
  225. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +6 -145
  226. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  227. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +1 -1
  228. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +1 -1
  229. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +1 -1
  230. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +1 -1
  231. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +0 -1
  232. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +0 -1
  233. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +0 -1
  234. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +0 -1
  235. package/tools/cli/installers/lib/modules/manager.js +9 -132
  236. package/tools/cli/lib/agent/compiler.js +1 -10
  237. package/tools/cli/lib/agent-analyzer.js +2 -14
  238. package/tools/cli/lib/yaml-xml-builder.js +1 -18
  239. package/tools/docs/native-skills-migration-checklist.md +281 -0
  240. package/tools/platform-codes.yaml +1 -1
  241. package/tools/schema/agent.js +1 -3
  242. package/tools/validate-file-refs.js +2 -0
  243. package/website/astro.config.mjs +24 -3
  244. package/website/src/content/config.ts +2 -1
  245. package/website/src/content/i18n/zh-CN.json +28 -0
  246. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  247. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -43
  248. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -53
  249. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  250. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -52
  251. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -20
  252. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
  253. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  254. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  255. package/src/bmm/workflows/document-project/workflow.yaml +0 -22
  256. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  257. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  258. package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +0 -42
  259. package/src/core/tasks/review-adversarial-general.xml +0 -49
  260. package/src/core/tasks/workflow.xml +0 -235
  261. package/src/core/workflows/advanced-elicitation/workflow.xml +0 -118
  262. package/src/utility/agent-components/handler-validate-workflow.txt +0 -7
  263. package/src/utility/agent-components/handler-workflow.txt +0 -10
  264. package/tools/cli/installers/lib/ide/codex.js +0 -440
  265. package/tools/cli/installers/lib/ide/github-copilot.js +0 -699
  266. package/tools/cli/installers/lib/ide/kilo.js +0 -269
  267. package/tools/cli/installers/lib/ide/rovodev.js +0 -257
  268. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +0 -14
  269. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +0 -15
  270. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +0 -13
  271. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +0 -5
@@ -1,5 +1,3 @@
1
- const fs = require('fs-extra');
2
- const path = require('node:path');
3
1
  const { BMAD_FOLDER_NAME } = require('./shared/path-utils');
4
2
  const prompts = require('../../../lib/prompts');
5
3
 
@@ -8,8 +6,7 @@ const prompts = require('../../../lib/prompts');
8
6
  * Dynamically discovers and loads IDE handlers
9
7
  *
10
8
  * Loading strategy:
11
- * 1. Custom installer files (codex.js, github-copilot.js, kilo.js, rovodev.js) - for platforms with unique installation logic
12
- * 2. Config-driven handlers (from platform-codes.yaml) - for standard IDE installation patterns
9
+ * All platforms are config-driven from platform-codes.yaml.
13
10
  */
14
11
  class IdeManager {
15
12
  constructor() {
@@ -43,49 +40,12 @@ class IdeManager {
43
40
  }
44
41
 
45
42
  /**
46
- * Dynamically load all IDE handlers
47
- * 1. Load custom installer files first (codex.js, github-copilot.js, kilo.js, rovodev.js)
48
- * 2. Load config-driven handlers from platform-codes.yaml
43
+ * Dynamically load all IDE handlers from platform-codes.yaml
49
44
  */
50
45
  async loadHandlers() {
51
- // Load custom installer files
52
- await this.loadCustomInstallerFiles();
53
-
54
- // Load config-driven handlers from platform-codes.yaml
55
46
  await this.loadConfigDrivenHandlers();
56
47
  }
57
48
 
58
- /**
59
- * Load custom installer files (unique installation logic)
60
- * These files have special installation patterns that don't fit the config-driven model
61
- */
62
- async loadCustomInstallerFiles() {
63
- const ideDir = __dirname;
64
- const customFiles = ['codex.js', 'github-copilot.js', 'kilo.js', 'rovodev.js'];
65
-
66
- for (const file of customFiles) {
67
- const filePath = path.join(ideDir, file);
68
- if (!fs.existsSync(filePath)) continue;
69
-
70
- try {
71
- const HandlerModule = require(filePath);
72
- const HandlerClass = HandlerModule.default || Object.values(HandlerModule)[0];
73
-
74
- if (HandlerClass) {
75
- const instance = new HandlerClass();
76
- if (instance.name && typeof instance.name === 'string') {
77
- if (typeof instance.setBmadFolderName === 'function') {
78
- instance.setBmadFolderName(this.bmadFolderName);
79
- }
80
- this.handlers.set(instance.name, instance);
81
- }
82
- }
83
- } catch (error) {
84
- await prompts.log.warn(`Warning: Could not load ${file}: ${error.message}`);
85
- }
86
- }
87
- }
88
-
89
49
  /**
90
50
  * Load config-driven handlers from platform-codes.yaml
91
51
  * This creates ConfigDrivenIdeSetup instances for platforms with installer config
@@ -97,9 +57,6 @@ class IdeManager {
97
57
  const { ConfigDrivenIdeSetup } = require('./_config-driven');
98
58
 
99
59
  for (const [platformCode, platformInfo] of Object.entries(platformConfig.platforms)) {
100
- // Skip if already loaded by custom installer
101
- if (this.handlers.has(platformCode)) continue;
102
-
103
60
  // Skip if no installer config (platform may not need installation)
104
61
  if (!platformInfo.installer) continue;
105
62
 
@@ -127,6 +84,11 @@ class IdeManager {
127
84
  continue;
128
85
  }
129
86
 
87
+ // Skip suspended platforms (e.g., IDE doesn't support skills yet)
88
+ if (handler.platformConfig?.suspended) {
89
+ continue;
90
+ }
91
+
130
92
  ides.push({
131
93
  value: key,
132
94
  name: name,
@@ -176,6 +138,22 @@ class IdeManager {
176
138
  return { success: false, ide: ideName, error: 'unsupported IDE' };
177
139
  }
178
140
 
141
+ // Block suspended platforms — clean up legacy files but don't install
142
+ if (handler.platformConfig?.suspended) {
143
+ if (!options.silent) {
144
+ await prompts.log.warn(`${handler.displayName || ideName}: ${handler.platformConfig.suspended}`);
145
+ }
146
+ // Still clean up legacy artifacts so old broken configs don't linger
147
+ if (typeof handler.cleanup === 'function') {
148
+ try {
149
+ await handler.cleanup(projectDir, { silent: true });
150
+ } catch {
151
+ // Best-effort cleanup — don't let stale files block the suspended result
152
+ }
153
+ }
154
+ return { success: false, ide: ideName, error: 'suspended' };
155
+ }
156
+
179
157
  try {
180
158
  const handlerResult = await handler.setup(projectDir, bmadDir, options);
181
159
  // Build detail string from handler-returned data
@@ -189,24 +167,10 @@ class IdeManager {
189
167
  if (r.tasks > 0) parts.push(`${r.tasks} tasks`);
190
168
  if (r.tools > 0) parts.push(`${r.tools} tools`);
191
169
  detail = parts.join(', ');
192
- } else if (handlerResult && handlerResult.counts) {
193
- // Codex handler returns { success, counts: { agents, workflows, tasks }, written }
194
- const c = handlerResult.counts;
195
- const parts = [];
196
- if (c.agents > 0) parts.push(`${c.agents} agents`);
197
- if (c.workflows > 0) parts.push(`${c.workflows} workflows`);
198
- if (c.tasks > 0) parts.push(`${c.tasks} tasks`);
199
- detail = parts.join(', ');
200
- } else if (handlerResult && handlerResult.modes !== undefined) {
201
- // Kilo handler returns { success, modes, workflows, tasks, tools }
202
- const parts = [];
203
- if (handlerResult.modes > 0) parts.push(`${handlerResult.modes} modes`);
204
- if (handlerResult.workflows > 0) parts.push(`${handlerResult.workflows} workflows`);
205
- if (handlerResult.tasks > 0) parts.push(`${handlerResult.tasks} tasks`);
206
- if (handlerResult.tools > 0) parts.push(`${handlerResult.tools} tools`);
207
- detail = parts.join(', ');
208
170
  }
209
- return { success: true, ide: ideName, detail, handlerResult };
171
+ // Propagate handler's success status (default true for backward compat)
172
+ const success = handlerResult?.success !== false;
173
+ return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult };
210
174
  } catch (error) {
211
175
  await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
212
176
  return { success: false, ide: ideName, error: error.message };
@@ -20,8 +20,11 @@ platforms:
20
20
  category: ide
21
21
  description: "Google's AI development environment"
22
22
  installer:
23
- target_dir: .agent/workflows
23
+ legacy_targets:
24
+ - .agent/workflows
25
+ target_dir: .agent/skills
24
26
  template_type: antigravity
27
+ skill_format: true
25
28
 
26
29
  auggie:
27
30
  name: "Auggie"
@@ -29,8 +32,11 @@ platforms:
29
32
  category: cli
30
33
  description: "AI development tool"
31
34
  installer:
32
- target_dir: .augment/commands
35
+ legacy_targets:
36
+ - .augment/commands
37
+ target_dir: .augment/skills
33
38
  template_type: default
39
+ skill_format: true
34
40
 
35
41
  claude-code:
36
42
  name: "Claude Code"
@@ -38,8 +44,12 @@ platforms:
38
44
  category: cli
39
45
  description: "Anthropic's official CLI for Claude"
40
46
  installer:
41
- target_dir: .claude/commands
47
+ legacy_targets:
48
+ - .claude/commands
49
+ target_dir: .claude/skills
42
50
  template_type: default
51
+ skill_format: true
52
+ ancestor_conflict_check: true
43
53
 
44
54
  cline:
45
55
  name: "Cline"
@@ -47,15 +57,26 @@ platforms:
47
57
  category: ide
48
58
  description: "AI coding assistant"
49
59
  installer:
50
- target_dir: .clinerules/workflows
51
- template_type: windsurf
60
+ legacy_targets:
61
+ - .clinerules/workflows
62
+ target_dir: .cline/skills
63
+ template_type: default
64
+ skill_format: true
52
65
 
53
66
  codex:
54
67
  name: "Codex"
55
68
  preferred: false
56
69
  category: cli
57
70
  description: "OpenAI Codex integration"
58
- # No installer config - uses custom codex.js
71
+ installer:
72
+ legacy_targets:
73
+ - .codex/prompts
74
+ - ~/.codex/prompts
75
+ target_dir: .agents/skills
76
+ template_type: default
77
+ skill_format: true
78
+ ancestor_conflict_check: true
79
+ artifact_types: [agents, workflows, tasks]
59
80
 
60
81
  codebuddy:
61
82
  name: "CodeBuddy"
@@ -63,8 +84,11 @@ platforms:
63
84
  category: ide
64
85
  description: "Tencent Cloud Code Assistant - AI-powered coding companion"
65
86
  installer:
66
- target_dir: .codebuddy/commands
87
+ legacy_targets:
88
+ - .codebuddy/commands
89
+ target_dir: .codebuddy/skills
67
90
  template_type: default
91
+ skill_format: true
68
92
 
69
93
  crush:
70
94
  name: "Crush"
@@ -72,8 +96,11 @@ platforms:
72
96
  category: ide
73
97
  description: "AI development assistant"
74
98
  installer:
75
- target_dir: .crush/commands
99
+ legacy_targets:
100
+ - .crush/commands
101
+ target_dir: .crush/skills
76
102
  template_type: default
103
+ skill_format: true
77
104
 
78
105
  cursor:
79
106
  name: "Cursor"
@@ -81,8 +108,11 @@ platforms:
81
108
  category: ide
82
109
  description: "AI-first code editor"
83
110
  installer:
84
- target_dir: .cursor/commands
111
+ legacy_targets:
112
+ - .cursor/commands
113
+ target_dir: .cursor/skills
85
114
  template_type: default
115
+ skill_format: true
86
116
 
87
117
  gemini:
88
118
  name: "Gemini CLI"
@@ -90,15 +120,24 @@ platforms:
90
120
  category: cli
91
121
  description: "Google's CLI for Gemini"
92
122
  installer:
93
- target_dir: .gemini/commands
94
- template_type: gemini
123
+ legacy_targets:
124
+ - .gemini/commands
125
+ target_dir: .gemini/skills
126
+ template_type: default
127
+ skill_format: true
95
128
 
96
129
  github-copilot:
97
130
  name: "GitHub Copilot"
98
131
  preferred: false
99
132
  category: ide
100
133
  description: "GitHub's AI pair programmer"
101
- # No installer config - uses custom github-copilot.js
134
+ installer:
135
+ legacy_targets:
136
+ - .github/agents
137
+ - .github/prompts
138
+ target_dir: .github/skills
139
+ template_type: default
140
+ skill_format: true
102
141
 
103
142
  iflow:
104
143
  name: "iFlow"
@@ -106,15 +145,24 @@ platforms:
106
145
  category: ide
107
146
  description: "AI workflow automation"
108
147
  installer:
109
- target_dir: .iflow/commands
148
+ legacy_targets:
149
+ - .iflow/commands
150
+ target_dir: .iflow/skills
110
151
  template_type: default
152
+ skill_format: true
111
153
 
112
154
  kilo:
113
155
  name: "KiloCoder"
114
156
  preferred: false
115
157
  category: ide
116
158
  description: "AI coding platform"
117
- # No installer config - uses custom kilo.js (creates .kilocodemodes file)
159
+ suspended: "Kilo Code does not yet support the Agent Skills standard. Support is paused until they implement it. See https://github.com/kilocode/kilo-code/issues for updates."
160
+ installer:
161
+ legacy_targets:
162
+ - .kilocode/workflows
163
+ target_dir: .kilocode/skills
164
+ template_type: default
165
+ skill_format: true
118
166
 
119
167
  kiro:
120
168
  name: "Kiro"
@@ -122,8 +170,11 @@ platforms:
122
170
  category: ide
123
171
  description: "Amazon's AI-powered IDE"
124
172
  installer:
125
- target_dir: .kiro/steering
173
+ legacy_targets:
174
+ - .kiro/steering
175
+ target_dir: .kiro/skills
126
176
  template_type: kiro
177
+ skill_format: true
127
178
 
128
179
  opencode:
129
180
  name: "OpenCode"
@@ -131,13 +182,25 @@ platforms:
131
182
  category: ide
132
183
  description: "OpenCode terminal coding assistant"
133
184
  installer:
134
- targets:
135
- - target_dir: .opencode/agent
136
- template_type: opencode
137
- artifact_types: [agents]
138
- - target_dir: .opencode/command
139
- template_type: opencode
140
- artifact_types: [workflows, tasks, tools]
185
+ legacy_targets:
186
+ - .opencode/agents
187
+ - .opencode/commands
188
+ - .opencode/agent
189
+ - .opencode/command
190
+ target_dir: .opencode/skills
191
+ template_type: opencode
192
+ skill_format: true
193
+ ancestor_conflict_check: true
194
+
195
+ pi:
196
+ name: "Pi"
197
+ preferred: false
198
+ category: cli
199
+ description: "Provider-agnostic terminal-native AI coding agent"
200
+ installer:
201
+ target_dir: .pi/skills
202
+ template_type: default
203
+ skill_format: true
141
204
 
142
205
  qwen:
143
206
  name: "QwenCoder"
@@ -145,24 +208,35 @@ platforms:
145
208
  category: ide
146
209
  description: "Qwen AI coding assistant"
147
210
  installer:
148
- target_dir: .qwen/commands
211
+ legacy_targets:
212
+ - .qwen/commands
213
+ target_dir: .qwen/skills
149
214
  template_type: default
215
+ skill_format: true
150
216
 
151
217
  roo:
152
- name: "Roo Cline"
218
+ name: "Roo Code"
153
219
  preferred: false
154
220
  category: ide
155
221
  description: "Enhanced Cline fork"
156
222
  installer:
157
- target_dir: .roo/commands
223
+ legacy_targets:
224
+ - .roo/commands
225
+ target_dir: .roo/skills
158
226
  template_type: default
227
+ skill_format: true
159
228
 
160
229
  rovo-dev:
161
230
  name: "Rovo Dev"
162
231
  preferred: false
163
232
  category: ide
164
233
  description: "Atlassian's Rovo development environment"
165
- # No installer config - uses custom rovodev.js (generates prompts.yml manifest)
234
+ installer:
235
+ legacy_targets:
236
+ - .rovodev/workflows
237
+ target_dir: .rovodev/skills
238
+ template_type: default
239
+ skill_format: true
166
240
 
167
241
  trae:
168
242
  name: "Trae"
@@ -170,8 +244,11 @@ platforms:
170
244
  category: ide
171
245
  description: "AI coding tool"
172
246
  installer:
173
- target_dir: .trae/rules
174
- template_type: trae
247
+ legacy_targets:
248
+ - .trae/rules
249
+ target_dir: .trae/skills
250
+ template_type: default
251
+ skill_format: true
175
252
 
176
253
  windsurf:
177
254
  name: "Windsurf"
@@ -179,8 +256,11 @@ platforms:
179
256
  category: ide
180
257
  description: "AI-powered IDE with cascade flows"
181
258
  installer:
182
- target_dir: .windsurf/workflows
259
+ legacy_targets:
260
+ - .windsurf/workflows
261
+ target_dir: .windsurf/skills
183
262
  template_type: windsurf
263
+ skill_format: true
184
264
 
185
265
  # ============================================================================
186
266
  # Installer Config Schema
@@ -191,12 +271,19 @@ platforms:
191
271
  # template_type: string # Default template type to use
192
272
  # header_template: string (optional) # Override for header/frontmatter template
193
273
  # body_template: string (optional) # Override for body/content template
274
+ # legacy_targets: array (optional) # Old target dirs to clean up on reinstall (migration)
275
+ # - string # Relative path, e.g. .opencode/agent
194
276
  # targets: array (optional) # For multi-target installations
195
277
  # - target_dir: string
196
278
  # template_type: string
197
279
  # artifact_types: [agents, workflows, tasks, tools]
198
280
  # artifact_types: array (optional) # Filter which artifacts to install (default: all)
199
281
  # skip_existing: boolean (optional) # Skip files that already exist (default: false)
282
+ # skill_format: boolean (optional) # Use directory-per-skill output: <name>/SKILL.md
283
+ # # with clean frontmatter (name + description, unquoted)
284
+ # ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has BMAD files
285
+ # # in the same target_dir (for IDEs that inherit
286
+ # # skills from parent directories)
200
287
 
201
288
  # ============================================================================
202
289
  # Platform Categories
@@ -47,6 +47,7 @@ class AgentCommandGenerator {
47
47
  name: agent.name,
48
48
  description: agent.description || `${agent.name} agent`,
49
49
  module: agent.module,
50
+ canonicalId: agent.canonicalId || '',
50
51
  relativePath: path.join(agent.module, 'agents', agentPathInModule), // For command filename
51
52
  agentPath: agentRelPath, // Relative path to actual agent file
52
53
  content: launcherContent,
@@ -1,5 +1,6 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
+ const { loadSkillManifest, getCanonicalId } = require('./skill-manifest');
3
4
 
4
5
  /**
5
6
  * Helpers for gathering BMAD agents/tasks from the installed tree.
@@ -34,6 +35,7 @@ async function getAgentsFromBmad(bmadDir, selectedModules = []) {
34
35
 
35
36
  const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
36
37
  const agentFiles = await fs.readdir(agentDirPath);
38
+ const skillManifest = await loadSkillManifest(agentDirPath);
37
39
 
38
40
  for (const file of agentFiles) {
39
41
  if (!file.endsWith('.md')) continue;
@@ -48,6 +50,7 @@ async function getAgentsFromBmad(bmadDir, selectedModules = []) {
48
50
  path: filePath,
49
51
  name: file.replace('.md', ''),
50
52
  module: 'standalone', // Mark as standalone agent
53
+ canonicalId: getCanonicalId(skillManifest, file),
51
54
  });
52
55
  }
53
56
  }
@@ -84,6 +87,7 @@ async function getAgentsFromDir(dirPath, moduleName, relativePath = '') {
84
87
  }
85
88
 
86
89
  const entries = await fs.readdir(dirPath, { withFileTypes: true });
90
+ const skillManifest = await loadSkillManifest(dirPath);
87
91
 
88
92
  for (const entry of entries) {
89
93
  // Skip if entry.name is undefined or not a string
@@ -124,6 +128,7 @@ async function getAgentsFromDir(dirPath, moduleName, relativePath = '') {
124
128
  name: entry.name.replace('.md', ''),
125
129
  module: moduleName,
126
130
  relativePath: newRelativePath, // Keep the .md extension for the full path
131
+ canonicalId: getCanonicalId(skillManifest, entry.name),
127
132
  });
128
133
  }
129
134
  }
@@ -139,6 +144,7 @@ async function getTasksFromDir(dirPath, moduleName) {
139
144
  }
140
145
 
141
146
  const files = await fs.readdir(dirPath);
147
+ const skillManifest = await loadSkillManifest(dirPath);
142
148
 
143
149
  for (const file of files) {
144
150
  // Include both .md and .xml task files
@@ -160,6 +166,7 @@ async function getTasksFromDir(dirPath, moduleName) {
160
166
  path: filePath,
161
167
  name: file.replace(ext, ''),
162
168
  module: moduleName,
169
+ canonicalId: getCanonicalId(skillManifest, file),
163
170
  });
164
171
  }
165
172
 
@@ -12,6 +12,7 @@
12
12
  * - bmm/workflows/plan-project.md → bmad-bmm-plan-project.md
13
13
  * - bmm/tasks/create-story.md → bmad-bmm-create-story.md
14
14
  * - core/agents/brainstorming.md → bmad-agent-brainstorming.md (core agents skip module name)
15
+ * - standalone/agents/fred.md → bmad-agent-standalone-fred.md
15
16
  */
16
17
 
17
18
  // Type segments - agents are included in naming, others are filtered out
@@ -26,8 +27,9 @@ const BMAD_FOLDER_NAME = '_bmad';
26
27
  * Converts: 'bmm', 'agents', 'pm' → 'bmad-agent-bmm-pm.md'
27
28
  * Converts: 'bmm', 'workflows', 'correct-course' → 'bmad-bmm-correct-course.md'
28
29
  * Converts: 'core', 'agents', 'brainstorming' → 'bmad-agent-brainstorming.md' (core agents skip module name)
30
+ * Converts: 'standalone', 'agents', 'fred' → 'bmad-agent-standalone-fred.md'
29
31
  *
30
- * @param {string} module - Module name (e.g., 'bmm', 'core')
32
+ * @param {string} module - Module name (e.g., 'bmm', 'core', 'standalone')
31
33
  * @param {string} type - Artifact type ('agents', 'workflows', 'tasks', 'tools')
32
34
  * @param {string} name - Artifact name (e.g., 'pm', 'brainstorming')
33
35
  * @returns {string} Flat filename like 'bmad-agent-bmm-pm.md' or 'bmad-bmm-correct-course.md'
@@ -39,6 +41,10 @@ function toDashName(module, type, name) {
39
41
  if (module === 'core') {
40
42
  return isAgent ? `bmad-agent-${name}.md` : `bmad-${name}.md`;
41
43
  }
44
+ // For standalone module, include 'standalone' in the name
45
+ if (module === 'standalone') {
46
+ return isAgent ? `bmad-agent-standalone-${name}.md` : `bmad-standalone-${name}.md`;
47
+ }
42
48
 
43
49
  // Module artifacts: bmad-module-name.md or bmad-agent-module-name.md
44
50
  // eslint-disable-next-line unicorn/prefer-string-replace-all -- regex replace is intentional here
@@ -63,7 +69,7 @@ function toDashPath(relativePath) {
63
69
  }
64
70
 
65
71
  // Strip common file extensions to avoid double extensions in generated filenames
66
- // e.g., 'create-story.xml' → 'create-story', 'workflow.yaml' → 'workflow'
72
+ // e.g., 'create-story.xml' → 'create-story', 'workflow.md' → 'workflow'
67
73
  const withoutExt = relativePath.replace(/\.(md|yaml|yml|json|xml|toml)$/i, '');
68
74
  const parts = withoutExt.split(/[/\\]/);
69
75
 
@@ -110,6 +116,8 @@ function isDashFormat(filename) {
110
116
  * Parses: 'bmad-bmm-correct-course.md' → { prefix: 'bmad', module: 'bmm', type: 'workflows', name: 'correct-course' }
111
117
  * Parses: 'bmad-agent-brainstorming.md' → { prefix: 'bmad', module: 'core', type: 'agents', name: 'brainstorming' } (core agents)
112
118
  * Parses: 'bmad-brainstorming.md' → { prefix: 'bmad', module: 'core', type: 'workflows', name: 'brainstorming' } (core workflows)
119
+ * Parses: 'bmad-agent-standalone-fred.md' → { prefix: 'bmad', module: 'standalone', type: 'agents', name: 'fred' }
120
+ * Parses: 'bmad-standalone-foo.md' → { prefix: 'bmad', module: 'standalone', type: 'workflows', name: 'foo' }
113
121
  *
114
122
  * @param {string} filename - Dash-formatted filename
115
123
  * @returns {Object|null} Parsed parts or null if invalid format
@@ -127,7 +135,16 @@ function parseDashName(filename) {
127
135
 
128
136
  if (isAgent) {
129
137
  // This is an agent file
130
- // Format: bmad-agent-name (core) or bmad-agent-module-name
138
+ // Format: bmad-agent-name (core) or bmad-agent-standalone-name or bmad-agent-module-name
139
+ if (parts.length >= 4 && parts[2] === 'standalone') {
140
+ // Standalone agent: bmad-agent-standalone-name
141
+ return {
142
+ prefix: parts[0],
143
+ module: 'standalone',
144
+ type: 'agents',
145
+ name: parts.slice(3).join('-'),
146
+ };
147
+ }
131
148
  if (parts.length === 3) {
132
149
  // Core agent: bmad-agent-name
133
150
  return {
@@ -158,6 +175,16 @@ function parseDashName(filename) {
158
175
  };
159
176
  }
160
177
 
178
+ // Check for standalone non-agent: bmad-standalone-name
179
+ if (parts[1] === 'standalone') {
180
+ return {
181
+ prefix: parts[0],
182
+ module: 'standalone',
183
+ type: 'workflows', // Default to workflows for non-agent standalone items
184
+ name: parts.slice(2).join('-'),
185
+ };
186
+ }
187
+
161
188
  // Otherwise, it's a module workflow/tool/task (bmad-module-name)
162
189
  return {
163
190
  prefix: parts[0],
@@ -180,6 +207,9 @@ function toUnderscoreName(module, type, name) {
180
207
  if (module === 'core') {
181
208
  return isAgent ? `bmad_agent_${name}.md` : `bmad_${name}.md`;
182
209
  }
210
+ if (module === 'standalone') {
211
+ return isAgent ? `bmad_agent_standalone_${name}.md` : `bmad_standalone_${name}.md`;
212
+ }
183
213
  return isAgent ? `bmad_${module}_agent_${name}.md` : `bmad_${module}_${name}.md`;
184
214
  }
185
215
 
@@ -231,6 +261,15 @@ function parseUnderscoreName(filename) {
231
261
 
232
262
  if (agentIndex !== -1) {
233
263
  if (agentIndex === 1) {
264
+ // bmad_agent_... - check for standalone
265
+ if (parts.length >= 4 && parts[2] === 'standalone') {
266
+ return {
267
+ prefix: parts[0],
268
+ module: 'standalone',
269
+ type: 'agents',
270
+ name: parts.slice(3).join('_'),
271
+ };
272
+ }
234
273
  return {
235
274
  prefix: parts[0],
236
275
  module: 'core',
@@ -256,6 +295,16 @@ function parseUnderscoreName(filename) {
256
295
  };
257
296
  }
258
297
 
298
+ // Check for standalone non-agent: bmad_standalone_name
299
+ if (parts[1] === 'standalone') {
300
+ return {
301
+ prefix: parts[0],
302
+ module: 'standalone',
303
+ type: 'workflows',
304
+ name: parts.slice(2).join('_'),
305
+ };
306
+ }
307
+
259
308
  return {
260
309
  prefix: parts[0],
261
310
  module: parts[1],
@@ -264,6 +313,21 @@ function parseUnderscoreName(filename) {
264
313
  };
265
314
  }
266
315
 
316
+ /**
317
+ * Resolve the skill name for an artifact.
318
+ * Prefers canonicalId from a bmad-skill-manifest.yaml sidecar when available,
319
+ * falling back to the path-derived name from toDashPath().
320
+ *
321
+ * @param {Object} artifact - Artifact object (must have relativePath; may have canonicalId)
322
+ * @returns {string} Filename like 'bmad-create-prd.md' or 'bmad-agent-bmm-pm.md'
323
+ */
324
+ function resolveSkillName(artifact) {
325
+ if (artifact.canonicalId) {
326
+ return `${artifact.canonicalId}.md`;
327
+ }
328
+ return toDashPath(artifact.relativePath);
329
+ }
330
+
267
331
  // Backward compatibility aliases (colon format was same as underscore)
268
332
  const toColonName = toUnderscoreName;
269
333
  const toColonPath = toUnderscorePath;
@@ -275,6 +339,7 @@ module.exports = {
275
339
  // New standard (dash-based)
276
340
  toDashName,
277
341
  toDashPath,
342
+ resolveSkillName,
278
343
  customAgentDashName,
279
344
  isDashFormat,
280
345
  parseDashName,