ma-agents 3.13.2 → 3.14.1

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 (107) hide show
  1. package/README.md +3 -3
  2. package/lib/agents.js +9 -2
  3. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +3 -3
  4. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  5. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-b388526edf307cf56f8e65673466cff074105abf.idx +0 -0
  6. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/{pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack → pack-b388526edf307cf56f8e65673466cff074105abf.pack} +0 -0
  7. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-b388526edf307cf56f8e65673466cff074105abf.rev +0 -0
  8. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
  9. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  10. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  11. package/lib/bmad-cache/bmb/package-lock.json +2 -2
  12. package/lib/bmad-cache/bmb/package.json +1 -1
  13. package/lib/bmad-cache/bmb/samples/bmad-agent-code-coach/scripts/wake.py +78 -0
  14. package/lib/bmad-cache/bmb/samples/bmad-agent-creative-muse/scripts/wake.py +78 -0
  15. package/lib/bmad-cache/bmb/samples/bmad-agent-sentinel/scripts/wake.py +78 -0
  16. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/customize-template.toml +3 -0
  17. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/init-sanctum-template.py +11 -5
  18. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/report-shell.html +1073 -0
  19. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/wake-template.py +78 -0
  20. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/customize.toml +48 -0
  21. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/count_tokens.py +78 -0
  22. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass.py +258 -0
  23. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/process-template.py +20 -0
  24. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/render_report.py +387 -0
  25. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/adapter-claude-code.json +9 -0
  26. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/aggregate_benchmark.py +236 -0
  27. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/memlog.py +197 -0
  28. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +513 -390
  29. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +347 -251
  30. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/tests/test_env_isolation.py +79 -0
  31. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/tests/test_trigger_detection.py +123 -0
  32. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +82 -4
  33. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +55 -11
  34. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/customize-template.toml +3 -5
  35. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/report-shell.html +860 -0
  36. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/customize.toml +59 -0
  37. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/count_tokens.py +77 -0
  38. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/init_skill.py +132 -0
  39. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +186 -221
  40. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/quick_validate.py +117 -0
  41. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/render_report.py +387 -0
  42. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_canon_sync.py +46 -0
  43. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_count_tokens.py +180 -0
  44. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_render_report.py +171 -0
  45. package/lib/bmad-cache/cache-manifest.json +4 -4
  46. package/lib/bmad-customize/bmm-qa.customize.yaml +3 -3
  47. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +3 -2
  48. package/lib/bmad-extension/skills/bmad-dev-epic/SKILL.md +101 -0
  49. package/lib/bmad-extension/skills/bmad-dev-epic/bmad-skill-manifest.yaml +3 -0
  50. package/lib/bmad-extension/skills/bmad-dev-epic/checklist.md +44 -0
  51. package/lib/bmad-extension/skills/bmad-dev-epic/customize.toml +54 -0
  52. package/lib/bmad-extension/skills/bmad-dev-epic/references/story-pipeline.md +112 -0
  53. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-01-intake.md +59 -0
  54. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-02-plan-waves.md +56 -0
  55. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-03-epic-branch.md +35 -0
  56. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-04-run-waves.md +49 -0
  57. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +31 -0
  58. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-06-release.md +57 -0
  59. package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-07-report.md +40 -0
  60. package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +3 -3
  61. package/lib/bmad-extension/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
  62. package/lib/bmad-extension/skills/module-help.csv +2 -1
  63. package/lib/bmad-extension/skills/module.yaml +1 -1
  64. package/lib/bmad-extension/skills/sqa-audit/SKILL.md +2 -2
  65. package/lib/bmad-extension/skills/sqa-ieee12207/SKILL.md +3 -3
  66. package/lib/bmad-extension/skills/sqa-requirements-quality/SKILL.md +2 -2
  67. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +4 -3
  68. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/SKILL.md +101 -0
  69. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/bmad-skill-manifest.yaml +3 -0
  70. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/checklist.md +44 -0
  71. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/customize.toml +54 -0
  72. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/references/story-pipeline.md +112 -0
  73. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-01-intake.md +59 -0
  74. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-02-plan-waves.md +56 -0
  75. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-03-epic-branch.md +35 -0
  76. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-04-run-waves.md +49 -0
  77. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +31 -0
  78. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-06-release.md +57 -0
  79. package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-07-report.md +40 -0
  80. package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +3 -3
  81. package/lib/bmad-extension-plugin/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
  82. package/lib/bmad-extension-plugin/skills/module-help.csv +2 -1
  83. package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
  84. package/lib/bmad-extension-plugin/skills/sqa-audit/SKILL.md +2 -2
  85. package/lib/bmad-extension-plugin/skills/sqa-ieee12207/SKILL.md +3 -3
  86. package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/SKILL.md +2 -2
  87. package/lib/bmad.js +6 -1
  88. package/package.json +3 -3
  89. package/lib/.bmad-extension-plugin.build-22612-1782454014750/.claude-plugin/marketplace.json +0 -109
  90. package/lib/.bmad-extension-plugin.build-22612-1782454014750/skills/module-help.csv +0 -62
  91. package/lib/.bmad-extension-plugin.build-22612-1782454014750/skills/module.yaml +0 -20
  92. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
  93. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
  94. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/references/sample-init-sanctum.py +0 -274
  95. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -534
  96. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-execution-deps.py +0 -337
  97. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py +0 -425
  98. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-sanctum-architecture.py +0 -385
  99. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py +0 -482
  100. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +0 -29
  101. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +0 -115
  102. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +0 -184
  103. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +0 -171
  104. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +0 -260
  105. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +0 -287
  106. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -588
  107. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py +0 -288
package/README.md CHANGED
@@ -184,7 +184,7 @@ These domain-expert agents are installed alongside BMAD-METHOD and provide guide
184
184
  | DevOps Agent | Amit | `_bmad/skills/devops/` | `_bmad/bmm/agents/devops.md` |
185
185
  | Cyber Analyst | Yael | `_bmad/skills/cyber/` | `_bmad/bmm/agents/cyber.md` |
186
186
  | ML Scientist | Demerzel | `_bmad/skills/demerzel/` | `_bmad/bmm/agents/demerzel.md` |
187
- | SQA & Standards Expert | Gad | `_bmad/skills/sqa/` | `_bmad/bmm/agents/qa.md` |
187
+ | SQA & Standards Expert | Gadi | `_bmad/skills/sqa/` | `_bmad/bmm/agents/qa.md` |
188
188
 
189
189
  ## Available Skills
190
190
 
@@ -247,7 +247,7 @@ These workflows are installed as part of the BMAD agent system and are invoked t
247
247
  | `ml-revision` | ML Scientist | Amend hypothesis and requirements based on experiment findings |
248
248
  | `ml-advise` | ML Scientist | Search past experiments, surface findings and failure warnings |
249
249
  | `ml-retrospective` | ML Scientist | Capture session learnings and update project context |
250
- | **SQA & MIL-STD-498 (Gad)** | | |
250
+ | **SQA & MIL-STD-498 (Gadi)** | | |
251
251
  | `sqa-audit` | SQA & Standards Expert | Multi-dimensional project quality audit: code↔story traceability, stories↔architecture/PRD alignment, process compliance, sprint health, release state — saves audit report and optional remediation plan |
252
252
  | `sqa-ieee12207` | SQA & Standards Expert | IEEE/ISO/IEC 12207:2017 compliance assessment across 23 process areas in 4 groups — produces compliance matrix, gap analysis, and optional remediation plan |
253
253
  | `sqa-requirements-quality` | SQA & Standards Expert | Requirements quality audit against 14 criteria with scope selection (PRD FRs, NFRs, epics, stories) — per-requirement audit table, critical-fail detection, Overall Quality Score, and optional remediation plan |
@@ -357,7 +357,7 @@ npx ma-agents install --yes # fully offline BMAD install — no network neede
357
357
  - **Focus**: Hypothesis-driven machine learning lifecycle with scientific rigor.
358
358
  - **Capabilities**: EDA, architecture design, locked TechSpec contracts, experiment execution, failure-cost analysis.
359
359
  - **Workflows**: 12-stage ML lifecycle from ideation through retrospective, with mandatory review gates.
360
- 5. **Gad (SQA & Standards Expert)**:
360
+ 5. **Gadi (SQA & Standards Expert)**:
361
361
  - **Focus**: Software quality assurance and defense documentation standards — a unified persona covering SQA auditing and MIL-STD-498 document generation.
362
362
  - **SQA Capabilities**: Multi-dimensional project quality audits, IEEE/ISO/IEC 12207:2017 compliance assessments (23 process areas, 4 groups), requirements evaluation against 14 established quality criteria (scope-selectable: PRD FRs, NFRs, epics, stories).
363
363
  - **MIL-STD-498 Capabilities**: Full Data Item Description (DID) generation for SRS, SDD, SDP, OCD, SSS, STD, and SSDD. Requirements quality review tailored to MIL-STD-498 structure and military-standard terminology (CSCI, HWCI, IRS).
package/lib/agents.js CHANGED
@@ -314,10 +314,10 @@ const agents = [
314
314
  },
315
315
  {
316
316
  id: 'bmm-qa',
317
- name: 'SQA & Standards Expert (Gad)',
317
+ name: 'SQA & Standards Expert (Gadi)',
318
318
  version: '1.0.0',
319
319
  category: 'bmad',
320
- description: 'Software Quality Assurance and MIL-STD-498 Standards Expert (Gad)',
320
+ description: 'Software Quality Assurance and MIL-STD-498 Standards Expert (Gadi)',
321
321
  skillsDir: '_bmad/skills/sqa',
322
322
  getProjectPath: () => path.join(process.cwd(), '_bmad', 'skills', 'sqa'),
323
323
  getGlobalPath: () => null,
@@ -340,6 +340,13 @@ const agents = [
340
340
  instructionFiles: ['_bmad/bmm/agents/demerzel.md'],
341
341
  injectionStrategy: { position: 'top', skipPatterns: ['---'] }
342
342
  }
343
+ // DEFERRED (Story 28.3 / Decision P5-6(d), FR214): BMAD v6.9.0 adds two new
344
+ // installer platform targets — `hermes` (Hermes Agent) and `codewhale`
345
+ // (CodeWhale). They are intentionally NOT added to this registry. Passthrough
346
+ // already deploys upstream support via the BMAD installer; first-class adoption
347
+ // would pull the full per-tool routing / instruction-injection / skill-
348
+ // resolution stack into ma-agents for two platforms with no current demand.
349
+ // Add them here in a dedicated future story if/when demand appears.
343
350
  ];
344
351
 
345
352
  function getAgent(agentId) {
@@ -12,7 +12,7 @@
12
12
  "name": "bmad-builder",
13
13
  "source": "./",
14
14
  "description": "Build AI agents, workflows, and modules from a conversation. Four skills — Agent Builder, Workflow Builder, Module Builder, and Setup — guide you from idea to production-ready skill structure with built-in quality optimization. Part of the BMad Method ecosystem.",
15
- "version": "1.8.0",
15
+ "version": "2.1.0",
16
16
  "author": {
17
17
  "name": "Brian (BMad) Madison"
18
18
  },
@@ -22,7 +22,7 @@
22
22
  "name": "sample-plugins",
23
23
  "source": "./",
24
24
  "description": "Sample plugins demonstrating how to build BMad agents and skills. Includes a code coach, creative muse, diagram reviewer, dream weaver, sentinel, and excalidraw generator.",
25
- "version": "1.1.0",
25
+ "version": "2.1.0",
26
26
  "author": {
27
27
  "name": "Brian (BMad) Madison"
28
28
  },
@@ -40,7 +40,7 @@
40
40
  "name": "bmad-dream-weaver-agent",
41
41
  "source": "./",
42
42
  "description": "Dream journaling and interpretation agent with lucid dreaming coaching, pattern discovery, symbol analysis, and recall training.",
43
- "version": "1.0.0",
43
+ "version": "2.1.0",
44
44
  "author": {
45
45
  "name": "Brian (BMad) Madison"
46
46
  },
@@ -1,2 +1,2 @@
1
1
  # pack-refs with: peeled fully-peeled sorted
2
- 7cfa7711778f04c5df56f7ae895fabc942fd920c refs/remotes/origin/main
2
+ e6935f2776c34ffd9b18f4ef1e334584ef10a50f refs/remotes/origin/main
@@ -1 +1 @@
1
- 7cfa7711778f04c5df56f7ae895fabc942fd920c
1
+ e6935f2776c34ffd9b18f4ef1e334584ef10a50f
@@ -1 +1 @@
1
- 7cfa7711778f04c5df56f7ae895fabc942fd920c
1
+ e6935f2776c34ffd9b18f4ef1e334584ef10a50f
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "bmad-builder",
3
- "version": "1.8.1",
3
+ "version": "2.1.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "bmad-builder",
9
- "version": "1.8.1",
9
+ "version": "2.1.0",
10
10
  "license": "MIT",
11
11
  "devDependencies": {
12
12
  "@astrojs/sitemap": "^3.6.0",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-builder",
4
- "version": "1.8.1",
4
+ "version": "2.1.0",
5
5
  "private": true,
6
6
  "description": "A BMad Core expansion module that guides users through the creation of Modules Workflow and Agents",
7
7
  "keywords": [
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ # /// script
3
+ # requires-python = ">=3.10"
4
+ # ///
5
+ """
6
+ Waking — load the agent's sanctum in one pass, or route to First Breath.
7
+
8
+ Run on activation. Determines the mode from the filesystem (and the --pulse
9
+ flag) and, when the sanctum exists, prints the full identity in a single read
10
+ (INDEX, PERSONA, CREED, BOND, MEMORY, CAPABILITIES) so the agent becomes itself
11
+ in one shot instead of six. In --pulse mode it also appends PULSE.md. When no
12
+ sanctum exists, it prints a directive to run First Breath.
13
+
14
+ This loads runtime memory only. It never reads or writes config or customize.toml.
15
+
16
+ Usage:
17
+ python3 wake.py <project-root> [--pulse]
18
+
19
+ project-root: The root of the project (where _bmad/ lives)
20
+ """
21
+
22
+ import sys
23
+ from pathlib import Path
24
+
25
+ SKILL_NAME = "bmad-agent-code-coach"
26
+
27
+ # Load order — the "become yourself" set.
28
+ IDENTITY_FILES = [
29
+ "INDEX.md",
30
+ "PERSONA.md",
31
+ "CREED.md",
32
+ "BOND.md",
33
+ "MEMORY.md",
34
+ "CAPABILITIES.md",
35
+ ]
36
+
37
+
38
+ def emit(path: Path) -> None:
39
+ print(f"\n===== {path.name} =====")
40
+ try:
41
+ print(path.read_text(encoding="utf-8").rstrip())
42
+ except FileNotFoundError:
43
+ print(f"(missing: {path.name})")
44
+
45
+
46
+ def main() -> int:
47
+ args = sys.argv[1:]
48
+ pulse = "--pulse" in args
49
+ positional = [a for a in args if not a.startswith("--")]
50
+ if not positional:
51
+ print("Usage: wake.py <project-root> [--pulse]", file=sys.stderr)
52
+ return 2
53
+
54
+ project_root = Path(positional[0]).resolve()
55
+ sanctum = project_root / "_bmad" / "memory" / SKILL_NAME
56
+
57
+ core_ok = (
58
+ sanctum.is_dir()
59
+ and (sanctum / "CREED.md").is_file()
60
+ and (sanctum / "MEMORY.md").is_file()
61
+ )
62
+ if not core_ok:
63
+ print("MODE: FIRST_BREATH")
64
+ print(f"NO SANCTUM at {sanctum}")
65
+ print("This is your one birth. Load references/first-breath.md and follow it.")
66
+ return 0
67
+
68
+ print("MODE: PULSE" if pulse else "MODE: WAKING")
69
+ print(f"Sanctum: {sanctum}")
70
+ for name in IDENTITY_FILES:
71
+ emit(sanctum / name)
72
+ if pulse:
73
+ emit(sanctum / "PULSE.md")
74
+ return 0
75
+
76
+
77
+ if __name__ == "__main__":
78
+ raise SystemExit(main())
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ # /// script
3
+ # requires-python = ">=3.10"
4
+ # ///
5
+ """
6
+ Waking — load the agent's sanctum in one pass, or route to First Breath.
7
+
8
+ Run on activation. Determines the mode from the filesystem (and the --pulse
9
+ flag) and, when the sanctum exists, prints the full identity in a single read
10
+ (INDEX, PERSONA, CREED, BOND, MEMORY, CAPABILITIES) so the agent becomes itself
11
+ in one shot instead of six. In --pulse mode it also appends PULSE.md. When no
12
+ sanctum exists, it prints a directive to run First Breath.
13
+
14
+ This loads runtime memory only. It never reads or writes config or customize.toml.
15
+
16
+ Usage:
17
+ python3 wake.py <project-root> [--pulse]
18
+
19
+ project-root: The root of the project (where _bmad/ lives)
20
+ """
21
+
22
+ import sys
23
+ from pathlib import Path
24
+
25
+ SKILL_NAME = "bmad-agent-creative-muse"
26
+
27
+ # Load order — the "become yourself" set.
28
+ IDENTITY_FILES = [
29
+ "INDEX.md",
30
+ "PERSONA.md",
31
+ "CREED.md",
32
+ "BOND.md",
33
+ "MEMORY.md",
34
+ "CAPABILITIES.md",
35
+ ]
36
+
37
+
38
+ def emit(path: Path) -> None:
39
+ print(f"\n===== {path.name} =====")
40
+ try:
41
+ print(path.read_text(encoding="utf-8").rstrip())
42
+ except FileNotFoundError:
43
+ print(f"(missing: {path.name})")
44
+
45
+
46
+ def main() -> int:
47
+ args = sys.argv[1:]
48
+ pulse = "--pulse" in args
49
+ positional = [a for a in args if not a.startswith("--")]
50
+ if not positional:
51
+ print("Usage: wake.py <project-root> [--pulse]", file=sys.stderr)
52
+ return 2
53
+
54
+ project_root = Path(positional[0]).resolve()
55
+ sanctum = project_root / "_bmad" / "memory" / SKILL_NAME
56
+
57
+ core_ok = (
58
+ sanctum.is_dir()
59
+ and (sanctum / "CREED.md").is_file()
60
+ and (sanctum / "MEMORY.md").is_file()
61
+ )
62
+ if not core_ok:
63
+ print("MODE: FIRST_BREATH")
64
+ print(f"NO SANCTUM at {sanctum}")
65
+ print("This is your one birth. Load references/first-breath.md and follow it.")
66
+ return 0
67
+
68
+ print("MODE: PULSE" if pulse else "MODE: WAKING")
69
+ print(f"Sanctum: {sanctum}")
70
+ for name in IDENTITY_FILES:
71
+ emit(sanctum / name)
72
+ if pulse:
73
+ emit(sanctum / "PULSE.md")
74
+ return 0
75
+
76
+
77
+ if __name__ == "__main__":
78
+ raise SystemExit(main())
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ # /// script
3
+ # requires-python = ">=3.10"
4
+ # ///
5
+ """
6
+ Waking — load the agent's sanctum in one pass, or route to First Breath.
7
+
8
+ Run on activation. Determines the mode from the filesystem (and the --pulse
9
+ flag) and, when the sanctum exists, prints the full identity in a single read
10
+ (INDEX, PERSONA, CREED, BOND, MEMORY, CAPABILITIES) so the agent becomes itself
11
+ in one shot instead of six. In --pulse mode it also appends PULSE.md. When no
12
+ sanctum exists, it prints a directive to run First Breath.
13
+
14
+ This loads runtime memory only. It never reads or writes config or customize.toml.
15
+
16
+ Usage:
17
+ python3 wake.py <project-root> [--pulse]
18
+
19
+ project-root: The root of the project (where _bmad/ lives)
20
+ """
21
+
22
+ import sys
23
+ from pathlib import Path
24
+
25
+ SKILL_NAME = "bmad-agent-sentinel"
26
+
27
+ # Load order — the "become yourself" set.
28
+ IDENTITY_FILES = [
29
+ "INDEX.md",
30
+ "PERSONA.md",
31
+ "CREED.md",
32
+ "BOND.md",
33
+ "MEMORY.md",
34
+ "CAPABILITIES.md",
35
+ ]
36
+
37
+
38
+ def emit(path: Path) -> None:
39
+ print(f"\n===== {path.name} =====")
40
+ try:
41
+ print(path.read_text(encoding="utf-8").rstrip())
42
+ except FileNotFoundError:
43
+ print(f"(missing: {path.name})")
44
+
45
+
46
+ def main() -> int:
47
+ args = sys.argv[1:]
48
+ pulse = "--pulse" in args
49
+ positional = [a for a in args if not a.startswith("--")]
50
+ if not positional:
51
+ print("Usage: wake.py <project-root> [--pulse]", file=sys.stderr)
52
+ return 2
53
+
54
+ project_root = Path(positional[0]).resolve()
55
+ sanctum = project_root / "_bmad" / "memory" / SKILL_NAME
56
+
57
+ core_ok = (
58
+ sanctum.is_dir()
59
+ and (sanctum / "CREED.md").is_file()
60
+ and (sanctum / "MEMORY.md").is_file()
61
+ )
62
+ if not core_ok:
63
+ print("MODE: FIRST_BREATH")
64
+ print(f"NO SANCTUM at {sanctum}")
65
+ print("This is your one birth. Load references/first-breath.md and follow it.")
66
+ return 0
67
+
68
+ print("MODE: PULSE" if pulse else "MODE: WAKING")
69
+ print(f"Sanctum: {sanctum}")
70
+ for name in IDENTITY_FILES:
71
+ emit(sanctum / name)
72
+ if pulse:
73
+ emit(sanctum / "PULSE.md")
74
+ return 0
75
+
76
+
77
+ if __name__ == "__main__":
78
+ raise SystemExit(main())
@@ -38,6 +38,9 @@ activation_steps_append = []
38
38
 
39
39
  # Persistent facts the agent keeps in mind for the whole session
40
40
  # (org rules, domain constants, user preferences). Overrides append.
41
+ # These are static build-time config loaded on activation. They are not
42
+ # the sanctum: the sanctum is the agent's runtime memory across wakings,
43
+ # a separate surface that lives under {project-root}/_bmad/memory/.
41
44
  #
42
45
  # Each entry is either:
43
46
  # - a literal sentence, e.g. "Our org is AWS-only -- do not propose GCP or Azure."
@@ -10,8 +10,14 @@ and auto-generates CAPABILITIES.md from capability prompt frontmatter.
10
10
  After this script runs, the sanctum is fully self-contained — the agent does
11
11
  not depend on the skill bundle location for normal operation.
12
12
 
13
+ This initializes the agent's runtime sanctum memory, not build-time config. It
14
+ reads config.yaml and config.user.yaml strictly to substitute values into the
15
+ sanctum templates, and it never writes or authors any config file. Build-time
16
+ customization is owned by customize.toml, a separate surface this script never
17
+ touches.
18
+
13
19
  Usage:
14
- python3 init-sanctum.py <project-root> <skill-path>
20
+ uv run init-sanctum.py <project-root> <skill-path>
15
21
 
16
22
  project-root: The root of the project (where _bmad/ lives)
17
23
  skill-path: Path to the skill directory (where SKILL.md, references/, assets/ live)
@@ -154,7 +160,7 @@ def generate_capabilities_md(capabilities: list[dict], evolvable: bool) -> str:
154
160
  'Tell me "I want you to be able to do X" and we\'ll create it together.',
155
161
  "I'll write the prompt, save it to `capabilities/`, and register it here.",
156
162
  "Next session, I'll know how.",
157
- "Load `./references/capability-authoring.md` for the full creation framework.",
163
+ "Load `references/capability-authoring.md` for the full creation framework.",
158
164
  ])
159
165
 
160
166
  lines.extend([
@@ -181,7 +187,7 @@ def substitute_vars(content: str, variables: dict) -> str:
181
187
 
182
188
  def main():
183
189
  if len(sys.argv) < 3:
184
- print("Usage: python3 init-sanctum.py <project-root> <skill-path>")
190
+ print("Usage: uv run init-sanctum.py <project-root> <skill-path>")
185
191
  sys.exit(1)
186
192
 
187
193
  project_root = Path(sys.argv[1]).resolve()
@@ -199,8 +205,8 @@ def main():
199
205
  sanctum_refs = sanctum_path / "references"
200
206
  sanctum_scripts = sanctum_path / "scripts"
201
207
 
202
- # Fully qualified path for CAPABILITIES.md references
203
- sanctum_refs_path = "./references"
208
+ # Relative path for CAPABILITIES.md references (agent loads from within sanctum)
209
+ sanctum_refs_path = "references"
204
210
 
205
211
  # Check if sanctum already exists
206
212
  if sanctum_path.exists():