Compare commits
12 Commits
5920d619f8
...
11f9097024
| Author | SHA1 | Date |
|---|---|---|
|
|
11f9097024 | |
|
|
0b9290789e | |
|
|
aa1cf76f88 | |
|
|
b8b4b65c10 | |
|
|
73db5538bf | |
|
|
41f9cc1913 | |
|
|
686af5b0ee | |
|
|
65658a499b | |
|
|
d553a09f73 | |
|
|
c79d081128 | |
|
|
0b3964902a | |
|
|
1e6fc4ba14 |
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Discord notification helper functions
|
||||||
|
|
||||||
|
# Escape markdown special chars and @mentions for safe Discord display
|
||||||
|
# Bracket expression: ] must be first, then other chars. In POSIX bracket expr, \ is literal.
|
||||||
|
esc() { sed -e 's/[][\*_()~`>]/\\&/g' -e 's/@/@ /g'; }
|
||||||
|
|
||||||
|
# Truncate to $1 chars (or 80 if wall-of-text with <3 spaces)
|
||||||
|
trunc() {
|
||||||
|
local max=$1
|
||||||
|
local txt=$(tr '\n\r' ' ' | cut -c1-"$max")
|
||||||
|
local spaces=$(printf '%s' "$txt" | tr -cd ' ' | wc -c)
|
||||||
|
[ "$spaces" -lt 3 ] && [ ${#txt} -gt 80 ] && txt=$(printf '%s' "$txt" | cut -c1-80)
|
||||||
|
printf '%s' "$txt"
|
||||||
|
}
|
||||||
|
|
@ -1,16 +1,286 @@
|
||||||
name: Discord Notification
|
name: Discord Notification
|
||||||
|
|
||||||
"on": [pull_request, release, create, delete, issue_comment, pull_request_review, pull_request_review_comment]
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, closed, reopened, ready_for_review]
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
create:
|
||||||
|
delete:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review:
|
||||||
|
types: [submitted]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
issues:
|
||||||
|
types: [opened, closed, reopened]
|
||||||
|
|
||||||
|
env:
|
||||||
|
MAX_TITLE: 100
|
||||||
|
MAX_BODY: 250
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
notify:
|
pull_request:
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
ACTION: ${{ github.event.action }}
|
||||||
|
MERGED: ${{ github.event.pull_request.merged }}
|
||||||
|
PR_NUM: ${{ github.event.pull_request.number }}
|
||||||
|
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||||
|
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||||
|
PR_USER: ${{ github.event.pull_request.user.login }}
|
||||||
|
PR_BODY: ${{ github.event.pull_request.body }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
if [ "$ACTION" = "opened" ]; then ICON="🔀"; LABEL="New PR"
|
||||||
|
elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then ICON="🎉"; LABEL="Merged"
|
||||||
|
elif [ "$ACTION" = "closed" ]; then ICON="❌"; LABEL="Closed"
|
||||||
|
elif [ "$ACTION" = "reopened" ]; then ICON="🔄"; LABEL="Reopened"
|
||||||
|
else ICON="📋"; LABEL="Ready"; fi
|
||||||
|
|
||||||
|
TITLE=$(printf '%s' "$PR_TITLE" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#PR_TITLE} -gt $MAX_TITLE ] && TITLE="${TITLE}..."
|
||||||
|
BODY=$(printf '%s' "$PR_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ -n "$PR_BODY" ] && [ ${#PR_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
[ -n "$BODY" ] && BODY=" · $BODY"
|
||||||
|
USER=$(printf '%s' "$PR_USER" | esc)
|
||||||
|
|
||||||
|
MSG="$ICON **[$LABEL #$PR_NUM: $TITLE](<$PR_URL>)**"$'\n'"by @$USER$BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
issues:
|
||||||
|
if: github.event_name == 'issues'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
ACTION: ${{ github.event.action }}
|
||||||
|
ISSUE_NUM: ${{ github.event.issue.number }}
|
||||||
|
ISSUE_URL: ${{ github.event.issue.html_url }}
|
||||||
|
ISSUE_TITLE: ${{ github.event.issue.title }}
|
||||||
|
ISSUE_USER: ${{ github.event.issue.user.login }}
|
||||||
|
ISSUE_BODY: ${{ github.event.issue.body }}
|
||||||
|
ACTOR: ${{ github.actor }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
if [ "$ACTION" = "opened" ]; then ICON="🐛"; LABEL="New Issue"; USER="$ISSUE_USER"
|
||||||
|
elif [ "$ACTION" = "closed" ]; then ICON="✅"; LABEL="Closed"; USER="$ACTOR"
|
||||||
|
else ICON="🔄"; LABEL="Reopened"; USER="$ACTOR"; fi
|
||||||
|
|
||||||
|
TITLE=$(printf '%s' "$ISSUE_TITLE" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#ISSUE_TITLE} -gt $MAX_TITLE ] && TITLE="${TITLE}..."
|
||||||
|
BODY=$(printf '%s' "$ISSUE_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ -n "$ISSUE_BODY" ] && [ ${#ISSUE_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
[ -n "$BODY" ] && BODY=" · $BODY"
|
||||||
|
USER=$(printf '%s' "$USER" | esc)
|
||||||
|
|
||||||
|
MSG="$ICON **[$LABEL #$ISSUE_NUM: $TITLE](<$ISSUE_URL>)**"$'\n'"by @$USER$BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
issue_comment:
|
||||||
|
if: github.event_name == 'issue_comment'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
IS_PR: ${{ github.event.issue.pull_request && 'true' || 'false' }}
|
||||||
|
ISSUE_NUM: ${{ github.event.issue.number }}
|
||||||
|
ISSUE_TITLE: ${{ github.event.issue.title }}
|
||||||
|
COMMENT_URL: ${{ github.event.comment.html_url }}
|
||||||
|
COMMENT_USER: ${{ github.event.comment.user.login }}
|
||||||
|
COMMENT_BODY: ${{ github.event.comment.body }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
[ "$IS_PR" = "true" ] && TYPE="PR" || TYPE="Issue"
|
||||||
|
|
||||||
|
TITLE=$(printf '%s' "$ISSUE_TITLE" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#ISSUE_TITLE} -gt $MAX_TITLE ] && TITLE="${TITLE}..."
|
||||||
|
BODY=$(printf '%s' "$COMMENT_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ ${#COMMENT_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
USER=$(printf '%s' "$COMMENT_USER" | esc)
|
||||||
|
|
||||||
|
MSG="💬 **[Comment on $TYPE #$ISSUE_NUM: $TITLE](<$COMMENT_URL>)**"$'\n'"@$USER: $BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
pull_request_review:
|
||||||
|
if: github.event_name == 'pull_request_review'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
STATE: ${{ github.event.review.state }}
|
||||||
|
PR_NUM: ${{ github.event.pull_request.number }}
|
||||||
|
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||||
|
REVIEW_URL: ${{ github.event.review.html_url }}
|
||||||
|
REVIEW_USER: ${{ github.event.review.user.login }}
|
||||||
|
REVIEW_BODY: ${{ github.event.review.body }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
if [ "$STATE" = "approved" ]; then ICON="✅"; LABEL="Approved"
|
||||||
|
elif [ "$STATE" = "changes_requested" ]; then ICON="🔧"; LABEL="Changes Requested"
|
||||||
|
else ICON="👀"; LABEL="Reviewed"; fi
|
||||||
|
|
||||||
|
TITLE=$(printf '%s' "$PR_TITLE" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#PR_TITLE} -gt $MAX_TITLE ] && TITLE="${TITLE}..."
|
||||||
|
BODY=$(printf '%s' "$REVIEW_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ -n "$REVIEW_BODY" ] && [ ${#REVIEW_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
[ -n "$BODY" ] && BODY=": $BODY"
|
||||||
|
USER=$(printf '%s' "$REVIEW_USER" | esc)
|
||||||
|
|
||||||
|
MSG="$ICON **[$LABEL PR #$PR_NUM: $TITLE](<$REVIEW_URL>)**"$'\n'"@$USER$BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
pull_request_review_comment:
|
||||||
|
if: github.event_name == 'pull_request_review_comment'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
PR_NUM: ${{ github.event.pull_request.number }}
|
||||||
|
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||||
|
COMMENT_URL: ${{ github.event.comment.html_url }}
|
||||||
|
COMMENT_USER: ${{ github.event.comment.user.login }}
|
||||||
|
COMMENT_BODY: ${{ github.event.comment.body }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
TITLE=$(printf '%s' "$PR_TITLE" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#PR_TITLE} -gt $MAX_TITLE ] && TITLE="${TITLE}..."
|
||||||
|
BODY=$(printf '%s' "$COMMENT_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ ${#COMMENT_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
USER=$(printf '%s' "$COMMENT_USER" | esc)
|
||||||
|
|
||||||
|
MSG="💭 **[Review Comment PR #$PR_NUM: $TITLE](<$COMMENT_URL>)**"$'\n'"@$USER: $BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
release:
|
||||||
|
if: github.event_name == 'release'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
TAG: ${{ github.event.release.tag_name }}
|
||||||
|
NAME: ${{ github.event.release.name }}
|
||||||
|
URL: ${{ github.event.release.html_url }}
|
||||||
|
RELEASE_BODY: ${{ github.event.release.body }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
REL_NAME=$(printf '%s' "$NAME" | trunc $MAX_TITLE | esc)
|
||||||
|
[ ${#NAME} -gt $MAX_TITLE ] && REL_NAME="${REL_NAME}..."
|
||||||
|
BODY=$(printf '%s' "$RELEASE_BODY" | trunc $MAX_BODY | esc)
|
||||||
|
[ -n "$RELEASE_BODY" ] && [ ${#RELEASE_BODY} -gt $MAX_BODY ] && BODY="${BODY}..."
|
||||||
|
[ -n "$BODY" ] && BODY=" · $BODY"
|
||||||
|
TAG_ESC=$(printf '%s' "$TAG" | esc)
|
||||||
|
|
||||||
|
MSG="🚀 **[Release $TAG_ESC: $REL_NAME](<$URL>)**"$'\n'"$BODY"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
create:
|
||||||
|
if: github.event_name == 'create'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.repository.default_branch }}
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
- name: Notify Discord
|
||||||
|
env:
|
||||||
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
REF_TYPE: ${{ github.event.ref_type }}
|
||||||
|
REF: ${{ github.event.ref }}
|
||||||
|
ACTOR: ${{ github.actor }}
|
||||||
|
REPO_URL: ${{ github.event.repository.html_url }}
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
source .github/scripts/discord-helpers.sh
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
|
||||||
|
[ "$REF_TYPE" = "branch" ] && ICON="🌿" || ICON="🏷️"
|
||||||
|
REF_TRUNC=$(printf '%s' "$REF" | trunc $MAX_TITLE)
|
||||||
|
[ ${#REF} -gt $MAX_TITLE ] && REF_TRUNC="${REF_TRUNC}..."
|
||||||
|
REF_ESC=$(printf '%s' "$REF_TRUNC" | esc)
|
||||||
|
REF_URL=$(jq -rn --arg ref "$REF" '$ref | @uri')
|
||||||
|
ACTOR_ESC=$(printf '%s' "$ACTOR" | esc)
|
||||||
|
MSG="$ICON **${REF_TYPE^} created: [$REF_ESC](<$REPO_URL/tree/$REF_URL>)** by @$ACTOR_ESC"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
||||||
|
delete:
|
||||||
|
if: github.event_name == 'delete'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Notify Discord
|
- name: Notify Discord
|
||||||
uses: sarisia/actions-status-discord@v1
|
env:
|
||||||
if: always()
|
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
with:
|
REF_TYPE: ${{ github.event.ref_type }}
|
||||||
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
REF: ${{ github.event.ref }}
|
||||||
status: ${{ job.status }}
|
ACTOR: ${{ github.actor }}
|
||||||
title: "Triggered by ${{ github.event_name }}"
|
run: |
|
||||||
color: 0x5865F2
|
set -o pipefail
|
||||||
|
[ -z "$WEBHOOK" ] && exit 0
|
||||||
|
esc() { sed -e 's/[][\*_()~`>]/\\&/g' -e 's/@/@ /g'; }
|
||||||
|
trunc() { tr '\n\r' ' ' | cut -c1-"$1"; }
|
||||||
|
|
||||||
|
REF_TRUNC=$(printf '%s' "$REF" | trunc 100)
|
||||||
|
[ ${#REF} -gt 100 ] && REF_TRUNC="${REF_TRUNC}..."
|
||||||
|
REF_ESC=$(printf '%s' "$REF_TRUNC" | esc)
|
||||||
|
ACTOR_ESC=$(printf '%s' "$ACTOR" | esc)
|
||||||
|
MSG="🗑️ **${REF_TYPE^} deleted: $REF_ESC** by @$ACTOR_ESC"
|
||||||
|
jq -n --arg content "$MSG" '{content: $content}' | curl -sf --retry 2 -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @-
|
||||||
|
|
|
||||||
|
|
@ -71,3 +71,5 @@ z*/
|
||||||
.github/chatmodes
|
.github/chatmodes
|
||||||
.agent
|
.agent
|
||||||
.agentvibes/
|
.agentvibes/
|
||||||
|
.kiro/
|
||||||
|
.roo
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
# Test fixtures with intentionally broken/malformed files
|
# Test fixtures with intentionally broken/malformed files
|
||||||
test/fixtures/**
|
test/fixtures/**
|
||||||
|
|
||||||
|
# Contributor Covenant (external standard)
|
||||||
|
CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
# BMAD runtime folders (user-specific, not in repo)
|
# BMAD runtime folders (user-specific, not in repo)
|
||||||
.bmad/
|
.bmad/
|
||||||
.bmad*/
|
.bmad*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,128 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
the official BMAD Discord server (https://discord.com/invite/gk8jAdXWmj) - DM a moderator or flag a post.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
https://www.contributor-covenant.org/translations.
|
||||||
|
|
@ -0,0 +1,513 @@
|
||||||
|
---
|
||||||
|
name: 'Workflow Compliance Report - create-workflow'
|
||||||
|
description: 'Systematic validation results for create-workflow workflow'
|
||||||
|
workflow_name: 'create-workflow'
|
||||||
|
validation_date: '2025-12-02'
|
||||||
|
stepsCompleted: ['workflow-validation', 'step-validation', 'file-validation', 'spectrum-validation', 'web-subprocess-validation']
|
||||||
|
---
|
||||||
|
|
||||||
|
# Workflow Compliance Report: create-workflow
|
||||||
|
|
||||||
|
**Validation Date:** 2025-12-02
|
||||||
|
**Target Workflow:** /Users/brianmadison/dev/BMAD-METHOD/src/modules/bmb/workflows/create-workflow/workflow.md
|
||||||
|
**Reference Standard:** /Users/brianmadison/dev/BMAD-METHOD/.bmad/bmb/docs/workflows/templates/workflow-template.md
|
||||||
|
|
||||||
|
## Phase 1: Workflow.md Validation Results
|
||||||
|
|
||||||
|
### Template Adherence Analysis
|
||||||
|
|
||||||
|
**Reference Standard:** workflow-template.md
|
||||||
|
|
||||||
|
### Frontmatter Structure Violations
|
||||||
|
|
||||||
|
✅ **PASS** - All required fields present and properly formatted:
|
||||||
|
|
||||||
|
- name: "Create Workflow" ✓
|
||||||
|
- description: "Create structured standalone workflows using markdown-based step architecture" ✓
|
||||||
|
- web_bundle: true (proper boolean format) ✓
|
||||||
|
|
||||||
|
### Role Description Violations
|
||||||
|
|
||||||
|
✅ **PASS** - Role description follows template format:
|
||||||
|
|
||||||
|
- Partnership language present: "This is a partnership, not a client-vendor relationship" ✓
|
||||||
|
- Expertise clearly defined: "workflow architect and systems designer" ✓
|
||||||
|
- User expertise identified: "domain knowledge and specific workflow requirements" ✓
|
||||||
|
- Collaboration directive: "Work together as equals" ✓
|
||||||
|
|
||||||
|
### Workflow Architecture Violations
|
||||||
|
|
||||||
|
🚫 **CRITICAL VIOLATION** - Core Principles deviate from template:
|
||||||
|
|
||||||
|
**Template requires:** "Each step of the overall goal is a self contained instruction file that you will adhere too 1 file as directed at a time"
|
||||||
|
|
||||||
|
**Target has:** "Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly"
|
||||||
|
|
||||||
|
- **Severity:** Critical
|
||||||
|
- **Template Reference:** "Core Principles" section in workflow-template.md
|
||||||
|
- **Specific Fix:** Replace with exact template wording: "Each step of the overall goal is a self contained instruction file that you will adhere too 1 file as directed at a time"
|
||||||
|
|
||||||
|
🚫 **CRITICAL VIOLATION** - State Tracking Rule deviates from template:
|
||||||
|
|
||||||
|
**Template requires:** "Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document"
|
||||||
|
|
||||||
|
**Target has:** "Document progress in context for compliance checking (no output file frontmatter needed)"
|
||||||
|
|
||||||
|
- **Severity:** Critical
|
||||||
|
- **Template Reference:** "Core Principles" section in workflow-template.md
|
||||||
|
- **Specific Fix:** Replace with exact template wording about stepsCompleted array
|
||||||
|
|
||||||
|
### Initialization Sequence Violations
|
||||||
|
|
||||||
|
🚫 **MAJOR VIOLATION** - Configuration path format incorrect:
|
||||||
|
|
||||||
|
**Template requires:** "{project-root}/.bmad/[MODULE FOLDER]/config.yaml"
|
||||||
|
|
||||||
|
**Target has:** "{project-root}/.bmad/bmb/config.yaml"
|
||||||
|
|
||||||
|
- **Severity:** Major
|
||||||
|
- **Template Reference:** "Module Configuration Loading" section in workflow-template.md
|
||||||
|
- **Specific Fix:** Use proper module variable substitution: "{project-root}/.bmad/bmb/config.yaml" should reference module folder properly
|
||||||
|
|
||||||
|
🚫 **MAJOR VIOLATION** - First step path format inconsistent:
|
||||||
|
|
||||||
|
**Template requires:** Explicit step file path following pattern
|
||||||
|
|
||||||
|
**Target has:** "Load, read the full file and then execute `{workflow_path}/steps/step-01-init.md` to begin the workflow."
|
||||||
|
|
||||||
|
- **Severity:** Major
|
||||||
|
- **Template Reference:** "First Step EXECUTION" section in workflow-template.md
|
||||||
|
- **Specific Fix:** Ensure consistency with template variable substitution patterns
|
||||||
|
|
||||||
|
### Phase 1 Summary
|
||||||
|
|
||||||
|
**Critical Issues:** 2
|
||||||
|
|
||||||
|
- Core Principles text deviation from template
|
||||||
|
- State Tracking rule modification from template standard
|
||||||
|
|
||||||
|
**Major Issues:** 2
|
||||||
|
|
||||||
|
- Configuration path format not following template variable pattern
|
||||||
|
- First step execution path needs consistency check
|
||||||
|
|
||||||
|
**Minor Issues:** 0
|
||||||
|
|
||||||
|
### Phase 1 Recommendations
|
||||||
|
|
||||||
|
**Priority 1 - Critical Fixes:**
|
||||||
|
|
||||||
|
1. Replace Core Principles text with exact template wording
|
||||||
|
2. Restore State Tracking rule to template standard about stepsCompleted array
|
||||||
|
|
||||||
|
**Priority 2 - Major Fixes:**
|
||||||
|
|
||||||
|
1. Review and standardize all path variable usage to follow template patterns
|
||||||
|
2. Ensure consistency in variable substitution throughout workflow
|
||||||
|
|
||||||
|
## Phase 2: Step Validation Results
|
||||||
|
|
||||||
|
### Template Adherence Analysis
|
||||||
|
|
||||||
|
**Reference Standard:** step-template.md
|
||||||
|
**Total Steps Analyzed:** 9
|
||||||
|
|
||||||
|
### Critical Violations Summary
|
||||||
|
|
||||||
|
**Step 01-init.md:**
|
||||||
|
|
||||||
|
- Missing `outputFile` in frontmatter - Template Reference: line 22
|
||||||
|
- Uses auto-proceed menu instead of standard A/P/C pattern - Template Reference: lines 106-123
|
||||||
|
- Missing "CRITICAL STEP COMPLETION NOTE" section - Template Reference: line 126
|
||||||
|
|
||||||
|
**Step 02-gather.md:**
|
||||||
|
|
||||||
|
- Missing `outputFile` in frontmatter - Template Reference: line 22
|
||||||
|
- Incorrect `nextStepFile` path format - Template Reference: line 19
|
||||||
|
|
||||||
|
**Steps 03-09 (All Steps):**
|
||||||
|
|
||||||
|
- Missing `outputFile` in frontmatter - Template Reference: line 22
|
||||||
|
- Non-standard step naming (missing short descriptive names) - Template Reference: line 9
|
||||||
|
- Steps 08-09 missing `workflowFile` in frontmatter - Template Reference: line 21
|
||||||
|
|
||||||
|
### Major Violations Summary
|
||||||
|
|
||||||
|
**Frontmatter Structure (All Steps):**
|
||||||
|
|
||||||
|
- Missing `altStep{Y}` comment pattern - Template Reference: line 20
|
||||||
|
- Missing Task References section structure - Template Reference: lines 24-27
|
||||||
|
- Missing Template References section structure - Template Reference: lines 29-33
|
||||||
|
- Missing Data References section structure - Template Reference: lines 35-37
|
||||||
|
|
||||||
|
**Menu Pattern Violations:**
|
||||||
|
|
||||||
|
- Step 01: Custom auto-proceed menu instead of standard A/P/C - Template Reference: lines 106-123
|
||||||
|
- Step 05: Menu text "Continue" instead of "Continue to [next action]" - Template Reference: line 115
|
||||||
|
- Step 07: Custom "Build Complete" menu instead of A/P/C pattern - Template Reference: lines 106-123
|
||||||
|
- Step 08: Missing A and P options in menu - Template Reference: lines 106-123
|
||||||
|
- Step 09: Uses T/M/D pattern instead of standard A/P/C - Template Reference: lines 106-123
|
||||||
|
|
||||||
|
### Path Variable Inconsistencies
|
||||||
|
|
||||||
|
- Inconsistent use of `{bmad_folder}` vs `.bmad` in paths across all steps
|
||||||
|
- Missing `outputFile` variable definitions - Template Reference: line 22
|
||||||
|
- Step 04 uses non-standard `nextStepFormDesign` and `nextStepDesign` variables
|
||||||
|
|
||||||
|
### Minor Violations Summary
|
||||||
|
|
||||||
|
**Content Structure:**
|
||||||
|
|
||||||
|
- Missing "CONTEXT BOUNDARIES" section titles - Template Reference: line 82
|
||||||
|
- Missing "EXECUTION PROTOCOLS" section titles - Template Reference: line 75
|
||||||
|
- Non-standard section naming in multiple steps - Template Reference: line 89
|
||||||
|
|
||||||
|
### Phase 2 Summary
|
||||||
|
|
||||||
|
**Critical Issues:** 15
|
||||||
|
|
||||||
|
- 9 missing outputFile variables
|
||||||
|
- 6 non-standard menu patterns
|
||||||
|
- Multiple missing required sections
|
||||||
|
|
||||||
|
**Major Issues:** 36
|
||||||
|
|
||||||
|
- 36 frontmatter structure violations across all steps
|
||||||
|
- 5 menu pattern deviations
|
||||||
|
- Numerous path variable inconsistencies
|
||||||
|
|
||||||
|
**Minor Issues:** 27
|
||||||
|
|
||||||
|
- Section naming inconsistencies
|
||||||
|
- Missing template-required section titles
|
||||||
|
|
||||||
|
**Most Common Violations:**
|
||||||
|
|
||||||
|
1. Missing `outputFile` in frontmatter (9 occurrences)
|
||||||
|
2. Non-standard menu patterns (6 occurrences)
|
||||||
|
3. Missing Task/Template/Data References sections (27 occurrences)
|
||||||
|
|
||||||
|
### Overall Step Compliance Score
|
||||||
|
|
||||||
|
**Overall Workflow Step Compliance: 68%**
|
||||||
|
|
||||||
|
- Step 01: 65% compliant
|
||||||
|
- Step 02: 70% compliant
|
||||||
|
- Steps 03-09: 63-72% compliant each
|
||||||
|
|
||||||
|
## Phase 3: File Size, Formatting, and Data Validation Results
|
||||||
|
|
||||||
|
### File Size Analysis
|
||||||
|
|
||||||
|
**Workflow File:**
|
||||||
|
|
||||||
|
- workflow.md: 2.9K - ✅ **Optimal** - Excellent performance and maintainability
|
||||||
|
|
||||||
|
**Step Files Distribution:**
|
||||||
|
|
||||||
|
- **Optimal (≤5K):** 3 files
|
||||||
|
- step-09-complete.md: 5.1K
|
||||||
|
- step-01-init.md: 5.3K
|
||||||
|
- **Good (5K-7K):** 1 file
|
||||||
|
- step-04-plan-review.md: 6.6K
|
||||||
|
- **Acceptable (7K-10K):** 5 files
|
||||||
|
- step-02-gather.md: 7.8K
|
||||||
|
- step-08-review.md: 7.9K
|
||||||
|
- step-03-tools-configuration.md: 7.9K
|
||||||
|
- step-05-output-format-design.md: 8.2K
|
||||||
|
- step-06-design.md: 9.0K
|
||||||
|
- **Acceptable (approaching concern):** 1 file
|
||||||
|
- step-07-build.md: 10.0K (monitor if additional features added)
|
||||||
|
|
||||||
|
**CSV Data Files:**
|
||||||
|
|
||||||
|
- Total CSV files: 0
|
||||||
|
- No data files present requiring validation
|
||||||
|
|
||||||
|
### Markdown Formatting Validation
|
||||||
|
|
||||||
|
**✅ Strengths:**
|
||||||
|
|
||||||
|
- Consistent frontmatter structure across all files
|
||||||
|
- Proper heading hierarchy (H1→H2→H3) maintained
|
||||||
|
- Standardized section patterns across all steps
|
||||||
|
- Proper code block formatting in 7 of 10 files
|
||||||
|
- Consistent bullet point usage throughout
|
||||||
|
|
||||||
|
**⚠️ Minor Issues:**
|
||||||
|
|
||||||
|
- File size range significant (2.9K to 10K) but all within acceptable limits
|
||||||
|
- step-07-build.md approaching concern threshold at 10K
|
||||||
|
|
||||||
|
### Performance Impact Assessment
|
||||||
|
|
||||||
|
**Overall workflow performance:** ✅ **Excellent**
|
||||||
|
|
||||||
|
- All files optimized for performance
|
||||||
|
- No files requiring immediate size optimization
|
||||||
|
- Well-structured maintainable codebase
|
||||||
|
- Professional markdown implementation
|
||||||
|
|
||||||
|
**Most critical file size issue:** None - all files within acceptable ranges
|
||||||
|
**Primary formatting concerns:** None significant - excellent consistency maintained
|
||||||
|
|
||||||
|
## Phase 4: Intent vs Prescriptive Spectrum Analysis
|
||||||
|
|
||||||
|
### Current Position Assessment
|
||||||
|
|
||||||
|
**Analyzed Position:** Balanced Middle (leaning prescriptive)
|
||||||
|
**Evidence:**
|
||||||
|
|
||||||
|
- Highly structured step files with mandatory execution rules
|
||||||
|
- Specific sequence enforcement and template compliance requirements
|
||||||
|
- Conversational partnership model within rigid structural constraints
|
||||||
|
- Limited creative adaptation but maintains collaborative dialogue
|
||||||
|
**Confidence Level:** High - Clear patterns in implementation demonstrate intentional structure
|
||||||
|
|
||||||
|
### Expert Recommendation
|
||||||
|
|
||||||
|
**Recommended Position:** Balanced Middle (slightly toward prescriptive)
|
||||||
|
**Reasoning:**
|
||||||
|
|
||||||
|
- Workflow creation needs systematic structure for BMAD compliance
|
||||||
|
- Template requirements demand prescriptive elements
|
||||||
|
- Creative aspects need room for user ownership
|
||||||
|
- Best workflows emerge from structured collaboration
|
||||||
|
**Workflow Type Considerations:**
|
||||||
|
- Primary purpose: Creating structured, repeatable workflows
|
||||||
|
- User expectations: Reliable, consistent BMAD-compliant outputs
|
||||||
|
- Success factors: Template compliance and systematic approach
|
||||||
|
- Risk level: Medium - compliance critical for ecosystem coherence
|
||||||
|
|
||||||
|
### User Decision
|
||||||
|
|
||||||
|
**Selected Position:** Option 1 - Keep Current Position (Balanced Middle leaning prescriptive)
|
||||||
|
**Rationale:** User prefers to maintain current structured approach
|
||||||
|
**Implementation Guidance:**
|
||||||
|
|
||||||
|
- Continue with current balance of structure and collaborative dialogue
|
||||||
|
- Maintain template compliance requirements
|
||||||
|
- Preserve systematic execution patterns
|
||||||
|
- Keep conversational elements within prescribed framework
|
||||||
|
|
||||||
|
### Spectrum Validation Results
|
||||||
|
|
||||||
|
✅ Spectrum position is intentional and understood
|
||||||
|
✅ User educated on implications of their choice
|
||||||
|
✅ Implementation guidance provided for maintaining position
|
||||||
|
✅ Decision documented for future reference
|
||||||
|
|
||||||
|
## Phase 5: Web Search & Subprocess Optimization Analysis
|
||||||
|
|
||||||
|
### Web Search Optimization
|
||||||
|
|
||||||
|
**Unnecessary Searches Identified:** 1
|
||||||
|
|
||||||
|
- Step 6 loads 5+ template files individually - these are static templates that rarely change
|
||||||
|
**Essential Searches to Keep:** 2
|
||||||
|
- CSV tool database in Step 3 (dynamic data)
|
||||||
|
- Reference workflow example in Step 2 (concrete patterns)
|
||||||
|
**Optimization Recommendations:**
|
||||||
|
- Implement template caching to eliminate repeated file loads
|
||||||
|
- Use selective CSV loading based on workflow type
|
||||||
|
**Estimated Time Savings:** 5-7 seconds per workflow execution
|
||||||
|
|
||||||
|
### Subprocess Optimization Opportunities
|
||||||
|
|
||||||
|
**Parallel Processing:** 2 major opportunities identified
|
||||||
|
|
||||||
|
1. **Step 3 + Step 5 Parallelization:** Tools configuration and output format design can run simultaneously
|
||||||
|
- Savings: 5-10 minutes per workflow
|
||||||
|
2. **Background Template Loading:** Pre-load templates during Step 1 idle time
|
||||||
|
- Savings: Eliminate design-phase delays
|
||||||
|
|
||||||
|
**Batch Processing:** 1 grouping opportunity
|
||||||
|
|
||||||
|
- Parallel file generation in Step 7 (workflow.md, step files, templates)
|
||||||
|
- Savings: 60-80% reduction in build time for multi-step workflows
|
||||||
|
|
||||||
|
**Background Processing:** 2 task opportunities
|
||||||
|
|
||||||
|
- Template pre-loading during initialization
|
||||||
|
- File generation coordination during build phase
|
||||||
|
|
||||||
|
**Performance Improvement:** 40-60% estimated overall improvement
|
||||||
|
|
||||||
|
### Resource Efficiency Analysis
|
||||||
|
|
||||||
|
**Context Optimization:**
|
||||||
|
|
||||||
|
- JIT context loading: 40-60% reduction in token usage
|
||||||
|
- Reference content deduplication: 8,000-12,000 token savings
|
||||||
|
- Step file size reduction: 30-50% smaller files
|
||||||
|
|
||||||
|
**LLM Resource Usage:**
|
||||||
|
|
||||||
|
- Smart context pruning by workflow phase
|
||||||
|
- Compact step instructions with external references
|
||||||
|
- Selective context loading based on current phase
|
||||||
|
|
||||||
|
**User Experience Impact:**
|
||||||
|
|
||||||
|
- Significantly faster workflow creation (15-25 minutes saved)
|
||||||
|
- More responsive interaction patterns
|
||||||
|
- Reduced waiting times during critical phases
|
||||||
|
|
||||||
|
### Implementation Recommendations
|
||||||
|
|
||||||
|
**Immediate Actions (High Impact, Low Risk):**
|
||||||
|
|
||||||
|
1. Implement template caching in workflow.md frontmatter
|
||||||
|
2. Optimize CSV loading with category filtering
|
||||||
|
3. Reduce step file sizes by moving examples to reference files
|
||||||
|
|
||||||
|
**Strategic Improvements (High Impact, Medium Risk):**
|
||||||
|
|
||||||
|
1. Parallelize Step 3 and Step 5 execution
|
||||||
|
2. Implement JIT context loading by phase
|
||||||
|
3. Background template pre-loading
|
||||||
|
|
||||||
|
**Future Enhancements (Highest Impact, Higher Risk):**
|
||||||
|
|
||||||
|
1. Parallel file generation with sub-process coordination
|
||||||
|
2. Smart context pruning across workflow phases
|
||||||
|
3. Complete reference deduplication system
|
||||||
|
|
||||||
|
## Phase 6: Holistic Workflow Analysis Results
|
||||||
|
|
||||||
|
### Flow Validation
|
||||||
|
|
||||||
|
**Completion Path Analysis:**
|
||||||
|
|
||||||
|
- ✅ All steps have clear continuation paths
|
||||||
|
- ✅ No orphaned steps or dead ends
|
||||||
|
- ⚠️ Minor issue: Steps 07 and 09 use non-standard menu patterns
|
||||||
|
|
||||||
|
**Sequential Logic:**
|
||||||
|
|
||||||
|
- ✅ Logical workflow creation progression maintained
|
||||||
|
- ✅ Dependencies properly structured
|
||||||
|
- ⚠️ Steps 05-06 could potentially be consolidated
|
||||||
|
|
||||||
|
### Goal Alignment
|
||||||
|
|
||||||
|
**Alignment Score:** 85%
|
||||||
|
|
||||||
|
**Stated Goal:** "Create structured, repeatable standalone workflows through collaborative conversation and step-by-step guidance"
|
||||||
|
|
||||||
|
**Actual Implementation:** Creates structured workflows with heavy emphasis on template compliance and systematic validation
|
||||||
|
|
||||||
|
**Gap Analysis:**
|
||||||
|
|
||||||
|
- Workflow emphasizes structure over creativity (aligned with spectrum choice)
|
||||||
|
- Template compliance heavier than user guidance (may need balance adjustment)
|
||||||
|
|
||||||
|
### Meta-Workflow Failure Analysis
|
||||||
|
|
||||||
|
**Issues That Should Have Been Prevented by create-workflow:**
|
||||||
|
|
||||||
|
1. Missing outputFile variables in all 9 steps (Critical)
|
||||||
|
2. Non-standard menu patterns in Steps 07 and 09 (Major)
|
||||||
|
3. Missing Task/Template/Data references across all steps (Major)
|
||||||
|
4. Path variable inconsistencies throughout workflow (Major)
|
||||||
|
5. Step naming violations for Steps 05-09 (Major)
|
||||||
|
6. Core Principles text deviation from template (Critical)
|
||||||
|
|
||||||
|
**Recommended Meta-Workflow Improvements:**
|
||||||
|
|
||||||
|
- Add frontmatter completeness validation during creation
|
||||||
|
- Implement path variable format checking
|
||||||
|
- Include menu pattern enforcement validation
|
||||||
|
- Add Intent vs Prescriptive spectrum selection in Step 01
|
||||||
|
- Validate template compliance before finalization
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
**Overall Compliance Status:** PARTIAL
|
||||||
|
**Critical Issues:** 17 - Must be fixed immediately
|
||||||
|
**Major Issues:** 36 - Significantly impacts quality/maintainability
|
||||||
|
**Minor Issues:** 27 - Standards compliance improvements
|
||||||
|
|
||||||
|
**Overall Compliance Score:** 68% based on template adherence
|
||||||
|
|
||||||
|
## Severity-Ranked Fix Recommendations
|
||||||
|
|
||||||
|
### IMMEDIATE - Critical (Must Fix for Functionality)
|
||||||
|
|
||||||
|
1. **Missing outputFile Variables** - Files: All 9 step files
|
||||||
|
- **Problem:** Critical frontmatter field missing from all steps
|
||||||
|
- **Template Reference:** step-template.md line 22
|
||||||
|
- **Fix:** Add `outputFile: '{output_folder}/workflow-plan-{project_name}.md'` to each step
|
||||||
|
- **Impact:** Workflow cannot produce output without this field
|
||||||
|
|
||||||
|
2. **Core Principles Deviation** - File: workflow.md
|
||||||
|
- **Problem:** Text modified from template standard
|
||||||
|
- **Template Reference:** workflow-template.md Core Principles section
|
||||||
|
- **Fix:** Replace with exact template wording
|
||||||
|
- **Impact:** Violates fundamental BMAD workflow architecture
|
||||||
|
|
||||||
|
3. **Non-Standard Menu Patterns** - Files: step-07-build.md, step-09-complete.md
|
||||||
|
- **Problem:** Custom menu formats instead of A/P/C pattern
|
||||||
|
- **Template Reference:** step-template.md lines 106-123
|
||||||
|
- **Fix:** Standardize to A/P/C menu pattern
|
||||||
|
- **Impact:** Breaks user experience consistency
|
||||||
|
|
||||||
|
### HIGH PRIORITY - Major (Significantly Impacts Quality)
|
||||||
|
|
||||||
|
1. **Missing Task/Template/Data References** - Files: All 9 step files
|
||||||
|
- **Problem:** Required frontmatter sections missing
|
||||||
|
- **Template Reference:** step-template.md lines 24-37
|
||||||
|
- **Fix:** Add all required reference sections with proper comments
|
||||||
|
- **Impact:** Violates template structure standards
|
||||||
|
|
||||||
|
2. **Step Naming Violations** - Files: steps 05-09
|
||||||
|
- **Problem:** Missing short descriptive names in step filenames
|
||||||
|
- **Template Reference:** step-template.md line 9
|
||||||
|
- **Fix:** Rename to include descriptive names (e.g., step-05-output-format.md)
|
||||||
|
- **Impact:** Inconsistent with BMAD naming conventions
|
||||||
|
|
||||||
|
3. **Path Variable Inconsistencies** - Files: All steps
|
||||||
|
- **Problem:** Mixed use of `{bmad_folder}` vs `.bmad`
|
||||||
|
- **Template Reference:** workflow-template.md path patterns
|
||||||
|
- **Fix:** Standardize to template variable patterns
|
||||||
|
- **Impact:** Installation flexibility and maintainability
|
||||||
|
|
||||||
|
### MEDIUM PRIORITY - Minor (Standards Compliance)
|
||||||
|
|
||||||
|
1. **Missing Section Titles** - Files: All steps
|
||||||
|
- **Problem:** Missing "CONTEXT BOUNDARIES" and "EXECUTION PROTOCOLS" titles
|
||||||
|
- **Template Reference:** step-template.md lines 75, 82
|
||||||
|
- **Fix:** Add missing section titles
|
||||||
|
- **Impact:** Template compliance
|
||||||
|
|
||||||
|
## Automated Fix Options
|
||||||
|
|
||||||
|
### Fixes That Can Be Applied Automatically
|
||||||
|
|
||||||
|
- Add outputFile variables to all step frontmatter
|
||||||
|
- Add missing section titles
|
||||||
|
- Standardize path variable usage
|
||||||
|
- Add Task/Template/Data reference section skeletons
|
||||||
|
|
||||||
|
### Fixes Requiring Manual Review
|
||||||
|
|
||||||
|
- Core Principles text restoration (needs exact template matching)
|
||||||
|
- Menu pattern standardization (custom logic may be intentional)
|
||||||
|
- Step renaming (requires file system changes and reference updates)
|
||||||
|
|
||||||
|
## Next Steps Recommendation
|
||||||
|
|
||||||
|
**Recommended Approach:**
|
||||||
|
|
||||||
|
1. Fix all Critical issues immediately (workflow may not function)
|
||||||
|
2. Address Major issues for reliability and maintainability
|
||||||
|
3. Implement Minor issues for full standards compliance
|
||||||
|
4. Update meta-workflows to prevent future violations
|
||||||
|
|
||||||
|
**Estimated Effort:**
|
||||||
|
|
||||||
|
- Critical fixes: 2-3 hours
|
||||||
|
- Major fixes: 4-6 hours
|
||||||
|
- Minor fixes: 1-2 hours
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Brainstorming Session
|
name: brainstorming-session
|
||||||
description: Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods
|
description: Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods
|
||||||
context_file: '' # Optional context file path for project-specific guidance
|
context_file: '' # Optional context file path for project-specific guidance
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Party Mode
|
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
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ workflow-folder/
|
||||||
Standard variables in step files:
|
Standard variables in step files:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/reference/workflows/[workflow-name]'
|
workflow_path: '{project-root}/{*bmad_folder*}/bmb/reference/workflows/[workflow-name]'
|
||||||
thisStepFile: '{workflow_path}/steps/step-[N]-[name].md'
|
thisStepFile: '{workflow_path}/steps/step-[N]-[name].md'
|
||||||
nextStepFile: '{workflow_path}/steps/step-[N+1]-[name].md'
|
nextStepFile: '{workflow_path}/steps/step-[N+1]-[name].md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ description: 'Initialize the [workflow-type] workflow by detecting continuation
|
||||||
|
|
||||||
<!-- Path Definitions -->
|
<!-- Path Definitions -->
|
||||||
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/[module-path]/workflows/[workflow-name]'
|
workflow*path: '{project-root}/{\_bmad_folder*}/[module-path]/workflows/[workflow-name]'
|
||||||
|
|
||||||
# File References (all use {variable} format in file)
|
# File References (all use {variable} format in file)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ description: 'Handle workflow continuation from previous session'
|
||||||
|
|
||||||
<!-- Path Definitions -->
|
<!-- Path Definitions -->
|
||||||
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/[module-path]/workflows/[workflow-name]'
|
workflow*path: '{project-root}/{\_bmad_folder*}/[module-path]/workflows/[workflow-name]'
|
||||||
|
|
||||||
# File References (all use {variable} format in file)
|
# File References (all use {variable} format in file)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ name: "step-{{stepNumber}}-{{stepName}}"
|
||||||
description: "{{stepDescription}}"
|
description: "{{stepDescription}}"
|
||||||
|
|
||||||
# Path Definitions
|
# Path Definitions
|
||||||
workflow_path: "{project-root}/{bmad_folder}/{{targetModule}}/workflows/{{workflowName}}"
|
workflow_path: "{project-root}/{*bmad_folder*}/{{targetModule}}/workflows/{{workflowName}}"
|
||||||
|
|
||||||
# File References
|
# File References
|
||||||
thisStepFile: "{workflow_path}/steps/step-{{stepNumber}}-{{stepName}}.md"
|
thisStepFile: "{workflow_path}/steps/step-{{stepNumber}}-{{stepName}}.md"
|
||||||
|
|
@ -15,9 +15,9 @@ workflowFile: "{workflow_path}/workflow.md"
|
||||||
outputFile: "{output_folder}/{{outputFileName}}-{project_name}.md"
|
outputFile: "{output_folder}/{{outputFileName}}-{project_name}.md"
|
||||||
{{/hasOutput}}
|
{{/hasOutput}}
|
||||||
|
|
||||||
# Task References
|
# Task References (list only if used in THIS step file instance and only the ones used, there might be others)
|
||||||
advancedElicitationTask: "{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml"
|
advancedElicitationTask: "{project-root}/{*bmad_folder*}/core/tasks/advanced-elicitation.xml"
|
||||||
partyModeWorkflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md"
|
partyModeWorkflow: "{project-root}/{*bmad_folder*}/core/workflows/party-mode/workflow.md"
|
||||||
|
|
||||||
{{#hasTemplates}}
|
{{#hasTemplates}}
|
||||||
# Template References
|
# Template References
|
||||||
|
|
@ -11,7 +11,7 @@ description: '[Brief description of what this step accomplishes]'
|
||||||
|
|
||||||
<!-- Path Definitions -->
|
<!-- Path Definitions -->
|
||||||
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/reference/workflows/[workflow-name]' # the folder the workflow.md file is in
|
workflow*path: '{project-root}/{\_bmad_folder*}/bmb/reference/workflows/[workflow-name]' # the folder the workflow.md file is in
|
||||||
|
|
||||||
# File References (all use {variable} format in file)
|
# File References (all use {variable} format in file)
|
||||||
|
|
||||||
|
|
@ -23,8 +23,8 @@ outputFile: '{output_folder}/[output-file-name]-{project_name}.md'
|
||||||
|
|
||||||
# Task References (IF THE workflow uses and it makes sense in this step to have these )
|
# Task References (IF THE workflow uses and it makes sense in this step to have these )
|
||||||
|
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
advancedElicitationTask: '{project-root}/{_bmad_folder_}/core/tasks/advanced-elicitation.xml'
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
partyModeWorkflow: '{project-root}/{_bmad_folder_}/core/workflows/party-mode/workflow.md'
|
||||||
|
|
||||||
# Template References (if this step uses a specific templates)
|
# Template References (if this step uses a specific templates)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ web_bundle: [true/false] # Set to true for inclusion in web bundle builds
|
||||||
|
|
||||||
### 1. Module Configuration Loading
|
### 1. Module Configuration Loading
|
||||||
|
|
||||||
Load and read full config from {project-root}/{bmad_folder}/[MODULE FOLDER]/config.yaml and resolve:
|
Load and read full config from {project-root}/{_bmad_folder_}/[MODULE FOLDER]/config.yaml and resolve:
|
||||||
|
|
||||||
- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`, [MODULE VARS]
|
- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`, [MODULE VARS]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ This uses **step-file architecture** for disciplined execution:
|
||||||
|
|
||||||
### 1. Configuration Loading
|
### 1. Configuration Loading
|
||||||
|
|
||||||
Load and read full config from {project-root}/{bmad_folder}/{{targetModule}}/config.yaml and resolve:
|
Load and read full config from {project-root}/{_bmad_folder_}/{{targetModule}}/config.yaml and resolve:
|
||||||
|
|
||||||
- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`
|
- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`
|
||||||
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Create Agent
|
name: create-agent
|
||||||
description: Interactive workflow to build BMAD Core compliant agents with optional brainstorming, persona development, and command structure
|
description: Interactive workflow to build BMAD Core compliant agents with optional brainstorming, persona development, and command structure
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
name: 'step-01-init'
|
name: 'step-01-init'
|
||||||
description: 'Initialize workflow creation session by detecting continuation state and setting up project'
|
description: 'Initialize workflow creation session by gathering project information and setting up unique workflow folder'
|
||||||
|
|
||||||
# Path Definitions
|
# Path Definitions
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
@ -9,24 +9,19 @@ workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
thisStepFile: '{workflow_path}/steps/step-01-init.md'
|
thisStepFile: '{workflow_path}/steps/step-01-init.md'
|
||||||
nextStepFile: '{workflow_path}/steps/step-02-gather.md'
|
nextStepFile: '{workflow_path}/steps/step-02-gather.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
|
|
||||||
# Output files for workflow creation process
|
# Output files for workflow creation process
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
# Task References
|
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
|
||||||
|
|
||||||
# Template References
|
# Template References
|
||||||
projectInfoTemplate: '{workflow_path}/templates/project-info.md'
|
# No workflow plan template needed - will create plan file directly
|
||||||
workflowPlanTemplate: '{workflow_path}/templates/workflow-plan.md'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 1: Workflow Creation Initialization
|
# Step 1: Workflow Creation Initialization
|
||||||
|
|
||||||
## STEP GOAL:
|
## STEP GOAL:
|
||||||
|
|
||||||
To initialize the workflow creation process by detecting continuation state, understanding project context, and preparing for collaborative workflow design.
|
To initialize the workflow creation process by understanding project context, determining a unique workflow name, and preparing for collaborative workflow design.
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
|
@ -50,7 +45,7 @@ To initialize the workflow creation process by detecting continuation state, und
|
||||||
- 🎯 Focus ONLY on initialization and project understanding
|
- 🎯 Focus ONLY on initialization and project understanding
|
||||||
- 🚫 FORBIDDEN to start designing workflow steps in this step
|
- 🚫 FORBIDDEN to start designing workflow steps in this step
|
||||||
- 💬 Ask questions conversationally to understand context
|
- 💬 Ask questions conversationally to understand context
|
||||||
- 🚪 DETECT existing workflow state and handle continuation properly
|
- 🚪 ENSURE unique workflow naming to avoid conflicts
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
## EXECUTION PROTOCOLS:
|
||||||
|
|
||||||
|
|
@ -68,35 +63,7 @@ To initialize the workflow creation process by detecting continuation state, und
|
||||||
|
|
||||||
## INITIALIZATION SEQUENCE:
|
## INITIALIZATION SEQUENCE:
|
||||||
|
|
||||||
### 1. Check for Existing Workflow Creation
|
### 1. Project Discovery
|
||||||
|
|
||||||
First, check if there's already a workflow folder with the proposed name:
|
|
||||||
|
|
||||||
- Look for folder at `{custom_workflow_location}/{new_workflow_name}/`
|
|
||||||
- If exists, check if it contains a workflow.md file
|
|
||||||
- If not exists, this is a fresh workflow creation session
|
|
||||||
|
|
||||||
### 2. Handle Continuation (If Workflow Exists)
|
|
||||||
|
|
||||||
If the workflow folder exists and has been worked on:
|
|
||||||
|
|
||||||
- **STOP here** and continue with step 4 (Welcome Back)
|
|
||||||
- Do not proceed with fresh initialization
|
|
||||||
- Let step 4 handle the continuation logic
|
|
||||||
|
|
||||||
### 3. Handle Completed Workflow
|
|
||||||
|
|
||||||
If the workflow folder exists AND is complete:
|
|
||||||
|
|
||||||
- Ask user: "I found an existing workflow '{new_workflow_name}' from [date]. Would you like to:
|
|
||||||
1. Create a new workflow with a different name
|
|
||||||
2. Review or modify the existing workflow"
|
|
||||||
- If option 1: Get a new workflow name
|
|
||||||
- If option 2: Load step 5 (Review)
|
|
||||||
|
|
||||||
### 4. Fresh Workflow Setup (If No Workflow)
|
|
||||||
|
|
||||||
#### A. Project Discovery
|
|
||||||
|
|
||||||
Welcome the user and understand their needs:
|
Welcome the user and understand their needs:
|
||||||
"Welcome! I'm excited to help you create a new workflow. Let's start by understanding what you want to build."
|
"Welcome! I'm excited to help you create a new workflow. Let's start by understanding what you want to build."
|
||||||
|
|
@ -107,33 +74,55 @@ Ask conversationally:
|
||||||
- What problem will this workflow solve?
|
- What problem will this workflow solve?
|
||||||
- Who will use this workflow?
|
- Who will use this workflow?
|
||||||
- What module will it belong to (bmb, bmm, cis, custom, stand-alone)?
|
- What module will it belong to (bmb, bmm, cis, custom, stand-alone)?
|
||||||
- What would you like to name this workflow folder? (kebab-case, e.g., "user-story-generator")
|
|
||||||
|
|
||||||
#### B. Create Workflow Plan Document
|
Also, Ask / suggest a workflow name / folder: (kebab-case, e.g., "user-story-generator")
|
||||||
|
|
||||||
Create the workflow plan document at `{workflowPlanFile}` using the workflow plan template `{workflowPlanTemplate}`.
|
### 2. Ensure Unique Workflow Name
|
||||||
Initialize frontmatter with:
|
|
||||||
|
|
||||||
```yaml
|
After getting the workflow name:
|
||||||
|
|
||||||
|
**Check for existing workflows:**
|
||||||
|
|
||||||
|
- Look for folder at `{custom_workflow_location}/{new_workflow_name}/`
|
||||||
|
- If it exists, inform the user and suggest or get from them a unique name or postfix
|
||||||
|
|
||||||
|
**Example alternatives:**
|
||||||
|
|
||||||
|
- Original: "user-story-generator"
|
||||||
|
- Alternatives: "user-story-creator", "user-story-generator-2025", "user-story-generator-enhanced"
|
||||||
|
|
||||||
|
**Loop until we have a unique name that doesn't conflict.**
|
||||||
|
|
||||||
|
### 3. Determine Target Location
|
||||||
|
|
||||||
|
Based on the module selection, confirm the target location:
|
||||||
|
|
||||||
|
- For bmb module: `{custom_workflow_location}` (defaults to `{bmad_folder}/custom/src/workflows`)
|
||||||
|
- For other modules: Check their install-config.yaml for custom workflow locations
|
||||||
|
- Confirm the exact folder path where the workflow will be created
|
||||||
|
- Store the confirmed path as `{targetWorkflowPath}`
|
||||||
|
|
||||||
|
### 4. Create Workflow Plan Document
|
||||||
|
|
||||||
|
Create the workflow plan document at `{workflowPlanFile}` with the following initial content:
|
||||||
|
|
||||||
|
```markdown
|
||||||
---
|
---
|
||||||
workflowName: ''
|
|
||||||
targetModule: ''
|
|
||||||
workflowType: ''
|
|
||||||
flowPattern: ''
|
|
||||||
date: [current date]
|
|
||||||
user_name: { user_name }
|
|
||||||
stepsCompleted: [1]
|
stepsCompleted: [1]
|
||||||
lastStep: 'init'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Workflow Creation Plan: {new_workflow_name}
|
||||||
|
|
||||||
|
## Initial Project Context
|
||||||
|
|
||||||
|
- **Module:** [module from user]
|
||||||
|
- **Target Location:** {targetWorkflowPath}
|
||||||
|
- **Created:** [current date]
|
||||||
```
|
```
|
||||||
|
|
||||||
This plan will capture all requirements and design details before building the actual workflow.
|
This plan will capture all requirements and design details before building the actual workflow.
|
||||||
|
|
||||||
### 5. Welcome Message
|
### 5. Present MENU OPTIONS
|
||||||
|
|
||||||
"Great! I'm ready to help you create a structured workflow using our step-based architecture. We'll work together to design a workflow that's collaborative, maintainable, and follows best practices."
|
|
||||||
|
|
||||||
### 6. Present MENU OPTIONS
|
|
||||||
|
|
||||||
Display: **Proceeding to requirements gathering...**
|
Display: **Proceeding to requirements gathering...**
|
||||||
|
|
||||||
|
|
@ -145,7 +134,7 @@ Display: **Proceeding to requirements gathering...**
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
- After setup completion, immediately load, read entire file, then execute `{workflow_path}/step-02-gather.md` to begin requirements gathering
|
- After setup completion and the workflow folder with the workflow plan file created already, only then immediately load, read entire file, and then execute `{workflow_path}/steps/step-02-gather.md` to begin requirements gathering
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,16 @@ workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
# File References
|
# File References
|
||||||
thisStepFile: '{workflow_path}/steps/step-02-gather.md'
|
thisStepFile: '{workflow_path}/steps/step-02-gather.md'
|
||||||
nextStepFile: '{workflow_path}/steps/step-03-tools-overview.md'
|
nextStepFile: '{workflow_path}/steps/step-03-tools-configuration.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
# Output files for workflow creation process
|
# Output files for workflow creation process
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
# Task References
|
# Task References
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
|
||||||
# Template References
|
# Template References
|
||||||
requirementsTemplate: '{workflow_path}/templates/requirements-section.md'
|
# No template needed - will append requirements directly to workflow plan
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 2: Requirements Gathering
|
# Step 2: Requirements Gathering
|
||||||
|
|
@ -156,25 +154,7 @@ Define what the workflow produces:
|
||||||
- Should outputs be saved automatically?
|
- Should outputs be saved automatically?
|
||||||
- What format should outputs be in?
|
- What format should outputs be in?
|
||||||
|
|
||||||
### 8. Target Location and Module Configuration
|
### 8. Success Criteria
|
||||||
|
|
||||||
Determine where the workflow will be created:
|
|
||||||
|
|
||||||
- For bmb module: Workflows go to `{custom_workflow_location}` (defaults to `{bmad_folder}/custom/src/workflows`)
|
|
||||||
- For other modules: Check their install-config.yaml for custom workflow locations
|
|
||||||
- Confirm the exact folder path where the workflow will be created
|
|
||||||
- Ensure the folder name doesn't conflict with existing workflows
|
|
||||||
|
|
||||||
### 9. Technical Constraints
|
|
||||||
|
|
||||||
Discuss technical requirements:
|
|
||||||
|
|
||||||
- Any specific tools or dependencies needed?
|
|
||||||
- Does it need to integrate with other systems?
|
|
||||||
- Any performance considerations?
|
|
||||||
- Should it be standalone or callable by other workflows?
|
|
||||||
|
|
||||||
### 10. Success Criteria
|
|
||||||
|
|
||||||
Define what makes the workflow successful:
|
Define what makes the workflow successful:
|
||||||
|
|
||||||
|
|
@ -183,13 +163,11 @@ Define what makes the workflow successful:
|
||||||
- Are there measurable outcomes?
|
- Are there measurable outcomes?
|
||||||
- What would make a user satisfied with the result?
|
- What would make a user satisfied with the result?
|
||||||
|
|
||||||
## STORE REQUIREMENTS:
|
#### STORE REQUIREMENTS:
|
||||||
|
|
||||||
After collecting all requirements, append them to {workflowPlanFile} using {requirementsTemplate}:
|
After collecting all requirements, append them to {workflowPlanFile} in a format that will be be used later to design in more detail and create the workflow structure.
|
||||||
|
|
||||||
This information will be used in the design phase to create the workflow structure.
|
### 9. Present MENU OPTIONS
|
||||||
|
|
||||||
### 8. Present MENU OPTIONS
|
|
||||||
|
|
||||||
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
||||||
|
|
||||||
|
|
@ -210,7 +188,7 @@ Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Conti
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
ONLY WHEN C is selected and requirements are stored, will you then load, read entire file, then execute {nextStepFile} to execute and begin workflow structure design step.
|
ONLY WHEN C is selected and requirements are stored in the output file, will you then load, read entire file, then execute {nextStepFile} to execute and begin workflow structure design step.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,250 @@
|
||||||
|
---
|
||||||
|
name: 'step-03-tools-configuration'
|
||||||
|
description: 'Configure all required tools (core, memory, external) and installation requirements in one comprehensive step'
|
||||||
|
|
||||||
|
# Path Definitions
|
||||||
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
|
# File References
|
||||||
|
thisStepFile: '{workflow_path}/steps/step-03-tools-configuration.md'
|
||||||
|
nextStepFile: '{workflow_path}/steps/step-04-plan-review.md'
|
||||||
|
|
||||||
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
|
# Documentation References
|
||||||
|
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
||||||
|
|
||||||
|
# Task References
|
||||||
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
# Template References
|
||||||
|
# No template needed - will append tools configuration directly to workflow plan
|
||||||
|
---
|
||||||
|
|
||||||
|
# Step 3: Tools Configuration
|
||||||
|
|
||||||
|
## STEP GOAL:
|
||||||
|
|
||||||
|
To comprehensively configure all tools needed for the workflow (core tools, memory, external tools) and determine installation requirements.
|
||||||
|
|
||||||
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
### Universal Rules:
|
||||||
|
|
||||||
|
- 🛑 NEVER generate content without user input
|
||||||
|
- 📖 CRITICAL: Read the complete step file before taking any action
|
||||||
|
- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read
|
||||||
|
- 📋 YOU ARE A FACILITATOR, not a content generator
|
||||||
|
|
||||||
|
### Role Reinforcement:
|
||||||
|
|
||||||
|
- ✅ You are a workflow architect and integration specialist
|
||||||
|
- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role
|
||||||
|
- ✅ We engage in collaborative dialogue, not command-response
|
||||||
|
- ✅ You bring expertise in BMAD tools and integration patterns
|
||||||
|
- ✅ User brings their workflow requirements and preferences
|
||||||
|
|
||||||
|
### Step-Specific Rules:
|
||||||
|
|
||||||
|
- 🎯 Focus ONLY on configuring tools based on workflow requirements
|
||||||
|
- 🚫 FORBIDDEN to skip tool categories - each affects workflow design
|
||||||
|
- 💬 Present options clearly, let user make informed choices
|
||||||
|
- 🚫 DO NOT hardcode tool descriptions - reference CSV
|
||||||
|
|
||||||
|
## EXECUTION PROTOCOLS:
|
||||||
|
|
||||||
|
- 🎯 Load tools dynamically from CSV, not hardcoded
|
||||||
|
- 💾 Document all tool choices in workflow plan
|
||||||
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3]` before loading next step
|
||||||
|
- 🚫 FORBIDDEN to load next step until user selects 'C'
|
||||||
|
|
||||||
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
|
- Requirements from step 2 inform tool selection
|
||||||
|
- All tool choices affect workflow design
|
||||||
|
- This is the ONLY tools configuration step
|
||||||
|
- Installation requirements affect implementation decisions
|
||||||
|
|
||||||
|
## TOOLS CONFIGURATION PROCESS:
|
||||||
|
|
||||||
|
### 1. Initialize Tools Configuration
|
||||||
|
|
||||||
|
"Configuring **Tools and Integrations**
|
||||||
|
|
||||||
|
Based on your workflow requirements, let's configure all the tools your workflow will need. This includes core BMAD tools, memory systems, and any external integrations."
|
||||||
|
|
||||||
|
### 2. Load and Present Available Tools
|
||||||
|
|
||||||
|
Load `{commonToolsCsv}` and present tools by category:
|
||||||
|
|
||||||
|
"**Available BMAD Tools and Integrations:**
|
||||||
|
|
||||||
|
**Core Tools (Always Available):**
|
||||||
|
|
||||||
|
- [List tools from CSV where propose='always', with descriptions]
|
||||||
|
|
||||||
|
**Optional Tools (Available When Needed):**
|
||||||
|
|
||||||
|
- [List tools from CSV where propose='example', with descriptions]
|
||||||
|
|
||||||
|
_Note: I'm loading these dynamically from our tools database to ensure you have the most current options._"
|
||||||
|
|
||||||
|
### 3. Configure Core BMAD Tools
|
||||||
|
|
||||||
|
"**Core BMAD Tools Configuration:**
|
||||||
|
|
||||||
|
These tools significantly enhance workflow quality and user experience:"
|
||||||
|
|
||||||
|
For each core tool from CSV (`propose='always'`):
|
||||||
|
|
||||||
|
1. **Party-Mode**
|
||||||
|
- Use case: [description from CSV]
|
||||||
|
- Where to integrate: [ask user for decision points, creative phases]
|
||||||
|
|
||||||
|
2. **Advanced Elicitation**
|
||||||
|
- Use case: [description from CSV]
|
||||||
|
- Where to integrate: [ask user for quality gates, review points]
|
||||||
|
|
||||||
|
3. **Brainstorming**
|
||||||
|
- Use case: [description from CSV]
|
||||||
|
- Where to integrate: [ask user for idea generation, innovation points]
|
||||||
|
|
||||||
|
### 4. Configure LLM Features
|
||||||
|
|
||||||
|
"**LLM Feature Integration:**
|
||||||
|
|
||||||
|
These capabilities enhance what your workflow can do:"
|
||||||
|
|
||||||
|
From CSV (`propose='always'` LLM features):
|
||||||
|
|
||||||
|
4. **Web-Browsing**
|
||||||
|
- Capability: [description from CSV]
|
||||||
|
- When needed: [ask user about real-time data needs]
|
||||||
|
|
||||||
|
5. **File I/O**
|
||||||
|
- Capability: [description from CSV]
|
||||||
|
- Operations: [ask user about file operations needed]
|
||||||
|
|
||||||
|
6. **Sub-Agents**
|
||||||
|
- Capability: [description from CSV]
|
||||||
|
- Use cases: [ask user about delegation needs]
|
||||||
|
|
||||||
|
7. **Sub-Processes**
|
||||||
|
- Capability: [description from CSV]
|
||||||
|
- Use cases: [ask user about parallel processing needs]
|
||||||
|
|
||||||
|
### 5. Configure Memory Systems
|
||||||
|
|
||||||
|
"**Memory and State Management:**
|
||||||
|
|
||||||
|
Determine if your workflow needs to maintain state between sessions:"
|
||||||
|
|
||||||
|
From CSV memory tools:
|
||||||
|
|
||||||
|
8. **Sidecar File**
|
||||||
|
- Use case: [description from CSV]
|
||||||
|
- Needed when: [ask about session continuity, agent initialization]
|
||||||
|
|
||||||
|
### 6. Configure External Tools (Optional)
|
||||||
|
|
||||||
|
"**External Integrations (Optional):**
|
||||||
|
|
||||||
|
These tools connect your workflow to external systems:"
|
||||||
|
|
||||||
|
From CSV (`propose='example'`):
|
||||||
|
|
||||||
|
- MCP integrations, database connections, APIs, etc.
|
||||||
|
- For each relevant tool: present description and ask if needed
|
||||||
|
- Note any installation requirements
|
||||||
|
|
||||||
|
### 7. Installation Requirements Assessment
|
||||||
|
|
||||||
|
"**Installation and Dependencies:**
|
||||||
|
|
||||||
|
Some tools require additional setup:"
|
||||||
|
|
||||||
|
Based on selected tools:
|
||||||
|
|
||||||
|
- Identify tools requiring installation
|
||||||
|
- Assess user's comfort level with installations
|
||||||
|
- Document installation requirements
|
||||||
|
|
||||||
|
### 8. Document Complete Tools Configuration
|
||||||
|
|
||||||
|
Append to {workflowPlanFile}:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Tools Configuration
|
||||||
|
|
||||||
|
### Core BMAD Tools
|
||||||
|
|
||||||
|
- **Party-Mode**: [included/excluded] - Integration points: [specific phases]
|
||||||
|
- **Advanced Elicitation**: [included/excluded] - Integration points: [specific phases]
|
||||||
|
- **Brainstorming**: [included/excluded] - Integration points: [specific phases]
|
||||||
|
|
||||||
|
### LLM Features
|
||||||
|
|
||||||
|
- **Web-Browsing**: [included/excluded] - Use cases: [specific needs]
|
||||||
|
- **File I/O**: [included/excluded] - Operations: [file management needs]
|
||||||
|
- **Sub-Agents**: [included/excluded] - Use cases: [delegation needs]
|
||||||
|
- **Sub-Processes**: [included/excluded] - Use cases: [parallel processing needs]
|
||||||
|
|
||||||
|
### Memory Systems
|
||||||
|
|
||||||
|
- **Sidecar File**: [included/excluded] - Purpose: [state management needs]
|
||||||
|
|
||||||
|
### External Integrations
|
||||||
|
|
||||||
|
- [List selected external tools with purposes]
|
||||||
|
|
||||||
|
### Installation Requirements
|
||||||
|
|
||||||
|
- [List tools requiring installation]
|
||||||
|
- **User Installation Preference**: [willing/not willing]
|
||||||
|
- **Alternative Options**: [if not installing certain tools]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. Present MENU OPTIONS
|
||||||
|
|
||||||
|
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
||||||
|
|
||||||
|
#### EXECUTION RULES:
|
||||||
|
|
||||||
|
- ALWAYS halt and wait for user input after presenting menu
|
||||||
|
- ONLY proceed to next step when user selects 'C'
|
||||||
|
- After other menu items execution, return to this menu
|
||||||
|
- User can chat or ask questions - always respond and then end with display again of the menu options
|
||||||
|
- Use menu handling logic section below
|
||||||
|
|
||||||
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
|
- IF A: Execute {advancedElicitationTask}
|
||||||
|
- IF P: Execute {partyModeWorkflow}
|
||||||
|
- IF C: Save tools configuration to {workflowPlanFile}, update frontmatter, then load, read entire file, then execute {nextStepFile}
|
||||||
|
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#9-present-menu-options)
|
||||||
|
|
||||||
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
|
ONLY WHEN C is selected and tools configuration is saved will you load {nextStepFile} to review the complete plan.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
||||||
|
|
||||||
|
### ✅ SUCCESS:
|
||||||
|
|
||||||
|
- All tool categories configured based on requirements
|
||||||
|
- User made informed choices for each tool
|
||||||
|
- Complete configuration documented in plan
|
||||||
|
- Installation requirements identified
|
||||||
|
- Ready to proceed to plan review
|
||||||
|
|
||||||
|
### ❌ SYSTEM FAILURE:
|
||||||
|
|
||||||
|
- Skipping tool categories
|
||||||
|
- Hardcoding tool descriptions instead of using CSV
|
||||||
|
- Not documenting user choices
|
||||||
|
- Proceeding without user confirmation
|
||||||
|
|
||||||
|
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
||||||
|
|
@ -1,127 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-03-tools-overview'
|
|
||||||
description: 'Present available tools from CSV and gather initial user requirements'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-03-tools-overview.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-04-core-tools.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 3: Tools Overview
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Load and present available tools from the CSV, then gather the user's general tool requirements for their workflow.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in BMAD tools and workflow optimization
|
|
||||||
- ✅ User brings their workflow requirements
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Load CSV and present tools dynamically
|
|
||||||
- 💾 Gather user's general tool requirements
|
|
||||||
- 📖 Document requirements in workflow plan
|
|
||||||
- 🚫 FORBIDDEN to proceed without user input
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize Tools Discussion
|
|
||||||
|
|
||||||
"Beginning **Tools Integration and Configuration**
|
|
||||||
|
|
||||||
Based on your workflow requirements, I'll help identify the best tools and integrations. Let me first load the available tools from our reference."
|
|
||||||
|
|
||||||
### 2. Load and Present Available Tools
|
|
||||||
|
|
||||||
Load `{commonToolsCsv}` and present tools organized by type:
|
|
||||||
|
|
||||||
"**Available BMAD Tools and Integrations:**
|
|
||||||
|
|
||||||
**Always Available (Recommended for Most Workflows):**
|
|
||||||
|
|
||||||
- [List tools from CSV where propose='always', organized by type]
|
|
||||||
|
|
||||||
**Example Tools (Available When Needed):**
|
|
||||||
|
|
||||||
- [List tools from CSV where propose='example', organized by type]
|
|
||||||
|
|
||||||
\*\*Tools requiring installation will be noted."
|
|
||||||
|
|
||||||
### 3. Gather Initial Requirements
|
|
||||||
|
|
||||||
"**Your Tool Requirements:**
|
|
||||||
|
|
||||||
Based on your workflow type and goals, what tools do you anticipate needing?
|
|
||||||
|
|
||||||
1. **Core BMAD Tools:** Do you want collaborative idea generation, critical evaluation, or brainstorming capabilities?
|
|
||||||
2. **LLM Features:** Will you need web access, file management, sub-agents, or parallel processing?
|
|
||||||
3. **Memory:** Does your workflow need persistent state across sessions?
|
|
||||||
4. **External Tools:** Will you need MCP integrations like documentation access, browser automation, or database connections?
|
|
||||||
|
|
||||||
**Initial Tool Preferences:** [gather user's general requirements]"
|
|
||||||
|
|
||||||
### 4. Document Requirements
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Tool Requirements Summary
|
|
||||||
|
|
||||||
**Initial Tool Preferences:**
|
|
||||||
|
|
||||||
- Core BMAD Tools: [user selections]
|
|
||||||
- LLM Features: [user selections]
|
|
||||||
- Memory Requirements: [user selections]
|
|
||||||
- External Tools: [user selections]
|
|
||||||
**Installation Willingness:** [user comfort level with installing tools]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to Core Tools [M] Modify Requirements
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Append tools overview to {workflowPlanFile}, update frontmatter, then load {nextStepFile}
|
|
||||||
- IF M: Refine requirements discussion
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and requirements are documented will you load {nextStepFile} to configure core tools.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- CSV loaded and tools presented clearly
|
|
||||||
- User's initial tool requirements gathered
|
|
||||||
- Requirements documented in workflow plan
|
|
||||||
- User ready to proceed to detailed configuration
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Not loading tools from CSV
|
|
||||||
- Duplicating CSV content in step file
|
|
||||||
- Proceeding without user requirements input
|
|
||||||
|
|
@ -1,145 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-04-core-tools'
|
|
||||||
description: 'Configure always-available core tools and their integration points'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-04-core-tools.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-05-memory-requirements.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 4: Core Tools Configuration
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Configure always-available core tools (party-mode, advanced-elicitation, brainstorming, and LLM features) with specific integration points in the workflow.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in BMAD tools and integration patterns
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Load core tools from CSV and configure integration points
|
|
||||||
- 💾 Confirm user choices for each core tool
|
|
||||||
- 📖 Document configuration in workflow plan
|
|
||||||
- 🚫 FORBIDDEN to proceed without user confirmation
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize Core Tools Configuration
|
|
||||||
|
|
||||||
"Configuring **Core BMAD Tools and Features**
|
|
||||||
|
|
||||||
These core tools significantly enhance workflow quality. Let's configure each one for optimal integration into your workflow."
|
|
||||||
|
|
||||||
### 2. Present Core Tools from CSV
|
|
||||||
|
|
||||||
Load `{commonToolsCsv}` and filter for `propose='always'`:
|
|
||||||
|
|
||||||
"**Core Tools (Always Available):**
|
|
||||||
|
|
||||||
**Workflows & Tasks:**
|
|
||||||
|
|
||||||
- **Party-Mode:** [description from CSV]
|
|
||||||
- **Advanced Elicitation:** [description from CSV]
|
|
||||||
- **Brainstorming:** [description from CSV]
|
|
||||||
|
|
||||||
**LLM Tool Features:**
|
|
||||||
|
|
||||||
- **Web-Browsing:** [description from CSV]
|
|
||||||
- **File I/O:** [description from CSV]
|
|
||||||
- **Sub-Agents:** [description from CSV]
|
|
||||||
- **Sub-Processes:** [description from CSV]
|
|
||||||
|
|
||||||
**Tool-Memory:**
|
|
||||||
|
|
||||||
- **Sidecar File:** [description from CSV]"
|
|
||||||
|
|
||||||
### 3. Configure Integration Points
|
|
||||||
|
|
||||||
For each tool, ask about integration:
|
|
||||||
|
|
||||||
"**Core Tools Integration:**
|
|
||||||
|
|
||||||
**Workflows & Tasks:**
|
|
||||||
|
|
||||||
1. **Party-Mode** - Where should collaborative AI sessions be offered? [decision points, creative phases]
|
|
||||||
2. **Advanced Elicitation** - Where should critical evaluation checkpoints be placed? [after content creation, quality gates]
|
|
||||||
3. **Brainstorming** - Where should creative ideation be integrated? [idea generation phases, innovation points]
|
|
||||||
|
|
||||||
**LLM Features:** 4. **Web-Browsing** - When is current information needed? [real-time data, current events] 5. **File I/O** - What document operations are required? [file creation, data management] 6. **Sub-Agents** - Where would specialized delegation help? [complex tasks, parallel processing] 7. **Sub-Processes** - Where would parallel processing improve performance? [long operations, resource optimization]
|
|
||||||
|
|
||||||
**Tool-Memory:** 8. **Sidecar File** - Does your workflow need persistent state? [session continuity, agent initialization]"
|
|
||||||
|
|
||||||
### 4. Document Core Tools Configuration
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Core Tools Configuration
|
|
||||||
|
|
||||||
### Workflows & Tasks
|
|
||||||
|
|
||||||
**Party-Mode:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
**Advanced Elicitation:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
**Brainstorming:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
|
|
||||||
### LLM Tool Features
|
|
||||||
|
|
||||||
**Web-Browsing:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
**File I/O:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
**Sub-Agents:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
**Sub-Processes:** [included/excluded] - Integration points: [specific phases]
|
|
||||||
|
|
||||||
### Tool-Memory
|
|
||||||
|
|
||||||
**Sidecar File:** [included/excluded] - Use case: [history tracking, agent initialization]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to Memory Configuration [M] Modify Core Tools
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Append core tools configuration to {workflowPlanFile}, update frontmatter, then load {nextStepFile}
|
|
||||||
- IF M: Return to tool configuration
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and core tools are documented will you load {nextStepFile} to configure memory requirements.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- Core tools presented using CSV descriptions
|
|
||||||
- Integration points configured for each selected tool
|
|
||||||
- Configuration documented in workflow plan
|
|
||||||
- User understands how tools enhance workflow
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Duplicating CSV content instead of referencing it
|
|
||||||
- Not confirming integration points with user
|
|
||||||
- Proceeding without user confirmation of configuration
|
|
||||||
|
|
@ -0,0 +1,216 @@
|
||||||
|
---
|
||||||
|
name: 'step-04-plan-review'
|
||||||
|
description: 'Review complete workflow plan (requirements + tools) and get user approval before design'
|
||||||
|
|
||||||
|
# Path Definitions
|
||||||
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
|
# File References
|
||||||
|
thisStepFile: '{workflow_path}/steps/step-04-plan-review.md'
|
||||||
|
nextStepFormDesign: '{workflow_path}/steps/step-05-output-format-design.md'
|
||||||
|
nextStepDesign: '{workflow_path}/steps/step-06-design.md'
|
||||||
|
|
||||||
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
|
# Task References
|
||||||
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
# Template References
|
||||||
|
# No template needed - will append review summary directly to workflow plan
|
||||||
|
---
|
||||||
|
|
||||||
|
# Step 4: Plan Review and Approval
|
||||||
|
|
||||||
|
## STEP GOAL:
|
||||||
|
|
||||||
|
To present the complete workflow plan (requirements and tools configuration) for user review and approval before proceeding to design.
|
||||||
|
|
||||||
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
### Universal Rules:
|
||||||
|
|
||||||
|
- 🛑 NEVER generate content without user input
|
||||||
|
- 📖 CRITICAL: Read the complete step file before taking any action
|
||||||
|
- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read
|
||||||
|
- 📋 YOU ARE A FACILITATOR, not a content generator
|
||||||
|
|
||||||
|
### Role Reinforcement:
|
||||||
|
|
||||||
|
- ✅ You are a workflow architect and systems designer
|
||||||
|
- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role
|
||||||
|
- ✅ We engage in collaborative dialogue, not command-response
|
||||||
|
- ✅ You bring expertise in workflow design review and quality assurance
|
||||||
|
- ✅ User brings their specific requirements and approval authority
|
||||||
|
|
||||||
|
### Step-Specific Rules:
|
||||||
|
|
||||||
|
- 🎯 Focus ONLY on reviewing and refining the plan
|
||||||
|
- 🚫 FORBIDDEN to start designing workflow steps in this step
|
||||||
|
- 💬 Present plan clearly and solicit feedback
|
||||||
|
- 🚫 DO NOT proceed to design without user approval
|
||||||
|
|
||||||
|
## EXECUTION PROTOCOLS:
|
||||||
|
|
||||||
|
- 🎯 Present complete plan summary from {workflowPlanFile}
|
||||||
|
- 💾 Capture any modifications or refinements
|
||||||
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4]` before loading next step
|
||||||
|
- 🚫 FORBIDDEN to load next step until user approves plan
|
||||||
|
|
||||||
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
|
- All requirements from step 2 are available
|
||||||
|
- Tools configuration from step 3 is complete
|
||||||
|
- Focus ONLY on review and approval
|
||||||
|
- This is the final check before design phase
|
||||||
|
|
||||||
|
## PLAN REVIEW PROCESS:
|
||||||
|
|
||||||
|
### 1. Initialize Plan Review
|
||||||
|
|
||||||
|
"**Workflow Plan Review**
|
||||||
|
|
||||||
|
We've gathered all requirements and configured tools for your workflow. Let's review the complete plan to ensure it meets your needs before we start designing the workflow structure."
|
||||||
|
|
||||||
|
### 2. Present Complete Plan Summary
|
||||||
|
|
||||||
|
Load and present from {workflowPlanFile}:
|
||||||
|
|
||||||
|
"**Complete Workflow Plan: {new_workflow_name}**
|
||||||
|
|
||||||
|
**1. Project Overview:**
|
||||||
|
|
||||||
|
- [Present workflow purpose, user type, module from plan]
|
||||||
|
|
||||||
|
**2. Workflow Requirements:**
|
||||||
|
|
||||||
|
- [Present all gathered requirements]
|
||||||
|
|
||||||
|
**3. Tools Configuration:**
|
||||||
|
|
||||||
|
- [Present selected tools and integration points]
|
||||||
|
|
||||||
|
**4. Technical Specifications:**
|
||||||
|
|
||||||
|
- [Present technical constraints and requirements]
|
||||||
|
|
||||||
|
**5. Success Criteria:**
|
||||||
|
|
||||||
|
- [Present success metrics from requirements]"
|
||||||
|
|
||||||
|
### 3. Detailed Review by Category
|
||||||
|
|
||||||
|
"**Detailed Review:**
|
||||||
|
|
||||||
|
**A. Workflow Scope and Purpose**
|
||||||
|
|
||||||
|
- Is the workflow goal clearly defined?
|
||||||
|
- Are the boundaries appropriate?
|
||||||
|
- Any missing requirements?
|
||||||
|
|
||||||
|
**B. User Interaction Design**
|
||||||
|
|
||||||
|
- Does the interaction style match your needs?
|
||||||
|
- Are collaboration points clear?
|
||||||
|
- Any adjustments needed?
|
||||||
|
|
||||||
|
**C. Tools Integration**
|
||||||
|
|
||||||
|
- Are selected tools appropriate for your workflow?
|
||||||
|
- Are integration points logical?
|
||||||
|
- Any additional tools needed?
|
||||||
|
|
||||||
|
**D. Technical Feasibility**
|
||||||
|
|
||||||
|
- Are all requirements achievable?
|
||||||
|
- Any technical constraints missing?
|
||||||
|
- Installation requirements acceptable?"
|
||||||
|
|
||||||
|
### 4. Collect Feedback and Refinements
|
||||||
|
|
||||||
|
"**Review Feedback:**
|
||||||
|
|
||||||
|
Please review each section and provide feedback:
|
||||||
|
|
||||||
|
1. What looks good and should stay as-is?
|
||||||
|
2. What needs modification or refinement?
|
||||||
|
3. What's missing that should be added?
|
||||||
|
4. Anything unclear or confusing?"
|
||||||
|
|
||||||
|
For each feedback item:
|
||||||
|
|
||||||
|
- Document the requested change
|
||||||
|
- Discuss implications on workflow design
|
||||||
|
- Confirm the refinement with user
|
||||||
|
|
||||||
|
### 5. Update Plan with Refinements
|
||||||
|
|
||||||
|
Update {workflowPlanFile} with any approved changes:
|
||||||
|
|
||||||
|
- Modify requirements section as needed
|
||||||
|
- Update tools configuration if changed
|
||||||
|
- Add any missing specifications
|
||||||
|
- Ensure all changes are clearly documented
|
||||||
|
|
||||||
|
### 6. Output Document Check
|
||||||
|
|
||||||
|
"**Output Document Check:**
|
||||||
|
|
||||||
|
Before we proceed to design, does your workflow produce any output documents or files?
|
||||||
|
|
||||||
|
Based on your requirements:
|
||||||
|
|
||||||
|
- [Analyze if workflow produces documents/files]
|
||||||
|
- Consider: Does it create reports, forms, stories, or any persistent output?"
|
||||||
|
|
||||||
|
**If NO:**
|
||||||
|
"Great! Your workflow focuses on actions/interactions without document output. We'll proceed directly to designing the workflow steps."
|
||||||
|
|
||||||
|
**If YES:**
|
||||||
|
"Perfect! Let's design your output format to ensure your workflow produces exactly what you need."
|
||||||
|
|
||||||
|
### 7. Present MENU OPTIONS
|
||||||
|
|
||||||
|
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Design
|
||||||
|
|
||||||
|
#### EXECUTION RULES:
|
||||||
|
|
||||||
|
- ALWAYS halt and wait for user input after presenting menu
|
||||||
|
- ONLY proceed to next step when user selects 'C'
|
||||||
|
- After other menu items execution, return to this menu
|
||||||
|
- User can chat or ask questions - always respond and then end with display again of the menu options
|
||||||
|
- Use menu handling logic section below
|
||||||
|
|
||||||
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
|
- IF A: Execute {advancedElicitationTask}
|
||||||
|
- IF P: Execute {partyModeWorkflow}
|
||||||
|
- IF C: Check if workflow produces documents:
|
||||||
|
- If YES: Update frontmatter, then load nextStepFormDesign
|
||||||
|
- If NO: Update frontmatter, then load nextStepDesign
|
||||||
|
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#7-present-menu-options)
|
||||||
|
|
||||||
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
|
ONLY WHEN C is selected AND the user has explicitly approved the plan and the plan document is updated as needed, then you load either {nextStepFormDesign} or {nextStepDesign}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
||||||
|
|
||||||
|
### ✅ SUCCESS:
|
||||||
|
|
||||||
|
- Complete plan presented clearly from {workflowPlanFile}
|
||||||
|
- User feedback collected and documented
|
||||||
|
- All refinements incorporated
|
||||||
|
- User explicitly approves the plan
|
||||||
|
- Plan ready for design phase
|
||||||
|
|
||||||
|
### ❌ SYSTEM FAILURE:
|
||||||
|
|
||||||
|
- Not loading plan from {workflowPlanFile}
|
||||||
|
- Skipping review categories
|
||||||
|
- Proceeding without user approval
|
||||||
|
- Not documenting refinements
|
||||||
|
|
||||||
|
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
||||||
|
|
@ -1,136 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-05-memory-requirements'
|
|
||||||
description: 'Assess memory requirements and configure memory implementation'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-05-memory-requirements.md'
|
|
||||||
nextStepFile: '{project_path}/steps/step-06-external-tools.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 5: Memory Requirements Assessment
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Assess whether the workflow needs memory capabilities and configure appropriate memory implementation.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in memory implementation patterns
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Assess memory needs based on workflow requirements
|
|
||||||
- 💾 Present memory options from CSV
|
|
||||||
- 📖 Configure memory implementation if needed
|
|
||||||
- 🚫 FORBIDDEN to push memory when not required
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize Memory Assessment
|
|
||||||
|
|
||||||
"Assessing **Memory Requirements**
|
|
||||||
|
|
||||||
Most workflows complete their task and exit without needing persistent memory. However, some specialized workflows benefit from session-to-session continuity."
|
|
||||||
|
|
||||||
### 2. Present Memory Options from CSV
|
|
||||||
|
|
||||||
Load `{commonToolsCsv}` and filter for `type='tool-memory'`:
|
|
||||||
|
|
||||||
"**Memory Options:**
|
|
||||||
|
|
||||||
**Available Memory Types:**
|
|
||||||
|
|
||||||
- [List tool-memory options from CSV with descriptions]
|
|
||||||
|
|
||||||
**Key Question:** Does your workflow need to maintain state across multiple sessions?"
|
|
||||||
|
|
||||||
### 3. Memory Requirements Analysis
|
|
||||||
|
|
||||||
"**Memory Assessment Questions:**
|
|
||||||
|
|
||||||
1. **Session Continuity:** Will your workflow need to resume where it left off?
|
|
||||||
2. **Agent Initialization:** Will your workflow initialize agents with previous context?
|
|
||||||
3. **Pattern Recognition:** Would semantic search of past experiences be valuable?
|
|
||||||
4. **Self-Improvement:** Will your workflow learn from previous executions?
|
|
||||||
|
|
||||||
**Most workflows:** No memory needed (they complete and exit)
|
|
||||||
**Some workflows:** Sidecar files for history tracking
|
|
||||||
**Advanced workflows:** Vector database for semantic learning"
|
|
||||||
|
|
||||||
### 4. Configure Memory (If Needed)
|
|
||||||
|
|
||||||
If user selects memory:
|
|
||||||
|
|
||||||
"**Memory Configuration:**
|
|
||||||
|
|
||||||
Based on your needs, which memory type?
|
|
||||||
|
|
||||||
1. **Sidecar File** - History tracking and session continuity
|
|
||||||
2. **Vector Database** - Semantic search and pattern recognition
|
|
||||||
3. **Both** - Comprehensive memory capabilities
|
|
||||||
4. **None** - No persistent memory required
|
|
||||||
|
|
||||||
**Memory Management:** Privacy controls, cleanup strategies, access patterns"
|
|
||||||
|
|
||||||
### 5. Document Memory Configuration
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Memory Configuration
|
|
||||||
|
|
||||||
### Memory Requirements
|
|
||||||
|
|
||||||
**Sidecar File:** [selected/not selected] - Use case: [specific implementation]
|
|
||||||
**Vector Database:** [selected/not selected] - Use case: [specific implementation]
|
|
||||||
**Memory Management:** [cleanup, privacy, access patterns]
|
|
||||||
**Integration:** [how memory enhances workflow continuity]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to External Tools [M] Modify Memory
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Append memory configuration to {workflowPlanFile}, update frontmatter, then load {nextStepFile}
|
|
||||||
- IF M: Refine memory requirements
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and memory is documented will you load {nextStepFile} to configure external tools.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- Memory options presented from CSV
|
|
||||||
- User's memory needs properly assessed
|
|
||||||
- Configuration documented appropriately
|
|
||||||
- No memory pushed when not needed
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Assuming memory is needed without assessment
|
|
||||||
- Duplicating CSV descriptions in step file
|
|
||||||
- Not documenting memory management strategies
|
|
||||||
|
|
@ -0,0 +1,289 @@
|
||||||
|
---
|
||||||
|
name: 'step-05-output-format-design'
|
||||||
|
description: 'Design the output format for workflows that produce documents or files'
|
||||||
|
|
||||||
|
# Path Definitions
|
||||||
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
|
# File References
|
||||||
|
thisStepFile: '{workflow_path}/steps/step-05-output-format-design.md'
|
||||||
|
nextStepFile: '{workflow_path}/steps/step-06-design.md'
|
||||||
|
|
||||||
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
|
# Task References
|
||||||
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Step 5: Output Format Design
|
||||||
|
|
||||||
|
## STEP GOAL:
|
||||||
|
|
||||||
|
To design and document the output format for workflows that produce documents or files, determining whether they need strict templates or flexible formatting.
|
||||||
|
|
||||||
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
### Universal Rules:
|
||||||
|
|
||||||
|
- 🛑 NEVER generate content without user input
|
||||||
|
- 📖 CRITICAL: Read the complete step file before taking any action
|
||||||
|
- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read
|
||||||
|
- 📋 YOU ARE A FACILITATOR, not a content generator
|
||||||
|
|
||||||
|
### Role Reinforcement:
|
||||||
|
|
||||||
|
- ✅ You are a workflow architect and output format specialist
|
||||||
|
- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role
|
||||||
|
- ✅ We engage in collaborative dialogue, not command-response
|
||||||
|
- ✅ You bring expertise in document design and template creation
|
||||||
|
- ✅ User brings their specific output requirements and preferences
|
||||||
|
|
||||||
|
### Step-Specific Rules:
|
||||||
|
|
||||||
|
- 🎯 Focus ONLY on output format design
|
||||||
|
- 🚫 FORBIDDEN to design workflow steps in this step
|
||||||
|
- 💬 Help user understand the format spectrum
|
||||||
|
- 🚫 DO NOT proceed without clear format requirements
|
||||||
|
|
||||||
|
## EXECUTION PROTOCOLS:
|
||||||
|
|
||||||
|
- 🎯 Guide user through format spectrum with examples
|
||||||
|
- 💾 Document format decisions in workflow plan
|
||||||
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5]` before loading next step
|
||||||
|
- 🚫 FORBIDDEN to load next step until user selects 'C'
|
||||||
|
|
||||||
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
|
- Approved plan from step 4 is available
|
||||||
|
- Focus ONLY on output document formatting
|
||||||
|
- Skip this step if workflow produces no documents
|
||||||
|
- This step only runs when documents need structure
|
||||||
|
|
||||||
|
## OUTPUT FORMAT DESIGN PROCESS:
|
||||||
|
|
||||||
|
### 1. Initialize Output Format Discussion
|
||||||
|
|
||||||
|
"**Designing Your Output Format**
|
||||||
|
|
||||||
|
Based on your approved plan, your workflow will produce output documents. Let's design how these outputs should be formatted."
|
||||||
|
|
||||||
|
### 2. Present the Format Spectrum
|
||||||
|
|
||||||
|
"**Output Format Spectrum - Where does your workflow fit?**
|
||||||
|
|
||||||
|
**Strictly Structured Examples:**
|
||||||
|
|
||||||
|
- Government forms - exact fields, precise positions
|
||||||
|
- Legal documents - must follow specific templates
|
||||||
|
- Technical specifications - required sections, specific formats
|
||||||
|
- Compliance reports - mandatory fields, validation rules
|
||||||
|
|
||||||
|
**Structured Examples:**
|
||||||
|
|
||||||
|
- Project reports - required sections, flexible content
|
||||||
|
- Business proposals - consistent format, customizable sections
|
||||||
|
- Technical documentation - standard structure, adaptable content
|
||||||
|
- Research papers - IMRAD format, discipline-specific variations
|
||||||
|
|
||||||
|
**Semi-structured Examples:**
|
||||||
|
|
||||||
|
- Character sheets (D&D) - core stats + flexible background
|
||||||
|
- Lesson plans - required components, flexible delivery
|
||||||
|
- Recipes - ingredients/method format, flexible descriptions
|
||||||
|
- Meeting minutes - agenda/attendees/actions, flexible details
|
||||||
|
|
||||||
|
**Free-form Examples:**
|
||||||
|
|
||||||
|
- Creative stories - narrative flow, minimal structure
|
||||||
|
- Blog posts - title/body, organic organization
|
||||||
|
- Personal journals - date/entry, free expression
|
||||||
|
- Brainstorming outputs - ideas, flexible organization"
|
||||||
|
|
||||||
|
### 3. Determine Format Type
|
||||||
|
|
||||||
|
"**Which format type best fits your workflow?**
|
||||||
|
|
||||||
|
1. **Strict Template** - Must follow exact format with specific fields
|
||||||
|
2. **Structured** - Required sections but flexible within each
|
||||||
|
3. **Semi-structured** - Core sections plus optional additions
|
||||||
|
4. **Free-form** - Content-driven with minimal structure
|
||||||
|
|
||||||
|
Please choose 1-4:"
|
||||||
|
|
||||||
|
### 4. Deep Dive Based on Choice
|
||||||
|
|
||||||
|
#### IF Strict Template (Choice 1):
|
||||||
|
|
||||||
|
"**Strict Template Design**
|
||||||
|
|
||||||
|
You need exact formatting. Let's define your requirements:
|
||||||
|
|
||||||
|
**Template Source Options:**
|
||||||
|
A. Upload existing template/image to follow
|
||||||
|
B. Create new template from scratch
|
||||||
|
C. Use standard form (e.g., government, industry)
|
||||||
|
D. AI proposes template based on your needs
|
||||||
|
|
||||||
|
**Template Requirements:**
|
||||||
|
|
||||||
|
- Exact field names and positions
|
||||||
|
- Required vs optional fields
|
||||||
|
- Validation rules
|
||||||
|
- File format (PDF, DOCX, etc.)
|
||||||
|
- Any legal/compliance considerations"
|
||||||
|
|
||||||
|
#### IF Structured (Choice 2):
|
||||||
|
|
||||||
|
"**Structured Document Design**
|
||||||
|
|
||||||
|
You need consistent sections with flexibility:
|
||||||
|
|
||||||
|
**Section Definition:**
|
||||||
|
|
||||||
|
- What sections are required?
|
||||||
|
- Any optional sections?
|
||||||
|
- Section ordering rules?
|
||||||
|
- Cross-document consistency needs?
|
||||||
|
|
||||||
|
**Format Guidelines:**
|
||||||
|
|
||||||
|
- Any formatting standards (APA, MLA, corporate)?
|
||||||
|
- Section header styles?
|
||||||
|
- Content organization principles?"
|
||||||
|
|
||||||
|
#### IF Semi-structured (Choice 3):
|
||||||
|
|
||||||
|
"**Semi-structured Design**
|
||||||
|
|
||||||
|
Core sections with flexibility:
|
||||||
|
|
||||||
|
**Core Components:**
|
||||||
|
|
||||||
|
- What information must always appear?
|
||||||
|
- Which parts can vary?
|
||||||
|
- Any organizational preferences?
|
||||||
|
|
||||||
|
**Polishing Options:**
|
||||||
|
|
||||||
|
- Would you like automatic TOC generation?
|
||||||
|
- Summary section at the end?
|
||||||
|
- Consistent formatting options?"
|
||||||
|
|
||||||
|
#### IF Free-form (Choice 4):
|
||||||
|
|
||||||
|
"**Free-form Content Design**
|
||||||
|
|
||||||
|
Focus on content with minimal structure:
|
||||||
|
|
||||||
|
**Organization Needs:**
|
||||||
|
|
||||||
|
- Basic headers for readability?
|
||||||
|
- Date/title information?
|
||||||
|
- Any categorization needs?
|
||||||
|
|
||||||
|
**Final Polish Options:**
|
||||||
|
|
||||||
|
- Auto-generated summary?
|
||||||
|
- TOC based on content?
|
||||||
|
- Formatting for readability?"
|
||||||
|
|
||||||
|
### 5. Template Creation (if applicable)
|
||||||
|
|
||||||
|
For Strict/Structured workflows:
|
||||||
|
|
||||||
|
"**Template Creation Approach:**
|
||||||
|
|
||||||
|
A. **Design Together** - We'll create the template step by step
|
||||||
|
B. **AI Proposes** - I'll suggest a structure based on your needs
|
||||||
|
C. **Import Existing** - Use/upload your existing template
|
||||||
|
|
||||||
|
Which approach would you prefer?"
|
||||||
|
|
||||||
|
If A or B:
|
||||||
|
|
||||||
|
- Design/create template sections
|
||||||
|
- Define placeholders
|
||||||
|
- Specify field types and validation
|
||||||
|
- Document template structure in plan
|
||||||
|
|
||||||
|
If C:
|
||||||
|
|
||||||
|
- Request file upload or detailed description
|
||||||
|
- Analyze template structure
|
||||||
|
- Document requirements
|
||||||
|
|
||||||
|
### 6. Document Format Decisions
|
||||||
|
|
||||||
|
Append to {workflowPlanFile}:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Output Format Design
|
||||||
|
|
||||||
|
**Format Type**: [Strict/Structured/Semi-structured/Free-form]
|
||||||
|
|
||||||
|
**Output Requirements**:
|
||||||
|
|
||||||
|
- Document type: [report/form/story/etc]
|
||||||
|
- File format: [PDF/MD/DOCX/etc]
|
||||||
|
- Frequency: [single/batch/continuous]
|
||||||
|
|
||||||
|
**Structure Specifications**:
|
||||||
|
[Detailed structure based on format type]
|
||||||
|
|
||||||
|
**Template Information**:
|
||||||
|
|
||||||
|
- Template source: [created/imported/standard]
|
||||||
|
- Template file: [path if applicable]
|
||||||
|
- Placeholders: [list if applicable]
|
||||||
|
|
||||||
|
**Special Considerations**:
|
||||||
|
|
||||||
|
- Legal/compliance requirements
|
||||||
|
- Validation needs
|
||||||
|
- Accessibility requirements
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Present MENU OPTIONS
|
||||||
|
|
||||||
|
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
||||||
|
|
||||||
|
#### EXECUTION RULES:
|
||||||
|
|
||||||
|
- ALWAYS halt and wait for user input after presenting menu
|
||||||
|
- ONLY proceed to next step when user selects 'C'
|
||||||
|
- After other menu items execution, return to this menu
|
||||||
|
- User can chat or ask questions - always respond and then end with display again of the menu options
|
||||||
|
- Use menu handling logic section below
|
||||||
|
|
||||||
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
|
- IF A: Execute {advancedElicitationTask}
|
||||||
|
- IF P: Execute {partyModeWorkflow}
|
||||||
|
- IF C: Save output format design to {workflowPlanFile}, update frontmatter, then load, read entire file, then execute {nextStepFile}
|
||||||
|
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#7-present-menu-options)
|
||||||
|
|
||||||
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
|
ONLY WHEN C is selected and output format is documented will you load {nextStepFile} to begin workflow step design.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
||||||
|
|
||||||
|
### ✅ SUCCESS:
|
||||||
|
|
||||||
|
- User understands format spectrum
|
||||||
|
- Format type clearly identified
|
||||||
|
- Template requirements documented (if applicable)
|
||||||
|
- Output format saved in plan
|
||||||
|
|
||||||
|
### ❌ SYSTEM FAILURE:
|
||||||
|
|
||||||
|
- Not showing format examples
|
||||||
|
- Skipping format requirements
|
||||||
|
- Not documenting decisions in plan
|
||||||
|
- Assuming format without asking
|
||||||
|
|
||||||
|
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
||||||
|
|
@ -1,31 +1,30 @@
|
||||||
---
|
---
|
||||||
name: 'step-09-design'
|
name: 'step-06-design'
|
||||||
description: 'Design the workflow structure and step sequence based on gathered requirements and tools configuration'
|
description: 'Design the workflow structure and step sequence based on gathered requirements, tools configuration, and output format'
|
||||||
|
|
||||||
# Path Definitions
|
# Path Definitions
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
# File References
|
# File References
|
||||||
thisStepFile: '{workflow_path}/steps/step-09-design.md'
|
thisStepFile: '{workflow_path}/steps/step-06-design.md'
|
||||||
nextStepFile: '{workflow_path}/steps/step-10-plan-review.md'
|
nextStepFile: '{workflow_path}/steps/step-07-build.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
# Output files for workflow creation process
|
# Output files for workflow creation process
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
# Task References
|
# Task References
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
|
||||||
# Template References
|
# Template References
|
||||||
designTemplate: '{workflow_path}/templates/design-section.md'
|
# No template needed - will append design details directly to workflow plan
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 3: Workflow Structure Design
|
# Step 6: Workflow Structure Design
|
||||||
|
|
||||||
## STEP GOAL:
|
## STEP GOAL:
|
||||||
|
|
||||||
To collaboratively design the workflow structure, step sequence, and interaction patterns based on the requirements gathered in the previous step.
|
To collaboratively design the workflow structure, step sequence, and interaction patterns based on the approved plan and output format requirements.
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
|
@ -55,12 +54,13 @@ To collaboratively design the workflow structure, step sequence, and interaction
|
||||||
|
|
||||||
- 🎯 Guide collaborative design process
|
- 🎯 Guide collaborative design process
|
||||||
- 💾 After completing design, append to {workflowPlanFile}
|
- 💾 After completing design, append to {workflowPlanFile}
|
||||||
- 📖 Update plan frontmatter `stepsCompleted: [1, 2, 3]` before loading next step
|
- 📖 Update plan frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6]` before loading next step
|
||||||
- 🚫 FORBIDDEN to load next step until user selects 'C' and design is saved
|
- 🚫 FORBIDDEN to load next step until user selects 'C' and design is saved
|
||||||
|
|
||||||
## CONTEXT BOUNDARIES:
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
- Requirements from step 2 are available and should inform design
|
- Approved plan from step 4 is available and should inform design
|
||||||
|
- Output format design from step 5 (if completed) guides structure
|
||||||
- Load architecture documentation when needed for guidance
|
- Load architecture documentation when needed for guidance
|
||||||
- Focus ONLY on structure and flow design
|
- Focus ONLY on structure and flow design
|
||||||
- Don't implement actual files in this step
|
- Don't implement actual files in this step
|
||||||
|
|
@ -74,7 +74,6 @@ When designing, you may load these documents as needed:
|
||||||
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-01-init-continuable-template.md` - Continuable init step template
|
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-01-init-continuable-template.md` - Continuable init step template
|
||||||
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-1b-template.md` - Continuation step template
|
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-1b-template.md` - Continuation step template
|
||||||
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/workflow-template.md` - Workflow configuration
|
- `{project-root}/{bmad_folder}/bmb/docs/workflows/templates/workflow-template.md` - Workflow configuration
|
||||||
- `{project-root}/{bmad_folder}/bmb/docs/workflows/architecture.md` - Architecture principles
|
|
||||||
- `{project-root}/{bmad_folder}/bmb/reference/workflows/meal-prep-nutrition/workflow.md` - Complete example
|
- `{project-root}/{bmad_folder}/bmb/reference/workflows/meal-prep-nutrition/workflow.md` - Complete example
|
||||||
|
|
||||||
## WORKFLOW DESIGN PROCESS:
|
## WORKFLOW DESIGN PROCESS:
|
||||||
|
|
@ -97,7 +96,7 @@ Read: {project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-1b-template
|
||||||
|
|
||||||
This shows the continuation step pattern for workflows that might take multiple sessions.
|
This shows the continuation step pattern for workflows that might take multiple sessions.
|
||||||
|
|
||||||
Based on the requirements, collaboratively design:
|
Based on the approved plan, collaboratively design:
|
||||||
|
|
||||||
- How many major steps does this workflow need? (Recommend 3-7)
|
- How many major steps does this workflow need? (Recommend 3-7)
|
||||||
- What is the goal of each step?
|
- What is the goal of each step?
|
||||||
|
|
@ -199,31 +198,35 @@ Present the design for review:
|
||||||
- Ensure steps can be loaded independently
|
- Ensure steps can be loaded independently
|
||||||
- Design for Just-In-Time loading
|
- Design for Just-In-Time loading
|
||||||
|
|
||||||
### Collaborative Dialogue
|
### Sequential Flow with Clear Progression
|
||||||
|
|
||||||
- Design for conversation, not command-response
|
- Each step should build on previous work
|
||||||
- Include decision points for user input
|
- Include clear decision points
|
||||||
- Make the workflow adaptable to user context
|
- Maintain logical progression toward goal
|
||||||
|
|
||||||
### Sequential Enforcement
|
### Menu-Based Interactions
|
||||||
|
|
||||||
- Design clear step dependencies
|
- Include consistent menu patterns
|
||||||
- Ensure logical flow between steps
|
- Provide clear options at decision points
|
||||||
- Include state tracking for progress
|
- Allow for conversation within steps
|
||||||
|
|
||||||
### Error Prevention
|
### State Management
|
||||||
|
|
||||||
- Include validation at key points
|
- Track progress using `stepsCompleted` array
|
||||||
- Design for common failure scenarios
|
- Persist state in output file frontmatter
|
||||||
- Provide clear guidance to users
|
- Support continuation where appropriate
|
||||||
|
|
||||||
## CONTENT TO APPEND TO PLAN:
|
### 9. Document Design in Plan
|
||||||
|
|
||||||
After completing the design, append to {workflowPlanFile}:
|
Append to {workflowPlanFile}:
|
||||||
|
|
||||||
Load and append the content from {designTemplate}
|
- Complete step outline with names and purposes
|
||||||
|
- Flow diagram or sequence description
|
||||||
|
- Interaction patterns
|
||||||
|
- File structure requirements
|
||||||
|
- Special features and handling
|
||||||
|
|
||||||
### 9. Present MENU OPTIONS
|
### 10. Present MENU OPTIONS
|
||||||
|
|
||||||
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue
|
||||||
|
|
||||||
|
|
@ -239,12 +242,12 @@ Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Conti
|
||||||
|
|
||||||
- IF A: Execute {advancedElicitationTask}
|
- IF A: Execute {advancedElicitationTask}
|
||||||
- IF P: Execute {partyModeWorkflow}
|
- IF P: Execute {partyModeWorkflow}
|
||||||
- IF C: Save content to {workflowPlanFile}, update frontmatter, then only then load, read entire file, then execute {nextStepFile}
|
- IF C: Save design to {workflowPlanFile}, update frontmatter, then load, read entire file, then execute {nextStepFile}
|
||||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#9-present-menu-options)
|
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#10-present-menu-options)
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
ONLY WHEN C is selected and content is saved to workflow plan and frontmatter is updated, will you then load, read entire file, then execute {nextStepFile} to execute and begin workflow file generation step.
|
ONLY WHEN C is selected and design is saved will you load {nextStepFile} to begin implementation.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -253,16 +256,16 @@ ONLY WHEN C is selected and content is saved to workflow plan and frontmatter is
|
||||||
### ✅ SUCCESS:
|
### ✅ SUCCESS:
|
||||||
|
|
||||||
- Workflow structure designed collaboratively
|
- Workflow structure designed collaboratively
|
||||||
- Step sequence mapped and agreed upon
|
- All steps clearly defined and sequenced
|
||||||
- Interaction patterns designed
|
- Interaction patterns established
|
||||||
- Design documented in {outputFile}
|
- File structure planned
|
||||||
- Frontmatter updated with step completion
|
- User agreement on design
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
### ❌ SYSTEM FAILURE:
|
||||||
|
|
||||||
- Creating implementation details instead of design
|
- Designing without user collaboration
|
||||||
- Skipping design review with user
|
- Skipping design principles
|
||||||
- Proceeding without complete design
|
- Not documenting design in plan
|
||||||
- Not updating document frontmatter
|
- Proceeding without user agreement
|
||||||
|
|
||||||
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
||||||
|
|
@ -1,154 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-06-external-tools'
|
|
||||||
description: 'Configure MCP integrations and installation requirements'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-06-external-tools.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-07-installation-guidance.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 6: External Tools Configuration
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Identify and configure MCP integrations and external tools that the workflow requires.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in MCP integrations and external tools
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Load external tools from CSV
|
|
||||||
- 💾 Identify specific MCP needs for workflow
|
|
||||||
- 📖 Document which tools require installation
|
|
||||||
- 🚫 FORBIDDEN to proceed without confirming tool selections
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize External Tools Assessment
|
|
||||||
|
|
||||||
"Configuring **External Tools and MCP Integrations**
|
|
||||||
|
|
||||||
These tools extend workflow capabilities but typically require installation. Let's identify what your workflow actually needs."
|
|
||||||
|
|
||||||
### 2. Present External Tools from CSV
|
|
||||||
|
|
||||||
Load `{commonToolsCsv}` and filter for `propose='example'` and `type='mcp'`:
|
|
||||||
|
|
||||||
"**Available External Tools:**
|
|
||||||
|
|
||||||
**MCP Integrations (Require Installation):**
|
|
||||||
|
|
||||||
- [List MCP tools from CSV with URLs and descriptions]
|
|
||||||
|
|
||||||
**Example Workflows/Tasks:**
|
|
||||||
|
|
||||||
- [List example workflows/tasks from CSV with descriptions]
|
|
||||||
|
|
||||||
**Installation Note:** Tools marked with `requires_install=yes` will need setup steps."
|
|
||||||
|
|
||||||
### 3. Identify Specific Tool Needs
|
|
||||||
|
|
||||||
"**External Tool Requirements:**
|
|
||||||
|
|
||||||
Based on your workflow goals, which external tools do you need?
|
|
||||||
|
|
||||||
**Common MCP Needs:**
|
|
||||||
|
|
||||||
- **Documentation Access:** Context-7 for current API docs
|
|
||||||
- **Browser Automation:** Playwright for web interactions
|
|
||||||
- **Git Operations:** Direct version control integration
|
|
||||||
- **Database Access:** Multiple database connectivity
|
|
||||||
- **Custom Tools:** Any domain-specific MCPs you need
|
|
||||||
|
|
||||||
**Your Requirements:**
|
|
||||||
|
|
||||||
1. What external data or APIs will your workflow access?
|
|
||||||
2. Does your workflow need web browser automation?
|
|
||||||
3. Will it interact with version control systems?
|
|
||||||
4. Are database connections required?
|
|
||||||
5. Any custom MCPs you plan to use?"
|
|
||||||
|
|
||||||
### 4. Document External Tools Selection
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## External Tools Configuration
|
|
||||||
|
|
||||||
### MCP Integrations
|
|
||||||
|
|
||||||
**Selected Tools:** [list from CSV]
|
|
||||||
**Purpose:** [how each MCP enhances workflow]
|
|
||||||
**Integration Points:** [where external tools are essential]
|
|
||||||
**Installation Required:** [yes/no, which tools]
|
|
||||||
|
|
||||||
### Example Workflows/Tasks
|
|
||||||
|
|
||||||
**Selected:** [list chosen workflows/tasks]
|
|
||||||
**Purpose:** [how they enhance workflow capabilities]
|
|
||||||
**Integration:** [where they fit in workflow flow]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Installation Assessment
|
|
||||||
|
|
||||||
"**Installation Requirements Assessment:**
|
|
||||||
|
|
||||||
**Tools Requiring Installation:** [list from CSV where requires_install=yes]
|
|
||||||
|
|
||||||
**Installation Guidance Options:**
|
|
||||||
|
|
||||||
1. Include detailed setup steps in workflow
|
|
||||||
2. Provide user installation checklist
|
|
||||||
3. Assume tools are pre-installed
|
|
||||||
|
|
||||||
**Your Preference:** [ask user how to handle installation]"
|
|
||||||
|
|
||||||
### 6. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to Installation Guidance [M] Modify External Tools
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Append external tools configuration to {workflowPlanFile}, update frontmatter, then load {nextStepFile}
|
|
||||||
- IF M: Refine external tool requirements
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and external tools are documented will you load {nextStepFile} to configure installation guidance.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- External tools presented from CSV with installation requirements
|
|
||||||
- User's specific tool needs identified and documented
|
|
||||||
- Installation requirements clearly marked
|
|
||||||
- User understands which tools need setup
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Not filtering CSV for relevant tool types
|
|
||||||
- Missing installation requirement information
|
|
||||||
- Proceeding without confirming tool selections
|
|
||||||
|
|
@ -1,36 +1,32 @@
|
||||||
---
|
---
|
||||||
name: 'step-11-build'
|
name: 'step-07-build'
|
||||||
description: 'Generate all workflow files based on the approved plan'
|
description: 'Generate all workflow files based on the approved plan'
|
||||||
|
|
||||||
# Path Definitions
|
# Path Definitions
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
# File References
|
# File References
|
||||||
thisStepFile: '{workflow_path}/steps/step-11-build.md'
|
thisStepFile: '{workflow_path}/steps/step-07-build.md'
|
||||||
nextStepFile: '{workflow_path}/steps/step-12-review.md'
|
nextStepFile: '{workflow_path}/steps/step-08-review.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
# Output files for workflow creation process
|
# Output files for workflow creation process
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
# Task References
|
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
|
||||||
|
|
||||||
# Template References
|
# Template References
|
||||||
workflowTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/workflow-template.md'
|
workflowTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/workflow-template.md'
|
||||||
stepTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-template.md'
|
stepTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-template.md'
|
||||||
stepInitContinuableTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-01-init-continuable-template.md'
|
stepInitContinuableTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-01-init-continuable-template.md'
|
||||||
step1bTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-1b-template.md'
|
step1bTemplate: '{project-root}/{bmad_folder}/bmb/docs/workflows/templates/step-1b-template.md'
|
||||||
contentTemplate: '{workflow_path}/templates/content-template.md'
|
# No content templates needed - will create content as needed during build
|
||||||
buildSummaryTemplate: '{workflow_path}/templates/build-summary.md'
|
# No build summary template needed - will append summary directly to workflow plan
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 5: Workflow File Generation
|
# Step 7: Workflow File Generation
|
||||||
|
|
||||||
## STEP GOAL:
|
## STEP GOAL:
|
||||||
|
|
||||||
To generate all the workflow files (workflow.md, step files, templates, and supporting files) based on the approved plan from the previous review step.
|
To generate all the workflow files (workflow.md, step files, templates, and supporting files) based on the approved plan from the previous design step.
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
|
@ -60,12 +56,12 @@ To generate all the workflow files (workflow.md, step files, templates, and supp
|
||||||
|
|
||||||
- 🎯 Generate files systematically from design
|
- 🎯 Generate files systematically from design
|
||||||
- 💾 Document all generated files and their locations
|
- 💾 Document all generated files and their locations
|
||||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4]` before loading next step
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7]` before loading next step
|
||||||
- 🚫 FORBIDDEN to load next step until user selects 'C' and build is complete
|
- 🚫 FORBIDDEN to load next step until user selects 'C' and build is complete
|
||||||
|
|
||||||
## CONTEXT BOUNDARIES:
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
- Approved plan from step 10 guides implementation
|
- Approved plan from step 6 guides implementation
|
||||||
- Generate files in target workflow location
|
- Generate files in target workflow location
|
||||||
- Load templates and documentation as needed during build
|
- Load templates and documentation as needed during build
|
||||||
- Follow step-file architecture principles
|
- Follow step-file architecture principles
|
||||||
|
|
@ -121,7 +117,7 @@ Load and follow {workflowTemplate}:
|
||||||
|
|
||||||
- Create workflow.md using template structure
|
- Create workflow.md using template structure
|
||||||
- Insert workflow name and description
|
- Insert workflow name and description
|
||||||
- Configure all path variables ({project-root}, {bmad_folder}, {workflow_path})
|
- Configure all path variables ({project-root}, {_bmad_folder_}, {workflow_path})
|
||||||
- Set web_bundle flag to true unless user has indicated otherwise
|
- Set web_bundle flag to true unless user has indicated otherwise
|
||||||
- Define role and goal
|
- Define role and goal
|
||||||
- Include initialization path to step-01
|
- Include initialization path to step-01
|
||||||
|
|
@ -182,7 +178,6 @@ For each remaining step in the design:
|
||||||
|
|
||||||
For document workflows:
|
For document workflows:
|
||||||
|
|
||||||
- Load {contentTemplate}
|
|
||||||
- Create template.md with proper structure
|
- Create template.md with proper structure
|
||||||
- Include all variables from design
|
- Include all variables from design
|
||||||
- Ensure variable naming consistency
|
- Ensure variable naming consistency
|
||||||
|
|
@ -265,7 +260,12 @@ Create a summary of what was generated:
|
||||||
|
|
||||||
After generating all files, append to {workflowPlanFile}:
|
After generating all files, append to {workflowPlanFile}:
|
||||||
|
|
||||||
Load and append the content from {buildSummaryTemplate}
|
Create a build summary including:
|
||||||
|
|
||||||
|
- List of all files created with full paths
|
||||||
|
- Any customizations from templates
|
||||||
|
- Manual steps needed
|
||||||
|
- Next steps for testing
|
||||||
|
|
||||||
### 9. Present MENU OPTIONS
|
### 9. Present MENU OPTIONS
|
||||||
|
|
||||||
|
|
@ -1,159 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-07-installation-guidance'
|
|
||||||
description: 'Configure installation guidance for tools that require setup'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-07-installation-guidance.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-08-tools-summary.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 7: Installation Guidance Configuration
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Configure installation guidance for any selected tools that require setup, ensuring users can successfully prepare their environment.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in tool installation and setup procedures
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Identify tools requiring installation from CSV
|
|
||||||
- 💾 Configure installation approach based on user preference
|
|
||||||
- 📖 Generate or skip installation guidance as appropriate
|
|
||||||
- 🚫 FORBIDDEN to proceed without confirming installation approach
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize Installation Guidance
|
|
||||||
|
|
||||||
"Configuring **Installation Guidance**
|
|
||||||
|
|
||||||
Let's ensure users can successfully set up any tools your workflow requires. This prevents runtime errors and improves user experience."
|
|
||||||
|
|
||||||
### 2. Identify Installation Requirements
|
|
||||||
|
|
||||||
Load `{commonToolsCsv}` and filter for selected tools with `requires_install=yes`:
|
|
||||||
|
|
||||||
"**Installation Requirements:**
|
|
||||||
|
|
||||||
**Tools Requiring Installation:**
|
|
||||||
|
|
||||||
- [List selected tools from CSV where requires_install=yes]
|
|
||||||
- [Include URLs from CSV for each tool]
|
|
||||||
|
|
||||||
**No Installation Required:**
|
|
||||||
|
|
||||||
- [List selected tools from CSV where requires_install=no]
|
|
||||||
- All BMAD core tools, LLM features, and sidecar file memory"
|
|
||||||
|
|
||||||
### 3. Installation Approach Options
|
|
||||||
|
|
||||||
"**Installation Guidance Options:**
|
|
||||||
|
|
||||||
Based on your selected tools, how should the workflow handle installation?
|
|
||||||
|
|
||||||
1. **Include Installation Steps** - Add detailed setup instructions in early workflow step
|
|
||||||
2. **User Instructions Only** - Provide guidance but don't embed in workflow
|
|
||||||
3. **Assume Pre-Installed** - Skip installation guidance (advanced users)
|
|
||||||
|
|
||||||
**Installation Prerequisites (if included):**
|
|
||||||
|
|
||||||
- Node.js 18+ (for Node.js-based MCPs)
|
|
||||||
- Python 3.8+ (for Python-based MCPs)
|
|
||||||
- Git for cloning repositories
|
|
||||||
- MCP-compatible AI client (Claude Desktop or similar)"
|
|
||||||
|
|
||||||
### 4. Configure Installation Guidance
|
|
||||||
|
|
||||||
If user chooses installation guidance:
|
|
||||||
|
|
||||||
"**Installation Step Configuration:**
|
|
||||||
|
|
||||||
For each tool requiring installation, the workflow will include:
|
|
||||||
|
|
||||||
- Clone/download instructions using URL from CSV
|
|
||||||
- Dependency installation commands
|
|
||||||
- Configuration file setup
|
|
||||||
- Server startup procedures
|
|
||||||
- Claude Desktop configuration steps
|
|
||||||
|
|
||||||
**Installation Checklist (if included):**
|
|
||||||
|
|
||||||
- [ ] Download and install Claude Desktop
|
|
||||||
- [ ] Clone MCP repositories
|
|
||||||
- [ ] Install required dependencies
|
|
||||||
- [ ] Configure MCP servers
|
|
||||||
- [ ] Add to Claude configuration
|
|
||||||
- [ ] Test connectivity
|
|
||||||
- [ ] Verify functionality"
|
|
||||||
|
|
||||||
### 5. Document Installation Configuration
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Installation Guidance Configuration
|
|
||||||
|
|
||||||
### Installation Approach
|
|
||||||
|
|
||||||
**Selected Approach:** [detailed steps/user instructions/assume pre-installed]
|
|
||||||
**Tools Requiring Installation:** [list with URLs]
|
|
||||||
**Installation Step Placement:** [early in workflow, after setup]
|
|
||||||
|
|
||||||
### Installation Content
|
|
||||||
|
|
||||||
**Prerequisites:** [system requirements]
|
|
||||||
**Setup Steps:** [commands and procedures]
|
|
||||||
**Verification:** [testing procedures]
|
|
||||||
**User Support:** [troubleshooting guidance]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to Tools Summary [M] Modify Installation Approach
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Append installation configuration to {workflowPlanFile}, update frontmatter, then load {nextStepFile}
|
|
||||||
- IF M: Refine installation approach
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and installation guidance is documented will you load {nextStepFile} to complete tools configuration.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- Installation requirements clearly identified from CSV
|
|
||||||
- Installation approach configured based on user preference
|
|
||||||
- Documentation prepared for setup procedures
|
|
||||||
- User understands how tools will be installed
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Missing installation requirement assessment
|
|
||||||
- Not using URLs from CSV for installation guidance
|
|
||||||
- Proceeding without confirming installation approach
|
|
||||||
|
|
@ -1,27 +1,31 @@
|
||||||
---
|
---
|
||||||
name: 'step-12-review'
|
name: 'step-08-review'
|
||||||
description: 'Review the generated workflow and provide final validation and next steps'
|
description: 'Review the generated workflow and provide final validation and next steps'
|
||||||
|
|
||||||
# Path Definitions
|
# Path Definitions
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
# File References
|
# File References
|
||||||
thisStepFile: '{workflow_path}/steps/step-12-review.md'
|
thisStepFile: '{workflow_path}/steps/step-08-review.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
|
|
||||||
# Output files for workflow creation process
|
# Output files for workflow creation process
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
|
||||||
# Task References
|
# Task References
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
||||||
|
|
||||||
# Template References
|
# Template References
|
||||||
reviewTemplate: '{workflow_path}/templates/review-section.md'
|
# No review template needed - will append review summary directly to workflow plan
|
||||||
completionTemplate: '{workflow_path}/templates/completion-section.md'
|
# No completion template needed - will append completion details directly
|
||||||
|
|
||||||
|
# Next step reference
|
||||||
|
nextStepFile: '{workflow_path}/steps/step-09-complete.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 6: Workflow Review and Completion
|
# Step 8: Workflow Review and Completion
|
||||||
|
|
||||||
## STEP GOAL:
|
## STEP GOAL:
|
||||||
|
|
||||||
|
|
@ -55,7 +59,7 @@ To review the generated workflow for completeness, accuracy, and adherence to be
|
||||||
|
|
||||||
- 🎯 Conduct thorough review of generated workflow
|
- 🎯 Conduct thorough review of generated workflow
|
||||||
- 💾 Document review findings and completion status
|
- 💾 Document review findings and completion status
|
||||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5]` and mark complete
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8]` and mark complete
|
||||||
- 🚫 This is the final step - no next step to load
|
- 🚫 This is the final step - no next step to load
|
||||||
|
|
||||||
## CONTEXT BOUNDARIES:
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
@ -197,26 +201,36 @@ Provide specific recommendations:
|
||||||
|
|
||||||
After completing review, append to {workflowPlanFile}:
|
After completing review, append to {workflowPlanFile}:
|
||||||
|
|
||||||
Load and append the content from {reviewTemplate}
|
Append review findings to {workflowPlanFile}:
|
||||||
|
|
||||||
Then load and append the content from {completionTemplate}
|
Create a review summary including:
|
||||||
|
|
||||||
## FINAL MENU OPTIONS
|
- Completeness check results
|
||||||
|
- Accuracy validation
|
||||||
|
- Compliance with best practices
|
||||||
|
- Any issues found
|
||||||
|
|
||||||
Display: **All Files Created Successfully!** [C] Complete & Get Validation Instructions
|
Then append completion details:
|
||||||
|
|
||||||
|
- Final approval status
|
||||||
|
- Deployment recommendations
|
||||||
|
- Usage guidance
|
||||||
|
|
||||||
|
### 10. Present MENU OPTIONS
|
||||||
|
|
||||||
|
Display: **Select an Option:** [C] Continue to Completion
|
||||||
|
|
||||||
#### EXECUTION RULES:
|
#### EXECUTION RULES:
|
||||||
|
|
||||||
- ALWAYS halt and wait for user input after presenting menu
|
- ALWAYS halt and wait for user input after presenting menu
|
||||||
- Provide compliance check guidance for new context execution
|
- ONLY proceed to next step when user selects 'C'
|
||||||
- After other menu items execution, return to this menu
|
|
||||||
- User can chat or ask questions - always respond and then end with display again of the menu options
|
- User can chat or ask questions - always respond and then end with display again of the menu options
|
||||||
- Use menu handling logic section below
|
- Use menu handling logic section below
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
- IF C: Save content to {workflowPlanFile}, update frontmatter, then provide validation instructions for running in new context
|
- IF C: Save review to {workflowPlanFile}, update frontmatter, then load, read entire file, then execute {nextStepFile}
|
||||||
- IF Any other comments or queries: respond and redisplay menu
|
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#10-present-menu-options)
|
||||||
|
|
||||||
## COMPLIANCE CHECK INSTRUCTIONS
|
## COMPLIANCE CHECK INSTRUCTIONS
|
||||||
|
|
||||||
|
|
@ -1,167 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-08-tools-summary'
|
|
||||||
description: 'Summarize tools configuration and proceed to workflow design'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-08-tools-summary.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-09-design.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
|
|
||||||
# Documentation References
|
|
||||||
commonToolsCsv: '{project-root}/{bmad_folder}/bmb/docs/workflows/common-workflow-tools.csv'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 8: Tools Configuration Summary
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
Summarize the complete tools configuration and confirm readiness to proceed to workflow design.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and integration specialist
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You bring expertise in tools integration and workflow optimization
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Compile complete tools configuration summary
|
|
||||||
- 💾 Present final configuration for user confirmation
|
|
||||||
- 📖 Update workflow plan with comprehensive summary
|
|
||||||
- 🚫 FORBIDDEN to proceed to design without user confirmation
|
|
||||||
|
|
||||||
## SEQUENCE OF INSTRUCTIONS:
|
|
||||||
|
|
||||||
### 1. Initialize Tools Summary
|
|
||||||
|
|
||||||
"**Tools Configuration Summary**
|
|
||||||
|
|
||||||
Let's review your complete tools configuration before proceeding to workflow design. This ensures all integrations are properly planned."
|
|
||||||
|
|
||||||
### 2. Present Complete Configuration
|
|
||||||
|
|
||||||
Load all previous configurations from {workflowPlanFile} and CSV:
|
|
||||||
|
|
||||||
"**Complete Tools Configuration:**
|
|
||||||
|
|
||||||
**Core BMAD Tools:**
|
|
||||||
|
|
||||||
- [List selected core tools with integration points]
|
|
||||||
- [Load descriptions from CSV for confirmation]
|
|
||||||
|
|
||||||
**LLM Tool Features:**
|
|
||||||
|
|
||||||
- [List selected LLM features with integration points]
|
|
||||||
- [Load descriptions from CSV for confirmation]
|
|
||||||
|
|
||||||
**Tool-Memory:**
|
|
||||||
|
|
||||||
- [Selected memory types with implementation details]
|
|
||||||
- [Load descriptions from CSV for confirmation]
|
|
||||||
|
|
||||||
**External Tools:**
|
|
||||||
|
|
||||||
- [List selected MCP integrations with URLs]
|
|
||||||
- [Load descriptions from CSV for confirmation]
|
|
||||||
- [Mark which require installation]
|
|
||||||
|
|
||||||
**Installation Guidance:**
|
|
||||||
|
|
||||||
- [Approach selected and tools included]
|
|
||||||
- [Setup steps configured as needed]
|
|
||||||
|
|
||||||
**Integration Strategy:**
|
|
||||||
|
|
||||||
- [How tools enhance rather than disrupt workflow]
|
|
||||||
- [Checkpoint approaches and user choice points]
|
|
||||||
- [Performance optimization opportunities]"
|
|
||||||
|
|
||||||
### 3. Final Configuration Confirmation
|
|
||||||
|
|
||||||
"**Final Configuration Review:**
|
|
||||||
|
|
||||||
**Your workflow will include:**
|
|
||||||
|
|
||||||
- **Total Tools:** [count of selected tools]
|
|
||||||
- **Core Tools:** [number selected]
|
|
||||||
- **External Tools:** [number selected]
|
|
||||||
- **Installation Required:** [yes/no, which tools]
|
|
||||||
|
|
||||||
**Key Integration Points:**
|
|
||||||
|
|
||||||
- [Major phases where tools enhance workflow]
|
|
||||||
- [User experience considerations]
|
|
||||||
- [Performance optimizations]
|
|
||||||
|
|
||||||
**Ready to proceed with this configuration?**"
|
|
||||||
|
|
||||||
### 4. Update Workflow Plan with Final Summary
|
|
||||||
|
|
||||||
Append to {workflowPlanFile}:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Final Tools Configuration Summary
|
|
||||||
|
|
||||||
### Tools Inventory
|
|
||||||
|
|
||||||
**Core BMAD Tools:** [count and list]
|
|
||||||
**LLM Features:** [count and list]
|
|
||||||
**Memory Implementation:** [type and use case]
|
|
||||||
**External Tools:** [count and list with URLs]
|
|
||||||
**Installation Required:** [tools and setup complexity]
|
|
||||||
|
|
||||||
### Integration Strategy
|
|
||||||
|
|
||||||
**User Experience:** [how tools enhance workflow]
|
|
||||||
**Checkpoint Approach:** [when tools are offered]
|
|
||||||
**Performance Optimization:** [efficiency improvements]
|
|
||||||
**Installation Strategy:** [how users prepare environment]
|
|
||||||
|
|
||||||
### Ready for Design
|
|
||||||
|
|
||||||
All tools configured and ready for workflow design phase.
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Menu Options
|
|
||||||
|
|
||||||
Display: **Select an Option:** [C] Continue to Workflow Design [M] Modify Configuration
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF C: Save final summary, update frontmatter stepsCompleted: [3, 4, 5, 6, 7, 8], then load {nextStepFile}
|
|
||||||
- IF M: Return to specific configuration step
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected and summary is saved will you load {nextStepFile} to begin workflow design phase.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- Complete tools configuration summarized clearly
|
|
||||||
- All descriptions loaded from CSV (not duplicated)
|
|
||||||
- User confirms configuration before proceeding
|
|
||||||
- Frontmatter updated with completed steps
|
|
||||||
- Ready to proceed to workflow design
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Not presenting complete configuration summary
|
|
||||||
- Duplicating CSV content instead of referencing it
|
|
||||||
- Proceeding to design without user confirmation
|
|
||||||
- Not updating workflow plan with final summary
|
|
||||||
|
|
@ -0,0 +1,187 @@
|
||||||
|
---
|
||||||
|
name: 'step-09-complete'
|
||||||
|
description: 'Final completion and wrap-up of workflow creation process'
|
||||||
|
|
||||||
|
# Path Definitions
|
||||||
|
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
||||||
|
|
||||||
|
# File References
|
||||||
|
thisStepFile: '{workflow_path}/steps/step-09-complete.md'
|
||||||
|
workflowFile: '{workflow_path}/workflow.md'
|
||||||
|
# Output files for workflow creation process
|
||||||
|
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
||||||
|
workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md'
|
||||||
|
completionFile: '{targetWorkflowPath}/completion-summary-{new_workflow_name}.md'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Step 9: Workflow Creation Complete
|
||||||
|
|
||||||
|
## STEP GOAL:
|
||||||
|
|
||||||
|
To complete the workflow creation process with a final summary, confirmation, and next steps for using the new workflow.
|
||||||
|
|
||||||
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
### Universal Rules:
|
||||||
|
|
||||||
|
- 🛑 NEVER generate content without user input
|
||||||
|
- 📖 CRITICAL: Read the complete step file before taking any action
|
||||||
|
- 📋 YOU ARE A FACILITATOR, not a content generator
|
||||||
|
|
||||||
|
### Role Reinforcement:
|
||||||
|
|
||||||
|
- ✅ You are a workflow architect and systems designer
|
||||||
|
- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role
|
||||||
|
- ✅ We engage in collaborative dialogue, not command-response
|
||||||
|
- ✅ You bring expertise in workflow deployment and usage guidance
|
||||||
|
- ✅ User brings their specific workflow needs
|
||||||
|
|
||||||
|
### Step-Specific Rules:
|
||||||
|
|
||||||
|
- 🎯 Focus ONLY on completion and next steps
|
||||||
|
- 🚫 FORBIDDEN to modify the generated workflow
|
||||||
|
- 💬 Provide clear guidance on how to use the workflow
|
||||||
|
- 🚫 This is the final step - no next step to load
|
||||||
|
|
||||||
|
## EXECUTION PROTOCOLS:
|
||||||
|
|
||||||
|
- 🎯 Present completion summary
|
||||||
|
- 💾 Create final completion documentation
|
||||||
|
- 📖 Update plan frontmatter with completion status
|
||||||
|
- 🚫 This is the final step
|
||||||
|
|
||||||
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
||||||
|
- All previous steps are complete
|
||||||
|
- Workflow has been generated and reviewed
|
||||||
|
- Focus ONLY on completion and next steps
|
||||||
|
- This step concludes the create-workflow process
|
||||||
|
|
||||||
|
## COMPLETION PROCESS:
|
||||||
|
|
||||||
|
### 1. Initialize Completion
|
||||||
|
|
||||||
|
"**Workflow Creation Complete!**
|
||||||
|
|
||||||
|
Congratulations! We've successfully created your new workflow. Let's finalize everything and ensure you have everything you need to start using it."
|
||||||
|
|
||||||
|
### 2. Final Summary
|
||||||
|
|
||||||
|
Present a complete summary of what was created:
|
||||||
|
|
||||||
|
**Workflow Created:** {new_workflow_name}
|
||||||
|
**Location:** {targetWorkflowPath}
|
||||||
|
**Files Generated:** [list from build step]
|
||||||
|
|
||||||
|
### 3. Create Completion Summary
|
||||||
|
|
||||||
|
Create {completionFile} with:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
workflowName: { new_workflow_name }
|
||||||
|
creationDate: [current date]
|
||||||
|
module: [module from plan]
|
||||||
|
status: COMPLETE
|
||||||
|
stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Workflow Creation Summary
|
||||||
|
|
||||||
|
## Workflow Information
|
||||||
|
|
||||||
|
- **Name:** {new_workflow_name}
|
||||||
|
- **Module:** [module]
|
||||||
|
- **Created:** [date]
|
||||||
|
- **Location:** {targetWorkflowPath}
|
||||||
|
|
||||||
|
## Generated Files
|
||||||
|
|
||||||
|
[List all files created]
|
||||||
|
|
||||||
|
## Quick Start Guide
|
||||||
|
|
||||||
|
[How to run the new workflow]
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
[Post-creation recommendations]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Usage Guidance
|
||||||
|
|
||||||
|
Provide clear instructions on how to use the new workflow:
|
||||||
|
|
||||||
|
**How to Use Your New Workflow:**
|
||||||
|
|
||||||
|
1. **Running the Workflow:**
|
||||||
|
- [Instructions based on workflow type]
|
||||||
|
- [Initial setup if needed]
|
||||||
|
|
||||||
|
2. **Common Use Cases:**
|
||||||
|
- [Typical scenarios for using the workflow]
|
||||||
|
- [Expected inputs and outputs]
|
||||||
|
|
||||||
|
3. **Tips for Success:**
|
||||||
|
- [Best practices for this specific workflow]
|
||||||
|
- [Common pitfalls to avoid]
|
||||||
|
|
||||||
|
### 5. Post-Creation Recommendations
|
||||||
|
|
||||||
|
"**Next Steps:**
|
||||||
|
|
||||||
|
1. **Test the Workflow:** Run it with sample data to ensure it works as expected
|
||||||
|
2. **Customize if Needed:** You can modify the workflow based on your specific needs
|
||||||
|
3. **Share with Team:** If others will use this workflow, provide them with the location and instructions
|
||||||
|
4. **Monitor Usage:** Keep track of how well the workflow meets your needs"
|
||||||
|
|
||||||
|
### 6. Final Confirmation
|
||||||
|
|
||||||
|
"**Is there anything else you need help with regarding your new workflow?**
|
||||||
|
|
||||||
|
- I can help you test it
|
||||||
|
- We can make adjustments if needed
|
||||||
|
- I can help you create documentation for users
|
||||||
|
- Or any other support you need"
|
||||||
|
|
||||||
|
### 7. Update Final Status
|
||||||
|
|
||||||
|
Update {workflowPlanFile} frontmatter:
|
||||||
|
|
||||||
|
- Set status to COMPLETE
|
||||||
|
- Set completion date
|
||||||
|
- Add stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
|
## MENU OPTIONS
|
||||||
|
|
||||||
|
Display: **Workflow Creation Complete!** [T] Test Workflow [M] Make Adjustments [D] Get Help
|
||||||
|
|
||||||
|
#### Menu Handling Logic:
|
||||||
|
|
||||||
|
- IF T: Offer to run the newly created workflow with sample data
|
||||||
|
- IF M: Offer to make specific adjustments to the workflow
|
||||||
|
- IF D: Provide additional help and resources
|
||||||
|
- IF Any other: Respond to user needs
|
||||||
|
|
||||||
|
## CRITICAL STEP COMPLETION NOTE
|
||||||
|
|
||||||
|
This is the final step. When the user is satisfied, the workflow creation process is complete.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
||||||
|
|
||||||
|
### ✅ SUCCESS:
|
||||||
|
|
||||||
|
- Workflow fully created and reviewed
|
||||||
|
- Completion summary generated
|
||||||
|
- User understands how to use the workflow
|
||||||
|
- All documentation is in place
|
||||||
|
|
||||||
|
### ❌ SYSTEM FAILURE:
|
||||||
|
|
||||||
|
- Not providing clear usage instructions
|
||||||
|
- Not creating completion summary
|
||||||
|
- Leaving user without next steps
|
||||||
|
|
||||||
|
**Master Rule:** Ensure the user has everything needed to successfully use their new workflow.
|
||||||
|
|
@ -1,215 +0,0 @@
|
||||||
---
|
|
||||||
name: 'step-10-plan-review'
|
|
||||||
description: 'Review the complete workflow plan before generating files'
|
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/{bmad_folder}/bmb/workflows/create-workflow'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: '{workflow_path}/steps/step-10-plan-review.md'
|
|
||||||
nextStepFile: '{workflow_path}/steps/step-11-build.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
# Output files for workflow creation process
|
|
||||||
workflowPlanFile: '{output_folder}/workflow-plan-{new_workflow_name}.md'
|
|
||||||
targetWorkflowPath: '{custom_workflow_location}/{new_workflow_name}'
|
|
||||||
|
|
||||||
# Task References
|
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 4: Workflow Plan Review
|
|
||||||
|
|
||||||
## STEP GOAL:
|
|
||||||
|
|
||||||
To present the complete workflow plan for user review and approval before generating the actual workflow files.
|
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
||||||
|
|
||||||
### Universal Rules:
|
|
||||||
|
|
||||||
- 🛑 NEVER generate content without user input
|
|
||||||
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
||||||
- 🔄 CRITICAL: Always read the complete step file before taking any action
|
|
||||||
- 📋 YOU ARE A FACILITATOR, not a content generator
|
|
||||||
|
|
||||||
### Role Reinforcement:
|
|
||||||
|
|
||||||
- ✅ You are a workflow architect and systems designer
|
|
||||||
- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role
|
|
||||||
- ✅ We engage in collaborative dialogue, not command-response
|
|
||||||
- ✅ You present the plan clearly and answer questions
|
|
||||||
- ✅ User provides approval or requests changes
|
|
||||||
|
|
||||||
### Step-Specific Rules:
|
|
||||||
|
|
||||||
- 🎯 Focus ONLY on reviewing the plan, not building yet
|
|
||||||
- 🚫 FORBIDDEN to generate any workflow files in this step
|
|
||||||
- 💬 Present the complete plan clearly and answer all questions
|
|
||||||
- 🚪 GET explicit approval before proceeding to build
|
|
||||||
|
|
||||||
## EXECUTION PROTOCOLS:
|
|
||||||
|
|
||||||
- 🎯 Present the complete workflow plan for review
|
|
||||||
- 💾 Update plan frontmatter with review status
|
|
||||||
- 📖 Only proceed to build step with explicit user approval
|
|
||||||
- 🚫 FORBIDDEN to skip review or proceed without consent
|
|
||||||
|
|
||||||
## CONTEXT BOUNDARIES:
|
|
||||||
|
|
||||||
- Requirements and design from previous steps are in the plan
|
|
||||||
- Focus ONLY on review and approval
|
|
||||||
- Don't modify the design significantly here
|
|
||||||
- This is the final checkpoint before file generation
|
|
||||||
|
|
||||||
## REVIEW REFERENCE MATERIALS:
|
|
||||||
|
|
||||||
When reviewing, you may load for comparison:
|
|
||||||
|
|
||||||
- Example workflow: `{project-root}/{bmad_folder}/bmb/reference/workflows/meal-prep-nutrition/workflow.md`
|
|
||||||
- Step examples from same workflow's steps folder
|
|
||||||
- Architecture guide: `{project-root}/{bmad_folder}/bmb/docs/workflows/architecture.md`
|
|
||||||
|
|
||||||
## PLAN REVIEW PROCESS:
|
|
||||||
|
|
||||||
### 1. Present the Complete Plan
|
|
||||||
|
|
||||||
Read the entire {workflowPlanFile} and present it to the user:
|
|
||||||
|
|
||||||
- Executive Summary
|
|
||||||
- Requirements Analysis
|
|
||||||
- Detailed Design
|
|
||||||
- Implementation Plan
|
|
||||||
- Target Location and file structure
|
|
||||||
|
|
||||||
### 2. Analyze Plan for Gaps and Issues
|
|
||||||
|
|
||||||
Perform systematic analysis of the loaded plan:
|
|
||||||
|
|
||||||
**Logical Flow Check:**
|
|
||||||
|
|
||||||
- Do requirements align with proposed solution?
|
|
||||||
- Are tools appropriate for the workflow type?
|
|
||||||
- Is step sequence logical and complete?
|
|
||||||
- Are there missing transitions between steps?
|
|
||||||
|
|
||||||
**Completeness Review:**
|
|
||||||
|
|
||||||
- All requirements captured and addressed?
|
|
||||||
- Design covers all user scenarios?
|
|
||||||
- Implementation plan includes all necessary files?
|
|
||||||
- Are there unclear or ambiguous specifications?
|
|
||||||
|
|
||||||
**Architecture Validation:**
|
|
||||||
|
|
||||||
- Follows BMAD step-file architecture?
|
|
||||||
- Proper use of template patterns?
|
|
||||||
- Menu flow is logical and complete?
|
|
||||||
- Variable naming is consistent?
|
|
||||||
|
|
||||||
**Issue Identification:**
|
|
||||||
If gaps or issues found:
|
|
||||||
|
|
||||||
- Clearly identify each issue
|
|
||||||
- Propose specific solutions
|
|
||||||
- Ask for user input on resolution approach
|
|
||||||
|
|
||||||
### 3. Present Menu for Plan Approval
|
|
||||||
|
|
||||||
Display: **Plan Review Complete - Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Build
|
|
||||||
|
|
||||||
### 4. Address Questions and Concerns
|
|
||||||
|
|
||||||
Ask for specific feedback:
|
|
||||||
|
|
||||||
- Does this plan fully address your requirements?
|
|
||||||
- Are there any missing aspects?
|
|
||||||
- Would you like any changes to the design?
|
|
||||||
- Are you satisfied with the proposed structure?
|
|
||||||
|
|
||||||
### 5. Confirm or Revise
|
|
||||||
|
|
||||||
Based on feedback:
|
|
||||||
|
|
||||||
- If approved: Proceed to build step
|
|
||||||
- If changes needed: Go back to design step with specific feedback
|
|
||||||
- If major revisions: Consider going back to requirements step
|
|
||||||
|
|
||||||
## REVIEW CHECKPOINTS:
|
|
||||||
|
|
||||||
### Requirements Coverage
|
|
||||||
|
|
||||||
- [ ] All user requirements addressed
|
|
||||||
- [ ] Success criteria defined
|
|
||||||
- [ ] Technical constraints considered
|
|
||||||
- [ ] User interaction level appropriate
|
|
||||||
|
|
||||||
### Design Quality
|
|
||||||
|
|
||||||
- [ ] Step flow is logical
|
|
||||||
- [ ] Instruction style chosen appropriately
|
|
||||||
- [ ] Menu systems designed properly
|
|
||||||
- [ ] Error handling included
|
|
||||||
|
|
||||||
### Implementation Feasibility
|
|
||||||
|
|
||||||
- [ ] File structure is clear
|
|
||||||
- [ ] Target location confirmed
|
|
||||||
- [ ] Templates identified correctly
|
|
||||||
- [ ] Dependencies documented
|
|
||||||
|
|
||||||
## PLAN APPROVAL:
|
|
||||||
|
|
||||||
### Explicit Confirmation Required
|
|
||||||
|
|
||||||
Before proceeding to build, get explicit confirmation:
|
|
||||||
"Based on this plan, I will generate:
|
|
||||||
|
|
||||||
- [List of files]
|
|
||||||
in [target location]"
|
|
||||||
|
|
||||||
Ready to proceed when you are! Select your option below to build or modify the plan.
|
|
||||||
|
|
||||||
### 6. Present MENU OPTIONS
|
|
||||||
|
|
||||||
Display: **Review Complete - Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Build
|
|
||||||
|
|
||||||
#### EXECUTION RULES:
|
|
||||||
|
|
||||||
- ALWAYS halt and wait for user input after presenting menu
|
|
||||||
- ONLY proceed to build step with explicit 'C' selection AND approval
|
|
||||||
- After other menu items execution, return to this menu
|
|
||||||
- User can chat or ask questions - always respond and then end with display again of the menu options
|
|
||||||
- Use menu handling logic section below
|
|
||||||
|
|
||||||
#### Menu Handling Logic:
|
|
||||||
|
|
||||||
- IF A: Execute {advancedElicitationTask}
|
|
||||||
- IF P: Execute {partyModeWorkflow}
|
|
||||||
- IF C: AND user has approved the plan, update plan frontmatter, then load, read entire file, then execute {nextStepFile}
|
|
||||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#6-present-menu-options)
|
|
||||||
|
|
||||||
## CRITICAL STEP COMPLETION NOTE
|
|
||||||
|
|
||||||
ONLY WHEN C is selected AND user has explicitly approved the plan, will you then update the plan frontmatter and load, read entire file, then execute {nextStepFile} to execute and begin workflow file generation step.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
||||||
|
|
||||||
### ✅ SUCCESS:
|
|
||||||
|
|
||||||
- Complete plan presented clearly
|
|
||||||
- All user questions answered
|
|
||||||
- Feedback collected and documented
|
|
||||||
- Explicit approval received (or revisions planned)
|
|
||||||
- Plan ready for implementation
|
|
||||||
|
|
||||||
### ❌ SYSTEM FAILURE:
|
|
||||||
|
|
||||||
- Skipping the review presentation
|
|
||||||
- Proceeding without explicit approval
|
|
||||||
- Not answering user questions
|
|
||||||
- Rushing through the review process
|
|
||||||
|
|
||||||
**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
## Build Summary
|
|
||||||
|
|
||||||
### Files Generated
|
|
||||||
|
|
||||||
{{#generatedFiles}}
|
|
||||||
|
|
||||||
- **{{type}}**: {{path}}
|
|
||||||
{{/generatedFiles}}
|
|
||||||
|
|
||||||
### Customizations Made
|
|
||||||
|
|
||||||
{{#customizations}}
|
|
||||||
|
|
||||||
- {{.}}
|
|
||||||
{{/customizations}}
|
|
||||||
|
|
||||||
### Manual Steps Required
|
|
||||||
|
|
||||||
{{#manualSteps}}
|
|
||||||
|
|
||||||
- {{.}}
|
|
||||||
{{/manualSteps}}
|
|
||||||
|
|
||||||
### Build Validation Results
|
|
||||||
|
|
||||||
- **Syntax Check**: {{syntaxCheckResult}}
|
|
||||||
- **Path Validation**: {{pathValidationResult}}
|
|
||||||
- **Variable Consistency**: {{variableConsistencyResult}}
|
|
||||||
- **Template Compliance**: {{templateComplianceResult}}
|
|
||||||
|
|
||||||
### Next Steps for Testing
|
|
||||||
|
|
||||||
1. Run `workflow {{targetModule}}/workflows/{{workflowName}}` to test
|
|
||||||
2. Verify all steps execute properly
|
|
||||||
3. Check output generation
|
|
||||||
4. Validate user interaction points
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
## Workflow Creation Complete!
|
|
||||||
|
|
||||||
### Final Deliverables
|
|
||||||
|
|
||||||
✅ **Main Workflow**: {{targetWorkflowPath}}/workflow.md
|
|
||||||
✅ **Step Files**: {{stepCount}} step files created
|
|
||||||
✅ **Templates**: {{templateCount}} templates created
|
|
||||||
✅ **Documentation**: Complete documentation provided
|
|
||||||
|
|
||||||
### Deployment Instructions
|
|
||||||
|
|
||||||
1. **Installation**: Run the BMAD Method installer to your project location
|
|
||||||
2. **Compilation**: Select 'Compile Agents' after confirming the folder
|
|
||||||
3. **Testing**: Use `workflow {{targetWorkflowPath}}` to test
|
|
||||||
|
|
||||||
### Usage Guide
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# To invoke the workflow (from custom location)
|
|
||||||
workflow {{customWorkflowLocation}}/{{workflowName}}
|
|
||||||
|
|
||||||
# Or if standalone is true
|
|
||||||
/{{workflowCommand}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Support
|
|
||||||
|
|
||||||
- Created by: {{user_name}}
|
|
||||||
- Date: {{completionDate}}
|
|
||||||
- Module: {{targetModule}}
|
|
||||||
- Type: {{workflowType}}
|
|
||||||
|
|
||||||
### Thank You!
|
|
||||||
|
|
||||||
Thank you for using the Standalone Workflow Builder. Your workflow has been created following best practices for step-file architecture and collaborative design principles.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
_Workflow creation completed successfully on {{completionDate}}_
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# {{documentTitle}}
|
|
||||||
|
|
||||||
**Created:** {{date}}
|
|
||||||
**Author:** {{user_name}}
|
|
||||||
**Workflow:** {{workflowName}}
|
|
||||||
|
|
||||||
## Executive Summary
|
|
||||||
|
|
||||||
{{executiveSummary}}
|
|
||||||
|
|
||||||
## Details
|
|
||||||
|
|
||||||
{{mainContent}}
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
{{conclusion}}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
_Generated by the {{workflowName}} workflow_
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
## Workflow Design
|
|
||||||
|
|
||||||
### Step Structure
|
|
||||||
|
|
||||||
**Total Steps**: {{totalSteps}}
|
|
||||||
**Step Overview**:
|
|
||||||
{{stepOverview}}
|
|
||||||
|
|
||||||
### Detailed Step Plan
|
|
||||||
|
|
||||||
{{stepDetails}}
|
|
||||||
|
|
||||||
### Interaction Design
|
|
||||||
|
|
||||||
- **Menu Pattern**: {{menuPattern}}
|
|
||||||
- **User Input Points**: {{userInputPoints}}
|
|
||||||
- **AI Autonomy Level**: {{aiAutonomyLevel}}
|
|
||||||
- **Decision Flow**: {{decisionFlow}}
|
|
||||||
|
|
||||||
### Data Flow Architecture
|
|
||||||
|
|
||||||
- **Input Requirements**: {{dataInputRequirements}}
|
|
||||||
- **Intermediate Variables**: {{intermediateVariables}}
|
|
||||||
- **Output Mapping**: {{outputMapping}}
|
|
||||||
- **State Management**: {{stateManagement}}
|
|
||||||
|
|
||||||
### File Organization
|
|
||||||
|
|
||||||
- **Core Files**: {{coreFiles}}
|
|
||||||
- **Templates**: {{templates}}
|
|
||||||
- **Data Files**: {{dataFiles}}
|
|
||||||
- **Supporting Files**: {{supportingFiles}}
|
|
||||||
|
|
||||||
### AI Role Definition
|
|
||||||
|
|
||||||
- **Primary Role**: {{primaryRole}}
|
|
||||||
- **Expertise Areas**: {{expertiseAreas}}
|
|
||||||
- **Communication Style**: {{communicationStyle}}
|
|
||||||
- **Collaboration Approach**: {{collaborationApproach}}
|
|
||||||
|
|
||||||
### Quality Assurance
|
|
||||||
|
|
||||||
- **Validation Points**: {{validationPoints}}
|
|
||||||
- **Error Handling**: {{errorHandling}}
|
|
||||||
- **Recovery Strategies**: {{recoveryStrategies}}
|
|
||||||
- **Success Criteria**: {{designSuccessCriteria}}
|
|
||||||
|
|
||||||
### Special Features
|
|
||||||
|
|
||||||
- **Conditional Logic**: {{conditionalLogic}}
|
|
||||||
- **Branch Points**: {{branchPoints}}
|
|
||||||
- **Integrations**: {{designIntegrations}}
|
|
||||||
- **Multi-Scenario Support**: {{multiScenarioSupport}}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
# Workflow Creation: {{workflow_name}}
|
|
||||||
|
|
||||||
**Created:** {{date}}
|
|
||||||
**Author:** {{user_name}}
|
|
||||||
**Module:** {{targetModule}}
|
|
||||||
**Type:** {{workflowType}}
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
{{projectOverview}}
|
|
||||||
|
|
||||||
## Requirements Collected
|
|
||||||
|
|
||||||
{{requirementsCollected}}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
_This document tracks the workflow creation process. The final workflow will be generated separately._
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
## Requirements Summary
|
|
||||||
|
|
||||||
### Workflow Purpose
|
|
||||||
|
|
||||||
- **Problem to Solve**: {{problemStatement}}
|
|
||||||
- **Primary Users**: {{targetUsers}}
|
|
||||||
- **Main Outcome**: {{primaryOutcome}}
|
|
||||||
- **Usage Frequency**: {{usageFrequency}}
|
|
||||||
|
|
||||||
### Workflow Classification
|
|
||||||
|
|
||||||
- **Type**: {{workflowType}}
|
|
||||||
- **Flow Pattern**: {{flowPattern}}
|
|
||||||
- **Interaction Style**: {{interactionStyle}}
|
|
||||||
- **Instruction Style**: {{instructionStyle}}
|
|
||||||
- **Autonomy Level**: {{autonomyLevel}}
|
|
||||||
|
|
||||||
### Input Requirements
|
|
||||||
|
|
||||||
- **Required Inputs**: {{requiredInputs}}
|
|
||||||
- **Optional Inputs**: {{optionalInputs}}
|
|
||||||
- **Prerequisites**: {{prerequisites}}
|
|
||||||
|
|
||||||
### Output Specifications
|
|
||||||
|
|
||||||
- **Primary Output**: {{primaryOutput}}
|
|
||||||
- **Intermediate Outputs**: {{intermediateOutputs}}
|
|
||||||
- **Output Format**: {{outputFormat}}
|
|
||||||
|
|
||||||
### Technical Constraints
|
|
||||||
|
|
||||||
- **Dependencies**: {{dependencies}}
|
|
||||||
- **Integrations**: {{integrations}}
|
|
||||||
- **Performance Requirements**: {{performanceRequirements}}
|
|
||||||
|
|
||||||
### Target Location
|
|
||||||
|
|
||||||
- **Module**: {{targetModule}}
|
|
||||||
- **Folder Name**: {{workflowFolderName}}
|
|
||||||
- **Target Path**: {{targetWorkflowPath}}
|
|
||||||
- **Custom Workflow Location**: {{customWorkflowLocation}}
|
|
||||||
|
|
||||||
### Success Criteria
|
|
||||||
|
|
||||||
- **Quality Metrics**: {{qualityMetrics}}
|
|
||||||
- **Success Indicators**: {{successIndicators}}
|
|
||||||
- **User Satisfaction**: {{userSatisfactionCriteria}}
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
## Workflow Review Results
|
|
||||||
|
|
||||||
### File Structure Review
|
|
||||||
|
|
||||||
**Status**: {{fileStructureStatus}}
|
|
||||||
|
|
||||||
- Required Files: {{requiredFilesStatus}}
|
|
||||||
- Directory Structure: {{directoryStructureStatus}}
|
|
||||||
- Naming Conventions: {{namingConventionsStatus}}
|
|
||||||
|
|
||||||
### Configuration Validation
|
|
||||||
|
|
||||||
**Status**: {{configValidationStatus}}
|
|
||||||
|
|
||||||
- Metadata Completeness: {{metadataStatus}}
|
|
||||||
- Path Variables: {{pathVariablesStatus}}
|
|
||||||
- Dependencies: {{dependenciesStatus}}
|
|
||||||
|
|
||||||
### Step File Compliance
|
|
||||||
|
|
||||||
**Status**: {{stepComplianceStatus}}
|
|
||||||
|
|
||||||
- Template Structure: {{templateStructureStatus}}
|
|
||||||
- Mandatory Rules: {{mandatoryRulesStatus}}
|
|
||||||
- Menu Implementation: {{menuImplementationStatus}}
|
|
||||||
|
|
||||||
### Cross-File Consistency
|
|
||||||
|
|
||||||
**Status**: {{consistencyStatus}}
|
|
||||||
|
|
||||||
- Variable Naming: {{variableNamingStatus}}
|
|
||||||
- Path References: {{pathReferencesStatus}}
|
|
||||||
- Step Sequence: {{stepSequenceStatus}}
|
|
||||||
|
|
||||||
### Requirements Verification
|
|
||||||
|
|
||||||
**Status**: {{requirementsVerificationStatus}}
|
|
||||||
|
|
||||||
- Problem Addressed: {{problemAddressedStatus}}
|
|
||||||
- User Types Supported: {{userTypesStatus}}
|
|
||||||
- Inputs/Outputs: {{inputsOutputsStatus}}
|
|
||||||
|
|
||||||
### Best Practices Adherence
|
|
||||||
|
|
||||||
**Status**: {{bestPracticesStatus}}
|
|
||||||
|
|
||||||
- File Size Limits: {{fileSizeStatus}}
|
|
||||||
- Collaborative Dialogue: {{collaborativeDialogueStatus}}
|
|
||||||
- Error Handling: {{errorHandlingStatus}}
|
|
||||||
|
|
||||||
### Issues Found
|
|
||||||
|
|
||||||
{{#issues}}
|
|
||||||
|
|
||||||
- **{{severity}}**: {{description}}
|
|
||||||
{{/issues}}
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
# Workflow Creation Plan: {{workflowName}}
|
|
||||||
|
|
||||||
**Created:** {{date}}
|
|
||||||
**Author:** {{user_name}}
|
|
||||||
**Module:** {{targetModule}}
|
|
||||||
**Type:** {{workflowType}}
|
|
||||||
|
|
||||||
## Executive Summary
|
|
||||||
|
|
||||||
{{executiveSummary}}
|
|
||||||
|
|
||||||
## Requirements Analysis
|
|
||||||
|
|
||||||
[Requirements will be appended here from step 2]
|
|
||||||
|
|
||||||
## Detailed Design
|
|
||||||
|
|
||||||
[Design details will be appended here from step 3]
|
|
||||||
|
|
||||||
## Implementation Plan
|
|
||||||
|
|
||||||
[Implementation plan will be appended here from step 4]
|
|
||||||
|
|
||||||
## Review and Validation
|
|
||||||
|
|
||||||
[Review results will be appended here from step 5]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Final Configuration
|
|
||||||
|
|
||||||
### Output Files to Generate
|
|
||||||
|
|
||||||
{{#outputFiles}}
|
|
||||||
|
|
||||||
- {{type}}: {{path}}
|
|
||||||
{{/outputFiles}}
|
|
||||||
|
|
||||||
### Target Location
|
|
||||||
|
|
||||||
- **Folder**: {{targetWorkflowPath}}
|
|
||||||
- **Module**: {{targetModule}}
|
|
||||||
- **Custom Location**: {{customWorkflowLocation}}
|
|
||||||
|
|
||||||
### Final Checklist
|
|
||||||
|
|
||||||
- [ ] All requirements documented
|
|
||||||
- [ ] Workflow designed and approved
|
|
||||||
- [ ] Files generated successfully
|
|
||||||
- [ ] Workflow tested and validated
|
|
||||||
|
|
||||||
## Ready for Implementation
|
|
||||||
|
|
||||||
When you approve this plan, I'll generate all the workflow files in the specified location with the exact structure and content outlined above.
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Create Workflow
|
name: create-workflow
|
||||||
description: Create structured standalone workflows using markdown-based step architecture
|
description: Create structured standalone workflows using markdown-based step architecture
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Edit Agent
|
name: edit-agent
|
||||||
description: Edit existing BMAD agents while following all best practices and conventions
|
description: Edit existing BMAD agents while following all best practices and conventions
|
||||||
web_bundle: false
|
web_bundle: false
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Edit Workflow
|
name: edit-workflow
|
||||||
description: Intelligent workflow editor that helps modify existing workflows while following best practices
|
description: Intelligent workflow editor that helps modify existing workflows while following best practices
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -132,10 +132,10 @@ For each deviation:
|
||||||
|
|
||||||
"**Initialization Validation:**"
|
"**Initialization Validation:**"
|
||||||
|
|
||||||
- Configuration Loading uses correct path format: `{project-root}/{bmad_folder}/[module]/config.yaml` (variable substitution pattern)
|
- Configuration Loading uses correct path format: `{project-root}/{*bmad_folder*}/[module]/config.yaml` (variable substitution pattern)
|
||||||
- First step follows pattern: `step-01-init.md` OR documented deviation
|
- First step follows pattern: `step-01-init.md` OR documented deviation
|
||||||
- Required config variables properly listed
|
- Required config variables properly listed
|
||||||
- Variables use proper substitution pattern: {project-root}, {bmad_folder}, {workflow_path}, etc.
|
- Variables use proper substitution pattern: {project-root}, {_bmad_folder_}, {workflow_path}, etc.
|
||||||
|
|
||||||
For violations:
|
For violations:
|
||||||
|
|
||||||
|
|
@ -198,7 +198,7 @@ Append to {complianceReportFile}:
|
||||||
|
|
||||||
"**Phase 1 Complete:** Workflow.md validation finished with detailed violation analysis.
|
"**Phase 1 Complete:** Workflow.md validation finished with detailed violation analysis.
|
||||||
|
|
||||||
**Ready for Phase 2:** Step-by-step validation against step-template.md
|
**Ready for Phase 3:** Step-by-step validation against step-template.md
|
||||||
|
|
||||||
This will check each step file for:
|
This will check each step file for:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,8 +138,8 @@ Check for proper references:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Task References
|
# Task References
|
||||||
advancedElicitationTask: '{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml'
|
advancedElicitationTask: '{project-root}/{*bmad_folder*}/core/tasks/advanced-elicitation.xml'
|
||||||
partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md'
|
partyModeWorkflow: '{project-root}/{*bmad_folder*}/core/workflows/party-mode/workflow.md'
|
||||||
```
|
```
|
||||||
|
|
||||||
**Violations to document:**
|
**Violations to document:**
|
||||||
|
|
@ -186,7 +186,7 @@ For each step:
|
||||||
|
|
||||||
"**Path Variable Validation:**"
|
"**Path Variable Validation:**"
|
||||||
|
|
||||||
- Check format: `{project-root}/{bmad_folder}/bmb/...` vs `{project-root}/src/modules/bmb/...`
|
- Check format: `{project-root}/{*bmad_folder*}/bmb/...` vs `{project-root}/src/modules/bmb/...`
|
||||||
- Ensure consistent variable usage across all step files
|
- Ensure consistent variable usage across all step files
|
||||||
- Validate relative vs absolute path usage
|
- Validate relative vs absolute path usage
|
||||||
|
|
||||||
|
|
@ -232,13 +232,13 @@ For each step file with violations:
|
||||||
2. [Second most frequent]
|
2. [Second most frequent]
|
||||||
3. [Third most frequent]
|
3. [Third most frequent]
|
||||||
|
|
||||||
**Ready for Phase 3:** Holistic workflow analysis
|
**Ready for Phase 4:** File Validation workflow analysis
|
||||||
|
|
||||||
- Flow optimization assessment
|
- Flow optimization assessment
|
||||||
- Goal alignment verification
|
- Goal alignment verification
|
||||||
- Meta-workflow failure analysis
|
- Meta-workflow failure analysis
|
||||||
|
|
||||||
**Select an Option:** [C] Continue to Holistic Analysis [X] Exit"
|
**Select an Option:** [C] Continue to File Validation [X] Exit"
|
||||||
|
|
||||||
## Menu Handling Logic:
|
## Menu Handling Logic:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -253,7 +253,7 @@ For each file with issues:
|
||||||
- **Formatting Standards:** [summary of markdown compliance issues]
|
- **Formatting Standards:** [summary of markdown compliance issues]
|
||||||
- **Data Validation:** [summary of CSV standards compliance]
|
- **Data Validation:** [summary of CSV standards compliance]
|
||||||
|
|
||||||
**Ready for Phase 5:** Holistic workflow analysis
|
**Ready for Phase 5:** Intent Spectrum Validation analysis
|
||||||
|
|
||||||
- Flow validation and goal alignment
|
- Flow validation and goal alignment
|
||||||
- Meta-workflow failure analysis
|
- Meta-workflow failure analysis
|
||||||
|
|
|
||||||
|
|
@ -222,7 +222,7 @@ Append to {complianceReportFile}:
|
||||||
- **User Understanding:** Confirmed implications and benefits
|
- **User Understanding:** Confirmed implications and benefits
|
||||||
- **Implementation Ready:** Guidance provided for maintaining position
|
- **Implementation Ready:** Guidance provided for maintaining position
|
||||||
|
|
||||||
**Ready for Phase 6:** Holistic workflow analysis
|
**Ready for Phase 6:** Web Subprocess Validation analysis
|
||||||
|
|
||||||
- Flow validation and completion paths
|
- Flow validation and completion paths
|
||||||
- Goal alignment and optimization assessment
|
- Goal alignment and optimization assessment
|
||||||
|
|
|
||||||
|
|
@ -315,7 +315,7 @@ Append to {complianceReportFile}:
|
||||||
- **Performance Impact:** [expected efficiency gains]
|
- **Performance Impact:** [expected efficiency gains]
|
||||||
- **User Experience Benefits:** [specific improvements]
|
- **User Experience Benefits:** [specific improvements]
|
||||||
|
|
||||||
**Ready for Phase 6:** Holistic workflow analysis
|
**Ready for Phase 7:** Holistic workflow analysis
|
||||||
|
|
||||||
- Flow validation and completion paths
|
- Flow validation and completion paths
|
||||||
- Goal alignment with optimized resources
|
- Goal alignment with optimized resources
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,7 @@ Evaluate workflow from user perspective:
|
||||||
- **Optimization Opportunities:** [number key improvements identified]
|
- **Optimization Opportunities:** [number key improvements identified]
|
||||||
- **Meta-Workflow Failures:** [number issues that should have been prevented]
|
- **Meta-Workflow Failures:** [number issues that should have been prevented]
|
||||||
|
|
||||||
**Ready for Phase 6:** Comprehensive compliance report generation
|
**Ready for Phase 8:** Comprehensive compliance report generation
|
||||||
|
|
||||||
- All findings compiled into structured report
|
- All findings compiled into structured report
|
||||||
- Severity-ranked violation list
|
- Severity-ranked violation list
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Workflow Compliance Check
|
name: workflow-compliance-check
|
||||||
description: Systematic validation of workflows against BMAD standards with adversarial analysis and detailed reporting
|
description: Systematic validation of workflows against BMAD standards with adversarial analysis and detailed reporting
|
||||||
web_bundle: false
|
web_bundle: false
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,8 @@ agent:
|
||||||
exec: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.md"
|
exec: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.md"
|
||||||
description: Create an Architecture Document to Guide Development of a PRD (required for BMad Method projects)
|
description: Create an Architecture Document to Guide Development of a PRD (required for BMad Method projects)
|
||||||
|
|
||||||
- trigger: validate-architecture
|
|
||||||
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml"
|
|
||||||
description: Validate Architecture Document (Recommended, use another LLM and fresh context for best results)
|
|
||||||
|
|
||||||
- trigger: implementation-readiness
|
- trigger: implementation-readiness
|
||||||
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml"
|
exec: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/implementation-readiness/workflow.md"
|
||||||
description: Validate PRD, UX, Architecture, Epics and stories aligned (Optional but recommended before development)
|
description: Validate PRD, UX, Architecture, Epics and stories aligned (Optional but recommended before development)
|
||||||
|
|
||||||
- trigger: create-excalidraw-diagram
|
- trigger: create-excalidraw-diagram
|
||||||
|
|
|
||||||
|
|
@ -27,14 +27,14 @@ agent:
|
||||||
exec: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.md"
|
exec: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.md"
|
||||||
description: Create Product Requirements Document (PRD) (Required for BMad Method flow)
|
description: Create Product Requirements Document (PRD) (Required for BMad Method flow)
|
||||||
|
|
||||||
- trigger: validate-prd
|
|
||||||
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml"
|
|
||||||
description: Validate PRD (Highly Recommended, use fresh context and different LLM for best results)
|
|
||||||
|
|
||||||
- trigger: create-epics-and-stories
|
- trigger: create-epics-and-stories
|
||||||
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml"
|
exec: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md"
|
||||||
description: Create Epics and User Stories from PRD (Required for BMad Method flow AFTER the Architecture is completed)
|
description: Create Epics and User Stories from PRD (Required for BMad Method flow AFTER the Architecture is completed)
|
||||||
|
|
||||||
|
- trigger: implementation-readiness
|
||||||
|
exec: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/implementation-readiness/workflow.md"
|
||||||
|
description: Validate PRD, UX, Architecture, Epics and stories aligned (Optional but recommended before development)
|
||||||
|
|
||||||
- trigger: correct-course
|
- trigger: correct-course
|
||||||
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml"
|
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml"
|
||||||
description: Course Correction Analysis (optional during implementation when things go off track)
|
description: Course Correction Analysis (optional during implementation when things go off track)
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,8 @@ Stories move through these states in the sprint status file:
|
||||||
|
|
||||||
**As Needed:**
|
**As Needed:**
|
||||||
|
|
||||||
- Run `workflow-status` anytime to check progress
|
- Run `sprint-status` anytime in Phase 4 to inspect sprint-status.yaml and get the next implementation command
|
||||||
|
- Run `workflow-status` for cross-phase routing and project-level paths
|
||||||
- Run `correct-course` if significant changes needed
|
- Run `correct-course` if significant changes needed
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -155,7 +156,7 @@ PRD (PM) → Architecture (Architect)
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
**Q: Which workflow should I run next?**
|
**Q: Which workflow should I run next?**
|
||||||
A: Run `workflow-status` - it reads the sprint status file and tells you exactly what to do.
|
A: Run `workflow-status` - it reads the sprint status file and tells you exactly what to do. During implementation (Phase 4) run `sprint-status` (fast check against sprint-status.yaml).
|
||||||
|
|
||||||
**Q: Story needs significant changes mid-implementation?**
|
**Q: Story needs significant changes mid-implementation?**
|
||||||
A: Run `correct-course` to analyze impact and route appropriately.
|
A: Run `correct-course` to analyze impact and route appropriately.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Product Brief Workflow
|
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 comprehensive product briefs through collaborative step-by-step discovery as creative Business Analyst working with the user as peers.
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
name: Research Workflow
|
name: research
|
||||||
description: Conduct comprehensive research across multiple domains using current web data and verified sources - Market, Technical, Domain and other research types.
|
description: Conduct comprehensive research across multiple domains using current web data and verified sources - Market, Technical, Domain and other research types.
|
||||||
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Research Workflow
|
# Research Workflow
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
---
|
||||||
|
name: create-ux-design
|
||||||
|
description: Work with a peer UX Design expert to plan your applications UX patterns, look and feel.
|
||||||
|
web_bundle: true
|
||||||
|
---
|
||||||
|
|
||||||
# Create UX Design Workflow
|
# Create UX Design Workflow
|
||||||
|
|
||||||
**Goal:** Create comprehensive UX design specifications through collaborative visual exploration and informed decision-making where you act as a UX facilitator working with a product stakeholder.
|
**Goal:** Create comprehensive UX design specifications through collaborative visual exploration and informed decision-making where you act as a UX facilitator working with a product stakeholder.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
name: PRD Workflow
|
name: create-prd
|
||||||
description: Creates a comprehensive PRDs through collaborative step-by-step discovery between two product managers working as peers.
|
description: Creates a comprehensive PRDs through collaborative step-by-step discovery between two product managers working as peers.
|
||||||
main_config: `{project-root}/{bmad_folder}/bmm/config.yaml`
|
main_config: '{project-root}/{bmad_folder}/bmm/config.yaml'
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
name: Architecture Workflow
|
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: 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.
|
||||||
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Architecture Workflow
|
# Architecture Workflow
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: 'Create Epics and Stories'
|
name: create-epics-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: '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.'
|
||||||
web_bundle: true
|
web_bundle: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: 'Implementation Readiness'
|
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: '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.'
|
||||||
web_bundle: false
|
web_bundle: false
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,174 @@
|
||||||
|
# Sprint Status - Multi-Mode Service
|
||||||
|
|
||||||
|
<critical>The workflow execution engine is governed by: {project-root}/{bmad_folder}/core/tasks/workflow.xml</critical>
|
||||||
|
<critical>You MUST have already loaded and processed: {project-root}/{bmad_folder}/bmm/workflows/4-implementation/sprint-status/workflow.yaml</critical>
|
||||||
|
<critical>Modes: interactive (default), validate, data</critical>
|
||||||
|
<critical>⚠️ ABSOLUTELY NO TIME ESTIMATES. Do NOT mention hours, days, weeks, or timelines.</critical>
|
||||||
|
|
||||||
|
<workflow>
|
||||||
|
|
||||||
|
<step n="0" goal="Determine execution mode">
|
||||||
|
<action>Set mode = {{mode}} if provided by caller; otherwise mode = "interactive"</action>
|
||||||
|
|
||||||
|
<check if="mode == data">
|
||||||
|
<action>Jump to Step 20</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="mode == validate">
|
||||||
|
<action>Jump to Step 30</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="mode == interactive">
|
||||||
|
<action>Continue to Step 1</action>
|
||||||
|
</check>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="1" goal="Locate sprint status file">
|
||||||
|
<action>Try {sprint_status_file}</action>
|
||||||
|
<check if="file not found">
|
||||||
|
<output>❌ sprint-status.yaml not found.
|
||||||
|
Run `/bmad:bmm:workflows:sprint-planning` to generate it, then rerun sprint-status.</output>
|
||||||
|
<action>Exit workflow</action>
|
||||||
|
</check>
|
||||||
|
<action>Continue to Step 2</action>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="2" goal="Read and parse sprint-status.yaml">
|
||||||
|
<action>Read the FULL file: {sprint_status_file}</action>
|
||||||
|
<action>Parse fields: generated, project, project_key, tracking_system, story_location</action>
|
||||||
|
<action>Parse development_status map. Classify keys:</action>
|
||||||
|
- Epics: keys starting with "epic-" (and not ending with "-retrospective")
|
||||||
|
- Retrospectives: keys ending with "-retrospective"
|
||||||
|
- Stories: everything else (e.g., 1-2-login-form)
|
||||||
|
<action>Count story statuses: backlog, drafted, ready-for-dev, in-progress, review, done</action>
|
||||||
|
<action>Count epic statuses: backlog, contexted</action>
|
||||||
|
<action>Detect risks:</action>
|
||||||
|
- Stories in review but no reviewer assigned context → suggest `/bmad:bmm:workflows:code-review`
|
||||||
|
- Stories in in-progress with no ready-for-dev items behind them → keep focus on the active story
|
||||||
|
- All epics backlog/contexted but no stories drafted → prompt to run `/bmad:bmm:workflows:create-story`
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="3" goal="Select next action recommendation">
|
||||||
|
<action>Pick the next recommended workflow using priority:</action>
|
||||||
|
1. If any story status == in-progress → recommend `dev-story` for the first in-progress story
|
||||||
|
2. Else if any story status == review → recommend `code-review` for the first review story
|
||||||
|
3. Else if any story status == ready-for-dev → recommend `dev-story`
|
||||||
|
4. Else if any story status == drafted → recommend `story-ready`
|
||||||
|
5. Else if any story status == backlog → recommend `create-story`
|
||||||
|
6. Else if any epic status == backlog → recommend `epic-tech-context`
|
||||||
|
7. Else if retrospectives are optional → recommend `retrospective`
|
||||||
|
8. Else → All implementation items done; suggest `workflow-status` to plan next phase
|
||||||
|
<action>Store selected recommendation as: next_story_id, next_workflow_id, next_agent (SM/DEV as appropriate)</action>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="4" goal="Display summary">
|
||||||
|
<output>
|
||||||
|
## 📊 Sprint Status
|
||||||
|
|
||||||
|
- Project: {{project}} ({{project_key}})
|
||||||
|
- Tracking: {{tracking_system}}
|
||||||
|
- Status file: {sprint_status_file}
|
||||||
|
|
||||||
|
**Stories:** backlog {{count_backlog}}, drafted {{count_drafted}}, ready-for-dev {{count_ready}}, in-progress {{count_in_progress}}, review {{count_review}}, done {{count_done}}
|
||||||
|
|
||||||
|
**Epics:** backlog {{epic_backlog}}, contexted {{epic_contexted}}
|
||||||
|
|
||||||
|
**Next Recommendation:** /bmad:bmm:workflows:{{next_workflow_id}} ({{next_story_id}})
|
||||||
|
|
||||||
|
{{#if risks}}
|
||||||
|
**Risks:**
|
||||||
|
{{#each risks}}
|
||||||
|
|
||||||
|
- {{this}}
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if by_epic}}
|
||||||
|
**Per Epic:**
|
||||||
|
{{#each by_epic}}
|
||||||
|
|
||||||
|
- {{epic_id}}: context={{context_status}}, stories → backlog {{backlog}}, drafted {{drafted}}, ready {{ready_for_dev}}, in-progress {{in_progress}}, review {{review}}, done {{done}}
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
</output>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="5" goal="Offer actions">
|
||||||
|
<ask>Pick an option:
|
||||||
|
1) Run recommended workflow now
|
||||||
|
2) Show all stories grouped by status
|
||||||
|
3) Show raw sprint-status.yaml
|
||||||
|
4) Exit
|
||||||
|
Choice:</ask>
|
||||||
|
|
||||||
|
<check if="choice == 1">
|
||||||
|
<output>Run `/bmad:bmm:workflows:{{next_workflow_id}}`.
|
||||||
|
If the command targets a story, set `story_key={{next_story_id}}` when prompted.</output>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="choice == 2">
|
||||||
|
<output>
|
||||||
|
### Stories by Status
|
||||||
|
- In Progress: {{stories_in_progress}}
|
||||||
|
- Review: {{stories_in_review}}
|
||||||
|
- Ready for Dev: {{stories_ready_for_dev}}
|
||||||
|
- Drafted: {{stories_drafted}}
|
||||||
|
- Backlog: {{stories_backlog}}
|
||||||
|
- Done: {{stories_done}}
|
||||||
|
</output>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="choice == 3">
|
||||||
|
<action>Display the full contents of {sprint_status_file}</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="choice == 4">
|
||||||
|
<action>Exit workflow</action>
|
||||||
|
</check>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<!-- ========================= -->
|
||||||
|
<!-- Data mode for other flows -->
|
||||||
|
<!-- ========================= -->
|
||||||
|
|
||||||
|
<step n="20" goal="Data mode output">
|
||||||
|
<action>Load and parse {sprint_status_file} same as Step 2</action>
|
||||||
|
<action>Compute recommendation same as Step 3</action>
|
||||||
|
<template-output>next_workflow_id = {{next_workflow_id}}</template-output>
|
||||||
|
<template-output>next_story_id = {{next_story_id}}</template-output>
|
||||||
|
<template-output>count_backlog = {{count_backlog}}</template-output>
|
||||||
|
<template-output>count_drafted = {{count_drafted}}</template-output>
|
||||||
|
<template-output>count_ready = {{count_ready}}</template-output>
|
||||||
|
<template-output>count_in_progress = {{count_in_progress}}</template-output>
|
||||||
|
<template-output>count_review = {{count_review}}</template-output>
|
||||||
|
<template-output>count_done = {{count_done}}</template-output>
|
||||||
|
<template-output>epic_backlog = {{epic_backlog}}</template-output>
|
||||||
|
<template-output>epic_contexted = {{epic_contexted}}</template-output>
|
||||||
|
<template-output>warnings = {{risks}}</template-output>
|
||||||
|
<action>Return to caller</action>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<!-- ========================= -->
|
||||||
|
<!-- Validate mode -->
|
||||||
|
<!-- ========================= -->
|
||||||
|
|
||||||
|
<step n="30" goal="Validate sprint-status file">
|
||||||
|
<action>Check that {sprint_status_file} exists</action>
|
||||||
|
<check if="missing">
|
||||||
|
<template-output>is_valid = false</template-output>
|
||||||
|
<template-output>error = "sprint-status.yaml missing"</template-output>
|
||||||
|
<template-output>suggestion = "Run sprint-planning to create it"</template-output>
|
||||||
|
<action>Return</action>
|
||||||
|
</check>
|
||||||
|
<action>Read file and verify it has a development_status section with at least one entry</action>
|
||||||
|
<check if="validation fails">
|
||||||
|
<template-output>is_valid = false</template-output>
|
||||||
|
<template-output>error = "development_status missing or empty"</template-output>
|
||||||
|
<template-output>suggestion = "Re-run sprint-planning or repair the file manually"</template-output>
|
||||||
|
<action>Return</action>
|
||||||
|
</check>
|
||||||
|
<template-output>is_valid = true</template-output>
|
||||||
|
<template-output>message = "sprint-status.yaml present and parsable"</template-output>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
</workflow>
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Sprint Status - Implementation Tracker
|
||||||
|
name: sprint-status
|
||||||
|
description: "Summarize sprint-status.yaml, surface risks, and route to the right implementation workflow."
|
||||||
|
author: "BMad"
|
||||||
|
|
||||||
|
# Critical variables from config
|
||||||
|
config_source: "{project-root}/{bmad_folder}/bmm/config.yaml"
|
||||||
|
output_folder: "{config_source}:output_folder"
|
||||||
|
user_name: "{config_source}:user_name"
|
||||||
|
communication_language: "{config_source}:communication_language"
|
||||||
|
document_output_language: "{config_source}:document_output_language"
|
||||||
|
date: system-generated
|
||||||
|
sprint_artifacts: "{config_source}:sprint_artifacts"
|
||||||
|
|
||||||
|
# Workflow components
|
||||||
|
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/sprint-status"
|
||||||
|
instructions: "{installed_path}/instructions.md"
|
||||||
|
|
||||||
|
# Inputs
|
||||||
|
variables:
|
||||||
|
sprint_status_file: "{sprint_artifacts}/sprint-status.yaml || {output_folder}/sprint-status.yaml"
|
||||||
|
tracking_system: "file-system"
|
||||||
|
|
||||||
|
# Smart input file references
|
||||||
|
input_file_patterns:
|
||||||
|
sprint_status:
|
||||||
|
description: "Sprint status file generated by sprint-planning"
|
||||||
|
whole: "{sprint_artifacts}/sprint-status.yaml || {output_folder}/sprint-status.yaml"
|
||||||
|
load_strategy: "FULL_LOAD"
|
||||||
|
|
||||||
|
# Standalone so IDE commands get generated
|
||||||
|
standalone: true
|
||||||
|
|
||||||
|
# No web bundle needed
|
||||||
|
web_bundle: false
|
||||||
|
|
@ -32,18 +32,115 @@
|
||||||
</check>
|
</check>
|
||||||
|
|
||||||
<check if="Mode B">
|
<check if="Mode B">
|
||||||
<ask>**[t] Plan first** - Create tech-spec then implement
|
|
||||||
|
<!-- Escalation Threshold: Lightweight check - should we invoke scale-adaptive? -->
|
||||||
|
|
||||||
|
<action>Evaluate escalation threshold against user input (minimal tokens, no file loading):
|
||||||
|
|
||||||
|
**Triggers escalation** (if 2+ signals present):
|
||||||
|
|
||||||
|
- Multiple components mentioned (e.g., dashboard + api + database)
|
||||||
|
- System-level language (e.g., platform, integration, architecture)
|
||||||
|
- Uncertainty about approach (e.g., "how should I", "best way to")
|
||||||
|
- Multi-layer scope (e.g., UI + backend + data together)
|
||||||
|
- Extended timeframe (e.g., "this week", "over the next few days")
|
||||||
|
|
||||||
|
**Reduces signal:**
|
||||||
|
|
||||||
|
- Simplicity markers (e.g., "just", "quickly", "fix", "bug", "typo", "simple", "basic", "minor")
|
||||||
|
- Single file/component focus
|
||||||
|
- Confident, specific request
|
||||||
|
|
||||||
|
Use holistic judgment, not mechanical keyword matching.</action>
|
||||||
|
|
||||||
|
<!-- No Escalation: Simple request, offer existing choice -->
|
||||||
|
<check if="escalation threshold NOT triggered">
|
||||||
|
<ask>**[t] Plan first** - Create tech-spec then implement
|
||||||
**[e] Execute directly** - Start now</ask>
|
**[e] Execute directly** - Start now</ask>
|
||||||
|
|
||||||
<check if="t">
|
<check if="t">
|
||||||
<action>Load and execute {create_tech_spec_workflow}</action>
|
<action>Load and execute {create_tech_spec_workflow}</action>
|
||||||
<action>Continue to implementation after spec complete</action>
|
<action>Continue to implementation after spec complete</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="e">
|
||||||
|
<ask>Any additional guidance before I begin? (patterns, files, constraints) Or "go" to start.</ask>
|
||||||
|
<goto>step_2</goto>
|
||||||
|
</check>
|
||||||
|
|
||||||
</check>
|
</check>
|
||||||
|
|
||||||
<check if="e">
|
<!-- Escalation Triggered: Load scale-adaptive and evaluate level -->
|
||||||
<ask>Any additional guidance before I begin? (patterns, files, constraints) Or "go" to start.</ask>
|
<check if="escalation threshold triggered">
|
||||||
<goto>step_2</goto>
|
<action>Load {project_levels} and evaluate user input against detection_hints.keywords</action>
|
||||||
|
<action>Determine level (0-4) using scale-adaptive definitions</action>
|
||||||
|
|
||||||
|
<!-- Level 0: Scale-adaptive confirms simple, fall back to standard choice -->
|
||||||
|
<check if="level 0">
|
||||||
|
<ask>**[t] Plan first** - Create tech-spec then implement
|
||||||
|
|
||||||
|
**[e] Execute directly** - Start now</ask>
|
||||||
|
|
||||||
|
<check if="t">
|
||||||
|
<action>Load and execute {create_tech_spec_workflow}</action>
|
||||||
|
<action>Continue to implementation after spec complete</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="e">
|
||||||
|
<ask>Any additional guidance before I begin? (patterns, files, constraints) Or "go" to start.</ask>
|
||||||
|
<goto>step_2</goto>
|
||||||
|
</check>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="level 1 or 2 or couldn't determine level">
|
||||||
|
<ask>This looks like a focused feature with multiple components.
|
||||||
|
|
||||||
|
**[t] Create tech-spec first** (recommended)
|
||||||
|
**[w] Seems bigger than quick-dev** — see what BMad Method recommends (workflow-init)
|
||||||
|
**[e] Execute directly**</ask>
|
||||||
|
|
||||||
|
<check if="t">
|
||||||
|
<action>Load and execute {create_tech_spec_workflow}</action>
|
||||||
|
<action>Continue to implementation after spec complete</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="w">
|
||||||
|
<action>Load and execute {workflow_init}</action>
|
||||||
|
<action>EXIT quick-dev - user has been routed to BMad Method</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="e">
|
||||||
|
<ask>Any additional guidance before I begin? (patterns, files, constraints) Or "go" to start.</ask>
|
||||||
|
<goto>step_2</goto>
|
||||||
|
</check>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<!-- Level 3+: BMad Method territory, recommend workflow-init -->
|
||||||
|
<check if="level 3 or higher">
|
||||||
|
<ask>This sounds like platform/system work.
|
||||||
|
|
||||||
|
**[w] Start BMad Method** (recommended) (workflow-init)
|
||||||
|
**[t] Create tech-spec** (lighter planning)
|
||||||
|
**[e] Execute directly** - feeling lucky</ask>
|
||||||
|
|
||||||
|
<check if="w">
|
||||||
|
<action>Load and execute {workflow_init}</action>
|
||||||
|
<action>EXIT quick-dev - user has been routed to BMad Method</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="t">
|
||||||
|
<action>Load and execute {create_tech_spec_workflow}</action>
|
||||||
|
<action>Continue to implementation after spec complete</action>
|
||||||
|
</check>
|
||||||
|
|
||||||
|
<check if="e">
|
||||||
|
<ask>Any additional guidance before I begin? (patterns, files, constraints) Or "go" to start.</ask>
|
||||||
|
<goto>step_2</goto>
|
||||||
|
</check>
|
||||||
|
</check>
|
||||||
|
|
||||||
</check>
|
</check>
|
||||||
|
|
||||||
</check>
|
</check>
|
||||||
|
|
||||||
</step>
|
</step>
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,9 @@ create_tech_spec_workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quic
|
||||||
party_mode_exec: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md"
|
party_mode_exec: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.md"
|
||||||
advanced_elicitation: "{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml"
|
advanced_elicitation: "{project-root}/{bmad_folder}/core/tasks/advanced-elicitation.xml"
|
||||||
|
|
||||||
|
# Routing resources (lazy-loaded)
|
||||||
|
project_levels: "{project-root}/{bmad_folder}/bmm/workflows/workflow-status/project-levels.yaml"
|
||||||
|
workflow_init: "{project-root}/{bmad_folder}/bmm/workflows/workflow-status/init/workflow.yaml"
|
||||||
|
|
||||||
standalone: true
|
standalone: true
|
||||||
web_bundle: false
|
web_bundle: false
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
name: Generate Project Context
|
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: 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.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,11 @@ class Installer {
|
||||||
content = content.replaceAll('{bmad_folder}', bmadFolderName);
|
content = content.replaceAll('{bmad_folder}', bmadFolderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
||||||
|
if (content.includes('{*bmad_folder*}')) {
|
||||||
|
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
|
}
|
||||||
|
|
||||||
// Process AgentVibes injection points
|
// Process AgentVibes injection points
|
||||||
content = this.processTTSInjectionPoints(content);
|
content = this.processTTSInjectionPoints(content);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ class ManifestGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recursively find and parse workflow.yaml files
|
* Recursively find and parse workflow.yaml and workflow.md files
|
||||||
*/
|
*/
|
||||||
async getWorkflowsFromPath(basePath, moduleName) {
|
async getWorkflowsFromPath(basePath, moduleName) {
|
||||||
const workflows = [];
|
const workflows = [];
|
||||||
|
|
@ -126,11 +126,23 @@ class ManifestGenerator {
|
||||||
// Recurse into subdirectories
|
// Recurse into subdirectories
|
||||||
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
||||||
await findWorkflows(fullPath, newRelativePath);
|
await findWorkflows(fullPath, newRelativePath);
|
||||||
} else if (entry.name === 'workflow.yaml') {
|
} else if (entry.name === 'workflow.yaml' || entry.name === 'workflow.md') {
|
||||||
// Parse workflow file
|
// Parse workflow file (both YAML and MD formats)
|
||||||
try {
|
try {
|
||||||
const content = await fs.readFile(fullPath, 'utf8');
|
const content = await fs.readFile(fullPath, 'utf8');
|
||||||
const workflow = yaml.load(content);
|
|
||||||
|
let workflow;
|
||||||
|
if (entry.name === 'workflow.yaml') {
|
||||||
|
// Parse YAML workflow
|
||||||
|
workflow = yaml.load(content);
|
||||||
|
} else {
|
||||||
|
// Parse MD workflow with YAML frontmatter
|
||||||
|
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
||||||
|
if (!frontmatterMatch) {
|
||||||
|
continue; // Skip MD files without frontmatter
|
||||||
|
}
|
||||||
|
workflow = yaml.load(frontmatterMatch[1]);
|
||||||
|
}
|
||||||
|
|
||||||
// Skip template workflows (those with placeholder values)
|
// Skip template workflows (those with placeholder values)
|
||||||
if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
|
if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
|
||||||
|
|
@ -141,18 +153,15 @@ class ManifestGenerator {
|
||||||
// Build relative path for installation
|
// Build relative path for installation
|
||||||
const installPath =
|
const installPath =
|
||||||
moduleName === 'core'
|
moduleName === 'core'
|
||||||
? `${this.bmadFolderName}/core/workflows/${relativePath}/workflow.yaml`
|
? `${this.bmadFolderName}/core/workflows/${relativePath}/${entry.name}`
|
||||||
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}/workflow.yaml`;
|
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}/${entry.name}`;
|
||||||
|
|
||||||
// Check for standalone property (default: false)
|
|
||||||
const standalone = workflow.standalone === true;
|
|
||||||
|
|
||||||
|
// ALL workflows now generate commands - no standalone property needed
|
||||||
workflows.push({
|
workflows.push({
|
||||||
name: workflow.name,
|
name: workflow.name,
|
||||||
description: workflow.description.replaceAll('"', '""'), // Escape quotes for CSV
|
description: workflow.description.replaceAll('"', '""'), // Escape quotes for CSV
|
||||||
module: moduleName,
|
module: moduleName,
|
||||||
path: installPath,
|
path: installPath,
|
||||||
standalone: standalone,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add to files list
|
// Add to files list
|
||||||
|
|
@ -541,12 +550,12 @@ class ManifestGenerator {
|
||||||
async writeWorkflowManifest(cfgDir) {
|
async writeWorkflowManifest(cfgDir) {
|
||||||
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
||||||
|
|
||||||
// Create CSV header with standalone column
|
// Create CSV header - removed standalone column as ALL workflows now generate commands
|
||||||
let csv = 'name,description,module,path,standalone\n';
|
let csv = 'name,description,module,path\n';
|
||||||
|
|
||||||
// Add all workflows
|
// Add all workflows - no standalone property needed anymore
|
||||||
for (const workflow of this.workflows) {
|
for (const workflow of this.workflows) {
|
||||||
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}","${workflow.standalone}"\n`;
|
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}"\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
await fs.writeFile(csvPath, csv);
|
await fs.writeFile(csvPath, csv);
|
||||||
|
|
|
||||||
|
|
@ -536,6 +536,11 @@ class BaseIdeSetup {
|
||||||
if (typeof content === 'string' && content.includes('{bmad_folder}')) {
|
if (typeof content === 'string' && content.includes('{bmad_folder}')) {
|
||||||
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
||||||
|
if (typeof content === 'string' && content.includes('{*bmad_folder*}')) {
|
||||||
|
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
|
}
|
||||||
await this.ensureDir(path.dirname(filePath));
|
await this.ensureDir(path.dirname(filePath));
|
||||||
await fs.writeFile(filePath, content, 'utf8');
|
await fs.writeFile(filePath, content, 'utf8');
|
||||||
}
|
}
|
||||||
|
|
@ -563,6 +568,11 @@ class BaseIdeSetup {
|
||||||
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
||||||
|
if (content.includes('{*bmad_folder*}')) {
|
||||||
|
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
|
}
|
||||||
|
|
||||||
// Write to dest with replaced content
|
// Write to dest with replaced content
|
||||||
await fs.writeFile(dest, content, 'utf8');
|
await fs.writeFile(dest, content, 'utf8');
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
||||||
const { BaseIdeSetup } = require('./_base-ide');
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auggie CLI setup handler
|
* Auggie CLI setup handler
|
||||||
|
|
@ -33,10 +34,23 @@ class AuggieSetup extends BaseIdeSetup {
|
||||||
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
||||||
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
||||||
|
|
||||||
// Get tasks, tools, and workflows (standalone only)
|
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
||||||
const tasks = await this.getTasks(bmadDir, true);
|
const tasks = await this.getTasks(bmadDir, true);
|
||||||
const tools = await this.getTools(bmadDir, true);
|
const tools = await this.getTools(bmadDir, true);
|
||||||
const workflows = await this.getWorkflows(bmadDir, true);
|
|
||||||
|
// Get ALL workflows using the new workflow command generator
|
||||||
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
|
// Convert workflow artifacts to expected format
|
||||||
|
const workflows = workflowArtifacts
|
||||||
|
.filter((artifact) => artifact.type === 'workflow-command')
|
||||||
|
.map((artifact) => ({
|
||||||
|
module: artifact.module,
|
||||||
|
name: path.basename(artifact.relativePath, '.md'),
|
||||||
|
path: artifact.sourcePath,
|
||||||
|
content: artifact.content,
|
||||||
|
}));
|
||||||
|
|
||||||
const bmadCommandsDir = path.join(location, 'bmad');
|
const bmadCommandsDir = path.join(location, 'bmad');
|
||||||
const agentsDir = path.join(bmadCommandsDir, 'agents');
|
const agentsDir = path.join(bmadCommandsDir, 'agents');
|
||||||
|
|
@ -73,13 +87,11 @@ class AuggieSetup extends BaseIdeSetup {
|
||||||
await this.writeFile(targetPath, commandContent);
|
await this.writeFile(targetPath, commandContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install workflows
|
// Install workflows (already generated commands)
|
||||||
for (const workflow of workflows) {
|
for (const workflow of workflows) {
|
||||||
const content = await this.readFile(workflow.path);
|
// Use the pre-generated workflow command content
|
||||||
const commandContent = this.createWorkflowCommand(workflow, content);
|
|
||||||
|
|
||||||
const targetPath = path.join(workflowsDir, `${workflow.module}-${workflow.name}.md`);
|
const targetPath = path.join(workflowsDir, `${workflow.module}-${workflow.name}.md`);
|
||||||
await this.writeFile(targetPath, commandContent);
|
await this.writeFile(targetPath, workflow.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
const totalInstalled = agentArtifacts.length + tasks.length + tools.length + workflows.length;
|
const totalInstalled = agentArtifacts.length + tasks.length + tools.length + workflows.length;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
||||||
const { BaseIdeSetup } = require('./_base-ide');
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crush IDE setup handler
|
* Crush IDE setup handler
|
||||||
|
|
@ -34,10 +35,23 @@ class CrushSetup extends BaseIdeSetup {
|
||||||
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
||||||
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
||||||
|
|
||||||
// Get tasks, tools, and workflows (standalone only)
|
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
||||||
const tasks = await this.getTasks(bmadDir, true);
|
const tasks = await this.getTasks(bmadDir, true);
|
||||||
const tools = await this.getTools(bmadDir, true);
|
const tools = await this.getTools(bmadDir, true);
|
||||||
const workflows = await this.getWorkflows(bmadDir, true);
|
|
||||||
|
// Get ALL workflows using the new workflow command generator
|
||||||
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
|
// Convert workflow artifacts to expected format for organizeByModule
|
||||||
|
const workflows = workflowArtifacts
|
||||||
|
.filter((artifact) => artifact.type === 'workflow-command')
|
||||||
|
.map((artifact) => ({
|
||||||
|
module: artifact.module,
|
||||||
|
name: path.basename(artifact.relativePath, '.md'),
|
||||||
|
path: artifact.sourcePath,
|
||||||
|
content: artifact.content,
|
||||||
|
}));
|
||||||
|
|
||||||
// Organize by module
|
// Organize by module
|
||||||
const agentCount = await this.organizeByModule(commandsDir, agentArtifacts, tasks, tools, workflows, projectDir);
|
const agentCount = await this.organizeByModule(commandsDir, agentArtifacts, tasks, tools, workflows, projectDir);
|
||||||
|
|
@ -113,13 +127,12 @@ class CrushSetup extends BaseIdeSetup {
|
||||||
toolCount++;
|
toolCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy module-specific workflows
|
// Copy module-specific workflow commands (already generated)
|
||||||
const moduleWorkflows = workflows.filter((w) => w.module === module);
|
const moduleWorkflows = workflows.filter((w) => w.module === module);
|
||||||
for (const workflow of moduleWorkflows) {
|
for (const workflow of moduleWorkflows) {
|
||||||
const content = await this.readFile(workflow.path);
|
// Use the pre-generated workflow command content
|
||||||
const commandContent = this.createWorkflowCommand(workflow, content);
|
|
||||||
const targetPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
|
const targetPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
|
||||||
await this.writeFile(targetPath, commandContent);
|
await this.writeFile(targetPath, workflow.content);
|
||||||
workflowCount++;
|
workflowCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ const path = require('node:path');
|
||||||
const { BaseIdeSetup } = require('./_base-ide');
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cursor IDE setup handler
|
* Cursor IDE setup handler
|
||||||
|
|
@ -53,10 +54,22 @@ class CursorSetup extends BaseIdeSetup {
|
||||||
// Convert artifacts to agent format for index creation
|
// Convert artifacts to agent format for index creation
|
||||||
const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
|
const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
|
||||||
|
|
||||||
// Get tasks, tools, and workflows (standalone only)
|
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
||||||
const tasks = await this.getTasks(bmadDir, true);
|
const tasks = await this.getTasks(bmadDir, true);
|
||||||
const tools = await this.getTools(bmadDir, true);
|
const tools = await this.getTools(bmadDir, true);
|
||||||
const workflows = await this.getWorkflows(bmadDir, true);
|
|
||||||
|
// Get ALL workflows using the new workflow command generator
|
||||||
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
|
// Convert artifacts to workflow objects for directory creation
|
||||||
|
const workflows = workflowArtifacts
|
||||||
|
.filter((artifact) => artifact.type === 'workflow-command')
|
||||||
|
.map((artifact) => ({
|
||||||
|
module: artifact.module,
|
||||||
|
name: path.basename(artifact.relativePath, '.md'),
|
||||||
|
path: artifact.sourcePath,
|
||||||
|
}));
|
||||||
|
|
||||||
// Create directories for each module
|
// Create directories for each module
|
||||||
const modules = new Set();
|
const modules = new Set();
|
||||||
|
|
@ -113,18 +126,21 @@ class CursorSetup extends BaseIdeSetup {
|
||||||
toolCount++;
|
toolCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process and copy workflows
|
// Process and copy workflow commands (generated, not raw workflows)
|
||||||
let workflowCount = 0;
|
let workflowCount = 0;
|
||||||
for (const workflow of workflows) {
|
for (const artifact of workflowArtifacts) {
|
||||||
const content = await this.readAndProcess(workflow.path, {
|
if (artifact.type === 'workflow-command') {
|
||||||
module: workflow.module,
|
// Add MDC metadata header to workflow command
|
||||||
name: workflow.name,
|
const content = this.wrapLauncherWithMDC(artifact.content, {
|
||||||
});
|
module: artifact.module,
|
||||||
|
name: path.basename(artifact.relativePath, '.md'),
|
||||||
|
});
|
||||||
|
|
||||||
const targetPath = path.join(bmadRulesDir, workflow.module, 'workflows', `${workflow.name}.mdc`);
|
const targetPath = path.join(bmadRulesDir, artifact.module, 'workflows', `${path.basename(artifact.relativePath, '.md')}.mdc`);
|
||||||
|
|
||||||
await this.writeFile(targetPath, content);
|
await this.writeFile(targetPath, content);
|
||||||
workflowCount++;
|
workflowCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create BMAD index file (but NOT .cursorrules - user manages that)
|
// Create BMAD index file (but NOT .cursorrules - user manages that)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const yaml = require('js-yaml');
|
||||||
const { BaseIdeSetup } = require('./_base-ide');
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gemini CLI setup handler
|
* Gemini CLI setup handler
|
||||||
|
|
@ -68,9 +69,13 @@ class GeminiSetup extends BaseIdeSetup {
|
||||||
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
||||||
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
||||||
|
|
||||||
// Get tasks
|
// Get tasks and workflows (ALL workflows now generate commands)
|
||||||
const tasks = await this.getTasks(bmadDir);
|
const tasks = await this.getTasks(bmadDir);
|
||||||
|
|
||||||
|
// Get ALL workflows using the new workflow command generator
|
||||||
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
// Install agents as TOML files with bmad- prefix (flat structure)
|
// Install agents as TOML files with bmad- prefix (flat structure)
|
||||||
let agentCount = 0;
|
let agentCount = 0;
|
||||||
for (const artifact of agentArtifacts) {
|
for (const artifact of agentArtifacts) {
|
||||||
|
|
@ -98,17 +103,37 @@ class GeminiSetup extends BaseIdeSetup {
|
||||||
console.log(chalk.green(` ✓ Added task: /bmad:tasks:${task.module}:${task.name}`));
|
console.log(chalk.green(` ✓ Added task: /bmad:tasks:${task.module}:${task.name}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Install workflows as TOML files with bmad- prefix (flat structure)
|
||||||
|
let workflowCount = 0;
|
||||||
|
for (const artifact of workflowArtifacts) {
|
||||||
|
if (artifact.type === 'workflow-command') {
|
||||||
|
// Create TOML wrapper around workflow command content
|
||||||
|
const tomlContent = await this.createWorkflowToml(artifact);
|
||||||
|
|
||||||
|
// Flat structure: bmad-workflow-{module}-{name}.toml
|
||||||
|
const workflowName = path.basename(artifact.relativePath, '.md');
|
||||||
|
const tomlPath = path.join(commandsDir, `bmad-workflow-${artifact.module}-${workflowName}.toml`);
|
||||||
|
await this.writeFile(tomlPath, tomlContent);
|
||||||
|
workflowCount++;
|
||||||
|
|
||||||
|
console.log(chalk.green(` ✓ Added workflow: /bmad:workflows:${artifact.module}:${workflowName}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log(chalk.green(`✓ ${this.name} configured:`));
|
console.log(chalk.green(`✓ ${this.name} configured:`));
|
||||||
console.log(chalk.dim(` - ${agentCount} agents configured`));
|
console.log(chalk.dim(` - ${agentCount} agents configured`));
|
||||||
console.log(chalk.dim(` - ${taskCount} tasks configured`));
|
console.log(chalk.dim(` - ${taskCount} tasks configured`));
|
||||||
|
console.log(chalk.dim(` - ${workflowCount} workflows configured`));
|
||||||
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
||||||
console.log(chalk.dim(` - Agent activation: /bmad:agents:{agent-name}`));
|
console.log(chalk.dim(` - Agent activation: /bmad:agents:{agent-name}`));
|
||||||
console.log(chalk.dim(` - Task activation: /bmad:tasks:{task-name}`));
|
console.log(chalk.dim(` - Task activation: /bmad:tasks:{task-name}`));
|
||||||
|
console.log(chalk.dim(` - Workflow activation: /bmad:workflows:{workflow-name}`));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
agents: agentCount,
|
agents: agentCount,
|
||||||
tasks: taskCount,
|
tasks: taskCount,
|
||||||
|
workflows: workflowCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -149,6 +174,7 @@ ${contentWithoutFrontmatter}
|
||||||
// Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
|
// Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
|
||||||
const tomlContent = template
|
const tomlContent = template
|
||||||
.replaceAll('{{title}}', title)
|
.replaceAll('{{title}}', title)
|
||||||
|
.replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
|
||||||
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
||||||
.replaceAll('{{module}}', agent.module)
|
.replaceAll('{{module}}', agent.module)
|
||||||
.replaceAll('{{name}}', agent.name);
|
.replaceAll('{{name}}', agent.name);
|
||||||
|
|
@ -170,6 +196,7 @@ ${contentWithoutFrontmatter}
|
||||||
// Replace template variables
|
// Replace template variables
|
||||||
const tomlContent = template
|
const tomlContent = template
|
||||||
.replaceAll('{{taskName}}', taskName)
|
.replaceAll('{{taskName}}', taskName)
|
||||||
|
.replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
|
||||||
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
||||||
.replaceAll('{{module}}', task.module)
|
.replaceAll('{{module}}', task.module)
|
||||||
.replaceAll('{{filename}}', task.filename);
|
.replaceAll('{{filename}}', task.filename);
|
||||||
|
|
@ -177,6 +204,27 @@ ${contentWithoutFrontmatter}
|
||||||
return tomlContent;
|
return tomlContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create workflow TOML content from artifact
|
||||||
|
*/
|
||||||
|
async createWorkflowToml(artifact) {
|
||||||
|
// Extract description from artifact content
|
||||||
|
const descriptionMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
||||||
|
const description = descriptionMatch
|
||||||
|
? descriptionMatch[1]
|
||||||
|
: `BMAD ${artifact.module.toUpperCase()} Workflow: ${path.basename(artifact.relativePath, '.md')}`;
|
||||||
|
|
||||||
|
// Strip frontmatter from command content
|
||||||
|
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
||||||
|
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
||||||
|
|
||||||
|
return `description = "${description}"
|
||||||
|
prompt = """
|
||||||
|
${contentWithoutFrontmatter}
|
||||||
|
"""
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleanup Gemini configuration - surgically remove only BMAD files
|
* Cleanup Gemini configuration - surgically remove only BMAD files
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
||||||
const { BaseIdeSetup } = require('./_base-ide');
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* iFlow CLI setup handler
|
* iFlow CLI setup handler
|
||||||
|
|
@ -29,9 +30,11 @@ class IFlowSetup extends BaseIdeSetup {
|
||||||
const commandsDir = path.join(iflowDir, this.commandsDir, 'bmad');
|
const commandsDir = path.join(iflowDir, this.commandsDir, 'bmad');
|
||||||
const agentsDir = path.join(commandsDir, 'agents');
|
const agentsDir = path.join(commandsDir, 'agents');
|
||||||
const tasksDir = path.join(commandsDir, 'tasks');
|
const tasksDir = path.join(commandsDir, 'tasks');
|
||||||
|
const workflowsDir = path.join(commandsDir, 'workflows');
|
||||||
|
|
||||||
await this.ensureDir(agentsDir);
|
await this.ensureDir(agentsDir);
|
||||||
await this.ensureDir(tasksDir);
|
await this.ensureDir(tasksDir);
|
||||||
|
await this.ensureDir(workflowsDir);
|
||||||
|
|
||||||
// Generate agent launchers
|
// Generate agent launchers
|
||||||
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
||||||
|
|
@ -47,9 +50,13 @@ class IFlowSetup extends BaseIdeSetup {
|
||||||
agentCount++;
|
agentCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get tasks
|
// Get tasks and workflows (ALL workflows now generate commands)
|
||||||
const tasks = await this.getTasks(bmadDir);
|
const tasks = await this.getTasks(bmadDir);
|
||||||
|
|
||||||
|
// Get ALL workflows using the new workflow command generator
|
||||||
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
// Setup tasks as commands
|
// Setup tasks as commands
|
||||||
let taskCount = 0;
|
let taskCount = 0;
|
||||||
for (const task of tasks) {
|
for (const task of tasks) {
|
||||||
|
|
@ -61,15 +68,27 @@ class IFlowSetup extends BaseIdeSetup {
|
||||||
taskCount++;
|
taskCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setup workflows as commands (already generated)
|
||||||
|
let workflowCount = 0;
|
||||||
|
for (const artifact of workflowArtifacts) {
|
||||||
|
if (artifact.type === 'workflow-command') {
|
||||||
|
const targetPath = path.join(workflowsDir, `${artifact.module}-${path.basename(artifact.relativePath, '.md')}.md`);
|
||||||
|
await this.writeFile(targetPath, artifact.content);
|
||||||
|
workflowCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log(chalk.green(`✓ ${this.name} configured:`));
|
console.log(chalk.green(`✓ ${this.name} configured:`));
|
||||||
console.log(chalk.dim(` - ${agentCount} agent commands created`));
|
console.log(chalk.dim(` - ${agentCount} agent commands created`));
|
||||||
console.log(chalk.dim(` - ${taskCount} task commands created`));
|
console.log(chalk.dim(` - ${taskCount} task commands created`));
|
||||||
|
console.log(chalk.dim(` - ${workflowCount} workflow commands created`));
|
||||||
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
agents: agentCount,
|
agents: agentCount,
|
||||||
tasks: taskCount,
|
tasks: taskCount,
|
||||||
|
workflows: workflowCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,327 @@
|
||||||
|
const path = require('node:path');
|
||||||
|
const { BaseIdeSetup } = require('./_base-ide');
|
||||||
|
const chalk = require('chalk');
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
const yaml = require('js-yaml');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kiro CLI setup handler for BMad Method
|
||||||
|
*/
|
||||||
|
class KiroCliSetup extends BaseIdeSetup {
|
||||||
|
constructor() {
|
||||||
|
super('kiro-cli', 'Kiro CLI', false);
|
||||||
|
this.configDir = '.kiro';
|
||||||
|
this.agentsDir = 'agents';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup old BMAD installation before reinstalling
|
||||||
|
* @param {string} projectDir - Project directory
|
||||||
|
*/
|
||||||
|
async cleanup(projectDir) {
|
||||||
|
const bmadAgentsDir = path.join(projectDir, this.configDir, this.agentsDir);
|
||||||
|
|
||||||
|
if (await fs.pathExists(bmadAgentsDir)) {
|
||||||
|
// Remove existing BMad agents
|
||||||
|
const files = await fs.readdir(bmadAgentsDir);
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.startsWith('bmad-') || file.includes('bmad')) {
|
||||||
|
await fs.remove(path.join(bmadAgentsDir, file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(chalk.dim(` Cleaned old BMAD agents from ${this.name}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Kiro CLI configuration with BMad agents
|
||||||
|
* @param {string} projectDir - Project directory
|
||||||
|
* @param {string} bmadDir - BMAD installation directory
|
||||||
|
* @param {Object} options - Setup options
|
||||||
|
*/
|
||||||
|
async setup(projectDir, bmadDir, options = {}) {
|
||||||
|
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
||||||
|
|
||||||
|
await this.cleanup(projectDir);
|
||||||
|
|
||||||
|
const kiroDir = path.join(projectDir, this.configDir);
|
||||||
|
const agentsDir = path.join(kiroDir, this.agentsDir);
|
||||||
|
|
||||||
|
await this.ensureDir(agentsDir);
|
||||||
|
|
||||||
|
// Create BMad agents from source YAML files
|
||||||
|
await this.createBmadAgentsFromSource(agentsDir, projectDir);
|
||||||
|
|
||||||
|
console.log(chalk.green(`✓ ${this.name} configured with BMad agents`));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create BMad agent definitions from source YAML files
|
||||||
|
* @param {string} agentsDir - Agents directory
|
||||||
|
* @param {string} projectDir - Project directory
|
||||||
|
*/
|
||||||
|
async createBmadAgentsFromSource(agentsDir, projectDir) {
|
||||||
|
const sourceDir = path.join(__dirname, '../../../../../src/modules');
|
||||||
|
|
||||||
|
// Find all agent YAML files
|
||||||
|
const agentFiles = await this.findAgentFiles(sourceDir);
|
||||||
|
|
||||||
|
for (const agentFile of agentFiles) {
|
||||||
|
try {
|
||||||
|
await this.processAgentFile(agentFile, agentsDir, projectDir);
|
||||||
|
} catch (error) {
|
||||||
|
console.warn(chalk.yellow(`⚠️ Failed to process ${agentFile}: ${error.message}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find all agent YAML files in modules and core
|
||||||
|
* @param {string} sourceDir - Source modules directory
|
||||||
|
* @returns {Array} Array of agent file paths
|
||||||
|
*/
|
||||||
|
async findAgentFiles(sourceDir) {
|
||||||
|
const agentFiles = [];
|
||||||
|
|
||||||
|
// Check core agents
|
||||||
|
const coreAgentsDir = path.join(__dirname, '../../../../../src/core/agents');
|
||||||
|
if (await fs.pathExists(coreAgentsDir)) {
|
||||||
|
const files = await fs.readdir(coreAgentsDir);
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.endsWith('.agent.yaml')) {
|
||||||
|
agentFiles.push(path.join(coreAgentsDir, file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check module agents
|
||||||
|
if (!(await fs.pathExists(sourceDir))) {
|
||||||
|
return agentFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
const modules = await fs.readdir(sourceDir);
|
||||||
|
|
||||||
|
for (const module of modules) {
|
||||||
|
const moduleAgentsDir = path.join(sourceDir, module, 'agents');
|
||||||
|
|
||||||
|
if (await fs.pathExists(moduleAgentsDir)) {
|
||||||
|
const files = await fs.readdir(moduleAgentsDir);
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.endsWith('.agent.yaml')) {
|
||||||
|
agentFiles.push(path.join(moduleAgentsDir, file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return agentFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate BMad Core compliance
|
||||||
|
* @param {Object} agentData - Agent YAML data
|
||||||
|
* @returns {boolean} True if compliant
|
||||||
|
*/
|
||||||
|
validateBmadCompliance(agentData) {
|
||||||
|
const requiredFields = ['agent.metadata.id', 'agent.persona.role', 'agent.persona.principles'];
|
||||||
|
|
||||||
|
for (const field of requiredFields) {
|
||||||
|
const keys = field.split('.');
|
||||||
|
let current = agentData;
|
||||||
|
|
||||||
|
for (const key of keys) {
|
||||||
|
if (!current || !current[key]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
current = current[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process individual agent YAML file
|
||||||
|
* @param {string} agentFile - Path to agent YAML file
|
||||||
|
* @param {string} agentsDir - Target agents directory
|
||||||
|
* @param {string} projectDir - Project directory
|
||||||
|
*/
|
||||||
|
async processAgentFile(agentFile, agentsDir, projectDir) {
|
||||||
|
const yamlContent = await fs.readFile(agentFile, 'utf8');
|
||||||
|
const agentData = yaml.load(yamlContent);
|
||||||
|
|
||||||
|
if (!this.validateBmadCompliance(agentData)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract module from file path
|
||||||
|
const normalizedPath = path.normalize(agentFile);
|
||||||
|
const pathParts = normalizedPath.split(path.sep);
|
||||||
|
const basename = path.basename(agentFile, '.agent.yaml');
|
||||||
|
|
||||||
|
// Find the module name from path
|
||||||
|
let moduleName = 'unknown';
|
||||||
|
if (pathParts.includes('src')) {
|
||||||
|
const srcIndex = pathParts.indexOf('src');
|
||||||
|
if (srcIndex + 3 < pathParts.length) {
|
||||||
|
const folderAfterSrc = pathParts[srcIndex + 1];
|
||||||
|
// Handle both src/core/agents and src/modules/[module]/agents patterns
|
||||||
|
if (folderAfterSrc === 'core') {
|
||||||
|
moduleName = 'core';
|
||||||
|
} else if (folderAfterSrc === 'modules') {
|
||||||
|
moduleName = pathParts[srcIndex + 2]; // The actual module name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the agent name from the ID path in YAML if available
|
||||||
|
let agentBaseName = basename;
|
||||||
|
if (agentData.agent && agentData.agent.metadata && agentData.agent.metadata.id) {
|
||||||
|
const idPath = agentData.agent.metadata.id;
|
||||||
|
agentBaseName = path.basename(idPath, '.md');
|
||||||
|
}
|
||||||
|
|
||||||
|
const agentName = `bmad-${moduleName}-${agentBaseName}`;
|
||||||
|
const sanitizedAgentName = this.sanitizeAgentName(agentName);
|
||||||
|
|
||||||
|
// Create JSON definition
|
||||||
|
await this.createAgentDefinitionFromYaml(agentsDir, sanitizedAgentName, agentData);
|
||||||
|
|
||||||
|
// Create prompt file
|
||||||
|
await this.createAgentPromptFromYaml(agentsDir, sanitizedAgentName, agentData, projectDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sanitize agent name for file naming
|
||||||
|
* @param {string} name - Agent name
|
||||||
|
* @returns {string} Sanitized name
|
||||||
|
*/
|
||||||
|
sanitizeAgentName(name) {
|
||||||
|
return name
|
||||||
|
.toLowerCase()
|
||||||
|
.replaceAll(/\s+/g, '-')
|
||||||
|
.replaceAll(/[^a-z0-9-]/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create agent JSON definition from YAML data
|
||||||
|
* @param {string} agentsDir - Agents directory
|
||||||
|
* @param {string} agentName - Agent name (role-based)
|
||||||
|
* @param {Object} agentData - Agent YAML data
|
||||||
|
*/
|
||||||
|
async createAgentDefinitionFromYaml(agentsDir, agentName, agentData) {
|
||||||
|
const personName = agentData.agent.metadata.name;
|
||||||
|
const role = agentData.agent.persona.role;
|
||||||
|
|
||||||
|
const agentConfig = {
|
||||||
|
name: agentName,
|
||||||
|
description: `${personName} - ${role}`,
|
||||||
|
prompt: `file://./${agentName}-prompt.md`,
|
||||||
|
tools: ['*'],
|
||||||
|
mcpServers: {},
|
||||||
|
useLegacyMcpJson: true,
|
||||||
|
resources: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
const agentPath = path.join(agentsDir, `${agentName}.json`);
|
||||||
|
await fs.writeJson(agentPath, agentConfig, { spaces: 2 });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create agent prompt from YAML data
|
||||||
|
* @param {string} agentsDir - Agents directory
|
||||||
|
* @param {string} agentName - Agent name (role-based)
|
||||||
|
* @param {Object} agentData - Agent YAML data
|
||||||
|
* @param {string} projectDir - Project directory
|
||||||
|
*/
|
||||||
|
async createAgentPromptFromYaml(agentsDir, agentName, agentData, projectDir) {
|
||||||
|
const promptPath = path.join(agentsDir, `${agentName}-prompt.md`);
|
||||||
|
|
||||||
|
// Generate prompt from YAML data
|
||||||
|
const prompt = this.generatePromptFromYaml(agentData);
|
||||||
|
await fs.writeFile(promptPath, prompt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate prompt content from YAML data
|
||||||
|
* @param {Object} agentData - Agent YAML data
|
||||||
|
* @returns {string} Generated prompt
|
||||||
|
*/
|
||||||
|
generatePromptFromYaml(agentData) {
|
||||||
|
const agent = agentData.agent;
|
||||||
|
const name = agent.metadata.name;
|
||||||
|
const icon = agent.metadata.icon || '🤖';
|
||||||
|
const role = agent.persona.role;
|
||||||
|
const identity = agent.persona.identity;
|
||||||
|
const style = agent.persona.communication_style;
|
||||||
|
const principles = agent.persona.principles;
|
||||||
|
|
||||||
|
let prompt = `# ${name} ${icon}\n\n`;
|
||||||
|
prompt += `## Role\n${role}\n\n`;
|
||||||
|
|
||||||
|
if (identity) {
|
||||||
|
prompt += `## Identity\n${identity}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style) {
|
||||||
|
prompt += `## Communication Style\n${style}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (principles) {
|
||||||
|
prompt += `## Principles\n`;
|
||||||
|
if (typeof principles === 'string') {
|
||||||
|
// Handle multi-line string principles
|
||||||
|
prompt += principles + '\n\n';
|
||||||
|
} else if (Array.isArray(principles)) {
|
||||||
|
// Handle array principles
|
||||||
|
for (const principle of principles) {
|
||||||
|
prompt += `- ${principle}\n`;
|
||||||
|
}
|
||||||
|
prompt += '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add menu items if available
|
||||||
|
if (agent.menu && agent.menu.length > 0) {
|
||||||
|
prompt += `## Available Workflows\n`;
|
||||||
|
for (let i = 0; i < agent.menu.length; i++) {
|
||||||
|
const item = agent.menu[i];
|
||||||
|
prompt += `${i + 1}. **${item.trigger}**: ${item.description}\n`;
|
||||||
|
}
|
||||||
|
prompt += '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt += `## Instructions\nYou are ${name}, part of the BMad Method. Follow your role and principles while assisting users with their development needs.\n`;
|
||||||
|
|
||||||
|
return prompt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Kiro CLI is available
|
||||||
|
* @returns {Promise<boolean>} True if available
|
||||||
|
*/
|
||||||
|
async isAvailable() {
|
||||||
|
try {
|
||||||
|
const { execSync } = require('node:child_process');
|
||||||
|
execSync('kiro-cli --version', { stdio: 'ignore' });
|
||||||
|
return true;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get installation instructions
|
||||||
|
* @returns {string} Installation instructions
|
||||||
|
*/
|
||||||
|
getInstallInstructions() {
|
||||||
|
return `Install Kiro CLI:
|
||||||
|
curl -fsSL https://github.com/aws/kiro-cli/releases/latest/download/install.sh | bash
|
||||||
|
|
||||||
|
Or visit: https://github.com/aws/kiro-cli`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { KiroCliSetup };
|
||||||
|
|
@ -47,7 +47,7 @@ class OpenCodeSetup extends BaseIdeSetup {
|
||||||
agentCount++;
|
agentCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install workflow commands with flat naming: bmad-workflow-{module}-{name}.md
|
// Install workflow commands with flat naming: bmad-{module}-{workflow-name}
|
||||||
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
||||||
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
||||||
|
|
||||||
|
|
@ -55,10 +55,10 @@ class OpenCodeSetup extends BaseIdeSetup {
|
||||||
for (const artifact of workflowArtifacts) {
|
for (const artifact of workflowArtifacts) {
|
||||||
if (artifact.type === 'workflow-command') {
|
if (artifact.type === 'workflow-command') {
|
||||||
const commandContent = artifact.content;
|
const commandContent = artifact.content;
|
||||||
// Flat structure: bmad-workflow-{module}-{name}.md
|
// Flat structure: bmad-{module}-{workflow-name}.md
|
||||||
// artifact.relativePath is like: bmm/workflows/plan-project.md
|
// artifact.relativePath is like: bmm/workflows/plan-project.md
|
||||||
const workflowName = path.basename(artifact.relativePath, '.md');
|
const workflowName = path.basename(artifact.relativePath, '.md');
|
||||||
const targetPath = path.join(commandsBaseDir, `bmad-workflow-${artifact.module}-${workflowName}.md`);
|
const targetPath = path.join(commandsBaseDir, `bmad-${artifact.module}-${workflowName}.md`);
|
||||||
await this.writeFile(targetPath, commandContent);
|
await this.writeFile(targetPath, commandContent);
|
||||||
workflowCommandCount++;
|
workflowCommandCount++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,34 +5,13 @@ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Roo IDE setup handler
|
* Roo IDE setup handler
|
||||||
* Creates custom modes in .roomodes file
|
* Creates custom commands in .roo/commands directory
|
||||||
*/
|
*/
|
||||||
class RooSetup extends BaseIdeSetup {
|
class RooSetup extends BaseIdeSetup {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('roo', 'Roo Code');
|
super('roo', 'Roo Code');
|
||||||
this.configFile = '.roomodes';
|
this.configDir = '.roo';
|
||||||
this.defaultPermissions = {
|
this.commandsDir = 'commands';
|
||||||
dev: {
|
|
||||||
description: 'Development files',
|
|
||||||
fileRegex: String.raw`.*\.(js|jsx|ts|tsx|py|java|cpp|c|h|cs|go|rs|php|rb|swift)$`,
|
|
||||||
},
|
|
||||||
config: {
|
|
||||||
description: 'Configuration files',
|
|
||||||
fileRegex: String.raw`.*\.(json|yaml|yml|toml|xml|ini|env|config)$`,
|
|
||||||
},
|
|
||||||
docs: {
|
|
||||||
description: 'Documentation files',
|
|
||||||
fileRegex: String.raw`.*\.(md|mdx|rst|txt|doc|docx)$`,
|
|
||||||
},
|
|
||||||
styles: {
|
|
||||||
description: 'Style and design files',
|
|
||||||
fileRegex: String.raw`.*\.(css|scss|sass|less|stylus)$`,
|
|
||||||
},
|
|
||||||
all: {
|
|
||||||
description: 'All files',
|
|
||||||
fileRegex: '.*',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -44,94 +23,96 @@ class RooSetup extends BaseIdeSetup {
|
||||||
async setup(projectDir, bmadDir, options = {}) {
|
async setup(projectDir, bmadDir, options = {}) {
|
||||||
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
||||||
|
|
||||||
// Check for existing .roomodes file
|
// Create .roo/commands directory
|
||||||
const roomodesPath = path.join(projectDir, this.configFile);
|
const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
||||||
let existingModes = [];
|
await this.ensureDir(rooCommandsDir);
|
||||||
let existingContent = '';
|
|
||||||
|
|
||||||
if (await this.pathExists(roomodesPath)) {
|
// Generate agent launchers
|
||||||
existingContent = await this.readFile(roomodesPath);
|
|
||||||
// Parse existing modes to avoid duplicates
|
|
||||||
const modeMatches = existingContent.matchAll(/- slug: ([\w-]+)/g);
|
|
||||||
for (const match of modeMatches) {
|
|
||||||
existingModes.push(match[1]);
|
|
||||||
}
|
|
||||||
console.log(chalk.yellow(`Found existing .roomodes file with ${existingModes.length} modes`));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate agent launchers (though Roo will reference the actual .bmad agents)
|
|
||||||
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
||||||
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
||||||
|
|
||||||
// Always use 'all' permissions - users can customize in .roomodes file
|
|
||||||
const permissionChoice = 'all';
|
|
||||||
|
|
||||||
// Create modes content
|
|
||||||
let newModesContent = '';
|
|
||||||
let addedCount = 0;
|
let addedCount = 0;
|
||||||
let skippedCount = 0;
|
let skippedCount = 0;
|
||||||
|
|
||||||
for (const artifact of agentArtifacts) {
|
for (const artifact of agentArtifacts) {
|
||||||
const slug = `bmad-${artifact.module}-${artifact.name}`;
|
const commandName = `bmad-${artifact.module}-agent-${artifact.name}`;
|
||||||
|
const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
|
||||||
|
|
||||||
// Skip if already exists
|
// Skip if already exists
|
||||||
if (existingModes.includes(slug)) {
|
if (await this.pathExists(commandPath)) {
|
||||||
console.log(chalk.dim(` Skipping ${slug} - already exists`));
|
console.log(chalk.dim(` Skipping ${commandName} - already exists`));
|
||||||
skippedCount++;
|
skippedCount++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the actual agent file from .bmad for metadata extraction
|
// Read the actual agent file from .bmad for metadata extraction (installed agents are .md files)
|
||||||
const agentPath = path.join(bmadDir, artifact.module, 'agents', `${artifact.name}.md`);
|
const agentPath = path.join(bmadDir, artifact.module, 'agents', `${artifact.name}.md`);
|
||||||
const content = await this.readFile(agentPath);
|
const content = await this.readFile(agentPath);
|
||||||
|
|
||||||
// Create mode entry that references the actual .bmad agent
|
// Create command file that references the actual .bmad agent
|
||||||
const modeEntry = await this.createModeEntry(
|
await this.createCommandFile({ module: artifact.module, name: artifact.name, path: agentPath }, content, commandPath, projectDir);
|
||||||
{ module: artifact.module, name: artifact.name, path: agentPath },
|
|
||||||
content,
|
|
||||||
permissionChoice,
|
|
||||||
projectDir,
|
|
||||||
);
|
|
||||||
|
|
||||||
newModesContent += modeEntry;
|
|
||||||
addedCount++;
|
addedCount++;
|
||||||
console.log(chalk.green(` ✓ Added mode: ${slug}`));
|
console.log(chalk.green(` ✓ Added command: ${commandName}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build final content
|
|
||||||
let finalContent = '';
|
|
||||||
if (existingContent) {
|
|
||||||
// Append to existing content
|
|
||||||
finalContent = existingContent.trim() + '\n' + newModesContent;
|
|
||||||
} else {
|
|
||||||
// Create new .roomodes file
|
|
||||||
finalContent = 'customModes:\n' + newModesContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write .roomodes file
|
|
||||||
await this.writeFile(roomodesPath, finalContent);
|
|
||||||
|
|
||||||
console.log(chalk.green(`✓ ${this.name} configured:`));
|
console.log(chalk.green(`✓ ${this.name} configured:`));
|
||||||
console.log(chalk.dim(` - ${addedCount} modes added`));
|
console.log(chalk.dim(` - ${addedCount} commands added`));
|
||||||
if (skippedCount > 0) {
|
if (skippedCount > 0) {
|
||||||
console.log(chalk.dim(` - ${skippedCount} modes skipped (already exist)`));
|
console.log(chalk.dim(` - ${skippedCount} commands skipped (already exist)`));
|
||||||
}
|
}
|
||||||
console.log(chalk.dim(` - Configuration file: ${this.configFile}`));
|
console.log(chalk.dim(` - Commands directory: ${this.configDir}/${this.commandsDir}/bmad/`));
|
||||||
console.log(chalk.dim(` - Permission level: all (unrestricted)`));
|
console.log(chalk.dim(` Commands will be available when you open this project in Roo Code`));
|
||||||
console.log(chalk.yellow(`\n 💡 Tip: Edit ${this.configFile} to customize file permissions per agent`));
|
|
||||||
console.log(chalk.dim(` Modes will be available when you open this project in Roo Code`));
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
modes: addedCount,
|
commands: addedCount,
|
||||||
skipped: skippedCount,
|
skipped: skippedCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a mode entry for an agent
|
* Create a unified command file for agents
|
||||||
|
* @param {string} commandPath - Path where to write the command file
|
||||||
|
* @param {Object} options - Command options
|
||||||
|
* @param {string} options.name - Display name for the command
|
||||||
|
* @param {string} options.description - Description for the command
|
||||||
|
* @param {string} options.agentPath - Path to the agent file (relative to project root)
|
||||||
|
* @param {string} [options.icon] - Icon emoji (defaults to 🤖)
|
||||||
|
* @param {string} [options.extraContent] - Additional content to include before activation
|
||||||
*/
|
*/
|
||||||
async createModeEntry(agent, content, permissionChoice, projectDir) {
|
async createAgentCommandFile(commandPath, options) {
|
||||||
|
const { name, description, agentPath, icon = '🤖', extraContent = '' } = options;
|
||||||
|
|
||||||
|
// Build command content with YAML frontmatter
|
||||||
|
let commandContent = `---\n`;
|
||||||
|
commandContent += `name: '${icon} ${name}'\n`;
|
||||||
|
commandContent += `description: '${description}'\n`;
|
||||||
|
commandContent += `---\n\n`;
|
||||||
|
|
||||||
|
commandContent += `You 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`;
|
||||||
|
|
||||||
|
// Add any extra content (e.g., warnings for custom agents)
|
||||||
|
if (extraContent) {
|
||||||
|
commandContent += `${extraContent}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
commandContent += `<agent-activation CRITICAL="TRUE">\n`;
|
||||||
|
commandContent += `1. LOAD the FULL agent file from @${agentPath}\n`;
|
||||||
|
commandContent += `2. READ its entire contents - this contains the complete agent persona, menu, and instructions\n`;
|
||||||
|
commandContent += `3. Execute ALL activation steps exactly as written in the agent file\n`;
|
||||||
|
commandContent += `4. Follow the agent's persona and menu system precisely\n`;
|
||||||
|
commandContent += `5. Stay in character throughout the session\n`;
|
||||||
|
commandContent += `</agent-activation>\n`;
|
||||||
|
|
||||||
|
// Write command file
|
||||||
|
await this.writeFile(commandPath, commandContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a command file for an agent
|
||||||
|
*/
|
||||||
|
async createCommandFile(agent, content, commandPath, projectDir) {
|
||||||
// Extract metadata from agent content
|
// Extract metadata from agent content
|
||||||
const titleMatch = content.match(/title="([^"]+)"/);
|
const titleMatch = content.match(/title="([^"]+)"/);
|
||||||
const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
|
const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
|
||||||
|
|
@ -142,66 +123,16 @@ class RooSetup extends BaseIdeSetup {
|
||||||
const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
|
const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
|
||||||
const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
|
const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
|
||||||
|
|
||||||
// Get the activation header from central template
|
|
||||||
const activationHeader = await this.getAgentCommandHeader();
|
|
||||||
|
|
||||||
const roleDefinitionMatch = content.match(/roleDefinition="([^"]+)"/);
|
|
||||||
const roleDefinition = roleDefinitionMatch
|
|
||||||
? roleDefinitionMatch[1]
|
|
||||||
: `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
|
||||||
|
|
||||||
// Get relative path
|
// Get relative path
|
||||||
const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
|
const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
|
||||||
|
|
||||||
// Determine permissions
|
// Use unified method
|
||||||
const permissions = this.getPermissionsForAgent(agent, permissionChoice);
|
await this.createAgentCommandFile(commandPath, {
|
||||||
|
name: title,
|
||||||
// Build mode entry
|
description: whenToUse,
|
||||||
const slug = `bmad-${agent.module}-${agent.name}`;
|
agentPath: relativePath,
|
||||||
let modeEntry = ` - slug: ${slug}\n`;
|
icon: icon,
|
||||||
modeEntry += ` name: '${icon} ${title}'\n`;
|
});
|
||||||
|
|
||||||
if (permissions && permissions.description) {
|
|
||||||
modeEntry += ` description: '${permissions.description}'\n`;
|
|
||||||
}
|
|
||||||
|
|
||||||
modeEntry += ` roleDefinition: ${roleDefinition}\n`;
|
|
||||||
modeEntry += ` whenToUse: ${whenToUse}\n`;
|
|
||||||
modeEntry += ` customInstructions: ${activationHeader} Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
|
|
||||||
modeEntry += ` groups:\n`;
|
|
||||||
modeEntry += ` - read\n`;
|
|
||||||
|
|
||||||
if (permissions && permissions.fileRegex) {
|
|
||||||
modeEntry += ` - - edit\n`;
|
|
||||||
modeEntry += ` - fileRegex: ${permissions.fileRegex}\n`;
|
|
||||||
modeEntry += ` description: ${permissions.description}\n`;
|
|
||||||
} else {
|
|
||||||
modeEntry += ` - edit\n`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return modeEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get permissions configuration for an agent
|
|
||||||
*/
|
|
||||||
getPermissionsForAgent(agent, permissionChoice) {
|
|
||||||
if (permissionChoice === 'custom') {
|
|
||||||
// Custom logic based on agent name/module
|
|
||||||
if (agent.name.includes('dev') || agent.name.includes('code')) {
|
|
||||||
return this.defaultPermissions.dev;
|
|
||||||
} else if (agent.name.includes('doc') || agent.name.includes('write')) {
|
|
||||||
return this.defaultPermissions.docs;
|
|
||||||
} else if (agent.name.includes('config') || agent.name.includes('setup')) {
|
|
||||||
return this.defaultPermissions.config;
|
|
||||||
} else if (agent.name.includes('style') || agent.name.includes('css')) {
|
|
||||||
return this.defaultPermissions.styles;
|
|
||||||
}
|
|
||||||
// Default to all for custom agents
|
|
||||||
return this.defaultPermissions.all;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.defaultPermissions[permissionChoice] || null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -219,8 +150,26 @@ class RooSetup extends BaseIdeSetup {
|
||||||
*/
|
*/
|
||||||
async cleanup(projectDir) {
|
async cleanup(projectDir) {
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const roomodesPath = path.join(projectDir, this.configFile);
|
const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
||||||
|
|
||||||
|
if (await fs.pathExists(rooCommandsDir)) {
|
||||||
|
const files = await fs.readdir(rooCommandsDir);
|
||||||
|
let removedCount = 0;
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.startsWith('bmad-') && file.endsWith('.md')) {
|
||||||
|
await fs.remove(path.join(rooCommandsDir, file));
|
||||||
|
removedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (removedCount > 0) {
|
||||||
|
console.log(chalk.dim(`Removed ${removedCount} BMAD commands from .roo/commands/`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also clean up old .roomodes file if it exists
|
||||||
|
const roomodesPath = path.join(projectDir, '.roomodes');
|
||||||
if (await fs.pathExists(roomodesPath)) {
|
if (await fs.pathExists(roomodesPath)) {
|
||||||
const content = await fs.readFile(roomodesPath, 'utf8');
|
const content = await fs.readFile(roomodesPath, 'utf8');
|
||||||
|
|
||||||
|
|
@ -245,7 +194,9 @@ class RooSetup extends BaseIdeSetup {
|
||||||
|
|
||||||
// Write back filtered content
|
// Write back filtered content
|
||||||
await fs.writeFile(roomodesPath, filteredLines.join('\n'));
|
await fs.writeFile(roomodesPath, filteredLines.join('\n'));
|
||||||
console.log(chalk.dim(`Removed ${removedCount} BMAD modes from .roomodes`));
|
if (removedCount > 0) {
|
||||||
|
console.log(chalk.dim(`Removed ${removedCount} BMAD modes from legacy .roomodes file`));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -254,68 +205,53 @@ class RooSetup extends BaseIdeSetup {
|
||||||
* @param {string} projectDir - Project directory
|
* @param {string} projectDir - Project directory
|
||||||
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
||||||
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
||||||
* @param {Object} metadata - Agent metadata
|
* @param {Object} metadata - Agent metadata (unused, kept for compatibility)
|
||||||
* @returns {Object} Installation result
|
* @returns {Object} Installation result
|
||||||
*/
|
*/
|
||||||
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
||||||
const roomodesPath = path.join(projectDir, this.configFile);
|
const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
||||||
let existingContent = '';
|
await this.ensureDir(rooCommandsDir);
|
||||||
|
|
||||||
// Read existing .roomodes file
|
const commandName = `bmad-custom-agent-${agentName.toLowerCase()}`;
|
||||||
if (await this.pathExists(roomodesPath)) {
|
const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
|
||||||
existingContent = await this.readFile(roomodesPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create custom agent mode entry
|
// Check if command already exists
|
||||||
const slug = `bmad-custom-${agentName.toLowerCase()}`;
|
if (await this.pathExists(commandPath)) {
|
||||||
const modeEntry = ` - slug: ${slug}
|
|
||||||
name: 'BMAD Custom: ${agentName}'
|
|
||||||
description: |
|
|
||||||
Custom BMAD agent: ${agentName}
|
|
||||||
|
|
||||||
**⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
|
|
||||||
|
|
||||||
This is a launcher for the custom BMAD agent "${agentName}". The agent will follow the persona and instructions from the main agent file.
|
|
||||||
prompt: |
|
|
||||||
@${agentPath}
|
|
||||||
always: false
|
|
||||||
permissions: all
|
|
||||||
`;
|
|
||||||
|
|
||||||
// Check if mode already exists
|
|
||||||
if (existingContent.includes(slug)) {
|
|
||||||
return {
|
return {
|
||||||
ide: 'roo',
|
ide: 'roo',
|
||||||
path: this.configFile,
|
path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
|
||||||
command: agentName,
|
command: commandName,
|
||||||
type: 'custom-agent-launcher',
|
type: 'custom-agent-launcher',
|
||||||
alreadyExists: true,
|
alreadyExists: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build final content
|
// Read the custom agent file to extract metadata (same as regular agents)
|
||||||
let finalContent = '';
|
const fullAgentPath = path.join(projectDir, agentPath);
|
||||||
if (existingContent) {
|
const content = await this.readFile(fullAgentPath);
|
||||||
// Find customModes section or add it
|
|
||||||
if (existingContent.includes('customModes:')) {
|
|
||||||
// Append to existing customModes
|
|
||||||
finalContent = existingContent + modeEntry;
|
|
||||||
} else {
|
|
||||||
// Add customModes section
|
|
||||||
finalContent = existingContent.trim() + '\n\ncustomModes:\n' + modeEntry;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Create new .roomodes file with customModes
|
|
||||||
finalContent = 'customModes:\n' + modeEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write .roomodes file
|
// Extract metadata from agent content
|
||||||
await this.writeFile(roomodesPath, finalContent);
|
const titleMatch = content.match(/title="([^"]+)"/);
|
||||||
|
const title = titleMatch ? titleMatch[1] : this.formatTitle(agentName);
|
||||||
|
|
||||||
|
const iconMatch = content.match(/icon="([^"]+)"/);
|
||||||
|
const icon = iconMatch ? iconMatch[1] : '🤖';
|
||||||
|
|
||||||
|
const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
|
||||||
|
const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
|
||||||
|
|
||||||
|
// Use unified method without extra content (clean)
|
||||||
|
await this.createAgentCommandFile(commandPath, {
|
||||||
|
name: title,
|
||||||
|
description: whenToUse,
|
||||||
|
agentPath: agentPath,
|
||||||
|
icon: icon,
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
ide: 'roo',
|
ide: 'roo',
|
||||||
path: this.configFile,
|
path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
|
||||||
command: slug,
|
command: commandName,
|
||||||
type: 'custom-agent-launcher',
|
type: 'custom-agent-launcher',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,8 @@ class AgentCommandGenerator {
|
||||||
.replaceAll('{{name}}', agent.name)
|
.replaceAll('{{name}}', agent.name)
|
||||||
.replaceAll('{{module}}', agent.module)
|
.replaceAll('{{module}}', agent.module)
|
||||||
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
||||||
.replaceAll('{bmad_folder}', this.bmadFolderName);
|
.replaceAll('{bmad_folder}', this.bmadFolderName)
|
||||||
|
.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,11 @@ async function getAgentsFromDir(dirPath, moduleName) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip README files and other non-agent files
|
||||||
|
if (file.toLowerCase() === 'readme.md' || file.toLowerCase().startsWith('readme-')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (file.includes('.customize.')) {
|
if (file.includes('.customize.')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -101,6 +106,11 @@ async function getAgentsFromDir(dirPath, moduleName) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only include files that have agent-specific content (compiled agents have <agent> tag)
|
||||||
|
if (!content.includes('<agent')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
agents.push({
|
agents.push({
|
||||||
path: filePath,
|
path: filePath,
|
||||||
name: file.replace('.md', ''),
|
name: file.replace('.md', ''),
|
||||||
|
|
|
||||||
|
|
@ -25,16 +25,16 @@ class WorkflowCommandGenerator {
|
||||||
return { generated: 0 };
|
return { generated: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter to only standalone workflows
|
// ALL workflows now generate commands - no standalone filtering
|
||||||
const standaloneWorkflows = workflows.filter((w) => w.standalone === 'true' || w.standalone === true);
|
const allWorkflows = workflows;
|
||||||
|
|
||||||
// Base commands directory
|
// Base commands directory
|
||||||
const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
|
const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
|
||||||
|
|
||||||
let generatedCount = 0;
|
let generatedCount = 0;
|
||||||
|
|
||||||
// Generate a command file for each standalone workflow, organized by module
|
// Generate a command file for each workflow, organized by module
|
||||||
for (const workflow of standaloneWorkflows) {
|
for (const workflow of allWorkflows) {
|
||||||
const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
|
const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
|
||||||
await fs.ensureDir(moduleWorkflowsDir);
|
await fs.ensureDir(moduleWorkflowsDir);
|
||||||
|
|
||||||
|
|
@ -46,7 +46,7 @@ class WorkflowCommandGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also create a workflow launcher README in each module
|
// Also create a workflow launcher README in each module
|
||||||
const groupedWorkflows = this.groupWorkflowsByModule(standaloneWorkflows);
|
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
||||||
await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
|
await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
|
||||||
|
|
||||||
return { generated: generatedCount };
|
return { generated: generatedCount };
|
||||||
|
|
@ -59,12 +59,12 @@ class WorkflowCommandGenerator {
|
||||||
return { artifacts: [], counts: { commands: 0, launchers: 0 } };
|
return { artifacts: [], counts: { commands: 0, launchers: 0 } };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter to only standalone workflows
|
// ALL workflows now generate commands - no standalone filtering
|
||||||
const standaloneWorkflows = workflows.filter((w) => w.standalone === 'true' || w.standalone === true);
|
const allWorkflows = workflows;
|
||||||
|
|
||||||
const artifacts = [];
|
const artifacts = [];
|
||||||
|
|
||||||
for (const workflow of standaloneWorkflows) {
|
for (const workflow of allWorkflows) {
|
||||||
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
||||||
artifacts.push({
|
artifacts.push({
|
||||||
type: 'workflow-command',
|
type: 'workflow-command',
|
||||||
|
|
@ -75,7 +75,7 @@ class WorkflowCommandGenerator {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const groupedWorkflows = this.groupWorkflowsByModule(standaloneWorkflows);
|
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
||||||
for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
|
for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
|
||||||
artifacts.push({
|
artifacts.push({
|
||||||
type: 'workflow-launcher',
|
type: 'workflow-launcher',
|
||||||
|
|
@ -89,7 +89,7 @@ class WorkflowCommandGenerator {
|
||||||
return {
|
return {
|
||||||
artifacts,
|
artifacts,
|
||||||
counts: {
|
counts: {
|
||||||
commands: standaloneWorkflows.length,
|
commands: allWorkflows.length,
|
||||||
launchers: Object.keys(groupedWorkflows).length,
|
launchers: Object.keys(groupedWorkflows).length,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -99,8 +99,13 @@ class WorkflowCommandGenerator {
|
||||||
* Generate command content for a workflow
|
* Generate command content for a workflow
|
||||||
*/
|
*/
|
||||||
async generateCommandContent(workflow, bmadDir) {
|
async generateCommandContent(workflow, bmadDir) {
|
||||||
// Load the template
|
// Determine template based on workflow file type
|
||||||
const template = await fs.readFile(this.templatePath, 'utf8');
|
const isMarkdownWorkflow = workflow.path.endsWith('workflow.md');
|
||||||
|
const templateName = isMarkdownWorkflow ? 'workflow-commander.md' : 'workflow-command-template.md';
|
||||||
|
const templatePath = path.join(path.dirname(this.templatePath), templateName);
|
||||||
|
|
||||||
|
// Load the appropriate template
|
||||||
|
const template = await fs.readFile(templatePath, 'utf8');
|
||||||
|
|
||||||
// Convert source path to installed path
|
// Convert source path to installed path
|
||||||
// From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
|
// From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
|
||||||
|
|
@ -127,8 +132,7 @@ class WorkflowCommandGenerator {
|
||||||
.replaceAll('{{description}}', workflow.description)
|
.replaceAll('{{description}}', workflow.description)
|
||||||
.replaceAll('{{workflow_path}}', workflowPath)
|
.replaceAll('{{workflow_path}}', workflowPath)
|
||||||
.replaceAll('{bmad_folder}', this.bmadFolderName)
|
.replaceAll('{bmad_folder}', this.bmadFolderName)
|
||||||
.replaceAll('{{interactive}}', workflow.interactive)
|
.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
.replaceAll('{{author}}', workflow.author || 'BMAD');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
|
IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @{{workflow_path}}, READ its entire contents and follow its directions exactly!
|
||||||
|
|
@ -53,6 +53,11 @@ class ModuleManager {
|
||||||
// Read the file content
|
// Read the file content
|
||||||
let content = await fs.readFile(sourcePath, 'utf8');
|
let content = await fs.readFile(sourcePath, 'utf8');
|
||||||
|
|
||||||
|
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
||||||
|
if (content.includes('{*bmad_folder*}')) {
|
||||||
|
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
|
}
|
||||||
|
|
||||||
// Replace {bmad_folder} placeholder with actual folder name
|
// Replace {bmad_folder} placeholder with actual folder name
|
||||||
if (content.includes('{bmad_folder}')) {
|
if (content.includes('{bmad_folder}')) {
|
||||||
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
||||||
|
|
@ -396,8 +401,9 @@ class ModuleManager {
|
||||||
// Read the source YAML file
|
// Read the source YAML file
|
||||||
let yamlContent = await fs.readFile(sourceFile, 'utf8');
|
let yamlContent = await fs.readFile(sourceFile, 'utf8');
|
||||||
|
|
||||||
// IMPORTANT: Replace {bmad_folder} BEFORE parsing YAML
|
// IMPORTANT: Replace escape sequence and placeholder BEFORE parsing YAML
|
||||||
// Otherwise parsing will fail on the placeholder
|
// Otherwise parsing will fail on the placeholder
|
||||||
|
yamlContent = yamlContent.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
||||||
yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
|
yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue