diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index ed626d3..d078e6f 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -11,7 +11,7 @@
"name": "bmad",
"source": "./plugins/bmad",
"description": "BMAD Method - Breakthrough Method for Agile AI-Driven Development",
- "version": "6.2.0.4"
+ "version": "6.10.0.0"
}
]
}
diff --git a/.github/badges/upstream-version-bmb.json b/.github/badges/upstream-version-bmb.json
index cd61cdc..706377c 100644
--- a/.github/badges/upstream-version-bmb.json
+++ b/.github/badges/upstream-version-bmb.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "BMB Module",
- "message": "v1.4.0",
+ "message": "v2.1.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version-cis.json b/.github/badges/upstream-version-cis.json
index 66286b3..52a567e 100644
--- a/.github/badges/upstream-version-cis.json
+++ b/.github/badges/upstream-version-cis.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "CIS Module",
- "message": "v0.1.9",
+ "message": "v0.2.1",
"color": "green"
}
diff --git a/.github/badges/upstream-version-gds.json b/.github/badges/upstream-version-gds.json
index d146d11..8377169 100644
--- a/.github/badges/upstream-version-gds.json
+++ b/.github/badges/upstream-version-gds.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "GDS Module",
- "message": "v0.2.2",
+ "message": "v0.6.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version-loop.json b/.github/badges/upstream-version-loop.json
new file mode 100644
index 0000000..4acb873
--- /dev/null
+++ b/.github/badges/upstream-version-loop.json
@@ -0,0 +1,6 @@
+{
+ "schemaVersion": 1,
+ "label": "Loop Module",
+ "message": "v0.8.0",
+ "color": "green"
+}
diff --git a/.github/badges/upstream-version-tea.json b/.github/badges/upstream-version-tea.json
index 6d49a34..debab1e 100644
--- a/.github/badges/upstream-version-tea.json
+++ b/.github/badges/upstream-version-tea.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "TEA Module",
- "message": "v1.7.3",
+ "message": "v1.19.0",
"color": "green"
}
diff --git a/.github/badges/upstream-version.json b/.github/badges/upstream-version.json
index f24ef04..bfce7fa 100644
--- a/.github/badges/upstream-version.json
+++ b/.github/badges/upstream-version.json
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "BMAD Method",
- "message": "v6.2.2",
+ "message": "v6.10.0",
"color": "blue"
}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1df5530..c42e8a3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,3 +21,9 @@ jobs:
- name: Lint
run: bun run lint
+
+ - name: Validate plugin
+ run: bun run validate
+
+ - name: Unit tests
+ run: bun run test:unit
diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
new file mode 100644
index 0000000..b5e8cfd
--- /dev/null
+++ b/.github/workflows/claude-code-review.yml
@@ -0,0 +1,44 @@
+name: Claude Code Review
+
+on:
+ pull_request:
+ types: [opened, synchronize, ready_for_review, reopened]
+ # Optional: Only run on specific file changes
+ # paths:
+ # - "src/**/*.ts"
+ # - "src/**/*.tsx"
+ # - "src/**/*.js"
+ # - "src/**/*.jsx"
+
+jobs:
+ claude-review:
+ # Optional: Filter by PR author
+ # if: |
+ # github.event.pull_request.user.login == 'external-contributor' ||
+ # github.event.pull_request.user.login == 'new-developer' ||
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
+
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: read
+ issues: read
+ id-token: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run Claude Code Review
+ id: claude-review
+ uses: anthropics/claude-code-action@v1
+ with:
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+ plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
+ plugins: 'code-review@claude-code-plugins'
+ prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://code.claude.com/docs/en/cli-reference for available options
+
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
new file mode 100644
index 0000000..d300267
--- /dev/null
+++ b/.github/workflows/claude.yml
@@ -0,0 +1,50 @@
+name: Claude Code
+
+on:
+ issue_comment:
+ types: [created]
+ pull_request_review_comment:
+ types: [created]
+ issues:
+ types: [opened, assigned]
+ pull_request_review:
+ types: [submitted]
+
+jobs:
+ claude:
+ if: |
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: read
+ issues: read
+ id-token: write
+ actions: read # Required for Claude to read CI results on PRs
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run Claude Code
+ id: claude
+ uses: anthropics/claude-code-action@v1
+ with:
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+
+ # This is an optional setting that allows Claude to read CI results on PRs
+ additional_permissions: |
+ actions: read
+
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
+ # prompt: 'Update the pull request description to include a summary of changes.'
+
+ # Optional: Add claude_args to customize behavior and configuration
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://code.claude.com/docs/en/cli-reference for available options
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
+
diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml
index bd10beb..f824a90 100644
--- a/.github/workflows/sync-upstream.yml
+++ b/.github/workflows/sync-upstream.yml
@@ -257,6 +257,67 @@ jobs:
--label "upstream-sync"
fi
+ check-loop:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Get Loop latest release
+ id: upstream
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ VERSION=$(gh api repos/bmad-code-org/bmad-loop/releases/latest --jq '.tag_name')
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+ echo "Latest Loop version: $VERSION"
+
+ - name: Compare versions
+ id: compare
+ run: |
+ CURRENT=$(jq -r '.version' .upstream-versions/loop.json | sed 's/^v//')
+ UPSTREAM=$(echo "${{ steps.upstream.outputs.version }}" | sed 's/^v//')
+ echo "Current: $CURRENT"
+ echo "Upstream: $UPSTREAM"
+ if [ "$UPSTREAM" != "$CURRENT" ]; then
+ echo "changed=true" >> $GITHUB_OUTPUT
+ else
+ echo "changed=false" >> $GITHUB_OUTPUT
+ echo "Already up to date."
+ fi
+
+ - name: Create issue if update needed
+ if: steps.compare.outputs.changed == 'true'
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ UPSTREAM="${{ steps.upstream.outputs.version }}"
+ CURRENT=$(jq -r '.version' .upstream-versions/loop.json)
+
+ EXISTING=$(gh issue list --repo ${{ github.repository }} --search "Upstream Loop update: $UPSTREAM" --state open --json number -q '.[0].number')
+
+ if [ -z "$EXISTING" ]; then
+ gh label create upstream-sync --repo ${{ github.repository }} --description "Upstream version update" --color "0E8A16" 2>/dev/null || true
+
+ gh issue create \
+ --repo ${{ github.repository }} \
+ --title "Upstream Loop update: $UPSTREAM" \
+ --body "A new version of [bmad-code-org/bmad-loop](https://github.com/bmad-code-org/bmad-loop) is available.
+
+ ## Versions
+
+ - **Current:** $CURRENT
+ - **Upstream:** $UPSTREAM
+
+ ## Action Required
+
+ 1. Run \`bun run sync -- --loop-tag $UPSTREAM\` to update plugin content
+ 2. Run \`bun run validate\` to verify coverage
+ 3. Version file \`.upstream-versions/loop.json\` is updated automatically by sync
+
+ See [upstream releases](https://github.com/bmad-code-org/bmad-loop/releases) for changelog." \
+ --label "upstream-sync"
+ fi
+
check-gds:
runs-on: ubuntu-latest
steps:
diff --git a/.gitignore b/.gitignore
index 3945a3e..f2e985a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
.upstream/
+.upstream-install/
+.upstream-loop/
.research/
.git-ignored/
node_modules/
diff --git a/.plugin-version b/.plugin-version
index 2617179..e9e7f30 100644
--- a/.plugin-version
+++ b/.plugin-version
@@ -1 +1 @@
-v6.2.2.0
+v6.10.0.0
diff --git a/.upstream-versions/bmb.json b/.upstream-versions/bmb.json
index 126b5fa..82d2523 100644
--- a/.upstream-versions/bmb.json
+++ b/.upstream-versions/bmb.json
@@ -1,4 +1,4 @@
{
- "version": "v1.4.0",
- "syncedAt": "2026-03-30"
+ "version": "v2.1.0",
+ "syncedAt": "2026-07-04"
}
diff --git a/.upstream-versions/cis.json b/.upstream-versions/cis.json
index f7605dd..65cdd87 100644
--- a/.upstream-versions/cis.json
+++ b/.upstream-versions/cis.json
@@ -1,4 +1,4 @@
{
- "version": "v0.1.9",
- "syncedAt": "2026-03-30"
+ "version": "v0.2.1",
+ "syncedAt": "2026-07-04"
}
diff --git a/.upstream-versions/core.json b/.upstream-versions/core.json
index e312a1a..e6bf1f7 100644
--- a/.upstream-versions/core.json
+++ b/.upstream-versions/core.json
@@ -1,4 +1,4 @@
{
- "version": "v6.2.2",
- "syncedAt": "2026-03-30"
+ "version": "v6.10.0",
+ "syncedAt": "2026-07-04"
}
diff --git a/.upstream-versions/gds.json b/.upstream-versions/gds.json
index f7bd781..f2665d2 100644
--- a/.upstream-versions/gds.json
+++ b/.upstream-versions/gds.json
@@ -1,4 +1,4 @@
{
- "version": "v0.2.2",
- "syncedAt": "2026-03-30"
+ "version": "v0.6.0",
+ "syncedAt": "2026-07-04"
}
diff --git a/.upstream-versions/loop.json b/.upstream-versions/loop.json
new file mode 100644
index 0000000..5d4b283
--- /dev/null
+++ b/.upstream-versions/loop.json
@@ -0,0 +1,4 @@
+{
+ "version": "v0.8.0",
+ "syncedAt": "2026-07-04"
+}
diff --git a/.upstream-versions/tea.json b/.upstream-versions/tea.json
index 5ab3188..da86c0a 100644
--- a/.upstream-versions/tea.json
+++ b/.upstream-versions/tea.json
@@ -1,4 +1,4 @@
{
- "version": "v1.7.3",
- "syncedAt": "2026-03-30"
+ "version": "v1.19.0",
+ "syncedAt": "2026-07-04"
}
diff --git a/AGENTS.md b/AGENTS.md
index 9891914..4ad7228 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -14,44 +14,68 @@ All scripts use `bun run
+
+
+