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..637bcfd33 --- /dev/null +++ b/.claude/skills/bmad-os-audit-file-refs/SKILL.md @@ -0,0 +1,6 @@ +--- +name: bmad-os-audit-file-refs +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-audit-file-refs/prompts/instructions.md b/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md new file mode 100644 index 000000000..cf9e3d6e8 --- /dev/null +++ b/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.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." 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/SKILL.md b/.claude/skills/bmad-os-review-pr/SKILL.md new file mode 100644 index 000000000..67bb05bd5 --- /dev/null +++ b/.claude/skills/bmad-os-review-pr/SKILL.md @@ -0,0 +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 user asks to 'review a PR' and provides a PR url or id. +--- + +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 - diff --git a/.claude/skills/bmad-os-root-cause-analysis/SKILL.md b/.claude/skills/bmad-os-root-cause-analysis/SKILL.md new file mode 100644 index 000000000..237f32b4a --- /dev/null +++ b/.claude/skills/bmad-os-root-cause-analysis/SKILL.md @@ -0,0 +1,12 @@ +--- +name: bmad-os-root-cause-analysis +description: Analyzes a bug-fix commit or PR and produces a structured Root Cause Analysis report covering what went wrong, why, and what guardrails failed. +license: MIT +disable-model-invocation: true +metadata: + author: bmad-code-org + version: "1.0.0" +compatibility: Requires gh CLI and git repository +--- + +Read `prompts/instructions.md` and execute. diff --git a/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md b/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md new file mode 100644 index 000000000..e36cfca33 --- /dev/null +++ b/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md @@ -0,0 +1,74 @@ +# Bug-Fix Root Cause Analysis + +Analyze a bug-fix commit or PR and produce a structured Root Cause Analysis report. + +## Principles + +- **Direct attribution.** This report names the individual who introduced the defect. Industry convention advocates blameless postmortems. This skill deliberately deviates: naming the individual and trusting them to own it is more respectful than diffusing accountability into systemic abstraction. Direct, factual, not accusatory. If authorship can't be determined confidently, say so. +- **Pyramid communication.** The executive summary must convey the full picture. A reader who stops after the first paragraph gets the gist. Everything else is supporting evidence. + +## Preflight + +Verify `gh auth status` and that you're in a git repository. Stop with a clear message if either fails. + +## Execution + +1. **Identify the fix.** Accept whatever the user provides — commit SHA, PR, issue, description. Resolve to the specific fix commit/PR using `gh` and `git`. If ambiguous, ask. Confirm the change is actually a bug fix before proceeding. +2. **Gather evidence.** Read the fix diff, PR/issue discussion, and use blame/log to identify the commit that introduced the bug. Collect timeline data. +3. **Analyze.** Apply 5 Whys. Classify the root cause. Identify contributing factors. +4. **Evaluate guardrails.** Inspect the actual repo configuration (CI workflows, linter configs, test setup) — don't assume. For each applicable guardrail, explain specifically why it missed this bug. +5. **Write the report** to `_bmad-output/rca-reports/rca-{YYYY-MM-DD}-{slug}.md`. Present the executive summary in chat. + +## Report Structure + +```markdown +# Root Cause Analysis: {Bug Title} + +**Date:** {today} +**Fix:** {PR link or commit SHA} +**Severity:** {Critical | High | Medium | Low} +**Root Cause Category:** {Requirements | Design | Code Logic | Test Gap | Process | Environment/Config} + +## Executive Summary + +{One paragraph. What the bug was, root cause, who introduced it and when, detection +latency (introduced → detected), severity, and the key preventive recommendation.} + +## What Was the Problem? + +## When Did It Happen? + +| Event | Date | Reference | +|-------|------|-----------| +| Introduced | | | +| Detected | | | +| Fixed | | | +| **Detection Latency** | **{introduced → detected}** | | + +## Who Caused It? + +{Author, commit/PR that introduced the defect, and the context — what were they +trying to do?} + +## How Did It Happen? + +## Why Did It Happen? + +{5 Whys analysis. Root cause category. Contributing factors.} + +## Failed Guardrails Analysis + +| Guardrail | In Place? | Why It Failed | +|-----------|-----------|---------------| +| | | | + +**Most Critical Failure:** {Which one mattered most and why.} + +## Resolution + +## Corrective & Preventive Actions + +| # | Action | Type | Priority | +|---|--------|------|----------| +| | | {Prevent/Detect/Mitigate} | | +``` diff --git a/.gitignore b/.gitignore index 0f130a3b3..a1229c93d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,8 @@ cursor CLAUDE.local.md .serena/ .claude/settings.local.json +.junie/ +.agents/ z*/ @@ -45,6 +47,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/.prettierignore b/.prettierignore index 8cbb07f7f..013380044 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,3 +7,6 @@ CODE_OF_CONDUCT.md # BMAD runtime folders (user-specific, not in repo) _bmad/ _bmad*/ + +# IDE integration folders (user-specific, not in repo) +.junie/ diff --git a/CHANGELOG.md b/CHANGELOG.md index aa9d101d1..65812c0a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,67 @@ # Changelog +## [6.0.3] + +### 🎁 Features + +* Add bmad-os-root-cause-analysis skill for analyzing bug-fix commits and producing structured root cause analysis reports with pyramid communication format (#1741) + +### 🐛 Bug Fixes + +* Fix installer to refuse installation when ancestor directory has BMAD commands, preventing duplicate command autocompletion in nested directories (#1735) +* Fix OpenCode integration by replacing unsupported `name` frontmatter with `mode: all` and update directory names to plural form (#1764) +* Fix CSV manifest pipeline double-escaping of quotes that was corrupting output files; switch Gemini templates to single quotes (#1746) +* Fix workflow descriptions to use proper quotes so they format better in skill conversion and don't break yaml front matter +* Fix workflow help task chaining by removing ambiguous "with-argument" clause that caused LLMs to misinterpret help.md as skill calls (#1740) + +### ♻️ Refactoring + +* Standardize all workflow descriptions to use proper quotes to prevent breaking command or skill front matter during skill conversion + +### 📚 Documentation + +* Fix broken TEA hyperlinks to point to new repository URL (#1772) +* Rebrand BMAD acronym to "Build More Architect Dreams" across documentation (#1765) + +--- + +## [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 9b8091075..4958c65a1 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org) [![Discord](https://img.shields.io/badge/Discord-Join%20Community-7289da?logo=discord&logoColor=white)](https://discord.gg/gk8jAdXWmj) -**Breakthrough Method of Agile AI Driven Development** — An AI-driven agile development module for the BMad Method Module Ecosystem, the best and most comprehensive Agile AI Driven Development framework that has true scale-adaptive intelligence that adjusts from bug fixes to enterprise systems. +**Build More Architect Dreams** — An AI-driven agile development module for the BMad Method Module Ecosystem, the best and most comprehensive Agile AI Driven Development framework that has true scale-adaptive intelligence that adjusts from bug fixes to enterprise systems. **100% free and open source.** No paywalls. No gated content. No gated Discord. We believe in empowering everyone, not just those who can pay for a gated community or courses. @@ -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+ @@ -32,7 +42,7 @@ npx bmad-method install > If you are getting a stale beta version, use: `npx bmad-method@6.0.1 install` -Follow the installer prompts, then open your AI IDE (Claude Code, Codex, Windsurf, etc.) in your project folder. +Follow the installer prompts, then open your AI IDE (Claude Code, Cursor, etc.) in your project folder. **Non-Interactive Installation** (for CI/CD): @@ -52,7 +62,7 @@ BMad Method extends with official modules for specialized domains. Available dur | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | **[BMad Method (BMM)](https://github.com/bmad-code-org/BMAD-METHOD)** | Core framework with 34+ workflows | | **[BMad Builder (BMB)](https://github.com/bmad-code-org/bmad-builder)** | Create custom BMad agents and workflows | -| **[Test Architect (TEA)](https://github.com/bmad-code-org/tea)** | Risk-based test strategy and automation | +| **[Test Architect (TEA)](https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise)** | Risk-based test strategy and automation | | **[Game Dev Studio (BMGD)](https://github.com/bmad-code-org/bmad-module-game-dev-studio)** | Game development workflows (Unity, Unreal, Godot) | | **[Creative Intelligence Suite (CIS)](https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite)** | Innovation, brainstorming, design thinking | diff --git a/docs/how-to/established-projects.md b/docs/how-to/established-projects.md index 6ce8ed8f2..cc36e0f90 100644 --- a/docs/how-to/established-projects.md +++ b/docs/how-to/established-projects.md @@ -12,7 +12,7 @@ This guide covers the essential workflow for onboarding to existing projects wit :::note[Prerequisites] - BMad Method installed (`npx bmad-method install`) - An existing codebase you want to work on -- Access to an AI-powered IDE (Claude Code, Cursor, or Windsurf) +- Access to an AI-powered IDE (Claude Code or Cursor) ::: ## Step 1: Clean Up Completed Planning Artifacts diff --git a/docs/how-to/install-bmad.md b/docs/how-to/install-bmad.md index 897f607db..177c2c884 100644 --- a/docs/how-to/install-bmad.md +++ b/docs/how-to/install-bmad.md @@ -18,7 +18,7 @@ If you want to use a non interactive installer and provide all install options o :::note[Prerequisites] - **Node.js** 20+ (required for the installer) - **Git** (recommended) -- **AI tool** (Claude Code, Cursor, Windsurf, or similar) +- **AI tool** (Claude Code, Cursor, or similar) ::: ## Steps @@ -49,8 +49,6 @@ Pick which AI tools you use: - Claude Code - Cursor -- Windsurf -- Kiro - Others Each tool has its own way of integrating commands. The installer creates tiny prompt files to activate workflows and agents — it just puts them where your tool expects to find them. diff --git a/docs/how-to/non-interactive-installation.md b/docs/how-to/non-interactive-installation.md index e9122ecdb..fa7a1e7b1 100644 --- a/docs/how-to/non-interactive-installation.md +++ b/docs/how-to/non-interactive-installation.md @@ -59,7 +59,7 @@ Check the [BMad registry](https://github.com/bmad-code-org) for available extern Available tool IDs for the `--tools` flag: -**Preferred:** `claude-code`, `cursor`, `windsurf` +**Preferred:** `claude-code`, `cursor` Run `npx bmad-method install` interactively once to see the full current list of supported tools, or check the [platform codes configuration](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/tools/cli/installers/lib/ide/platform-codes.yaml). diff --git a/docs/how-to/quick-fixes.md b/docs/how-to/quick-fixes.md index 4bb870908..76ee5ebe0 100644 --- a/docs/how-to/quick-fixes.md +++ b/docs/how-to/quick-fixes.md @@ -16,7 +16,7 @@ Use the **DEV agent** directly for bug fixes, refactorings, or small targeted ch :::note[Prerequisites] - BMad Method installed (`npx bmad-method install`) -- An AI-powered IDE (Claude Code, Cursor, Windsurf, or similar) +- An AI-powered IDE (Claude Code, Cursor, or similar) ::: ## Choose Your Approach diff --git a/docs/index.md b/docs/index.md index 5ae60e922..8d414bbbe 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,10 +3,14 @@ title: Welcome to the BMad Method description: AI-driven development framework with specialized agents, guided workflows, and intelligent planning --- -The BMad Method (**B**reakthrough **M**ethod of **A**gile AI **D**riven Development) is an AI-driven development framework module within the BMad Method Ecosystem that helps you build software through the whole process from ideation and planning all the way through agentic implementation. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity, whether you're fixing a bug or building an enterprise platform. +The BMad Method (**B**uild **M**ore **A**rchitect **D**reams) is an AI-driven development framework module within the BMad Method Ecosystem that helps you build software through the whole process from ideation and planning all the way through agentic implementation. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity, whether you're fixing a bug or building an enterprise platform. 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. @@ -39,9 +43,7 @@ BMad works with any AI coding assistant that supports custom system prompts or p - **[Claude Code](https://code.claude.com)** — Anthropic's CLI tool (recommended) - **[Cursor](https://cursor.sh)** — AI-first code editor -- **[Windsurf](https://codeium.com/windsurf)** — Codeium's AI IDE -- **[Kiro](https://kiro.dev)** — Amazon's AI-powered IDE -- **[Roo Code](https://roocode.com)** — VS Code extension +- **[Codex CLI](https://github.com/openai/codex)** — OpenAI's terminal coding agent You should be comfortable with basic software development concepts like version control, project structure, and agile workflows. No prior experience with BMad-style agent systems is required—that's what these docs are for. 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/docs/tutorials/getting-started.md b/docs/tutorials/getting-started.md index 3f9126ea6..b7aa02dfd 100644 --- a/docs/tutorials/getting-started.md +++ b/docs/tutorials/getting-started.md @@ -16,7 +16,7 @@ Build software faster using AI-powered workflows with specialized agents that gu :::note[Prerequisites] - **Node.js 20+** — Required for the installer - **Git** — Recommended for version control -- **AI-powered IDE** — Claude Code, Cursor, Windsurf, or similar +- **AI-powered IDE** — Claude Code, Cursor, or similar - **A project idea** — Even a simple one works for learning ::: diff --git a/package-lock.json b/package-lock.json index 5f538a62f..2ffca11a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bmad-method", - "version": "6.0.1", + "version": "6.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bmad-method", - "version": "6.0.1", + "version": "6.0.3", "license": "MIT", "dependencies": { "@clack/core": "^1.0.0", diff --git a/package.json b/package.json index cd02e3746..773c5704f 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.3", "description": "Breakthrough Method of Agile AI-driven Development", "keywords": [ "agile", @@ -45,7 +45,7 @@ "test:install": "node test/test-installation-components.js", "test:refs": "node test/test-file-refs-csv.js", "test:schemas": "node test/test-agent-schema.js", - "validate:refs": "node tools/validate-file-refs.js", + "validate:refs": "node tools/validate-file-refs.js --strict", "validate:schemas": "node tools/validate-agent-schema.js" }, "lint-staged": { 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-01-init.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md index 496180933..0046af0cc 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md @@ -3,7 +3,7 @@ name: 'step-01-init' description: 'Initialize the product brief workflow by detecting continuation state and setting up the document' # File References -nextStepFile: './step-02-vision.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md' outputFile: '{planning_artifacts}/product-brief-{{project_name}}-{{date}}.md' # Template References @@ -73,7 +73,7 @@ If the document exists and has frontmatter with `stepsCompleted`: **Continuation Protocol:** -- **STOP immediately** and load `./step-01b-continue.md` +- **STOP immediately** and load `{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md` - Do not proceed with any initialization tasks - Let step-01b handle all continuation logic - This is an auto-proceed situation - no user choice needed diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md index 99b2495fe..bedcfc913 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md @@ -95,9 +95,9 @@ Does this look right, or do you want to make any adjustments before we proceed?" **Next Step Logic:** Based on `lastStep` value, determine which step to load next: -- If `lastStep = 1` → Load `./step-02-vision.md` -- If `lastStep = 2` → Load `./step-03-users.md` -- If `lastStep = 3` → Load `./step-04-metrics.md` +- If `lastStep = 1` → Load `{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md` +- If `lastStep = 2` → Load `{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md` +- If `lastStep = 3` → Load `{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md` - Continue this pattern for all steps - If `lastStep = 6` → Workflow already complete diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md index f00e18faa..fbbdffd01 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md @@ -3,7 +3,7 @@ name: 'step-02-vision' description: 'Discover and define the core product vision, problem statement, and unique value proposition' # File References -nextStepFile: './step-03-users.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md' outputFile: '{planning_artifacts}/product-brief-{{project_name}}-{{date}}.md' # Task References diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md index cba266411..eb8fd1168 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md @@ -3,7 +3,7 @@ name: 'step-03-users' description: 'Define target users with rich personas and map their key interactions with the product' # File References -nextStepFile: './step-04-metrics.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md' outputFile: '{planning_artifacts}/product-brief-{{project_name}}-{{date}}.md' # Task References diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md index e6b297c3d..04c67edc4 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md @@ -3,7 +3,7 @@ name: 'step-04-metrics' description: 'Define comprehensive success metrics that include user success, business objectives, and key performance indicators' # File References -nextStepFile: './step-05-scope.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md' outputFile: '{planning_artifacts}/product-brief-{{project_name}}-{{date}}.md' # Task References diff --git a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md index 0914b835d..04339f41f 100644 --- a/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +++ b/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md @@ -3,7 +3,7 @@ name: 'step-05-scope' description: 'Define MVP scope with clear boundaries and outline future vision while managing scope creep' # File References -nextStepFile: './step-06-complete.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md' outputFile: '{planning_artifacts}/product-brief-{{project_name}}-{{date}}.md' # Task References 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 010cafe8e..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: `_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/1-analysis/create-product-brief/workflow.md b/src/bmm/workflows/1-analysis/create-product-brief/workflow.md index 9d5e83f19..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 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/domain-steps/step-01-init.md b/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md index 27d056b1d..50093186e 100644 --- a/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +++ b/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md @@ -78,7 +78,7 @@ For **{{research_topic}}**, I will research: - Document scope confirmation in research file - Update frontmatter: `stepsCompleted: [1]` -- Load: `./step-02-domain-analysis.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md` ## APPEND TO DOCUMENT: @@ -132,6 +132,6 @@ When user selects 'C', append scope confirmation: ## NEXT STEP: -After user selects 'C', load `./step-02-domain-analysis.md` to begin industry analysis. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md` to begin industry analysis. Remember: This is SCOPE CONFIRMATION ONLY - no actual domain research yet, just confirming the research approach and scope! diff --git a/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md b/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md index bb4cbb63f..ed5c78f5e 100644 --- a/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +++ b/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md @@ -171,7 +171,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2]` -- Load: `./step-03-competitive-landscape.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md` ## APPEND TO DOCUMENT: @@ -224,6 +224,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-03-competitive-landscape.md` to analyze competitive landscape, key players, and ecosystem analysis for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md` to analyze competitive landscape, key players, and ecosystem analysis for {{research_topic}}. Remember: Always write research content to document immediately and search the web to verify facts! diff --git a/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md b/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md index 0dc2de6ea..6970ad87b 100644 --- a/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +++ b/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md @@ -180,7 +180,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3]` -- Load: `./step-04-regulatory-focus.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md` ## APPEND TO DOCUMENT: @@ -233,6 +233,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-04-regulatory-focus.md` to analyze regulatory requirements, compliance frameworks, and legal considerations for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md` to analyze regulatory requirements, compliance frameworks, and legal considerations for {{research_topic}}. Remember: Always write research content to document immediately and search the web to verify facts! diff --git a/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md b/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md index e98010c7f..3fd24b00b 100644 --- a/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +++ b/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md @@ -155,7 +155,7 @@ Show the generated regulatory analysis and present continue option: - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3, 4]` -- Load: `./step-05-technical-trends.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md` ## APPEND TO DOCUMENT: @@ -201,6 +201,6 @@ Content is already written to document when generated in step 5. No additional a ## NEXT STEP: -After user selects 'C' and content is saved to document, load `./step-05-technical-trends.md` to analyze technical trends and innovations in the domain. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md` to analyze technical trends and innovations in the domain. Remember: Search the web to verify regulatory facts and provide practical implementation considerations! diff --git a/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md b/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md index 55e834cd1..caf69e142 100644 --- a/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +++ b/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md @@ -174,7 +174,7 @@ Show the generated technical analysis and present complete option: - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]` -- Load: `./step-06-research-synthesis.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md` ## APPEND TO DOCUMENT: diff --git a/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md b/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md index 5ab859398..ba7563b71 100644 --- a/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +++ b/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md @@ -138,7 +138,7 @@ Show initial scope document and present continue option: - Update frontmatter: `stepsCompleted: [1]` - Add confirmation note to document: "Scope confirmed by user on {{date}}" -- Load: `./step-02-customer-behavior.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md` #### If 'Modify': @@ -177,6 +177,6 @@ This step ensures: ## NEXT STEP: -After user confirmation and scope finalization, load `./step-02-customer-insights.md` to begin detailed market research with customer insights analysis. +After user confirmation and scope finalization, load `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md` to begin detailed market research with customer insights analysis. Remember: Init steps confirm understanding and scope, not generate research content! diff --git a/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md b/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md index f707a0a3e..e5315e34e 100644 --- a/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +++ b/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md @@ -179,7 +179,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2]` -- Load: `./step-03-customer-pain-points.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md` ## APPEND TO DOCUMENT: @@ -232,6 +232,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-03-customer-pain-points.md` to analyze customer pain points, challenges, and unmet needs for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md` to analyze customer pain points, challenges, and unmet needs for {{research_topic}}. Remember: Always write research content to document immediately and emphasize current customer data with rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md b/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md index f4d2ae6d8..d740ae5e4 100644 --- a/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +++ b/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md @@ -190,7 +190,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3]` -- Load: `./step-04-customer-decisions.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md` ## APPEND TO DOCUMENT: @@ -244,6 +244,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-04-customer-decisions.md` to analyze customer decision processes, journey mapping, and decision factors for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md` to analyze customer decision processes, journey mapping, and decision factors for {{research_topic}}. Remember: Always write research content to document immediately and emphasize current customer pain points data with rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md b/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md index 21544335b..0f94f535b 100644 --- a/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +++ b/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md @@ -200,7 +200,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3, 4]` -- Load: `./step-05-competitive-analysis.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md` ## APPEND TO DOCUMENT: @@ -254,6 +254,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-05-competitive-analysis.md` to analyze competitive landscape, market positioning, and competitive strategies for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md` to analyze competitive landscape, market positioning, and competitive strategies for {{research_topic}}. Remember: Always write research content to document immediately and emphasize current customer decision data with rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md b/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md index b286822dc..1b0980b3f 100644 --- a/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +++ b/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md @@ -78,7 +78,7 @@ For **{{research_topic}}**, I will research: - Document scope confirmation in research file - Update frontmatter: `stepsCompleted: [1]` -- Load: `./step-02-technical-overview.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md` ## APPEND TO DOCUMENT: @@ -132,6 +132,6 @@ When user selects 'C', append scope confirmation: ## NEXT STEP: -After user selects 'C', load `./step-02-technical-overview.md` to begin technology stack analysis. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md` to begin technology stack analysis. Remember: This is SCOPE CONFIRMATION ONLY - no actual technical research yet, just confirming the research approach and scope! diff --git a/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md b/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md index 78151eb0d..406a273ca 100644 --- a/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +++ b/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md @@ -180,7 +180,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2]` -- Load: `./step-03-integration-patterns.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md` ## APPEND TO DOCUMENT: @@ -234,6 +234,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-03-integration-patterns.md` to analyze APIs, communication protocols, and system interoperability for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md` to analyze APIs, communication protocols, and system interoperability for {{research_topic}}. Remember: Always write research content to document immediately and emphasize current technology data with rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md b/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md index 68e2b70f9..4d4f6243d 100644 --- a/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +++ b/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md @@ -189,7 +189,7 @@ _Source: [URL]_ - **CONTENT ALREADY WRITTEN TO DOCUMENT** - Update frontmatter: `stepsCompleted: [1, 2, 3]` -- Load: `./step-04-architectural-patterns.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md` ## APPEND TO DOCUMENT: @@ -243,6 +243,6 @@ Content is already written to document when generated in step 4. No additional a ## NEXT STEP: -After user selects 'C', load `./step-04-architectural-patterns.md` to analyze architectural patterns, design decisions, and system structures for {{research_topic}}. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md` to analyze architectural patterns, design decisions, and system structures for {{research_topic}}. Remember: Always write research content to document immediately and emphasize current integration data with rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md b/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md index 3d0e66ab3..abb01037a 100644 --- a/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +++ b/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md @@ -156,7 +156,7 @@ Show the generated architectural patterns and present continue option: - Append the final content to the research document - Update frontmatter: `stepsCompleted: [1, 2, 3, 4]` -- Load: `./step-05-implementation-research.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md` ## APPEND TO DOCUMENT: @@ -197,6 +197,6 @@ When user selects 'C', append the content directly to the research document usin ## NEXT STEP: -After user selects 'C' and content is saved to document, load `./step-05-implementation-research.md` to focus on implementation approaches and technology adoption. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md` to focus on implementation approaches and technology adoption. Remember: Always emphasize current architectural data and rigorous source verification! diff --git a/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md b/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md index 994537356..9e5be7bbb 100644 --- a/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +++ b/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md @@ -179,7 +179,7 @@ Show the generated implementation research and present continue option: - Append the final content to the research document - Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]` -- Load: `./step-06-research-synthesis.md` +- Load: `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md` ## APPEND TO DOCUMENT: @@ -230,4 +230,4 @@ When 'C' is selected: ## NEXT STEP: -After user selects 'C', load `./step-06-research-synthesis.md` to produce the comprehensive technical research document with narrative introduction, detailed TOC, and executive summary. +After user selects 'C', load `{project-root}/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md` to produce the comprehensive technical research document with narrative introduction, detailed TOC, and executive summary. 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..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 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..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 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..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 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/steps-c/step-01b-continue.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md index 4f9198af6..2ad958b69 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md @@ -79,9 +79,8 @@ Review the frontmatter to understand: **Example:** - If `stepsCompleted = ["step-01-init.md", "step-02-discovery.md", "step-03-success.md"]` - Last element is `"step-03-success.md"` -- Load `step-03-success.md`, read its frontmatter -- Find `nextStepFile: './step-04-journeys.md'` -- Next step to load is `./step-04-journeys.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md`, read its frontmatter +- Read fully and follow: `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md` ### 4. Handle Workflow Completion diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md index 137e7d445..7d337b47d 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md @@ -3,7 +3,7 @@ name: 'step-02-discovery' description: 'Discover project type, domain, and context through collaborative dialogue' # File References -nextStepFile: './step-02b-vision.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md' outputFile: '{planning_artifacts}/prd.md' # Data Files diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md index e7129bf6e..9b7b2a975 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md @@ -3,7 +3,7 @@ name: 'step-02b-vision' description: 'Discover the product vision and differentiator through collaborative dialogue' # File References -nextStepFile: './step-02c-executive-summary.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md' outputFile: '{planning_artifacts}/prd.md' # Task References diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md index 97e328b43..3f024decd 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md @@ -3,7 +3,7 @@ name: 'step-02c-executive-summary' description: 'Generate and append the Executive Summary section to the PRD document' # File References -nextStepFile: './step-03-success.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md' outputFile: '{planning_artifacts}/prd.md' # Task References diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md index 9a3c5e341..79722289a 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md @@ -3,7 +3,7 @@ name: 'step-03-success' description: 'Define comprehensive success criteria covering user, business, and technical success' # File References -nextStepFile: './step-04-journeys.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -221,6 +221,6 @@ If working in regulated domains (healthcare, fintech, govtech): ## NEXT STEP: -After user selects 'C' and content is saved to document, load `./step-04-journeys.md` to map user journeys. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md` to map user journeys. 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/2-plan-workflows/create-prd/steps-c/step-04-journeys.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md index 314dab564..fc919ff07 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md @@ -3,7 +3,7 @@ name: 'step-04-journeys' description: 'Map ALL user types that interact with the system with narrative story-based journeys' # File References -nextStepFile: './step-05-domain.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -208,6 +208,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 `./step-05-domain.md`. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md`. 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/2-plan-workflows/create-prd/steps-c/step-05-domain.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md index 9539527dc..bb95ea16f 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md @@ -3,9 +3,9 @@ name: 'step-05-domain' description: 'Explore domain-specific requirements for complex domains (optional step)' # File References -nextStepFile: './step-06-innovation.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md' outputFile: '{planning_artifacts}/prd.md' -domainComplexityCSV: '../data/domain-complexity.csv' +domainComplexityCSV: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv' # Task References advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md index 440ccf2d2..708eac7b1 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md @@ -3,11 +3,11 @@ name: 'step-06-innovation' description: 'Detect and explore innovative aspects of the product (optional step)' # File References -nextStepFile: './step-07-project-type.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md' outputFile: '{planning_artifacts}/prd.md' # Data Files -projectTypesCSV: '../data/project-types.csv' +projectTypesCSV: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv' # Task References advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md index c078d6db1..63c9070b6 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md @@ -3,7 +3,7 @@ name: 'step-07-project-type' description: 'Conduct project-type specific discovery using CSV-driven guidance' # File References -nextStepFile: './step-08-scoping.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md' outputFile: '{planning_artifacts}/prd.md' # Data Files diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md index da9230adc..e9df0caba 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md @@ -3,7 +3,7 @@ name: 'step-08-scoping' description: 'Define MVP boundaries and prioritize features across development phases' # File References -nextStepFile: './step-09-functional.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md' outputFile: '{planning_artifacts}/prd.md' # Task References diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md index d689ebf37..a39150c0c 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md @@ -3,7 +3,7 @@ name: 'step-09-functional' description: 'Synthesize all discovery into comprehensive functional requirements' # File References -nextStepFile: './step-10-nonfunctional.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md' outputFile: '{planning_artifacts}/prd.md' # Task References diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md index 40919635d..d42323046 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md @@ -3,7 +3,7 @@ name: 'step-10-nonfunctional' description: 'Define quality attributes that matter for this specific product' # File References -nextStepFile: './step-11-polish.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md' outputFile: '{planning_artifacts}/prd.md' # Task References diff --git a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md index 70bf198c3..257afbc27 100644 --- a/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +++ b/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md @@ -3,9 +3,9 @@ name: 'step-11-polish' description: 'Optimize and polish the complete PRD document for flow, coherence, and readability' # File References -nextStepFile: './step-12-complete.md' +nextStepFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md' outputFile: '{planning_artifacts}/prd.md' -purposeFile: '../data/prd-purpose.md' +purposeFile: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md' # Task References advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' @@ -212,6 +212,6 @@ When user selects 'C', replace the entire document content with the polished ver ## NEXT STEP: -After user selects 'C' and polished document is saved, load `./step-12-complete.md` to complete the workflow. +After user selects 'C' and polished document is saved, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md` to complete the workflow. Remember: Do NOT proceed to step-12 until user explicitly selects 'C' from the A/P/C menu and polished document is saved! 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 598d2c2ec..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: `_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 15e69301a..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: `_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-prd/workflow-create-prd.md b/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md index 7d10ec3ed..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 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..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 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..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 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/steps/step-01-init.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md index 62969bafd..02b69c2d0 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/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 `./step-01b-continue.md` immediately +- **STOP here** and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md` immediately - Do not proceed with any initialization tasks - Let step-01b handle the continuation logic @@ -110,7 +110,7 @@ Do you have any other documents you'd like me to include, or shall we continue t ## NEXT STEP: -After user selects [C] to continue, ensure the file `{planning_artifacts}/ux-design-specification.md` has been created and saved, and then load `./step-02-discovery.md` to begin the UX discovery phase. +After user selects [C] to continue, ensure the file `{planning_artifacts}/ux-design-specification.md` has been created and saved, and then load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md` to begin the UX discovery phase. Remember: Do NOT proceed to step-02 until output file has been updated and user explicitly selects [C] to continue! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md index 3d0f647e2..92fded6c3 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md @@ -72,9 +72,9 @@ Does this look right, or do you want to make any adjustments before we proceed?" Based on `lastStep` value, determine which step to load next: -- If `lastStep = 1` → Load `./step-02-discovery.md` -- If `lastStep = 2` → Load `./step-03-core-experience.md` -- If `lastStep = 3` → Load `./step-04-emotional-response.md` +- If `lastStep = 1` → Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md` +- If `lastStep = 2` → Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md` +- If `lastStep = 3` → Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md` - Continue this pattern for all steps - If `lastStep` indicates final step → Workflow already complete diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md index 7ab275a88..41821e326 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md @@ -155,11 +155,11 @@ Show the generated project understanding content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: `stepsCompleted: [1, 2]` -- Load `./step-03-core-experience.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md` ## APPEND TO DOCUMENT: -When user selects 'C', append the content directly to the document. Only after the content is saved to document, read fully and follow: `./step-03-core-experience.md`. +When user selects 'C', append the content directly to the document. Only after the content is saved to document, read fully and follow: `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md`. ## SUCCESS METRICS: diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md index c64c84230..9dc98e70f 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md @@ -179,7 +179,7 @@ Show the generated core experience content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-04-emotional-response.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md` ## APPEND TO DOCUMENT: @@ -211,6 +211,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 `./step-04-emotional-response.md` to define desired emotional responses. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md` to define desired emotional responses. 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/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md index 247a61e21..f25bf0528 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md @@ -182,7 +182,7 @@ Show the generated emotional response content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-05-inspiration.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md` ## APPEND TO DOCUMENT: @@ -214,6 +214,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 `./step-05-inspiration.md` to analyze UX patterns from inspiring products. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md` to analyze UX patterns from inspiring products. 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/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md index 87fe56031..890048b74 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md @@ -197,7 +197,7 @@ Show the generated inspiration analysis content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Read fully and follow: `./step-06-design-system.md` +- Read fully and follow: `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md` ## APPEND TO DOCUMENT: @@ -229,6 +229,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 `./step-06-design-system.md` to choose the appropriate design system approach. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md` to choose the appropriate design system approach. 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/2-plan-workflows/create-ux-design/steps/step-06-design-system.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md index 70d566ada..26caf73db 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md @@ -215,7 +215,7 @@ Show the generated design system content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-07-defining-experience.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md` ## APPEND TO DOCUMENT: @@ -247,6 +247,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 `./step-07-defining-experience.md` to define the core user interaction. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md` to define the core user interaction. 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/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md index 7e904b948..8cd5ff3b8 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md @@ -217,7 +217,7 @@ Show the generated defining experience content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-08-visual-foundation.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md` ## APPEND TO DOCUMENT: @@ -249,6 +249,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 `./step-08-visual-foundation.md` to establish visual design foundation. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md` to establish visual design foundation. 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/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md index bd764a60e..430aab043 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md @@ -187,7 +187,7 @@ Show the generated visual foundation content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-09-design-directions.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.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 `./step-09-design-directions.md` to generate design direction mockups. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md` to generate design direction mockups. Remember: Do NOT proceed to step-09 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md index a50ed503e..09864e0b4 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md @@ -187,7 +187,7 @@ Show the generated design direction content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-10-user-journeys.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.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 `./step-10-user-journeys.md` to design user journey flows. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md` to design user journey flows. Remember: Do NOT proceed to step-10 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md index 985577f00..9f05201fe 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md @@ -205,7 +205,7 @@ Show the generated user journey content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-11-component-strategy.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md` ## APPEND TO DOCUMENT: @@ -236,6 +236,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 `./step-11-component-strategy.md` to define component library strategy. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md` to define component library strategy. Remember: Do NOT proceed to step-11 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md index deef19b73..95f2f294a 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md @@ -211,7 +211,7 @@ Show the generated component strategy content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-12-ux-patterns.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md` ## APPEND TO DOCUMENT: @@ -243,6 +243,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 `./step-12-ux-patterns.md` to define UX consistency patterns. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md` to define UX consistency patterns. Remember: Do NOT proceed to step-12 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md index 4708b52aa..08f272a62 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md @@ -200,7 +200,7 @@ Show the generated UX patterns content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-13-responsive-accessibility.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md` ## APPEND TO DOCUMENT: @@ -232,6 +232,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 `./step-13-responsive-accessibility.md` to define responsive design and accessibility strategy. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md` to define responsive design and accessibility strategy. Remember: Do NOT proceed to step-13 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md index 80b81d4c8..d13ffa5c4 100644 --- a/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +++ b/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md @@ -227,7 +227,7 @@ Show the generated responsive and accessibility content and present choices: - Append the final content to `{planning_artifacts}/ux-design-specification.md` - Update frontmatter: append step to end of stepsCompleted array -- Load `./step-14-complete.md` +- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md` ## APPEND TO DOCUMENT: @@ -259,6 +259,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 `./step-14-complete.md` to finalize the UX design workflow. +After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md` to finalize the UX design workflow. Remember: Do NOT proceed to step-14 until user explicitly selects 'C' from the A/P/C menu and content is saved! 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 db25fb9b7..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: `_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/2-plan-workflows/create-ux-design/workflow.md b/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md index 4af87c39a..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: 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 @@ -39,4 +39,4 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ## EXECUTION - ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` -- Read fully and follow: `steps/step-01-init.md` to begin the UX design workflow. +- Read fully and follow: `{project-root}/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md` to begin the UX design workflow. 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 d0e15bc02..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: `_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/check-implementation-readiness/workflow.md b/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md index 49d2afab9..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: '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 @@ -51,4 +51,4 @@ Load and read full config from {project-root}/_bmad/bmm/config.yaml and resolve: ### 2. First Step EXECUTION -Read fully and follow: `./step-01-document-discovery.md` to begin the workflow. +Read fully and follow: `./steps/step-01-document-discovery.md` to begin the workflow. 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 93a83c706..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 `./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 `./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 6e800e7f0..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 `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 return to 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 @@ -161,4 +161,13 @@ 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/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 1e9c6b9a3..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 `./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 `./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 bccea19df..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 @@ -232,7 +232,6 @@ Prepare the content to append to the document: ```bash {{full_starter_command_with_options}} ``` -```` **Architectural Decisions Provided by Starter:** @@ -256,7 +255,7 @@ Prepare the content to append to the document: **Note:** Project initialization using this command should be the first implementation story. -``` +```` ### 9. Present Content and Menu @@ -295,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 `./step-04-decisions.md` +- Load `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md` ## APPEND TO DOCUMENT: @@ -325,7 +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 `./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 c9f5cdedd..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 `./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 `./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 cbfd99d1d..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 `./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 `./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 3df89e6ce..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 `./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 `./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 b2dc2c462..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 `./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 `./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/steps/step-08-complete.md b/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md index 2f949bf7e..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: `_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-architecture/workflow.md b/src/bmm/workflows/3-solutioning/create-architecture/workflow.md index b75b4a46c..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: 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 @@ -36,7 +36,7 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ### Paths -- `installed_path` = `{project-root}/_bmad/bmm/workflows/3-solutioning/architecture` +- `installed_path` = `{project-root}/_bmad/bmm/workflows/3-solutioning/create-architecture` - `template_path` = `{installed_path}/architecture-decision-template.md` - `data_files_path` = `{installed_path}/data/` @@ -44,6 +44,6 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ## EXECUTION -Read fully and follow: `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. 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 05e8d5d4e..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: `_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/3-solutioning/create-epics-and-stories/workflow.md b/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md index a0e232ab8..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: '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..7965af5ae 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..f2211f7b3 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/checklist.md b/src/bmm/workflows/4-implementation/create-story/checklist.md index 6fc678994..d9ed06375 100644 --- a/src/bmm/workflows/4-implementation/create-story/checklist.md +++ b/src/bmm/workflows/4-implementation/create-story/checklist.md @@ -33,7 +33,7 @@ This is a COMPETITION to create the **ULTIMATE story context** that makes LLM de ### **When Running from Create-Story Workflow:** -- The `{project-root}/_bmad/core/tasks/validate-workflow.xml` framework will automatically: +- The `{project-root}/_bmad/core/tasks/workflow.xml` framework will automatically: - Load this checklist file - Load the newly created story file (`{story_file_path}`) - Load workflow variables from `{installed_path}/workflow.yaml` @@ -63,7 +63,7 @@ You will systematically re-do the entire story creation process, but with a crit 1. **Load the workflow configuration**: `{installed_path}/workflow.yaml` for variable inclusion 2. **Load the story file**: `{story_file_path}` (provided by user or discovered) -3. **Load validation framework**: `{project-root}/_bmad/core/tasks/validate-workflow.xml` +3. **Load validation framework**: `{project-root}/_bmad/core/tasks/workflow.xml` 4. **Extract metadata**: epic_num, story_num, story_key, story_title from story file 5. **Resolve all workflow variables**: implementation_artifacts, epics_file, architecture_file, etc. 6. **Understand current status**: What story implementation guidance is currently provided? diff --git a/src/bmm/workflows/4-implementation/create-story/workflow.yaml b/src/bmm/workflows/4-implementation/create-story/workflow.yaml index 991f78c2e..972972aff 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..b5ee9308a 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..49ac2cc35 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..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 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..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.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/steps/step-01-mode-detection.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md index eb3458891..2391f9722 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md @@ -50,7 +50,7 @@ Analyze the user's input to determine mode: - Load the spec, extract tasks/context/AC - Set `{execution_mode}` = "tech-spec" - Set `{tech_spec_path}` = provided path -- **NEXT:** Read fully and follow: `step-03-execute.md` +- **NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md` **Mode B: Direct Instructions** @@ -91,7 +91,7 @@ Display: "**Select:** [P] Plan first (tech-spec) [E] Execute directly" #### Menu Handling Logic: - IF P: Direct user to `{quick_spec_workflow}`. **EXIT Quick Dev.** -- IF E: Ask for any additional guidance, then **NEXT:** Read fully and follow: `step-02-context-gathering.md` +- IF E: Ask for any additional guidance, then **NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md` #### EXECUTION RULES: @@ -114,7 +114,7 @@ Display: - IF P: Direct to `{quick_spec_workflow}`. **EXIT Quick Dev.** - IF W: Direct user to run the PRD workflow instead. **EXIT Quick Dev.** -- IF E: Ask for guidance, then **NEXT:** Read fully and follow: `step-02-context-gathering.md` +- IF E: Ask for guidance, then **NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md` #### EXECUTION RULES: @@ -137,7 +137,7 @@ Display: - IF P: Direct to `{quick_spec_workflow}`. **EXIT Quick Dev.** - IF W: Direct user to run the PRD workflow instead. **EXIT Quick Dev.** -- IF E: Ask for guidance, then **NEXT:** Read fully and follow: `step-02-context-gathering.md` +- IF E: Ask for guidance, then **NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md` #### EXECUTION RULES: @@ -150,8 +150,8 @@ Display: **CRITICAL:** When this step completes, explicitly state which step to load: -- Mode A (tech-spec): "**NEXT:** read fully and follow: `step-03-execute.md`" -- Mode B (direct, [E] selected): "**NEXT:** Read fully and follow: `step-02-context-gathering.md`" +- Mode A (tech-spec): "**NEXT:** read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md`" +- Mode B (direct, [E] selected): "**NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md`" - Escalation ([P] or [W]): "**EXITING Quick Dev.** Follow the directed workflow." --- diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md index d3461bb16..da178a088 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md @@ -97,7 +97,7 @@ Ready to execute? (y/n/adjust) **CRITICAL:** When user confirms ready, explicitly state: -- **y:** "**NEXT:** Read fully and follow: `step-03-execute.md`" +- **y:** "**NEXT:** Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md`" - **n/adjust:** Continue gathering context, then re-present plan --- diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md index baeab834b..81be97fba 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md @@ -89,7 +89,7 @@ For each task: ## NEXT STEP -When ALL tasks are complete (or halted on blocker), read fully and follow: `step-04-self-check.md`. +When ALL tasks are complete (or halted on blocker), read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md`. --- diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md index 0c6a822c3..f12b2a3fd 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md @@ -89,7 +89,7 @@ Proceeding to adversarial code review... ## NEXT STEP -Proceed immediately to `step-05-adversarial-review.md`. +Proceed immediately to `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md`. --- diff --git a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md index 41c8f4741..8bbd6761e 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md @@ -83,7 +83,7 @@ If TodoWrite or similar tool is available, turn each finding into a TODO, includ ## NEXT STEP -With findings in hand, read fully and follow: `step-06-resolve-findings.md` for user to choose resolution approach. +With findings in hand, read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md` for user to choose resolution approach. --- 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 8c6a1902b..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: '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 @@ -47,4 +47,4 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ## EXECUTION -Read fully and follow: `steps/step-01-mode-detection.md` to begin the workflow. +Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md` to begin the workflow. diff --git a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md index f0622f207..fecac560a 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md @@ -2,8 +2,6 @@ name: 'step-01-understand' description: 'Analyze the requirement delta between current state and what user wants to build' -nextStepFile: './step-02-investigate.md' -skipToStepFile: './step-03-generate.md' templateFile: '../tech-spec-template.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- @@ -56,9 +54,9 @@ a) **Menu Handling:** - **[Y] Continue existing:** - Jump directly to the appropriate step based on `stepsCompleted`: - - `[1]` → Load `{nextStepFile}` (Step 2) - - `[1, 2]` → Load `{skipToStepFile}` (Step 3) - - `[1, 2, 3]` → Load `./step-04-review.md` (Step 4) + - `[1]` → Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md` (Step 2) + - `[1, 2]` → Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md` (Step 3) + - `[1, 2, 3]` → Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md` (Step 4) - **[N] Archive and start fresh:** - Rename `{wipFile}` to `{implementation_artifacts}/tech-spec-{slug}-archived-{date}.md` @@ -169,7 +167,7 @@ b) **HALT and wait for user selection.** - IF A: Read fully and follow: `{advanced_elicitation}` with current tech-spec content, process enhanced insights, ask user "Accept improvements? (y/n)", if yes update WIP file then redisplay menu, if no keep original then redisplay menu - IF P: Read fully and follow: `{party_mode_exec}` with current tech-spec content, process collaborative insights, ask user "Accept changes? (y/n)", if yes update WIP file then redisplay menu, if no keep original then redisplay menu -- IF C: Verify `{wipFile}` has `stepsCompleted: [1]`, then read fully and follow: `{nextStepFile}` +- IF C: Verify `{wipFile}` has `stepsCompleted: [1]`, then read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md` - IF Any other comments or queries: respond helpfully then redisplay menu #### EXECUTION RULES: diff --git a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md index 533c0d55b..5e749a3ff 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md @@ -2,7 +2,6 @@ name: 'step-02-investigate' description: 'Map technical constraints and anchor points within the codebase' -nextStepFile: './step-03-generate.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- @@ -122,7 +121,7 @@ Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Ge - IF A: Read fully and follow: `{advanced_elicitation}` with current tech-spec content, process enhanced insights, ask user "Accept improvements? (y/n)", if yes update WIP file then redisplay menu, if no keep original then redisplay menu - IF P: Read fully and follow: `{party_mode_exec}` with current tech-spec content, process collaborative insights, ask user "Accept changes? (y/n)", if yes update WIP file then redisplay menu, if no keep original then redisplay menu -- IF C: Verify frontmatter updated with `stepsCompleted: [1, 2]`, then read fully and follow: `{nextStepFile}` +- IF C: Verify frontmatter updated with `stepsCompleted: [1, 2]`, then read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md` - IF Any other comments or queries: respond helpfully then redisplay menu #### EXECUTION RULES: diff --git a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md index 1a163ccb0..2a8ee18e1 100644 --- a/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +++ b/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md @@ -2,7 +2,6 @@ name: 'step-03-generate' description: 'Build the implementation plan based on the technical mapping of constraints' -nextStepFile: './step-04-review.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- @@ -113,7 +112,7 @@ stepsCompleted: [1, 2, 3] --- ``` -c) **Read fully and follow: `{nextStepFile}` (Step 4)** +c) **Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md` (Step 4)** ## REQUIRED OUTPUTS: 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 cc4fdf221..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: 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 @@ -76,4 +76,4 @@ Load and read full config from `{main_config}` and resolve: ### 2. First Step Execution -Read fully and follow: `steps/step-01-understand.md` to begin the workflow. +Read fully and follow: `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md` to begin the workflow. diff --git a/src/bmm/workflows/document-project/workflow.yaml b/src/bmm/workflows/document-project/workflow.yaml index be9600c24..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: "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/steps/step-01-discover.md b/src/bmm/workflows/generate-project-context/steps/step-01-discover.md index fa36993d3..16f95e15c 100644 --- a/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +++ b/src/bmm/workflows/generate-project-context/steps/step-01-discover.md @@ -179,6 +179,6 @@ Ready to create/update your project context. This will help AI agents implement ## NEXT STEP: -After user selects [C] to continue, load `./step-02-generate.md` to collaboratively generate the specific project context rules. +After user selects [C] to continue, load `{project-root}/_bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md` to collaboratively generate the specific project context rules. Remember: Do NOT proceed to step-02 until user explicitly selects [C] from the menu and discovery is confirmed and the initial file has been written as directed in this discovery step! diff --git a/src/bmm/workflows/generate-project-context/steps/step-02-generate.md b/src/bmm/workflows/generate-project-context/steps/step-02-generate.md index c2b428c57..dcb2f0097 100644 --- a/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +++ b/src/bmm/workflows/generate-project-context/steps/step-02-generate.md @@ -313,6 +313,6 @@ When user selects 'C' for a category, append the content directly to `{output_fo ## NEXT STEP: -After completing all rule categories and user selects 'C' for the final category, load `./step-03-complete.md` to finalize the project context file. +After completing all rule categories and user selects 'C' for the final category, load `{project-root}/_bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md` to finalize the project context file. Remember: Do NOT proceed to step-03 until all categories are complete and user explicitly selects 'C' for each! diff --git a/src/bmm/workflows/generate-project-context/workflow.md b/src/bmm/workflows/generate-project-context/workflow.md index 3f626d65f..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: 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 @@ -44,6 +44,6 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ## EXECUTION -Load and execute `steps/step-01-discover.md` to begin the workflow. +Load and execute `{project-root}/_bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md` to begin the workflow. **Note:** Input document discovery and initialization protocols are handled in step-01-discover.md. 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 81% rename from src/bmm/workflows/qa/automate/workflow.yaml rename to src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml index f1119e980..77809ff72 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" @@ -12,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/src/core/tasks/editorial-review-prose.xml b/src/core/tasks/editorial-review-prose.xml index deb53570e..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 426dc3c8c..6a8cb7819 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 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 e5d471f2e..54a23b5f1 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 what should I do next or what do I do now' --- # Task: BMAD Help @@ -53,9 +53,9 @@ Determine what was just completed: ## EXECUTION -1. **Load catalog** — Load `_bmad/_config/bmad-help.csv` +1. **Load catalog** — Load `{project-root}/_bmad/_config/bmad-help.csv` -2. **Resolve output locations and config** — Scan each folder under `_bmad/` (except `_config`) for `config.yaml`. For each workflow row, resolve its `output-location` variables against that module's config so artifact paths can be searched. Also extract `communication_language` and `project_knowledge` from each scanned module's config. +2. **Resolve output locations and config** — Scan each folder under `{project-root}/_bmad/` (except `_config`) for `config.yaml`. For each workflow row, resolve its `output-location` variables against that module's config so artifact paths can be searched. Also extract `communication_language` and `project_knowledge` from each scanned module's config. 3. **Ground in project knowledge** — If `project_knowledge` resolves to an existing path, read available documentation files (architecture docs, project overview, tech stack references) for grounding context. Use discovered project facts when composing any project-specific output. Never fabricate project-specific details — if documentation is unavailable, state so. diff --git a/src/core/tasks/index-docs.xml b/src/core/tasks/index-docs.xml index 30e060921..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 421719bb5..58551aa60 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..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 ea7395e41..56e9f18ca 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..c8baf457e 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..f0f5bd99e 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.' --- # Party Mode Workflow 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); 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/_config-driven.js b/tools/cli/installers/lib/ide/_config-driven.js index 9541c75ed..813a6e674 100644 --- a/tools/cli/installers/lib/ide/_config-driven.js +++ b/tools/cli/installers/lib/ide/_config-driven.js @@ -34,6 +34,25 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup { * @returns {Promise} Setup result */ async setup(projectDir, bmadDir, options = {}) { + // Check for BMAD files in ancestor directories that would cause duplicates + if (this.installerConfig?.ancestor_conflict_check) { + const conflict = await this.findAncestorConflict(projectDir); + if (conflict) { + await prompts.log.error( + `Found existing BMAD commands in ancestor installation: ${conflict}\n` + + ` ${this.name} inherits commands from parent directories, so this would cause duplicates.\n` + + ` Please remove the BMAD files from that directory first:\n` + + ` rm -rf "${conflict}"/bmad*`, + ); + return { + success: false, + reason: 'ancestor-conflict', + error: `Ancestor conflict: ${conflict}`, + conflictDir: conflict, + }; + } + } + if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`); // Clean up any old BMAD installation first @@ -353,7 +372,6 @@ You must fully embody this agent's persona and follow all activation instruction return `--- name: '{{name}}' description: '{{description}}' -disable-model-invocation: true --- # {{name}} @@ -454,6 +472,15 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}} * @param {string} projectDir - Project directory */ async cleanup(projectDir, options = {}) { + // Migrate legacy target directories (e.g. .opencode/agent → .opencode/agents) + if (this.installerConfig?.legacy_targets) { + if (!options.silent) await prompts.log.message(' Migrating legacy directories...'); + for (const legacyDir of this.installerConfig.legacy_targets) { + await this.cleanupTarget(projectDir, legacyDir, options); + await this.removeEmptyParents(projectDir, legacyDir); + } + } + // Clean all target directories if (this.installerConfig?.targets) { const parentDirs = new Set(); @@ -533,24 +560,71 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}} } } /** - * Recursively remove empty directories walking up from dir toward projectDir + * Check ancestor directories for existing BMAD files in the same target_dir. + * IDEs like Claude Code inherit commands from parent directories, so an existing + * installation in an ancestor would cause duplicate commands. + * @param {string} projectDir - Project directory being installed to + * @returns {Promise} Path to conflicting directory, or null if clean + */ + async findAncestorConflict(projectDir) { + const targetDir = this.installerConfig?.target_dir; + if (!targetDir) return null; + + const resolvedProject = await fs.realpath(path.resolve(projectDir)); + let current = path.dirname(resolvedProject); + const root = path.parse(current).root; + + while (current !== root && current.length > root.length) { + const candidatePath = path.join(current, targetDir); + try { + if (await fs.pathExists(candidatePath)) { + const entries = await fs.readdir(candidatePath); + const hasBmad = entries.some((e) => typeof e === 'string' && e.toLowerCase().startsWith('bmad')); + if (hasBmad) { + return candidatePath; + } + } + } catch { + // Can't read directory — skip + } + current = path.dirname(current); + } + + return null; + } + + /** + * Walk up ancestor directories from relativeDir toward projectDir, removing each if empty * Stops at projectDir boundary — never removes projectDir itself * @param {string} projectDir - Project root (boundary) * @param {string} relativeDir - Relative directory to start from */ async removeEmptyParents(projectDir, relativeDir) { + const resolvedProject = path.resolve(projectDir); let current = relativeDir; let last = null; while (current && current !== '.' && current !== last) { last = current; - const fullPath = path.join(projectDir, current); + const fullPath = path.resolve(projectDir, current); + // Boundary guard: never traverse outside projectDir + if (!fullPath.startsWith(resolvedProject + path.sep) && fullPath !== resolvedProject) break; try { - if (!(await fs.pathExists(fullPath))) break; + if (!(await fs.pathExists(fullPath))) { + // Dir already gone — advance current; last is reset at top of next iteration + current = path.dirname(current); + continue; + } const remaining = await fs.readdir(fullPath); if (remaining.length > 0) break; await fs.rmdir(fullPath); - } catch { - break; + } catch (error) { + // ENOTEMPTY: TOCTOU race (file added between readdir and rmdir) — skip level, continue upward + // ENOENT: dir removed by another process between pathExists and rmdir — skip level, continue upward + if (error.code === 'ENOTEMPTY' || error.code === 'ENOENT') { + current = path.dirname(current); + continue; + } + break; // fatal error (e.g. EACCES) — stop upward walk } current = path.dirname(current); } diff --git a/tools/cli/installers/lib/ide/codex.js b/tools/cli/installers/lib/ide/codex.js index 890d8bd3a..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'); @@ -14,58 +15,7 @@ const prompts = require('../../../lib/prompts'); */ class CodexSetup extends BaseIdeSetup { constructor() { - super('codex', 'Codex', true); // preferred IDE - } - - /** - * 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 }; + super('codex', 'Codex', false); } /** @@ -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}`, }; } } 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/manager.js b/tools/cli/installers/lib/ide/manager.js index f83db4592..9e286fdd3 100644 --- a/tools/cli/installers/lib/ide/manager.js +++ b/tools/cli/installers/lib/ide/manager.js @@ -8,7 +8,7 @@ const prompts = require('../../../lib/prompts'); * Dynamically discovers and loads IDE handlers * * Loading strategy: - * 1. Custom installer files (codex.js, github-copilot.js, kilo.js) - for platforms with unique installation logic + * 1. Custom installer files (codex.js, github-copilot.js, kilo.js, rovodev.js) - for platforms with unique installation logic * 2. Config-driven handlers (from platform-codes.yaml) - for standard IDE installation patterns */ class IdeManager { @@ -44,7 +44,7 @@ class IdeManager { /** * Dynamically load all IDE handlers - * 1. Load custom installer files first (codex.js, github-copilot.js, kilo.js) + * 1. Load custom installer files first (codex.js, github-copilot.js, kilo.js, rovodev.js) * 2. Load config-driven handlers from platform-codes.yaml */ async loadHandlers() { @@ -61,7 +61,7 @@ class IdeManager { */ async loadCustomInstallerFiles() { const ideDir = __dirname; - const customFiles = ['codex.js', 'github-copilot.js', 'kilo.js']; + const customFiles = ['codex.js', 'github-copilot.js', 'kilo.js', 'rovodev.js']; for (const file of customFiles) { const filePath = path.join(ideDir, file); @@ -206,7 +206,9 @@ class IdeManager { if (handlerResult.tools > 0) parts.push(`${handlerResult.tools} tools`); detail = parts.join(', '); } - return { success: true, ide: ideName, detail, handlerResult }; + // Propagate handler's success status (default true for backward compat) + const success = handlerResult?.success !== false; + return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult }; } catch (error) { await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`); return { success: false, ide: ideName, error: error.message }; diff --git a/tools/cli/installers/lib/ide/platform-codes.yaml b/tools/cli/installers/lib/ide/platform-codes.yaml index 7c2dde2cb..4e6ca8070 100644 --- a/tools/cli/installers/lib/ide/platform-codes.yaml +++ b/tools/cli/installers/lib/ide/platform-codes.yaml @@ -40,6 +40,7 @@ platforms: installer: target_dir: .claude/commands template_type: default + ancestor_conflict_check: true cline: name: "Cline" @@ -57,6 +58,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 @@ -122,11 +132,14 @@ platforms: category: ide description: "OpenCode terminal coding assistant" installer: + legacy_targets: + - .opencode/agent + - .opencode/command targets: - - target_dir: .opencode/agent + - target_dir: .opencode/agents template_type: opencode artifact_types: [agents] - - target_dir: .opencode/command + - target_dir: .opencode/commands template_type: opencode artifact_types: [workflows, tasks, tools] @@ -153,9 +166,7 @@ platforms: preferred: false category: ide description: "Atlassian's Rovo development environment" - installer: - target_dir: .rovodev/workflows - template_type: rovodev + # No installer config - uses custom rovodev.js (generates prompts.yml manifest) trae: name: "Trae" @@ -168,7 +179,7 @@ platforms: windsurf: name: "Windsurf" - preferred: true + preferred: false category: ide description: "AI-powered IDE with cascade flows" installer: @@ -184,12 +195,17 @@ platforms: # template_type: string # Default template type to use # header_template: string (optional) # Override for header/frontmatter template # body_template: string (optional) # Override for body/content template +# legacy_targets: array (optional) # Old target dirs to clean up on reinstall (migration) +# - string # Relative path, e.g. .opencode/agent # targets: array (optional) # For multi-target installations # - target_dir: string # template_type: string # artifact_types: [agents, workflows, tasks, tools] # artifact_types: array (optional) # Filter which artifacts to install (default: all) # skip_existing: boolean (optional) # Skip files that already exist (default: false) +# ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has BMAD files +# # in the same target_dir (for IDEs that inherit +# # commands from parent directories) # ============================================================================ # Platform Categories diff --git a/tools/cli/installers/lib/ide/rovodev.js b/tools/cli/installers/lib/ide/rovodev.js new file mode 100644 index 000000000..da3c4809d --- /dev/null +++ b/tools/cli/installers/lib/ide/rovodev.js @@ -0,0 +1,257 @@ +const path = require('node:path'); +const fs = require('fs-extra'); +const yaml = require('yaml'); +const { BaseIdeSetup } = require('./_base-ide'); +const prompts = require('../../../lib/prompts'); +const { AgentCommandGenerator } = require('./shared/agent-command-generator'); +const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator'); +const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator'); +const { toDashPath } = require('./shared/path-utils'); + +/** + * Rovo Dev IDE setup handler + * + * Custom installer that writes .md workflow files to .rovodev/workflows/ + * and generates .rovodev/prompts.yml to register them with Rovo Dev's /prompts feature. + * + * prompts.yml format (per Rovo Dev docs): + * prompts: + * - name: bmad-bmm-create-prd + * description: "PRD workflow..." + * content_file: workflows/bmad-bmm-create-prd.md + */ +class RovoDevSetup extends BaseIdeSetup { + constructor() { + super('rovo-dev', 'Rovo Dev', false); + this.rovoDir = '.rovodev'; + this.workflowsDir = 'workflows'; + this.promptsFile = 'prompts.yml'; + } + + /** + * Setup Rovo Dev configuration + * @param {string} projectDir - Project directory + * @param {string} bmadDir - BMAD installation directory + * @param {Object} options - Setup options + * @returns {Promise} Setup result with { success, results: { agents, workflows, tasks, tools } } + */ + async setup(projectDir, bmadDir, options = {}) { + if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`); + + // Clean up any old BMAD installation first + await this.cleanup(projectDir, options); + + const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir); + await this.ensureDir(workflowsPath); + + const selectedModules = options.selectedModules || []; + const writtenFiles = []; + + // Generate and write agent launchers + const agentGen = new AgentCommandGenerator(this.bmadFolderName); + const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules); + const agentCount = await agentGen.writeDashArtifacts(workflowsPath, agentArtifacts); + this._collectPromptEntries(writtenFiles, agentArtifacts, ['agent-launcher'], 'agent'); + + // Generate and write workflow commands + const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName); + const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir); + const workflowCount = await workflowGen.writeDashArtifacts(workflowsPath, workflowArtifacts); + this._collectPromptEntries(writtenFiles, workflowArtifacts, ['workflow-command'], 'workflow'); + + // Generate and write task/tool commands + const taskToolGen = new TaskToolCommandGenerator(this.bmadFolderName); + const { artifacts: taskToolArtifacts, counts: taskToolCounts } = await taskToolGen.collectTaskToolArtifacts(bmadDir); + await taskToolGen.writeDashArtifacts(workflowsPath, taskToolArtifacts); + const taskCount = taskToolCounts.tasks || 0; + const toolCount = taskToolCounts.tools || 0; + this._collectPromptEntries(writtenFiles, taskToolArtifacts, ['task', 'tool']); + + // Generate prompts.yml manifest (only if we have entries to write) + if (writtenFiles.length > 0) { + await this.generatePromptsYml(projectDir, writtenFiles); + } + + if (!options.silent) { + await prompts.log.success( + `${this.name} configured: ${agentCount} agents, ${workflowCount} workflows, ${taskCount} tasks, ${toolCount} tools`, + ); + } + + return { + success: true, + results: { + agents: agentCount, + workflows: workflowCount, + tasks: taskCount, + tools: toolCount, + }, + }; + } + + /** + * Collect prompt entries from artifacts into writtenFiles array + * @param {Array} writtenFiles - Target array to push entries into + * @param {Array} artifacts - Artifacts from a generator's collect method + * @param {string[]} acceptedTypes - Artifact types to include (e.g., ['agent-launcher']) + * @param {string} [fallbackSuffix] - Suffix for fallback description; defaults to artifact.type + */ + _collectPromptEntries(writtenFiles, artifacts, acceptedTypes, fallbackSuffix) { + for (const artifact of artifacts) { + if (!acceptedTypes.includes(artifact.type)) continue; + const flatName = toDashPath(artifact.relativePath); + writtenFiles.push({ + name: path.basename(flatName, '.md'), + description: artifact.description || `${artifact.name} ${fallbackSuffix || artifact.type}`, + contentFile: `${this.workflowsDir}/${flatName}`, + }); + } + } + + /** + * Generate .rovodev/prompts.yml manifest + * Merges with existing user entries -- strips entries with names starting 'bmad-', + * appends new BMAD entries, and writes back. + * + * @param {string} projectDir - Project directory + * @param {Array} writtenFiles - Array of { name, description, contentFile } + */ + async generatePromptsYml(projectDir, writtenFiles) { + const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile); + let existingPrompts = []; + + // Read existing prompts.yml and preserve non-BMAD entries + if (await this.pathExists(promptsPath)) { + try { + const content = await this.readFile(promptsPath); + const parsed = yaml.parse(content); + if (parsed && Array.isArray(parsed.prompts)) { + // Keep only non-BMAD entries (entries whose name does NOT start with bmad-) + existingPrompts = parsed.prompts.filter((entry) => !entry.name || !entry.name.startsWith('bmad-')); + } + } catch { + // If parsing fails, start fresh but preserve file safety + existingPrompts = []; + } + } + + // Build new BMAD entries (prefix description with name so /prompts list is scannable) + const bmadEntries = writtenFiles.map((file) => ({ + name: file.name, + description: `${file.name} - ${file.description}`, + content_file: file.contentFile, + })); + + // Merge: user entries first, then BMAD entries + const allPrompts = [...existingPrompts, ...bmadEntries]; + + const config = { prompts: allPrompts }; + const yamlContent = yaml.stringify(config, { lineWidth: 0 }); + await this.writeFile(promptsPath, yamlContent); + } + + /** + * Cleanup Rovo Dev configuration + * Removes bmad-* files from .rovodev/workflows/ and strips BMAD entries from prompts.yml + * @param {string} projectDir - Project directory + * @param {Object} options - Cleanup options + */ + async cleanup(projectDir, options = {}) { + const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir); + + // Remove all bmad-* entries from workflows dir (aligned with detect() predicate) + if (await this.pathExists(workflowsPath)) { + const entries = await fs.readdir(workflowsPath); + for (const entry of entries) { + if (entry.startsWith('bmad-')) { + await fs.remove(path.join(workflowsPath, entry)); + } + } + } + + // Clean BMAD entries from prompts.yml (preserve user entries) + const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile); + if (await this.pathExists(promptsPath)) { + try { + const content = await this.readFile(promptsPath); + const parsed = yaml.parse(content) || {}; + + if (Array.isArray(parsed.prompts)) { + const originalCount = parsed.prompts.length; + parsed.prompts = parsed.prompts.filter((entry) => !entry.name || !entry.name.startsWith('bmad-')); + const removedCount = originalCount - parsed.prompts.length; + + if (removedCount > 0) { + if (parsed.prompts.length === 0) { + // If no entries remain, remove the file entirely + await fs.remove(promptsPath); + } else { + await this.writeFile(promptsPath, yaml.stringify(parsed, { lineWidth: 0 })); + } + if (!options.silent) { + await prompts.log.message(`Removed ${removedCount} BMAD entries from ${this.promptsFile}`); + } + } + } + } catch { + // If parsing fails, leave file as-is + if (!options.silent) { + await prompts.log.warn(`Warning: Could not parse ${this.promptsFile} for cleanup`); + } + } + } + + // Remove empty .rovodev directories + if (await this.pathExists(workflowsPath)) { + const remaining = await fs.readdir(workflowsPath); + if (remaining.length === 0) { + await fs.remove(workflowsPath); + } + } + + const rovoDirPath = path.join(projectDir, this.rovoDir); + if (await this.pathExists(rovoDirPath)) { + const remaining = await fs.readdir(rovoDirPath); + if (remaining.length === 0) { + await fs.remove(rovoDirPath); + } + } + } + + /** + * Detect whether Rovo Dev configuration exists in the project + * Checks for .rovodev/ dir with bmad files or bmad entries in prompts.yml + * @param {string} projectDir - Project directory + * @returns {boolean} + */ + async detect(projectDir) { + const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir); + + // Check for bmad files in workflows dir + if (await fs.pathExists(workflowsPath)) { + const entries = await fs.readdir(workflowsPath); + if (entries.some((entry) => entry.startsWith('bmad-'))) { + return true; + } + } + + // Check for bmad entries in prompts.yml + const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile); + if (await fs.pathExists(promptsPath)) { + try { + const content = await fs.readFile(promptsPath, 'utf8'); + const parsed = yaml.parse(content); + if (parsed && Array.isArray(parsed.prompts)) { + return parsed.prompts.some((entry) => entry.name && entry.name.startsWith('bmad-')); + } + } catch { + // If parsing fails, check raw content + return false; + } + } + + return false; + } +} + +module.exports = { RovoDevSetup }; 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/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. diff --git a/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md b/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md index 65f0a771d..828d673ac 100644 --- a/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +++ b/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md @@ -1,5 +1,5 @@ --- -name: '{{name}}' +mode: all description: '{{description}}' --- diff --git a/tools/cli/installers/lib/ide/templates/combined/opencode-task.md b/tools/cli/installers/lib/ide/templates/combined/opencode-task.md index 98b3a5d77..772f9c9eb 100644 --- a/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +++ b/tools/cli/installers/lib/ide/templates/combined/opencode-task.md @@ -1,5 +1,4 @@ --- -name: '{{name}}' description: '{{description}}' --- diff --git a/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md b/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md index 1ae9c9ac8..88c317e63 100644 --- a/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +++ b/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md @@ -1,5 +1,4 @@ --- -name: '{{name}}' description: '{{description}}' --- diff --git a/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md b/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md index a6f5cb96f..88838cc1c 100644 --- a/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +++ b/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md @@ -1,5 +1,4 @@ --- -name: '{{name}}' description: '{{description}}' --- diff --git a/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md b/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md index a6f5cb96f..88838cc1c 100644 --- a/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +++ b/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md @@ -1,5 +1,4 @@ --- -name: '{{name}}' description: '{{description}}' --- 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! diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index ae99e300f..1338c1f17 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -582,7 +582,7 @@ class UI { /** * Prompt for tool/IDE selection (called after module configuration) * Uses a split prompt approach: - * 1. Recommended tools - standard multiselect for 3 preferred tools + * 1. Recommended tools - standard multiselect for preferred tools * 2. Additional tools - autocompleteMultiselect with search capability * @param {string} projectDir - Project directory to check for existing IDEs * @param {Object} options - Command-line options diff --git a/tools/maintainer/review-pr-README.md b/tools/maintainer/review-pr-README.md deleted file mode 100644 index d097ce948..000000000 --- a/tools/maintainer/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 - -Point your agent at `review-pr.md` and ask it to review a specific PR: - -> "Read tools/maintainer/review-pr.md and apply it to 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 `review-pr.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/tools/platform-codes.yaml b/tools/platform-codes.yaml index d75e31fee..97846a9bd 100644 --- a/tools/platform-codes.yaml +++ b/tools/platform-codes.yaml @@ -18,12 +18,6 @@ platforms: category: cli description: "Anthropic's official CLI for Claude" - windsurf: - name: "Windsurf" - preferred: true - category: ide - description: "AI-powered IDE with cascade flows" - cursor: name: "Cursor" preferred: true @@ -43,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 @@ -55,12 +55,6 @@ platforms: category: ide description: "Enhanced Cline fork" - rovo: - name: "Rovo" - preferred: false - category: ide - description: "Atlassian's AI coding assistant" - rovo-dev: name: "Rovo Dev" preferred: false @@ -127,6 +121,12 @@ platforms: category: ide description: "AI coding tool" + windsurf: + name: "Windsurf" + preferred: false + category: ide + description: "AI-powered IDE with cascade flows" + # Platform categories categories: ide: 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; + } +}