From bea89893fd2d21f829e7e31640a6deb940b49d1d Mon Sep 17 00:00:00 2001 From: wison <460760604@qq.com> Date: Sat, 21 Feb 2026 10:39:52 +0800 Subject: [PATCH 02/15] feat: add CodeBuddy platform support (#1483) Add CodeBuddy (Tencent Cloud Code Assistant) as a supported IDE platform: - Add platform config to tools/platform-codes.yaml - Add installer config to tools/cli/installers/lib/ide/platform-codes.yaml - Add .codebuddy to .gitignore CodeBuddy uses the default template type with target directory .codebuddy/commands Co-authored-by: wison Co-authored-by: Brian --- .gitignore | 1 + tools/cli/installers/lib/ide/platform-codes.yaml | 9 +++++++++ tools/platform-codes.yaml | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/.gitignore b/.gitignore index e61217a86..03c4cb860 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ _bmad-output # .augment/ is gitignored except tracked config files — add exceptions explicitly .augment/* !.augment/code_review_guidelines.yaml +.codebuddy .crush .cursor .iflow diff --git a/tools/cli/installers/lib/ide/platform-codes.yaml b/tools/cli/installers/lib/ide/platform-codes.yaml index b9db95733..16723f9c5 100644 --- a/tools/cli/installers/lib/ide/platform-codes.yaml +++ b/tools/cli/installers/lib/ide/platform-codes.yaml @@ -57,6 +57,15 @@ platforms: description: "OpenAI Codex integration" # No installer config - uses custom codex.js + codebuddy: + name: "CodeBuddy" + preferred: false + category: ide + description: "Tencent Cloud Code Assistant - AI-powered coding companion" + installer: + target_dir: .codebuddy/commands + template_type: default + crush: name: "Crush" preferred: false diff --git a/tools/platform-codes.yaml b/tools/platform-codes.yaml index bacdbc894..97846a9bd 100644 --- a/tools/platform-codes.yaml +++ b/tools/platform-codes.yaml @@ -37,6 +37,12 @@ platforms: category: ide description: "OpenCode terminal coding assistant" + codebuddy: + name: "CodeBuddy" + preferred: false + category: ide + description: "Tencent Cloud Code Assistant - AI-powered coding companion" + auggie: name: "Auggie" preferred: false From 99c1fa940a7b2c31585b40267205e871ed18ed0f Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Fri, 20 Feb 2026 19:42:33 -0700 Subject: [PATCH 03/15] feat: add LLM audit prompt for file reference conventions (#1720) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tools/audit-file-refs.md — a repeatable prompt that spawns parallel Haiku subagents to semantically audit new-format source files for non-conforming file references. Includes a self-check that verifies all files are accounted for before producing the final report. Replaces the planned regex extension (Item 1 of the master plan) with an approach that can handle the full surface area of reference patterns without exhaustive pattern enumeration. Also excludes .junie/ from Prettier checks (IDE integration folder, user-specific, not in repo). Refs #1718 Co-authored-by: Brian --- tools/audit-file-refs.md | 59 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tools/audit-file-refs.md diff --git a/tools/audit-file-refs.md b/tools/audit-file-refs.md new file mode 100644 index 000000000..cf9e3d6e8 --- /dev/null +++ b/tools/audit-file-refs.md @@ -0,0 +1,59 @@ +# audit-file-refs + +Audit new-format BMAD source files for file-reference convention violations using parallel Haiku subagents. + +## Convention + +In new-format BMAD workflow and task files (`src/bmm/`, `src/core/`, `src/utility/`), every file path reference must use one of these **valid** forms: + +- `{project-root}/_bmad/path/to/file.ext` — canonical form, always correct +- `{installed_path}/relative/path` — valid in new-format step files (always defined by workflow.md before any step is reached) +- Template/runtime variables: `{nextStepFile}`, `{workflowFile}`, `{{mustache}}`, `{output_folder}`, `{communication_language}`, etc. — skip these, they are substituted at runtime + +**Flag any reference that uses:** + +- `./step-NN.md` or `../something.md` — relative paths +- `step-NN.md` — bare filename with no path prefix +- `steps/step-NN.md` — bare steps-relative path (missing `{project-root}/_bmad/...` prefix) +- `` `_bmad/core/tasks/help.md` `` — bare `_bmad/` path (missing `{project-root}/`) +- `/Users/...`, `/home/...`, `C:\...` — absolute system paths + +References inside fenced code blocks (``` ``` ```) are examples — skip them. + +Old-format files in `src/bmm/workflows/4-implementation/` use `{installed_path}` by design within the XML calling chain — exclude that directory entirely. + +## Steps + +1. Run this command to get the file list: + ``` + find src/bmm src/core src/utility -type f \( -name "*.md" -o -name "*.yaml" \) | grep -v "4-implementation" | sort + ``` + +2. Divide the resulting file paths into batches of roughly 20 files each. + +3. For each batch, spawn a subagent (`subagent_type: "Explore"`, `model: "haiku"`) with this prompt (fill in the actual file paths): + + > Read each of these files (use the Read tool on each): + > [list the file paths from this batch] + > + > For each file, identify every line that contains a file path reference that violates the convention described below. Skip references inside fenced code blocks. Skip template variables (anything containing `{` that isn't `{project-root}` or `{installed_path}`). + > + > **Valid references:** `{project-root}/_bmad/...`, `{installed_path}/...`, template variables. + > **Flag:** bare filenames (`step-NN.md`), `./` or `../` relative paths, bare `steps/` paths, bare `_bmad/` paths (without `{project-root}/`), absolute system paths. + > + > Return findings as a list: + > `path/to/file.md:LINE_NUMBER | VIOLATION_TYPE | offending text` + > + > If a file has no violations, include it as: `path/to/file.md | clean` + > + > End your response with a single line: `FILES CHECKED: N` where N is the exact number of files you read. + +4. Collect all findings from all subagents. + +5. **Self-check before reporting:** Count the total number of files returned by the `find` command. Sum the `FILES CHECKED: N` values across all subagent responses. If the totals do not match, identify which files are missing and re-run subagents for those files before proceeding. Do not produce the final report until all files are accounted for. + +6. Output a final report: + - Group findings by violation type + - List each finding as `file:line — offending text` + - Show total count of violations and number of affected files + - If nothing found, say "All files conform to the convention." From 276fcb1042e954044b445f4c488c70413d3e86c8 Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Sun, 22 Feb 2026 09:45:38 -0700 Subject: [PATCH 04/15] fix(workflows): correct broken step refs in create-architecture (#1734) Update 9 files that referenced the old path bmm/workflows/3-solutioning/architecture/steps/ to the correct bmm/workflows/3-solutioning/create-architecture/steps/ after the directory was renamed. Fixes #1625 Co-authored-by: Junie --- .../create-architecture/steps/step-01-init.md | 4 ++-- .../steps/step-01b-continue.md | 18 +++++++++--------- .../steps/step-02-context.md | 4 ++-- .../steps/step-03-starter.md | 4 ++-- .../steps/step-04-decisions.md | 4 ++-- .../steps/step-05-patterns.md | 4 ++-- .../steps/step-06-structure.md | 4 ++-- .../steps/step-07-validation.md | 4 ++-- .../create-architecture/workflow.md | 2 +- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md index 6d70d1492..5609ffc14 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md @@ -44,7 +44,7 @@ First, check if the output document already exists: If the document exists and has frontmatter with `stepsCompleted`: -- **STOP here** and load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-01b-continue.md` immediately +- **STOP here** and load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md` immediately - Do not proceed with any initialization tasks - Let step-01b handle the continuation logic @@ -148,6 +148,6 @@ Ready to begin architectural decision making. Do you have any other documents yo ## NEXT STEP: -After user selects [C] to continue, only after ensuring all the template output has been created, then load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md` to analyze the project context and begin architectural decision making. +After user selects [C] to continue, only after ensuring all the template output has been created, then load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md` to analyze the project context and begin architectural decision making. Remember: Do NOT proceed to step-02 until user explicitly selects [C] from the menu and setup is confirmed! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md index 0d2f6ee9a..320cfd836 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md @@ -85,7 +85,7 @@ Show the user their current progress: - Identify the next step based on `stepsCompleted` - Load the appropriate step file to continue -- Example: If `stepsCompleted: [1, 2, 3]`, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md` +- Example: If `stepsCompleted: [1, 2, 3]`, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md` #### If 'C' (Continue to next logical step): @@ -103,7 +103,7 @@ Show the user their current progress: #### If 'X' (Start over): - Confirm: "This will delete all existing architectural decisions. Are you sure? (y/n)" -- If confirmed: Delete existing document and read fully and follow: `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md` +- If confirmed: Delete existing document and read fully and follow: `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md` - If not confirmed: Return to continuation menu ### 4. Navigate to Selected Step @@ -162,12 +162,12 @@ After user makes choice: After user selects their continuation option, load the appropriate step file based on their choice. The step file will handle the detailed work from that point forward. Valid step files to load: -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md` -- `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md` +- `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md` Remember: The goal is smooth, transparent resumption that respects the work already done while giving the user control over how to proceed. diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md index 41e512c7e..d4c908711 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md @@ -188,7 +188,7 @@ Show the generated content and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md` ## APPEND TO DOCUMENT: @@ -219,6 +219,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md` to evaluate starter template options. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md` to evaluate starter template options. Remember: Do NOT proceed to step-03 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md index 59b3a0b06..45dc74c55 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md @@ -294,7 +294,7 @@ Show the generated content and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2, 3]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md` ## APPEND TO DOCUMENT: @@ -324,6 +324,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md` to begin making specific architectural decisions. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md` to begin making specific architectural decisions. Remember: Do NOT proceed to step-04 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md index 1077e1da1..2fe2d3469 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md @@ -282,7 +282,7 @@ Show the generated decisions content and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2, 3, 4]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md` ## APPEND TO DOCUMENT: @@ -313,6 +313,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md` to define implementation patterns that ensure consistency across AI agents. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md` to define implementation patterns that ensure consistency across AI agents. Remember: Do NOT proceed to step-05 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md index f14024217..cb0641afb 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md @@ -323,7 +323,7 @@ Show the generated patterns content and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md` ## APPEND TO DOCUMENT: @@ -354,6 +354,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md` to define the complete project structure. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md` to define the complete project structure. Remember: Do NOT proceed to step-06 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md index c06072b4c..7a2019a9f 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md @@ -343,7 +343,7 @@ Show the generated project structure content and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md` ## APPEND TO DOCUMENT: @@ -374,6 +374,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md` to validate architectural coherence and completeness. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md` to validate architectural coherence and completeness. Remember: Do NOT proceed to step-07 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md index 7a787b6a8..580a957fe 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md @@ -323,7 +323,7 @@ Show the validation results and present choices: - Append the final content to `{planning_artifacts}/architecture.md` - Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7]` -- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md` ## APPEND TO DOCUMENT: @@ -354,6 +354,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md` to complete the workflow and provide implementation guidance. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md` to complete the workflow and provide implementation guidance. Remember: Do NOT proceed to step-08 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md index 545011e10..508a57046 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md @@ -44,6 +44,6 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ## EXECUTION -Read fully and follow: `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md` to begin the workflow. +Read fully and follow: `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md` to begin the workflow. **Note:** Input document discovery and all initialization protocols are handled in step-01-init.md. From 675e753e9b8df84375a0b37397a28148802a476f Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Sun, 22 Feb 2026 09:46:32 -0700 Subject: [PATCH 05/15] refactor(skills): convert review-pr and audit-file-refs to bmad-os skills (#1732) Move Raven PR review and file-ref audit from tools/ into .claude/skills/ as proper bmad-os skills with SKILL.md + prompts/ instructions.md split pattern. Strip XML tags from Raven content, promote sections to H2 headings. Delete originals from tools/. Co-authored-by: Brian --- .../skills/bmad-os-audit-file-refs/SKILL.md | 7 +++++++ .../prompts/instructions.md | 0 .../skills/bmad-os-review-pr/README.md | 6 +++--- .claude/skills/bmad-os-review-pr/SKILL.md | 7 +++++++ .../bmad-os-review-pr/prompts/instructions.md | 21 +++++-------------- 5 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 .claude/skills/bmad-os-audit-file-refs/SKILL.md rename tools/audit-file-refs.md => .claude/skills/bmad-os-audit-file-refs/prompts/instructions.md (100%) rename tools/maintainer/review-pr-README.md => .claude/skills/bmad-os-review-pr/README.md (87%) create mode 100644 .claude/skills/bmad-os-review-pr/SKILL.md rename tools/maintainer/review-pr.md => .claude/skills/bmad-os-review-pr/prompts/instructions.md (96%) diff --git a/.claude/skills/bmad-os-audit-file-refs/SKILL.md b/.claude/skills/bmad-os-audit-file-refs/SKILL.md new file mode 100644 index 000000000..484d5086c --- /dev/null +++ b/.claude/skills/bmad-os-audit-file-refs/SKILL.md @@ -0,0 +1,7 @@ +--- +name: bmad-os-audit-file-refs +description: Audit BMAD source files for file-reference convention violations using parallel Haiku subagents. Use when checking path references in workflow and task files. +disable-model-invocation: true +--- + +Read `prompts/instructions.md` and execute. diff --git a/tools/audit-file-refs.md b/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md similarity index 100% rename from tools/audit-file-refs.md rename to .claude/skills/bmad-os-audit-file-refs/prompts/instructions.md diff --git a/tools/maintainer/review-pr-README.md b/.claude/skills/bmad-os-review-pr/README.md similarity index 87% rename from tools/maintainer/review-pr-README.md rename to .claude/skills/bmad-os-review-pr/README.md index d097ce948..b5cc612d1 100644 --- a/tools/maintainer/review-pr-README.md +++ b/.claude/skills/bmad-os-review-pr/README.md @@ -6,9 +6,9 @@ Adversarial code review for GitHub PRs. Works with any LLM agent. ## How It Works -Point your agent at `review-pr.md` and ask it to review a specific PR: +Use `/bmad-os-review-pr` to review a specific PR: -> "Read tools/maintainer/review-pr.md and apply it to PR #123" +> "Use /bmad-os-review-pr to review PR #123" The tool will: @@ -17,7 +17,7 @@ The tool will: 3. Transform findings into professional tone 4. Preview the review and ask before posting -See `review-pr.md` for full prompt structure, severity ratings, and sandboxing rules. +See `prompts/instructions.md` for full prompt structure, severity ratings, and sandboxing rules. ## When to Use diff --git a/.claude/skills/bmad-os-review-pr/SKILL.md b/.claude/skills/bmad-os-review-pr/SKILL.md new file mode 100644 index 000000000..bb8925674 --- /dev/null +++ b/.claude/skills/bmad-os-review-pr/SKILL.md @@ -0,0 +1,7 @@ +--- +name: bmad-os-review-pr +description: Adversarial PR review tool (Raven's Verdict). Cynical deep review transformed into professional engineering findings. Use when asked to review a PR. +disable-model-invocation: true +--- + +Read `prompts/instructions.md` and execute. diff --git a/tools/maintainer/review-pr.md b/.claude/skills/bmad-os-review-pr/prompts/instructions.md similarity index 96% rename from tools/maintainer/review-pr.md rename to .claude/skills/bmad-os-review-pr/prompts/instructions.md index 24dbb7069..12d150049 100644 --- a/tools/maintainer/review-pr.md +++ b/.claude/skills/bmad-os-review-pr/prompts/instructions.md @@ -2,8 +2,7 @@ A cynical adversarial review, transformed into cold engineering professionalism. - -CRITICAL: Sandboxed Execution Rules +## CRITICAL: Sandboxed Execution Rules Before proceeding, you MUST verify: @@ -14,9 +13,6 @@ Before proceeding, you MUST verify: **If no explicit PR number/URL was provided, STOP immediately and ask:** "What PR number or URL should I review?" - - - ## Preflight Checks @@ -97,9 +93,7 @@ gh pr diff {PR_NUMBER} [--repo {REPO}] --name-only | grep -E '\.(png|jpg|jpeg|gi Store list of binary files to skip. Note them in final output. - - - +## Adversarial Review ### 1.1 Run Cynical Review @@ -130,9 +124,7 @@ Likely tag: - Add `[likely]` to findings with high confidence, e.g. with direct evidence - Sort findings by severity (Critical → Moderate → Minor), not by confidence - - - +## Tone Transformation **Transform the cynical output into cold engineering professionalism.** @@ -177,9 +169,8 @@ Output format after transformation: _Review generated by Raven's Verdict. LLM-produced analysis - findings may be incorrect or lack context. Verify before acting._ ``` - +## Post Review - ### 3.1 Preview Display the complete transformed review to the user. @@ -231,12 +222,10 @@ Do NOT use heredocs or `echo` - Markdown code blocks will break shell parsing. U Keep the temp file and inform user of location. - +## Notes - - The "cynical asshole" phase is internal only - never posted - Tone transform MUST happen before any external output - When in doubt, ask the user - never assume - If you're unsure about severity, err toward higher severity - If you're unsure about confidence, be honest and use Medium or Low - From d48d40d3973fe7c9706759c624d57e1b628e6097 Mon Sep 17 00:00:00 2001 From: Wendy Smoak Date: Sun, 22 Feb 2026 11:47:05 -0500 Subject: [PATCH 06/15] feat: migrate Codex installer from .codex/prompts to .agents/skills format (#1729) * feat: migrate Codex installer from .codex/prompts to .agents/skills format Switch CodexSetup to write BMAD artifacts as Agent Skills (agentskills.io format) in .agents/skills//SKILL.md instead of flat files in .codex/prompts. Remove global/project location prompt. Add legacy cleanup of old .codex/prompts directories during install and uninstall. Co-Authored-By: Claude Opus 4.6 * ignore .agents for codex * fix: normalize line endings and use platform-native EOL in SKILL.md output Normalize all content to LF in transformToSkillFormat, then convert to os.EOL (CRLF on Windows, LF on Linux/macOS) before writing SKILL.md files in both writeSkillArtifacts and installCustomAgentLauncher. Co-Authored-By: Claude Opus 4.6 * ignore .agents directory * use description from metadata in custom agent launcher --------- Co-authored-by: Claude Opus 4.6 --- .gitignore | 1 + tools/cli/installers/lib/ide/codex.js | 370 +++++++++++++------------- 2 files changed, 193 insertions(+), 178 deletions(-) diff --git a/.gitignore b/.gitignore index 03c4cb860..a1229c93d 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ CLAUDE.local.md .serena/ .claude/settings.local.json .junie/ +.agents/ z*/ diff --git a/tools/cli/installers/lib/ide/codex.js b/tools/cli/installers/lib/ide/codex.js index 5205386a2..abee979fd 100644 --- a/tools/cli/installers/lib/ide/codex.js +++ b/tools/cli/installers/lib/ide/codex.js @@ -1,6 +1,7 @@ const path = require('node:path'); -const fs = require('fs-extra'); const os = require('node:os'); +const fs = require('fs-extra'); +const yaml = require('yaml'); const { BaseIdeSetup } = require('./_base-ide'); const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator'); const { AgentCommandGenerator } = require('./shared/agent-command-generator'); @@ -17,57 +18,6 @@ class CodexSetup extends BaseIdeSetup { super('codex', 'Codex', false); } - /** - * Collect configuration choices before installation - * @param {Object} options - Configuration options - * @returns {Object} Collected configuration - */ - async collectConfiguration(options = {}) { - // Non-interactive mode: use default (project) - recommended for real work - if (options.skipPrompts) { - return { installLocation: options.codexLocation || 'project' }; - } - - let confirmed = false; - let installLocation = 'global'; - - while (!confirmed) { - installLocation = await prompts.select({ - message: 'Where would you like to install Codex CLI prompts?', - choices: [ - { - name: 'Global - Simple for single project ' + '(~/.codex/prompts, but references THIS project only)', - value: 'global', - }, - { - name: `Project-specific - Recommended for real work (requires CODEX_HOME=${path.sep}.codex)`, - value: 'project', - }, - ], - default: 'global', - }); - - // Show brief confirmation hint (detailed instructions available via verbose) - if (installLocation === 'project') { - await prompts.log.info('Prompts installed to: /.codex/prompts (requires CODEX_HOME)'); - } else { - await prompts.log.info('Prompts installed to: ~/.codex/prompts'); - } - - // Confirm the choice - confirmed = await prompts.confirm({ - message: 'Proceed with this installation option?', - default: true, - }); - - if (!confirmed) { - await prompts.log.warn("Let's choose a different installation option."); - } - } - - return { installLocation }; - } - /** * Setup Codex configuration * @param {string} projectDir - Project directory @@ -80,20 +30,25 @@ class CodexSetup extends BaseIdeSetup { // Always use CLI mode const mode = 'cli'; - // Get installation location from pre-collected config or default to global - const installLocation = options.preCollectedConfig?.installLocation || 'global'; - const { artifacts, counts } = await this.collectClaudeArtifacts(projectDir, bmadDir, options); - const destDir = this.getCodexPromptDir(projectDir, installLocation); - await fs.ensureDir(destDir); - await this.clearOldBmadFiles(destDir, options); + // Clean up old .codex/prompts locations (both global and project) + const oldGlobalDir = this.getOldCodexPromptDir(null, 'global'); + await this.clearOldBmadFiles(oldGlobalDir, options); + const oldProjectDir = this.getOldCodexPromptDir(projectDir, 'project'); + await this.clearOldBmadFiles(oldProjectDir, options); - // Collect artifacts and write using underscore format + // Install to .agents/skills + const destDir = this.getCodexSkillsDir(projectDir); + await fs.ensureDir(destDir); + await this.clearOldBmadSkills(destDir, options); + + // Collect and write agent skills const agentGen = new AgentCommandGenerator(this.bmadFolderName); const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []); - const agentCount = await agentGen.writeDashArtifacts(destDir, agentArtifacts); + const agentCount = await this.writeSkillArtifacts(destDir, agentArtifacts, 'agent-launcher'); + // Collect and write task skills const tasks = await getTasksFromBmad(bmadDir, options.selectedModules || []); const taskArtifacts = []; for (const task of tasks) { @@ -117,19 +72,23 @@ class CodexSetup extends BaseIdeSetup { }); } + const ttGen = new TaskToolCommandGenerator(this.bmadFolderName); + const taskSkillArtifacts = taskArtifacts.map((artifact) => ({ + ...artifact, + content: ttGen.generateCommandContent(artifact, artifact.type), + })); + const tasksWritten = await this.writeSkillArtifacts(destDir, taskSkillArtifacts, 'task'); + + // Collect and write workflow skills const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName); const { artifacts: workflowArtifacts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir); - const workflowCount = await workflowGenerator.writeDashArtifacts(destDir, workflowArtifacts); - - // Also write tasks using underscore format - const ttGen = new TaskToolCommandGenerator(this.bmadFolderName); - const tasksWritten = await ttGen.writeDashArtifacts(destDir, taskArtifacts); + const workflowCount = await this.writeSkillArtifacts(destDir, workflowArtifacts, 'workflow-command'); const written = agentCount + workflowCount + tasksWritten; if (!options.silent) { await prompts.log.success( - `${this.name} configured: ${counts.agents} agents, ${counts.workflows} workflows, ${counts.tasks} tasks, ${written} files → ${destDir}`, + `${this.name} configured: ${counts.agents} agents, ${counts.workflows} workflows, ${counts.tasks} tasks, ${written} skills → ${destDir}`, ); } @@ -140,35 +99,18 @@ class CodexSetup extends BaseIdeSetup { counts, destination: destDir, written, - installLocation, }; } /** - * Detect Codex installation by checking for BMAD prompt exports + * Detect Codex installation by checking for BMAD skills */ async detect(projectDir) { - // Check both global and project-specific locations - const globalDir = this.getCodexPromptDir(null, 'global'); - const projectDir_local = projectDir || process.cwd(); - const projectSpecificDir = this.getCodexPromptDir(projectDir_local, 'project'); + const dir = this.getCodexSkillsDir(projectDir || process.cwd()); - // Check global location - if (await fs.pathExists(globalDir)) { + if (await fs.pathExists(dir)) { try { - const entries = await fs.readdir(globalDir); - if (entries && entries.some((entry) => entry && typeof entry === 'string' && entry.startsWith('bmad'))) { - return true; - } - } catch { - // Ignore errors - } - } - - // Check project-specific location - if (await fs.pathExists(projectSpecificDir)) { - try { - const entries = await fs.readdir(projectSpecificDir); + const entries = await fs.readdir(dir); if (entries && entries.some((entry) => entry && typeof entry === 'string' && entry.startsWith('bmad'))) { return true; } @@ -240,26 +182,138 @@ class CodexSetup extends BaseIdeSetup { }; } - getCodexPromptDir(projectDir = null, location = 'global') { + getCodexSkillsDir(projectDir) { + if (!projectDir) { + throw new Error('projectDir is required for project-scoped skill installation'); + } + return path.join(projectDir, '.agents', 'skills'); + } + + /** + * Get the old .codex/prompts directory for cleanup purposes + */ + getOldCodexPromptDir(projectDir = null, location = 'global') { if (location === 'project' && projectDir) { return path.join(projectDir, '.codex', 'prompts'); } return path.join(os.homedir(), '.codex', 'prompts'); } - async flattenAndWriteArtifacts(artifacts, destDir) { - let written = 0; + /** + * Write artifacts as Agent Skills (agentskills.io format). + * Each artifact becomes a directory containing SKILL.md. + * @param {string} destDir - Base skills directory + * @param {Array} artifacts - Artifacts to write + * @param {string} artifactType - Type filter (e.g., 'agent-launcher', 'workflow-command', 'task') + * @returns {number} Number of skills written + */ + async writeSkillArtifacts(destDir, artifacts, artifactType) { + let writtenCount = 0; for (const artifact of artifacts) { - const flattenedName = this.flattenFilename(artifact.relativePath); - const targetPath = path.join(destDir, flattenedName); - await fs.writeFile(targetPath, artifact.content); - written++; + // Filter by type if the artifact has a type field + if (artifact.type && artifact.type !== artifactType) { + continue; + } + + // Get the dash-format name (e.g., bmad-bmm-create-prd.md) and remove .md + const flatName = toDashPath(artifact.relativePath); + const skillName = flatName.replace(/\.md$/, ''); + + // Create skill directory + const skillDir = path.join(destDir, skillName); + await fs.ensureDir(skillDir); + + // Transform content: rewrite frontmatter for skills format + const skillContent = this.transformToSkillFormat(artifact.content, skillName); + + // Write SKILL.md with platform-native line endings + const platformContent = skillContent.replaceAll('\n', os.EOL); + await fs.writeFile(path.join(skillDir, 'SKILL.md'), platformContent, 'utf8'); + writtenCount++; } - return written; + return writtenCount; } + /** + * Transform artifact content from Codex prompt format to Agent Skills format. + * Removes disable-model-invocation, ensures name matches directory. + * @param {string} content - Original content with YAML frontmatter + * @param {string} skillName - Skill name (must match directory name) + * @returns {string} Transformed content + */ + transformToSkillFormat(content, skillName) { + // Normalize line endings so body matches rebuilt frontmatter (both LF) + content = content.replaceAll('\r\n', '\n').replaceAll('\r', '\n'); + + // Parse frontmatter + const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/); + if (!fmMatch) { + // No frontmatter -- wrap with minimal frontmatter + const fm = yaml.stringify({ name: skillName, description: skillName }).trimEnd(); + return `---\n${fm}\n---\n\n${content}`; + } + + const frontmatter = fmMatch[1]; + const body = fmMatch[2]; + + // Parse frontmatter with yaml library to handle all quoting variants + let description; + try { + const parsed = yaml.parse(frontmatter); + description = parsed?.description || `${skillName} skill`; + } catch { + description = `${skillName} skill`; + } + + // Build new frontmatter with only skills-spec fields, let yaml handle quoting + const newFrontmatter = yaml.stringify({ name: skillName, description }, { lineWidth: 0 }).trimEnd(); + return `---\n${newFrontmatter}\n---\n${body}`; + } + + /** + * Remove existing BMAD skill directories from the skills directory. + */ + async clearOldBmadSkills(destDir, options = {}) { + if (!(await fs.pathExists(destDir))) { + return; + } + + let entries; + try { + entries = await fs.readdir(destDir); + } catch (error) { + if (!options.silent) await prompts.log.warn(`Warning: Could not read directory ${destDir}: ${error.message}`); + return; + } + + if (!entries || !Array.isArray(entries)) { + return; + } + + for (const entry of entries) { + if (!entry || typeof entry !== 'string') { + continue; + } + if (!entry.startsWith('bmad')) { + continue; + } + + const entryPath = path.join(destDir, entry); + try { + await fs.remove(entryPath); + } catch (error) { + if (!options.silent) { + await prompts.log.message(` Skipping ${entry}: ${error.message}`); + } + } + } + } + + /** + * Clean old BMAD files from legacy .codex/prompts directories. + */ async clearOldBmadFiles(destDir, options = {}) { if (!(await fs.pathExists(destDir))) { return; @@ -299,30 +353,11 @@ class CodexSetup extends BaseIdeSetup { } async readAndProcessWithProject(filePath, metadata, projectDir) { - const content = await fs.readFile(filePath, 'utf8'); + const rawContent = await fs.readFile(filePath, 'utf8'); + const content = rawContent.replaceAll('\r\n', '\n').replaceAll('\r', '\n'); return super.processContent(content, metadata, projectDir); } - /** - * Get instructions for global installation - * @returns {string} Instructions text - */ - getGlobalInstructions(destDir) { - const lines = [ - 'IMPORTANT: Codex Configuration', - '', - '/prompts installed globally to your HOME DIRECTORY.', - '', - 'These prompts reference a specific _bmad path.', - "To use with other projects, you'd need to copy the _bmad dir.", - '', - 'You can now use /commands in Codex CLI', - ' Example: /bmad_bmm_pm', - ' Type / to see all available commands', - ]; - return lines.join('\n'); - } - /** * Get instructions for project-specific installation * @param {string} projectDir - Optional project directory @@ -330,95 +365,74 @@ class CodexSetup extends BaseIdeSetup { * @returns {string} Instructions text */ getProjectSpecificInstructions(projectDir = null, destDir = null) { - const isWindows = os.platform() === 'win32'; - - const commonLines = [ + const lines = [ 'Project-Specific Codex Configuration', '', - `Prompts will be installed to: ${destDir || '/.codex/prompts'}`, - '', - 'REQUIRED: You must set CODEX_HOME to use these prompts', + `Skills installed to: ${destDir || '/.agents/skills'}`, '', + 'Codex automatically discovers skills in .agents/skills/ at and above the current directory and in your home directory.', + 'No additional configuration is needed.', ]; - const windowsLines = [ - 'Create a codex.cmd file in your project root:', - '', - ' @echo off', - ' set CODEX_HOME=%~dp0.codex', - ' codex %*', - '', - String.raw`Then run: .\codex instead of codex`, - '(The %~dp0 gets the directory of the .cmd file)', - ]; - - const unixLines = [ - 'Add this alias to your ~/.bashrc or ~/.zshrc:', - '', - ' alias codex=\'CODEX_HOME="$PWD/.codex" codex\'', - '', - 'After adding, run: source ~/.bashrc (or source ~/.zshrc)', - '(The $PWD uses your current working directory)', - ]; - const closingLines = ['', 'This tells Codex CLI to use prompts from this project instead of ~/.codex']; - - const lines = [...commonLines, ...(isWindows ? windowsLines : unixLines), ...closingLines]; - return lines.join('\n'); } /** - * Cleanup Codex configuration + * Cleanup Codex configuration - cleans both new .agents/skills and old .codex/prompts */ async cleanup(projectDir = null) { - // Clean both global and project-specific locations - const globalDir = this.getCodexPromptDir(null, 'global'); - await this.clearOldBmadFiles(globalDir); + // Clean old .codex/prompts locations + const oldGlobalDir = this.getOldCodexPromptDir(null, 'global'); + await this.clearOldBmadFiles(oldGlobalDir); if (projectDir) { - const projectSpecificDir = this.getCodexPromptDir(projectDir, 'project'); - await this.clearOldBmadFiles(projectSpecificDir); + const oldProjectDir = this.getOldCodexPromptDir(projectDir, 'project'); + await this.clearOldBmadFiles(oldProjectDir); + + // Clean new .agents/skills location + const destDir = this.getCodexSkillsDir(projectDir); + await this.clearOldBmadSkills(destDir); } } /** - * Install a custom agent launcher for Codex - * @param {string} projectDir - Project directory (not used, Codex installs to home) + * Install a custom agent launcher for Codex as an Agent Skill + * @param {string} projectDir - Project directory * @param {string} agentName - Agent name (e.g., "fred-commit-poet") * @param {string} agentPath - Path to compiled agent (relative to project root) * @param {Object} metadata - Agent metadata - * @returns {Object|null} Info about created command + * @returns {Object|null} Info about created skill */ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) { - const destDir = this.getCodexPromptDir(projectDir, 'project'); - await fs.ensureDir(destDir); + const destDir = this.getCodexSkillsDir(projectDir); - const launcherContent = `--- -name: '${agentName}' -description: '${agentName} agent' -disable-model-invocation: true ---- + // Skill name from the dash name (without .md) + const skillName = customAgentDashName(agentName).replace(/\.md$/, ''); + const skillDir = path.join(destDir, skillName); + await fs.ensureDir(skillDir); -You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command. + const description = metadata?.description || `${agentName} agent`; + const fm = yaml.stringify({ name: skillName, description }).trimEnd(); + const skillContent = + `---\n${fm}\n---\n` + + "\nYou must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.\n" + + '\n\n' + + `1. LOAD the FULL agent file from @${agentPath}\n` + + '2. READ its entire contents - this contains the complete agent persona, menu, and instructions\n' + + '3. FOLLOW every step in the section precisely\n' + + '4. DISPLAY the welcome/greeting as instructed\n' + + '5. PRESENT the numbered menu\n' + + '6. WAIT for user input before proceeding\n' + + '\n'; - -1. LOAD the FULL agent file from @${agentPath} -2. READ its entire contents - this contains the complete agent persona, menu, and instructions -3. FOLLOW every step in the section precisely -4. DISPLAY the welcome/greeting as instructed -5. PRESENT the numbered menu -6. WAIT for user input before proceeding - -`; - - // Use underscore format: bmad_custom_fred-commit-poet.md - const fileName = customAgentDashName(agentName); - const launcherPath = path.join(destDir, fileName); - await fs.writeFile(launcherPath, launcherContent, 'utf8'); + // Write with platform-native line endings + const platformContent = skillContent.replaceAll('\n', os.EOL); + const skillPath = path.join(skillDir, 'SKILL.md'); + await fs.writeFile(skillPath, platformContent, 'utf8'); return { - path: path.relative(projectDir, launcherPath), - command: `/${fileName.replace('.md', '')}`, + path: path.relative(projectDir, skillPath), + command: `$${skillName}`, }; } } From 8cf22a4182db7365e3aa1540dc3d012c8daf72e3 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 22 Feb 2026 11:26:19 -0600 Subject: [PATCH 07/15] open source tool skills updated, will move to separate plugin at a later time --- .../skills/bmad-os-audit-file-refs/SKILL.md | 3 +- .../skills/bmad-os-changelog-social/SKILL.md | 3 +- .../bmad-os-diataxis-style-fix/SKILL.md | 3 +- .../skills/bmad-os-draft-changelog/SKILL.md | 3 +- .claude/skills/bmad-os-gh-triage/README.md | 14 ----- .claude/skills/bmad-os-gh-triage/SKILL.md | 8 +-- .../skills/bmad-os-release-module/README.md | 24 -------- .../skills/bmad-os-release-module/SKILL.md | 3 +- .claude/skills/bmad-os-review-pr/README.md | 55 ------------------- .claude/skills/bmad-os-review-pr/SKILL.md | 3 +- 10 files changed, 7 insertions(+), 112 deletions(-) delete mode 100644 .claude/skills/bmad-os-gh-triage/README.md delete mode 100644 .claude/skills/bmad-os-release-module/README.md delete mode 100644 .claude/skills/bmad-os-review-pr/README.md diff --git a/.claude/skills/bmad-os-audit-file-refs/SKILL.md b/.claude/skills/bmad-os-audit-file-refs/SKILL.md index 484d5086c..637bcfd33 100644 --- a/.claude/skills/bmad-os-audit-file-refs/SKILL.md +++ b/.claude/skills/bmad-os-audit-file-refs/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-audit-file-refs -description: Audit BMAD source files for file-reference convention violations using parallel Haiku subagents. Use when checking path references in workflow and task files. -disable-model-invocation: true +description: Audit BMAD source files for file-reference convention violations using parallel Haiku subagents. Use when users requests an "audit file references" for a skill, workflow or task. --- Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-changelog-social/SKILL.md b/.claude/skills/bmad-os-changelog-social/SKILL.md index 42e0bc3cf..d2e5cda29 100644 --- a/.claude/skills/bmad-os-changelog-social/SKILL.md +++ b/.claude/skills/bmad-os-changelog-social/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-changelog-social -description: Generate social media announcements for Discord, Twitter, and LinkedIn from the latest changelog entry. Use when user asks to create release announcements, social posts, or share changelog updates. Reads CHANGELOG.md in current working directory. Reference examples/ for tone and format. -disable-model-invocation: true +description: Generate social media announcements for Discord, Twitter, and LinkedIn from the latest changelog entry. Use when user asks to 'create release announcement' or 'create social posts' or share changelog updates. --- # Changelog Social diff --git a/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md b/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md index a874dc8ce..8a4f69ae6 100644 --- a/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +++ b/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-diataxis-style-fix -description: Fixes documentation to comply with Diataxis framework and BMad Method style guide rules -disable-model-invocation: true +description: Fixes documentation to comply with Diataxis framework and BMad Method style guide rules. Use when user asks to check or fix style of files under the docs folder. --- Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-draft-changelog/SKILL.md b/.claude/skills/bmad-os-draft-changelog/SKILL.md index a246e069f..aab75dd98 100644 --- a/.claude/skills/bmad-os-draft-changelog/SKILL.md +++ b/.claude/skills/bmad-os-draft-changelog/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-draft-changelog -description: Analyzes changes since last release and updates CHANGELOG.md ONLY. Does NOT trigger releases. -disable-model-invocation: true +description: "Analyzes changes since last release and updates CHANGELOG.md ONLY. Use when users requests 'update the changelog' or 'prepare changelog release notes'" --- Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-gh-triage/README.md b/.claude/skills/bmad-os-gh-triage/README.md deleted file mode 100644 index 3692e3d2e..000000000 --- a/.claude/skills/bmad-os-gh-triage/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# gh-triage - -Fetches all GitHub issues via gh CLI and uses AI agents to deeply analyze, cluster, and prioritize issues. - -## Usage - -Run from within any BMad Method repository to triage issues. - -## What It Does - -1. Fetches all open issues via `gh issue list` -2. Splits issues into batches -3. Launches parallel agents to analyze each batch -4. Generates comprehensive triage report to `_bmad-output/triage-reports/` diff --git a/.claude/skills/bmad-os-gh-triage/SKILL.md b/.claude/skills/bmad-os-gh-triage/SKILL.md index e5688f3ba..020fdd4e2 100644 --- a/.claude/skills/bmad-os-gh-triage/SKILL.md +++ b/.claude/skills/bmad-os-gh-triage/SKILL.md @@ -1,12 +1,6 @@ --- name: bmad-os-gh-triage -description: Fetch all GitHub issues via gh CLI and use AI agents to deeply analyze, cluster, and prioritize issues -license: MIT -disable-model-invocation: true -metadata: - author: bmad-code-org - version: "3.0.0" -compatibility: Requires gh CLI, git repository, and BMad Method with Task tool support +description: Analyze all github issues. Use when the user says 'triage the github issues' or 'analyze open github issues'. --- Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-release-module/README.md b/.claude/skills/bmad-os-release-module/README.md deleted file mode 100644 index 5dbaf2542..000000000 --- a/.claude/skills/bmad-os-release-module/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# release-module - -Automates the complete release process for npm modules. - -## Usage - -Run from project root or pass project path: -``` -bmad-utility-skills:release-module -``` - -## Prerequisite - -First run `draft-changelog` to analyze changes and create a draft changelog. - -## What It Does - -1. Gets and confirms changelog entry -2. Confirms version bump type (patch/minor/major) -3. Updates CHANGELOG.md -4. Bumps version with `npm version` -5. Pushes git tag -6. Publishes to npm -7. Creates GitHub release diff --git a/.claude/skills/bmad-os-release-module/SKILL.md b/.claude/skills/bmad-os-release-module/SKILL.md index 17a718a32..557381ee0 100644 --- a/.claude/skills/bmad-os-release-module/SKILL.md +++ b/.claude/skills/bmad-os-release-module/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-release-module -description: Automates the complete release process for npm modules - version bump, changelog, git tag, npm publish, GitHub release -disable-model-invocation: true +description: Perform requested version bump, git tag, npm publish, GitHub release. Use when user requests 'perform a release' only. --- Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-review-pr/README.md b/.claude/skills/bmad-os-review-pr/README.md deleted file mode 100644 index b5cc612d1..000000000 --- a/.claude/skills/bmad-os-review-pr/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Raven's Verdict - Deep PR Review Tool - -Adversarial code review for GitHub PRs. Works with any LLM agent. - -> **Status: Experimental.** We're still figuring out how to use this effectively. Expect the workflow to evolve. - -## How It Works - -Use `/bmad-os-review-pr` to review a specific PR: - -> "Use /bmad-os-review-pr to review PR #123" - -The tool will: - -1. Check out the PR branch locally -2. Run an adversarial review (find at least 5 issues) -3. Transform findings into professional tone -4. Preview the review and ask before posting - -See `prompts/instructions.md` for full prompt structure, severity ratings, and sandboxing rules. - -## When to Use - -**Good candidates:** - -- PRs with meaningful logic changes -- Refactors touching multiple files -- New features or architectural changes - -**Skip it for:** - -- Trivial PRs (typo fixes, version bumps, single-line changes) -- PRs you've already reviewed manually -- PRs where you haven't agreed on the approach yet — fix the direction before the implementation - -## Workflow Tips - -**Always review before posting.** The preview step exists for a reason: - -- **[y] Yes** — Post as-is (only if you're confident) -- **[e] Edit** — Modify findings before posting -- **[s] Save only** — Write to file, don't post - -The save option is useful when you want to: - -- Hand-edit the review before posting -- Use the findings as input for a second opinion ("Hey Claude, here's what Raven found — what do you think?") -- Cherry-pick specific findings - -**Trust but verify.** LLM reviews can miss context or flag non-issues. Skim the findings before they hit the PR. - -## Prerequisites - -- `gh` CLI installed and authenticated (`gh auth status`) -- Any LLM agent capable of running bash commands diff --git a/.claude/skills/bmad-os-review-pr/SKILL.md b/.claude/skills/bmad-os-review-pr/SKILL.md index bb8925674..67bb05bd5 100644 --- a/.claude/skills/bmad-os-review-pr/SKILL.md +++ b/.claude/skills/bmad-os-review-pr/SKILL.md @@ -1,7 +1,6 @@ --- name: bmad-os-review-pr -description: Adversarial PR review tool (Raven's Verdict). Cynical deep review transformed into professional engineering findings. Use when asked to review a PR. -disable-model-invocation: true +description: Adversarial PR review tool (Raven's Verdict). Cynical deep review transformed into professional engineering findings. Use when user asks to 'review a PR' and provides a PR url or id. --- Read `prompts/instructions.md` and execute. From 476082fda709440cf6658e1c8c4df56fbcf53ce4 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 22 Feb 2026 12:21:00 -0600 Subject: [PATCH 08/15] refactor(workflows): standardize workflow descriptions for skill generation - Standardize all workflow descriptions to follow format: [short description]. Use when the user says 'explicit action phrase' or 'another phrase' - Remove verbose descriptions in favor of concise summaries with explicit trigger phrases - Use max 2 phrases per workflow to minimize context and false positives - Phrases are explicit actions (e.g., "lets create", "run X") not questions - No slash commands in descriptions - users invoke via /name directly - Rename qa/automate to qa-generate-e2e-tests for clarity - Update various core tasks and workflows --- .../workflows/1-analysis/create-product-brief/workflow.md | 2 +- .../1-analysis/research/workflow-domain-research.md | 2 +- .../1-analysis/research/workflow-market-research.md | 2 +- .../1-analysis/research/workflow-technical-research.md | 2 +- .../2-plan-workflows/create-prd/workflow-create-prd.md | 2 +- .../2-plan-workflows/create-prd/workflow-edit-prd.md | 2 +- .../2-plan-workflows/create-prd/workflow-validate-prd.md | 2 +- .../workflows/2-plan-workflows/create-ux-design/workflow.md | 2 +- .../check-implementation-readiness/workflow.md | 2 +- .../workflows/3-solutioning/create-architecture/workflow.md | 2 +- .../3-solutioning/create-epics-and-stories/workflow.md | 2 +- .../workflows/4-implementation/code-review/workflow.yaml | 3 +-- .../workflows/4-implementation/correct-course/workflow.yaml | 3 +-- .../workflows/4-implementation/create-story/workflow.yaml | 3 +-- src/bmm/workflows/4-implementation/dev-story/workflow.yaml | 3 +-- .../workflows/4-implementation/retrospective/workflow.yaml | 3 +-- .../4-implementation/sprint-planning/workflow.yaml | 2 +- .../workflows/4-implementation/sprint-status/workflow.yaml | 2 +- src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md | 2 +- src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md | 2 +- src/bmm/workflows/document-project/workflow.yaml | 2 +- src/bmm/workflows/generate-project-context/workflow.md | 2 +- .../{qa/automate => qa-generate-e2e-tests}/checklist.md | 0 .../{qa/automate => qa-generate-e2e-tests}/instructions.md | 0 .../{qa/automate => qa-generate-e2e-tests}/workflow.yaml | 6 ++---- src/core/tasks/editorial-review-prose.xml | 2 +- src/core/tasks/editorial-review-structure.xml | 3 +-- src/core/tasks/help.md | 2 +- src/core/tasks/index-docs.xml | 2 +- src/core/tasks/review-adversarial-general.xml | 3 ++- src/core/tasks/shard-doc.xml | 2 +- src/core/workflows/advanced-elicitation/workflow.xml | 1 + src/core/workflows/brainstorming/workflow.md | 2 +- src/core/workflows/party-mode/workflow.md | 2 +- 34 files changed, 34 insertions(+), 40 deletions(-) rename src/bmm/workflows/{qa/automate => qa-generate-e2e-tests}/checklist.md (100%) rename src/bmm/workflows/{qa/automate => qa-generate-e2e-tests}/instructions.md (100%) rename src/bmm/workflows/{qa/automate => qa-generate-e2e-tests}/workflow.yaml (87%) diff --git a/src/bmm/workflows/1-analysis/create-product-brief/workflow.md b/src/bmm/workflows/1-analysis/create-product-brief/workflow.md index 9d5e83f19..1892603e7 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/workflow.md @@ -1,6 +1,6 @@ --- name: create-product-brief -description: Create comprehensive product briefs through collaborative step-by-step discovery as creative Business Analyst working with the user as peers. +description: Create product brief through collaborative discovery. Use when the user says 'lets create a product brief' or 'help me create a project brief' --- # Product Brief Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-domain-research.md b/src/bmm/workflows/1-analysis/research/workflow-domain-research.md index 91fcbaa9a..7dc86184b 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-domain-research.md @@ -1,6 +1,6 @@ --- name: domain-research -description: Conduct domain research covering industry analysis, regulations, technology trends, and ecosystem dynamics using current web data and verified sources. +description: Conduct domain and industry research. Use when the user says 'lets create a research report on [domain or industry] --- # Domain Research Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-market-research.md b/src/bmm/workflows/1-analysis/research/workflow-market-research.md index 5669e6f24..9c424c16b 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-market-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-market-research.md @@ -1,6 +1,6 @@ --- name: market-research -description: Conduct market research covering market size, growth, competition, and customer insights using current web data and verified sources. +description: Conduct market research on competition and customers. Use when the user says 'create a market research report about [business idea]'. --- # Market Research Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-technical-research.md b/src/bmm/workflows/1-analysis/research/workflow-technical-research.md index 2ac5420ce..8ba2273d3 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-technical-research.md @@ -1,6 +1,6 @@ --- name: technical-research -description: Conduct technical research covering technology evaluation, architecture decisions, and implementation approaches using current web data and verified sources. +description: Conduct technical research on technologies and architecture. Use when the user says 'create a technical research report on [topic]'. --- # Technical Research Workflow diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md index 7d10ec3ed..e84a0058e 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md @@ -1,6 +1,6 @@ --- name: create-prd -description: Create a comprehensive PRD (Product Requirements Document) through structured workflow facilitation +description: Create a PRD from scratch. Use when the user says 'lets create a product requirements document' or 'I want to create a new PRD' main_config: '{project-root}/_bmad/bmm/config.yaml' nextStep: './steps-c/step-01-init.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md index 5cb05af53..58a67a9bc 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md @@ -1,6 +1,6 @@ --- name: edit-prd -description: Edit and improve an existing PRD - enhance clarity, completeness, and quality +description: Edit an existing PRD. Use when the user says 'edit this PRD'. main_config: '{project-root}/_bmad/bmm/config.yaml' editWorkflow: './steps-e/step-e-01-discovery.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md index e21745139..4d59b42ee 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md @@ -1,6 +1,6 @@ --- name: validate-prd -description: Validate an existing PRD against BMAD standards - comprehensive review for completeness, clarity, and quality +description: Validate a PRD against standards. Use when the user says 'validate this PRD' or 'run PRD validation' main_config: '{project-root}/_bmad/bmm/config.yaml' validateWorkflow: './steps-v/step-v-01-discovery.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md index baa0fe488..19dfbb5ca 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md @@ -1,6 +1,6 @@ --- name: create-ux-design -description: Work with a peer UX Design expert to plan your applications UX patterns, look and feel. +description: Plan UX patterns and design specifications. Use when the user says 'lets create UX design' or 'create UX specifications' or 'help me plan the UX' --- # Create UX Design Workflow diff --git a/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md b/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md index 0c20e032a..38e2d10be 100644 --- a/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +++ b/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md @@ -1,6 +1,6 @@ --- name: check-implementation-readiness -description: 'Critical validation workflow that assesses PRD, Architecture, and Epics & Stories for completeness and alignment before implementation. Uses adversarial review approach to find gaps and issues.' +description: Validate PRD, UX, Architecture and Epics specs are complete. Use when the user says 'check implementation readiness'. --- # Implementation Readiness diff --git a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md index 508a57046..bee5fe33d 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md @@ -1,6 +1,6 @@ --- name: create-architecture -description: Collaborative architectural decision facilitation for AI-agent consistency. Replaces template-driven architecture with intelligent, adaptive conversation that produces a decision-focused architecture document optimized for preventing agent conflicts. +description: Create architecture solution design decisions for AI agent consistency. Use when the user says 'lets create architecture' or 'create technical architecture' or 'create a solution design' --- # Architecture Workflow diff --git a/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md b/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md index a0e232ab8..23c791d94 100644 --- a/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +++ b/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md @@ -1,6 +1,6 @@ --- name: create-epics-and-stories -description: 'Transform PRD requirements and Architecture decisions into comprehensive stories organized by user value. This workflow requires completed PRD + Architecture documents (UX recommended if UI exists) and breaks down requirements into implementation-ready epics and user stories that incorporate all available technical and design context. Creates detailed, actionable stories with complete acceptance criteria for development teams.' +description: Break requirements into epics and user stories. Use when the user says 'create the epics and stories list' --- # Create Epics and Stories diff --git a/src/bmm/workflows/4-implementation/code-review/workflow.yaml b/src/bmm/workflows/4-implementation/code-review/workflow.yaml index c6edf8464..cea8f83c1 100644 --- a/src/bmm/workflows/4-implementation/code-review/workflow.yaml +++ b/src/bmm/workflows/4-implementation/code-review/workflow.yaml @@ -1,7 +1,6 @@ # Review Story Workflow name: code-review -description: "Perform an ADVERSARIAL Senior Developer code review that finds 3-10 specific problems in every story. Challenges everything: code quality, test coverage, architecture compliance, security, performance. NEVER accepts `looks good` - must find minimum issues and can auto-fix with user approval." -author: "BMad" +description: "Perform adversarial code review finding specific issues. Use when the user says 'run code review' or 'review this code'" # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/correct-course/workflow.yaml b/src/bmm/workflows/4-implementation/correct-course/workflow.yaml index 6eb4b7f03..a1d374a47 100644 --- a/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +++ b/src/bmm/workflows/4-implementation/correct-course/workflow.yaml @@ -1,7 +1,6 @@ # Correct Course - Sprint Change Management Workflow name: "correct-course" -description: "Navigate significant changes during sprint execution by analyzing impact, proposing solutions, and routing for implementation" -author: "BMad Method" +description: "Manage significant changes during sprint execution. Use when the user says 'correct course' or 'propose sprint change'" config_source: "{project-root}/_bmad/bmm/config.yaml" user_name: "{config_source}:user_name" diff --git a/src/bmm/workflows/4-implementation/create-story/workflow.yaml b/src/bmm/workflows/4-implementation/create-story/workflow.yaml index 991f78c2e..118458110 100644 --- a/src/bmm/workflows/4-implementation/create-story/workflow.yaml +++ b/src/bmm/workflows/4-implementation/create-story/workflow.yaml @@ -1,6 +1,5 @@ name: create-story -description: "Create the next user story from epics+stories with enhanced context analysis and direct ready-for-dev marking" -author: "BMad" +description: "Creates a dedicated story file with all the context the agent will need to implement it later. Use when the user says 'create the next story' or 'create story [story identifier]'" # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/dev-story/workflow.yaml b/src/bmm/workflows/4-implementation/dev-story/workflow.yaml index c8a85a079..06442699a 100644 --- a/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +++ b/src/bmm/workflows/4-implementation/dev-story/workflow.yaml @@ -1,6 +1,5 @@ name: dev-story -description: "Execute a story by implementing tasks/subtasks, writing tests, validating, and updating the story file per acceptance criteria" -author: "BMad" +description: "Execute story implementation following a context filled story spec file. Use when the user says 'dev this story [story file]' or 'implement the next story in the sprint plan'" # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/retrospective/workflow.yaml b/src/bmm/workflows/4-implementation/retrospective/workflow.yaml index 773c7f2d6..a92761af2 100644 --- a/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +++ b/src/bmm/workflows/4-implementation/retrospective/workflow.yaml @@ -1,7 +1,6 @@ # Retrospective - Epic Completion Review Workflow name: "retrospective" -description: "Run after epic completion to review overall success, extract lessons learned, and explore if new information emerged that might impact the next epic" -author: "BMad" +description: "Post-epic review to extract lessons and assess success. Use when the user says 'run a retrospective' or 'lets retro the epic [epic]'" config_source: "{project-root}/_bmad/bmm/config.yaml" user_name: "{config_source}:user_name" diff --git a/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml b/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml index 6c5d22d64..f91cc1e88 100644 --- a/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +++ b/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml @@ -1,5 +1,5 @@ name: sprint-planning -description: "Generate and manage the sprint status tracking file for Phase 4 implementation, extracting all epics and stories from epic files and tracking their status through the development lifecycle" +description: "Generate sprint status tracking from epics. Use when the user says 'run sprint planning' or 'generate sprint plan'" author: "BMad" # Critical variables from config diff --git a/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml b/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml index f27d57024..e6b89df16 100644 --- a/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +++ b/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml @@ -1,6 +1,6 @@ # Sprint Status - Implementation Tracker name: sprint-status -description: "Summarize sprint-status.yaml, surface risks, and route to the right implementation workflow." +description: "Summarize sprint status and surface risks. Use when the user says 'check sprint status' or 'show sprint status'" author: "BMad" # Critical variables from config diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md index 009ead510..f68d343b7 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md @@ -1,6 +1,6 @@ --- name: quick-dev -description: 'Flexible development - execute tech-specs OR direct instructions with optional planning.' +description: "Implement a Quick Tech Spec for small changes or features. Use when the user provides a quick tech spec and says 'implement this quick spec' or 'proceed with implementation of [quick tech spec]'" --- # Quick Dev Workflow diff --git a/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md b/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md index 7175b2aa9..2cbd17f89 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md @@ -1,6 +1,6 @@ --- name: quick-spec -description: Conversational spec engineering - ask questions, investigate code, produce implementation-ready tech-spec. +description: Very quick process to create implementation-ready quick specs for small changes or features. Use when the user says 'create a quick spec' or 'generate a quick tech spec' main_config: '{project-root}/_bmad/bmm/config.yaml' # Checkpoint handler paths diff --git a/src/bmm/workflows/document-project/workflow.yaml b/src/bmm/workflows/document-project/workflow.yaml index be9600c24..8ca0599bf 100644 --- a/src/bmm/workflows/document-project/workflow.yaml +++ b/src/bmm/workflows/document-project/workflow.yaml @@ -1,7 +1,7 @@ # Document Project Workflow Configuration name: "document-project" version: "1.2.0" -description: "Analyzes and documents brownfield projects by scanning codebase, architecture, and patterns to create comprehensive reference documentation for AI-assisted development" +description: "Document brownfield projects for AI context. Use when the user says 'document this project' or 'generate project docs'" author: "BMad" # Critical variables diff --git a/src/bmm/workflows/generate-project-context/workflow.md b/src/bmm/workflows/generate-project-context/workflow.md index e19902270..017e06121 100644 --- a/src/bmm/workflows/generate-project-context/workflow.md +++ b/src/bmm/workflows/generate-project-context/workflow.md @@ -1,6 +1,6 @@ --- name: generate-project-context -description: Creates a concise project-context.md file with critical rules and patterns that AI agents must follow when implementing code. Optimized for LLM context efficiency. +description: Create project-context.md with AI rules. Use when the user says 'generate project context' or 'create project context' --- # Generate Project Context Workflow diff --git a/src/bmm/workflows/qa/automate/checklist.md b/src/bmm/workflows/qa-generate-e2e-tests/checklist.md similarity index 100% rename from src/bmm/workflows/qa/automate/checklist.md rename to src/bmm/workflows/qa-generate-e2e-tests/checklist.md diff --git a/src/bmm/workflows/qa/automate/instructions.md b/src/bmm/workflows/qa-generate-e2e-tests/instructions.md similarity index 100% rename from src/bmm/workflows/qa/automate/instructions.md rename to src/bmm/workflows/qa-generate-e2e-tests/instructions.md diff --git a/src/bmm/workflows/qa/automate/workflow.yaml b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml similarity index 87% rename from src/bmm/workflows/qa/automate/workflow.yaml rename to src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml index f1119e980..3d28df890 100644 --- a/src/bmm/workflows/qa/automate/workflow.yaml +++ b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml @@ -1,7 +1,5 @@ -# Quinn QA workflow: Automate -name: qa-automate -description: "Generate tests quickly for existing features using standard test patterns" -author: "BMad" +name: qa-generate-e2e-tests +description: "Generate end to end automated tests for existing features. Use when the user says 'create qa automated tests for [feature]'" # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/core/tasks/editorial-review-prose.xml b/src/core/tasks/editorial-review-prose.xml index deb53570e..1f26c34d8 100644 --- a/src/core/tasks/editorial-review-prose.xml +++ b/src/core/tasks/editorial-review-prose.xml @@ -1,6 +1,6 @@ + description="Clinical copy-editor that reviews text for communication issues. Use when user says 'review for prose' or 'improve the prose'"> Review text for communication issues that impede comprehension and output suggested fixes in a three-column table diff --git a/src/core/tasks/editorial-review-structure.xml b/src/core/tasks/editorial-review-structure.xml index 426dc3c8c..4d52d3c08 100644 --- a/src/core/tasks/editorial-review-structure.xml +++ b/src/core/tasks/editorial-review-structure.xml @@ -3,8 +3,7 @@ but no context except the content to review --> + description="Structural editor that proposes cuts, reorganization, and simplification while preserving comprehension. Use when user requests 'structural review' or 'cohesive reivew' or 'editorial review of structure'."> Review document structure and propose substantive changes to improve clarity and flow-run this BEFORE copy editing diff --git a/src/core/tasks/help.md b/src/core/tasks/help.md index f07cbc062..0d72da6c6 100644 --- a/src/core/tasks/help.md +++ b/src/core/tasks/help.md @@ -1,6 +1,6 @@ --- name: help -description: Get unstuck by showing what workflow steps come next or answering questions about what to do +description: "Analyzes what is done and the users query and offers advice on what to do next. Use if user says 'bmad-help what should I do next' or 'bmad-help what do I do now'" --- # Task: BMAD Help diff --git a/src/core/tasks/index-docs.xml b/src/core/tasks/index-docs.xml index 30e060921..d4d7c0811 100644 --- a/src/core/tasks/index-docs.xml +++ b/src/core/tasks/index-docs.xml @@ -1,5 +1,5 @@ + description="Generates or updates an index.md to reference all docs in the folder. Use if user requests to 'create an index of all files [here]' or 'reindex the folder [here]."> MANDATORY: Execute ALL steps in the flow section IN EXACT ORDER DO NOT skip steps or change the sequence diff --git a/src/core/tasks/review-adversarial-general.xml b/src/core/tasks/review-adversarial-general.xml index 421719bb5..52e5b17fe 100644 --- a/src/core/tasks/review-adversarial-general.xml +++ b/src/core/tasks/review-adversarial-general.xml @@ -1,7 +1,8 @@ - + Cynically review content and produce findings diff --git a/src/core/tasks/shard-doc.xml b/src/core/tasks/shard-doc.xml index 1dc8fe80e..c8705555b 100644 --- a/src/core/tasks/shard-doc.xml +++ b/src/core/tasks/shard-doc.xml @@ -1,5 +1,5 @@ + description="Splits large markdown documents into smaller, organized files based on level 2 (default) sections. Use if the user says 'Shard Document [document]'"> Split large markdown documents into smaller, organized files based on level 2 sections using @kayvan/markdown-tree-parser tool diff --git a/src/core/workflows/advanced-elicitation/workflow.xml b/src/core/workflows/advanced-elicitation/workflow.xml index ea7395e41..31c52ce73 100644 --- a/src/core/workflows/advanced-elicitation/workflow.xml +++ b/src/core/workflows/advanced-elicitation/workflow.xml @@ -1,4 +1,5 @@ diff --git a/src/core/workflows/brainstorming/workflow.md b/src/core/workflows/brainstorming/workflow.md index 3190c983c..565e1e9e5 100644 --- a/src/core/workflows/brainstorming/workflow.md +++ b/src/core/workflows/brainstorming/workflow.md @@ -1,6 +1,6 @@ --- name: brainstorming -description: Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods +description: "Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says 'help me brainstorm' or 'help me ideate'." context_file: '' # Optional context file path for project-specific guidance --- diff --git a/src/core/workflows/party-mode/workflow.md b/src/core/workflows/party-mode/workflow.md index eaec3c931..b4498341e 100644 --- a/src/core/workflows/party-mode/workflow.md +++ b/src/core/workflows/party-mode/workflow.md @@ -1,6 +1,6 @@ --- name: party-mode -description: Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations +description: "Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests 'party mode' only." --- # Party Mode Workflow From 1d49fe1802bf5cc96c0012182b3047fc9d5bdb08 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 22 Feb 2026 16:38:05 -0600 Subject: [PATCH 09/15] feat(templates): remove disable-model-invocation to enable workflow skill calls This change removes the disable-model-invocation flag from all IDE installer templates. By allowing model invocation, bmad help can now properly invoke suggested workflows as direct skill calls, improving the user experience by enabling automatic workflow execution when desired. --- tools/cli/installers/lib/ide/_config-driven.js | 1 - tools/cli/installers/lib/ide/github-copilot.js | 1 - .../cli/installers/lib/ide/shared/task-tool-command-generator.js | 1 - tools/cli/installers/lib/ide/templates/agent-command-template.md | 1 - tools/cli/installers/lib/ide/templates/combined/default-agent.md | 1 - .../lib/ide/templates/combined/default-workflow-yaml.md | 1 - .../installers/lib/ide/templates/combined/default-workflow.md | 1 - .../installers/lib/ide/templates/workflow-command-template.md | 1 - tools/cli/installers/lib/ide/templates/workflow-commander.md | 1 - 9 files changed, 9 deletions(-) diff --git a/tools/cli/installers/lib/ide/_config-driven.js b/tools/cli/installers/lib/ide/_config-driven.js index 9541c75ed..85196cf76 100644 --- a/tools/cli/installers/lib/ide/_config-driven.js +++ b/tools/cli/installers/lib/ide/_config-driven.js @@ -353,7 +353,6 @@ You must fully embody this agent's persona and follow all activation instruction return `--- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- # {{name}} diff --git a/tools/cli/installers/lib/ide/github-copilot.js b/tools/cli/installers/lib/ide/github-copilot.js index 033e8d627..059127f81 100644 --- a/tools/cli/installers/lib/ide/github-copilot.js +++ b/tools/cli/installers/lib/ide/github-copilot.js @@ -166,7 +166,6 @@ class GitHubCopilotSetup extends BaseIdeSetup { return `--- description: '${description.replaceAll("'", "''")}' tools: ${toolsStr} -disable-model-invocation: true --- You must fully embody this agent's persona and follow all activation instructions exactly as specified. diff --git a/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js b/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js index ece1c8630..93e5b9a81 100644 --- a/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +++ b/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js @@ -176,7 +176,6 @@ class TaskToolCommandGenerator { return `--- description: '${description.replaceAll("'", "''")}' -disable-model-invocation: true --- # ${item.displayName || item.name} diff --git a/tools/cli/installers/lib/ide/templates/agent-command-template.md b/tools/cli/installers/lib/ide/templates/agent-command-template.md index 90e176a03..897136317 100644 --- a/tools/cli/installers/lib/ide/templates/agent-command-template.md +++ b/tools/cli/installers/lib/ide/templates/agent-command-template.md @@ -1,7 +1,6 @@ --- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command. diff --git a/tools/cli/installers/lib/ide/templates/combined/default-agent.md b/tools/cli/installers/lib/ide/templates/combined/default-agent.md index 17a0be4ba..f8ad93801 100644 --- a/tools/cli/installers/lib/ide/templates/combined/default-agent.md +++ b/tools/cli/installers/lib/ide/templates/combined/default-agent.md @@ -1,7 +1,6 @@ --- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command. diff --git a/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md b/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md index 2a5e49b83..eca904370 100644 --- a/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +++ b/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md @@ -1,7 +1,6 @@ --- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded: diff --git a/tools/cli/installers/lib/ide/templates/combined/default-workflow.md b/tools/cli/installers/lib/ide/templates/combined/default-workflow.md index 8c4fa818f..afb0dea58 100644 --- a/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +++ b/tools/cli/installers/lib/ide/templates/combined/default-workflow.md @@ -1,7 +1,6 @@ --- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @{project-root}/{{bmadFolderName}}/{{path}}, READ its entire contents and follow its directions exactly! diff --git a/tools/cli/installers/lib/ide/templates/workflow-command-template.md b/tools/cli/installers/lib/ide/templates/workflow-command-template.md index 472c1553a..5c9e436c7 100644 --- a/tools/cli/installers/lib/ide/templates/workflow-command-template.md +++ b/tools/cli/installers/lib/ide/templates/workflow-command-template.md @@ -1,6 +1,5 @@ --- description: '{{description}}' -disable-model-invocation: true --- IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded: diff --git a/tools/cli/installers/lib/ide/templates/workflow-commander.md b/tools/cli/installers/lib/ide/templates/workflow-commander.md index d49c8319d..3645c1a2f 100644 --- a/tools/cli/installers/lib/ide/templates/workflow-commander.md +++ b/tools/cli/installers/lib/ide/templates/workflow-commander.md @@ -1,6 +1,5 @@ --- description: '{{description}}' -disable-model-invocation: true --- IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @{{workflow_path}}, READ its entire contents and follow its directions exactly! From 44eeaa8a7124b7a1dd128327d7cd1ed6c9fe43d7 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 22 Feb 2026 19:41:57 -0600 Subject: [PATCH 10/15] feat(docs): add public roadmap and improve site navigation - Add comprehensive public roadmap with In Progress, Getting Started, and Community sections - Add roadmap callout to README.md and docs welcome page - Add roadmap-specific card grid styles with equal-height cards - Fix rehype-markdown-links plugin to detect docs directory in various project structures - Rename roadmap.md to roadmap.mdx for proper Astro/Starlight rendering - Update doc link validator to support .mdx files --- CHANGELOG.md | 37 ++++ README.md | 10 + docs/index.md | 4 + docs/roadmap.mdx | 136 ++++++++++++ tools/validate-doc-links.js | 26 ++- website/astro.config.mjs | 1 + website/src/rehype-markdown-links.js | 10 +- website/src/styles/custom.css | 296 +++++++++++++++++++++++++++ 8 files changed, 513 insertions(+), 7 deletions(-) create mode 100644 docs/roadmap.mdx diff --git a/CHANGELOG.md b/CHANGELOG.md index aa9d101d1..df663807b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,42 @@ # Changelog +## [6.0.2] + +### 🎁 Features + +* Add CodeBuddy platform support with installer configuration (#1483) +* Add LLM audit prompt for file reference conventions - new audit tool using parallel subagents (#1720) +* Migrate Codex installer from `.codex/prompts` to `.agents/skills` format to align with Codex CLI changes (#1729) +* Convert review-pr and audit-file-refs tools to proper bmad-os skills with slash commands `/bmad-os-review-pr` and `/bmad-os-audit-file-refs` (#1732) + +### 🐛 Bug Fixes + +* Fix 24 broken step references in create-architecture workflow after directory rename (#1734) +* Fix step file path references in check-implementation-readiness workflow (#1709, #1716) +* Fix 3 broken file references and enable strict file reference validation in CI (#1717) +* Fix Rovo Dev integration with custom installer that generates prompts.yml manifest (#1701) +* Fix 104 relative step file references to use standardized `{project-root}/_bmad/` paths across 68 files (#1722) +* Fix code fence imbalance in step-03-starter.md that caused rendering issues (#1724) +* Remove Windsurf from recommended/preferred IDEs list (#1727) +* Fix default Codex install location from global to project for better defaults (#1698) +* Add npx cache workaround to Quick Start for stale beta versions (#1685) +* Add language instructions to replace placeholder text in Research overview (#1703) +* Ignore `.junie/` IDE integration folder in git and prettier configs (#1719) + +### ♻️ Refactoring + +* Update open source tool skills structure for future plugin migration +* Standardize all workflow descriptions for skill generation with concise format and explicit trigger phrases +* Remove `disable-model-invocation` flag from all IDE installer templates to enable workflow skill calls + +### 📚 Documentation + +* Elevate `bmad-help` as primary on-ramp across all documentation +* Update workflow names with `bmad-bmm-` prefix and standardize table formatting +* Clarify phase routing and catalog path in help task + +--- + ## [6.0.0] V6 Stable Release! The End of Beta! diff --git a/README.md b/README.md index 950811e85..ce377b569 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,16 @@ Traditional AI tools do the thinking for you, producing average results. BMad ag [Learn more at **docs.bmad-method.org**](http://docs.bmad-method.org) +--- + +## 🚀 What's Next for BMad? + +**V6 is here and we're just getting started!** The BMad Method is evolving rapidly with optimizations including Cross Platform Agent Team and Sub Agent inclusion, Skills Architecture, BMad Builder v1, Dev Loop Automation, and so much more in the works. + +**[📍 Check out the complete Roadmap →](http://docs.bmad-method.org/roadmap/)** + +--- + ## Quick Start **Prerequisites**: [Node.js](https://nodejs.org) v20+ diff --git a/docs/index.md b/docs/index.md index 2d3de20cd..7fd3fa245 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,6 +7,10 @@ The BMad Method (**B**reakthrough **M**ethod of **A**gile AI **D**riven Developm If you're comfortable working with AI coding assistants like Claude, Cursor, or GitHub Copilot, you're ready to get started. +:::note[🚀 V6 is Here and We're Just Getting Started!] +Skills Architecture, BMad Builder v1, Dev Loop Automation, and so much more in the works. **[Check out the Roadmap →](/roadmap/)** +::: + ## New Here? Start with a Tutorial The fastest way to understand BMad is to try it. diff --git a/docs/roadmap.mdx b/docs/roadmap.mdx new file mode 100644 index 000000000..8c7f7f1c8 --- /dev/null +++ b/docs/roadmap.mdx @@ -0,0 +1,136 @@ +--- +title: Roadmap +description: What's next for BMad - Features, improvements, and community contributions +--- + +# The BMad Method: Public Roadmap + +The BMad Method, BMad Method Module (BMM), and BMad Builder (BMB) are evolving. Here's what we're working on and what's coming next. + +
+ +

In Progress

+ +
+
+ 🧩 +

Universal Skills Architecture

+

One skill, any platform. Write once, run everywhere.

+
+
+ 🏗️ +

BMad Builder v1

+

Craft production-ready AI agents and workflows with evals, teams, and graceful degradation built in.

+
+
+ 🧠 +

Project Context System

+

Your AI actually understands your project. Framework-aware context that evolves with your codebase.

+
+
+ 📦 +

Centralized Skills

+

Install once, use everywhere. Share skills across projects without the file clutter.

+
+
+ 🔄 +

Adaptive Skills

+

Skills that know your tool. Optimized variants for Claude, Codex, Kimi, and OpenCode, plus many more.

+
+
+ 📝 +

BMad Team Pros Blog

+

Guides, articles and insights from the team. Launching soon.

+
+
+ +

Getting Started

+ +
+
+ 🏪 +

Skill Marketplace

+

Discover, install, and update community-built skills. One curl command away from superpowers.

+
+
+ 🎨 +

Workflow Customization

+

Make it yours. Integrate Jira, Linear, custom outputs your workflow, your rules.

+
+
+ 🚀 +

Phase 1-3 Optimization

+

Lightning-fast planning with sub-agent context gathering. YOLO mode meets guided excellence.

+
+
+ 🌐 +

Enterprise Ready

+

SSO, audit logs, team workspaces. All the boring stuff that makes companies say yes.

+
+
+ 💎 +

Community Modules Explosion

+

Entertainment, security, therapy, roleplay and much more. Expand the BMad Method platform.

+
+
+ +

Dev Loop Automation

+

Optional autopilot for development. Let AI handle the flow while keeping quality sky-high.

+
+
+ +

Community and Team

+ +
+
+ 🎙️ +

The BMad Method Podcast

+

Conversations about AI-native development. Launching March 1, 2026!

+
+
+ 🎓 +

The BMad Method Master Class

+

Go from user to expert. Deep dives into every phase, every workflow, every secret.

+
+
+ 🏗️ +

The BMad Builder Master Class

+

Build your own agents. Advanced techniques for when you are ready to create, not just use.

+
+
+ +

BMad Prototype First

+

Idea to working prototype in one session. Craft your dream app like a work of art.

+
+
+ 🌴 +

BMad BALM!

+

Life management for the AI-native. Tasks, habits, goals your AI copilot for everything.

+
+
+ 🖥️ +

Official UI

+

A beautiful interface for the entire BMad ecosystem. CLI power, GUI polish.

+
+
+ 🔒 +

BMad in a Box

+

Self-hosted, air-gapped, enterprise-grade. Your AI assistant, your infrastructure, your control.

+
+
+ +
+

Want to Contribute?

+

+ This is only a partial list of what's planned. The BMad Open Source team welcomes contributors!{" "}
+ Join us on GitHub to help shape the future of AI-driven development. +

+

+ Love what we're building? We appreciate both one-time and monthly{" "}support. +

+

+ For corporate sponsorship, partnership inquiries, speaking engagements, training, or media enquiries:{" "} + contact@bmadcode.com +

+
+
diff --git a/tools/validate-doc-links.js b/tools/validate-doc-links.js index f8ce4c478..167268c90 100644 --- a/tools/validate-doc-links.js +++ b/tools/validate-doc-links.js @@ -51,7 +51,7 @@ function getMarkdownFiles(dir) { if (entry.isDirectory()) { walk(fullPath); - } else if (entry.isFile() && entry.name.endsWith('.md')) { + } else if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.mdx'))) { files.push(fullPath); } } @@ -120,10 +120,13 @@ function resolveLink(siteRelativePath, sourceFile) { if (!resolved.startsWith(DOCS_ROOT + path.sep) && resolved !== DOCS_ROOT) return null; if (fs.existsSync(resolved) && fs.statSync(resolved).isFile()) return resolved; if (fs.existsSync(resolved + '.md')) return resolved + '.md'; - // Directory: check for index.md + if (fs.existsSync(resolved + '.mdx')) return resolved + '.mdx'; + // Directory: check for index.md or index.mdx if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) { const indexFile = path.join(resolved, 'index.md'); + const indexMdxFile = path.join(resolved, 'index.mdx'); if (fs.existsSync(indexFile)) return indexFile; + if (fs.existsSync(indexMdxFile)) return indexMdxFile; } return null; } @@ -134,12 +137,17 @@ function resolveLink(siteRelativePath, sourceFile) { } if (checkPath.endsWith('/')) { - // Could be file.md or directory/index.md - const asFile = path.join(DOCS_ROOT, checkPath.slice(0, -1) + '.md'); + // Could be file.md, file.mdx, or directory/index.md/mdx + const baseName = checkPath.slice(0, -1); + const asMd = path.join(DOCS_ROOT, baseName + '.md'); + const asMdx = path.join(DOCS_ROOT, baseName + '.mdx'); const asIndex = path.join(DOCS_ROOT, checkPath, 'index.md'); + const asIndexMdx = path.join(DOCS_ROOT, checkPath, 'index.mdx'); - if (fs.existsSync(asFile)) return asFile; + if (fs.existsSync(asMd)) return asMd; + if (fs.existsSync(asMdx)) return asMdx; if (fs.existsSync(asIndex)) return asIndex; + if (fs.existsSync(asIndexMdx)) return asIndexMdx; return null; } @@ -151,10 +159,16 @@ function resolveLink(siteRelativePath, sourceFile) { const withMd = direct + '.md'; if (fs.existsSync(withMd)) return withMd; - // Directory without trailing slash: check for index.md + // Try with .mdx extension + const withMdx = direct + '.mdx'; + if (fs.existsSync(withMdx)) return withMdx; + + // Directory without trailing slash: check for index.md or index.mdx if (fs.existsSync(direct) && fs.statSync(direct).isDirectory()) { const indexFile = path.join(direct, 'index.md'); + const indexMdxFile = path.join(direct, 'index.mdx'); if (fs.existsSync(indexFile)) return indexFile; + if (fs.existsSync(indexMdxFile)) return indexMdxFile; } return null; diff --git a/website/astro.config.mjs b/website/astro.config.mjs index d59de430a..565b81565 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -90,6 +90,7 @@ export default defineConfig({ // Sidebar configuration (Diataxis structure) sidebar: [ { label: 'Welcome', slug: 'index' }, + { label: 'Roadmap', slug: 'roadmap' }, { label: 'Tutorials', collapsed: false, diff --git a/website/src/rehype-markdown-links.js b/website/src/rehype-markdown-links.js index fbf6fb76e..c0428f261 100644 --- a/website/src/rehype-markdown-links.js +++ b/website/src/rehype-markdown-links.js @@ -101,11 +101,19 @@ export function findFirstDelimiter(str) { /** Walk up from a file path to find the content docs directory. */ export function detectContentDir(filePath) { const segments = filePath.split(path.sep); - // Look for src/content/docs in the path + // Look for src/content/docs in the path (standard Astro) for (let i = segments.length - 1; i >= 2; i--) { if (segments[i - 2] === 'src' && segments[i - 1] === 'content' && segments[i] === 'docs') { return segments.slice(0, i + 1).join(path.sep); } } + // Also check for a standalone 'docs' directory (BMAD project structure) + // Path format: .../bmm/docs/file.mdx or .../bmm/website/... + for (let i = segments.length - 1; i >= 0; i--) { + if (segments[i] === 'docs') { + // Found docs directory - use its parent as the content root + return segments.slice(0, i + 1).join(path.sep); + } + } return null; } diff --git a/website/src/styles/custom.css b/website/src/styles/custom.css index a8f66a2fd..3c1c6d742 100644 --- a/website/src/styles/custom.css +++ b/website/src/styles/custom.css @@ -507,3 +507,299 @@ blockquote { padding-right: 3rem; } } + +/* ============================================ + ROADMAP STYLES + ============================================ */ +.roadmap-container { + --color-planned: #6366f1; + --color-in-progress: #10b981; + --color-exploring: #f59e0b; + --color-bg-card: rgba(255, 255, 255, 0.03); + --color-border: rgba(255, 255, 255, 0.1); +} + +.dark .roadmap-container { + --color-bg-card: rgba(255, 255, 255, 0.03); + --color-border: rgba(255, 255, 255, 0.1); +} + +.light .roadmap-container { + --color-bg-card: rgba(0, 0, 0, 0.02); + --color-border: rgba(0, 0, 0, 0.1); +} + +.roadmap-legend { + display: flex; + gap: 1.5rem; + flex-wrap: wrap; + justify-content: center; + margin: 2rem 0; + padding: 1rem 1.5rem; + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: 12px; +} + +.legend-item { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.9rem; +} + +.legend-dot { + width: 10px; + height: 10px; + border-radius: 50%; +} + +.legend-dot.planned { background: var(--color-planned); } +.legend-dot.in-progress { background: var(--color-in-progress); } +.legend-dot.exploring { background: var(--color-exploring); } + +.roadmap-timeline { + position: relative; + max-width: 1000px; + margin: 3rem auto; + padding: 0 1rem; +} + +.roadmap-timeline::before { + content: ''; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: 3px; + background: linear-gradient(to bottom, var(--color-in-progress), var(--color-planned), var(--color-exploring)); + transform: translateX(-50%); + border-radius: 3px; +} + +.roadmap-item { + position: relative; + margin-bottom: 3rem; + display: grid; + grid-template-columns: 1fr auto 1fr; + gap: 2rem; + align-items: start; +} + +.roadmap-item:nth-child(odd) .roadmap-card { + grid-column: 1; +} + +.roadmap-item:nth-child(even) .roadmap-card { + grid-column: 3; +} + +.roadmap-marker { + grid-column: 2; + width: 20px; + height: 20px; + border-radius: 50%; + border: 4px solid var(--starlight-canvas-bg); + background: var(--color-in-progress); + position: relative; + z-index: 1; + box-shadow: 0 0 0 4px var(--color-border); +} + +.roadmap-item.in-progress .roadmap-marker { background: var(--color-in-progress); } +.roadmap-item.planned .roadmap-marker { background: var(--color-planned); } +.roadmap-item.exploring .roadmap-marker { background: var(--color-exploring); } + +.roadmap-item:nth-child(odd) .roadmap-content { + grid-column: 1; + text-align: right; +} + +.roadmap-item:nth-child(even) .roadmap-content { + grid-column: 3; + text-align: left; +} + +.roadmap-card { + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: 16px; + padding: 1.5rem; + transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; +} + +.roadmap-card:hover { + transform: translateY(-4px); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); + border-color: var(--color-in-progress); +} + +.roadmap-card.planned:hover { border-color: var(--color-planned); } +.roadmap-card.exploring:hover { border-color: var(--color-exploring); } + +.roadmap-header { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 1rem; +} + +.roadmap-item:nth-child(odd) .roadmap-header { + flex-direction: row-reverse; +} + +.roadmap-badge { + padding: 0.25rem 0.75rem; + border-radius: 20px; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.roadmap-badge.in-progress { + background: rgba(16, 185, 129, 0.15); + color: #10b981; +} + +.roadmap-badge.planned { + background: rgba(99, 102, 241, 0.15); + color: #6366f1; +} + +.roadmap-badge.exploring { + background: rgba(245, 158, 11, 0.15); + color: #f59e0b; +} + +.roadmap-title { + font-size: 1.25rem; + font-weight: 700; + margin: 0; +} + +.roadmap-description { + color: var(--slate-color-500); + margin-bottom: 1rem; + line-height: 1.6; +} + +.roadmap-features { + list-style: none; + padding: 0; + margin: 0; +} + +.roadmap-features li { + padding: 0.5rem 0; + padding-left: 1.5rem; + position: relative; + font-size: 0.9rem; + color: var(--slate-color-400); +} + +.roadmap-features li::before { + content: '→'; + position: absolute; + left: 0; + color: var(--color-in-progress); +} + +.roadmap-item.planned .roadmap-features li::before { color: var(--color-planned); } +.roadmap-item.exploring .roadmap-features li::before { color: var(--color-exploring); } + +.roadmap-section-title { + text-align: center; + font-size: 1.5rem; + font-weight: 700; + margin: 3rem 0 2rem; + padding: 1rem; + background: linear-gradient(135deg, var(--color-in-progress), var(--color-planned)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.roadmap-future { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + align-items: stretch; + gap: 1.5rem; + margin-top: 3rem; + padding: 2rem; + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: 16px; +} + +.roadmap-future-card { + padding: 1.5rem; + border-radius: 12px; + background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(245, 158, 11, 0.05)); + border: 1px solid var(--color-border); + transition: transform 0.2s ease; + display: flex; + flex-direction: column; + min-height: 140px; +} + +.roadmap-future-card h4 { + margin: 0 0 0.5rem 0; +} + +.roadmap-future-card p { + margin: 0; +} + +.roadmap-future-card:hover { + transform: scale(1.02); +} + +.roadmap-future-card h4 { + margin: 0 0 0.5rem; + font-size: 1.1rem; + color: var(--color-planned); +} + +.roadmap-future-card p { + margin: 0; + font-size: 0.9rem; + color: var(--slate-color-400); +} + +.roadmap-emoji { + font-size: 1.5rem; + margin-bottom: 0.5rem; + display: block; +} + +@media (max-width: 768px) { + .roadmap-timeline::before { + left: 20px; + } + + .roadmap-item { + grid-template-columns: auto 1fr; + gap: 1rem; + } + + .roadmap-item:nth-child(odd) .roadmap-card, + .roadmap-item:nth-child(even) .roadmap-card { + grid-column: 2; + } + + .roadmap-item:nth-child(odd) .roadmap-content, + .roadmap-item:nth-child(even) .roadmap-content { + grid-column: 2; + text-align: left; + } + + .roadmap-marker { + grid-column: 1; + grid-row: 1; + } + + .roadmap-item:nth-child(odd) .roadmap-header { + flex-direction: row; + } +} From 3ad6985643158dd92bfcf9b284f884ddd00f1de6 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 22 Feb 2026 19:48:27 -0600 Subject: [PATCH 11/15] 6.0.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f538a62f..c6c137900 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bmad-method", - "version": "6.0.1", + "version": "6.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bmad-method", - "version": "6.0.1", + "version": "6.0.2", "license": "MIT", "dependencies": { "@clack/core": "^1.0.0", diff --git a/package.json b/package.json index 3881e2733..0fce31566 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "bmad-method", - "version": "6.0.1", + "version": "6.0.2", "description": "Breakthrough Method of Agile AI-driven Development", "keywords": [ "agile", From 0d858cbc5be89d85786a80c38766073e2ae3d76e Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 23 Feb 2026 15:31:03 -0600 Subject: [PATCH 12/15] standardize all workflow descriptions to use proper quotes to not break command or skilll front matter --- src/bmm/workflows/1-analysis/create-product-brief/workflow.md | 2 +- .../workflows/1-analysis/research/workflow-domain-research.md | 2 +- .../workflows/1-analysis/research/workflow-market-research.md | 2 +- .../1-analysis/research/workflow-technical-research.md | 2 +- .../2-plan-workflows/create-prd/workflow-create-prd.md | 2 +- .../workflows/2-plan-workflows/create-prd/workflow-edit-prd.md | 2 +- .../2-plan-workflows/create-prd/workflow-validate-prd.md | 2 +- src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md | 2 +- .../3-solutioning/check-implementation-readiness/workflow.md | 2 +- src/bmm/workflows/3-solutioning/create-architecture/workflow.md | 2 +- .../3-solutioning/create-epics-and-stories/workflow.md | 2 +- src/bmm/workflows/4-implementation/code-review/workflow.yaml | 2 +- src/bmm/workflows/4-implementation/correct-course/workflow.yaml | 2 +- src/bmm/workflows/4-implementation/create-story/workflow.yaml | 2 +- src/bmm/workflows/4-implementation/dev-story/workflow.yaml | 2 +- src/bmm/workflows/4-implementation/retrospective/workflow.yaml | 2 +- .../workflows/4-implementation/sprint-planning/workflow.yaml | 2 +- src/bmm/workflows/4-implementation/sprint-status/workflow.yaml | 2 +- src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md | 2 +- src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md | 2 +- src/bmm/workflows/document-project/workflow.yaml | 2 +- src/bmm/workflows/generate-project-context/workflow.md | 2 +- src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml | 2 +- src/core/tasks/editorial-review-prose.xml | 2 +- src/core/tasks/editorial-review-structure.xml | 2 +- src/core/tasks/help.md | 2 +- src/core/tasks/index-docs.xml | 2 +- src/core/tasks/review-adversarial-general.xml | 2 +- src/core/tasks/shard-doc.xml | 2 +- src/core/workflows/advanced-elicitation/workflow.xml | 2 +- src/core/workflows/brainstorming/workflow.md | 2 +- src/core/workflows/party-mode/workflow.md | 2 +- 32 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/bmm/workflows/1-analysis/create-product-brief/workflow.md b/src/bmm/workflows/1-analysis/create-product-brief/workflow.md index 1892603e7..c50d325ef 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/workflow.md @@ -1,6 +1,6 @@ --- name: create-product-brief -description: Create product brief through collaborative discovery. Use when the user says 'lets create a product brief' or 'help me create a project brief' +description: 'Create product brief through collaborative discovery. Use when the user says "lets create a product brief" or "help me create a project brief"' --- # Product Brief Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-domain-research.md b/src/bmm/workflows/1-analysis/research/workflow-domain-research.md index 7dc86184b..ec193660d 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-domain-research.md @@ -1,6 +1,6 @@ --- name: domain-research -description: Conduct domain and industry research. Use when the user says 'lets create a research report on [domain or industry] +description: 'Conduct domain and industry research. Use when the user says "lets create a research report on [domain or industry]"' --- # Domain Research Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-market-research.md b/src/bmm/workflows/1-analysis/research/workflow-market-research.md index 9c424c16b..8a77a67cd 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-market-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-market-research.md @@ -1,6 +1,6 @@ --- name: market-research -description: Conduct market research on competition and customers. Use when the user says 'create a market research report about [business idea]'. +description: 'Conduct market research on competition and customers. Use when the user says "create a market research report about [business idea]".' --- # Market Research Workflow diff --git a/src/bmm/workflows/1-analysis/research/workflow-technical-research.md b/src/bmm/workflows/1-analysis/research/workflow-technical-research.md index 8ba2273d3..ecc9a2f27 100644 --- a/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +++ b/src/bmm/workflows/1-analysis/research/workflow-technical-research.md @@ -1,6 +1,6 @@ --- name: technical-research -description: Conduct technical research on technologies and architecture. Use when the user says 'create a technical research report on [topic]'. +description: 'Conduct technical research on technologies and architecture. Use when the user says "create a technical research report on [topic]".' --- # Technical Research Workflow diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md index e84a0058e..c7c565a72 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md @@ -1,6 +1,6 @@ --- name: create-prd -description: Create a PRD from scratch. Use when the user says 'lets create a product requirements document' or 'I want to create a new PRD' +description: 'Create a PRD from scratch. Use when the user says "lets create a product requirements document" or "I want to create a new PRD"' main_config: '{project-root}/_bmad/bmm/config.yaml' nextStep: './steps-c/step-01-init.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md index 58a67a9bc..e416e11f5 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md @@ -1,6 +1,6 @@ --- name: edit-prd -description: Edit an existing PRD. Use when the user says 'edit this PRD'. +description: 'Edit an existing PRD. Use when the user says "edit this PRD".' main_config: '{project-root}/_bmad/bmm/config.yaml' editWorkflow: './steps-e/step-e-01-discovery.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md index 4d59b42ee..7f0703440 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md @@ -1,6 +1,6 @@ --- name: validate-prd -description: Validate a PRD against standards. Use when the user says 'validate this PRD' or 'run PRD validation' +description: 'Validate a PRD against standards. Use when the user says "validate this PRD" or "run PRD validation"' main_config: '{project-root}/_bmad/bmm/config.yaml' validateWorkflow: './steps-v/step-v-01-discovery.md' --- diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md index 19dfbb5ca..4dfdba9f1 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md @@ -1,6 +1,6 @@ --- name: create-ux-design -description: Plan UX patterns and design specifications. Use when the user says 'lets create UX design' or 'create UX specifications' or 'help me plan the UX' +description: 'Plan UX patterns and design specifications. Use when the user says "lets create UX design" or "create UX specifications" or "help me plan the UX"' --- # Create UX Design Workflow diff --git a/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md b/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md index 38e2d10be..f1ab122ec 100644 --- a/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +++ b/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md @@ -1,6 +1,6 @@ --- name: check-implementation-readiness -description: Validate PRD, UX, Architecture and Epics specs are complete. Use when the user says 'check implementation readiness'. +description: 'Validate PRD, UX, Architecture and Epics specs are complete. Use when the user says "check implementation readiness".' --- # Implementation Readiness diff --git a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md index bee5fe33d..1fac8d1ac 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md @@ -1,6 +1,6 @@ --- name: create-architecture -description: Create architecture solution design decisions for AI agent consistency. Use when the user says 'lets create architecture' or 'create technical architecture' or 'create a solution design' +description: 'Create architecture solution design decisions for AI agent consistency. Use when the user says "lets create architecture" or "create technical architecture" or "create a solution design"' --- # Architecture Workflow diff --git a/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md b/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md index 23c791d94..41a6ee106 100644 --- a/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +++ b/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md @@ -1,6 +1,6 @@ --- name: create-epics-and-stories -description: Break requirements into epics and user stories. Use when the user says 'create the epics and stories list' +description: 'Break requirements into epics and user stories. Use when the user says "create the epics and stories list"' --- # Create Epics and Stories diff --git a/src/bmm/workflows/4-implementation/code-review/workflow.yaml b/src/bmm/workflows/4-implementation/code-review/workflow.yaml index cea8f83c1..7965af5ae 100644 --- a/src/bmm/workflows/4-implementation/code-review/workflow.yaml +++ b/src/bmm/workflows/4-implementation/code-review/workflow.yaml @@ -1,6 +1,6 @@ # Review Story Workflow name: code-review -description: "Perform adversarial code review finding specific issues. Use when the user says 'run code review' or 'review this code'" +description: 'Perform adversarial code review finding specific issues. Use when the user says "run code review" or "review this code"' # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/correct-course/workflow.yaml b/src/bmm/workflows/4-implementation/correct-course/workflow.yaml index a1d374a47..f2211f7b3 100644 --- a/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +++ b/src/bmm/workflows/4-implementation/correct-course/workflow.yaml @@ -1,6 +1,6 @@ # Correct Course - Sprint Change Management Workflow name: "correct-course" -description: "Manage significant changes during sprint execution. Use when the user says 'correct course' or 'propose sprint change'" +description: 'Manage significant changes during sprint execution. Use when the user says "correct course" or "propose sprint change"' config_source: "{project-root}/_bmad/bmm/config.yaml" user_name: "{config_source}:user_name" diff --git a/src/bmm/workflows/4-implementation/create-story/workflow.yaml b/src/bmm/workflows/4-implementation/create-story/workflow.yaml index 118458110..972972aff 100644 --- a/src/bmm/workflows/4-implementation/create-story/workflow.yaml +++ b/src/bmm/workflows/4-implementation/create-story/workflow.yaml @@ -1,5 +1,5 @@ name: create-story -description: "Creates a dedicated story file with all the context the agent will need to implement it later. Use when the user says 'create the next story' or 'create story [story identifier]'" +description: 'Creates a dedicated story file with all the context the agent will need to implement it later. Use when the user says "create the next story" or "create story [story identifier]"' # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/dev-story/workflow.yaml b/src/bmm/workflows/4-implementation/dev-story/workflow.yaml index 06442699a..b5ee9308a 100644 --- a/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +++ b/src/bmm/workflows/4-implementation/dev-story/workflow.yaml @@ -1,5 +1,5 @@ name: dev-story -description: "Execute story implementation following a context filled story spec file. Use when the user says 'dev this story [story file]' or 'implement the next story in the sprint plan'" +description: 'Execute story implementation following a context filled story spec file. Use when the user says "dev this story [story file]" or "implement the next story in the sprint plan"' # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/bmm/workflows/4-implementation/retrospective/workflow.yaml b/src/bmm/workflows/4-implementation/retrospective/workflow.yaml index a92761af2..49ac2cc35 100644 --- a/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +++ b/src/bmm/workflows/4-implementation/retrospective/workflow.yaml @@ -1,6 +1,6 @@ # Retrospective - Epic Completion Review Workflow name: "retrospective" -description: "Post-epic review to extract lessons and assess success. Use when the user says 'run a retrospective' or 'lets retro the epic [epic]'" +description: 'Post-epic review to extract lessons and assess success. Use when the user says "run a retrospective" or "lets retro the epic [epic]"' config_source: "{project-root}/_bmad/bmm/config.yaml" user_name: "{config_source}:user_name" diff --git a/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml b/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml index f91cc1e88..0f1b73789 100644 --- a/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +++ b/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml @@ -1,5 +1,5 @@ name: sprint-planning -description: "Generate sprint status tracking from epics. Use when the user says 'run sprint planning' or 'generate sprint plan'" +description: 'Generate sprint status tracking from epics. Use when the user says "run sprint planning" or "generate sprint plan"' author: "BMad" # Critical variables from config diff --git a/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml b/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml index e6b89df16..290b1ce32 100644 --- a/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +++ b/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml @@ -1,6 +1,6 @@ # Sprint Status - Implementation Tracker name: sprint-status -description: "Summarize sprint status and surface risks. Use when the user says 'check sprint status' or 'show sprint status'" +description: 'Summarize sprint status and surface risks. Use when the user says "check sprint status" or "show sprint status"' author: "BMad" # Critical variables from config diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md index f68d343b7..29349a5d8 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md @@ -1,6 +1,6 @@ --- name: quick-dev -description: "Implement a Quick Tech Spec for small changes or features. Use when the user provides a quick tech spec and says 'implement this quick spec' or 'proceed with implementation of [quick tech spec]'" +description: 'Implement a Quick Tech Spec for small changes or features. Use when the user provides a quick tech spec and says "implement this quick spec" or "proceed with implementation of [quick tech spec]"' --- # Quick Dev Workflow diff --git a/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md b/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md index 2cbd17f89..462f41741 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md @@ -1,6 +1,6 @@ --- name: quick-spec -description: Very quick process to create implementation-ready quick specs for small changes or features. Use when the user says 'create a quick spec' or 'generate a quick tech spec' +description: 'Very quick process to create implementation-ready quick specs for small changes or features. Use when the user says "create a quick spec" or "generate a quick tech spec"' main_config: '{project-root}/_bmad/bmm/config.yaml' # Checkpoint handler paths diff --git a/src/bmm/workflows/document-project/workflow.yaml b/src/bmm/workflows/document-project/workflow.yaml index 8ca0599bf..a47acf090 100644 --- a/src/bmm/workflows/document-project/workflow.yaml +++ b/src/bmm/workflows/document-project/workflow.yaml @@ -1,7 +1,7 @@ # Document Project Workflow Configuration name: "document-project" version: "1.2.0" -description: "Document brownfield projects for AI context. Use when the user says 'document this project' or 'generate project docs'" +description: 'Document brownfield projects for AI context. Use when the user says "document this project" or "generate project docs"' author: "BMad" # Critical variables diff --git a/src/bmm/workflows/generate-project-context/workflow.md b/src/bmm/workflows/generate-project-context/workflow.md index 017e06121..f1537c06e 100644 --- a/src/bmm/workflows/generate-project-context/workflow.md +++ b/src/bmm/workflows/generate-project-context/workflow.md @@ -1,6 +1,6 @@ --- name: generate-project-context -description: Create project-context.md with AI rules. Use when the user says 'generate project context' or 'create project context' +description: 'Create project-context.md with AI rules. Use when the user says "generate project context" or "create project context"' --- # Generate Project Context Workflow diff --git a/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml index 3d28df890..89c83e014 100644 --- a/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +++ b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml @@ -1,5 +1,5 @@ name: qa-generate-e2e-tests -description: "Generate end to end automated tests for existing features. Use when the user says 'create qa automated tests for [feature]'" +description: 'Generate end to end automated tests for existing features. Use when the user says "create qa automated tests for [feature]"' # Critical variables from config config_source: "{project-root}/_bmad/bmm/config.yaml" diff --git a/src/core/tasks/editorial-review-prose.xml b/src/core/tasks/editorial-review-prose.xml index 1f26c34d8..9b61bf734 100644 --- a/src/core/tasks/editorial-review-prose.xml +++ b/src/core/tasks/editorial-review-prose.xml @@ -1,6 +1,6 @@ + description="Clinical copy-editor that reviews text for communication issues. Use when user says review for prose or improve the prose"> Review text for communication issues that impede comprehension and output suggested fixes in a three-column table diff --git a/src/core/tasks/editorial-review-structure.xml b/src/core/tasks/editorial-review-structure.xml index 4d52d3c08..6a8cb7819 100644 --- a/src/core/tasks/editorial-review-structure.xml +++ b/src/core/tasks/editorial-review-structure.xml @@ -3,7 +3,7 @@ but no context except the content to review --> + description="Structural editor that proposes cuts, reorganization, and simplification while preserving comprehension. Use when user requests structural review or editorial review of structure"> Review document structure and propose substantive changes to improve clarity and flow-run this BEFORE copy editing diff --git a/src/core/tasks/help.md b/src/core/tasks/help.md index 0d72da6c6..9ec95b2ff 100644 --- a/src/core/tasks/help.md +++ b/src/core/tasks/help.md @@ -1,6 +1,6 @@ --- name: help -description: "Analyzes what is done and the users query and offers advice on what to do next. Use if user says 'bmad-help what should I do next' or 'bmad-help what do I do now'" +description: "Analyzes what is done and the users query and offers advice on what to do next. Use if user says what should I do next or what do I do now" --- # Task: BMAD Help diff --git a/src/core/tasks/index-docs.xml b/src/core/tasks/index-docs.xml index d4d7c0811..871501e1c 100644 --- a/src/core/tasks/index-docs.xml +++ b/src/core/tasks/index-docs.xml @@ -1,5 +1,5 @@ + description="Generates or updates an index.md to reference all docs in the folder. Use if user requests to create or update an index of all files in a specific folder"> MANDATORY: Execute ALL steps in the flow section IN EXACT ORDER DO NOT skip steps or change the sequence diff --git a/src/core/tasks/review-adversarial-general.xml b/src/core/tasks/review-adversarial-general.xml index 52e5b17fe..58551aa60 100644 --- a/src/core/tasks/review-adversarial-general.xml +++ b/src/core/tasks/review-adversarial-general.xml @@ -2,7 +2,7 @@ but no context except the content to review --> + description="Perform a Cynical Review and produce a findings report. Use when the user requests a critical review of something"> Cynically review content and produce findings diff --git a/src/core/tasks/shard-doc.xml b/src/core/tasks/shard-doc.xml index c8705555b..28ca55594 100644 --- a/src/core/tasks/shard-doc.xml +++ b/src/core/tasks/shard-doc.xml @@ -1,5 +1,5 @@ + description="Splits large markdown documents into smaller, organized files based on level 2 (default) sections. Use if the user says perform shard document"> Split large markdown documents into smaller, organized files based on level 2 sections using @kayvan/markdown-tree-parser tool diff --git a/src/core/workflows/advanced-elicitation/workflow.xml b/src/core/workflows/advanced-elicitation/workflow.xml index 31c52ce73..56e9f18ca 100644 --- a/src/core/workflows/advanced-elicitation/workflow.xml +++ b/src/core/workflows/advanced-elicitation/workflow.xml @@ -1,5 +1,5 @@ diff --git a/src/core/workflows/brainstorming/workflow.md b/src/core/workflows/brainstorming/workflow.md index 565e1e9e5..b150b8ec9 100644 --- a/src/core/workflows/brainstorming/workflow.md +++ b/src/core/workflows/brainstorming/workflow.md @@ -1,6 +1,6 @@ --- name: brainstorming -description: "Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says 'help me brainstorm' or 'help me ideate'." +description: 'Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says "help me brainstorm" or "help me ideate".' context_file: '' # Optional context file path for project-specific guidance --- diff --git a/src/core/workflows/party-mode/workflow.md b/src/core/workflows/party-mode/workflow.md index b4498341e..7517cda89 100644 --- a/src/core/workflows/party-mode/workflow.md +++ b/src/core/workflows/party-mode/workflow.md @@ -1,6 +1,6 @@ --- name: party-mode -description: "Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests 'party mode' only." +description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests "party mode" only.' --- # Party Mode Workflow From d43663e3af76ff4a0b635b938195446fb3ab8663 Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Mon, 23 Feb 2026 14:48:52 -0700 Subject: [PATCH 13/15] fix(workflows): remove ambiguous with-argument from help task chaining (#1740) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(workflows): remove ambiguous with-argument from help task chaining The "with argument" clause in 7 workflow completion steps caused LLMs to interpret "Read fully and follow: help.md with argument X" as a skill/function invocation rather than a file-read instruction. Drop the clause entirely — help.md already infers the completed workflow from the preceding "[Workflow] complete." text in conversation context. Closes #1637 * fix(workflows): correct broken qa/automate file references The QA workflow was renamed to qa-generate-e2e-tests but three files still referenced the old qa/automate path, breaking CI file-ref validation. * fix(test): update QA agent test to match renamed workflow path The workflow path changed from qa/automate to qa-generate-e2e-tests but the installation component test was not updated to match. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 Co-authored-by: Brian --- src/bmm/agents/qa.agent.yaml | 2 +- src/bmm/module-help.csv | 2 +- .../1-analysis/create-product-brief/steps/step-06-complete.md | 2 +- .../2-plan-workflows/create-prd/steps-c/step-12-complete.md | 2 +- .../create-prd/steps-v/step-v-13-report-complete.md | 2 +- .../2-plan-workflows/create-ux-design/steps/step-14-complete.md | 2 +- .../steps/step-06-final-assessment.md | 2 +- .../3-solutioning/create-architecture/steps/step-08-complete.md | 2 +- .../create-epics-and-stories/steps/step-04-final-validation.md | 2 +- src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml | 2 +- test/test-installation-components.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/bmm/agents/qa.agent.yaml b/src/bmm/agents/qa.agent.yaml index 9265f5a7b..2096544e9 100644 --- a/src/bmm/agents/qa.agent.yaml +++ b/src/bmm/agents/qa.agent.yaml @@ -29,7 +29,7 @@ agent: menu: - trigger: QA or fuzzy match on qa-automate - workflow: "{project-root}/_bmad/bmm/workflows/qa/automate/workflow.yaml" + workflow: "{project-root}/_bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml" description: "[QA] Automate - Generate tests for existing features (simplified)" prompts: diff --git a/src/bmm/module-help.csv b/src/bmm/module-help.csv index 635bb8a81..2ffe84aaf 100644 --- a/src/bmm/module-help.csv +++ b/src/bmm/module-help.csv @@ -27,5 +27,5 @@ bmm,4-implementation,Validate Story,VS,35,_bmad/bmm/workflows/4-implementation/c bmm,4-implementation,Create Story,CS,30,_bmad/bmm/workflows/4-implementation/create-story/workflow.yaml,bmad-bmm-create-story,true,sm,Create Mode,"Story cycle start: Prepare first found story in the sprint plan that is next, or if the command is run with a specific epic and story designation with context. Once complete, then VS then DS then CR then back to DS if needed or next CS or ER",implementation_artifacts,story, bmm,4-implementation,Dev Story,DS,40,_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml,bmad-bmm-dev-story,true,dev,Create Mode,"Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed",,, bmm,4-implementation,Code Review,CR,50,_bmad/bmm/workflows/4-implementation/code-review/workflow.yaml,bmad-bmm-code-review,false,dev,Create Mode,"Story cycle: If issues back to DS if approved then next CS or ER if epic complete",,, -bmm,4-implementation,QA Automation Test,QA,45,_bmad/bmm/workflows/qa/automate/workflow.yaml,bmad-bmm-qa-automate,false,qa,Create Mode,"Generate automated API and E2E tests for implemented code using the project's existing test framework (detects existing well known in use test frameworks). Use after implementation to add test coverage. NOT for code review or story validation - use CR for that.",implementation_artifacts,"test suite", +bmm,4-implementation,QA Automation Test,QA,45,_bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml,bmad-bmm-qa-automate,false,qa,Create Mode,"Generate automated API and E2E tests for implemented code using the project's existing test framework (detects existing well known in use test frameworks). Use after implementation to add test coverage. NOT for code review or story validation - use CR for that.",implementation_artifacts,"test suite", bmm,4-implementation,Retrospective,ER,60,_bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml,bmad-bmm-retrospective,false,sm,Create Mode,"Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC",implementation_artifacts,retrospective, diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md index 82573286f..9e0955b77 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md @@ -128,7 +128,7 @@ Recap that the brief captures everything needed to guide subsequent product deve ### 5. Suggest next steps -Product Brief complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Validate PRD`. +Product Brief complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` --- diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md index 266bf06e4..9f88be6ee 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md @@ -87,7 +87,7 @@ Offer validation workflows to ensure PRD is ready for implementation: ### 4. Suggest Next Workflows -PRD complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Create PRD`. +PRD complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` ### 5. Final Completion Confirmation diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md index 24e0c7de7..46c98f7f9 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md @@ -197,7 +197,7 @@ Display: - **IF X (Exit):** - Display: "**Validation Report Saved:** {validationReportPath}" - Display: "**Summary:** {overall status} - {recommendation}" - - PRD Validation complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Validate PRD`. + - PRD Validation complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` - **IF Any other:** Help user, then redisplay menu diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md index ff2268248..62a02cf45 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md @@ -82,7 +82,7 @@ Update the main workflow status file: ### 3. Suggest Next Steps -UX Design complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Create UX`. +UX Design complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` ### 5. Final Completion Confirmation diff --git a/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md b/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md index 199b48a21..fe80fc23a 100644 --- a/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +++ b/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md @@ -109,7 +109,7 @@ The assessment found [number] issues requiring attention. Review the detailed re The implementation readiness workflow is now complete. The report contains all findings and recommendations for the user to consider. -Implementation Readiness complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `implementation readiness`. +Implementation Readiness complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` --- diff --git a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md index 791c17778..f44850b2b 100644 --- a/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +++ b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md @@ -41,7 +41,7 @@ completedAt: '{{current_date}}' ### 3. Next Steps Guidance -Architecture complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Create Architecture`. +Architecture complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` Upon Completion of task output: offer to answer any questions about the Architecture Document. diff --git a/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md b/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md index dc504182d..4ee791a7a 100644 --- a/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +++ b/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md @@ -144,6 +144,6 @@ If all validations pass: When C is selected, the workflow is complete and the epics.md is ready for development. -Epics and Stories complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` with argument `Create Epics and Stories`. +Epics and Stories complete. Read fully and follow: `{project-root}/_bmad/core/tasks/help.md` Upon Completion of task output: offer to answer any questions about the Epics and Stories. diff --git a/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml index 89c83e014..77809ff72 100644 --- a/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +++ b/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml @@ -10,7 +10,7 @@ document_output_language: "{config_source}:document_output_language" date: system-generated # Workflow components -installed_path: "{project-root}/_bmad/bmm/workflows/qa/automate" +installed_path: "{project-root}/_bmad/bmm/workflows/qa-generate-e2e-tests" instructions: "{installed_path}/instructions.md" validation: "{installed_path}/checklist.md" template: false diff --git a/test/test-installation-components.js b/test/test-installation-components.js index 0970861b9..646bd9ef7 100644 --- a/test/test-installation-components.js +++ b/test/test-installation-components.js @@ -173,7 +173,7 @@ async function runTests() { assert(compiled.includes('QA Engineer'), 'QA agent compilation includes agent title'); - assert(compiled.includes('qa/automate'), 'QA agent menu includes automate workflow'); + assert(compiled.includes('qa-generate-e2e-tests'), 'QA agent menu includes automate workflow'); // Cleanup await fs.remove(tempOutput); From b83ccc71b90734329f60759d6a54959ea63fd186 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 23 Feb 2026 17:11:58 -0600 Subject: [PATCH 14/15] docs(changelog): add 6.0.3 release notes --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df663807b..b7c02dd01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [6.0.3] + +### 🐛 Bug Fixes + +* Fix workflow descriptions to use proper quotes so they format better in skill conversion and don't break yaml front matter + +--- + ## [6.0.2] ### 🎁 Features From 97a533e298aeca9da529b8a9e68e4ea1416ea048 Mon Sep 17 00:00:00 2001 From: PinkyD Date: Tue, 24 Feb 2026 16:43:33 -0800 Subject: [PATCH 15/15] fix(installer): remove double-escaping of quotes in CSV manifest pipeline (#1746) * fix(installer): remove double-escaping of quotes in CSV manifest pipeline cleanForCSV() pre-escaped " to "" before storing in memory, then escapeCsv() escaped again at CSV write time. After csv-parse round-trip (which only un-escapes once), descriptions retained doubled quotes instead of originals, corrupting generated output files. Fix: remove the redundant quote escaping from cleanForCSV() since escapeCsv() already handles CSV quoting correctly at write time. Co-Authored-By: Claude Opus 4.6 * fix(installer): use single quotes for description in Gemini workflow templates Replace triple-quoted """{{description}}""" with single-quoted '{{description}}' to avoid TOML escaping issues in Gemini workflow templates. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- tools/cli/installers/lib/core/manifest-generator.js | 10 ++++------ .../ide/templates/combined/gemini-workflow-yaml.toml | 2 +- .../lib/ide/templates/combined/gemini-workflow.toml | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tools/cli/installers/lib/core/manifest-generator.js b/tools/cli/installers/lib/core/manifest-generator.js index bc4694a6d..06e2e3f4b 100644 --- a/tools/cli/installers/lib/core/manifest-generator.js +++ b/tools/cli/installers/lib/core/manifest-generator.js @@ -24,16 +24,14 @@ class ManifestGenerator { } /** - * Clean text for CSV output by normalizing whitespace and escaping quotes + * Clean text for CSV output by normalizing whitespace. + * Note: Quote escaping is handled by escapeCsv() at write time. * @param {string} text - Text to clean - * @returns {string} Cleaned text safe for CSV + * @returns {string} Cleaned text */ cleanForCSV(text) { if (!text) return ''; - return text - .trim() - .replaceAll(/\s+/g, ' ') // Normalize all whitespace (including newlines) to single space - .replaceAll('"', '""'); // Escape quotes for CSV + return text.trim().replaceAll(/\s+/g, ' '); // Normalize all whitespace (including newlines) to single space } /** diff --git a/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml b/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml index 063ca0d0b..bc6c8da39 100644 --- a/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +++ b/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml @@ -1,4 +1,4 @@ -description = """{{description}}""" +description = '{{description}}' prompt = """ Execute the BMAD '{{name}}' workflow. diff --git a/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml b/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml index 526241061..3306cce04 100644 --- a/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +++ b/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml @@ -1,4 +1,4 @@ -description = """{{description}}""" +description = '{{description}}' prompt = """ Execute the BMAD '{{name}}' workflow.