bmad-plus 0.21.0 → 0.23.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/CHANGELOG.md +39 -0
- package/README.md +24 -14
- package/SECURITY.md +63 -1
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/_http.py +68 -24
- package/package.json +4 -1
- package/readme-international/README.de.md +24 -14
- package/readme-international/README.es.md +24 -14
- package/readme-international/README.fr.md +24 -14
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
- package/src/bmad-plus/data/role-triggers.yaml +34 -0
- package/src/bmad-plus/module-help.csv +2 -0
- package/src/bmad-plus/module.yaml +21 -0
- package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
- package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
- package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +3 -1
- package/src/bmad-plus/packs/pack-seo/SKILL.md +3 -1
- package/src/bmad-plus/packs/pack-seo/ref/cwv-thresholds.md +2 -2
- package/src/bmad-plus/packs/pack-seo/requirements.txt +1 -1
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +72 -30
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +5 -6
- package/src/bmad-plus/packs/pack-seo/scripts/seo_screenshot.py +176 -14
- package/src/bmad-plus/packs/pack-shield/README.md +12 -0
- package/src/bmad-plus/packs/pack-shield/SKILL.md +7 -1
- package/src/bmad-plus/packs/pack-shield/review-rules/access-control.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/ai-integrations.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/change-and-supply-chain.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/cryptography.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/index.yaml +134 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/logging.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/personal-data.md +10 -0
- package/src/bmad-plus/packs/pack-shield/shared/ai-processing-register-template.yaml +53 -0
- package/src/bmad-plus/packs/pack-shield/shared/ai-processing-register.md +32 -0
- package/src/bmad-plus/packs/pack-shield/shared/assurance-case-template.yaml +87 -0
- package/src/bmad-plus/packs/pack-shield/shared/assurance-case.md +50 -0
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +24 -1
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
- package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
- package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
- package/src/bmad-plus/skills/bmad-plus-uat/SKILL.md +1 -0
- package/src/bmad-plus/skills/bmad-plus-uat/template/page.html +5 -4
- package/tools/build/adapters.config.js +2 -0
- package/tools/build/generate-adapters.js +32 -1
- package/tools/build/generate.js +283 -7
- package/tools/build/intake-contract.js +522 -0
- package/tools/cli/bmad-plus-cli.js +4 -0
- package/tools/cli/commands/ai-register.js +63 -0
- package/tools/cli/commands/assurance.js +162 -0
- package/tools/cli/commands/install.js +28 -1
- package/tools/cli/commands/intake.js +124 -0
- package/tools/cli/commands/review.js +10 -3
- package/tools/cli/commands/swarm.js +119 -0
- package/tools/cli/commands/uninstall.js +17 -0
- package/tools/cli/i18n.js +20 -0
- package/tools/cli/lib/ai-register.js +393 -0
- package/tools/cli/lib/assurance.js +822 -0
- package/tools/cli/lib/control-refs.js +132 -0
- package/tools/cli/lib/installation-health.js +17 -0
- package/tools/cli/lib/intake.js +202 -0
- package/tools/cli/lib/pack-copy.js +95 -5
- package/tools/cli/lib/packs.js +156 -8
- package/tools/cli/lib/page-origins.js +582 -0
- package/tools/cli/lib/review-rules.js +92 -24
- package/tools/cli/lib/review.js +28 -1
- package/tools/cli/lib/swarm-deal.js +116 -0
- package/tools/cli/lib/swarm-defaults.js +6 -0
- package/tools/cli/lib/swarm-tally.js +195 -0
- package/tools/cli/lib/swarm-validate.js +589 -0
- package/tools/cli/lib/swarm.js +712 -0
- package/tools/cli/lib/uat.js +22 -5
- package/tools/cli/lib/update-transaction.js +8 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,45 @@ All notable changes to BMAD+ will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.23.0] - 2026-10-17
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Pack intake** (`bmad-plus intake check|plan|record|render`, skill `bmad-plus-intake`). A pack declares the questions it needs answered before it acts (`intake.yaml`: sections, kinds, must-haves with the risk of not knowing, defaults, the artifact each answer feeds). `plan` says what is still missing and the next batch to ask, must-haves first and a few at a time; `record` writes only what the user gave, marks what they do not know, and never invents; `render` writes the brief that becomes the contract for everything the pack does next. The build validates every declared intake with the same contract the CLI uses.
|
|
13
|
+
- **Swarm runtime** (`bmad-plus swarm init|briefs|check|save|tally|inspect|plan`, skill `bmad-plus-swarm`). A pack declares a swarm (a panel dealt deterministically from a profile, a jury of listed lenses, or a fanout of units with disjoint write scopes); the CLI deals the cards under a seed, renders one brief per unit, validates each sub-agent's answer file, tallies rates, counts, verbatim quotes and numbers over valid answers only, and exports a fanout as a durable Nexus plan. A new `swarm` block in `_bmad/config.yaml` sets the budget of sub-agents a run may use before the host asks (26 by default) and keeps paid media generation out of any budget. The host spawns the sub-agents; the CLI never calls a model and never answers for a unit.
|
|
14
|
+
- **Skill packs in the registry.** `uses_skills` names the skills an agent drives (rendered on its roster line as `drives:`); `external_module` takes a pack's skills from a pinned npm package the installer copies into `.agents/skills/` with a version check; `pipelines` declares ordered workflow or agent steps with a checkpoint gate each, rendered step by step in the generated instructions; `intake` names the pack's intake file. All four are validated at build time.
|
|
15
|
+
- **Design pack (Atelier).** The design engine published as `design-skill` (three skills: `design`, `design-review`, `redesign`, with their reference modules) joins every installation as a referenced package, driven by the Atelier persona through an intake first. The pack ships a sealed evaluation, a shipping test and its trigger block; `pack-animated` stays until the brand-site pack supersedes it.
|
|
16
|
+
- **Trigger gate** (`npm run check:triggers`, Platform workflow). `role-triggers.yaml` may only name Core agents, pack personas and declared pipelines; a role needs patterns, and a pattern repeated within one agent is refused.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Nexus runs a pack's declared pipeline after its intake and runs swarms through `bmad-plus swarm` within the configured budget; autopilot's Discovery starts with the intake of every pack involved. The generated instructions tell an agent to read the `SKILL.md` of every skill it drives before acting.
|
|
21
|
+
- `bmad-plus install` lists every selected pack's files before writing any, so an unresolvable external module leaves the project untouched.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- `bmad-plus uninstall` removes the skills copied from an external module (found by the 0.23.0 acceptance run: the three Atelier skills stayed in `.agents/skills/` after uninstall). Edited copies stay, as for every other managed file, and nothing is removed when the package can no longer be compared.
|
|
26
|
+
|
|
27
|
+
## [0.22.0] - 2026-09-29
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **Shield security assurance case** (`bmad-plus assurance init|run|verify <case>`). A case states claims, an argument for each, and evidence that can only be a check that ran. `run` executes each declared command without a shell and with a minimal environment, and appends a hash-chained ledger record (exit code, output digest, redacted excerpt, digests of the artifacts it wrote, commit, working-tree state). `verify` finds a claim unsupported when its evidence is missing, failed or stale, and can emit a CI check. `verify --ledger-head` catches removed runs; with `BMAD_PLUS_ASSURANCE_KEY` every record carries an HMAC that no check can read.
|
|
32
|
+
- **Shield AI processing register** (`bmad-plus ai-register init|check`). `_bmad/ai-processing-register.yaml` records each AI tool with its provider, purpose, data categories, legal basis, retention, transfers and processing agreement. `check` compares it with the AI integrations found in the project (BMAD+ adapters, tool folders, MCP server declarations) and warns about any tool not registered; `bmad-plus doctor` reports it when Shield is installed.
|
|
33
|
+
- **Compliance review rules.** A review rule can name the controls it examines (`FRAMEWORK:ID`, validated). An installed Shield adds six path-scoped rules in a `compliance` group (access control, personal data, cryptography, logging, AI integrations, change and supply chain); the checklist opens with the controls a change touches, and a finding may list the controls it breaks.
|
|
34
|
+
|
|
35
|
+
### Security
|
|
36
|
+
|
|
37
|
+
- **Data-handling doctrine and egress gate.** `registry.yaml` declares what BMAD+ sends, to whom, when and under which consent basis. `tools/build/verify-egress.js` fails CI when a network, listener or process site of the package or of the maintainer services is undeclared, miscounted or stale, or when a module load cannot be resolved. `SECURITY.md` has a generated "Data handling" section and the generated adapters state the flows of the installed packs. BMAD+ has no telemetry; `update-check` is opt-out.
|
|
38
|
+
- **The UAT recipe page loads nothing from another origin.** Google Fonts is gone; the page uses installed fonts. The build refuses a template that would load or send anything elsewhere (`no-third-party-requests`), reading it as the HTML tokenizer does, with references, escapes and `data:` documents decoded. The jsdom and Chromium checks record every request and socket of a run.
|
|
39
|
+
- **The SEO HTML report opens without asking any server**, and `GOOGLE_API_KEY` is sent in the `x-goog-api-key` header, never in a URL, and redacted from errors.
|
|
40
|
+
- **OSINT provider calls are HTTPS-only**: other schemes, URL credentials and redirects that leave https or the host are refused before connecting.
|
|
41
|
+
- **SEO screenshots are pinned** to the address `seo_fetch.py` validated: Chromium resolves nothing else, other hosts and redirect hops are blocked and reported.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- **MCP server:** SSE client disconnects and graceful shutdowns no longer log `Exception in ASGI application`; an open SSE stream ends cleanly on SIGTERM. The middlewares are pure ASGI. An `MCP_TOKEN_CREATED_AT` with a UTC offset no longer makes every authenticated request answer 500, and non-ASCII secrets are refused with 401 instead of raising.
|
|
46
|
+
|
|
8
47
|
## [0.21.0] - 2026-09-28
|
|
9
48
|
|
|
10
49
|
### Added
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# BMAD+
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
4
4
|
|
|
5
|
-
**Version 0.
|
|
5
|
+
**Version 0.23.0** · Node.js `>=20.0.0` · MIT
|
|
6
6
|
|
|
7
7
|
Project-local AI development workflows with clear roles, shared context, safe updates and coding-tool adapters
|
|
8
8
|
|
|
@@ -35,7 +35,7 @@ Run the installer. Select the adapters for the AI tools you use and the packs yo
|
|
|
35
35
|
**In your project terminal:**
|
|
36
36
|
|
|
37
37
|
```sh
|
|
38
|
-
npx bmad-plus@0.
|
|
38
|
+
npx bmad-plus@0.23.0 install
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
The installer creates the agent instructions, shared project spine and selected tool adapters. Optional packs may need additional runtimes or API access.
|
|
@@ -98,6 +98,7 @@ Read the changes and test results. The assistant follows the permissions and cap
|
|
|
98
98
|
| Dev Studio | Specialized roles and workflows for product planning, design, engineering and documentation. |
|
|
99
99
|
| Backup | Instructions and utilities for timestamped backups, restoration and rotation. |
|
|
100
100
|
| Animated | A focused workflow for creating video-driven scrolling websites. |
|
|
101
|
+
| Design | Atelier, the design engine: build, audit and redesign interfaces under checkable rules, with an intake first. |
|
|
101
102
|
|
|
102
103
|
## Examples
|
|
103
104
|
|
|
@@ -151,6 +152,16 @@ Zecher, update this project’s memory from the changes and checks we actually c
|
|
|
151
152
|
|
|
152
153
|
Expected result: a concise current context, a dated session handoff and a restart prompt that identifies the next unfinished task.
|
|
153
154
|
|
|
155
|
+
### Design a screen with Atelier
|
|
156
|
+
|
|
157
|
+
Use with the optional Design pack installed. Atelier asks its questions first, then follows checkable rules.
|
|
158
|
+
|
|
159
|
+
```text
|
|
160
|
+
Atelier, run the design read for the invoice list of my app, build the screen, and end with the pre-flight verdict.
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Expected result: the recorded design read, the screen with every state covered, and the pre-flight verdict quoted as the last line.
|
|
164
|
+
|
|
154
165
|
### Read a test run without guessing
|
|
155
166
|
|
|
156
167
|
Use when a person has completed or stopped an acceptance run.
|
|
@@ -171,18 +182,17 @@ Read AGENTS.md and the available project memory. Summarize the last verified sta
|
|
|
171
182
|
|
|
172
183
|
Expected result: a short, evidence-based restart. Project notes are useful context and still need to be checked against the current work.
|
|
173
184
|
|
|
174
|
-
## What’s new in 0.
|
|
185
|
+
## What’s new in 0.23.0
|
|
175
186
|
|
|
176
|
-
|
|
187
|
+
Ask first, then swarm
|
|
177
188
|
|
|
178
|
-
A
|
|
189
|
+
A pack now declares the questions it needs answered before it acts, and Nexus can run a swarm of sub-agents, a simulated panel or a jury, within a budget you set. Atelier, the design engine, joins as the tenth pack. Installing and updating work as before.
|
|
179
190
|
|
|
180
|
-
-
|
|
181
|
-
- bmad-plus
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
- The SEO fetcher and crawler resolve each host themselves, refuse internal addresses and connect to the exact address they validated, on every redirect too, which defeats DNS rebinding. The MCP server uses the official SDK on Python 3.12 with current chromadb and sentence-transformers; re-run ingest.py once after upgrading.
|
|
191
|
+
- bmad-plus intake asks a pack’s questions a few at a time, marks the must-haves, proposes defaults, records what you do not know with its risk, and renders the brief that becomes the contract for what the pack does next. Nothing in it is invented.
|
|
192
|
+
- bmad-plus swarm deals simulated units from a profile under a seed, writes one brief per sub-agent, validates every answer file, counts only valid answers, and states that simulated buyers are not customers. The swarm block in _bmad/config.yaml sets how many sub-agents run before the assistant asks you; paid media generation always asks.
|
|
193
|
+
- The registry now records which skills an agent drives, which npm package a pack’s skills come from, which pipeline steps and gates a pack declares and which intake it runs. The generated instructions carry all of it, so nothing is typed twice.
|
|
194
|
+
- Design pack: Atelier, built from the design-skill package, interviews you with a design read, then builds, audits or redesigns an interface under checkable rules. The installer copies its three skills with their reference modules, and doctor checks them.
|
|
195
|
+
- A trigger gate refuses auto-activation rules that name an agent or a pipeline the registry does not know, and the installer writes nothing when a pack’s files cannot all be listed first.
|
|
186
196
|
|
|
187
197
|
## Version History
|
|
188
198
|
|
|
@@ -190,9 +200,9 @@ These dates identify reviewed CHANGELOG notes, not npm publication dates. The we
|
|
|
190
200
|
|
|
191
201
|
| Version | Release-notes date | Reviewed summary |
|
|
192
202
|
| --- | --- | --- |
|
|
203
|
+
| 0.23.0 | 2026-10-17 | A pack now declares the questions it needs answered before it acts, and Nexus can run a swarm of sub-agents, a simulated panel or a jury, within a budget you set. Atelier, the design engine, joins as the tenth pack. Installing and updating work as before. |
|
|
204
|
+
| 0.22.0 | 2026-09-29 | BMAD+ now declares every way it sends data or starts a process, and its CI refuses anything undeclared. The recipe page and the SEO report load nothing from other sites, OSINT calls are HTTPS-only, and Shield gains an evidence-bound assurance case and an AI processing register. Nothing changes in how you install or update. |
|
|
193
205
|
| 0.21.0 | 2026-09-28 | A review now records why it stopped and what it used, writes a check a CI step can read, and resumes on the scope it sealed. The SEO fetcher connects only to addresses it has validated, and the MCP server moves to the official SDK on Python 3.12. Nothing changes in how you install or update. |
|
|
194
|
-
| 0.20.0 | 2026-09-28 | bmad-plus review now hands the reviewer the rules that apply to the changed files, fixes the depth of a review before it starts, compares a review with an earlier one without calling an unchecked finding fixed, and masks credentials in what it writes. Nothing changes in how you install or update. |
|
|
195
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review seals what a review must cover, locates every finding by the code it quotes, and derives the verdict from coverage instead of the number of findings. Review triage now keeps a finding unless a quoted ground refutes it. Nothing changes in how you install or update. |
|
|
196
206
|
|
|
197
207
|
[Release history and update guide](https://bmad-plus.rochetta.fr/docs/#changelog) · [All published npm versions](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
198
208
|
|
package/SECURITY.md
CHANGED
|
@@ -65,7 +65,7 @@ Security researchers who report valid vulnerabilities will be credited in the CH
|
|
|
65
65
|
- Production npm dependencies are audited before each release; high and critical findings block publication
|
|
66
66
|
- Maintained Python requirements are audited in CI and block publication on known findings
|
|
67
67
|
- The private legacy MCP ML stack has a separate, visible advisory audit and migration backlog; its findings do not describe the npm runtime
|
|
68
|
-
- Minimal dependency footprint (
|
|
68
|
+
- Minimal dependency footprint (7 runtime dependencies; `design-skill` contributes the skill files BMAD+ copies at install and a linker CLI that BMAD+ never runs)
|
|
69
69
|
- Bundled source notices are included in [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md); npm runtime dependency licenses are recorded in the release SBOM
|
|
70
70
|
|
|
71
71
|
### Distribution Security
|
|
@@ -75,5 +75,67 @@ Security researchers who report valid vulnerabilities will be credited in the CH
|
|
|
75
75
|
- Each release retains its CycloneDX production SBOM, archive and integrity manifest as workflow artifacts; registry integrity must match the checked archive before the landing is deployed
|
|
76
76
|
- Publication uses npm OIDC authentication. npm provenance is not enabled: the private build repository and distribution repository differ. An inventory or hash is not a provenance attestation
|
|
77
77
|
|
|
78
|
+
## Data handling
|
|
79
|
+
|
|
80
|
+
BMAD+ has no telemetry and no silent self-update. The first table lists every flow of the
|
|
81
|
+
npm package that can send data off the machine; the second covers the maintainer services
|
|
82
|
+
deployed from this repository (the Audit 360° MCP server and the upstream monitor), which
|
|
83
|
+
users do not install. Both are generated from the `data_handling` doctrine in
|
|
84
|
+
`registry.yaml`. Before each release, CI scans every shipped and service source file and
|
|
85
|
+
fails when a network, listener or process site is missing from the doctrine, or when a
|
|
86
|
+
declared one no longer exists. "Through a started program" means BMAD+ starts a tool (npm,
|
|
87
|
+
uv or pip, git, Codex CLI, Chromium, a command you declared) and that tool does the sending.
|
|
88
|
+
|
|
89
|
+
<!-- data-handling:begin — generated from registry.yaml by tools/build/verify-egress.js --write -->
|
|
90
|
+
|
|
91
|
+
| Flow | Component | Leaves the machine | What | To whom | When | Consent |
|
|
92
|
+
|---|---|---|---|---|---|---|
|
|
93
|
+
| `update-check` | cli | through a started program | The package name and channel (`npm view bmad-plus@latest`) with npm's request metadata: IP address, user agent (npm, Node.js and OS versions) and npm session headers. | registry.npmjs.org (the policy accepts no other registry) | `bmad-plus update-check`, which the generated adapters ask the agent to run once per session; the answer is cached in `.bmad/update-check.json`. | **opt-out**: `bmad-plus update-policy --mode off` stops every lookup. |
|
|
94
|
+
| `update-apply` | cli | through a started program | The exact release requested, with npm's request metadata, to download that version's package. | registry.npmjs.org | `bmad-plus update --latest --yes`, or `--auto` when the project policy allows it. | **opt-in**: Each run needs `--yes`, or policy mode `auto` with an explicit range (`bmad-plus update-policy --mode auto --range <range>`). |
|
|
95
|
+
| `python-provision` | cli | through a started program | The names and versions in the pack's requirements.txt, with the installer's request metadata; uv may also download a Python build. | pypi.org and files.pythonhosted.org, or the index configured for pip or uv on the machine, github.com (python-build-standalone releases) when uv downloads Python | `bmad-plus install --provision-python` for a selected Python pack. | **opt-in**: Only with `--provision-python`; without it no environment is created. |
|
|
96
|
+
| `nexus-worker` | cli | through a started program | With `codex-exec`, the task's instruction and input files (at most 1 MiB) go to Codex CLI, which sends them to the model provider of the user's own Codex login. With `command`, whatever that command sends. | the model provider configured in the user's Codex CLI, whoever a declared command contacts | `bmad-plus nexus launch` on a plan with an explicit execution contract. | **invocation**: Nothing starts without a plan the user wrote and an explicit launch; shell, environment and arbitrary Codex flags are refused. |
|
|
97
|
+
| `nexus-verifier` | cli | through a started program | Whatever the declared command sends; it runs with a minimal allow-listed environment. | whoever the declared command contacts | `bmad-plus nexus verify` on a task of a plan the user wrote. | **invocation**: The command and its hash are fixed in the plan; a changed executable is refused. |
|
|
98
|
+
| `uat-page-results` | core | directly | The run: tester name, step verdicts and notes. | the origin serving the page: `bmad-plus uat serve` on 127.0.0.1, or the claude.ai artifact store when the page is published as an artifact | Each recorded verdict, when the page is served; a page opened from a file keeps results in the browser. | **invocation**: The tester chooses how the page is opened; a page opened from a file sends nothing. |
|
|
99
|
+
| `osint-providers` | osint | directly | The investigation query (names, handles, keywords and URLs about the subject) and that provider's API key, over verified HTTPS: the shared helper refuses any other scheme and any redirect off the provider's host. | api.apify.com, api.exa.ai, r.jina.ai, s.jina.ai, deepsearch.jina.ai, api.parallel.ai, api.perplexity.ai, api.tavily.com, the Bright Data MCP URL the user configures | When the Shadow agent, or `volley.py` fanning out to the others, runs a provider script during an investigation. | **credential**: A provider is contacted only once its key (or Bright Data MCP URL) is set; the skill's Phase −1 lawful-basis gate precedes profiling a named person. |
|
|
100
|
+
| `seo-site-fetch` | seo | directly | HTTP requests for the audited site's pages, robots.txt and sitemap, with the user agent the audit selects, from the user's IP address. | the site the user asks to audit (public addresses only) | `seo_fetch.py` and `seo_crawl.py`, run by the SEO agents during an audit. | **invocation**: Only the URL the user gives and its internal links are fetched; private, loopback and link-local addresses are refused. |
|
|
101
|
+
| `seo-google-apis` | seo | directly | The audited URL or origin, and the user's GOOGLE_API_KEY in the x-goog-api-key header, never in the request URL; redirects are not followed. | www.googleapis.com, chromeuxreport.googleapis.com, searchconsole.googleapis.com | `seo_apis.py`, run during an audit's performance phase. | **credential**: Only when GOOGLE_API_KEY is set; without it the script returns an error and sends nothing. |
|
|
102
|
+
| `seo-screenshot` | seo | through a started program | Chromium's requests for the audited page and the resources its own host serves, with a browser user agent, from the user's IP address. Third-party resources are blocked, not fetched. | the site the user asks to audit (public addresses only) | `seo_screenshot.py`, when an audit asks for screenshots. | **invocation**: Only the URL the user gives, with the Playwright and Chromium the user installed; non-public addresses, other hosts and redirects off the host are refused. |
|
|
103
|
+
| `assurance-checks` | cli | through a started program | Whatever a declared check command sends; the CLI itself sends nothing. | whoever a declared check command contacts | `bmad-plus assurance run` on a case the user wrote. | **invocation**: Only the commands listed in the user's own case file run, and only on an explicit `assurance run`; the signing key is never passed to a check. |
|
|
104
|
+
|
|
105
|
+
Stays on the machine:
|
|
106
|
+
|
|
107
|
+
- `npx-launcher` (cli): Starts the CLI in the same Node.js executable. When: Every `npx bmad-plus` run.
|
|
108
|
+
- `python-health` (cli): Runs a pack environment's own Python, isolated (-I), to confirm its modules import. When: `bmad-plus doctor` on a project with a provisioned Python pack.
|
|
109
|
+
- `review-git` (cli): Reads the local repository with git (rev-parse, merge-base, diff, ls-files, show) to build a review scope. When: `bmad-plus review` commands.
|
|
110
|
+
- `nexus-git` (cli): Reads the repository root and HEAD commit with `git rev-parse`. When: `bmad-plus nexus` plan and run commands.
|
|
111
|
+
- `uat-serve` (cli): Serves a recipe page and stores its verdicts, listening on 127.0.0.1 only and refusing any other Host header. When: `bmad-plus uat serve`.
|
|
112
|
+
- `uat-release-gate` (core): Runs the project's own bmad-plus CLI with the current Node.js to grade recorded acceptance runs. When: The release-gate script a project copies from the UAT skill, when the project runs it.
|
|
113
|
+
- `osint-install` (osint): Copies the OSINT agent and skills into a BMAD project, then runs the pack's local diagnostic script with the system Python. When: When the user runs the package's install.sh or install.ps1.
|
|
114
|
+
|
|
115
|
+
Maintainer services, deployed from this repository and not part of the npm package:
|
|
116
|
+
|
|
117
|
+
- `mcp-server` (`mcp-server/`): The Audit 360° MCP server the maintainer runs on a VPS: git, GitHub, Gamma, CI, RAG and memory tools for the maintainer's agents, behind a bearer token and a password-protected dashboard.
|
|
118
|
+
- `monitor` (`monitor/`): The upstream monitor the maintainer schedules on a VPS: it watches the BMAD-METHOD repository and notifies the maintainer of new changes.
|
|
119
|
+
|
|
120
|
+
| Flow | Service | Leaves the machine | What | To whom | When | Consent |
|
|
121
|
+
|---|---|---|---|---|---|---|
|
|
122
|
+
| `mcp-listener` | mcp-server | directly | Tool results (repository contents and diffs, command output, audit reports, knowledge-base passages, memory entries) and the dashboard's audit data. | MCP clients presenting the bearer token, dashboard users logged in with the dashboard password | While the service runs: HTTPS on 0.0.0.0:443 when SSL_CERT_FILE and SSL_KEY_FILE are set, plain HTTP on 127.0.0.1:8000 with BMAD_DEV=1, otherwise it refuses to start. | **credential**: Every MCP request needs MCP_AUDIT360_TOKEN and every dashboard request the dashboard password; 30 requests per minute per address. |
|
|
123
|
+
| `mcp-dashboard-cdn` | mcp-server | directly | The dashboard user's IP address, user agent and the dashboard origin as referrer. | cdn.jsdelivr.net | Each time the dashboard page is opened. | **invocation**: Opening the dashboard loads it. |
|
|
124
|
+
| `mcp-knowledge-ingest` | mcp-server | through a started program | Git clone and pull requests for the sources in knowledge/sources.json, and the model download request (model name, library version) on first use. | the Git hosts of the configured knowledge sources, huggingface.co (the embedding model named by RAG_EMBEDDING_MODEL or the default) | At server start when the knowledge base is empty, and on the admin_refresh_knowledge tool. | **invocation**: The maintainer lists the sources; chromadb runs with anonymized_telemetry=False. |
|
|
125
|
+
| `mcp-git-tools` | mcp-server | through a started program | Clone, pull and push traffic for the repositories a client names, with the credentials git holds on the server; pushes carry the commits made through git_commit. | the Git hosts of the repositories the client names (URLs validated before cloning) | git_* tools, audit_scan_repo and orchestrate_full_audit, when an authenticated client calls them. | **credential**: Only through an authenticated MCP call; paths are confined to the server's repository root. |
|
|
126
|
+
| `mcp-github-api` | mcp-server | directly | GITHUB_TOKEN with the repository names, file contents, pull-request texts and collaborator names the client passes; orchestrate_full_audit creates a private delivery repository. | api.github.com | github_* tools and orchestrate_full_audit, when an authenticated client calls them. | **credential**: Only with GITHUB_TOKEN set on the server and an authenticated MCP call. |
|
|
127
|
+
| `mcp-gamma` | mcp-server | directly | The report content (Markdown, title, infographic URLs, instructions) and GAMMA_API_KEY; export downloads carry no content. | public-api.gamma.app, the export host named in Gamma's answer | gamma_* tools, when an authenticated client calls them. | **credential**: Only with GAMMA_API_KEY set on the server and an authenticated MCP call. |
|
|
128
|
+
| `mcp-ci-tools` | mcp-server | through a started program | Whatever those programs send: dependency downloads of npm, pip, cargo or go, Semgrep's registry requests for --config=auto, Trivy's vulnerability-database download, and whatever a repository's deploy script sends. | the package registries of the repository's toolchain, semgrep.dev, Trivy's database mirrors, whoever a repository's deploy script contacts | ci_* tools, when an authenticated client calls them. | **credential**: Only through an authenticated MCP call; commands must equal an allow-listed argv, deploy scripts must lie inside the repository. |
|
|
129
|
+
| `monitor-upstream-git` | monitor | through a started program | Git fetch requests for the configured upstream ref, with the host's IP address. | github.com (bmad-code-org/BMAD-METHOD, or the HTTPS repository the configuration names) | Each scheduled run of weekly-check.py. | **invocation**: The maintainer installs the schedule and chooses the repository and ref. |
|
|
130
|
+
| `monitor-ai-analysis` | monitor | directly | Bounded excerpts of the upstream commit messages, diff statistics and diff, the previous observed version, and the configured API key. | generativelanguage.googleapis.com (Google Gemini API) | weekly-check.py --ai, when a change is observed. | **opt-in**: Only with --ai and an API key and model list in the configuration; --dry-run never calls it. |
|
|
131
|
+
| `monitor-notify` | monitor | directly | The observation report: upstream version and commit summaries, with the advisory analysis when one was requested. | the Evolution API instance the configuration names (loopback unless HTTPS), which relays it to the configured WhatsApp number, the SMTP server of the fallback email configuration (STARTTLS) | weekly-check.py --notify, once per newly observed upstream state. | **opt-in**: Only with --notify and a configured channel; --dry-run never notifies. |
|
|
132
|
+
| `monitor-mcp-bridge` | monitor | directly | Tool names and arguments (repository URLs and paths, pull-request texts) with the MCP bearer token. | the maintainer's MCP server (VPS_HOST or the configured mcp_url) | When code constructs an MCPBridge; weekly-check.py does not. | **credential**: Only with an MCP token and server address supplied by the maintainer. |
|
|
133
|
+
|
|
134
|
+
Stays on the service host:
|
|
135
|
+
|
|
136
|
+
- `mcp-memory` (mcp-server): Runs the bmad-plus CLI's `mem` command with the server's Node.js for the memory tools. When: memory_* tools, when an authenticated client calls them.
|
|
137
|
+
|
|
138
|
+
<!-- data-handling:end -->
|
|
139
|
+
|
|
78
140
|
BMAD+ is an independent derivative of BMAD-METHOD. It is not an official release
|
|
79
141
|
of BMad Code, LLC and does not imply its endorsement.
|
|
@@ -1,43 +1,87 @@
|
|
|
1
|
-
"""Shared HTTP utilities for OSINT scripts — stdlib only, zero dependencies.
|
|
1
|
+
"""Shared HTTP utilities for OSINT scripts — stdlib only, zero dependencies.
|
|
2
|
+
|
|
3
|
+
Every request goes over verified HTTPS: the providers receive API keys and
|
|
4
|
+
investigation queries, so a plain-text or unverified hop is never acceptable.
|
|
5
|
+
"""
|
|
2
6
|
|
|
3
7
|
import http.client
|
|
4
8
|
import json
|
|
5
9
|
import os
|
|
6
10
|
import ssl
|
|
7
11
|
import sys
|
|
8
|
-
from urllib.parse import
|
|
12
|
+
from urllib.parse import urljoin, urlparse
|
|
9
13
|
|
|
14
|
+
MAX_REDIRECTS = 5
|
|
15
|
+
_REDIRECT_STATUSES = frozenset({301, 302, 303, 307, 308})
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
|
|
18
|
+
class InsecureURLError(ValueError):
|
|
19
|
+
"""A URL the helper refuses to contact (not HTTPS, credentials, no host)."""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _check_https_url(url):
|
|
23
|
+
"""Return ``(host, port, target)`` for an acceptable URL, or raise InsecureURLError.
|
|
24
|
+
|
|
25
|
+
Only ``https://`` with a host is accepted: no plain HTTP, no other scheme
|
|
26
|
+
and no implicit one. Credentials in the URL are refused, since they would
|
|
27
|
+
travel outside the headers the caller controls.
|
|
15
28
|
"""
|
|
16
29
|
parsed = urlparse(url)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
if parsed.scheme.lower() != "https":
|
|
31
|
+
raise InsecureURLError(f"only https:// URLs are allowed, got {parsed.scheme or '(none)'}://")
|
|
32
|
+
if parsed.username is not None or parsed.password is not None:
|
|
33
|
+
raise InsecureURLError("credentials in URL are not allowed")
|
|
34
|
+
if not parsed.hostname:
|
|
35
|
+
raise InsecureURLError("URL has no host")
|
|
36
|
+
try:
|
|
37
|
+
port = parsed.port or 443
|
|
38
|
+
except ValueError:
|
|
39
|
+
raise InsecureURLError("URL has an invalid port") from None
|
|
40
|
+
target = parsed.path or "/"
|
|
21
41
|
if parsed.query:
|
|
22
|
-
|
|
42
|
+
target += "?" + parsed.query
|
|
43
|
+
return parsed.hostname, port, target
|
|
23
44
|
|
|
24
|
-
if scheme == "https":
|
|
25
|
-
ctx = ssl.create_default_context()
|
|
26
|
-
conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=ctx)
|
|
27
|
-
else:
|
|
28
|
-
conn = http.client.HTTPConnection(host, port, timeout=timeout)
|
|
29
45
|
|
|
46
|
+
def https_request(method, url, headers=None, body=None, timeout=120):
|
|
47
|
+
"""Make a verified HTTPS request and return (status, headers, body_str).
|
|
48
|
+
|
|
49
|
+
Refuses anything but ``https://`` with InsecureURLError, verifies the
|
|
50
|
+
certificate and host name against the system trust store (TLS 1.2 or
|
|
51
|
+
later), and follows at most MAX_REDIRECTS redirects that stay on the same
|
|
52
|
+
host and port: a redirect to plain HTTP, another scheme or another host is
|
|
53
|
+
refused rather than handing the API key and query to a recipient the
|
|
54
|
+
caller did not name.
|
|
55
|
+
"""
|
|
30
56
|
hdrs = {"User-Agent": "osint-skill/3.2-python"}
|
|
31
57
|
if headers:
|
|
32
58
|
hdrs.update(headers)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
context = ssl.create_default_context()
|
|
60
|
+
context.minimum_version = ssl.TLSVersion.TLSv1_2
|
|
61
|
+
|
|
62
|
+
host, port, target = _check_https_url(url)
|
|
63
|
+
for _ in range(MAX_REDIRECTS + 1):
|
|
64
|
+
conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=context)
|
|
65
|
+
try:
|
|
66
|
+
conn.request(method, target, body=body, headers=hdrs)
|
|
67
|
+
resp = conn.getresponse()
|
|
68
|
+
data = resp.read().decode("utf-8", errors="replace")
|
|
69
|
+
finally:
|
|
70
|
+
conn.close()
|
|
71
|
+
|
|
72
|
+
location = resp.getheader("Location")
|
|
73
|
+
if resp.status not in _REDIRECT_STATUSES or not location:
|
|
74
|
+
return resp.status, dict(resp.getheaders()), data
|
|
75
|
+
url = urljoin(url, location)
|
|
76
|
+
next_host, next_port, target = _check_https_url(url)
|
|
77
|
+
if (next_host.lower(), next_port) != (host.lower(), port):
|
|
78
|
+
raise InsecureURLError(f"redirect leaves {host}:{port} for {next_host}:{next_port}")
|
|
79
|
+
# As browsers do: 301, 302 and 303 continue a POST as a bodiless GET;
|
|
80
|
+
# 307 and 308 repeat the request unchanged.
|
|
81
|
+
if resp.status in (301, 302, 303) and method not in ("GET", "HEAD"):
|
|
82
|
+
method, body = "GET", None
|
|
83
|
+
hdrs = {k: v for k, v in hdrs.items() if k.lower() != "content-type"}
|
|
84
|
+
raise InsecureURLError(f"too many redirects (max {MAX_REDIRECTS})")
|
|
41
85
|
|
|
42
86
|
|
|
43
87
|
def api_post(url, payload, headers=None, timeout=120):
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-plus",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.23.0",
|
|
5
5
|
"description": "Project-local AI development workflows with clear roles, shared context, safe updates and coding-tool adapters",
|
|
6
6
|
"homepage": "https://bmad-plus.rochetta.fr",
|
|
7
7
|
"keywords": [
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"tools/build/adapters.config.js",
|
|
31
31
|
"tools/build/generate-adapters.js",
|
|
32
32
|
"tools/build/generate.js",
|
|
33
|
+
"tools/build/intake-contract.js",
|
|
33
34
|
"tools/build/module.template.yaml",
|
|
34
35
|
"tools/build/pack-delivery.js",
|
|
35
36
|
"src/bmad-plus",
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"build": "node tools/build/generate.js --out tools/cli/lib/packs.js --module-out src/bmad-plus/module.yaml",
|
|
50
51
|
"build:check": "node tools/build/generate.js --check",
|
|
51
52
|
"check:counts": "node tools/build/check-counts.js",
|
|
53
|
+
"check:triggers": "node tools/build/check-triggers.js",
|
|
52
54
|
"check:counts:full": "jest --coverage=false --silent --json --outputFile=coverage/jest-report.json && node tools/build/check-counts.js --jest-report coverage/jest-report.json",
|
|
53
55
|
"uat:spec": "node src/bmad-plus/skills/bmad-plus-uat/templates/uat-spec-present.mjs --dir recettes",
|
|
54
56
|
"uat:gate": "node src/bmad-plus/skills/bmad-plus-uat/templates/uat-release-gate.mjs --dir recettes --cli tools/cli/bmad-plus-cli.js",
|
|
@@ -66,6 +68,7 @@
|
|
|
66
68
|
"dependencies": {
|
|
67
69
|
"@clack/prompts": "^1.4.0",
|
|
68
70
|
"commander": "^14.0.0",
|
|
71
|
+
"design-skill": "0.2.1",
|
|
69
72
|
"fs-extra": "^11.3.6",
|
|
70
73
|
"js-yaml": "^5.2.2",
|
|
71
74
|
"picocolors": "^1.1.1",
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<a href="../README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.es.md">Español</a> | 🌐 <b>Deutsch</b>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Version 0.
|
|
9
|
+
**Version 0.23.0** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
11
|
Projektlokale KI-Entwicklungsworkflows mit klaren Rollen, gemeinsamem Kontext, sicheren Updates und Adaptern für Coding-Tools.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Starte das Installationsprogramm. Wähle die Adapter deiner KI-Werkzeuge und die
|
|
|
39
39
|
**Im Terminal deines Projekts:**
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
npx bmad-plus@0.
|
|
42
|
+
npx bmad-plus@0.23.0 install
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
Die Installation erstellt Agentenanweisungen, die gemeinsame Projektbasis und die gewählten Adapter. Optionale Packs können weitere Laufzeitumgebungen oder API-Zugänge benötigen.
|
|
@@ -102,6 +102,7 @@ Lies die Änderungen und Testergebnisse. Der Assistent arbeitet innerhalb der Re
|
|
|
102
102
|
| Dev Studio | Spezialisierte Rollen und Workflows für Produktplanung, Design, Entwicklung und Dokumentation. |
|
|
103
103
|
| Backup | Anweisungen und Hilfsprogramme für datierte Sicherungen, Wiederherstellung und Rotation. |
|
|
104
104
|
| Animated | Ein gezielter Workflow für Websites mit videobasierten Scrolleffekten. |
|
|
105
|
+
| Design | Atelier, die Design-Engine: Oberflächen nach prüfbaren Regeln bauen, auditieren und überarbeiten, mit einem Briefing zuerst. |
|
|
105
106
|
|
|
106
107
|
## Beispiele
|
|
107
108
|
|
|
@@ -175,18 +176,27 @@ Lies AGENTS.md und die verfügbare Projekterinnerung. Fasse den letzten geprüft
|
|
|
175
176
|
|
|
176
177
|
Erwartetes Ergebnis: ein kurzer, belegter Wiedereinstieg. Projektnotizen liefern Kontext und müssen mit dem aktuellen Stand abgeglichen werden.
|
|
177
178
|
|
|
178
|
-
|
|
179
|
+
### Einen Bildschirm mit Atelier gestalten
|
|
179
180
|
|
|
180
|
-
|
|
181
|
+
Nutze dies mit dem optionalen Design-Pack. Atelier stellt zuerst seine Fragen und folgt dann prüfbaren Regeln.
|
|
181
182
|
|
|
182
|
-
|
|
183
|
+
```text
|
|
184
|
+
Atelier, führe die Design-Analyse für die Rechnungsliste meiner App durch, baue den Bildschirm und schließe mit dem Preflight-Urteil ab.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Erwartetes Ergebnis: die festgehaltene Design-Analyse, der Bildschirm mit allen abgedeckten Zuständen und das Preflight-Urteil als letzte Zeile.
|
|
188
|
+
|
|
189
|
+
## Neu in 0.23.0
|
|
190
|
+
|
|
191
|
+
Erst fragen, dann schwärmen
|
|
192
|
+
|
|
193
|
+
Ein Pack erklärt jetzt, welche Fragen beantwortet sein müssen, bevor es handelt, und Nexus kann einen Schwarm von Unteragenten, ein simuliertes Panel oder eine Jury innerhalb eines von dir gesetzten Budgets ausführen. Atelier, die Design-Engine, kommt als zehntes Pack hinzu. Installation und Update bleiben wie bisher.
|
|
183
194
|
|
|
184
|
-
-
|
|
185
|
-
- bmad-plus
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
- SEO-Abruf und Crawler lösen jeden Host selbst auf, lehnen interne Adressen ab und verbinden sich genau mit der geprüften Adresse, auch bei jeder Weiterleitung, was DNS-Rebinding verhindert. Der MCP-Server nutzt das offizielle SDK unter Python 3.12 mit aktuellem chromadb und sentence-transformers; führe ingest.py nach dem Update einmal erneut aus.
|
|
195
|
+
- bmad-plus intake stellt die Fragen eines Packs in kleinen Gruppen, markiert die Pflichtangaben, schlägt Standardwerte vor, hält fest, was du nicht weißt, samt Risiko, und erzeugt das Briefing, das zum Vertrag für alles Weitere wird. Nichts darin wird erfunden.
|
|
196
|
+
- bmad-plus swarm zieht simulierte Einheiten aus einem Profil mit einem Seed, schreibt ein Briefing pro Unteragent, prüft jede Antwortdatei, zählt nur gültige Antworten und sagt klar, dass simulierte Käufer keine Kunden sind. Der Block swarm in _bmad/config.yaml legt fest, wie viele Unteragenten laufen, bevor der Assistent dich fragt; bezahlte Mediengenerierung fragt immer.
|
|
197
|
+
- Die Registry hält jetzt fest, welche Skills ein Agent führt, aus welchem npm-Paket die Skills eines Packs stammen, welche Pipeline-Schritte und Freigaben ein Pack erklärt und welches Briefing es durchführt. Die erzeugten Anweisungen tragen all das, nichts wird zweimal getippt.
|
|
198
|
+
- Design-Pack: Atelier, gebaut aus dem Paket design-skill, befragt dich mit einer Design-Analyse und baut, prüft oder überarbeitet dann eine Oberfläche nach prüfbaren Regeln. Der Installer kopiert seine drei Skills mit ihren Referenzmodulen, und doctor prüft sie.
|
|
199
|
+
- Ein Trigger-Gate lehnt Regeln zur automatischen Aktivierung ab, die einen der Registry unbekannten Agenten oder eine unbekannte Pipeline nennen, und der Installer schreibt nichts, wenn sich die Dateien eines Packs nicht vorher vollständig auflisten lassen.
|
|
190
200
|
|
|
191
201
|
## Versionsverlauf
|
|
192
202
|
|
|
@@ -194,9 +204,9 @@ Diese Daten bezeichnen geprüfte CHANGELOG-Einträge, nicht die Veröffentlichun
|
|
|
194
204
|
|
|
195
205
|
| Version | Datum der Notizen | Geprüfte Zusammenfassung |
|
|
196
206
|
| --- | --- | --- |
|
|
207
|
+
| 0.23.0 | 2026-10-17 | Ein Pack erklärt jetzt, welche Fragen beantwortet sein müssen, bevor es handelt, und Nexus kann einen Schwarm von Unteragenten, ein simuliertes Panel oder eine Jury innerhalb eines von dir gesetzten Budgets ausführen. Atelier, die Design-Engine, kommt als zehntes Pack hinzu. Installation und Update bleiben wie bisher. |
|
|
208
|
+
| 0.22.0 | 2026-09-29 | BMAD+ erklärt jetzt jede Datenübertragung und jeden Prozess, den es startet, und seine CI lehnt alles Unerklärte ab. Die Abnahmeseite und der SEO-Bericht laden nichts mehr von anderen Websites, OSINT-Aufrufe laufen nur über HTTPS, und Shield erhält einen Sicherheitsnachweis aus ausgeführten Prüfungen und ein Verzeichnis der KI-Verarbeitungen. An Installation und Update ändert sich nichts. |
|
|
197
209
|
| 0.21.0 | 2026-09-28 | Ein Review hält jetzt fest, warum es angehalten hat und was es verbraucht hat, schreibt eine Prüfung, die ein CI-Schritt lesen kann, und wird auf dem versiegelten Umfang fortgesetzt. Der SEO-Abruf verbindet sich nur mit Adressen, die er geprüft hat, und der MCP-Server wechselt zum offiziellen SDK unter Python 3.12. An Installation und Update ändert sich nichts. |
|
|
198
|
-
| 0.20.0 | 2026-09-28 | bmad-plus review gibt der prüfenden Person jetzt die Regeln, die für die geänderten Dateien gelten, legt die Tiefe eines Reviews vor Beginn fest, vergleicht ein Review mit einem früheren, ohne einen ungeprüften Befund für behoben zu erklären, und schwärzt Zugangsdaten in dem, was es schreibt. An Installation und Update ändert sich nichts. |
|
|
199
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review versiegelt, was ein Review abdecken muss, findet jeden Befund über den Code, den er zitiert, und leitet das Urteil aus der Abdeckung ab statt aus der Zahl der Befunde. Die Review-Sichtung behält einen Befund jetzt, solange kein zitierter Grund ihn widerlegt. An Installation und Update ändert sich nichts. |
|
|
200
210
|
|
|
201
211
|
[Versionsverlauf und Update-Anleitung](https://bmad-plus.rochetta.fr/de/docs/#changelog) · [Alle veröffentlichten Versionen auf npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
202
212
|
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<a href="../README.md">English</a> | <a href="README.fr.md">Français</a> | 🌐 <b>Español</b> | <a href="README.de.md">Deutsch</a>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Versión 0.
|
|
9
|
+
**Versión 0.23.0** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
11
|
Flujos de desarrollo con IA propios de cada proyecto, con roles claros, contexto compartido, actualizaciones seguras y adaptadores para herramientas de programación.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Ejecuta el instalador. Selecciona los adaptadores de tus herramientas de IA y lo
|
|
|
39
39
|
**En la terminal del proyecto:**
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
npx bmad-plus@0.
|
|
42
|
+
npx bmad-plus@0.23.0 install
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
El instalador crea las instrucciones de los agentes, la base compartida y los adaptadores seleccionados. Algunos packs opcionales necesitan otros entornos o acceso a API.
|
|
@@ -102,6 +102,7 @@ Lee los cambios y los resultados de las pruebas. El asistente sigue los permisos
|
|
|
102
102
|
| Dev Studio | Roles y flujos especializados en producto, diseño, ingeniería y documentación. |
|
|
103
103
|
| Backup | Instrucciones y utilidades para copias con fecha, restauración y rotación. |
|
|
104
104
|
| Animated | Un flujo centrado en crear sitios cuyo desplazamiento utiliza vídeo. |
|
|
105
|
+
| Design | Atelier, el motor de diseño: construir, auditar y rediseñar interfaces con reglas verificables, empezando por una entrevista. |
|
|
105
106
|
|
|
106
107
|
## Ejemplos
|
|
107
108
|
|
|
@@ -175,18 +176,27 @@ Lee AGENTS.md y la memoria de proyecto disponible. Resume el último estado veri
|
|
|
175
176
|
|
|
176
177
|
Resultado esperado: una reanudación breve y fundamentada. Las notas aportan contexto que debe contrastarse con el trabajo actual.
|
|
177
178
|
|
|
178
|
-
|
|
179
|
+
### Diseñar una pantalla con Atelier
|
|
179
180
|
|
|
180
|
-
|
|
181
|
+
Úsalo con el paquete opcional Design instalado. Atelier hace primero sus preguntas y luego sigue reglas comprobables.
|
|
181
182
|
|
|
182
|
-
|
|
183
|
+
```text
|
|
184
|
+
Atelier, haz la lectura de diseño de la lista de facturas de mi aplicación, construye la pantalla y termina con el veredicto de la comprobación previa.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Resultado esperado: la lectura de diseño registrada, la pantalla con todos sus estados cubiertos y el veredicto de la comprobación previa citado como última línea.
|
|
188
|
+
|
|
189
|
+
## Novedades de la 0.23.0
|
|
190
|
+
|
|
191
|
+
Preguntar primero, luego el enjambre
|
|
192
|
+
|
|
193
|
+
Un paquete declara ahora las preguntas que necesita respondidas antes de actuar, y Nexus puede lanzar un enjambre de subagentes, un panel simulado o un jurado, dentro de un presupuesto que tú fijas. Atelier, el motor de diseño, se incorpora como décimo paquete. Instalar y actualizar funcionan como antes.
|
|
183
194
|
|
|
184
|
-
-
|
|
185
|
-
- bmad-plus
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
- El descargador y el rastreador SEO resuelven cada host por sí mismos, rechazan direcciones internas y se conectan exactamente a la dirección validada, también en cada redirección, lo que neutraliza el DNS rebinding. El servidor MCP usa el SDK oficial con Python 3.12 y chromadb y sentence-transformers actuales; vuelve a ejecutar ingest.py una vez tras actualizar.
|
|
195
|
+
- bmad-plus intake hace las preguntas de un paquete de pocas en pocas, marca las imprescindibles, propone valores por defecto, anota lo que no sabes con su riesgo y redacta el brief que se convierte en el contrato de todo lo que el paquete hace después. Nada en él se inventa.
|
|
196
|
+
- bmad-plus swarm reparte unidades simuladas a partir de un perfil con una semilla, escribe un brief por subagente, valida cada archivo de respuesta, cuenta solo las respuestas válidas y deja claro que los compradores simulados no son clientes. El bloque swarm de _bmad/config.yaml fija cuántos subagentes se lanzan antes de que el asistente te pregunte; la generación de medios de pago siempre pregunta.
|
|
197
|
+
- El registro anota ahora qué habilidades conduce un agente, de qué paquete npm proceden las habilidades de un paquete, qué pasos de pipeline y qué puertas declara y qué cuestionario ejecuta. Las instrucciones generadas lo recogen todo, así que nada se escribe dos veces.
|
|
198
|
+
- Paquete Design: Atelier, construido a partir del paquete design-skill, te entrevista con una lectura de diseño y luego construye, audita o rediseña una interfaz con reglas comprobables. El instalador copia sus tres habilidades con sus módulos de referencia, y doctor las comprueba.
|
|
199
|
+
- Una puerta de disparadores rechaza las reglas de activación automática que nombran un agente o un pipeline que el registro no conoce, y el instalador no escribe nada cuando los archivos de un paquete no pueden listarse todos primero.
|
|
190
200
|
|
|
191
201
|
## Historial de versiones
|
|
192
202
|
|
|
@@ -194,9 +204,9 @@ Estas fechas identifican las notas revisadas del CHANGELOG, no las fechas de pub
|
|
|
194
204
|
|
|
195
205
|
| Versión | Fecha de las notas | Resumen revisado |
|
|
196
206
|
| --- | --- | --- |
|
|
207
|
+
| 0.23.0 | 2026-10-17 | Un paquete declara ahora las preguntas que necesita respondidas antes de actuar, y Nexus puede lanzar un enjambre de subagentes, un panel simulado o un jurado, dentro de un presupuesto que tú fijas. Atelier, el motor de diseño, se incorpora como décimo paquete. Instalar y actualizar funcionan como antes. |
|
|
208
|
+
| 0.22.0 | 2026-09-29 | BMAD+ declara ahora cada envío de datos y cada proceso que inicia, y su CI rechaza todo lo que no esté declarado. La página de aceptación y el informe SEO ya no cargan nada de otros sitios, las llamadas OSINT van solo por HTTPS, y Shield incorpora un caso de seguridad basado en pruebas ejecutadas y un registro de tratamientos de IA. Nada cambia en la instalación ni en la actualización. |
|
|
197
209
|
| 0.21.0 | 2026-09-28 | Una revisión registra ahora por qué se detuvo y qué consumió, escribe un control que un paso de CI puede leer y se reanuda sobre el alcance que selló. El descargador SEO solo se conecta a direcciones que ha validado, y el servidor MCP pasa al SDK oficial con Python 3.12. Nada cambia en la instalación ni en la actualización. |
|
|
198
|
-
| 0.20.0 | 2026-09-28 | bmad-plus review ahora entrega a quien revisa las reglas que se aplican a los archivos modificados, fija la profundidad de una revisión antes de empezar, compara una revisión con otra anterior sin dar por corregido un hallazgo no comprobado y oculta las credenciales en lo que escribe. Nada cambia en la instalación ni en la actualización. |
|
|
199
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review sella lo que una revisión debe cubrir, localiza cada hallazgo por el código que cita y deduce el veredicto de la cobertura en lugar del número de hallazgos. La clasificación de las revisiones conserva ahora un hallazgo mientras ningún motivo citado lo refute. Nada cambia en la instalación ni en la actualización. |
|
|
200
210
|
|
|
201
211
|
[Historial de versiones y guía de actualización](https://bmad-plus.rochetta.fr/es/docs/#changelog) · [Todas las versiones publicadas en npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
202
212
|
|