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.
Files changed (127) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +96 -461
  3. package/package.json +12 -5
  4. package/readme-international/README.de.md +42 -9
  5. package/readme-international/README.es.md +43 -10
  6. package/readme-international/README.fr.md +42 -9
  7. package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -3
  8. package/src/bmad-plus/module.yaml +270 -220
  9. package/src/bmad-plus/packs/pack-dev-studio/README.md +133 -141
  10. package/src/bmad-plus/packs/pack-dev-studio/SKILL.md +49 -0
  11. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/analyst-agent.md +35 -60
  12. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/document-project.md +59 -59
  13. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/domain-research.md +55 -93
  14. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/market-research.md +58 -93
  15. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/prfaq.md +55 -132
  16. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/product-brief.md +63 -78
  17. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/tech-writer-agent.md +54 -69
  18. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/technical-research.md +54 -93
  19. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/architect-agent.md +32 -60
  20. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-architecture.md +67 -71
  21. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-epics-stories.md +61 -90
  22. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/generate-project-context.md +56 -78
  23. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/implementation-readiness.md +55 -88
  24. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01-init.md +20 -153
  25. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01b-continue.md +20 -173
  26. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-02-context.md +14 -220
  27. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-03-starter.md +20 -329
  28. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-04-decisions.md +15 -314
  29. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-05-patterns.md +15 -355
  30. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-06-structure.md +15 -375
  31. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-07-validation.md +14 -357
  32. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-08-complete.md +13 -78
  33. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/checkpoint-preview.md +52 -65
  34. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-01-gather-context.md +14 -81
  35. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-02-review.md +14 -31
  36. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-03-triage.md +14 -45
  37. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-04-present.md +13 -128
  38. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +61 -87
  39. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/correct-course.md +55 -298
  40. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/create-story.md +52 -426
  41. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-agent.md +48 -69
  42. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story-checklist.md +22 -80
  43. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story.md +60 -482
  44. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/investigate.md +50 -184
  45. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/qa-e2e-tests.md +57 -173
  46. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/quick-dev.md +56 -108
  47. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/retrospective.md +54 -1509
  48. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-planning.md +54 -296
  49. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-status.md +41 -283
  50. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-prd.md +58 -18
  51. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-ux-design.md +103 -72
  52. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/edit-prd.md +55 -27
  53. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/pm-agent.md +34 -60
  54. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/prd.md +46 -87
  55. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/steps/step-01-init.md +10 -0
  56. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/ux-designer-agent.md +30 -60
  57. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/validate-prd.md +57 -27
  58. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/advanced-elicitation.md +47 -138
  59. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/adversarial-review.md +48 -34
  60. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/bmad-help.md +51 -68
  61. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/brainstorming.md +46 -3
  62. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/customize.md +68 -109
  63. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/distillator.md +53 -174
  64. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/edge-case-hunter.md +39 -53
  65. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-prose.md +45 -83
  66. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-structure.md +45 -176
  67. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/index-docs.md +45 -63
  68. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/party-mode.md +53 -124
  69. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/shard-doc.md +44 -100
  70. package/src/bmad-plus/packs/pack-dev-studio/dev-studio-orchestrator.md +56 -116
  71. package/src/bmad-plus/packs/pack-dev-studio/shared/architecture-decision-template.md +49 -12
  72. package/src/bmad-plus/packs/pack-dev-studio/shared/bwml-spec.md +51 -328
  73. package/src/bmad-plus/packs/pack-dev-studio/shared/catalog.json +489 -0
  74. package/src/bmad-plus/packs/pack-dev-studio/shared/execution.md +69 -0
  75. package/src/bmad-plus/packs/pack-dev-studio/shared/module-help.csv +39 -32
  76. package/src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml +85 -14
  77. package/src/bmad-plus/packs/pack-memory/README.md +6 -0
  78. package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +12 -5
  79. package/src/bmad-plus/packs/pack-seo/SKILL.md +27 -1
  80. package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +8 -8
  81. package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +1 -2
  82. package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +0 -1
  83. package/src/bmad-plus/packs/pack-seo/seo-chief.md +16 -1
  84. package/src/bmad-plus/packs/pack-seo/seo-judge.md +12 -0
  85. package/src/bmad-plus/packs/pack-seo/seo-scout.md +12 -0
  86. package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +4 -4
  87. package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +5 -3
  88. package/src/bmad-plus/skills/dev-studio/SKILL.md +19 -0
  89. package/tools/bmad-plus-npx.js +4 -2
  90. package/tools/build/adapters.config.js +60 -51
  91. package/tools/build/check-counts.js +52 -54
  92. package/tools/build/check-install-contract.js +450 -0
  93. package/tools/build/generate-adapters.js +252 -56
  94. package/tools/build/generate.js +364 -14
  95. package/tools/build/generated-adapters/.codex/AGENTS.md +20 -7
  96. package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +20 -7
  97. package/tools/build/generated-adapters/.opencode/AGENTS.md +20 -7
  98. package/tools/build/generated-adapters/AGENTS.md +20 -7
  99. package/tools/build/generated-adapters/CLAUDE.md +20 -7
  100. package/tools/build/generated-adapters/CONVENTIONS.md +20 -7
  101. package/tools/build/generated-adapters/GEMINI.md +20 -7
  102. package/tools/build/module.template.yaml +82 -0
  103. package/tools/build/pack-delivery.js +78 -0
  104. package/tools/cli/bmad-plus-cli.js +16 -1
  105. package/tools/cli/commands/doctor.js +49 -217
  106. package/tools/cli/commands/install.js +109 -164
  107. package/tools/cli/commands/studio.js +68 -0
  108. package/tools/cli/commands/uninstall.js +173 -65
  109. package/tools/cli/commands/update-check.js +31 -0
  110. package/tools/cli/commands/update-policy.js +39 -0
  111. package/tools/cli/commands/update.js +102 -113
  112. package/tools/cli/i18n.js +60 -0
  113. package/tools/cli/lib/ide-config.js +4 -261
  114. package/tools/cli/lib/install-manifest.js +17 -0
  115. package/tools/cli/lib/installation-health.js +360 -0
  116. package/tools/cli/lib/installed-adapters.js +89 -0
  117. package/tools/cli/lib/npm-runner.js +177 -0
  118. package/tools/cli/lib/pack-copy.js +62 -66
  119. package/tools/cli/lib/packs.js +546 -3
  120. package/tools/cli/lib/python-health.js +233 -0
  121. package/tools/cli/lib/python-provision.js +2 -2
  122. package/tools/cli/lib/studio.js +310 -0
  123. package/tools/cli/lib/update-check.js +153 -0
  124. package/tools/cli/lib/update-dispatch.js +182 -0
  125. package/tools/cli/lib/update-policy.js +90 -0
  126. package/tools/cli/lib/update-transaction.js +334 -0
  127. package/tools/release/publication-content.js +901 -0
@@ -1,15 +1,41 @@
1
- # Pack Dev Studio upstream-sync.yaml
2
- # Tracks the source commit and version from BMAD-METHOD for future updates
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: "BMAD+ BWML (Workflow Markup Language)"
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
- removed_dependencies:
21
- - customize.toml (3-layer TOML config system)
22
- - resolve_customization.py (Python variable resolver)
23
- - resolve_config.py (Python config merger)
24
- - analyze_sources.py (Python source analyzer)
25
- - config.yaml (per-project config)
26
- added:
27
- - BWML specification (shared/bwml-spec.md)
28
- - Dev Studio orchestrator
29
- - Specialized persona naming
30
- - BMAD+ pack integration (module.yaml, CLI, i18n)
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 activates automatically when installed:
20
- - At session start: agents load project memory + global identity
21
- - During session: agents write decisions/lessons/patterns on trigger
22
- - At session end: session handoff is persisted
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 hooks
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(f"Running PageSpeed Insights (mobile)...", file=sys.stderr)
301
+ print("Running PageSpeed Insights (mobile)...", file=sys.stderr)
302
302
  psi_mobile = run_pagespeed(url, strategy="mobile")
303
303
 
304
- print(f"Running PageSpeed Insights (desktop)...", file=sys.stderr)
304
+ print("Running PageSpeed Insights (desktop)...", file=sys.stderr)
305
305
  psi_desktop = run_pagespeed(url, strategy="desktop")
306
306
 
307
- print(f"Running CrUX API...", file=sys.stderr)
307
+ print("Running CrUX API...", file=sys.stderr)
308
308
  crux = run_crux(url)
309
309
 
310
- print(f"Running Mobile-Friendly Test...", file=sys.stderr)
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(f"\n Core Web Vitals:")
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(f"\n Top Failing Audits:")
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(f"\n Top Opportunities:")
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(f"\n 📊 CrUX Field Data:")
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(f"\n--- Fetch Summary ---", file=sys.stderr)
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
- Each category is scored 0–100 based on the checklist pass rate:
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
- Checkpoints are configurable via `module.yaml`:
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): Pause execution, send WhatsApp notification, wait for user approval.
54
- - **notify_only** (🟡 INFO): Send notification, continue unless user intervenes.
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**: Send reminder after 24h, pause pipeline
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
- └─ Notifies via:
51
- └─ WhatsApp (Evolution API) or Email
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
- This skill is also called automatically by the VPS weekly cron job.
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.
@@ -21,8 +21,10 @@ if (isNpxExecution) {
21
21
  }
22
22
 
23
23
  try {
24
- const result = spawnSync('node', [cliPath, ...args], { stdio: 'inherit' });
25
- if (result.status !== 0) process.exit(result.status);
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
- * - Agents roster (personas + Hebrew names + pack qualifiers) from all three
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. That is why the Shield line below carries no agent count.
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 PROJECT_INSTRUCTIONS = [
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
- module.exports = { PROJECT_INSTRUCTIONS };
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 };