ma-agents 3.18.0-beta.2 → 3.18.0
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 +2 -2
- package/bin/cli.js +29 -32
- package/docs/architecture.md +2 -2
- package/lib/bmad-cache/cache-manifest.json +0 -12
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad.js +33 -34
- 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
|
@@ -569,7 +569,7 @@ Running `ma-agents` on a project where skills are already installed triggers the
|
|
|
569
569
|
`ma-agents` ships with everything needed to install BMAD without any network access at install time:
|
|
570
570
|
|
|
571
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`.
|
|
572
|
-
- **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.
|
|
573
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.
|
|
574
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.
|
|
575
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).
|
|
@@ -952,7 +952,7 @@ ma-agents/
|
|
|
952
952
|
│ │ ├── clinerules.template.md # .clinerules expansion for Cline
|
|
953
953
|
│ │ └── project-context.template.md # project-context.md generation template
|
|
954
954
|
│ ├── bmad-customize/ # Source-of-truth: per-persona phase / on_prem_phase_prefix YAML (consumed by the post-install marker-block injector)
|
|
955
|
-
│ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis,
|
|
955
|
+
│ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis, tea)
|
|
956
956
|
│ ├── bmad-customizations/ # BMAD persona templates (.md) and YAML configs
|
|
957
957
|
│ ├── bmad-extension/ # Extension source: sprint management, bug tracking, agent skills (hand-edited)
|
|
958
958
|
│ ├── bmad-extension-plugin/ # Generated plugin bundle (deterministic; built from bmad-extension/ via scripts/build-plugin.js)
|
package/bin/cli.js
CHANGED
|
@@ -158,13 +158,13 @@ ${chalk.bold('Install options:')}
|
|
|
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
160
|
Bare: open a multiselect prompt (offers every
|
|
161
|
-
bundled module,
|
|
161
|
+
bundled module: bmm, tea, bmb, cis)
|
|
162
162
|
With CSV: install exactly those (e.g. tea,bmb)
|
|
163
|
-
Omitted: install bmm,tea,bmb,cis (default)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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.
|
|
168
168
|
${chalk.cyan('--bmad-custom-source <ref>')} Enumerate extensions from ONE custom
|
|
169
169
|
marketplace repo (local path or Git URL containing
|
|
170
170
|
.claude-plugin/marketplace.json) and offer them in
|
|
@@ -3675,25 +3675,23 @@ async function collectSprintManagementLocation(concern, existingRecord) {
|
|
|
3675
3675
|
*
|
|
3676
3676
|
* Three branches:
|
|
3677
3677
|
* 1. `--bmad-modules <csv>` → install exactly those (bmm force-prepended,
|
|
3678
|
-
* unknowns rejected with a clear error).
|
|
3679
|
-
*
|
|
3678
|
+
* unknowns rejected with a clear error). `gds`/`wds` are not bundled
|
|
3679
|
+
* (FR75), so naming either one is an unknown-module error.
|
|
3680
3680
|
* 2. `--bmad-modules` bare → multiselect prompt; EVERY bundled module is
|
|
3681
3681
|
* offered, bmm is required and pre-checked, and the remaining initial
|
|
3682
3682
|
* check state is the FR123 default set — so a no-op confirmation lands
|
|
3683
3683
|
* on exactly the same modules as branch 3.
|
|
3684
3684
|
* 3. (no flag) → no prompt. In order: a persisted selection
|
|
3685
3685
|
* from a prior run (bug 27.13), else the modules already present under
|
|
3686
|
-
* `_bmad/`, else `bmad.getDefaultBmadModules()` — FR123's
|
|
3687
|
-
*
|
|
3686
|
+
* `_bmad/`, else `bmad.getDefaultBmadModules()` — FR123's default set,
|
|
3687
|
+
* bmm + tea + bmb + cis.
|
|
3688
3688
|
*
|
|
3689
|
-
*
|
|
3690
|
-
*
|
|
3691
|
-
*
|
|
3692
|
-
*
|
|
3693
|
-
*
|
|
3694
|
-
*
|
|
3695
|
-
* installing are different decisions made at different times, and only the
|
|
3696
|
-
* second one moved.
|
|
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.
|
|
3697
3695
|
*
|
|
3698
3696
|
* `bmm` is force-included in every path because the BMad core agents
|
|
3699
3697
|
* (analyst, PM, dev, architect, ...) live there and downstream skills
|
|
@@ -3728,12 +3726,12 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
|
|
|
3728
3726
|
|
|
3729
3727
|
// Branch 2: bare --bmad-modules → multiselect prompt.
|
|
3730
3728
|
if (bmadModulesPrompt) {
|
|
3731
|
-
// FR123: every bundled module is OFFERED
|
|
3732
|
-
//
|
|
3733
|
-
//
|
|
3734
|
-
//
|
|
3735
|
-
//
|
|
3736
|
-
//
|
|
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.
|
|
3737
3735
|
const defaultIds = new Set(bmad.getDefaultBmadModules(installable));
|
|
3738
3736
|
const choices = installable.map(m => {
|
|
3739
3737
|
const isCore = m.id === 'bmm';
|
|
@@ -3780,10 +3778,10 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
|
|
|
3780
3778
|
}
|
|
3781
3779
|
}
|
|
3782
3780
|
|
|
3783
|
-
// 3b — NON-DESTRUCTIVE MIGRATION.
|
|
3784
|
-
//
|
|
3785
|
-
//
|
|
3786
|
-
//
|
|
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/`
|
|
3787
3785
|
// must not have it dropped out of its own module list just because the
|
|
3788
3786
|
// default moved — narrowing applies to NEW installs, not to existing ones.
|
|
3789
3787
|
//
|
|
@@ -4461,10 +4459,9 @@ async function installWizard(preselectedSkill, preselectedAgents, customPath, fo
|
|
|
4461
4459
|
// stage the plugin and invoke the installer in one pass.
|
|
4462
4460
|
// v6.6.0: --tools none is rejected for fresh installs; skip BMAD entirely when no IDE tools selected.
|
|
4463
4461
|
if (bmadTools.length > 0) {
|
|
4464
|
-
// Resolve module set once per BMAD invocation. Default (FR123
|
|
4465
|
-
//
|
|
4466
|
-
//
|
|
4467
|
-
// multiselect that bare --bmad-modules opens.
|
|
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.
|
|
4468
4465
|
const bmadModules = await selectBmadModules({
|
|
4469
4466
|
bmadModulesFlag,
|
|
4470
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
|
|
|
@@ -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
|
}
|
|
@@ -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
|
|
40
|
+
"version": "3.18.0",
|
|
41
41
|
"author": {
|
|
42
42
|
"name": "Alon Mayaffit"
|
|
43
43
|
},
|
package/lib/bmad.js
CHANGED
|
@@ -522,48 +522,44 @@ const BMAD_MODULE_DESCRIPTIONS = Object.freeze({
|
|
|
522
522
|
bmm: 'BMad Method core — analyst, PM, architect, dev, UX, tech-writer (required)',
|
|
523
523
|
bmb: 'BMad Builder — agent, module, and workflow builders',
|
|
524
524
|
cis: 'Creative Intelligence Suite — innovation and ideation toolkit',
|
|
525
|
-
gds: 'Game Dev Studio — game development workflows',
|
|
526
525
|
tea: 'Test Architecture Enterprise — Test Architect (Murat) + 9 testarch workflows',
|
|
527
|
-
wds: 'Whiteport Design Studio — strategic UX and design-first planning',
|
|
528
526
|
});
|
|
529
527
|
|
|
530
528
|
/**
|
|
531
|
-
* FR123
|
|
529
|
+
* FR123 — the DEFAULT BMAD install set.
|
|
532
530
|
*
|
|
533
|
-
* "the default install set is bmm
|
|
534
|
-
*
|
|
535
|
-
* modules gds (Game Design Studio) and wds (Whiteport Design Studio) are
|
|
536
|
-
* bundled but not installed by default."
|
|
531
|
+
* "the default install set is bmm, tea, bmb, cis, drawn from the bundled
|
|
532
|
+
* cache manifest."
|
|
537
533
|
*
|
|
538
534
|
* BUNDLING AND INSTALLING ARE DIFFERENT THINGS and this constant only speaks
|
|
539
|
-
* about the second one.
|
|
540
|
-
* `
|
|
541
|
-
*
|
|
542
|
-
*
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
*
|
|
552
|
-
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
* what made the set grow silently every time a module was bundled. Naming the
|
|
557
|
-
* members means the next bundled module has to be added here on purpose.
|
|
535
|
+
* about the second one. They currently coincide: `bmm` ships inside the
|
|
536
|
+
* `bmad-method` dependency and `tea`/`bmb`/`cis` are the whole of
|
|
537
|
+
* `KNOWN_BUNDLED_MODULES`, so every installable module is a default one.
|
|
538
|
+
*
|
|
539
|
+
* `gds` and `wds` ARE NOT HERE BECAUSE THEY ARE NOT BUNDLED (FR75). They are
|
|
540
|
+
* absent from `lib/bmad-cache/`, absent from `cache-manifest.json`, and absent
|
|
541
|
+
* from `KNOWN_BUNDLED_MODULES`, so `getInstallableBmadModules()` never lists
|
|
542
|
+
* them: the `--bmad-modules` multiselect does not offer them and
|
|
543
|
+
* `--bmad-modules wds` is rejected by `resolveBmadModules` as an unknown
|
|
544
|
+
* module. Obtaining either one requires network access to its upstream GitHub
|
|
545
|
+
* repository, which is exactly what the bundled cache exists to avoid — on an
|
|
546
|
+
* air-gapped machine they are not installable at all.
|
|
547
|
+
*
|
|
548
|
+
* DELIBERATELY A LITERAL, NOT DERIVED FROM THE MANIFEST. Deriving it — "every
|
|
549
|
+
* non-retired key of the cache manifest" — is what made the set grow silently
|
|
550
|
+
* every time a module was bundled. Naming the members means the next bundled
|
|
551
|
+
* module has to be added here on purpose.
|
|
558
552
|
*/
|
|
559
553
|
const DEFAULT_BMAD_MODULE_IDS = Object.freeze(['bmm', 'tea', 'bmb', 'cis']);
|
|
560
554
|
|
|
561
555
|
/**
|
|
562
|
-
* The counterpart to DEFAULT_BMAD_MODULE_IDS:
|
|
563
|
-
*
|
|
564
|
-
*
|
|
556
|
+
* The counterpart to DEFAULT_BMAD_MODULE_IDS: modules that are bundled and
|
|
557
|
+
* installable but NOT installed unless asked for. Empty — the bundled set and
|
|
558
|
+
* the default set coincide. Exported (and kept, rather than deleted) so
|
|
559
|
+
* callers and tests can state "nothing is bundled-but-withheld" directly
|
|
560
|
+
* instead of re-deriving it by subtraction.
|
|
565
561
|
*/
|
|
566
|
-
const NON_DEFAULT_BMAD_MODULE_IDS = Object.freeze([
|
|
562
|
+
const NON_DEFAULT_BMAD_MODULE_IDS = Object.freeze([]);
|
|
567
563
|
|
|
568
564
|
/**
|
|
569
565
|
* The FR123 default set, intersected with what this bundle can actually
|
|
@@ -594,12 +590,15 @@ function getDefaultBmadModules(available) {
|
|
|
594
590
|
* Return the BMAD modules this ma-agents bundle can install. `bmm` (the
|
|
595
591
|
* BMad core) is always first because it ships inside the `bmad-method`
|
|
596
592
|
* npm dependency itself, not in `lib/bmad-cache/` — the cache only carries
|
|
597
|
-
* the optional external modules (bmb, cis,
|
|
593
|
+
* the optional external modules (bmb, cis, tea).
|
|
594
|
+
*
|
|
595
|
+
* The list is the cache manifest, so it is exactly the bundled set: a module
|
|
596
|
+
* that is not bundled is not installable by this package at all, and callers
|
|
597
|
+
* never have to special-case one (FR75).
|
|
598
598
|
*
|
|
599
599
|
* Each entry carries a `retired` flag so the caller can hide modules that
|
|
600
600
|
* have been retired upstream (driven by the manifest's `retiredUpstream`
|
|
601
|
-
* marker;
|
|
602
|
-
* active `type: bmad-org` clones, so none are flagged).
|
|
601
|
+
* marker; tea, bmb and cis are all active clones, so none are flagged).
|
|
603
602
|
*
|
|
604
603
|
* If the cache manifest is missing or unreadable, falls back to a list
|
|
605
604
|
* containing only `bmm` — that's the minimum a successful install needs.
|
|
@@ -635,7 +634,7 @@ function getInstallableBmadModules() {
|
|
|
635
634
|
* projects that predate bug 27.13's persisted selection.
|
|
636
635
|
*
|
|
637
636
|
* DIRECTORIES, not merely entries. `fs.existsSync` answers yes for a regular
|
|
638
|
-
* file, so a stray `_bmad/
|
|
637
|
+
* file, so a stray `_bmad/cis` FILE was enough to make this report cis
|
|
639
638
|
* installed — and because branch 3b PERSISTS what it finds, that misreading
|
|
640
639
|
* became a durable "explicit user selection" the project could never shed.
|
|
641
640
|
* `prePopulateBmadCache` checks `stat.isDirectory()` in the analogous place
|
package/package.json
CHANGED
|
@@ -23,8 +23,8 @@ const force = process.argv.includes('--force');
|
|
|
23
23
|
// carry `code`/`url`/`name`/`type` — the same shape the parser already reads.
|
|
24
24
|
// Crucially the new schema carries no `branch` field (default to `main`) and
|
|
25
25
|
// it expresses the bundle decision via a `type` field rather than the old
|
|
26
|
-
// `built_in` flag
|
|
27
|
-
//
|
|
26
|
+
// `built_in` flag. The bundle itself is governed by the closed allowlist
|
|
27
|
+
// below (KNOWN_BUNDLED_MODULES = tea, bmb, cis), not by `type`; `bmm`/`core` are
|
|
28
28
|
// built into the npm package itself and are absent from the registry entirely.
|
|
29
29
|
//
|
|
30
30
|
// Candidates are tried in order; the first that exists on disk wins. The
|
|
@@ -57,7 +57,7 @@ const REGISTRY_CANDIDATES = [
|
|
|
57
57
|
// FUTURE plain `bmad-org` module) onto air-gapped machines. Closing to this
|
|
58
58
|
// allowlist means new/renamed/re-flagged upstream modules FAIL CLOSED (excluded)
|
|
59
59
|
// rather than fail open.
|
|
60
|
-
const KNOWN_BUNDLED_MODULES = ['tea', 'bmb', 'cis'
|
|
60
|
+
const KNOWN_BUNDLED_MODULES = ['tea', 'bmb', 'cis'];
|
|
61
61
|
|
|
62
62
|
// The registry `type` first-party expansions carry. Retained for diagnostics
|
|
63
63
|
// and for the shape-flip assertion below (an allowlisted module is expected to
|
|
@@ -206,7 +206,7 @@ function parseModulesYaml(content) {
|
|
|
206
206
|
* { code, url, name, branch }
|
|
207
207
|
*
|
|
208
208
|
* CLOSED-BY-DEFAULT (FR235). The filter is an ALLOWLIST: an entry survives ONLY
|
|
209
|
-
* if its `code` is in KNOWN_BUNDLED_MODULES (tea, bmb, cis
|
|
209
|
+
* if its `code` is in KNOWN_BUNDLED_MODULES (tea, bmb, cis). Every
|
|
210
210
|
* other registry entry is dropped no matter its `type` — so a NEW upstream
|
|
211
211
|
* module (even a plain `type: bmad-org` one carrying neither disqualifying
|
|
212
212
|
* flag), `bmad-loop` (`marketplace-plugin: true`), the deprecated
|
|
@@ -602,11 +602,20 @@ function main() {
|
|
|
602
602
|
}
|
|
603
603
|
}
|
|
604
604
|
|
|
605
|
-
// AC #7 gate: preserve existing cached modules that
|
|
606
|
-
//
|
|
607
|
-
//
|
|
608
|
-
//
|
|
609
|
-
//
|
|
605
|
+
// AC #7 gate: preserve existing cached modules that the resolved set no
|
|
606
|
+
// longer contains. We keep the directory and the manifest entry verbatim so
|
|
607
|
+
// downstream consumers keep working until a maintainer explicitly confirms
|
|
608
|
+
// deletion.
|
|
609
|
+
//
|
|
610
|
+
// THE GATE IS DIRECTORY-TRIGGERED, AND THAT MATTERS FOR A DELIBERATE
|
|
611
|
+
// UNBUNDLING. "Resolved set no longer contains it" covers two different
|
|
612
|
+
// causes: retired upstream, and removed from KNOWN_BUNDLED_MODULES on
|
|
613
|
+
// purpose (`gds`/`wds` per FR75). This loop cannot tell them apart — it only
|
|
614
|
+
// asks whether `lib/bmad-cache/<code>/` is still on disk. So removing a code
|
|
615
|
+
// from the allowlist WITHOUT deleting its directory re-adds it to the
|
|
616
|
+
// manifest flagged `retiredUpstream: true`, and it is back in
|
|
617
|
+
// `getInstallableBmadModules()`. Deleting the directory is therefore part of
|
|
618
|
+
// unbundling a module, not a separate tidy-up.
|
|
610
619
|
//
|
|
611
620
|
// `retentionStash` was built up-front (before any --force wipe) so the
|
|
612
621
|
// retention decision does not depend on whether the module directory
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "bmad-game-dev-studio",
|
|
3
|
-
"owner": {
|
|
4
|
-
"name": "Brian (BMad) Madison"
|
|
5
|
-
},
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"homepage": "https://github.com/bmad-code-org/bmad-module-game-dev-studio",
|
|
8
|
-
"repository": "https://github.com/bmad-code-org/bmad-module-game-dev-studio",
|
|
9
|
-
"keywords": ["bmad", "game-dev", "unity", "unreal", "godot", "game-design", "game-architecture"],
|
|
10
|
-
"plugins": [
|
|
11
|
-
{
|
|
12
|
-
"name": "bmad-game-dev-studio",
|
|
13
|
-
"source": "./",
|
|
14
|
-
"description": "A comprehensive game development module with agents and workflows for preproduction, design, architecture, production, and testing across Unity, Unreal, and Godot. Part of the BMad Method ecosystem.",
|
|
15
|
-
"version": "0.6.0",
|
|
16
|
-
"author": {
|
|
17
|
-
"name": "Brian (BMad) Madison"
|
|
18
|
-
},
|
|
19
|
-
"skills": [
|
|
20
|
-
"./src/agents/gds-agent-game-architect",
|
|
21
|
-
"./src/agents/gds-agent-game-designer",
|
|
22
|
-
"./src/agents/gds-agent-game-dev",
|
|
23
|
-
"./src/agents/gds-agent-game-solo-dev",
|
|
24
|
-
"./src/agents/gds-agent-tech-writer",
|
|
25
|
-
"./src/workflows/1-preproduction/gds-brainstorm-game",
|
|
26
|
-
"./src/workflows/1-preproduction/gds-create-game-brief",
|
|
27
|
-
"./src/workflows/1-preproduction/research/gds-domain-research",
|
|
28
|
-
"./src/workflows/2-design/gds-create-narrative",
|
|
29
|
-
"./src/workflows/2-design/gds-create-ux-design",
|
|
30
|
-
"./src/workflows/2-design/gds-gdd",
|
|
31
|
-
"./src/workflows/2-design/gds-prd",
|
|
32
|
-
"./src/workflows/3-technical/gds-check-implementation-readiness",
|
|
33
|
-
"./src/workflows/3-technical/gds-create-epics-and-stories",
|
|
34
|
-
"./src/workflows/3-technical/gds-game-architecture",
|
|
35
|
-
"./src/workflows/3-technical/gds-generate-project-context",
|
|
36
|
-
"./src/workflows/4-production/gds-code-review",
|
|
37
|
-
"./src/workflows/4-production/gds-correct-course",
|
|
38
|
-
"./src/workflows/4-production/gds-create-story",
|
|
39
|
-
"./src/workflows/4-production/gds-dev-story",
|
|
40
|
-
"./src/workflows/4-production/gds-investigate",
|
|
41
|
-
"./src/workflows/4-production/gds-retrospective",
|
|
42
|
-
"./src/workflows/4-production/gds-sprint-planning",
|
|
43
|
-
"./src/workflows/4-production/gds-sprint-status",
|
|
44
|
-
"./src/workflows/gametest/gds-e2e-scaffold",
|
|
45
|
-
"./src/workflows/gametest/gds-performance-test",
|
|
46
|
-
"./src/workflows/gametest/gds-playtest-plan",
|
|
47
|
-
"./src/workflows/gametest/gds-test-automate",
|
|
48
|
-
"./src/workflows/gametest/gds-test-design",
|
|
49
|
-
"./src/workflows/gametest/gds-test-framework",
|
|
50
|
-
"./src/workflows/gametest/gds-test-review",
|
|
51
|
-
"./src/workflows/gds-document-project",
|
|
52
|
-
"./src/workflows/gds-quick-flow/gds-quick-dev"
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# markdownlint-cli2 configuration
|
|
2
|
-
# https://github.com/DavidAnson/markdownlint-cli2
|
|
3
|
-
|
|
4
|
-
ignores:
|
|
5
|
-
- node_modules/**
|
|
6
|
-
- test/fixtures/**
|
|
7
|
-
- CODE_OF_CONDUCT.md
|
|
8
|
-
- _bmad/**
|
|
9
|
-
- _bmad*/**
|
|
10
|
-
- .*/**
|
|
11
|
-
- z*/**
|
|
12
|
-
|
|
13
|
-
# Rule configuration
|
|
14
|
-
config:
|
|
15
|
-
# Disable all rules by default
|
|
16
|
-
default: false
|
|
17
|
-
|
|
18
|
-
# Heading levels should increment by one (h1 -> h2 -> h3, not h1 -> h3)
|
|
19
|
-
MD001: true
|
|
20
|
-
|
|
21
|
-
# Duplicate sibling headings (same heading text at same level under same parent)
|
|
22
|
-
MD024:
|
|
23
|
-
siblings_only: true
|
|
24
|
-
|
|
25
|
-
# Trailing commas in headings (likely typos)
|
|
26
|
-
MD026:
|
|
27
|
-
punctuation: ","
|
|
28
|
-
|
|
29
|
-
# Bare URLs - may not render as links in all parsers
|
|
30
|
-
# Should use <url> or [text](url) format
|
|
31
|
-
MD034: true
|
|
32
|
-
|
|
33
|
-
# Spaces inside emphasis markers - breaks rendering
|
|
34
|
-
# e.g., "* text *" won't render as emphasis
|
|
35
|
-
MD037: true
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
22
|
package/lib/bmad-cache/gds/CNAME
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
game-dev-studio-docs.bmad-method.org
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 BMad Code, LLC
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
22
|
-
|
|
23
|
-
TRADEMARK NOTICE:
|
|
24
|
-
BMad™ , BMAD-CORE™ and BMAD-METHOD™ are trademarks of BMad Code, LLC. The use of these
|
|
25
|
-
trademarks in this software does not grant any rights to use the trademarks
|
|
26
|
-
for any other purpose.
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# BMad Game Dev Studio
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/bmad-game-dev-studio)
|
|
4
|
-
[](LICENSE)
|
|
5
|
-
[](https://www.python.org)
|
|
6
|
-
[](https://docs.astral.sh/uv/)
|
|
7
|
-
[](https://discord.gg/gk8jAdXWmj)
|
|
8
|
-
|
|
9
|
-
**BMGD brings BMad's structured development to game development.** Create working prototypes quickly in Unity, Unreal, Godot, Roblox—or any engine you choose.
|
|
10
|
-
|
|
11
|
-

|
|
12
|
-
|
|
13
|
-
## About BMGD
|
|
14
|
-
|
|
15
|
-
BMad Game Dev Studio (BMGD) adapts the BMad Method framework for game development. Developed by game industry veterans, BMGD guides you through product research, technical design, narrative design, and a full epic-driven production cycle.
|
|
16
|
-
|
|
17
|
-
## Supported Engines
|
|
18
|
-
|
|
19
|
-
BMGD has first-class support for:
|
|
20
|
-
|
|
21
|
-
- [Unity](https://unity.com) — C# scripting, industry-standard for many game types
|
|
22
|
-
- [Unreal Engine](https://www.unrealengine.com/) — Blueprint and C++, AAA powerhouse
|
|
23
|
-
- [Godot](https://godotengine.org/) — Open-source, GDScript, rapidly growing
|
|
24
|
-
- [Roblox](https://www.roblox.com/create) — Luau scripting, platform-native game development
|
|
25
|
-
|
|
26
|
-
But you're not limited to these—BMGD works with any platform, from pure C to custom engines.
|
|
27
|
-
|
|
28
|
-
## What You Can Create
|
|
29
|
-
|
|
30
|
-
BMGD supports **21 game types**, including:
|
|
31
|
-
|
|
32
|
-
| Genre | Examples |
|
|
33
|
-
|-------|----------|
|
|
34
|
-
| Action | Platformers, shooters, hack-and-slash |
|
|
35
|
-
| RPG | Action RPG, tactical RPG, dungeon crawlers |
|
|
36
|
-
| Strategy | Turn-based, RTS, tower defense |
|
|
37
|
-
| Simulation | Life sim, tycoon, management |
|
|
38
|
-
| Adventure | Visual novels, point-and-click, walking simulators |
|
|
39
|
-
| And more... | Survival, horror, puzzle, racing, etc. |
|
|
40
|
-
|
|
41
|
-
## What BMGD Does
|
|
42
|
-
|
|
43
|
-
- **Product Research** — Market analysis, competitor research, positioning
|
|
44
|
-
- **Game Design Document** — Comprehensive GDD with mechanics, progression, and balance
|
|
45
|
-
- **Narrative Design** — Story structure, characters, dialogue, world-building
|
|
46
|
-
- **UX Design** — Two peer specs: `DESIGN.md` (visual identity) and `EXPERIENCE.md` (UI/HUD behavior, input schemes, player journeys)
|
|
47
|
-
- **Technical Architecture** — Engine patterns, performance considerations
|
|
48
|
-
- **Production Planning** — Epic-driven sprints, story tracking, retrospectives
|
|
49
|
-
- **Quick Prototyping** — Skip the planning, jump straight into building
|
|
50
|
-
|
|
51
|
-
## What BMGD Doesn't Do
|
|
52
|
-
|
|
53
|
-
BMGD works *with* coding agents like Claude Code, Cursor, or GitHub Copilot—but it can't create everything:
|
|
54
|
-
|
|
55
|
-
- Art assets (models, textures, sprites)
|
|
56
|
-
- Animations
|
|
57
|
-
- Music and sound effects
|
|
58
|
-
- Full game implementation from scratch
|
|
59
|
-
|
|
60
|
-
Think of BMGD as your senior game dev colleague—not a replacement for your entire team.
|
|
61
|
-
|
|
62
|
-
## Installation
|
|
63
|
-
|
|
64
|
-
BMGD is installed as a module during BMad Method setup:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
npx bmad-method install
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Select **Game Dev Studio** from the modules list.
|
|
71
|
-
|
|
72
|
-
*Just a heads-up: if you’re only using Game Dev Studio (GDS), you don’t need to install the main BMM module. GDS runs on its own, but BMM gets updated more often, so you might want to use its workflows—they work together nicely!*
|
|
73
|
-
|
|
74
|
-
## Quick Start
|
|
75
|
-
|
|
76
|
-
After installing, run from your project root:
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
/bmad-help # Get guided help for game development
|
|
80
|
-
/bmgd-quick-dev # Jump straight into prototyping
|
|
81
|
-
/bmgd-gdd # Create a Game Design Document
|
|
82
|
-
/bmgd-narrative # Design your game's story
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Two Ways to Work
|
|
86
|
-
|
|
87
|
-
| Approach | When to Use | Workflow |
|
|
88
|
-
|----------|-------------|----------|
|
|
89
|
-
| **Quick Flow** | Rapid prototyping, small projects | `/bmgd-quick-dev` |
|
|
90
|
-
| **Full Production** | Full games, teams, long-term | `/bmad-help` for guided path |
|
|
91
|
-
|
|
92
|
-
## Example: Starting a New Game
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
You: /bmad-help
|
|
96
|
-
BMGD: What kind of game are you making?
|
|
97
|
-
You: A tactical sci-fi RPG
|
|
98
|
-
BMGD: Great choice! Here's what I recommend...
|
|
99
|
-
[Guides you through genre-specific planning]
|
|
100
|
-
[Helps select appropriate workflows]
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Documentation
|
|
104
|
-
|
|
105
|
-
**[BMad Game Dev Studio Documentation](http://game-dev-studio-docs.bmad-method.org)** — Tutorials, how-to guides, and reference
|
|
106
|
-
|
|
107
|
-
- [Getting Started](http://game-dev-studio-docs.bmad-method.org/tutorials/)
|
|
108
|
-
- [BMad Method Docs](http://docs.bmad-method.org) — Core framework documentation
|
|
109
|
-
|
|
110
|
-
## Community
|
|
111
|
-
|
|
112
|
-
- [Discord](https://discord.gg/gk8jAdXWmj) — Get help from other game devs
|
|
113
|
-
- [YouTube](https://youtube.com/@BMadCode) — Tutorials, master class, and more
|
|
114
|
-
- [X / Twitter](https://x.com/BMadCode)
|
|
115
|
-
- [Website](https://bmadcode.com)
|
|
116
|
-
- [GitHub Issues](https://github.com/bmad-code-org/bmad-module-game-dev-studio/issues) — Report bugs
|
|
117
|
-
|
|
118
|
-
## Support BMad
|
|
119
|
-
|
|
120
|
-
BMad is free for everyone and always will be. Star this repo, [buy me a coffee](https://buymeacoffee.com/bmad), or email <contact@bmadcode.com> for corporate sponsorship.
|
|
121
|
-
|
|
122
|
-
## License
|
|
123
|
-
|
|
124
|
-
MIT License — see [LICENSE](LICENSE) for details.
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
**BMad Game Dev Studio** — Part of the [BMad Method](https://github.com/bmad-code-org/BMAD-METHOD) ecosystem.
|
|
129
|
-
|
|
130
|
-
[](https://github.com/bmad-code-org/bmad-module-game-dev-studio/graphs/contributors)
|
|
131
|
-
|
|
132
|
-
See [CONTRIBUTORS.md](CONTRIBUTORS.md) for contributor information.
|
|
133
|
-
|
|
134
|
-
*If you can dream it, you can build it.*
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ref: refs/heads/main
|