bmad-plus 0.12.2 → 0.14.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 +47 -0
- package/README.md +96 -461
- package/package.json +12 -5
- package/readme-international/README.de.md +42 -9
- package/readme-international/README.es.md +43 -10
- package/readme-international/README.fr.md +42 -9
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -3
- package/src/bmad-plus/module.yaml +270 -220
- package/src/bmad-plus/packs/pack-dev-studio/README.md +133 -141
- package/src/bmad-plus/packs/pack-dev-studio/SKILL.md +49 -0
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/analyst-agent.md +35 -60
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/document-project.md +59 -59
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/domain-research.md +55 -93
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/market-research.md +58 -93
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/prfaq.md +55 -132
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/product-brief.md +63 -78
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/tech-writer-agent.md +54 -69
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/technical-research.md +54 -93
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/architect-agent.md +32 -60
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-architecture.md +67 -71
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-epics-stories.md +61 -90
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/generate-project-context.md +56 -78
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/implementation-readiness.md +55 -88
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01-init.md +20 -153
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01b-continue.md +20 -173
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-02-context.md +14 -220
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-03-starter.md +20 -329
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-04-decisions.md +15 -314
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-05-patterns.md +15 -355
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-06-structure.md +15 -375
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-07-validation.md +14 -357
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-08-complete.md +13 -78
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/checkpoint-preview.md +52 -65
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-01-gather-context.md +14 -81
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-02-review.md +14 -31
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-03-triage.md +14 -45
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-04-present.md +13 -128
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +61 -87
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/correct-course.md +55 -298
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/create-story.md +52 -426
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-agent.md +48 -69
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story-checklist.md +22 -80
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story.md +60 -482
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/investigate.md +50 -184
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/qa-e2e-tests.md +57 -173
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/quick-dev.md +56 -108
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/retrospective.md +54 -1509
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-planning.md +54 -296
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-status.md +41 -283
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-prd.md +58 -18
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-ux-design.md +103 -72
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/edit-prd.md +55 -27
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/pm-agent.md +34 -60
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/prd.md +46 -87
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/steps/step-01-init.md +10 -0
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/ux-designer-agent.md +30 -60
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/validate-prd.md +57 -27
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/advanced-elicitation.md +47 -138
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/adversarial-review.md +48 -34
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/bmad-help.md +51 -68
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/brainstorming.md +46 -3
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/customize.md +68 -109
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/distillator.md +53 -174
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/edge-case-hunter.md +39 -53
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-prose.md +45 -83
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-structure.md +45 -176
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/index-docs.md +45 -63
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/party-mode.md +53 -124
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/shard-doc.md +44 -100
- package/src/bmad-plus/packs/pack-dev-studio/dev-studio-orchestrator.md +56 -116
- package/src/bmad-plus/packs/pack-dev-studio/shared/architecture-decision-template.md +49 -12
- package/src/bmad-plus/packs/pack-dev-studio/shared/bwml-spec.md +51 -328
- package/src/bmad-plus/packs/pack-dev-studio/shared/catalog.json +489 -0
- package/src/bmad-plus/packs/pack-dev-studio/shared/execution.md +69 -0
- package/src/bmad-plus/packs/pack-dev-studio/shared/module-help.csv +39 -32
- package/src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml +85 -14
- package/src/bmad-plus/packs/pack-memory/README.md +6 -0
- package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +12 -5
- package/src/bmad-plus/packs/pack-seo/SKILL.md +27 -1
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +8 -8
- package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +1 -2
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +0 -1
- package/src/bmad-plus/packs/pack-seo/seo-chief.md +16 -1
- package/src/bmad-plus/packs/pack-seo/seo-judge.md +12 -0
- package/src/bmad-plus/packs/pack-seo/seo-scout.md +12 -0
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +4 -4
- package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +5 -3
- package/src/bmad-plus/skills/dev-studio/SKILL.md +19 -0
- package/tools/bmad-plus-npx.js +4 -2
- package/tools/build/adapters.config.js +60 -51
- package/tools/build/check-counts.js +52 -54
- package/tools/build/check-install-contract.js +450 -0
- package/tools/build/generate-adapters.js +252 -56
- package/tools/build/generate.js +364 -14
- package/tools/build/generated-adapters/.codex/AGENTS.md +20 -7
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +20 -7
- package/tools/build/generated-adapters/.opencode/AGENTS.md +20 -7
- package/tools/build/generated-adapters/AGENTS.md +20 -7
- package/tools/build/generated-adapters/CLAUDE.md +20 -7
- package/tools/build/generated-adapters/CONVENTIONS.md +20 -7
- package/tools/build/generated-adapters/GEMINI.md +20 -7
- package/tools/build/module.template.yaml +82 -0
- package/tools/build/pack-delivery.js +78 -0
- package/tools/cli/bmad-plus-cli.js +16 -1
- package/tools/cli/commands/doctor.js +49 -217
- package/tools/cli/commands/install.js +109 -164
- package/tools/cli/commands/studio.js +68 -0
- package/tools/cli/commands/uninstall.js +173 -65
- package/tools/cli/commands/update-check.js +31 -0
- package/tools/cli/commands/update-policy.js +39 -0
- package/tools/cli/commands/update.js +102 -113
- package/tools/cli/i18n.js +60 -0
- package/tools/cli/lib/ide-config.js +4 -261
- package/tools/cli/lib/install-manifest.js +17 -0
- package/tools/cli/lib/installation-health.js +360 -0
- package/tools/cli/lib/installed-adapters.js +89 -0
- package/tools/cli/lib/npm-runner.js +177 -0
- package/tools/cli/lib/pack-copy.js +62 -66
- package/tools/cli/lib/packs.js +546 -3
- package/tools/cli/lib/python-health.js +233 -0
- package/tools/cli/lib/python-provision.js +2 -2
- package/tools/cli/lib/studio.js +310 -0
- package/tools/cli/lib/update-check.js +153 -0
- package/tools/cli/lib/update-dispatch.js +182 -0
- package/tools/cli/lib/update-policy.js +90 -0
- package/tools/cli/lib/update-transaction.js +334 -0
- package/tools/release/publication-content.js +901 -0
|
@@ -1,15 +1,41 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
1
|
+
# Dev Studio provenance and selective adaptation ledger.
|
|
2
|
+
# Version and commit below have different, explicitly recorded roles.
|
|
3
|
+
# The 0.14.0 implementation is original BMAD+ work, not a wholesale upstream sync.
|
|
4
|
+
schema_version: 2
|
|
3
5
|
|
|
4
6
|
upstream:
|
|
5
7
|
repository: https://github.com/bmad-code-org/BMAD-METHOD
|
|
6
8
|
version: "6.6.0"
|
|
9
|
+
version_role: declared-compatibility-baseline
|
|
10
|
+
baseline_tag_commit: "e6cdc93b79420fcc915d3bd3ca63387bc86af694"
|
|
7
11
|
commit: "0f852a38ac7c0ac30340b3aedc3aba4505b7c14a"
|
|
12
|
+
commit_role: historical-partial-import
|
|
8
13
|
synced_at: "2026-05-17"
|
|
14
|
+
synced_at_role: recorded-date-of-historical-import
|
|
9
15
|
license: MIT
|
|
10
16
|
|
|
17
|
+
reviewed_reference:
|
|
18
|
+
version: "6.12.0"
|
|
19
|
+
commit: "05bfbd46d00766ec88eb9b42e76be2c575d64d7b"
|
|
20
|
+
reviewed_at: "2026-09-09"
|
|
21
|
+
status: reviewed-only
|
|
22
|
+
full_migration: false
|
|
23
|
+
compatibility_baseline_changed: false
|
|
24
|
+
|
|
25
|
+
implementation:
|
|
26
|
+
bmad_plus_version: "0.14.0"
|
|
27
|
+
origin: original-bmad-plus-instructions-and-context-preparation
|
|
28
|
+
authored_at: "2026-09-09"
|
|
29
|
+
execution: host-managed-markdown
|
|
30
|
+
context_preparation: read-only-cli
|
|
31
|
+
standalone_llm_runtime: false
|
|
32
|
+
upstream_runtime_imported: false
|
|
33
|
+
preserved_public_workflow_ids: 38
|
|
34
|
+
preserved_personas: 6
|
|
35
|
+
evidence_limit: Resource reconciliation does not establish host execution or model compliance.
|
|
36
|
+
|
|
11
37
|
adaptations:
|
|
12
|
-
format:
|
|
38
|
+
format: Original BMAD+ Markdown procedures with explicit inputs, evidence and continuation.
|
|
13
39
|
personas:
|
|
14
40
|
Mary: Miriam (מרים)
|
|
15
41
|
Paige: Huldah (חולדה)
|
|
@@ -17,18 +43,63 @@ adaptations:
|
|
|
17
43
|
Sally: Rachel (רחל)
|
|
18
44
|
Winston: Bezalel (בצלאל)
|
|
19
45
|
Amelia: Oholiab (אהליאב)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
46
|
+
entry: SKILL.md
|
|
47
|
+
catalog: shared/catalog.json
|
|
48
|
+
execution_guide: shared/execution.md
|
|
49
|
+
historical_bwml_document: shared/bwml-spec.md
|
|
50
|
+
historical_bwml_document_role: migration-note-not-interpreter-specification
|
|
51
|
+
configuration:
|
|
52
|
+
file: _bmad/config.yaml
|
|
53
|
+
scope: explicitly-selected-project
|
|
54
|
+
parser: existing-bmad-plus-yaml-parser
|
|
55
|
+
known_fields:
|
|
56
|
+
- user_name
|
|
57
|
+
- communication_language
|
|
58
|
+
- document_output_language
|
|
59
|
+
- output_folder
|
|
60
|
+
- project_name
|
|
61
|
+
missing_values: Explicit neutral defaults in the execution guide.
|
|
62
|
+
invalid_present_values: Report an error rather than inventing configuration.
|
|
63
|
+
preserve_unrelated_settings: true
|
|
64
|
+
layered_toml_overrides: false
|
|
65
|
+
retired_dependency_contracts:
|
|
66
|
+
- Imported PRD headless schemas and automatic HTML validation rendering.
|
|
67
|
+
- Distillator compression/reconstruction format and Python source analyzer.
|
|
68
|
+
- Upstream Python/TOML customization discovery and layered override merging.
|
|
69
|
+
- Implied execution of BWML tags as scheduler, memory, events or validation gates.
|
|
70
|
+
historical_dependency_note: >-
|
|
71
|
+
The old removed_dependencies list was not proof that dependent instructions
|
|
72
|
+
remained executable. Project YAML configuration is supported now; it is not
|
|
73
|
+
a removed dependency. Per-skill customize.toml files and shared upstream
|
|
74
|
+
resolvers fall outside the 147-support-file inventory below.
|
|
75
|
+
|
|
76
|
+
support_reconciliation:
|
|
77
|
+
source_method: Read-only git ls-tree at the historical import commit.
|
|
78
|
+
historical_bmad_plus_commit: "913d0600b9e0c3ac12af22b17e2205bf9d394a63"
|
|
79
|
+
mapped_entry_families: 44
|
|
80
|
+
excluded_relative_paths:
|
|
81
|
+
- SKILL.md
|
|
82
|
+
- customize.toml
|
|
83
|
+
source_support_files: 147
|
|
84
|
+
historically_delivered: 15
|
|
85
|
+
historically_omitted: 132
|
|
86
|
+
historically_omitted_families: 24
|
|
87
|
+
omitted_dispositions:
|
|
88
|
+
replaced-by-self-contained-workflows: 117
|
|
89
|
+
retired-runtime: 12
|
|
90
|
+
optional-tests-or-metadata: 3
|
|
91
|
+
delivered_disposition: retained-as-original-support
|
|
92
|
+
interpretation: >-
|
|
93
|
+
Counts describe the pre-remediation snapshot. An omitted support file is not
|
|
94
|
+
automatically a demonstrated runtime failure. Replaced means the relevant
|
|
95
|
+
purpose is covered by original instructions, not exact upstream feature parity.
|
|
96
|
+
Retired-runtime includes unsupported execution contracts even when no working
|
|
97
|
+
runtime had been delivered.
|
|
98
|
+
repository_report: docs/research/dev-studio-0.14-validation/migration.md
|
|
99
|
+
repository_inventory: docs/research/dev-studio-0.14-validation/migration.json
|
|
31
100
|
|
|
101
|
+
# Historical source mapping only. These are lineage references, not live imports
|
|
102
|
+
# or runtime dependencies. Current routes resolve through shared/catalog.json.
|
|
32
103
|
source_mapping:
|
|
33
104
|
categories/analysis:
|
|
34
105
|
- src/bmm-skills/1-analysis/bmad-agent-analyst → analyst-agent.md
|
|
@@ -48,6 +48,12 @@ Dedicated memory agent that can:
|
|
|
48
48
|
|
|
49
49
|
## Installation
|
|
50
50
|
|
|
51
|
+
The npm pack provides file-based memory and requires Node.js only. Vector/RAG
|
|
52
|
+
recall is an optional, local-only enhancement through a separately deployed
|
|
53
|
+
MCP server. That server, its Python dependencies and its vector index are not
|
|
54
|
+
included in the npm package; `--provision-python` does not install them.
|
|
55
|
+
Missing RAG infrastructure does not disable Markdown memory or the project scanner.
|
|
56
|
+
|
|
51
57
|
```bash
|
|
52
58
|
npx bmad-plus install
|
|
53
59
|
# Select "🧠 Memory — Persistent Brain" in the pack menu
|
|
@@ -16,10 +16,17 @@ Pack Memory provides a two-level persistent brain for BMAD+:
|
|
|
16
16
|
|
|
17
17
|
## Activation
|
|
18
18
|
|
|
19
|
-
Pack Memory
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
Pack Memory supplies instructions and files for the host agent to use. The host
|
|
20
|
+
must load and follow the memory protocol; installation alone does not execute it.
|
|
21
|
+
No automatic session-start or session-end hooks are installed.
|
|
22
|
+
|
|
23
|
+
While executing the protocol, the host agent should:
|
|
24
|
+
|
|
25
|
+
- At session start: load project memory + global identity
|
|
26
|
+
- During the session: record decisions, lessons and patterns when relevant
|
|
27
|
+
- Before ending its work: persist a session handoff
|
|
28
|
+
|
|
29
|
+
A session that ends without an agent turn has no guaranteed handoff.
|
|
23
30
|
|
|
24
31
|
Manual activation via Zecher:
|
|
25
32
|
- `"Zecher, scan projects in D:\travail\DEV"` — discover and index all projects
|
|
@@ -43,7 +50,7 @@ pack-memory/
|
|
|
43
50
|
├── memory-orchestrator.md ← This file
|
|
44
51
|
├── zecher-agent.md ← Memory Agent (Zecher)
|
|
45
52
|
├── shared/
|
|
46
|
-
│ ├── karpathy-guardrails.md ← 4 Karpathy principles + memory
|
|
53
|
+
│ ├── karpathy-guardrails.md ← 4 Karpathy principles + memory practices
|
|
47
54
|
│ └── memory-protocol.md ← Complete read/write protocol
|
|
48
55
|
└── templates/
|
|
49
56
|
├── decisions.md ← ADR template
|
|
@@ -15,6 +15,31 @@ description: >
|
|
|
15
15
|
This skill orchestrates 3 specialized agents through a structured workflow.
|
|
16
16
|
Load the full agent files only when activating that agent's phase.
|
|
17
17
|
|
|
18
|
+
### Runtime availability
|
|
19
|
+
|
|
20
|
+
The local `scripts/*.py` commands require a working Python environment and their
|
|
21
|
+
optional service credentials or browser setup. Never invent crawl, PageSpeed,
|
|
22
|
+
API or screenshot results.
|
|
23
|
+
|
|
24
|
+
Use `bmad-plus install --provision-python` to provision the selected Python packs,
|
|
25
|
+
or install this pack's `requirements.txt` in a dedicated environment manually.
|
|
26
|
+
Run scripts with that environment's interpreter, not an assumed system Python.
|
|
27
|
+
Provisioning is optional. Report **prompts-only mode** before starting an audit
|
|
28
|
+
if the environment is unavailable. Do not repeatedly run failing scripts or
|
|
29
|
+
install dependencies without authorization.
|
|
30
|
+
|
|
31
|
+
### Evidence and reporting
|
|
32
|
+
|
|
33
|
+
Use evidence available in the session or collected by working tools. Without a
|
|
34
|
+
usable Python environment, use **prompts-only mode** and skip local Python commands.
|
|
35
|
+
Mark missing data `unverified` and omit every score with incomplete inputs,
|
|
36
|
+
including the overall SEO Health Score. Do not substitute zero or reweight the
|
|
37
|
+
remaining categories. For incomplete audits, produce Markdown with explicit
|
|
38
|
+
coverage: pages and checks reviewed, evidence sources, and unverified items.
|
|
39
|
+
Use `scripts/seo_report.py` only when every score value it uses is verified;
|
|
40
|
+
the current exporter has no N/A support. This policy applies to every role and
|
|
41
|
+
overrides numeric placeholders in report templates.
|
|
42
|
+
|
|
18
43
|
## Command Router
|
|
19
44
|
|
|
20
45
|
When the user issues a `/seo` command, route as follows:
|
|
@@ -90,7 +115,8 @@ Use `scripts/seo_screenshot.py <url> --viewport mobile` for visual audit.
|
|
|
90
115
|
**Agent**: Chief (Scorer role)
|
|
91
116
|
**Load**: `seo-chief.md`
|
|
92
117
|
|
|
93
|
-
Compute SEO Health Score (0–100)
|
|
118
|
+
Compute SEO Health Score (0–100) only when all weighted categories have verified
|
|
119
|
+
inputs. Otherwise report coverage and omit the overall score:
|
|
94
120
|
|
|
95
121
|
| Category | Weight |
|
|
96
122
|
|----------|--------|
|
|
@@ -298,16 +298,16 @@ def run_rich_results_test(url: str) -> dict:
|
|
|
298
298
|
|
|
299
299
|
def run_all(url: str) -> dict:
|
|
300
300
|
"""Run all available API checks and merge results."""
|
|
301
|
-
print(
|
|
301
|
+
print("Running PageSpeed Insights (mobile)...", file=sys.stderr)
|
|
302
302
|
psi_mobile = run_pagespeed(url, strategy="mobile")
|
|
303
303
|
|
|
304
|
-
print(
|
|
304
|
+
print("Running PageSpeed Insights (desktop)...", file=sys.stderr)
|
|
305
305
|
psi_desktop = run_pagespeed(url, strategy="desktop")
|
|
306
306
|
|
|
307
|
-
print(
|
|
307
|
+
print("Running CrUX API...", file=sys.stderr)
|
|
308
308
|
crux = run_crux(url)
|
|
309
309
|
|
|
310
|
-
print(
|
|
310
|
+
print("Running Mobile-Friendly Test...", file=sys.stderr)
|
|
311
311
|
rich = run_rich_results_test(url)
|
|
312
312
|
|
|
313
313
|
return {
|
|
@@ -339,21 +339,21 @@ def print_psi_summary(result: dict, label: str):
|
|
|
339
339
|
|
|
340
340
|
cwv = result.get("cwv", {})
|
|
341
341
|
if cwv:
|
|
342
|
-
print(
|
|
342
|
+
print("\n Core Web Vitals:")
|
|
343
343
|
for metric, data in cwv.items():
|
|
344
344
|
icon = "🟢" if data["score"] >= 90 else "🟡" if data["score"] >= 50 else "🔴"
|
|
345
345
|
print(f" {icon} {metric}: {data['display']} ({data['score']}/100)")
|
|
346
346
|
|
|
347
347
|
failures = result.get("failing_audits", [])[:5]
|
|
348
348
|
if failures:
|
|
349
|
-
print(
|
|
349
|
+
print("\n Top Failing Audits:")
|
|
350
350
|
for audit in failures:
|
|
351
351
|
icon = "🔴" if audit["severity"] == "critical" else "🟠"
|
|
352
352
|
print(f" {icon} {audit['title']} ({audit['score']}/100)")
|
|
353
353
|
|
|
354
354
|
opps = result.get("opportunities", [])[:3]
|
|
355
355
|
if opps:
|
|
356
|
-
print(
|
|
356
|
+
print("\n Top Opportunities:")
|
|
357
357
|
for opp in opps:
|
|
358
358
|
print(f" 💡 {opp['title']} (save {opp['savings_ms']}ms)")
|
|
359
359
|
|
|
@@ -397,7 +397,7 @@ def main():
|
|
|
397
397
|
|
|
398
398
|
crux = result["crux"]
|
|
399
399
|
if not crux.get("error"):
|
|
400
|
-
print(
|
|
400
|
+
print("\n 📊 CrUX Field Data:")
|
|
401
401
|
for metric, data in crux.get("metrics", {}).items():
|
|
402
402
|
print(f" {metric}: p75 = {data['p75']}")
|
|
403
403
|
else:
|
|
@@ -18,7 +18,6 @@ import ipaddress
|
|
|
18
18
|
import json
|
|
19
19
|
import socket
|
|
20
20
|
import sys
|
|
21
|
-
from typing import Optional
|
|
22
21
|
from urllib.parse import urljoin, urlparse
|
|
23
22
|
|
|
24
23
|
try:
|
|
@@ -290,7 +289,7 @@ def main():
|
|
|
290
289
|
print(result["content"])
|
|
291
290
|
|
|
292
291
|
# Metadata to stderr
|
|
293
|
-
print(
|
|
292
|
+
print("\n--- Fetch Summary ---", file=sys.stderr)
|
|
294
293
|
print(f"Final URL: {result['final_url']}", file=sys.stderr)
|
|
295
294
|
print(f"Status: {result['status_code']}", file=sys.stderr)
|
|
296
295
|
print(f"Size: {result['content_length']:,} bytes", file=sys.stderr)
|
|
@@ -136,7 +136,6 @@ def generate_html_report(audit_data: dict) -> str:
|
|
|
136
136
|
total_score_esc = html.escape(str(total_score))
|
|
137
137
|
categories = audit_data.get("score", {}).get("categories", {})
|
|
138
138
|
issues = audit_data.get("issues", [])
|
|
139
|
-
pages = audit_data.get("pages", [])
|
|
140
139
|
|
|
141
140
|
# Generate radar chart
|
|
142
141
|
radar_svg = generate_radar_svg(categories) if categories else ""
|
|
@@ -6,6 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
You are **Chief**, the strategist and reporting agent of the BMAD+ SEO Engine. You aggregate findings from Scout and Judge, compute the SEO Health Score, generate prioritized action plans, and produce publication-ready reports.
|
|
8
8
|
|
|
9
|
+
## Evidence and reporting
|
|
10
|
+
|
|
11
|
+
Use evidence available in the session or collected by working tools. Without a
|
|
12
|
+
usable Python environment, use **prompts-only mode** and skip local Python commands.
|
|
13
|
+
Mark missing data `unverified` and omit every score with incomplete inputs,
|
|
14
|
+
including the overall SEO Health Score. Do not substitute zero or reweight the
|
|
15
|
+
remaining categories. For incomplete audits, produce Markdown with explicit
|
|
16
|
+
coverage: pages and checks reviewed, evidence sources, and unverified items.
|
|
17
|
+
Use `scripts/seo_report.py` only when every score value it uses is verified;
|
|
18
|
+
the current exporter has no N/A support. This policy applies to every role and
|
|
19
|
+
overrides numeric placeholders in report templates.
|
|
20
|
+
|
|
9
21
|
## Roles
|
|
10
22
|
|
|
11
23
|
### Role: Scorer
|
|
@@ -73,13 +85,16 @@ You are **Chief**, the strategist and reporting agent of the BMAD+ SEO Engine. Y
|
|
|
73
85
|
| 0–39 | 🔴 Critical | Fundamental issues blocking performance |
|
|
74
86
|
|
|
75
87
|
### Category Score Calculation
|
|
76
|
-
|
|
88
|
+
Score a category 0–100 only when its required checklist inputs are verified:
|
|
77
89
|
- ✅ Pass = full points for that item
|
|
78
90
|
- ⚠️ Warning = 50% points (issue exists but not blocking)
|
|
79
91
|
- ❌ Fail = 0 points (blocking issue)
|
|
80
92
|
|
|
81
93
|
**Final Score** = Σ(category_score × category_weight)
|
|
82
94
|
|
|
95
|
+
Compute this total only when all weighted categories are verified. Missing
|
|
96
|
+
evidence remains `unverified`; it is never a failed check or a zero score.
|
|
97
|
+
|
|
83
98
|
---
|
|
84
99
|
|
|
85
100
|
## Issue Priority Classification
|
|
@@ -6,6 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
You are **Judge**, the content and AI analyst of the BMAD+ SEO Engine. You evaluate content quality, validate structured data, and measure AI search readiness. You are the analytical brain of the audit.
|
|
8
8
|
|
|
9
|
+
## Evidence and reporting
|
|
10
|
+
|
|
11
|
+
Use evidence available in the session or collected by working tools. Without a
|
|
12
|
+
usable Python environment, use **prompts-only mode** and skip local Python commands.
|
|
13
|
+
Mark missing data `unverified` and omit every score with incomplete inputs,
|
|
14
|
+
including the overall SEO Health Score. Do not substitute zero or reweight the
|
|
15
|
+
remaining categories. For incomplete audits, produce Markdown with explicit
|
|
16
|
+
coverage: pages and checks reviewed, evidence sources, and unverified items.
|
|
17
|
+
Use `scripts/seo_report.py` only when every score value it uses is verified;
|
|
18
|
+
the current exporter has no N/A support. This policy applies to every role and
|
|
19
|
+
overrides numeric placeholders in report templates.
|
|
20
|
+
|
|
9
21
|
## Roles
|
|
10
22
|
|
|
11
23
|
### Role: Content Expert
|
|
@@ -6,6 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
You are **Scout**, the technical reconnaissance agent of the BMAD+ SEO Engine. You crawl, fetch, inspect, and photograph websites to produce raw technical intelligence for the audit pipeline.
|
|
8
8
|
|
|
9
|
+
## Evidence and reporting
|
|
10
|
+
|
|
11
|
+
Use evidence available in the session or collected by working tools. Without a
|
|
12
|
+
usable Python environment, use **prompts-only mode** and skip local Python commands.
|
|
13
|
+
Mark missing data `unverified` and omit every score with incomplete inputs,
|
|
14
|
+
including the overall SEO Health Score. Do not substitute zero or reweight the
|
|
15
|
+
remaining categories. For incomplete audits, produce Markdown with explicit
|
|
16
|
+
coverage: pages and checks reviewed, evidence sources, and unverified items.
|
|
17
|
+
Use `scripts/seo_report.py` only when every score value it uses is verified;
|
|
18
|
+
the current exporter has no N/A support. This policy applies to every role and
|
|
19
|
+
overrides numeric placeholders in report templates.
|
|
20
|
+
|
|
9
21
|
## Roles
|
|
10
22
|
|
|
11
23
|
You operate in 3 switchable roles:
|
|
@@ -48,10 +48,10 @@ The autopilot executes the following pipeline:
|
|
|
48
48
|
|
|
49
49
|
### Checkpoint Behavior
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Before starting, read `execution_mode` and `checkpoints` from `_bmad/config.yaml`. The checkpoint keys are `discovery` (PRD and UX review), `architecture`, `story` (each completed story), and `delivery`. Apply the configured behavior at each stage:
|
|
52
52
|
|
|
53
|
-
- **require_approval** (🔴 STOP):
|
|
54
|
-
- **notify_only** (🟡 INFO):
|
|
53
|
+
- **require_approval** (🔴 STOP): Present the checkpoint in the session and wait for user approval. If an external notification channel is configured and sending is authorized, also notify through that channel.
|
|
54
|
+
- **notify_only** (🟡 INFO): Report progress in the session and continue. If an external notification channel is configured and sending is authorized, also notify through that channel.
|
|
55
55
|
- **auto** (🟢 AUTO): Continue automatically. Log for audit trail.
|
|
56
56
|
|
|
57
57
|
### State Management
|
|
@@ -96,4 +96,4 @@ Or via the Orchestrator capabilities menu: `AP`
|
|
|
96
96
|
- **Test failure**: Auto-retry up to 3 times, then escalate to user
|
|
97
97
|
- **Agent error**: Log error, notify user, skip to next step if non-critical
|
|
98
98
|
- **Conflict in parallel execution**: Pause conflicting agent, resolve, restart
|
|
99
|
-
- **User timeout at checkpoint**:
|
|
99
|
+
- **User timeout at checkpoint**: Keep the pipeline paused. A reminder requires a configured scheduler and notification channel plus authorization; a bare installation has no background sender.
|
|
@@ -47,8 +47,8 @@ bmad-plus-sync
|
|
|
47
47
|
├─ Uses Gemini API for:
|
|
48
48
|
│ └─ AI-powered change classification
|
|
49
49
|
│
|
|
50
|
-
└─
|
|
51
|
-
└─ WhatsApp (Evolution API) or
|
|
50
|
+
└─ Reports in the current session
|
|
51
|
+
└─ If configured and authorized: WhatsApp (Evolution API) or email
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
## Protected Paths
|
|
@@ -66,4 +66,6 @@ Invoke via the Orchestrator (Nexus) or directly:
|
|
|
66
66
|
bmad-plus-sync
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
The npm package installs no VPS, cron job or notification sender. An independently
|
|
70
|
+
configured monitor may schedule checks. Use external notifications only when a
|
|
71
|
+
channel is configured and the user has authorized sending; otherwise report inline.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev-studio
|
|
3
|
+
description: Open the installed Dev Studio pack for its six personas and 38 product, architecture, documentation and development workflows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Dev Studio dispatcher
|
|
7
|
+
|
|
8
|
+
In an installed project, read the [Dev Studio pack](../pack-dev-studio/SKILL.md)
|
|
9
|
+
and follow its activation procedure. It resolves the requested persona and
|
|
10
|
+
workflow through the shipped catalog. The host executes the instructions;
|
|
11
|
+
`bmad-plus studio prepare` only loads a read-only context bundle.
|
|
12
|
+
|
|
13
|
+
This dispatcher is installed at `.agents/skills/dev-studio/SKILL.md`. Its sibling
|
|
14
|
+
pack is at `.agents/skills/pack-dev-studio/SKILL.md`. In the BMAD+ source checkout,
|
|
15
|
+
read `src/bmad-plus/packs/pack-dev-studio/SKILL.md` instead; the source and installed
|
|
16
|
+
layouts intentionally differ.
|
|
17
|
+
|
|
18
|
+
If the pack is absent, report the missing Dev Studio installation. Do not invent
|
|
19
|
+
routes or treat a dispatcher without its resource files as an executable pack.
|
package/tools/bmad-plus-npx.js
CHANGED
|
@@ -21,8 +21,10 @@ if (isNpxExecution) {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
try {
|
|
24
|
-
const result = spawnSync(
|
|
25
|
-
if (result.
|
|
24
|
+
const result = spawnSync(process.execPath, [cliPath, ...args], { stdio: 'inherit' });
|
|
25
|
+
if (result.error) console.error(`Error: Could not launch BMAD+: ${result.error.message}`);
|
|
26
|
+
if (result.error || result.signal || result.status === null) process.exit(1);
|
|
27
|
+
if (result.status !== 0) process.exit(result.status || 1);
|
|
26
28
|
} catch (error) {
|
|
27
29
|
process.exit(error.status || 1);
|
|
28
30
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* hand-written instruction they contained was folded into THIS file — the UNION
|
|
7
7
|
* of all three pre-adoption root files, nothing dropped:
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Agent personas now live in registry.yaml; only repository-specific prose is here.
|
|
10
10
|
* - Skills paths (installed `.agents/` layout AND repo `src/bmad-plus/` layout)
|
|
11
11
|
* - Project Structure — from GEMINI/AGENTS
|
|
12
12
|
* - Communication (user name + language policy) — from CLAUDE
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*
|
|
24
24
|
* Numbers policy: NO counts are hand-typed here (they drift — see audit DOC-06).
|
|
25
25
|
* All counts live in the generated "Registry facts" section, derived from
|
|
26
|
-
* registry.yaml.
|
|
26
|
+
* registry.yaml. Agent personas and their pack membership live there too.
|
|
27
27
|
*
|
|
28
28
|
* Author: Laurent Rochetta
|
|
29
29
|
*/
|
|
@@ -34,54 +34,7 @@
|
|
|
34
34
|
* Markdown lines (LF-joined by the generator). Headings are `##` level so the
|
|
35
35
|
* block nests directly under each generated file's H1.
|
|
36
36
|
*/
|
|
37
|
-
const
|
|
38
|
-
'## Agents',
|
|
39
|
-
'',
|
|
40
|
-
'To activate an agent, say its name or persona:',
|
|
41
|
-
'',
|
|
42
|
-
'- **Atlas** (Strategist) — Business analysis + Product management',
|
|
43
|
-
'- **Forge** (Architect-Dev) — Architecture + Development + Documentation',
|
|
44
|
-
'- **Sentinel** (Quality) — QA + UX review',
|
|
45
|
-
'- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution',
|
|
46
|
-
'- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (if OSINT pack installed)',
|
|
47
|
-
'- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents',
|
|
48
|
-
'- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (derived counts: see Registry facts below)',
|
|
49
|
-
'- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)',
|
|
50
|
-
'- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)',
|
|
51
|
-
'- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)',
|
|
52
|
-
'- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)',
|
|
53
|
-
'- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)',
|
|
54
|
-
'- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)',
|
|
55
|
-
'- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs',
|
|
56
|
-
'',
|
|
57
|
-
'## Skills',
|
|
58
|
-
'',
|
|
59
|
-
'- Installed projects load skills from `.agents/skills/`; in this repository the sources live in `src/bmad-plus/skills/` and `src/bmad-plus/agents/`.',
|
|
60
|
-
'- Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules.',
|
|
61
|
-
'- Auto-activation triggers: `.agents/data/role-triggers.yaml` (source: `src/bmad-plus/data/role-triggers.yaml`).',
|
|
62
|
-
'',
|
|
63
|
-
'## Project Structure',
|
|
64
|
-
'',
|
|
65
|
-
'- `src/bmad-plus/` — Custom module (agents, skills, data)',
|
|
66
|
-
'- `monitor/` — Upstream monitoring system (VPS)',
|
|
67
|
-
'- `mcp-server/` — Audit 360° MCP Server',
|
|
68
|
-
'- `osint-agent-package/` — OSINT package',
|
|
69
|
-
'- `upstream/` — BMAD-METHOD reference clone',
|
|
70
|
-
'',
|
|
71
|
-
'## Communication',
|
|
72
|
-
'',
|
|
73
|
-
'- User name: laurent',
|
|
74
|
-
'- Default language: Français for user-facing content, English for code and technical docs.',
|
|
75
|
-
'',
|
|
76
|
-
'## Commit Rules',
|
|
77
|
-
'',
|
|
78
|
-
'- NEVER add "Co-Authored-By: Claude" or any AI co-author attribution.',
|
|
79
|
-
'- The sole author is Laurent Rochetta.',
|
|
80
|
-
'',
|
|
81
|
-
'## Repository Maintenance Rule',
|
|
82
|
-
'',
|
|
83
|
-
'When updating the main README.md (English), you MUST synchronously update all translations in the readme-international/ directory (fr, es, de).',
|
|
84
|
-
'',
|
|
37
|
+
const MEMORY_INSTRUCTIONS = [
|
|
85
38
|
'## Memory Protocol (Karpathy Guardrails)',
|
|
86
39
|
'',
|
|
87
40
|
'Agents MUST follow these behavioral principles:',
|
|
@@ -114,4 +67,60 @@ const PROJECT_INSTRUCTIONS = [
|
|
|
114
67
|
'- `.agents/memory/context.md` — Update at session end with project state',
|
|
115
68
|
];
|
|
116
69
|
|
|
117
|
-
|
|
70
|
+
/** Shared once-per-session update instruction for source and installed projects. */
|
|
71
|
+
const UPDATE_INSTRUCTIONS = [
|
|
72
|
+
'## Framework updates',
|
|
73
|
+
'',
|
|
74
|
+
'Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.',
|
|
75
|
+
'If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.',
|
|
76
|
+
'When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.',
|
|
77
|
+
'When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.',
|
|
78
|
+
'After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.',
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
const PROJECT_INSTRUCTIONS = [
|
|
82
|
+
'## Skills',
|
|
83
|
+
'',
|
|
84
|
+
'- Installed projects load skills from `.agents/skills/`; in this repository the sources live in `src/bmad-plus/skills/` and `src/bmad-plus/agents/`.',
|
|
85
|
+
'- Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules.',
|
|
86
|
+
'- Auto-activation triggers: `.agents/data/role-triggers.yaml` (source: `src/bmad-plus/data/role-triggers.yaml`).',
|
|
87
|
+
'',
|
|
88
|
+
'## Project Structure',
|
|
89
|
+
'',
|
|
90
|
+
'- `src/bmad-plus/` — Custom module (agents, skills, data)',
|
|
91
|
+
'- `monitor/` — Upstream monitoring system (VPS)',
|
|
92
|
+
'- `mcp-server/` — Audit 360° MCP Server',
|
|
93
|
+
'- `osint-agent-package/` — OSINT package',
|
|
94
|
+
'- `upstream/` — BMAD-METHOD reference clone',
|
|
95
|
+
'',
|
|
96
|
+
'## Communication',
|
|
97
|
+
'',
|
|
98
|
+
'- User name: laurent',
|
|
99
|
+
'- Default language: Français for user-facing content, English for code and technical docs.',
|
|
100
|
+
'',
|
|
101
|
+
'## Commit Rules',
|
|
102
|
+
'',
|
|
103
|
+
'- NEVER add "Co-Authored-By: Claude" or any AI co-author attribution.',
|
|
104
|
+
'- The sole author is Laurent Rochetta.',
|
|
105
|
+
'',
|
|
106
|
+
'## Repository Maintenance Rule',
|
|
107
|
+
'',
|
|
108
|
+
'When updating the main README.md (English), you MUST synchronously update all translations in the readme-international/ directory (fr, es, de).',
|
|
109
|
+
'',
|
|
110
|
+
...MEMORY_INSTRUCTIONS,
|
|
111
|
+
'',
|
|
112
|
+
...UPDATE_INSTRUCTIONS,
|
|
113
|
+
];
|
|
114
|
+
|
|
115
|
+
/** Tool display/detection metadata; installable tools and paths come from DERIVED. */
|
|
116
|
+
const TOOL_METADATA = {
|
|
117
|
+
'claude-code': { name: 'Claude Code', detect: ['.claude'] },
|
|
118
|
+
'gemini-cli': { name: 'Gemini CLI', detect: ['.gemini'] },
|
|
119
|
+
antigravity: { name: 'Antigravity', detect: ['.gemini/antigravity'] },
|
|
120
|
+
cursor: { name: 'Cursor', detect: ['.cursor'] },
|
|
121
|
+
'codex-cli': { name: 'Codex CLI', detect: ['.codex'] },
|
|
122
|
+
opencode: { name: 'OpenCode', detect: ['.opencode'] },
|
|
123
|
+
aider: { name: 'Aider', detect: ['.aider.conf.yml'] },
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
module.exports = { PROJECT_INSTRUCTIONS, MEMORY_INSTRUCTIONS, UPDATE_INSTRUCTIONS, TOOL_METADATA };
|