ma-agents 3.18.0-beta.1 → 3.18.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/bin/cli.js +78 -28
- package/docs/architecture.md +2 -2
- package/docs/technical-notes/enforcement-hooks-research.md +10 -1
- package/lib/agents.js +81 -3
- package/lib/bmad-cache/cache-manifest.json +0 -12
- package/lib/bmad-extension/skills/ma-agent-cyber/SKILL.md +2 -2
- package/lib/bmad-extension/skills/ma-agent-devops/SKILL.md +2 -2
- package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +2 -2
- package/lib/bmad-extension/skills/ma-agent-sre/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-cyber/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/skills/ma-agent-devops/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/skills/ma-agent-sre/SKILL.md +2 -2
- package/lib/bmad.js +267 -20
- package/lib/installer.js +132 -10
- package/package.json +1 -1
- package/scripts/build-bmad-cache.js +18 -9
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +0 -56
- package/lib/bmad-cache/gds/.markdownlint-cli2.yaml +0 -35
- package/lib/bmad-cache/gds/.nvmrc +0 -1
- package/lib/bmad-cache/gds/.prettierignore +0 -9
- package/lib/bmad-cache/gds/CNAME +0 -1
- package/lib/bmad-cache/gds/LICENSE +0 -26
- package/lib/bmad-cache/gds/README.md +0 -134
- package/lib/bmad-cache/gds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/gds/_git_preserved/config +0 -13
- package/lib/bmad-cache/gds/_git_preserved/description +0 -1
- package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/gds/eslint.config.mjs +0 -141
- package/lib/bmad-cache/gds/package.json +0 -91
- package/lib/bmad-cache/gds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/customize.toml +0 -57
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +0 -59
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +0 -129
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/gametest/qa-index.csv +0 -18
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -55
- package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +0 -65
- package/lib/bmad-cache/gds/src/module-help.csv +0 -30
- package/lib/bmad-cache/gds/src/module.yaml +0 -113
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/game-brain-methods.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +0 -116
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/game-types.csv +0 -25
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/genre-complexity.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +0 -99
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +0 -290
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +0 -84
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +0 -319
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +0 -101
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +0 -508
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +0 -428
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +0 -392
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/pattern-categories.csv +0 -13
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +0 -62
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/sprint-status-template.yaml +0 -55
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/documentation-requirements.csv +0 -12
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/templates/project-scan-report-schema.json +0 -160
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +0 -41
- package/lib/bmad-cache/gds/tools/build-docs.mjs +0 -450
- package/lib/bmad-cache/gds/website/astro.config.mjs +0 -142
- package/lib/bmad-cache/gds/website/public/favicon.ico +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-dark.png +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-light.png +0 -0
- package/lib/bmad-cache/gds/website/src/components/Banner.astro +0 -71
- package/lib/bmad-cache/gds/website/src/components/Header.astro +0 -94
- package/lib/bmad-cache/gds/website/src/components/MobileMenuFooter.astro +0 -33
- package/lib/bmad-cache/gds/website/src/content/config.ts +0 -6
- package/lib/bmad-cache/gds/website/src/content/docs +0 -1
- package/lib/bmad-cache/gds/website/src/lib/site-url.mjs +0 -25
- package/lib/bmad-cache/gds/website/src/rehype-base-paths.js +0 -88
- package/lib/bmad-cache/gds/website/src/rehype-markdown-links.js +0 -117
- package/lib/bmad-cache/gds/website/src/styles/custom.css +0 -503
- package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +0 -35
- package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +0 -38
- package/lib/bmad-cache/wds/.nvmrc +0 -1
- package/lib/bmad-cache/wds/.prettierignore +0 -9
- package/lib/bmad-cache/wds/LICENSE +0 -27
- package/lib/bmad-cache/wds/README.md +0 -139
- package/lib/bmad-cache/wds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/wds/_git_preserved/config +0 -13
- package/lib/bmad-cache/wds/_git_preserved/description +0 -1
- package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +0 -1
- package/lib/bmad-cache/wds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/wds/eslint.config.mjs +0 -152
- package/lib/bmad-cache/wds/package.json +0 -82
- package/lib/bmad-cache/wds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +0 -80
- package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +0 -52
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +0 -70
- package/lib/bmad-cache/wds/src/module-help.csv +0 -19
- package/lib/bmad-cache/wds/src/module.yaml +0 -173
- package/lib/bmad-cache/wds/src/scripts/README.md +0 -155
- package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +0 -202
- package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +0 -158
- package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +0 -229
- package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +0 -120
- package/lib/bmad-cache/wds/src/scripts/wds-nav.js +0 -201
- package/lib/bmad-cache/wds/src/scripts/wds-validate.js +0 -301
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-7-design-system/templates/catalog.template.html +0 -363
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +0 -450
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +0 -104
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +0 -192
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +0 -387
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +0 -164
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +0 -18
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +0 -430
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +0 -63
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +0 -465
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +0 -264
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +0 -363
package/README.md
CHANGED
|
@@ -277,6 +277,21 @@ Both messages end by stating that nothing was read or written on your behalf.
|
|
|
277
277
|
These are stated here, in the shipped documentation, rather than only in the
|
|
278
278
|
repository's changelog — which is **not** part of the npm package.
|
|
279
279
|
|
|
280
|
+
- **Versions 3.7.0 through 3.17.1 could silently delete hand-authored skills.**
|
|
281
|
+
When a tool's skills directory moved between versions, the installer removed
|
|
282
|
+
the old directory recursively once the new one had content, destroying any
|
|
283
|
+
skill you had written there yourself and reporting it as a successful
|
|
284
|
+
cleanup. This affected `.github/copilot/skills`, `.github/skills`,
|
|
285
|
+
`.roo/skills` and `.kilocode/skills`. **It is fixed in this version** — the
|
|
286
|
+
sweep now removes only what ma-agents installed and preserves the directory
|
|
287
|
+
if anything else remains — but deletions already made are not recoverable
|
|
288
|
+
from ma-agents: no backup was written and nothing but the directory name was
|
|
289
|
+
recorded. Check your version control if you kept such skills.
|
|
290
|
+
- **A file placed inside a skill directory ma-agents installed is still removed
|
|
291
|
+
with it.** The sweep's unit is the skill directory, not the file. If you have
|
|
292
|
+
edited a shipped skill in place, that edit is lost when the directory is
|
|
293
|
+
swept. Keep your own skills in their own directories, which are preserved.
|
|
294
|
+
|
|
280
295
|
- **Every claim in this release about behaviour with a Confluence MCP *present*
|
|
281
296
|
is mock-verified, not live.** No authorised Confluence MCP was available to
|
|
282
297
|
the implementation or to any review, so the MCP-present branches were
|
|
@@ -554,7 +569,7 @@ Running `ma-agents` on a project where skills are already installed triggers the
|
|
|
554
569
|
`ma-agents` ships with everything needed to install BMAD without any network access at install time:
|
|
555
570
|
|
|
556
571
|
- **`bmad-method` is a direct npm dependency** — no runtime `npx bmad-method` fetch required. The correct version is pinned and bundled inside `node_modules/` when you `npm install ma-agents`.
|
|
557
|
-
- **External modules pre-bundled** — `lib/bmad-cache/` ships exactly
|
|
572
|
+
- **External modules pre-bundled** — `lib/bmad-cache/` ships exactly 3 optional BMAD modules (`bmb`, `cis`, `tea`) inside the package itself. They are pre-populated to `~/.bmad/cache/external-modules/` before any install runs, so BMAD never needs to clone them from GitHub. The bundled set is a **closed allowlist** — a build-time guard fails loud if the resolved set is ever smaller (a thin cache) *or* larger (a silent upstream addition) than these three, so a new upstream module can never be force-bundled or installed by default. The two design-studio modules `gds` (Game Dev Studio) and `wds` (Whiteport Design Studio) are **not bundled and not installable by ma-agents** — they are not offered by the `--bmad-modules` multiselect, and obtaining either one requires network access to its upstream repository, so on an air-gapped machine neither is available. `bmad-loop` (BMAD's own unattended-dev orchestrator, added upstream at v6.10.0) is deliberately **excluded** from this bundle — see "BMAD-loop and other opt-in modules" below.
|
|
558
573
|
- **Plugin bundle pre-built** — `lib/bmad-extension-plugin/` ships as a deterministic, byte-stable bundle (built from `lib/bmad-extension/` via `scripts/build-plugin.js`). At install time it is staged into `<project>/.ma-agents-plugin-stage/` and consumed by `bmad-method install --custom-source`, so the install never touches the network for plugin assembly.
|
|
559
574
|
- **Deterministic installs** — same `ma-agents` version always produces the same `_bmad/` output, regardless of network conditions (NFR21). Bundle reproducibility is gated by a CI drift check.
|
|
560
575
|
- **Air-gapped friendly** — install from a tarball (`npm install ./ma-agents-x.y.z.tgz`) and run `npx ma-agents install` completely offline. Every PR runs an offline-install gate (`--network none` Docker) to enforce this guarantee (NFR54).
|
|
@@ -937,7 +952,7 @@ ma-agents/
|
|
|
937
952
|
│ │ ├── clinerules.template.md # .clinerules expansion for Cline
|
|
938
953
|
│ │ └── project-context.template.md # project-context.md generation template
|
|
939
954
|
│ ├── bmad-customize/ # Source-of-truth: per-persona phase / on_prem_phase_prefix YAML (consumed by the post-install marker-block injector)
|
|
940
|
-
│ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis,
|
|
955
|
+
│ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis, tea)
|
|
941
956
|
│ ├── bmad-customizations/ # BMAD persona templates (.md) and YAML configs
|
|
942
957
|
│ ├── bmad-extension/ # Extension source: sprint management, bug tracking, agent skills (hand-edited)
|
|
943
958
|
│ ├── bmad-extension-plugin/ # Generated plugin bundle (deterministic; built from bmad-extension/ via scripts/build-plugin.js)
|
package/bin/cli.js
CHANGED
|
@@ -157,10 +157,14 @@ ${chalk.bold('Install options:')}
|
|
|
157
157
|
${chalk.cyan('--yes')} Skip all prompts, use defaults (for CI/CD)
|
|
158
158
|
${chalk.cyan('--agent <name>')} Target a specific agent (skip agent selection)
|
|
159
159
|
${chalk.cyan('--bmad-modules [csv]')} Control BMAD module selection.
|
|
160
|
-
Bare: open a multiselect prompt
|
|
160
|
+
Bare: open a multiselect prompt (offers every
|
|
161
|
+
bundled module: bmm, tea, bmb, cis)
|
|
161
162
|
With CSV: install exactly those (e.g. tea,bmb)
|
|
162
|
-
Omitted: install
|
|
163
|
-
'bmm' is always force-included.
|
|
163
|
+
Omitted: install bmm,tea,bmb,cis (default)
|
|
164
|
+
'bmm' is always force-included. The design-studio
|
|
165
|
+
modules gds and wds are not bundled and cannot be
|
|
166
|
+
installed by ma-agents; getting either one needs
|
|
167
|
+
network access to its upstream repository.
|
|
164
168
|
${chalk.cyan('--bmad-custom-source <ref>')} Enumerate extensions from ONE custom
|
|
165
169
|
marketplace repo (local path or Git URL containing
|
|
166
170
|
.claude-plugin/marketplace.json) and offer them in
|
|
@@ -347,7 +351,7 @@ function parseFlags(args) {
|
|
|
347
351
|
// --bmad-modules — controls BMad module selection. Optional-value flag:
|
|
348
352
|
// bare → ask the user via multiselect prompt
|
|
349
353
|
// with CSV → install exactly those (bmm force-prepended, unknowns rejected)
|
|
350
|
-
// not present → install
|
|
354
|
+
// not present → install FR123's default set, bmm+tea+bmb+cis (no prompt)
|
|
351
355
|
// Force-prepending of `bmm` and validation of unknown ids is handled
|
|
352
356
|
// centrally by lib/bmad.resolveBmadModules.
|
|
353
357
|
let bmadModulesFlag = '';
|
|
@@ -3671,18 +3675,28 @@ async function collectSprintManagementLocation(concern, existingRecord) {
|
|
|
3671
3675
|
*
|
|
3672
3676
|
* Three branches:
|
|
3673
3677
|
* 1. `--bmad-modules <csv>` → install exactly those (bmm force-prepended,
|
|
3674
|
-
* unknowns rejected with a clear error)
|
|
3675
|
-
*
|
|
3676
|
-
*
|
|
3677
|
-
*
|
|
3678
|
-
*
|
|
3679
|
-
*
|
|
3680
|
-
*
|
|
3678
|
+
* unknowns rejected with a clear error). `gds`/`wds` are not bundled
|
|
3679
|
+
* (FR75), so naming either one is an unknown-module error.
|
|
3680
|
+
* 2. `--bmad-modules` bare → multiselect prompt; EVERY bundled module is
|
|
3681
|
+
* offered, bmm is required and pre-checked, and the remaining initial
|
|
3682
|
+
* check state is the FR123 default set — so a no-op confirmation lands
|
|
3683
|
+
* on exactly the same modules as branch 3.
|
|
3684
|
+
* 3. (no flag) → no prompt. In order: a persisted selection
|
|
3685
|
+
* from a prior run (bug 27.13), else the modules already present under
|
|
3686
|
+
* `_bmad/`, else `bmad.getDefaultBmadModules()` — FR123's default set,
|
|
3687
|
+
* bmm + tea + bmb + cis.
|
|
3688
|
+
*
|
|
3689
|
+
* BRANCH 3 IS A NAMED LITERAL, NOT "EVERY NON-RETIRED MODULE" (FR123).
|
|
3690
|
+
* Deriving the default from the manifest made it grow silently every time a
|
|
3691
|
+
* module was bundled; naming the members means the next bundled module has to
|
|
3692
|
+
* be added on purpose. The bundled set and the default set currently coincide,
|
|
3693
|
+
* so branches 2 and 3 land on the same modules — but they are still two
|
|
3694
|
+
* different decisions and the literal keeps them apart.
|
|
3681
3695
|
*
|
|
3682
3696
|
* `bmm` is force-included in every path because the BMad core agents
|
|
3683
3697
|
* (analyst, PM, dev, architect, ...) live there and downstream skills
|
|
3684
|
-
* break without them. Retired modules (
|
|
3685
|
-
*
|
|
3698
|
+
* break without them. Retired modules (none at v6.10.0) are filtered out
|
|
3699
|
+
* unconditionally.
|
|
3686
3700
|
*/
|
|
3687
3701
|
async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRoot } = {}) {
|
|
3688
3702
|
const installable = bmad.getInstallableBmadModules().filter(m => !m.retired);
|
|
@@ -3712,15 +3726,22 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
|
|
|
3712
3726
|
|
|
3713
3727
|
// Branch 2: bare --bmad-modules → multiselect prompt.
|
|
3714
3728
|
if (bmadModulesPrompt) {
|
|
3729
|
+
// FR123: every bundled module is OFFERED, and the initial check state is
|
|
3730
|
+
// the default INSTALL set, so pressing Enter without touching anything
|
|
3731
|
+
// lands on the same modules as the no-flag branch below. The offered list
|
|
3732
|
+
// is `getInstallableBmadModules()`, i.e. the cache manifest — a module
|
|
3733
|
+
// that is not bundled (`gds`/`wds`, FR75) is not offered here, because
|
|
3734
|
+
// offering something this package cannot install would be a lie.
|
|
3735
|
+
const defaultIds = new Set(bmad.getDefaultBmadModules(installable));
|
|
3715
3736
|
const choices = installable.map(m => {
|
|
3716
3737
|
const isCore = m.id === 'bmm';
|
|
3717
3738
|
const requiredTag = isCore ? chalk.yellow(' (required)') : '';
|
|
3718
3739
|
return {
|
|
3719
3740
|
title: chalk.white(m.id) + requiredTag + chalk.gray(` — ${m.description}`),
|
|
3720
3741
|
value: m.id,
|
|
3721
|
-
//
|
|
3722
|
-
//
|
|
3723
|
-
selected:
|
|
3742
|
+
// bmm is force-included downstream regardless; pre-checking it keeps
|
|
3743
|
+
// the prompt honest about that.
|
|
3744
|
+
selected: isCore || defaultIds.has(m.id),
|
|
3724
3745
|
};
|
|
3725
3746
|
});
|
|
3726
3747
|
|
|
@@ -3740,22 +3761,52 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
|
|
|
3740
3761
|
return persist(bmad.resolveBmadModules({ requested: chosenModules, available: installable }));
|
|
3741
3762
|
}
|
|
3742
3763
|
|
|
3743
|
-
// Branch 3: no flag
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
//
|
|
3747
|
-
//
|
|
3764
|
+
// Branch 3: no flag. Three fallbacks, most-specific first.
|
|
3765
|
+
const availableIds = new Set(installable.map(m => m.id));
|
|
3766
|
+
|
|
3767
|
+
// 3a — a persisted selection from a prior run (bug 27.13): a previous
|
|
3768
|
+
// deselection must survive. Intersected with the currently-installable set so
|
|
3769
|
+
// a since-retired module does not resurface; bmm is force-included via
|
|
3770
|
+
// resolveBmadModules.
|
|
3748
3771
|
const persisted = getBmadModules(root);
|
|
3749
3772
|
if (persisted && persisted.length > 0) {
|
|
3750
|
-
const availableIds = new Set(installable.map(m => m.id));
|
|
3751
3773
|
const stillInstallable = persisted.filter(id => availableIds.has(id));
|
|
3752
3774
|
try {
|
|
3753
3775
|
return persist(bmad.resolveBmadModules({ requested: stillInstallable, available: installable }));
|
|
3754
3776
|
} catch {
|
|
3755
|
-
// If the persisted set somehow fails validation, fall through
|
|
3777
|
+
// If the persisted set somehow fails validation, fall through.
|
|
3756
3778
|
}
|
|
3757
3779
|
}
|
|
3758
|
-
|
|
3780
|
+
|
|
3781
|
+
// 3b — NON-DESTRUCTIVE MIGRATION. The narrowed default (FR123) is
|
|
3782
|
+
// behaviour-visible to projects that installed under an older, wider
|
|
3783
|
+
// default, and an update run passes this same resolved list to
|
|
3784
|
+
// `bmad.updateBmad`. A project that already has a module under `_bmad/`
|
|
3785
|
+
// must not have it dropped out of its own module list just because the
|
|
3786
|
+
// default moved — narrowing applies to NEW installs, not to existing ones.
|
|
3787
|
+
//
|
|
3788
|
+
// 3a covers projects installed since bug 27.13 landed persistence; this
|
|
3789
|
+
// covers the ones installed before it, where `.ma-agents.json` carries no
|
|
3790
|
+
// `bmadModules` field at all and disk is the only record of what was chosen.
|
|
3791
|
+
// A fresh project has no `_bmad/`, so this is inert for new installs — which
|
|
3792
|
+
// is exactly the "existing installs unchanged, only NEW installs get the
|
|
3793
|
+
// narrower default" posture NFR49 / Story 30.4 established for Demerzel.
|
|
3794
|
+
// Persisting the result also migrates the project onto 27.13's durable
|
|
3795
|
+
// record, so this disk probe is needed at most once per project.
|
|
3796
|
+
const alreadyInstalled = bmad.getInstalledBmadModules(root).filter(id => availableIds.has(id));
|
|
3797
|
+
if (alreadyInstalled.length > 0) {
|
|
3798
|
+
try {
|
|
3799
|
+
return persist(bmad.resolveBmadModules({ requested: alreadyInstalled, available: installable }));
|
|
3800
|
+
} catch {
|
|
3801
|
+
// Fall through to the default set.
|
|
3802
|
+
}
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3805
|
+
// 3c — a genuinely fresh install: FR123's amended default set.
|
|
3806
|
+
return persist(bmad.resolveBmadModules({
|
|
3807
|
+
requested: bmad.getDefaultBmadModules(installable),
|
|
3808
|
+
available: installable,
|
|
3809
|
+
}));
|
|
3759
3810
|
}
|
|
3760
3811
|
|
|
3761
3812
|
// --- Custom marketplace source (Story 30.6a) ---
|
|
@@ -4408,10 +4459,9 @@ async function installWizard(preselectedSkill, preselectedAgents, customPath, fo
|
|
|
4408
4459
|
// stage the plugin and invoke the installer in one pass.
|
|
4409
4460
|
// v6.6.0: --tools none is rejected for fresh installs; skip BMAD entirely when no IDE tools selected.
|
|
4410
4461
|
if (bmadTools.length > 0) {
|
|
4411
|
-
// Resolve module set once per BMAD invocation. Default is
|
|
4412
|
-
//
|
|
4413
|
-
//
|
|
4414
|
-
// (bare).
|
|
4462
|
+
// Resolve module set once per BMAD invocation. Default (FR123) is
|
|
4463
|
+
// bmm+tea+bmb+cis, which is the whole bundled set; `--bmad-modules <csv>`
|
|
4464
|
+
// or the multiselect that bare --bmad-modules opens can narrow it.
|
|
4415
4465
|
const bmadModules = await selectBmadModules({
|
|
4416
4466
|
bmadModulesFlag,
|
|
4417
4467
|
bmadModulesPrompt,
|
package/docs/architecture.md
CHANGED
|
@@ -199,7 +199,7 @@ skills/<skill-name>/
|
|
|
199
199
|
|
|
200
200
|
**Responsibility**: Pre-vendor BMAD's external modules so installs never touch the network.
|
|
201
201
|
|
|
202
|
-
ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's external modules (`tea`, `bmb`, `cis
|
|
202
|
+
ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's external modules (`tea`, `bmb`, `cis`) into `lib/bmad-cache/` at build time via `npm run build:bmad-cache` ([scripts/build-bmad-cache.js](../scripts/build-bmad-cache.js)). This is what lets `npx ma-agents install` run fully offline in air-gapped environments (NFR2/NFR50/NFR54) — the npm tarball already contains every module bmad-method would otherwise `git clone` from GitHub at install time.
|
|
203
203
|
|
|
204
204
|
**Module discovery**: the builder reads BMAD's bundled module registry to learn which external modules to clone. **The registry source has moved across BMAD versions** and the reader must track it:
|
|
205
205
|
|
|
@@ -209,7 +209,7 @@ ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's ext
|
|
|
209
209
|
| 6.3.0 – 6.6.x | `tools/installer/modules/registry-fallback.yaml` | YAML |
|
|
210
210
|
| 6.8.0+ | `bmad-modules.yaml` (bmad-method **package root**) | YAML (`modules:` map; the in-package `registry-fallback.yaml` was retired in 6.7.0) |
|
|
211
211
|
|
|
212
|
-
The registry has stayed **YAML** throughout — only its path has moved. (`tools/installer/modules/official-modules.js` is unchanged loader code that reads this YAML; it does not contain the module list.)
|
|
212
|
+
The registry has stayed **YAML** throughout — only its path has moved. (`tools/installer/modules/official-modules.js` is unchanged loader code that reads this YAML; it does not contain the module list.) The bundle is governed by a closed allowlist, `KNOWN_BUNDLED_MODULES` = **tea, bmb, cis** (FR235); every other registry entry is excluded whatever its `type`, including `type: experimental` (currently `automator`), the `marketplace-plugin` module `bmad-loop`, and the two design-studio modules `gds`/`wds`, which FR75 does not bundle. `bmm`/`core` are built-in (loaded from bmad-method's local `module.yaml`, absent from the registry) and are never cloned. The reader for the current pin and its fail-loud contract are defined by Architecture Decision **P5-5** (Epic 27) in `_bmad-output/planning-artifacts/architecture.md`. A companion build step, `npm run build:plugin` ([scripts/build-plugin.js](../scripts/build-plugin.js)), assembles the ma-agents extension plugin bundle (`lib/bmad-extension-plugin/`) deterministically; a CI Bundle Drift Guard enforces that the committed bundle matches a fresh build.
|
|
213
213
|
|
|
214
214
|
> **Maintenance note:** because the registry path has now moved twice (YAML→YAML→YAML at three locations), the cache builder fails loud — if the resolved `type: bmad-org` set is smaller than the known bundled set, or no module source is found, it exits non-zero rather than producing a thin/empty cache, so a future BMAD registry move surfaces at build time, not as a broken air-gapped install.
|
|
215
215
|
|
|
@@ -294,11 +294,20 @@ All 11 BMAD agents have enforcement via `critical_actions` in `.customize.yaml`
|
|
|
294
294
|
**Mechanism:**
|
|
295
295
|
```yaml
|
|
296
296
|
critical_actions:
|
|
297
|
-
1: "Read the skills MANIFEST at {project-root}/_bmad/skills
|
|
297
|
+
1: "Read the skills MANIFEST at {project-root}/_bmad/skills/<agent-slug>/MANIFEST.yaml if it exists"
|
|
298
298
|
2: "For each skill marked always_load: true, read the skill file completely"
|
|
299
299
|
3: "Follow all skill directives during this session"
|
|
300
300
|
```
|
|
301
301
|
|
|
302
|
+
> **Note (2026-09-12):** this snippet previously showed a bare
|
|
303
|
+
> `{project-root}/_bmad/skills/MANIFEST.yaml`. That path is not what Story 8.3
|
|
304
|
+
> specified — the manifest is per-agent-host, at
|
|
305
|
+
> `{project-root}/_bmad/skills/<agent-slug>/MANIFEST.yaml`, where `<agent-slug>`
|
|
306
|
+
> matches the `skillsDir` in `lib/agents.js` (`sre`, `devops`, `cyber`, `sqa`).
|
|
307
|
+
> The bare form leaked from here into `ma-agent-sqa`'s Critical Actions block and
|
|
308
|
+
> survived there until it was corrected. Keep the slug segment in any copy of this
|
|
309
|
+
> snippet.
|
|
310
|
+
|
|
302
311
|
**Deployment:** Extension module at `_bmad/extensions/ma-agents-skills/` deployed during BMAD customization pipeline (Stage 3 in `bmad.js`).
|
|
303
312
|
|
|
304
313
|
**Coverage:**
|
package/lib/agents.js
CHANGED
|
@@ -242,8 +242,27 @@ const agents = [
|
|
|
242
242
|
version: '1.0.0',
|
|
243
243
|
category: 'ide',
|
|
244
244
|
description: 'Google Deepmind Antigravity Agent',
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
// Bug `antigravity-path-divergence`: this used to read `.antigravity/skills`,
|
|
246
|
+
// a path ma-agents invented from its own per-tool naming convention. Upstream
|
|
247
|
+
// bmad-method maps the SAME tool to `.agent/skills`
|
|
248
|
+
// (node_modules/bmad-method/tools/installer/ide/platform-codes.yaml, platform
|
|
249
|
+
// `antigravity`, in a file whose header records the paths as "verified against
|
|
250
|
+
// each tool's primary docs"; its global counterpart `~/.gemini/antigravity/skills`
|
|
251
|
+
// shows the entry was researched rather than guessed). Because ma-agents
|
|
252
|
+
// delegates part of the install to that installer, a single run produced TWO
|
|
253
|
+
// trees — and `.agent/skills`, the one Antigravity actually reads, was named by
|
|
254
|
+
// neither this registry nor lib/bmad.js, so every ma-agents post-deploy patch
|
|
255
|
+
// (the on-prem phase prefix among them) silently skipped it. Measured in a real
|
|
256
|
+
// on-prem project: .claude/.agents/.cline each carried the prefix on 6 personas,
|
|
257
|
+
// .agent/skills on 0.
|
|
258
|
+
// Upstream is the authority on which directory a tool reads, so we align —
|
|
259
|
+
// exactly as copilot/roo-code/kilocode were aligned to `.agents/skills` when
|
|
260
|
+
// bmad-method 6.5.0 moved them (see the copilot entry above). This is a
|
|
261
|
+
// per-tool decision on per-tool evidence: the other three divergences in the
|
|
262
|
+
// table are recorded in PLATFORM_PATH_DIVERGENCES below, deliberately unchanged.
|
|
263
|
+
// Existing installs migrate via OBSOLETE_TOOL_SKILL_DIRS in lib/installer.js.
|
|
264
|
+
skillsDir: '.agent/skills',
|
|
265
|
+
getProjectPath: () => path.join(process.cwd(), '.agent', 'skills'),
|
|
247
266
|
getGlobalPath: () => {
|
|
248
267
|
const platform = os.platform();
|
|
249
268
|
if (platform === 'win32') {
|
|
@@ -356,6 +375,64 @@ const agents = [
|
|
|
356
375
|
// Add them here in a dedicated future story if/when demand appears.
|
|
357
376
|
];
|
|
358
377
|
|
|
378
|
+
/**
|
|
379
|
+
* Declared, deliberate divergences between this registry's project `skillsDir`
|
|
380
|
+
* and bmad-method's `installer.target_dir` for the SAME tool
|
|
381
|
+
* (`node_modules/bmad-method/tools/installer/ide/platform-codes.yaml`).
|
|
382
|
+
* Keyed by bmad platform code (see `getBmadPlatformCode`).
|
|
383
|
+
*
|
|
384
|
+
* Why this exists (bug `antigravity-path-divergence`): the two tables had drifted
|
|
385
|
+
* apart for four tools and nothing compared them outside the five flagships, so a
|
|
386
|
+
* whole second skill tree appeared in real projects with no owner and no patcher.
|
|
387
|
+
* `test/routing-parity.test.js` (section 5) now enumerates EVERY tool in BOTH
|
|
388
|
+
* tables and fails on any divergence that is not declared here — and on any
|
|
389
|
+
* declaration whose recorded paths have gone stale, so an entry cannot rot into
|
|
390
|
+
* cover for a different divergence.
|
|
391
|
+
*
|
|
392
|
+
* Scope note — PROJECT paths only. `getGlobalPath()` follows a per-OS
|
|
393
|
+
* application-data convention that differs from upstream's `global_target_dir`
|
|
394
|
+
* for EVERY tool, claude-code included (`%APPDATA%/Claude/skills` vs
|
|
395
|
+
* `~/.claude/skills`). That is a whole-table convention difference, not a
|
|
396
|
+
* per-tool divergence, and is deliberately out of scope here.
|
|
397
|
+
*
|
|
398
|
+
* To add an entry you must record BOTH live paths and a real reason. To remove
|
|
399
|
+
* one, align the paths — the test fails on a declaration whose paths now agree.
|
|
400
|
+
*/
|
|
401
|
+
const PLATFORM_PATH_DIVERGENCES = Object.freeze({
|
|
402
|
+
gemini: Object.freeze({
|
|
403
|
+
maSkillsDir: '.gemini/skills',
|
|
404
|
+
bmadTargetDir: '.agents/skills',
|
|
405
|
+
reason:
|
|
406
|
+
"Upstream's `gemini` platform is the Gemini CLI, which reads the shared " +
|
|
407
|
+
'`.agents/skills` tree; this registry entry targets Google Gemini Code Assist ' +
|
|
408
|
+
'(the IDE extension — note its instruction file `.gemini/gemini.md`), a ' +
|
|
409
|
+
'different product sharing the same code. Contained: upstream writes ' +
|
|
410
|
+
'`.agents/skills`, which is already an IDE skillsDir in this registry, already ' +
|
|
411
|
+
'a seed in lib/bmad.js TOOL_SKILL_DIRS, and already reconciled by bug 27.16 — ' +
|
|
412
|
+
'so no tree goes unpatched. Realigning is a compatibility call for its own story.'
|
|
413
|
+
}),
|
|
414
|
+
cursor: Object.freeze({
|
|
415
|
+
maSkillsDir: '.cursor/skills',
|
|
416
|
+
bmadTargetDir: '.agents/skills',
|
|
417
|
+
reason:
|
|
418
|
+
'Cursor reads its own `.cursor/` workspace directory (this registry also stamps ' +
|
|
419
|
+
'`.cursor/cursor.md` there); upstream routes it to the shared `.agents/skills` ' +
|
|
420
|
+
'cross-tool tree instead. Contained for the same reason as `gemini`: upstream ' +
|
|
421
|
+
"'s target is already a known, patched and reconciled tree. Kept deliberately " +
|
|
422
|
+
'so this bug fix changes the write path of exactly one tool, on that tool’s evidence.'
|
|
423
|
+
}),
|
|
424
|
+
opencode: Object.freeze({
|
|
425
|
+
maSkillsDir: '.opencode/skills',
|
|
426
|
+
bmadTargetDir: '.agents/skills',
|
|
427
|
+
reason:
|
|
428
|
+
'OpenCode is wired here through `opencode.json::instructions[]` plus AGENTS.md ' +
|
|
429
|
+
'(Story 21.4) against its own `.opencode/` tree; upstream routes it to the shared ' +
|
|
430
|
+
'`.agents/skills`. Contained for the same reason as `gemini` and `cursor`: ' +
|
|
431
|
+
"upstream's target is already a known, patched and reconciled tree. Realignment " +
|
|
432
|
+
'would also have to move the instruction wiring, so it belongs in its own story.'
|
|
433
|
+
})
|
|
434
|
+
});
|
|
435
|
+
|
|
359
436
|
function getAgent(agentId) {
|
|
360
437
|
return agents.find(a => a.id === agentId);
|
|
361
438
|
}
|
|
@@ -383,5 +460,6 @@ module.exports = {
|
|
|
383
460
|
getAgent,
|
|
384
461
|
getAllAgents,
|
|
385
462
|
getAgentsByCategory,
|
|
386
|
-
getBmadPlatformCode
|
|
463
|
+
getBmadPlatformCode,
|
|
464
|
+
PLATFORM_PATH_DIVERGENCES
|
|
387
465
|
};
|
|
@@ -20,18 +20,6 @@
|
|
|
20
20
|
"branch": "main",
|
|
21
21
|
"commitSha": "07a8dd03d196a762f21c241d985293fe5b0f90e7",
|
|
22
22
|
"clonedAt": "2026-06-13T15:11:42.507Z"
|
|
23
|
-
},
|
|
24
|
-
"gds": {
|
|
25
|
-
"url": "https://github.com/bmad-code-org/bmad-module-game-dev-studio.git",
|
|
26
|
-
"branch": "main",
|
|
27
|
-
"commitSha": "46c3a6cddf882af1f918187d6e5748c1edfd9c52",
|
|
28
|
-
"clonedAt": "2026-06-13T15:11:43.930Z"
|
|
29
|
-
},
|
|
30
|
-
"wds": {
|
|
31
|
-
"url": "https://github.com/bmad-code-org/bmad-method-wds-expansion",
|
|
32
|
-
"branch": "main",
|
|
33
|
-
"commitSha": "cc16f09fcfab26d35635af1491f36a38a8431c8d",
|
|
34
|
-
"clonedAt": "2026-06-13T15:11:45.601Z"
|
|
35
23
|
}
|
|
36
24
|
}
|
|
37
25
|
}
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -53,7 +53,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
53
53
|
| 14 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
54
54
|
|
|
55
55
|
## Critical Actions
|
|
56
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/MANIFEST.yaml
|
|
57
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
56
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sqa/MANIFEST.yaml if it exists
|
|
57
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
58
58
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
59
59
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"name": "ma-skills",
|
|
38
38
|
"source": "./",
|
|
39
39
|
"description": "ma-agents extension module providing enterprise SDLC personas and operational workflow skills.",
|
|
40
|
-
"version": "3.18.0-beta.
|
|
40
|
+
"version": "3.18.0-beta.3",
|
|
41
41
|
"author": {
|
|
42
42
|
"name": "Alon Mayaffit"
|
|
43
43
|
},
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -53,7 +53,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
53
53
|
| 14 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
54
54
|
|
|
55
55
|
## Critical Actions
|
|
56
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/MANIFEST.yaml
|
|
57
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
56
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sqa/MANIFEST.yaml if it exists
|
|
57
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
58
58
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
59
59
|
4. Follow all skill directives and project-context rules during this session
|
|
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
43
43
|
| 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
|
|
44
44
|
|
|
45
45
|
## Critical Actions
|
|
46
|
-
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml
|
|
47
|
-
2. For each skill marked always_load: true, read the skill file completely
|
|
46
|
+
1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml if it exists
|
|
47
|
+
2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
|
|
48
48
|
3. If _bmad-output/project-context.md exists, read it completely
|
|
49
49
|
4. Follow all skill directives and project-context rules during this session
|