bmalph 2.7.7 → 2.9.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 (502) hide show
  1. package/README.md +51 -28
  2. package/bmad/bmm/agents/analyst.agent.yaml +6 -6
  3. package/bmad/bmm/agents/architect.agent.yaml +2 -2
  4. package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
  5. package/bmad/bmm/agents/dev.agent.yaml +2 -2
  6. package/bmad/bmm/agents/pm.agent.yaml +6 -6
  7. package/bmad/bmm/agents/qa.agent.yaml +1 -1
  8. package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
  9. package/bmad/bmm/agents/sm.agent.yaml +4 -4
  10. package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  11. package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  12. package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
  13. package/bmad/bmm/module-help.csv +26 -25
  14. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
  15. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
  16. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
  17. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
  18. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
  19. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
  20. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
  21. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
  22. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
  23. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
  24. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
  25. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
  26. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
  27. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
  28. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
  29. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
  30. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
  31. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
  32. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
  33. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
  34. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
  35. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
  36. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
  37. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
  38. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
  39. package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
  40. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
  41. package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
  42. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
  43. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
  44. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
  45. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
  46. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  47. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  48. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  49. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  50. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
  51. package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
  52. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
  53. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
  54. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
  55. package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
  56. package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
  57. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
  58. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
  59. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
  60. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
  61. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
  62. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
  63. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
  64. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
  65. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
  66. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
  67. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
  68. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
  69. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
  70. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
  71. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
  72. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
  73. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
  74. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
  75. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
  76. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
  77. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
  78. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
  79. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
  80. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
  81. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
  82. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
  83. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
  84. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
  85. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
  86. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
  87. package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
  88. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
  89. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
  90. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
  91. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
  92. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
  93. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  94. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  95. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  96. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  97. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  98. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  99. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  100. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  101. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  102. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  103. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  104. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  105. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  106. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  107. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
  108. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
  109. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  110. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
  111. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
  112. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
  113. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
  114. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
  115. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
  116. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
  117. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
  118. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
  119. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
  120. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
  121. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
  122. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
  123. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
  124. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
  125. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
  126. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
  127. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
  128. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
  129. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
  130. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
  131. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
  132. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
  133. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
  134. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
  135. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
  136. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
  137. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
  138. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
  139. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
  140. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
  141. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
  142. package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
  143. package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
  144. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
  145. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
  146. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
  147. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
  148. package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
  149. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
  150. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
  151. package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
  152. package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
  153. package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
  154. package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
  155. package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
  156. package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
  157. package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
  158. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
  159. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
  160. package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
  161. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
  162. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
  163. package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
  164. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
  165. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
  166. package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
  167. package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
  168. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
  169. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
  170. package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
  171. package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
  172. package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
  173. package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
  174. package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
  175. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
  176. package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  177. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
  178. package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  179. package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
  180. package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
  181. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
  182. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
  183. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
  184. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  185. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
  186. package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
  187. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
  188. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
  189. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
  190. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
  191. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
  192. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
  193. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
  194. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
  195. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
  196. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  197. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  198. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
  199. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
  200. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
  201. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
  202. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
  203. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  204. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
  205. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
  206. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
  207. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
  208. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
  209. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
  210. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
  211. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
  212. package/bmad/core/module-help.csv +10 -8
  213. package/bmad/core/module.yaml +1 -1
  214. package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
  215. package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
  216. package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
  217. package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
  218. package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
  219. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
  220. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
  221. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
  222. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
  223. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
  224. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
  225. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
  226. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
  227. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
  228. package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
  229. package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
  230. package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
  231. package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
  232. package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
  233. package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
  234. package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
  235. package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
  236. package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
  237. package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
  238. package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
  239. package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
  240. package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
  241. package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
  242. package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
  243. package/bmad/core/skills/bmad-help/SKILL.md +6 -0
  244. package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
  245. package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
  246. package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
  247. package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
  248. package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
  249. package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
  250. package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
  251. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
  252. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
  253. package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
  254. package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  255. package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
  256. package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
  257. package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  258. package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
  259. package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
  260. package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
  261. package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
  262. package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
  263. package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
  264. package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
  265. package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
  266. package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
  267. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
  268. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
  269. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
  270. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
  271. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
  272. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
  273. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
  274. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
  275. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
  276. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
  277. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
  278. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
  279. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
  280. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
  281. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
  282. package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
  283. package/bundled-versions.json +1 -1
  284. package/dist/cli.js +3 -2
  285. package/dist/commands/doctor-checks.js +15 -6
  286. package/dist/commands/doctor-health-checks.js +2 -1
  287. package/dist/commands/doctor.js +13 -4
  288. package/dist/commands/init.js +15 -3
  289. package/dist/commands/reset.js +1 -1
  290. package/dist/commands/run.js +36 -1
  291. package/dist/commands/status.js +3 -11
  292. package/dist/commands/upgrade.js +1 -1
  293. package/dist/installer/commands.js +33 -15
  294. package/dist/installer/install.js +1 -1
  295. package/dist/installer/metadata.js +1 -1
  296. package/dist/installer/project-files.js +5 -6
  297. package/dist/installer/ralph-assets.js +8 -0
  298. package/dist/installer/template-files.js +85 -13
  299. package/dist/platform/codex.js +6 -1
  300. package/dist/platform/detect.js +7 -3
  301. package/dist/platform/doctor-checks.js +2 -2
  302. package/dist/platform/guidance.js +66 -0
  303. package/dist/platform/instructions-snippet.js +15 -0
  304. package/dist/platform/opencode.js +20 -0
  305. package/dist/platform/registry.js +2 -0
  306. package/dist/platform/types.js +1 -0
  307. package/dist/reset.js +4 -5
  308. package/dist/run/ralph-process.js +59 -10
  309. package/dist/run/run-dashboard.js +10 -9
  310. package/dist/transition/artifact-scan.js +16 -10
  311. package/dist/transition/context.js +1 -1
  312. package/dist/utils/constants.js +26 -2
  313. package/dist/utils/github.js +4 -3
  314. package/dist/utils/ralph-runtime-state.js +3 -13
  315. package/dist/utils/validate.js +4 -10
  316. package/dist/watch/dashboard.js +17 -5
  317. package/dist/watch/renderer.js +31 -6
  318. package/dist/watch/state-reader.js +20 -1
  319. package/package.json +8 -2
  320. package/ralph/drivers/opencode.sh +147 -0
  321. package/ralph/lib/response_analyzer.sh +227 -78
  322. package/ralph/lib/wizard_utils.sh +4 -4
  323. package/ralph/ralph_loop.sh +508 -4
  324. package/ralph/templates/PROMPT.md +12 -0
  325. package/ralph/templates/REVIEW_PROMPT.md +60 -0
  326. package/ralph/templates/ralphrc.template +41 -2
  327. package/slash-commands/advanced-elicitation.md +1 -1
  328. package/slash-commands/adversarial-review.md +1 -1
  329. package/slash-commands/bmad-help.md +1 -1
  330. package/slash-commands/bmalph.md +1 -1
  331. package/slash-commands/brainstorm-project.md +1 -1
  332. package/slash-commands/brainstorming.md +1 -1
  333. package/slash-commands/correct-course.md +1 -1
  334. package/slash-commands/create-architecture.md +1 -1
  335. package/slash-commands/create-brief.md +1 -1
  336. package/slash-commands/create-epics-stories.md +1 -1
  337. package/slash-commands/create-prd.md +1 -1
  338. package/slash-commands/create-story.md +1 -1
  339. package/slash-commands/create-ux.md +1 -1
  340. package/slash-commands/distillator.md +1 -0
  341. package/slash-commands/document-project.md +1 -1
  342. package/slash-commands/domain-research.md +1 -1
  343. package/slash-commands/edge-case-hunter.md +1 -0
  344. package/slash-commands/edit-prd.md +1 -0
  345. package/slash-commands/editorial-prose.md +1 -1
  346. package/slash-commands/editorial-structure.md +1 -1
  347. package/slash-commands/generate-project-context.md +1 -1
  348. package/slash-commands/implementation-readiness.md +1 -1
  349. package/slash-commands/index-docs.md +1 -1
  350. package/slash-commands/market-research.md +1 -1
  351. package/slash-commands/party-mode.md +1 -1
  352. package/slash-commands/qa-automate.md +1 -1
  353. package/slash-commands/quick-dev-new.md +1 -0
  354. package/slash-commands/quick-dev.md +1 -1
  355. package/slash-commands/retrospective.md +1 -1
  356. package/slash-commands/shard-doc.md +1 -1
  357. package/slash-commands/sprint-planning.md +1 -1
  358. package/slash-commands/sprint-status.md +1 -1
  359. package/slash-commands/tech-spec.md +1 -1
  360. package/slash-commands/technical-research.md +1 -1
  361. package/slash-commands/validate-architecture.md +1 -1
  362. package/slash-commands/validate-brief.md +1 -1
  363. package/slash-commands/validate-epics-stories.md +1 -1
  364. package/slash-commands/validate-prd.md +1 -1
  365. package/slash-commands/validate-story.md +1 -1
  366. package/slash-commands/validate-ux.md +1 -1
  367. package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
  368. package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  369. package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
  370. package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
  371. package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  372. package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
  373. package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
  374. package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
  375. package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  376. package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  377. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
  378. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  379. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  380. package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
  381. package/bmad/core/agents/bmad-master.agent.yaml +0 -30
  382. package/bmad/core/tasks/editorial-review-prose.xml +0 -102
  383. package/bmad/core/tasks/editorial-review-structure.xml +0 -209
  384. package/bmad/core/tasks/index-docs.xml +0 -65
  385. package/bmad/core/tasks/review-adversarial-general.xml +0 -48
  386. package/bmad/core/tasks/shard-doc.xml +0 -108
  387. package/bmad/core/tasks/workflow.xml +0 -235
  388. package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
  389. package/dist/cli.js.map +0 -1
  390. package/dist/commands/check-updates.js.map +0 -1
  391. package/dist/commands/doctor-checks.js.map +0 -1
  392. package/dist/commands/doctor-health-checks.js.map +0 -1
  393. package/dist/commands/doctor-runtime-checks.js.map +0 -1
  394. package/dist/commands/doctor.js.map +0 -1
  395. package/dist/commands/implement.js.map +0 -1
  396. package/dist/commands/init.js.map +0 -1
  397. package/dist/commands/reset.js.map +0 -1
  398. package/dist/commands/run.js.map +0 -1
  399. package/dist/commands/status.js.map +0 -1
  400. package/dist/commands/upgrade.js.map +0 -1
  401. package/dist/commands/watch.js.map +0 -1
  402. package/dist/installer/bmad-assets.js.map +0 -1
  403. package/dist/installer/commands.js.map +0 -1
  404. package/dist/installer/install.js.map +0 -1
  405. package/dist/installer/metadata.js.map +0 -1
  406. package/dist/installer/project-files.js.map +0 -1
  407. package/dist/installer/ralph-assets.js.map +0 -1
  408. package/dist/installer/template-files.js.map +0 -1
  409. package/dist/installer/types.js.map +0 -1
  410. package/dist/installer.js.map +0 -1
  411. package/dist/platform/aider.js.map +0 -1
  412. package/dist/platform/claude-code.js.map +0 -1
  413. package/dist/platform/codex.js.map +0 -1
  414. package/dist/platform/copilot.js.map +0 -1
  415. package/dist/platform/cursor-runtime-checks.js.map +0 -1
  416. package/dist/platform/cursor.js.map +0 -1
  417. package/dist/platform/detect.js.map +0 -1
  418. package/dist/platform/doctor-checks.js.map +0 -1
  419. package/dist/platform/instructions-snippet.js.map +0 -1
  420. package/dist/platform/registry.js.map +0 -1
  421. package/dist/platform/resolve.js.map +0 -1
  422. package/dist/platform/types.js.map +0 -1
  423. package/dist/platform/windsurf.js.map +0 -1
  424. package/dist/reset.js.map +0 -1
  425. package/dist/run/ralph-process.js.map +0 -1
  426. package/dist/run/run-dashboard.js.map +0 -1
  427. package/dist/run/types.js.map +0 -1
  428. package/dist/transition/artifact-collection.js.map +0 -1
  429. package/dist/transition/artifact-loading.js.map +0 -1
  430. package/dist/transition/artifact-scan.js.map +0 -1
  431. package/dist/transition/artifacts.js.map +0 -1
  432. package/dist/transition/context-output.js.map +0 -1
  433. package/dist/transition/context.js.map +0 -1
  434. package/dist/transition/fix-plan-sync.js.map +0 -1
  435. package/dist/transition/fix-plan.js.map +0 -1
  436. package/dist/transition/index.js.map +0 -1
  437. package/dist/transition/orchestration.js.map +0 -1
  438. package/dist/transition/preflight.js.map +0 -1
  439. package/dist/transition/section-patterns.js.map +0 -1
  440. package/dist/transition/specs-changelog.js.map +0 -1
  441. package/dist/transition/specs-index.js.map +0 -1
  442. package/dist/transition/specs-sync.js.map +0 -1
  443. package/dist/transition/sprint-status.js.map +0 -1
  444. package/dist/transition/story-id.js.map +0 -1
  445. package/dist/transition/story-parsing.js.map +0 -1
  446. package/dist/transition/tech-stack.js.map +0 -1
  447. package/dist/transition/types.js.map +0 -1
  448. package/dist/utils/artifact-definitions.js.map +0 -1
  449. package/dist/utils/config.js.map +0 -1
  450. package/dist/utils/constants.js.map +0 -1
  451. package/dist/utils/dryrun.js.map +0 -1
  452. package/dist/utils/errors.js.map +0 -1
  453. package/dist/utils/file-system.js.map +0 -1
  454. package/dist/utils/format-status.js.map +0 -1
  455. package/dist/utils/github.js.map +0 -1
  456. package/dist/utils/json.js.map +0 -1
  457. package/dist/utils/logger.js.map +0 -1
  458. package/dist/utils/ralph-runtime-state.js.map +0 -1
  459. package/dist/utils/state.js.map +0 -1
  460. package/dist/utils/validate.js.map +0 -1
  461. package/dist/watch/dashboard.js.map +0 -1
  462. package/dist/watch/file-watcher.js.map +0 -1
  463. package/dist/watch/frame-writer.js.map +0 -1
  464. package/dist/watch/renderer.js.map +0 -1
  465. package/dist/watch/state-reader.js.map +0 -1
  466. package/dist/watch/types.js.map +0 -1
  467. package/slash-commands/execute-workflow.md +0 -1
  468. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
  469. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
  470. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
  471. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
  472. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
  473. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
  474. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
  475. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
  476. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
  477. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
  478. /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
  479. /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
  480. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
  481. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
  482. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
  483. /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
  484. /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
  485. /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
  486. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
  487. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
  488. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
  489. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
  490. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
  491. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
  492. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
  493. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
  494. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
  495. /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
  496. /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
  497. /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
  498. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
  499. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
  500. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
  501. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
  502. /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
@@ -1,5 +1,6 @@
1
1
  import chalk from "chalk";
2
- import { select, input } from "@inquirer/prompts";
2
+ import select from "@inquirer/select";
3
+ import input from "@inquirer/input";
3
4
  import { writeConfig } from "../utils/config.js";
4
5
  import { installProject, mergeInstructionsFile, isInitialized, previewInstall, getBundledVersions, } from "../installer.js";
5
6
  import { formatDryRunSummary } from "../utils/dryrun.js";
@@ -9,6 +10,8 @@ import { exists } from "../utils/file-system.js";
9
10
  import { join } from "node:path";
10
11
  import { isPlatformId, getPlatform, getAllPlatforms } from "../platform/registry.js";
11
12
  import { detectPlatform } from "../platform/detect.js";
13
+ import { getPlatformMasterAgentHint } from "../platform/guidance.js";
14
+ import { PLATFORM_IDS } from "../platform/types.js";
12
15
  export async function initCommand(options) {
13
16
  await withErrorHandling(() => runInit(options));
14
17
  }
@@ -23,8 +26,7 @@ async function resolvePlatform(projectDir, explicit) {
23
26
  // 1. Explicit flag
24
27
  if (explicit) {
25
28
  if (!isPlatformId(explicit)) {
26
- throw new Error(`Unknown platform: "${explicit}". ` +
27
- `Valid platforms: claude-code, codex, cursor, windsurf, copilot, aider`);
29
+ throw new Error(`Unknown platform: "${explicit}". ` + `Valid platforms: ${PLATFORM_IDS.join(", ")}`);
28
30
  }
29
31
  return getPlatform(explicit);
30
32
  }
@@ -100,6 +102,7 @@ async function runInit(options) {
100
102
  const bundledVersions = await getBundledVersions();
101
103
  const config = {
102
104
  name: validatedName,
105
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive against future refactors
103
106
  description: description ?? "",
104
107
  createdAt: new Date().toISOString(),
105
108
  platform: platform.id,
@@ -125,12 +128,21 @@ async function runInit(options) {
125
128
  if (platform.commandDelivery.kind === "directory") {
126
129
  console.log(` ${platform.commandDelivery.dir}/ Slash commands`);
127
130
  }
131
+ else if (platform.commandDelivery.kind === "skills") {
132
+ console.log(` ${platform.commandDelivery.dir}/ BMAD skills`);
133
+ }
128
134
  console.log(` bmalph/ State management`);
129
135
  // Platform-specific next step guidance
130
136
  console.log(`\nNext step:`);
131
137
  if (platform.id === "claude-code") {
132
138
  console.log(` Use ${chalk.cyan("/bmalph")} in Claude Code to see your current phase and commands.`);
133
139
  }
140
+ else if (platform.id === "opencode") {
141
+ console.log(` ${getPlatformMasterAgentHint(platform)}.`);
142
+ }
143
+ else if (platform.id === "codex") {
144
+ console.log(` ${getPlatformMasterAgentHint(platform)}.`);
145
+ }
134
146
  else if (platform.tier === "full") {
135
147
  console.log(` Ask ${platform.displayName} to ${chalk.cyan("run the BMAD master agent")} to navigate phases.`);
136
148
  }
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import { confirm } from "@inquirer/prompts";
2
+ import confirm from "@inquirer/confirm";
3
3
  import { isInitialized } from "../installer.js";
4
4
  import { buildResetPlan, executeResetPlan, planToDryRunActions } from "../reset.js";
5
5
  import { formatDryRunSummary } from "../utils/dryrun.js";
@@ -24,6 +24,10 @@ async function executeRun(options) {
24
24
  if (platform.experimental) {
25
25
  console.log(chalk.yellow(`Warning: ${platform.displayName} support is experimental`));
26
26
  }
27
+ const reviewEnabled = await resolveReviewMode(options.review, platform);
28
+ if (reviewEnabled) {
29
+ console.log(chalk.cyan("Enhanced mode: code review every 5 implementation loops"));
30
+ }
27
31
  const interval = parseInterval(options.interval);
28
32
  let useDashboard = dashboard;
29
33
  if (useDashboard) {
@@ -39,9 +43,10 @@ async function executeRun(options) {
39
43
  }
40
44
  const ralph = spawnRalphLoop(projectDir, platform.id, {
41
45
  inheritStdio: !useDashboard,
46
+ ...(reviewEnabled && { reviewEnabled }),
42
47
  });
43
48
  if (useDashboard) {
44
- await startRunDashboard({ projectDir, interval, ralph });
49
+ await startRunDashboard({ projectDir, interval, ralph, reviewEnabled });
45
50
  if (ralph.state === "stopped") {
46
51
  applyRalphExitCode(ralph.exitCode);
47
52
  }
@@ -65,4 +70,34 @@ function resolvePlatform(driverOverride, configPlatform) {
65
70
  }
66
71
  return getPlatform(id);
67
72
  }
73
+ async function resolveReviewMode(reviewFlag, platform) {
74
+ if (reviewFlag === true) {
75
+ if (platform.id !== "claude-code") {
76
+ throw new Error("--review requires Claude Code (other drivers lack read-only enforcement)");
77
+ }
78
+ return true;
79
+ }
80
+ if (reviewFlag === false) {
81
+ return false;
82
+ }
83
+ if (platform.id !== "claude-code") {
84
+ return false;
85
+ }
86
+ if (!process.stdin.isTTY) {
87
+ return false;
88
+ }
89
+ const { default: select } = await import("@inquirer/select");
90
+ const mode = await select({
91
+ message: "Quality mode:",
92
+ choices: [
93
+ { name: "Standard — current behavior (no extra cost)", value: "standard" },
94
+ {
95
+ name: "Enhanced — periodic code review every 5 loops (~10-14% more tokens)",
96
+ value: "enhanced",
97
+ },
98
+ ],
99
+ default: "standard",
100
+ });
101
+ return mode === "enhanced";
102
+ }
68
103
  //# sourceMappingURL=run.js.map
@@ -6,10 +6,8 @@ import { formatStatus } from "../utils/format-status.js";
6
6
  import { ARTIFACT_DEFINITIONS } from "../utils/artifact-definitions.js";
7
7
  import { resolveProjectPlatform } from "../platform/resolve.js";
8
8
  import { getFullTierPlatformNames } from "../platform/registry.js";
9
+ import { getPlatformAnalysisHint, getPlatformPrdHint } from "../platform/guidance.js";
9
10
  import { scanProjectArtifacts } from "../transition/artifact-scan.js";
10
- function getCursorNextAction() {
11
- return "Read _bmad/COMMANDS.md and ask Cursor to run the BMAD master agent";
12
- }
13
11
  export async function statusCommand(options) {
14
12
  await withErrorHandling(() => runStatus(options));
15
13
  }
@@ -150,15 +148,9 @@ function getNextAction(phase, status, ralphStatus, platform) {
150
148
  }
151
149
  switch (phase) {
152
150
  case 1:
153
- if (platform.id === "cursor") {
154
- return getCursorNextAction();
155
- }
156
- return "Run /analyst to start analysis";
151
+ return getPlatformAnalysisHint(platform);
157
152
  case 2:
158
- if (platform.id === "cursor") {
159
- return getCursorNextAction();
160
- }
161
- return "Run /pm to create PRD";
153
+ return getPlatformPrdHint(platform);
162
154
  case 3:
163
155
  return "Run: bmalph implement";
164
156
  case 4:
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import { confirm } from "@inquirer/prompts";
2
+ import confirm from "@inquirer/confirm";
3
3
  import { isInitialized, copyBundledAssets, mergeInstructionsFile, previewUpgrade, getBundledVersions, } from "../installer.js";
4
4
  import { readConfig, writeConfig } from "../utils/config.js";
5
5
  import { formatDryRunSummary } from "../utils/dryrun.js";
@@ -2,7 +2,7 @@ import { cp, mkdir, readFile, readdir, rm } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { atomicWriteFile } from "../utils/file-system.js";
4
4
  import { isEnoent } from "../utils/errors.js";
5
- import { SKILLS_DIR, SKILLS_PREFIX } from "../utils/constants.js";
5
+ import { CODEX_SKILLS_DIR, SKILLS_PREFIX } from "../utils/constants.js";
6
6
  const AGENT_DESCRIPTIONS = {
7
7
  analyst: "Research, briefs, discovery",
8
8
  architect: "Technical design, architecture",
@@ -177,17 +177,27 @@ export async function classifyCommands(projectDir, slashCmdsDir) {
177
177
  continue;
178
178
  }
179
179
  // Classify: workflow/task commands (matched via CSV)
180
- if (workflowRef && workflowLookup.has(workflowRef)) {
181
- const csv = workflowLookup.get(workflowRef);
182
- results.push({
183
- name,
184
- description: csv.description,
185
- invocation: firstLine,
186
- body,
187
- kind: "workflow",
188
- phase: csv.phase,
189
- });
190
- continue;
180
+ if (workflowRef) {
181
+ // Try direct file-path lookup first
182
+ let csv = workflowLookup.get(workflowRef);
183
+ // Fallback: resolve _bmad/.../skill-name/workflow.md → skill:skill-name
184
+ if (!csv) {
185
+ const match = workflowRef.match(/\/([^/]+)\/workflow\.md$/);
186
+ if (match) {
187
+ csv = workflowLookup.get(`skill:${match[1]}`);
188
+ }
189
+ }
190
+ if (csv) {
191
+ results.push({
192
+ name,
193
+ description: csv.description,
194
+ invocation: firstLine,
195
+ body,
196
+ kind: "workflow",
197
+ phase: csv.phase,
198
+ });
199
+ continue;
200
+ }
191
201
  }
192
202
  // Classify: pure agent commands
193
203
  if (agentRef && !workflowRef) {
@@ -276,8 +286,15 @@ export async function generateCommandIndex(projectDir, classified) {
276
286
  * Generate Codex Skills from pre-classified slash commands.
277
287
  * Creates .agents/skills/bmad-<name>/SKILL.md for each non-CLI-pointer command.
278
288
  */
279
- export async function generateSkills(projectDir, classified) {
280
- const skillsBaseDir = join(projectDir, SKILLS_DIR);
289
+ export async function generateSkills(projectDir, classified, platform) {
290
+ const delivery = platform?.commandDelivery.kind === "skills"
291
+ ? platform.commandDelivery
292
+ : {
293
+ kind: "skills",
294
+ dir: CODEX_SKILLS_DIR,
295
+ frontmatterName: "command",
296
+ };
297
+ const skillsBaseDir = join(projectDir, delivery.dir);
281
298
  // Cleanup: remove existing bmad-* skill directories
282
299
  try {
283
300
  const existingDirs = await readdir(skillsBaseDir);
@@ -297,8 +314,9 @@ export async function generateSkills(projectDir, classified) {
297
314
  continue;
298
315
  const skillDir = join(skillsBaseDir, `${SKILLS_PREFIX}${cmd.name}`);
299
316
  await mkdir(skillDir, { recursive: true });
317
+ const frontmatterName = delivery.frontmatterName === "directory" ? `${SKILLS_PREFIX}${cmd.name}` : cmd.name;
300
318
  const skillContent = `---
301
- name: ${cmd.name}
319
+ name: ${frontmatterName}
302
320
  description: >
303
321
  ${cmd.description}. Use when the user asks about ${cmd.name.replace(/-/g, " ")}.
304
322
  metadata:
@@ -23,7 +23,7 @@ export async function copyBundledAssets(projectDir, platform) {
23
23
  }
24
24
  const classified = await installBmadAssets(projectDir, bmadDir, slashCommandsDir, p);
25
25
  if (p.commandDelivery.kind === "skills") {
26
- await generateSkills(projectDir, classified);
26
+ await generateSkills(projectDir, classified, p);
27
27
  }
28
28
  const ralphAssets = await installRalphAssets(projectDir, ralphDir, p, await getPackageVersion());
29
29
  const commandPaths = await deliverCommands(projectDir, p, slashCommandsDir);
@@ -22,7 +22,7 @@ export async function getBundledVersions() {
22
22
  const versionsPath = join(__dirname, "..", "..", "bundled-versions.json");
23
23
  try {
24
24
  const versions = JSON.parse(await readFile(versionsPath, "utf-8"));
25
- if (!versions || typeof versions.bmadCommit !== "string") {
25
+ if (typeof versions.bmadCommit !== "string") {
26
26
  throw new Error("Invalid bundled-versions.json structure: missing bmadCommit");
27
27
  }
28
28
  return {
@@ -2,7 +2,7 @@ import { mkdir, readFile } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  import { atomicWriteFile, exists, parseGitignoreLines, replaceSection, } from "../utils/file-system.js";
4
4
  import { isEnoent } from "../utils/errors.js";
5
- import { CONFIG_FILE, SKILLS_DIR, STATE_DIR } from "../utils/constants.js";
5
+ import { CONFIG_FILE, GITIGNORE_ENTRIES, STATE_DIR } from "../utils/constants.js";
6
6
  import { getDefaultPlatform } from "./metadata.js";
7
7
  import { isTemplateCustomized } from "./template-files.js";
8
8
  export async function updateGitignore(projectDir) {
@@ -16,8 +16,7 @@ export async function updateGitignore(projectDir) {
16
16
  throw err;
17
17
  }
18
18
  const existingLines = parseGitignoreLines(existing);
19
- const entries = [".ralph/logs/", "_bmad-output/"];
20
- const newEntries = entries.filter((e) => !existingLines.has(e));
19
+ const newEntries = GITIGNORE_ENTRIES.filter((e) => !existingLines.has(e));
21
20
  if (newEntries.length === 0)
22
21
  return;
23
22
  const suffix = existing.length > 0 && !existing.endsWith("\n")
@@ -70,13 +69,13 @@ export async function previewInstall(projectDir, platform) {
70
69
  dirsToCreate.push(`${p.commandDelivery.dir}/`);
71
70
  }
72
71
  else if (p.commandDelivery.kind === "skills") {
73
- dirsToCreate.push(`${SKILLS_DIR}/`);
72
+ dirsToCreate.push(`${p.commandDelivery.dir}/`);
74
73
  }
75
74
  for (const dir of dirsToCreate) {
76
75
  if (await exists(join(projectDir, dir))) {
77
76
  if (dir === "_bmad/" ||
78
77
  (p.commandDelivery.kind === "directory" && dir === `${p.commandDelivery.dir}/`) ||
79
- (p.commandDelivery.kind === "skills" && dir === `${SKILLS_DIR}/`)) {
78
+ (p.commandDelivery.kind === "skills" && dir === `${p.commandDelivery.dir}/`)) {
80
79
  wouldModify.push(dir);
81
80
  }
82
81
  }
@@ -144,7 +143,7 @@ export async function previewUpgrade(projectDir, platform) {
144
143
  managedPaths.push({ path: `${p.commandDelivery.dir}/`, isDir: true });
145
144
  }
146
145
  else if (p.commandDelivery.kind === "skills") {
147
- managedPaths.push({ path: `${SKILLS_DIR}/`, isDir: true });
146
+ managedPaths.push({ path: `${p.commandDelivery.dir}/`, isDir: true });
148
147
  }
149
148
  const wouldUpdate = [];
150
149
  const wouldCreate = [];
@@ -8,8 +8,10 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
8
8
  await mkdir(join(projectDir, ".ralph"), { recursive: true });
9
9
  const promptPath = join(projectDir, ".ralph/PROMPT.md");
10
10
  const agentPath = join(projectDir, ".ralph/@AGENT.md");
11
+ const reviewPromptPath = join(projectDir, ".ralph/REVIEW_PROMPT.md");
11
12
  const promptCustomized = await isTemplateCustomized(promptPath, "PROMPT.md");
12
13
  const agentCustomized = await isTemplateCustomized(agentPath, "AGENT.md");
14
+ const reviewPromptCustomized = await isTemplateCustomized(reviewPromptPath, "REVIEW_PROMPT.md");
13
15
  if (!promptCustomized) {
14
16
  await cp(join(ralphDir, "templates/PROMPT.md"), promptPath, {
15
17
  dereference: false,
@@ -20,6 +22,11 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
20
22
  dereference: false,
21
23
  });
22
24
  }
25
+ if (!reviewPromptCustomized) {
26
+ await cp(join(ralphDir, "templates/REVIEW_PROMPT.md"), reviewPromptPath, {
27
+ dereference: false,
28
+ });
29
+ }
23
30
  await cp(join(ralphDir, "RALPH-REFERENCE.md"), join(projectDir, ".ralph/RALPH-REFERENCE.md"), {
24
31
  dereference: false,
25
32
  });
@@ -83,6 +90,7 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
83
90
  ".ralph/lib/",
84
91
  ...(!promptCustomized ? [".ralph/PROMPT.md"] : []),
85
92
  ...(!agentCustomized ? [".ralph/@AGENT.md"] : []),
93
+ ...(!reviewPromptCustomized ? [".ralph/REVIEW_PROMPT.md"] : []),
86
94
  ...(!ralphrcCustomized && currentRalphrc !== renderedRalphrc ? [".ralph/.ralphrc"] : []),
87
95
  ".ralph/RALPH-REFERENCE.md",
88
96
  ],
@@ -5,10 +5,15 @@ import { getBundledRalphDir } from "./metadata.js";
5
5
  const TEMPLATE_PLACEHOLDERS = {
6
6
  "PROMPT.md": "[YOUR PROJECT NAME]",
7
7
  "AGENT.md": "pip install -r requirements.txt",
8
+ "REVIEW_PROMPT.md": "[YOUR PROJECT NAME]",
8
9
  };
9
10
  const RALPHRC_TEMPLATE_NAME = "RALPHRC";
10
11
  const CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE = 'ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,EnterPlanMode,ExitPlanMode,NotebookEdit,Bash"';
11
12
  const PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE = 'ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,NotebookEdit,Bash"';
13
+ const RALPHRC_DRIVER_COMMENT_LINE = "# Platform driver for Ralph loop (claude-code, codex, opencode, copilot, or cursor)";
14
+ const PREVIOUS_RALPHRC_DRIVER_COMMENT_LINE = "# Platform driver for Ralph loop (claude-code, codex, copilot, or cursor)";
15
+ const RALPHRC_IGNORED_DRIVERS_COMMENT_LINE = "# Ignored by the codex, opencode, cursor, and copilot drivers.";
16
+ const PREVIOUS_RALPHRC_IGNORED_DRIVERS_COMMENT_LINE = "# Ignored by the codex, cursor, and copilot drivers.";
12
17
  const CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK = `# Permission mode for Claude Code CLI (default: bypassPermissions)
13
18
  # Options: auto, acceptEdits, bypassPermissions, default, dontAsk, plan
14
19
  CLAUDE_PERMISSION_MODE="bypassPermissions"
@@ -18,6 +23,47 @@ const PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK = `# Permission mode for Cl
18
23
  # Options: auto, acceptEdits, bypassPermissions, default, dontAsk, plan
19
24
  CLAUDE_PERMISSION_MODE="auto"
20
25
 
26
+ `;
27
+ const QUALITY_GATES_TEMPLATE_BLOCK = `# =============================================================================
28
+ # QUALITY GATES
29
+ # =============================================================================
30
+
31
+ # Test command to verify TESTS_STATUS claims (e.g. "npm test", "pytest")
32
+ # When set, runs after each loop to confirm the agent's test status report.
33
+ # Leave empty to trust the agent's TESTS_STATUS without verification.
34
+ TEST_COMMAND="\${TEST_COMMAND:-}"
35
+
36
+ # Semicolon-separated quality gate commands (e.g. "npm run lint;npm run type-check")
37
+ # Each command runs after the loop iteration completes.
38
+ # Commands must not contain literal semicolons; use wrapper scripts if needed.
39
+ QUALITY_GATES="\${QUALITY_GATES:-}"
40
+
41
+ # Failure mode: warn | block | circuit-breaker
42
+ # warn - log failures, continue normally (default)
43
+ # block - suppress exit signal so the loop keeps running
44
+ # circuit-breaker - feed no-progress to circuit breaker
45
+ QUALITY_GATE_MODE="\${QUALITY_GATE_MODE:-warn}"
46
+
47
+ # Timeout in seconds for each gate command
48
+ QUALITY_GATE_TIMEOUT="\${QUALITY_GATE_TIMEOUT:-120}"
49
+
50
+ # Only run gates when the agent signals completion (EXIT_SIGNAL=true)
51
+ QUALITY_GATE_ON_COMPLETION_ONLY="\${QUALITY_GATE_ON_COMPLETION_ONLY:-false}"
52
+
53
+ `;
54
+ const REVIEW_TEMPLATE_BLOCK = `# =============================================================================
55
+ # PERIODIC CODE REVIEW
56
+ # =============================================================================
57
+
58
+ # Enable periodic code review loops (set via 'bmalph run --review' or manually)
59
+ # When enabled, Ralph runs a read-only review session every REVIEW_INTERVAL loops.
60
+ # The review agent analyzes git diffs and outputs findings for the next implementation loop.
61
+ # Currently supported on Claude Code only.
62
+ REVIEW_ENABLED="\${REVIEW_ENABLED:-false}"
63
+
64
+ # Number of implementation loops between review sessions (default: 5)
65
+ REVIEW_INTERVAL="\${REVIEW_INTERVAL:-5}"
66
+
21
67
  `;
22
68
  const LEGACY_RALPHRC_TEMPLATE = `# .ralphrc - Ralph project configuration
23
69
  # Generated by: ralph enable
@@ -132,6 +178,11 @@ RALPH_VERBOSE=false
132
178
  function renderLegacyRalphrcTemplate(platformId) {
133
179
  return LEGACY_RALPHRC_TEMPLATE.replace("__PLATFORM_DRIVER__", platformId);
134
180
  }
181
+ function normalizeManagedRalphrcContent(content) {
182
+ return content
183
+ .replace(PREVIOUS_RALPHRC_DRIVER_COMMENT_LINE, RALPHRC_DRIVER_COMMENT_LINE)
184
+ .replace(PREVIOUS_RALPHRC_IGNORED_DRIVERS_COMMENT_LINE, RALPHRC_IGNORED_DRIVERS_COMMENT_LINE);
185
+ }
135
186
  function renderCurrentRalphrcTemplate(templateContent, platformId) {
136
187
  return templateContent.replace(/PLATFORM_DRIVER="\$\{PLATFORM_DRIVER:-[^"]*\}"/, `PLATFORM_DRIVER="\${PLATFORM_DRIVER:-${platformId}}"`);
137
188
  }
@@ -140,29 +191,50 @@ export async function renderRalphrcTemplate(platformId) {
140
191
  const templateContent = await readFile(join(ralphDir, "templates/ralphrc.template"), "utf-8");
141
192
  return renderCurrentRalphrcTemplate(templateContent, platformId);
142
193
  }
194
+ function matchesManagedPermissionVariants(content, template) {
195
+ if (content === template) {
196
+ return true;
197
+ }
198
+ if (content ===
199
+ template
200
+ .replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
201
+ .replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, "")) {
202
+ return true;
203
+ }
204
+ if (content ===
205
+ template
206
+ .replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
207
+ .replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK)) {
208
+ return true;
209
+ }
210
+ if (content ===
211
+ template.replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK)) {
212
+ return true;
213
+ }
214
+ return false;
215
+ }
143
216
  async function isRalphrcCustomized(filePath, platformId) {
144
- const content = await readFile(filePath, "utf-8");
217
+ const content = normalizeManagedRalphrcContent(await readFile(filePath, "utf-8"));
145
218
  const currentTemplate = await renderRalphrcTemplate(platformId);
146
- if (content === currentTemplate) {
219
+ if (matchesManagedPermissionVariants(content, currentTemplate)) {
147
220
  return false;
148
221
  }
149
- const previousManagedWithoutPermissionModeTemplate = currentTemplate
150
- .replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
151
- .replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, "");
152
- if (content === previousManagedWithoutPermissionModeTemplate) {
222
+ // Check variants without quality gates block (pre-quality-gates installs)
223
+ const templateWithoutQG = currentTemplate.replace(QUALITY_GATES_TEMPLATE_BLOCK, "");
224
+ if (matchesManagedPermissionVariants(content, templateWithoutQG)) {
153
225
  return false;
154
226
  }
155
- const previousDefaultModeTemplate = currentTemplate
156
- .replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
157
- .replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK);
158
- if (content === previousDefaultModeTemplate) {
227
+ // Check variants without review block (pre-review installs)
228
+ const templateWithoutReview = currentTemplate.replace(REVIEW_TEMPLATE_BLOCK, "");
229
+ if (matchesManagedPermissionVariants(content, templateWithoutReview)) {
159
230
  return false;
160
231
  }
161
- const previousPermissionModeManagedTemplate = currentTemplate.replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK);
162
- if (content === previousPermissionModeManagedTemplate) {
232
+ // Check variants without both quality gates and review blocks
233
+ const templateWithoutQGAndReview = templateWithoutQG.replace(REVIEW_TEMPLATE_BLOCK, "");
234
+ if (matchesManagedPermissionVariants(content, templateWithoutQGAndReview)) {
163
235
  return false;
164
236
  }
165
- const legacyTemplate = renderLegacyRalphrcTemplate(platformId);
237
+ const legacyTemplate = normalizeManagedRalphrcContent(renderLegacyRalphrcTemplate(platformId));
166
238
  return content !== legacyTemplate;
167
239
  }
168
240
  export async function isTemplateCustomized(filePath, templateName, options) {
@@ -1,11 +1,16 @@
1
1
  import { buildPlatformDoctorChecks } from "./doctor-checks.js";
2
2
  import { generateSkillsTierSnippet } from "./instructions-snippet.js";
3
+ import { CODEX_SKILLS_DIR } from "../utils/constants.js";
3
4
  export const codexPlatform = {
4
5
  id: "codex",
5
6
  displayName: "OpenAI Codex",
6
7
  tier: "full",
7
8
  instructionsFile: "AGENTS.md",
8
- commandDelivery: { kind: "skills" },
9
+ commandDelivery: {
10
+ kind: "skills",
11
+ dir: CODEX_SKILLS_DIR,
12
+ frontmatterName: "command",
13
+ },
9
14
  instructionsSectionMarker: "## BMAD-METHOD Integration",
10
15
  generateInstructionsSnippet: () => generateSkillsTierSnippet(),
11
16
  getDoctorChecks() {
@@ -2,13 +2,14 @@ import { exists } from "../utils/file-system.js";
2
2
  import { join } from "node:path";
3
3
  const STRONG_DETECTION_MARKERS = [
4
4
  { platform: "claude-code", markers: [".claude"] },
5
+ { platform: "opencode", markers: [".opencode"] },
5
6
  { platform: "cursor", markers: [".cursor"] },
6
7
  { platform: "windsurf", markers: [".windsurf"] },
7
8
  { platform: "copilot", markers: [".github/copilot-instructions.md"] },
8
9
  { platform: "aider", markers: [".aider.conf.yml"] },
9
10
  ];
10
11
  const ROOT_INSTRUCTION_MARKERS = [
11
- { marker: "AGENTS.md", candidates: ["codex", "cursor"] },
12
+ { marker: "AGENTS.md", candidates: ["codex", "opencode", "cursor"] },
12
13
  { marker: "CLAUDE.md", candidates: ["claude-code", "cursor"] },
13
14
  ];
14
15
  export async function detectPlatform(projectDir) {
@@ -22,8 +23,11 @@ export async function detectPlatform(projectDir) {
22
23
  }
23
24
  }
24
25
  }
25
- if (strongCandidates.includes("cursor") && strongCandidates.length === 1) {
26
- return { detected: "cursor", candidates: ["cursor"] };
26
+ const strongExclusivePlatforms = ["cursor", "opencode"];
27
+ for (const platform of strongExclusivePlatforms) {
28
+ if (strongCandidates.includes(platform) && strongCandidates.length === 1) {
29
+ return { detected: platform, candidates: [platform] };
30
+ }
27
31
  }
28
32
  for (const { marker, candidates: inferred } of ROOT_INSTRUCTION_MARKERS) {
29
33
  if (!(await exists(join(projectDir, marker)))) {
@@ -1,7 +1,7 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { exists } from "../utils/file-system.js";
4
- import { SKILLS_DIR, SKILLS_PREFIX } from "../utils/constants.js";
4
+ import { SKILLS_PREFIX } from "../utils/constants.js";
5
5
  import { isEnoent, formatError } from "../utils/errors.js";
6
6
  /**
7
7
  * Creates the standard instructions-file doctor check for a platform.
@@ -61,7 +61,7 @@ export function buildPlatformDoctorChecks(platform) {
61
61
  checks.push(createFileExistsCheck("command-index", "_bmad/COMMANDS.md", "Run: bmalph upgrade"));
62
62
  }
63
63
  if (platform.commandDelivery.kind === "skills") {
64
- checks.push(createFileExistsCheck("skills", `${SKILLS_DIR}/${SKILLS_PREFIX}analyst/SKILL.md`, "Run: bmalph upgrade"));
64
+ checks.push(createFileExistsCheck("skills", `${platform.commandDelivery.dir}/${SKILLS_PREFIX}analyst/SKILL.md`, "Run: bmalph upgrade"));
65
65
  }
66
66
  checks.push(createFileExistsCheck("lite-workflow", "_bmad/lite/create-prd.md", "Run: bmalph upgrade"));
67
67
  checks.push(createInstructionsFileCheck(platform));
@@ -0,0 +1,66 @@
1
+ function getCommandIndexHint(platform) {
2
+ return `Read _bmad/COMMANDS.md and ask ${platform.displayName} to run the BMAD master agent`;
3
+ }
4
+ function getSkillHint(platform, skillName, skillsDir) {
5
+ if (platform.id === "codex") {
6
+ return `Use the \`$${skillName}\` Codex Skill`;
7
+ }
8
+ return `Ask ${platform.displayName} to load the \`bmad-${skillName}\` skill from \`${skillsDir}\``;
9
+ }
10
+ export function getPlatformAnalysisHint(platform) {
11
+ if (platform.commandDelivery.kind === "directory") {
12
+ return "Run /analyst to start analysis";
13
+ }
14
+ if (platform.commandDelivery.kind === "skills") {
15
+ return getSkillHint(platform, "analyst", platform.commandDelivery.dir);
16
+ }
17
+ return getCommandIndexHint(platform);
18
+ }
19
+ export function getPlatformPrdHint(platform) {
20
+ if (platform.commandDelivery.kind === "directory") {
21
+ return "Run /pm to create PRD";
22
+ }
23
+ if (platform.commandDelivery.kind === "skills") {
24
+ return getSkillHint(platform, "create-prd", platform.commandDelivery.dir);
25
+ }
26
+ return getCommandIndexHint(platform);
27
+ }
28
+ export function getPlatformArchitectureHint(platform) {
29
+ if (platform.commandDelivery.kind === "directory") {
30
+ return "Run /architect to create architecture";
31
+ }
32
+ if (platform.commandDelivery.kind === "skills") {
33
+ return getSkillHint(platform, "architect", platform.commandDelivery.dir);
34
+ }
35
+ return getCommandIndexHint(platform);
36
+ }
37
+ export function getPlatformEpicsStoriesHint(platform) {
38
+ if (platform.commandDelivery.kind === "directory") {
39
+ return "Run /create-epics-stories to define epics and stories";
40
+ }
41
+ if (platform.commandDelivery.kind === "skills") {
42
+ return getSkillHint(platform, "create-epics-stories", platform.commandDelivery.dir);
43
+ }
44
+ return getCommandIndexHint(platform);
45
+ }
46
+ export function getPlatformReadinessHint(platform) {
47
+ if (platform.commandDelivery.kind === "directory") {
48
+ return "Run /architect to generate readiness report";
49
+ }
50
+ if (platform.commandDelivery.kind === "skills") {
51
+ return getSkillHint(platform, "architect", platform.commandDelivery.dir);
52
+ }
53
+ return getCommandIndexHint(platform);
54
+ }
55
+ export function getPlatformMasterAgentHint(platform) {
56
+ if (platform.commandDelivery.kind === "directory") {
57
+ return "Run /bmalph to navigate phases";
58
+ }
59
+ if (platform.commandDelivery.kind === "skills") {
60
+ return platform.id === "codex"
61
+ ? "Use the `$bmalph` Codex Skill to navigate phases"
62
+ : `Ask ${platform.displayName} to load the \`bmad-bmalph\` skill from \`${platform.commandDelivery.dir}\``;
63
+ }
64
+ return getCommandIndexHint(platform);
65
+ }
66
+ //# sourceMappingURL=guidance.js.map
@@ -59,6 +59,21 @@ export function generateSkillsTierSnippet() {
59
59
  BMAD commands are available as Codex Skills. Use \`$command-name\` to invoke them
60
60
  (e.g., \`$create-prd\`, \`$analyst\`). See \`_bmad/COMMANDS.md\` for a full reference.
61
61
 
62
+ ${FULL_TIER_PHASES}
63
+ `;
64
+ }
65
+ /**
66
+ * Instructions snippet for OpenCode's native skills layout.
67
+ */
68
+ export function generateOpencodeSkillsTierSnippet() {
69
+ return `
70
+ ## BMAD-METHOD Integration
71
+
72
+ BMAD commands are available as native OpenCode skills in \`.opencode/skills/\`.
73
+ Load the matching skill name (for example \`bmad-analyst\` or \`bmad-create-prd\`)
74
+ when the user asks for a BMAD workflow or agent. Use the OpenCode question tool (\`question\`)
75
+ when a BMAD workflow needs interactive answers. See \`_bmad/COMMANDS.md\` for a full reference.
76
+
62
77
  ${FULL_TIER_PHASES}
63
78
  `;
64
79
  }
@@ -0,0 +1,20 @@
1
+ import { buildPlatformDoctorChecks } from "./doctor-checks.js";
2
+ import { generateOpencodeSkillsTierSnippet } from "./instructions-snippet.js";
3
+ import { OPENCODE_SKILLS_DIR } from "../utils/constants.js";
4
+ export const opencodePlatform = {
5
+ id: "opencode",
6
+ displayName: "OpenCode",
7
+ tier: "full",
8
+ instructionsFile: "AGENTS.md",
9
+ commandDelivery: {
10
+ kind: "skills",
11
+ dir: OPENCODE_SKILLS_DIR,
12
+ frontmatterName: "directory",
13
+ },
14
+ instructionsSectionMarker: "## BMAD-METHOD Integration",
15
+ generateInstructionsSnippet: () => generateOpencodeSkillsTierSnippet(),
16
+ getDoctorChecks() {
17
+ return buildPlatformDoctorChecks(this);
18
+ },
19
+ };
20
+ //# sourceMappingURL=opencode.js.map