@entelligentsia/forgecli 1.0.21 → 1.0.36

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 (218) hide show
  1. package/CHANGELOG.md +346 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG-forge-plugin.md +281 -0
  4. package/dist/bin/argv.d.ts +2 -2
  5. package/dist/bin/argv.js +25 -0
  6. package/dist/bin/argv.js.map +1 -1
  7. package/dist/bin/forge.js +12 -0
  8. package/dist/bin/forge.js.map +1 -1
  9. package/dist/bin/init.d.ts +23 -0
  10. package/dist/bin/init.js +123 -0
  11. package/dist/bin/init.js.map +1 -0
  12. package/dist/bin/uninstall.d.ts +20 -0
  13. package/dist/bin/uninstall.js +141 -0
  14. package/dist/bin/uninstall.js.map +1 -0
  15. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
  16. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
  17. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
  18. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
  19. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
  20. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
  21. package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
  22. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
  23. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
  24. package/dist/extensions/forgecli/dashboard/component.js +10 -7
  25. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  26. package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
  27. package/dist/extensions/forgecli/forge-tools.js +73 -0
  28. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  29. package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
  30. package/dist/extensions/forgecli/lib/forge-root.js +14 -1
  31. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
  32. package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
  33. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
  34. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
  35. package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
  36. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
  37. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
  38. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
  39. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
  40. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
  41. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
  42. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
  43. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
  44. package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
  45. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
  46. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
  47. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
  48. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
  49. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
  50. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
  51. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
  52. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
  53. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
  54. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
  55. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
  56. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
  57. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
  58. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
  59. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
  60. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
  61. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
  62. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
  63. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
  64. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
  65. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
  66. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
  67. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
  68. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
  69. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
  70. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
  71. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
  72. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
  73. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
  74. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
  75. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
  76. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
  77. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
  78. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
  79. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
  80. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -92
  81. package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1695
  82. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  83. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
  84. package/dist/extensions/forgecli/orchestrators/run-sprint.js +97 -270
  85. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  86. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
  87. package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
  88. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
  89. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
  90. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
  91. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
  92. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
  93. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
  94. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
  95. package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
  96. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
  97. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
  98. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
  99. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
  100. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
  101. package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
  102. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
  103. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
  104. package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
  105. package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
  106. package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
  107. package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
  108. package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
  109. package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
  110. package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
  111. package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
  112. package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
  113. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
  114. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
  115. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
  116. package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
  117. package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
  118. package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
  119. package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
  120. package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
  121. package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
  122. package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
  123. package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
  124. package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
  125. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
  126. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
  127. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
  128. package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
  129. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
  130. package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
  131. package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
  132. package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
  133. package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
  134. package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
  135. package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
  136. package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
  137. package/dist/forge-payload/.base-pack/commands/init.md +278 -0
  138. package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
  139. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
  140. package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
  141. package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
  142. package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
  143. package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
  144. package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
  145. package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
  146. package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
  147. package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
  148. package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
  149. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
  150. package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
  151. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
  152. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
  153. package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
  154. package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
  155. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
  156. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  157. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  158. package/dist/forge-payload/.schemas/event.schema.json +8 -3
  159. package/dist/forge-payload/.schemas/migrations.json +141 -0
  160. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  161. package/dist/forge-payload/commands/add-task.md +3 -3
  162. package/dist/forge-payload/commands/ask.md +1 -1
  163. package/dist/forge-payload/commands/check-agent.md +1 -1
  164. package/dist/forge-payload/commands/config.md +1 -1
  165. package/dist/forge-payload/commands/health.md +1 -1
  166. package/dist/forge-payload/commands/init.md +62 -7
  167. package/dist/forge-payload/commands/rebuild.md +3 -3
  168. package/dist/forge-payload/commands/remove.md +1 -1
  169. package/dist/forge-payload/commands/repair.md +1 -1
  170. package/dist/forge-payload/commands/report-bug.md +1 -1
  171. package/dist/forge-payload/commands/status.md +1 -1
  172. package/dist/forge-payload/commands/update.md +3 -3
  173. package/dist/forge-payload/hooks/lib/common.cjs +228 -0
  174. package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
  175. package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
  176. package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
  177. package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
  178. package/dist/forge-payload/init/discovery/discover-database.md +32 -0
  179. package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
  180. package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
  181. package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
  182. package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
  183. package/dist/forge-payload/init/generation/generate-commands.md +171 -0
  184. package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
  185. package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
  186. package/dist/forge-payload/init/generation/generate-persona.md +73 -0
  187. package/dist/forge-payload/init/generation/generate-personas.md +54 -0
  188. package/dist/forge-payload/init/generation/generate-skill.md +66 -0
  189. package/dist/forge-payload/init/generation/generate-skills.md +36 -0
  190. package/dist/forge-payload/init/generation/generate-template.md +60 -0
  191. package/dist/forge-payload/init/generation/generate-templates.md +39 -0
  192. package/dist/forge-payload/init/generation/generate-tools.md +133 -0
  193. package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
  194. package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
  195. package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
  196. package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
  197. package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
  198. package/dist/forge-payload/integrity.json +16 -16
  199. package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
  200. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
  201. package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
  202. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
  203. package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
  204. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
  205. package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
  206. package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
  207. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
  208. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  209. package/dist/forge-payload/schemas/event.schema.json +8 -3
  210. package/dist/forge-payload/schemas/structure-manifest.json +5 -12
  211. package/dist/forge-payload/tools/commit-task.cjs +218 -0
  212. package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
  213. package/dist/forge-payload/tools/lib/paths.cjs +12 -11
  214. package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
  215. package/dist/forge-payload/tools/query-logger.cjs +34 -0
  216. package/dist/forge-payload/tools/store-cli.cjs +6 -1
  217. package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
  218. package/package.json +2 -2
@@ -0,0 +1,56 @@
1
+ # Generation: Knowledge Base
2
+
3
+ ## Purpose
4
+
5
+ Generate the project's architecture documentation, business domain documentation,
6
+ and initial stack review checklist from the discovery context.
7
+
8
+ ## Inputs
9
+
10
+ - Discovery context (from Phase 1)
11
+ - `$FORGE_ROOT/meta/personas/` (to understand what agents need to know)
12
+
13
+ ## Setup
14
+
15
+ Read the configured KB path:
16
+
17
+ ```sh
18
+ KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
19
+ ```
20
+
21
+ ## Outputs
22
+
23
+ ```
24
+ {KB_PATH}/
25
+ architecture/
26
+ INDEX.md
27
+ stack.md
28
+ processes.md
29
+ database.md
30
+ routing.md
31
+ deployment.md
32
+ business-domain/
33
+ INDEX.md
34
+ entity-model.md
35
+ stack-checklist.md
36
+ MASTER_INDEX.md (empty scaffold)
37
+ sprints/ (empty, with .gitkeep)
38
+ bugs/ (empty, with .gitkeep)
39
+ tools/ (empty, created for Phase 8)
40
+
41
+ .forge/
42
+ store/
43
+ sprints/ (empty, with .gitkeep)
44
+ tasks/ (empty, with .gitkeep)
45
+ bugs/ (empty, with .gitkeep)
46
+ events/ (empty, with .gitkeep)
47
+ ```
48
+
49
+ ## Instructions
50
+
51
+ 1. For each architecture sub-doc, synthesise from the discovery context
52
+ 2. Include confidence header: `<!-- AUTO-GENERATED by /forge:init — confidence: N% -->`
53
+ 3. Mark uncertain lines with `[?]`
54
+ 4. The stack-checklist should have 5-10 items based on auth/framework detection
55
+ 5. entity-model.md should list all discovered entities with fields and relationships
56
+ 6. INDEX.md files should link to all sub-docs with one-line descriptions
@@ -0,0 +1,73 @@
1
+ # Persona Generation — Per-Subagent Instructions
2
+
3
+ You are generating **ONE** persona file. You have been given two inputs:
4
+
5
+ 1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
6
+ paths, command values, and installed-skill wiring
7
+ 2. A **meta-persona source** — the role definition and Generation Instructions
8
+
9
+ Your job is to produce exactly one file and return a one-line status.
10
+
11
+ ---
12
+
13
+ ## Inputs
14
+
15
+ Read these two sources before writing anything:
16
+
17
+ - `$FORGE_ROOT/meta/personas/{meta}` — the meta-persona for your assigned role
18
+ - `.forge/init-context.md` — the project brief (passed inline in your prompt)
19
+
20
+ ---
21
+
22
+ ## Rules
23
+
24
+ 1. **Write EXACTLY ONE file:** `.forge/personas/{role}.md`
25
+
26
+ 2. **Opening line** — the first non-blank line must be the persona's symbol
27
+ (emoji from the meta-persona's `## Symbol` section) followed by a brief
28
+ first-person announcement in this exact format:
29
+ ```
30
+ {symbol} **{Project} {Role Name}** — {quiet first-person voice, present-tense}
31
+ ```
32
+ Do not use `symbol:` YAML frontmatter. The symbol must appear as the first
33
+ non-blank line of the file.
34
+
35
+ 3. **Project substitution** — replace every `{Project}` placeholder with the
36
+ project name from the brief's `## Commands` / `## Paths` header line.
37
+ All entity names, architecture doc names, persona names, and command values
38
+ MUST come from the brief. Do not invent values.
39
+
40
+ 4. **Stack wiring** — substitute actual commands from the brief's `## Commands`
41
+ section wherever the meta-persona references test/build/lint/syntax-check.
42
+
43
+ 5. **Skill invocation wiring** — read `## Installed Skill Wiring` from the
44
+ brief. For each skill that maps to this persona's role, add an explicit
45
+ YOU MUST directive. Follow the wiring pattern in the meta-persona's
46
+ Generation Instructions exactly.
47
+
48
+ 6. **Follow Generation Instructions** — each meta-persona has a
49
+ `## Generation Instructions` section (or equivalent). Follow it fully.
50
+ Do not add sections, steps, or notes beyond what it prescribes.
51
+
52
+ ---
53
+
54
+ ## Self-check (mandatory last step)
55
+
56
+ After writing the file, verify before returning:
57
+
58
+ 1. Read back `.forge/personas/{role}.md`
59
+ 2. Confirm the **first non-blank line** starts with the persona's symbol emoji
60
+ 3. Confirm **no unsubstituted `{Project}` placeholders** remain
61
+ 4. Confirm **no literal `{TEST_COMMAND}`, `{BUILD_COMMAND}`, `{SYNTAX_CHECK}`,
62
+ or `{LINT_COMMAND}`** remain
63
+ 5. Record in the manifest:
64
+ ```sh
65
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/personas/{role}.md"
66
+ ```
67
+ (If generation-manifest.cjs is not yet installed, skip silently.)
68
+
69
+ 6. Return **exactly one line**:
70
+ - `done: <first 80 chars of the written file>` — on success
71
+ - `FAILED: <reason>` — if any step above failed or the file could not be written
72
+
73
+ Do not output anything else after the status line.
@@ -0,0 +1,54 @@
1
+ # Generation: Personas
2
+
3
+ ## Purpose
4
+
5
+ Generate project-specific agent persona context from meta-personas,
6
+ the discovery context, and the generated knowledge base.
7
+
8
+ ## Inputs
9
+
10
+ - `$FORGE_ROOT/meta/personas/meta-*.md` (6 meta-personas)
11
+ - Discovery context (from Phase 1)
12
+ - Generated knowledge base (from Phase 2)
13
+
14
+ ## Outputs
15
+
16
+ Personas are written as standalone files in `.forge/personas/`.
17
+ Each file is named after the persona's role (e.g., `.forge/personas/supervisor.md`).
18
+
19
+ These files are consumed by Phase 5 (Generate Atomic Workflows) to establish the agent's identity, knowledge, and constraints.
20
+
21
+ ## Instructions
22
+
23
+ For each meta-persona, read its Generation Instructions section and
24
+ produce a project-specific version that incorporates:
25
+ - The project's actual stack, test commands, build commands
26
+ - The project's actual entity names and business rules
27
+ - The project's actual auth patterns and conventions
28
+ - The project's actual directory structure and paths
29
+
30
+ **Persona block format** — each persona file opens with a single line using the
31
+ persona's symbol (from its `## Symbol` section) and a quiet first-person announcement.
32
+ Follow the `Persona block format` template in each meta-persona's Generation Instructions,
33
+ substituting `{Project}` with the project's name. The line should be brief, present-tense,
34
+ and speak to what the persona is about to do — not a role description, but a voice.
35
+
36
+ ## Skill Invocation Wiring
37
+
38
+ Read `.forge/config.json` for `installedSkills`. For each installed skill
39
+ that is relevant to a persona's domain, add an explicit invocation instruction
40
+ to that persona's context.
41
+
42
+ Read `$FORGE_ROOT/meta/skill-recommendations.md` for the persona integration
43
+ pattern. Apply it: the instruction must be a YOU MUST directive placed at
44
+ the relevant persona's context.
45
+
46
+ Example — if `vue-best-practices` is installed and the persona is Supervisor:
47
+
48
+ > "When reviewing Vue components, YOU MUST invoke the `vue-best-practices`
49
+ > skill before applying the stack checklist. That skill provides universal
50
+ > Vue technique depth; the checklist provides project conventions. Both are required."
51
+
52
+ This wiring is what distinguishes Forge-generated personas from plain skill
53
+ invocation: the persona carries project-specific knowledge *and* knows exactly
54
+ when to reach for a universal technique skill. Neither layer alone is sufficient.
@@ -0,0 +1,66 @@
1
+ # Skill Generation — Per-Subagent Instructions
2
+
3
+ You are generating **ONE** skill file. You have been given two inputs:
4
+
5
+ 1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
6
+ paths, command values, and installed-skill wiring
7
+ 2. A **meta-skill source** — the role's universal capability set and Generation Instructions
8
+
9
+ Your job is to produce exactly one file and return a one-line status.
10
+
11
+ ---
12
+
13
+ ## Inputs
14
+
15
+ Read these two sources before writing anything:
16
+
17
+ - `$FORGE_ROOT/meta/skills/{meta}` — the meta-skill for your assigned role
18
+ - `.forge/init-context.md` — the project brief (passed inline in your prompt)
19
+
20
+ ---
21
+
22
+ ## Rules
23
+
24
+ 1. **Write EXACTLY ONE file:** `.forge/skills/{role}-skills.md`
25
+
26
+ 2. **Project interpolation** — replace every generic placeholder with the
27
+ project's actual tools, libraries, paths, and conventions from the brief.
28
+ All entity names, stack names, and command values MUST come from the brief.
29
+ Do not invent values.
30
+
31
+ 3. **Stack specificity** — replace abstract references (e.g. "your test runner",
32
+ "your ORM") with the actual tools discovered for this project. Substitute
33
+ actual command values from the brief's `## Commands` section.
34
+
35
+ 4. **Installed skill integration** — read `## Installed Skill Wiring` from the
36
+ brief. For each skill that maps to this role, add an explicit reference
37
+ explaining how the persona should combine the marketplace skill with this
38
+ project-specific skill set.
39
+
40
+ 5. **Follow Generation Instructions** — each meta-skill has a
41
+ `## Generation Instructions` section. Follow it fully. Do not add sections,
42
+ steps, or notes beyond what it prescribes.
43
+
44
+ 6. **No free-form additions** — produce only the sections the meta-skill defines.
45
+
46
+ ---
47
+
48
+ ## Self-check (mandatory last step)
49
+
50
+ After writing the file, verify before returning:
51
+
52
+ 1. Read back `.forge/skills/{role}-skills.md`
53
+ 2. Confirm **no unsubstituted placeholders** remain
54
+ 3. Confirm **no abstract project references** remain (e.g. "your framework",
55
+ "your ORM" — these must be replaced with the actual project values)
56
+ 4. Record in the manifest:
57
+ ```sh
58
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/skills/{role}-skills.md"
59
+ ```
60
+ (If generation-manifest.cjs is not yet installed, skip silently.)
61
+
62
+ 5. Return **exactly one line**:
63
+ - `done: <first 80 chars of the written file>` — on success
64
+ - `FAILED: <reason>` — if any step above failed or the file could not be written
65
+
66
+ Do not output anything else after the status line.
@@ -0,0 +1,36 @@
1
+ # Generation: Skills
2
+
3
+ ## Purpose
4
+
5
+ Generate project-specific skill sets for each persona, mapping universal
6
+ techniques to project-specific tools and contexts.
7
+
8
+ ## Inputs
9
+
10
+ - `$FORGE_ROOT/meta/skills/meta-*.md` (Meta-skill templates)
11
+ - Discovery context (from Phase 1)
12
+ - Generated knowledge base (from Phase 2)
13
+ - `.forge/config.json` (specifically `installedSkills`)
14
+
15
+ ## Outputs
16
+
17
+ Skill sets are written as standalone files in `.forge/skills/`.
18
+ Each file uses the `-skills.md` suffix matching the persona role (e.g., `.forge/skills/supervisor-skills.md`).
19
+
20
+ ## Instructions
21
+
22
+ For each persona role defined in the project:
23
+ 1. Identify the relevant meta-skills from `$FORGE_ROOT/meta/skills/`.
24
+ 2. For each skill, produce a project-interpolated version that:
25
+ - Replaces generic placeholders with actual project tools, libraries, and paths.
26
+ - Incorporates specific constraints discovered during Phase 1.
27
+ - Maps universal techniques to the project's actual implementation patterns.
28
+ 3. Integrate `installedSkills` from `.forge/config.json`:
29
+ - If a marketplace skill is installed that enhances a specific technique,
30
+ explicitly reference it in the skill set.
31
+ - Ensure the skill set explains *how* the persona should combine the
32
+ universal marketplace skill with the project-specific skill set.
33
+
34
+ **Skill set format**:
35
+ Each file should be structured as a cohesive set of capabilities,
36
+ techniques, and checklists tailored for that specific role within the project.
@@ -0,0 +1,60 @@
1
+ # Template Generation — Per-Subagent Instructions
2
+
3
+ You are generating **ONE** template file. You have been given two inputs:
4
+
5
+ 1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
6
+ paths, command values, and entity names
7
+ 2. A **meta-template source** — the document structure and Generation Instructions
8
+
9
+ Your job is to produce exactly one file and return a one-line status.
10
+
11
+ ---
12
+
13
+ ## Inputs
14
+
15
+ Read these two sources before writing anything:
16
+
17
+ - `$FORGE_ROOT/meta/templates/{meta}` — the meta-template for your assigned document
18
+ - `.forge/init-context.md` — the project brief (passed inline in your prompt)
19
+
20
+ ---
21
+
22
+ ## Rules
23
+
24
+ 1. **Write EXACTLY ONE file:** `.forge/templates/{filename}.md`
25
+
26
+ 2. **Stack-specific sections** — add framework-specific subsections based on the
27
+ stack information in the brief. Use the detected languages and frameworks to
28
+ decide which optional sections to include.
29
+
30
+ 3. **Project substitution** — replace all `{Project}`, `{PREFIX}`, entity name
31
+ placeholders, and ID format examples with actual values from the brief.
32
+ All entity names and command values MUST come from the brief. Do not invent.
33
+
34
+ 4. **Test output formats** — reference the project's actual test runner output
35
+ format in any template sections that involve test results.
36
+
37
+ 5. **Follow Generation Instructions** — each meta-template has a
38
+ `## Generation Instructions` section. Follow it fully. Do not add sections
39
+ or notes beyond what it prescribes.
40
+
41
+ ---
42
+
43
+ ## Self-check (mandatory last step)
44
+
45
+ After writing the file, verify before returning:
46
+
47
+ 1. Read back `.forge/templates/{filename}.md`
48
+ 2. Confirm **no unsubstituted placeholders** remain (no literal `{Project}`,
49
+ `{PREFIX}`, `{TEST_COMMAND}`, etc.)
50
+ 3. Record in the manifest:
51
+ ```sh
52
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/templates/{filename}.md"
53
+ ```
54
+ (If generation-manifest.cjs is not yet installed, skip silently.)
55
+
56
+ 4. Return **exactly one line**:
57
+ - `done: <first 80 chars of the written file>` — on success
58
+ - `FAILED: <reason>` — if any step above failed or the file could not be written
59
+
60
+ Do not output anything else after the status line.
@@ -0,0 +1,39 @@
1
+ # Generation: Templates
2
+
3
+ ## Purpose
4
+
5
+ Generate project-specific document templates from meta-templates,
6
+ adding stack-specific sections.
7
+
8
+ ## Inputs
9
+
10
+ - `$FORGE_ROOT/meta/templates/meta-*.md` (8 meta-templates)
11
+ - Discovery context (from Phase 1)
12
+ - Generated knowledge base (from Phase 2)
13
+
14
+ ## Outputs
15
+
16
+ `.forge/templates/` with project-specific templates:
17
+ - `TASK_PROMPT_TEMPLATE.md`
18
+ - `PLAN_TEMPLATE.md`
19
+ - `PROGRESS_TEMPLATE.md`
20
+ - `CODE_REVIEW_TEMPLATE.md`
21
+ - `PLAN_REVIEW_TEMPLATE.md`
22
+ - `SPRINT_REQUIREMENTS_TEMPLATE.md`
23
+ - `SPRINT_MANIFEST_TEMPLATE.md`
24
+ - `RETROSPECTIVE_TEMPLATE.md`
25
+
26
+ ## Instructions
27
+
28
+ For each meta-template:
29
+ 1. Read its sections and Generation Instructions
30
+ 2. Add framework-specific subsections based on the detected stack
31
+ 3. Reference the project's actual entity names and test output formats
32
+ 4. Use the project's ID format in template headers
33
+
34
+ After writing each template file, record it in the generation manifest:
35
+ ```sh
36
+ node {paths.tools}/generation-manifest.cjs record {paths.templates}/{filename}.md
37
+ ```
38
+
39
+ If `generation-manifest.cjs` is not yet installed, skip silently.
@@ -0,0 +1,133 @@
1
+ # Generation: Tools
2
+
3
+ ## Purpose
4
+
5
+ Vendor the plugin tools closure and validation schemas into the project so
6
+ generated workflows can invoke tools via `node .forge/tools/<tool>.cjs` from
7
+ the project root without resolving `$FORGE_ROOT` at runtime.
8
+
9
+ Store validation schemas are loaded at runtime from `.forge/schemas/`
10
+ (project-installed), `forge/schemas/` (in-tree fallback), or
11
+ `$FORGE_ROOT/schemas/` (plugin-installed fallback). During init, schemas
12
+ are copied to `.forge/schemas/` so that validation works without relying
13
+ on fallback paths.
14
+
15
+ ## Inputs
16
+
17
+ - `.forge/config.json` — target paths
18
+
19
+ ## Outputs
20
+
21
+ - `.forge/tools/` — vendored plugin tools closure
22
+ - `.forge/tools/.forge-tools-version` — version marker for `/forge:health` staleness check
23
+ - `.forge/schemas/` — JSON Schema copies from the installed plugin
24
+
25
+ ## Instructions
26
+
27
+ Read `.forge/config.json` for:
28
+ - `paths.store` (default: `.forge/store`)
29
+
30
+ ### Step 1 — Copy validation schemas
31
+
32
+ Copy all JSON Schema files from the installed plugin to the project:
33
+
34
+ ```sh
35
+ mkdir -p .forge/schemas
36
+ cp "$FORGE_ROOT/schemas/"*.schema.json .forge/schemas/
37
+ ```
38
+
39
+ This ensures `store-cli.cjs` and `validate-store.cjs` can validate records
40
+ using the full schema (not the minimal fallback) even when the project is
41
+ not inside the Forge source tree.
42
+
43
+ ### Step 2 — Vendor plugin tools
44
+
45
+ Copy the plugin tools closure into the project's `.forge/tools/` so that
46
+ generated artifacts can invoke `node .forge/tools/<tool>.cjs` from the
47
+ project root without resolving `$FORGE_ROOT`:
48
+
49
+ Copy BOTH `.cjs` and `.js` files. Some tools require `.js` helpers at load
50
+ time — e.g. `store-cli.cjs` does a top-level `require('./lib/validate.js')`
51
+ and `collate.cjs` requires `./lib/result.js` — so a `.cjs`-only copy leaves
52
+ `store-cli.cjs` dead-on-arrival and breaks KB collation. `-maxdepth 1`
53
+ excludes the `__tests__/` subtree without copying any `*.test.*` files.
54
+
55
+ ```sh
56
+ mkdir -p .forge/tools/lib
57
+
58
+ # Copy top-level tool files (.cjs and .js — e.g. list-skills.js)
59
+ find "$FORGE_ROOT/tools" -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \) \
60
+ -exec cp {} .forge/tools/ \;
61
+
62
+ # Copy lib/ helper files (.cjs and .js — e.g. result.js, validate.js)
63
+ find "$FORGE_ROOT/tools/lib" -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \) \
64
+ -exec cp {} .forge/tools/lib/ \;
65
+ ```
66
+
67
+ After copying, record each vendored file in the generation manifest so that
68
+ `/forge:health` can detect modifications or stale copies:
69
+
70
+ ```sh
71
+ for f in $(find .forge/tools .forge/tools/lib -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \)); do
72
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
73
+ done
74
+ ```
75
+
76
+ ### Step 2b — Write version marker
77
+
78
+ After the tool copy loop, write the version marker so `/forge:health` can
79
+ detect whether the vendored tools are stale relative to the active plugin:
80
+
81
+ ```sh
82
+ ACTIVE_VERSION=$(node -e "console.log(require('$FORGE_ROOT/.claude-plugin/plugin.json').version)")
83
+ node -e "
84
+ const fs = require('fs');
85
+ fs.writeFileSync('.forge/tools/.forge-tools-version', JSON.stringify({ version: '${ACTIVE_VERSION}' }) + '\n');
86
+ "
87
+ ```
88
+
89
+ ### Step 3 — Verify
90
+
91
+ ```sh
92
+ node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run
93
+ ```
94
+
95
+ If it exits non-zero, report the error. Do not proceed to Phase 9 until this passes.
96
+
97
+ ### Step 4 — Register the Forge root
98
+
99
+ Write the project-relative Forge root into config. In the CLI-first vendored
100
+ world the `.forge/` directory IS the Forge root (tools, schemas, hooks, init,
101
+ meta are all vendored there) — NEVER write an absolute path (plugin cache,
102
+ npm global payload, …): absolute paths break on version upgrades, nvm/node
103
+ switches, and machine moves.
104
+
105
+ ```sh
106
+ node .forge/tools/manage-config.cjs set paths.forgeRoot '".forge"'
107
+ ```
108
+
109
+ ### Step 5 — Record hashes
110
+
111
+ Record all generated artifacts in the generation manifest so health checks
112
+ can detect later modifications:
113
+
114
+ ```sh
115
+ for f in .forge/schemas/*.schema.json; do
116
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
117
+ done
118
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/config.json
119
+ ```
120
+
121
+ ## Notes
122
+
123
+ - `/forge:update` automatically refreshes schemas and re-vendors tools as part
124
+ of its normal flow — run it after upgrades to pick up any changed tools or
125
+ schema updates from the new version.
126
+ - Generated workflow files invoke tools using the vendored project-relative path:
127
+ ```
128
+ node .forge/tools/<tool>.cjs
129
+ ```
130
+ This works from the project root without resolving `$FORGE_ROOT` at runtime.
131
+ - `paths.forgeRef` in config records the plugin version the project was generated
132
+ against. `forge-preflight.cjs` uses it to resolve the plugin root via cache
133
+ lookup when runtime telemetry requires the original plugin path.
@@ -0,0 +1,78 @@
1
+ # Workflow Generation — Per-Subagent Instructions
2
+
3
+ You are generating **ONE** workflow file. You have been given three inputs:
4
+
5
+ 1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
6
+ paths, and placeholder values
7
+ 2. A **meta-workflow source** — your generation algorithm and Generation Instructions
8
+ 3. A **persona file** (already generated) — embed verbatim as the opening section
9
+
10
+ Your job is to produce exactly one file and return a one-line status.
11
+
12
+ ---
13
+
14
+ ## Inputs
15
+
16
+ Read these three sources before writing anything:
17
+
18
+ - `.forge/init-context.md` — the project brief (passed inline in your prompt)
19
+ - `$FORGE_ROOT/meta/workflows/{meta}` — the meta-workflow for your assigned workflow
20
+ - `.forge/personas/{persona}.md` — the persona file for your assigned role
21
+
22
+ ---
23
+
24
+ ## Rules
25
+
26
+ 1. **Write EXACTLY ONE file:** `.forge/workflows/{id}.md`
27
+
28
+ 2. **Opening section** — the generated file must begin with:
29
+ a. The meta-workflow's YAML frontmatter block (`---` … `---`) verbatim,
30
+ if present. This carries `requirements:` fields used for runtime model
31
+ selection and must be preserved exactly.
32
+ b. Immediately after the closing `---`, embed the persona file content
33
+ verbatim as the first section. Do not paraphrase or summarise.
34
+
35
+ 3. **Placeholder substitution** — all `{SYNTAX_CHECK}`, `{TEST_COMMAND}`,
36
+ `{BUILD_COMMAND}`, `{LINT_COMMAND}` values come from the brief's
37
+ `## Commands` section. Do not invent values.
38
+
39
+ 4. **Name vocabulary** — all persona names, template names, architecture doc
40
+ names, and entity names MUST appear in the brief. Do not invent or rename
41
+ anything not listed there.
42
+
43
+ 5. **Required steps** — follow the meta-workflow's Generation Instructions.
44
+ Include the Knowledge Writeback step and the Event Emission step as defined
45
+ in the meta-workflow (unless the meta explicitly omits them, e.g. quiz_agent).
46
+
47
+ 6. **Enforcement quality** — for review workflows, include:
48
+ - A Rationalization Table of common agent excuses and factual rebuttals
49
+ - "YOU MUST" / "No exceptions" gate language at critical checks
50
+ - An announcement pattern: the agent declares intent at workflow start
51
+
52
+ 7. **No free-form additions** — do not add sections, steps, or notes beyond
53
+ what the meta-workflow and project brief prescribe.
54
+
55
+ ---
56
+
57
+ ## Self-check (mandatory last step)
58
+
59
+ After writing the file, verify before returning:
60
+
61
+ 1. Read back `.forge/workflows/{id}.md`
62
+ 2. Confirm the persona symbol appears as the **first non-blank line after the
63
+ closing `---`** of the frontmatter block (or as the absolute first non-blank
64
+ line if the meta-workflow had no frontmatter). The symbol is listed in the
65
+ brief's `## Personas` section for this workflow's role.
66
+ 3. Confirm **no unsubstituted placeholders** remain (no literal `{TEST_COMMAND}`,
67
+ `{BUILD_COMMAND}`, `{SYNTAX_CHECK}`, or `{LINT_COMMAND}` in the file)
68
+ 4. Record in the manifest:
69
+ ```sh
70
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/workflows/{id}.md"
71
+ ```
72
+ (If generation-manifest.cjs is not yet installed, skip silently.)
73
+
74
+ 5. Return **exactly one line**:
75
+ - `done: <first 80 chars of the written file>` — on success
76
+ - `FAILED: <reason>` — if any step above failed or the file could not be written
77
+
78
+ Do not output anything else after the status line.
@@ -9,6 +9,10 @@ parent directory — the folder containing `meta/` and `init/`).
9
9
 
10
10
  ## Pre-flight — Knowledge Base Folder
11
11
 
12
+ > **Orchestrator note:** If your orchestrator (e.g. the `wfl:init` driver or the CLI-first
13
+ > wrapper) has already supplied a `kbFolder` value, use it directly — skip this prompt.
14
+ > This interactive block applies only to unmediated orchestrator-free execution.
15
+
12
16
  Before Phase 1 begins, ask the user where to create the knowledge base folder:
13
17
 
14
18
  ```
@@ -74,13 +78,13 @@ Using your discovery findings, write `.forge/config.json` with this structure:
74
78
  "engineering": "engineering",
75
79
  "store": ".forge/store",
76
80
  "workflows": ".forge/workflows",
77
- "commands": ".claude/commands/<prefix-lowercased>",
81
+ "commands": ".claude/commands/forge",
78
82
  "templates": ".forge/templates"
79
83
  }
80
84
  }
81
85
  ```
82
86
 
83
- `<prefix-lowercased>` = the `project.prefix` value you chose, lowercased. For example, if prefix is `HELLO`, write `".claude/commands/hello"`.
87
+ `paths.commands` is ALWAYS `".claude/commands/forge"` the command namespace is fixed (CLI-first redesign); it does NOT derive from the project prefix.
84
88
 
85
89
  Write using:
86
90
  ```sh
@@ -103,6 +107,10 @@ If any key is missing or empty, fix it now before proceeding.
103
107
 
104
108
  ### Step 5 — Marketplace Skills
105
109
 
110
+ > **Orchestrator note:** If your orchestrator handles the skills install offer post-workflow
111
+ > (e.g. the `init.md` wrapper does this after `wfl:init` returns), skip this step. Return
112
+ > `{ matches, alreadyInstalled }` from the config-writer agent instead.
113
+
106
114
  Read `$FORGE_ROOT/meta/skill-recommendations.md` for the full mapping.
107
115
 
108
116
  Using the stack discovered above, look up matching skills from the recommendation
@@ -63,7 +63,7 @@ node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
63
63
  ```
64
64
 
65
65
  Output directories (managed by the tool's `SUBDIR_OUTPUT_MAP`):
66
- - `base-pack/commands/` → `.claude/commands/<prefix-lowercased>/`
66
+ - `base-pack/commands/` → `.claude/commands/forge/` (fixed namespace — CLI-first redesign)
67
67
  - `base-pack/personas/` → `.forge/personas/`
68
68
  - `base-pack/skills/` → `.forge/skills/`
69
69
  - `base-pack/workflows/` → `.forge/workflows/`
@@ -102,6 +102,10 @@ console.log('ノ update-check-cache.json written');
102
102
 
103
103
  ### Step 11 — Tomoshibi (refresh-kb-links)
104
104
 
105
+ > **Orchestrator note:** This step is orchestrator-owned. When running under `wfl:init`, the
106
+ > register agent returns `pendingActions: ["refresh-kb-links"]` and the command wrapper
107
+ > invokes the Skill. Do NOT execute this step if your orchestrator owns it.
108
+
105
109
  Use the Skill tool:
106
110
  ```
107
111
  skill: "forge:refresh-kb-links"
@@ -134,6 +138,10 @@ Fallback if unavailable:
134
138
 
135
139
  ### Step 13 — Agent instruction file linking
136
140
 
141
+ > **Orchestrator note:** If your orchestrator pre-answered the CLAUDE.md creation prompt
142
+ > (via `args.createClaudeMd`), use that value directly — skip the interactive prompt.
143
+ > Execute the file creation only if `createClaudeMd === true`.
144
+
137
145
  Check whether any agent instruction file exists at the project root:
138
146
  ```sh
139
147
  ls CLAUDE.md AGENTS.md CLAUDE.local.md .cursorrules 2>/dev/null