agile-context-engineering 0.2.2 → 0.5.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 (146) hide show
  1. package/.claude-plugin/plugin.json +10 -0
  2. package/CHANGELOG.md +82 -0
  3. package/README.md +27 -18
  4. package/agents/ace-product-owner.md +1 -1
  5. package/agents/ace-technical-application-architect.md +28 -0
  6. package/agents/ace-wiki-mapper.md +144 -29
  7. package/bin/install.js +67 -63
  8. package/hooks/ace-check-update.js +17 -9
  9. package/package.json +7 -5
  10. package/shared/lib/ace-core.js +308 -0
  11. package/shared/lib/ace-core.test.js +308 -0
  12. package/shared/lib/ace-github.js +753 -0
  13. package/shared/lib/ace-story.js +400 -0
  14. package/shared/lib/ace-story.test.js +250 -0
  15. package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
  16. package/skills/execute-story/SKILL.md +110 -0
  17. package/skills/execute-story/script.js +305 -0
  18. package/skills/execute-story/script.test.js +261 -0
  19. package/skills/execute-story/walkthrough-template.xml +255 -0
  20. package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +83 -9
  21. package/skills/help/SKILL.md +69 -0
  22. package/skills/help/script.js +318 -0
  23. package/skills/help/script.test.js +183 -0
  24. package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +8 -8
  25. package/skills/init-coding-standards/SKILL.md +72 -0
  26. package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +38 -0
  27. package/skills/init-coding-standards/script.js +59 -0
  28. package/skills/init-coding-standards/script.test.js +70 -0
  29. package/{agile-context-engineering/workflows/init-coding-standards.xml → skills/init-coding-standards/workflow.xml} +4 -9
  30. package/skills/map-cross-cutting/SKILL.md +89 -0
  31. package/skills/map-cross-cutting/workflow.xml +330 -0
  32. package/skills/map-guide/SKILL.md +89 -0
  33. package/skills/map-guide/workflow.xml +320 -0
  34. package/skills/map-pattern/SKILL.md +89 -0
  35. package/skills/map-pattern/workflow.xml +331 -0
  36. package/skills/map-story/SKILL.md +127 -0
  37. package/skills/map-story/templates/guide.xml +137 -0
  38. package/skills/map-story/templates/pattern.xml +159 -0
  39. package/skills/map-story/templates/system-cross-cutting.xml +197 -0
  40. package/skills/map-story/templates/walkthrough.xml +255 -0
  41. package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +258 -9
  42. package/skills/map-subsystem/SKILL.md +111 -0
  43. package/skills/map-subsystem/script.js +60 -0
  44. package/skills/map-subsystem/script.test.js +68 -0
  45. package/skills/map-subsystem/templates/decizions.xml +115 -0
  46. package/skills/map-subsystem/templates/guide.xml +137 -0
  47. package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/module-discovery.xml +3 -3
  48. package/skills/map-subsystem/templates/pattern.xml +159 -0
  49. package/skills/map-subsystem/templates/system-cross-cutting.xml +197 -0
  50. package/skills/map-subsystem/templates/system.xml +381 -0
  51. package/skills/map-subsystem/templates/walkthrough.xml +255 -0
  52. package/{agile-context-engineering/workflows/map-subsystem.xml → skills/map-subsystem/workflow.xml} +17 -21
  53. package/skills/map-sys-doc/SKILL.md +90 -0
  54. package/skills/map-sys-doc/system.xml +381 -0
  55. package/skills/map-sys-doc/workflow.xml +336 -0
  56. package/skills/map-system/SKILL.md +85 -0
  57. package/skills/map-system/script.js +84 -0
  58. package/skills/map-system/script.test.js +73 -0
  59. package/skills/map-system/templates/wiki-readme.xml +297 -0
  60. package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +11 -16
  61. package/skills/map-walkthrough/SKILL.md +92 -0
  62. package/skills/map-walkthrough/walkthrough.xml +255 -0
  63. package/skills/map-walkthrough/workflow.xml +457 -0
  64. package/skills/plan-backlog/SKILL.md +75 -0
  65. package/skills/plan-backlog/script.js +136 -0
  66. package/skills/plan-backlog/script.test.js +83 -0
  67. package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +13 -21
  68. package/skills/plan-feature/SKILL.md +76 -0
  69. package/skills/plan-feature/script.js +148 -0
  70. package/skills/plan-feature/script.test.js +80 -0
  71. package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +21 -29
  72. package/skills/plan-product-vision/SKILL.md +75 -0
  73. package/skills/plan-product-vision/script.js +60 -0
  74. package/skills/plan-product-vision/script.test.js +69 -0
  75. package/{agile-context-engineering/workflows/plan-product-vision.xml → skills/plan-product-vision/workflow.xml} +4 -9
  76. package/skills/plan-story/SKILL.md +116 -0
  77. package/skills/plan-story/script.js +326 -0
  78. package/skills/plan-story/script.test.js +240 -0
  79. package/skills/plan-story/story-template.xml +451 -0
  80. package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1285 -909
  81. package/skills/research-external-solution/SKILL.md +107 -0
  82. package/skills/research-external-solution/script.js +238 -0
  83. package/skills/research-external-solution/script.test.js +134 -0
  84. package/{agile-context-engineering/workflows/research-external-solution.xml → skills/research-external-solution/workflow.xml} +4 -6
  85. package/skills/research-integration-solution/SKILL.md +98 -0
  86. package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1 -0
  87. package/skills/research-integration-solution/script.js +231 -0
  88. package/skills/research-integration-solution/script.test.js +134 -0
  89. package/{agile-context-engineering/workflows/research-integration-solution.xml → skills/research-integration-solution/workflow.xml} +4 -5
  90. package/skills/research-story-wiki/SKILL.md +92 -0
  91. package/skills/research-story-wiki/script.js +231 -0
  92. package/skills/research-story-wiki/script.test.js +138 -0
  93. package/{agile-context-engineering/templates/product/story-wiki.xml → skills/research-story-wiki/story-wiki-template.xml} +4 -0
  94. package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +5 -6
  95. package/skills/research-technical-solution/SKILL.md +103 -0
  96. package/skills/research-technical-solution/script.js +231 -0
  97. package/skills/research-technical-solution/script.test.js +134 -0
  98. package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +4 -5
  99. package/skills/review-story/SKILL.md +100 -0
  100. package/skills/review-story/script.js +257 -0
  101. package/skills/review-story/script.test.js +169 -0
  102. package/skills/review-story/story-template.xml +451 -0
  103. package/{agile-context-engineering/workflows/review-story.xml → skills/review-story/workflow.xml} +1 -3
  104. package/skills/update/SKILL.md +53 -0
  105. package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +237 -207
  106. package/agile-context-engineering/src/ace-tools.js +0 -2881
  107. package/agile-context-engineering/src/ace-tools.test.js +0 -1089
  108. package/agile-context-engineering/templates/_command.md +0 -54
  109. package/agile-context-engineering/templates/_workflow.xml +0 -17
  110. package/agile-context-engineering/templates/config.json +0 -0
  111. package/agile-context-engineering/templates/product/integration-solution.xml +0 -0
  112. package/agile-context-engineering/templates/wiki/wiki-readme.xml +0 -276
  113. package/commands/ace/execute-story.md +0 -137
  114. package/commands/ace/help.md +0 -93
  115. package/commands/ace/init-coding-standards.md +0 -83
  116. package/commands/ace/map-story.md +0 -156
  117. package/commands/ace/map-subsystem.md +0 -138
  118. package/commands/ace/map-system.md +0 -92
  119. package/commands/ace/plan-backlog.md +0 -83
  120. package/commands/ace/plan-feature.md +0 -89
  121. package/commands/ace/plan-product-vision.md +0 -81
  122. package/commands/ace/plan-story.md +0 -145
  123. package/commands/ace/research-external-solution.md +0 -138
  124. package/commands/ace/research-integration-solution.md +0 -135
  125. package/commands/ace/research-story-wiki.md +0 -116
  126. package/commands/ace/research-technical-solution.md +0 -147
  127. package/commands/ace/review-story.md +0 -109
  128. package/commands/ace/update.md +0 -54
  129. /package/{agile-context-engineering → shared}/utils/questioning.xml +0 -0
  130. /package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +0 -0
  131. /package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +0 -0
  132. /package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +0 -0
  133. /package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +0 -0
  134. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +0 -0
  135. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +0 -0
  136. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +0 -0
  137. /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +0 -0
  138. /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +0 -0
  139. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +0 -0
  140. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +0 -0
  141. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +0 -0
  142. /package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +0 -0
  143. /package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +0 -0
  144. /package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +0 -0
  145. /package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +0 -0
  146. /package/{agile-context-engineering/templates/product/story-technical-solution.xml → skills/research-technical-solution/technical-solution-template.xml} +0 -0
@@ -29,11 +29,9 @@
29
29
  <step name="setup" order="1">
30
30
  **MANDATORY FIRST STEP — Execute environment detection before any user interaction:**
31
31
 
32
- ```bash
33
- INIT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js init plan-feature)
34
- ```
32
+ INIT is available from the preprocessed Environment Context above — do NOT re-run init.
35
33
 
36
- Parse JSON for: `product_owner_model`, `researcher_model`, `commit_docs`,
34
+ Parse INIT JSON for: `product_owner_model`, `researcher_model`, `commit_docs`,
37
35
  `has_product_vision`, `has_product_backlog`,
38
36
  `has_wiki_analysis`,
39
37
  `is_brownfield`, `is_greenfield`,
@@ -42,10 +40,7 @@
42
40
  `has_system_structure`, `has_testing_framework`, `has_git`, `has_gh_cli`,
43
41
  `github_project` (object: `enabled`, `gh_installed`, `repo`, `project_number`, `owner`).
44
42
 
45
- Also resolve the product owner model for spawning agents:
46
- ```bash
47
- PO_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-product-owner --raw)
48
- ```
43
+ PO_MODEL is available from INIT.product_owner_model do NOT re-run resolve-model.
49
44
 
50
45
  Display stage banner:
51
46
 
@@ -142,8 +137,8 @@
142
137
 
143
138
  Using `TARGET_FEATURE` (or user-described new feature), compute:
144
139
  ```bash
145
- EPIC_SLUG=$(node ~/.claude/agile-context-engineering/src/ace-tools.js generate-slug "{Epic ID}-{Epic Title}" --raw)
146
- FEATURE_SLUG=$(node ~/.claude/agile-context-engineering/src/ace-tools.js generate-slug "{Feature ID}-{Feature Title}" --raw)
140
+ EPIC_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Epic ID}-{Epic Title}" --raw)
141
+ FEATURE_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Feature ID}-{Feature Title}" --raw)
147
142
  ```
148
143
 
149
144
  Set `FEATURE_DIR = .ace/artifacts/product/{EPIC_SLUG}/{FEATURE_SLUG}`
@@ -153,7 +148,7 @@
153
148
 
154
149
  Check if `FEATURE_FILE` exists:
155
150
  ```bash
156
- EXISTING_FEATURE=$(node ~/.claude/agile-context-engineering/src/ace-tools.js verify-path-exists {FEATURE_FILE} --raw)
151
+ EXISTING_FEATURE=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_FILE} --raw)
157
152
  ```
158
153
 
159
154
  If exists: set `RUN_MODE = REFINE`
@@ -293,7 +288,7 @@
293
288
 
294
289
  Check if `{FEATURE_DIR}/relevant-wiki.md` exists:
295
290
  ```bash
296
- HAS_WIKI_RESEARCH=$(node ~/.claude/agile-context-engineering/src/ace-tools.js verify-path-exists {FEATURE_DIR}/relevant-wiki.md --raw)
291
+ HAS_WIKI_RESEARCH=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_DIR}/relevant-wiki.md --raw)
297
292
  ```
298
293
 
299
294
  If `HAS_WIKI_RESEARCH` is TRUE:
@@ -446,7 +441,7 @@
446
441
 
447
442
  Check if `{FEATURE_DIR}/relevant-code.md` exists:
448
443
  ```bash
449
- HAS_CODE_RESEARCH=$(node ~/.claude/agile-context-engineering/src/ace-tools.js verify-path-exists {FEATURE_DIR}/relevant-code.md --raw)
444
+ HAS_CODE_RESEARCH=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_DIR}/relevant-code.md --raw)
450
445
  ```
451
446
 
452
447
  If `HAS_CODE_RESEARCH` is TRUE:
@@ -490,10 +485,7 @@
490
485
  After the notification arrives, verify the file with `wc -l {FEATURE_DIR}/relevant-code.md`,
491
486
  then READ the file directly from disk using the Read tool. That is how you get the results.
492
487
 
493
- Resolve the researcher model:
494
- ```bash
495
- RESEARCHER_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-project-researcher --raw)
496
- ```
488
+ RESEARCHER_MODEL is available from INIT.researcher_model — do NOT re-run resolve-model.
497
489
 
498
490
  Task tool parameters:
499
491
  ```
@@ -505,7 +497,7 @@
505
497
 
506
498
  Prompt:
507
499
  ```
508
- First, read ~/.claude/agents/ace-project-researcher.md for your role and instructions.
500
+ You are the ace-project-researcher agent. Follow your agent instructions.
509
501
 
510
502
  **Feature context:**
511
503
  - Feature: {Feature ID} — {Feature Title}
@@ -894,7 +886,7 @@
894
886
  {paste the context brief here}
895
887
 
896
888
  **Instructions:**
897
- 1. Read the feature template: ~/.claude/agile-context-engineering/templates/product/feature.xml
889
+ 1. Read the feature template: ${CLAUDE_SKILL_DIR}/feature-template.xml
898
890
  2. Write `{FEATURE_FILE}` following the template structure exactly
899
891
  3. Include ALL sections: Header, Description, Benefit Hypothesis, Scope,
900
892
  Acceptance Criteria, [Existing Implementation if brownfield],
@@ -961,7 +953,7 @@
961
953
  prompt="You are an Agile Product Owner updating an existing feature specification.
962
954
 
963
955
  **Read the current feature:** `{FEATURE_FILE}`
964
- **Read the template for reference:** `~/.claude/agile-context-engineering/templates/product/feature.xml`
956
+ **Read the template for reference:** `${CLAUDE_SKILL_DIR}/feature-template.xml`
965
957
 
966
958
  **Changes to apply:**
967
959
  {paste the change brief here}
@@ -1005,7 +997,7 @@
1005
997
 
1006
998
  Compute story slugs:
1007
999
  ```bash
1008
- STORY_SLUG=$(node ~/.claude/agile-context-engineering/src/ace-tools.js generate-slug "{Story ID}-{Story Title}" --raw)
1000
+ STORY_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Story ID}-{Story Title}" --raw)
1009
1001
  ```
1010
1002
 
1011
1003
  For each story, check if the file already exists:
@@ -1025,7 +1017,7 @@
1025
1017
 
1026
1018
  File path pattern: `{FEATURE_DIR}/{story_slug}/{story_slug}.md`
1027
1019
  where story_slug = generate-slug of '{Story ID}-{Story Title}'
1028
- (use Bash: `node ~/.claude/agile-context-engineering/src/ace-tools.js generate-slug '{Story ID}-{Story Title}' --raw`)
1020
+ (use Bash: `node "${CLAUDE_SKILL_DIR}/script.js" generate-slug '{Story ID}-{Story Title}' --raw`)
1029
1021
 
1030
1022
  Each story gets its own subdirectory. Create the directory with `mkdir -p` before writing.
1031
1023
 
@@ -1094,7 +1086,7 @@
1094
1086
  - Insert in the correct epic's detail section, ordered by delivery sequence
1095
1087
  - Update the Epic Index table if needed (aggregate status change)
1096
1088
  - Maintain table formatting — pad ALL cells so | separators align vertically
1097
- - Read template for reference: ~/.claude/agile-context-engineering/templates/product/product-backlog.xml
1089
+ - Read template for reference: ${CLAUDE_SKILL_DIR}/../plan-backlog/product-backlog-template.xml
1098
1090
 
1099
1091
  Use Edit tool to modify in place. Return only a confirmation of what changed.",
1100
1092
  subagent_type="ace-product-owner",
@@ -1161,7 +1153,7 @@
1161
1153
  {user's requested changes}.
1162
1154
 
1163
1155
  **Rules:**
1164
- - Read the template for reference: ~/.claude/agile-context-engineering/templates/product/feature.xml
1156
+ - Read the template for reference: ${CLAUDE_SKILL_DIR}/feature-template.xml
1165
1157
  - Maintain all template formatting — especially table column alignment:
1166
1158
  pad cells with spaces so | separators align vertically across all rows
1167
1159
  - Keep Story IDs stable — do NOT renumber
@@ -1249,7 +1241,7 @@
1249
1241
  **Prerequisite — Resolve all field and type IDs (once, before creating any issues):**
1250
1242
 
1251
1243
  ```bash
1252
- GH_FIELDS=$(node ~/.claude/agile-context-engineering/src/ace-tools.js github resolve-fields repo={REPO} owner={OWNER} project={PROJECT_NUMBER})
1244
+ GH_FIELDS=$(node "${CLAUDE_SKILL_DIR}/script.js" resolve-fields repo={REPO} owner={OWNER} project={PROJECT_NUMBER})
1253
1245
  ```
1254
1246
 
1255
1247
  Parse the JSON response. Extract and cache:
@@ -1269,7 +1261,7 @@
1269
1261
  - If the parent epic has no GitHub issue (Link = "—"), warn user and skip parent assignment.
1270
1262
 
1271
1263
  ```bash
1272
- FEATURE_RESULT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js github create-issue \
1264
+ FEATURE_RESULT=$(node "${CLAUDE_SKILL_DIR}/script.js" create-issue \
1273
1265
  type=Feature \
1274
1266
  "title={Feature Title}" \
1275
1267
  body_file={FEATURE_FILE} \
@@ -1300,7 +1292,7 @@
1300
1292
  The feature file IS the body. 100% of `{FEATURE_FILE}` goes to GitHub as-is.
1301
1293
 
1302
1294
  ```bash
1303
- node ~/.claude/agile-context-engineering/src/ace-tools.js github update-issue \
1295
+ node "${CLAUDE_SKILL_DIR}/script.js" update-issue \
1304
1296
  number={feature_issue_number} \
1305
1297
  repo={REPO} \
1306
1298
  "title={Feature Title}" \
@@ -1322,7 +1314,7 @@
1322
1314
  goes to GitHub as-is. The story stub files were created in step 9c.
1323
1315
 
1324
1316
  ```bash
1325
- STORY_RESULT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js github create-issue \
1317
+ STORY_RESULT=$(node "${CLAUDE_SKILL_DIR}/script.js" create-issue \
1326
1318
  type=Story \
1327
1319
  "title={Story Title}" \
1328
1320
  body_file={FEATURE_DIR}/{STORY_SLUG}/{STORY_SLUG}.md \
@@ -1351,7 +1343,7 @@
1351
1343
  goes to GitHub as-is.
1352
1344
 
1353
1345
  ```bash
1354
- node ~/.claude/agile-context-engineering/src/ace-tools.js github update-issue \
1346
+ node "${CLAUDE_SKILL_DIR}/script.js" update-issue \
1355
1347
  number={story_issue_number} \
1356
1348
  repo={REPO} \
1357
1349
  "title={Story Title}" \
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: plan-product-vision
3
+ description: Create or update the product vision through architecture-aware questioning and guided writing
4
+ argument-hint: "[optional: context='PRD, specs, or notes to build on']"
5
+ disable-model-invocation: true
6
+ allowed-tools: Read, Bash, Write, Task, AskUserQuestion
7
+ model: opus
8
+ effort: high
9
+ ---
10
+
11
+ # Plan Product Vision
12
+
13
+ Create or update the product vision through architecture-aware questioning and guided writing.
14
+
15
+ ## When to Use
16
+
17
+ - During `/ace:help` — as part of initial project setup
18
+ - After `/ace:map-system` — once codebase is mapped, leverage architecture context
19
+ - Anytime — to create or refresh the product vision for a project
20
+ - Starting a new project and want to define the product vision (greenfield or brownfield)
21
+ - Existing product vision is outdated or missing
22
+ - System architecture has been mapped and you want to align vision with subsystem capabilities
23
+ - Pivoting the product direction and need to rewrite the vision
24
+
25
+ ## Input
26
+
27
+ ### Optional
28
+
29
+ - **`context`** — Existing PRD, specs, or notes to use as a starting point. Will be refined through the interview process, not used as-is.
30
+
31
+ ## Environment Context (preprocessed)
32
+
33
+ !`node "${CLAUDE_SKILL_DIR}/script.js" init "$ARGUMENTS" 2>/dev/null`
34
+
35
+ ## Supporting Resources
36
+
37
+ Read ALL of these before starting the workflow:
38
+
39
+ - **Workflow**: Read [workflow.xml](workflow.xml) — complete orchestration process with all steps
40
+ - **Product vision template**: Read [product-vision-template.xml](product-vision-template.xml) — output format for the product vision
41
+ - **Questioning guide**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml` — deep questioning techniques
42
+ - **UI formatting**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md` — ACE output formatting rules
43
+
44
+ ## Process
45
+
46
+ Use the `ace-product-owner` agent for requirements gathering, deep questioning, and vision specification.
47
+
48
+ The Environment Context above contains the preprocessed INIT JSON — use it directly instead of running the init script manually. The workflow's step 1 setup can skip the init bash call since that data is already available.
49
+
50
+ Read all supporting resources listed above, then execute the workflow defined in [workflow.xml](workflow.xml) end-to-end. Preserve all workflow gates (validation, approvals, commits).
51
+
52
+ ## Artifacts
53
+
54
+ ```
55
+ .docs/product/product-vision.md
56
+ ```
57
+
58
+ ## Example Usage
59
+
60
+ ```
61
+ # Create a new product vision from scratch
62
+ /ace:plan-product-vision
63
+
64
+ # Create vision with existing PRD as seed
65
+ /ace:plan-product-vision context="path/to/existing-prd.md"
66
+
67
+ # Update vision after architecture changes
68
+ /ace:plan-product-vision
69
+ ```
70
+
71
+ ## Next Steps
72
+
73
+ - `/ace:init-coding-standards` — Establish coding standards for the project
74
+ - `/ace:map-system` — Map codebase structure and architecture
75
+ - `/ace:help` — Check project initialization status and next steps
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * plan-product-vision skill script — Entry point for ace-tools operations
5
+ * needed by the plan-product-vision skill.
6
+ *
7
+ * Subcommands:
8
+ * init [args] Environment detection for plan-product-vision workflow
9
+ *
10
+ * Usage: node script.js <subcommand> [args] [--raw]
11
+ */
12
+
13
+ const {
14
+ loadConfig, pathExists, resolveModel,
15
+ detectBrownfieldStatus, output, error,
16
+ } = require('../../shared/lib/ace-core');
17
+
18
+ // ─── CLI Dispatch ────────────────────────────────────────────────────────────
19
+
20
+ const cwd = process.cwd();
21
+ const args = process.argv.slice(2);
22
+ const raw = args.includes('--raw');
23
+ const cmd = args[0];
24
+
25
+ switch (cmd) {
26
+ case 'init':
27
+ cmdInit(cwd, raw, args.slice(1).filter(a => a !== '--raw'));
28
+ break;
29
+ default:
30
+ error(`Unknown command: ${cmd}\nAvailable: init`);
31
+ }
32
+
33
+ // ─── Init: Plan Product Vision ──────────────────────────────────────────────
34
+
35
+ function cmdInit(cwd, raw) {
36
+ const config = loadConfig(cwd);
37
+ const brownfield = detectBrownfieldStatus(cwd);
38
+
39
+ const result = {
40
+ // Models
41
+ product_owner_model: resolveModel(cwd, 'ace-product-owner'),
42
+
43
+ // Config
44
+ commit_docs: config.commit_docs,
45
+
46
+ // Existing state
47
+ has_product_vision: pathExists(cwd, '.docs/product/product-vision.md'),
48
+
49
+ // Brownfield detection
50
+ ...brownfield,
51
+
52
+ // Architecture context
53
+ has_system_architecture: pathExists(cwd, '.docs/wiki/system-wide/system-architecture.md'),
54
+
55
+ // Git state
56
+ has_git: pathExists(cwd, '.git'),
57
+ };
58
+
59
+ output(result, raw);
60
+ }
@@ -0,0 +1,69 @@
1
+ const { describe, it, before, after } = require('node:test');
2
+ const assert = require('node:assert');
3
+ const { execSync } = require('child_process');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+ const os = require('os');
7
+
8
+ const SCRIPT = path.join(__dirname, 'script.js');
9
+
10
+ function createTestProject() {
11
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ace-test-'));
12
+
13
+ const aceDir = path.join(tmpDir, '.ace');
14
+ fs.mkdirSync(aceDir, { recursive: true });
15
+ fs.writeFileSync(path.join(aceDir, 'config.json'), JSON.stringify({
16
+ version: '0.1.0',
17
+ projectName: 'test-project',
18
+ model_profile: 'quality',
19
+ commit_docs: true,
20
+ github: { enabled: false },
21
+ }, null, 2));
22
+
23
+ return tmpDir;
24
+ }
25
+
26
+ function runScript(subcommand, args, cwd) {
27
+ return execSync(`node "${SCRIPT}" ${subcommand} ${args}`, {
28
+ cwd,
29
+ encoding: 'utf-8',
30
+ timeout: 10000,
31
+ });
32
+ }
33
+
34
+ function cleanup(tmpDir) {
35
+ fs.rmSync(tmpDir, { recursive: true, force: true });
36
+ }
37
+
38
+ describe('plan-product-vision script', () => {
39
+ it('errors on unknown command', () => {
40
+ assert.throws(() => {
41
+ execSync(`node "${SCRIPT}" bogus`, { encoding: 'utf-8', stdio: 'pipe' });
42
+ });
43
+ });
44
+
45
+ describe('init', () => {
46
+ let tmpDir;
47
+
48
+ before(() => { tmpDir = createTestProject(); });
49
+ after(() => { cleanup(tmpDir); });
50
+
51
+ it('init returns valid JSON', () => {
52
+ const result = JSON.parse(runScript('init', '', tmpDir));
53
+ assert.ok(typeof result === 'object');
54
+ assert.ok(result.product_owner_model, 'should have product_owner_model');
55
+ assert.strictEqual(typeof result.commit_docs, 'boolean');
56
+ assert.strictEqual(typeof result.has_git, 'boolean');
57
+ assert.strictEqual(typeof result.is_brownfield, 'boolean');
58
+ assert.strictEqual(typeof result.has_product_vision, 'boolean');
59
+ assert.strictEqual(typeof result.has_system_architecture, 'boolean');
60
+ });
61
+
62
+ it('returns brownfield detection fields', () => {
63
+ const result = JSON.parse(runScript('init', '', tmpDir));
64
+ assert.strictEqual(typeof result.is_brownfield, 'boolean');
65
+ assert.strictEqual(typeof result.is_greenfield, 'boolean');
66
+ assert.strictEqual(result.is_brownfield, !result.is_greenfield);
67
+ });
68
+ });
69
+ });
@@ -24,18 +24,13 @@
24
24
  <step name="setup" order="1">
25
25
  **MANDATORY FIRST STEP — Execute environment detection before any user interaction:**
26
26
 
27
- ```bash
28
- INIT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js init product-vision)
29
- ```
27
+ INIT is available from the preprocessed Environment Context above — do NOT re-run init.
30
28
 
31
- Parse JSON for: `product_owner_model`, `commit_docs`, `has_product_vision`,
29
+ Parse INIT JSON for: `product_owner_model`, `commit_docs`, `has_product_vision`,
32
30
  `is_brownfield`, `is_greenfield`, `has_existing_code`, `has_package_file`,
33
31
  `has_system_architecture`, `has_git`.
34
32
 
35
- Also resolve the product owner model for spawning the writing agent:
36
- ```bash
37
- PO_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-product-owner --raw)
38
- ```
33
+ PO_MODEL is available from INIT.product_owner_model do NOT re-run resolve-model.
39
34
 
40
35
  Display stage banner:
41
36
 
@@ -223,7 +218,7 @@
223
218
  {paste the context brief here}
224
219
 
225
220
  **Instructions:**
226
- 1. Read the product vision template: ~/.claude/agile-context-engineering/templates/product/product-vision.xml
221
+ 1. Read the product vision template: ${CLAUDE_SKILL_DIR}/product-vision-template.xml
227
222
  2. Write `.docs/product/product-vision.md` following the template structure and guidelines
228
223
  3. Do not compress — capture everything from the context brief
229
224
  4. Write the file using the Write tool
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: plan-story
3
+ description: Plan a story through deep questioning to create CRYSTAL-CLEAR acceptance criteria with ZERO assumptions, then dispatch wiki research, external analysis, integration analysis, and technical solution design. Use this whenever the user wants to plan a story, specify a story, create acceptance criteria, refine story requirements, or take a story stub and turn it into a full specification — whether from a feature stub, GitHub issue, inline text, or from scratch.
4
+ argument-hint: "[story=<file-path|github-url>] [text=<inline-description>] [external-codebase=<source-path|github-url>] [external-docs=<weblink|filepath>] [lib-docs=<weblinks-and-filepaths>]"
5
+ disable-model-invocation: true
6
+ allowed-tools: Read, Bash, Write, Edit, AskUserQuestion, Glob, Grep, Agent
7
+ model: opus
8
+ effort: high
9
+ ---
10
+
11
+ # Plan Story
12
+
13
+ Orchestrate story specification through deep questioning and multi-pass research.
14
+
15
+ ## When to Use
16
+
17
+ - After `/ace:plan-feature` — when a feature's story breakdown exists with stub story files
18
+ - To create or refine a story specification from a description or GitHub issue
19
+ - When a story stub needs formal INVEST-compliant specification
20
+ - When an existing story needs refinement due to scope changes or AC gaps
21
+ - When you have a new story idea (text or no input) and need it placed in the backlog
22
+
23
+ ## Input
24
+
25
+ ### Optional
26
+
27
+ - **`story`** — Story source:
28
+ - **File path**: Path to a markdown file containing the story seed (typically from plan-feature, or any markdown with a description)
29
+ - **GitHub URL or issue number**: e.g., `story=#95` or `story=https://github.com/owner/repo/issues/95`
30
+ - When omitted, enters "new story" mode and guides the user through backlog placement.
31
+
32
+ - **`text`** — Inline story description to seed the planning session. Used when no story file exists yet — the text becomes the initial description and the workflow asks where in the backlog this story belongs. Ignored if `story` is provided.
33
+
34
+ - **`external-codebase`** — Path or GitHub repo to an external system to analyze. Triggers pass 3 automatically.
35
+
36
+ - **`external-docs`** — Link or filepath to external system documentation. Only used with external-codebase.
37
+
38
+ - **`lib-docs`** — Space-separated weblinks and/or filepaths to library/API documentation. Injected into the Relevant Wiki section after pass 2.
39
+
40
+ ## Environment Context (preprocessed)
41
+
42
+ !`node "${CLAUDE_SKILL_DIR}/script.js" init "$ARGUMENTS" 2>/dev/null`
43
+
44
+ ## Supporting Resources
45
+
46
+ Read ALL of these before starting the workflow:
47
+
48
+ - **Workflow**: Read [workflow.xml](workflow.xml) — complete orchestration process with all steps
49
+ - **Story template**: Read [story-template.xml](story-template.xml) — output format for the story specification
50
+ - **Questioning guide**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml` — deep questioning techniques
51
+ - **UI formatting**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md` — ACE output formatting rules
52
+
53
+ ## Process
54
+
55
+ Use the `ace-product-owner` agent for requirements gathering, deep questioning, and story specification.
56
+
57
+ The Environment Context above contains the preprocessed INIT JSON — use it directly instead of running the init script manually. The workflow's step 1 setup can skip the init bash call since that data is already available.
58
+
59
+ Read all supporting resources listed above, then execute the workflow defined in [workflow.xml](workflow.xml) end-to-end. Preserve all workflow gates (validation, approvals, commits).
60
+
61
+ **Context Window Protection:**
62
+ Passes 2-5 run as background agents. Each agent writes output directly to files.
63
+ The orchestrator MUST NOT call TaskOutput on any background agent.
64
+ Only track when each pass finishes to start the next one.
65
+
66
+ **Pass execution order:**
67
+ Pass 2 + Pass 3 (if applicable) → wait → Pass 4 → wait → Pass 5 → wait → done
68
+
69
+ ## Artifacts
70
+
71
+ ```
72
+ .ace/artifacts/product/<epic>/<feature>/<story>/
73
+ ├── <story>.md # Story specification (passes 1, 2, 5)
74
+ ├── external-analysis.md # OPTIONAL (pass 3)
75
+ └── integration-analysis.md # Integration analysis (pass 4)
76
+ ```
77
+
78
+ ## Example Usage
79
+
80
+ ```
81
+ # New story from inline text — workflow asks for backlog placement
82
+ /ace:plan-story text="User can reset their password via email link"
83
+
84
+ # New story with no input — workflow asks title then placement
85
+ /ace:plan-story
86
+
87
+ # From a plan-feature stub file
88
+ /ace:plan-story story=.ace/artifacts/product/e1-auth/f3-oauth/s1-buttons/s1-buttons.md
89
+
90
+ # From a loose markdown file (no ACE structure yet — triggers placement flow)
91
+ /ace:plan-story story=notes/password-reset-idea.md
92
+
93
+ # From a GitHub issue
94
+ /ace:plan-story story=https://github.com/owner/repo/issues/95
95
+
96
+ # With external system analysis
97
+ /ace:plan-story \
98
+ story=.ace/artifacts/product/e1-charts/f2-rendering/s3-canvas/s3-canvas.md \
99
+ external-codebase=src/external/lightweight-charts/ \
100
+ external-docs=https://tradingview.github.io/lightweight-charts/
101
+
102
+ # With library documentation
103
+ /ace:plan-story \
104
+ story=.ace/artifacts/product/e1-charts/f2-rendering/s3-canvas/s3-canvas.md \
105
+ lib-docs="https://docs.some-lib.io/api src/vendor/some-lib/README.md"
106
+
107
+ # With just an issue number
108
+ /ace:plan-story story=#95
109
+ ```
110
+
111
+ ## Next Steps
112
+
113
+ - `/ace:execute-story story=...` — Execute the story implementation
114
+ - `/ace:plan-story story=...` — Plan the next story in the feature
115
+ - `/ace:verify-story story=...` — Verify a completed story
116
+ - `/ace:help` — Check project initialization status