ma-agents 3.13.2-skillname.0 → 3.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 (71) hide show
  1. package/README.md +1 -1
  2. package/lib/agents.js +13 -3
  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-extension/.claude-plugin/marketplace.json.template +1 -1
  47. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
  48. package/lib/bmad.js +6 -1
  49. package/lib/templates/instruction-block-git.template.md +25 -25
  50. package/lib/templates/instruction-block-onprem.template.md +86 -86
  51. package/lib/templates/instruction-block-universal.template.md +29 -29
  52. package/package.json +3 -3
  53. package/lib/.bmad-extension-plugin.build-37364-1782300865129/.claude-plugin/marketplace.json +0 -109
  54. package/lib/.bmad-extension-plugin.build-37364-1782300865129/skills/module-help.csv +0 -62
  55. package/lib/.bmad-extension-plugin.build-37364-1782300865129/skills/module.yaml +0 -20
  56. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
  57. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
  58. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/references/sample-init-sanctum.py +0 -274
  59. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -534
  60. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-execution-deps.py +0 -337
  61. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py +0 -425
  62. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-sanctum-architecture.py +0 -385
  63. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py +0 -482
  64. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +0 -29
  65. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +0 -115
  66. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +0 -184
  67. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +0 -171
  68. package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +0 -260
  69. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +0 -287
  70. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -588
  71. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py +0 -288
package/README.md CHANGED
@@ -166,7 +166,7 @@ Skills can be installed into any of these AI coding agents:
166
166
  |------|-------------|----------|------------------|
167
167
  | Claude Code | `.claude/skills/` | `claude-code` | `.claude/CLAUDE.md` |
168
168
  | Google Gemini | `.gemini/skills/` | `generic` | `.gemini/gemini.md` |
169
- | GitHub Copilot | `.github/skills/` | `generic` | `.github/copilot/copilot.md` |
169
+ | GitHub Copilot | `.agents/skills/` | `generic` | `.github/copilot-instructions.md` |
170
170
  | Cursor | `.cursor/skills/` | `generic` | `.cursor/cursor.md` |
171
171
  | Kilocode | `.kilocode/skills/` | `generic` | `.kilocode/kilocode.md` |
172
172
  | Cline | `.cline/skills/` | `cline` | `.cline/clinerules.md` |
package/lib/agents.js CHANGED
@@ -78,8 +78,11 @@ const agents = [
78
78
  // from their tool-specific directories to the shared `.agents/skills/`
79
79
  // tree (see platform-codes.yaml). Aligning here keeps the smoke verifier
80
80
  // and all downstream consumers in sync with BMAD's actual write target.
81
- // The instruction file path is unchanged `.github/copilot/copilot.md`
82
- // is still where Copilot reads custom-instructions.
81
+ // The skill-bootstrap instructions MUST live in `.github/copilot-instructions.md`
82
+ // — that is the only repository custom-instructions file GitHub Copilot reads
83
+ // (VS Code, Visual Studio, github.com; per the PRD agent table). The earlier
84
+ // `.github/copilot/copilot.md` path was never loaded by Copilot, so installed
85
+ // skills were invisible to it.
83
86
  skillsDir: '.agents/skills',
84
87
  getProjectPath: () => path.join(process.cwd(), '.agents', 'skills'),
85
88
  getGlobalPath: () => {
@@ -95,7 +98,7 @@ const agents = [
95
98
  fileExtension: '.md',
96
99
  template: 'generic',
97
100
  bmadPlatformCode: 'github-copilot',
98
- instructionFiles: ['.github/copilot/copilot.md'],
101
+ instructionFiles: ['.github/copilot-instructions.md'],
99
102
  injectionStrategy: { position: 'top', skipPatterns: ['---'] }
100
103
  },
101
104
  {
@@ -337,6 +340,13 @@ const agents = [
337
340
  instructionFiles: ['_bmad/bmm/agents/demerzel.md'],
338
341
  injectionStrategy: { position: 'top', skipPatterns: ['---'] }
339
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.
340
350
  ];
341
351
 
342
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():