@howlil/ez-agents 3.4.1 → 3.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 (162) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +84 -20
  3. package/agents/ez-observer-agent.md +260 -0
  4. package/agents/ez-release-agent.md +333 -0
  5. package/agents/ez-requirements-agent.md +377 -0
  6. package/agents/ez-scrum-master-agent.md +242 -0
  7. package/agents/ez-tech-lead-agent.md +267 -0
  8. package/bin/install.js +3221 -3230
  9. package/commands/ez/arch-review.md +102 -0
  10. package/commands/ez/execute-phase.md +11 -0
  11. package/commands/ez/export-session.md +79 -0
  12. package/commands/ez/gather-requirements.md +117 -0
  13. package/commands/ez/git-workflow.md +72 -0
  14. package/commands/ez/hotfix.md +120 -0
  15. package/commands/ez/import-session.md +82 -0
  16. package/commands/ez/join-discord.md +18 -18
  17. package/commands/ez/list-sessions.md +96 -0
  18. package/commands/ez/package-manager.md +316 -0
  19. package/commands/ez/plan-phase.md +9 -1
  20. package/commands/ez/preflight.md +79 -0
  21. package/commands/ez/progress.md +13 -1
  22. package/commands/ez/release.md +153 -0
  23. package/commands/ez/resume.md +107 -0
  24. package/commands/ez/standup.md +85 -0
  25. package/ez-agents/bin/ez-tools.cjs +1095 -716
  26. package/ez-agents/bin/lib/assistant-adapter.cjs +264 -264
  27. package/ez-agents/bin/lib/audit-exec.cjs +7 -2
  28. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  29. package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
  30. package/ez-agents/bin/lib/config.cjs +190 -190
  31. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  32. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  33. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  34. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  35. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  36. package/ez-agents/bin/lib/file-access.cjs +207 -0
  37. package/ez-agents/bin/lib/file-lock.cjs +236 -236
  38. package/ez-agents/bin/lib/frontmatter.cjs +299 -299
  39. package/ez-agents/bin/lib/fs-utils.cjs +153 -153
  40. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  41. package/ez-agents/bin/lib/git-utils.cjs +118 -0
  42. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  43. package/ez-agents/bin/lib/index.cjs +157 -113
  44. package/ez-agents/bin/lib/init.cjs +757 -757
  45. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  46. package/ez-agents/bin/lib/logger.cjs +124 -124
  47. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  48. package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
  49. package/ez-agents/bin/lib/milestone.cjs +241 -241
  50. package/ez-agents/bin/lib/model-provider.cjs +241 -241
  51. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  52. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  53. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  54. package/ez-agents/bin/lib/phase.cjs +925 -925
  55. package/ez-agents/bin/lib/planning-write.cjs +107 -107
  56. package/ez-agents/bin/lib/release-validator.cjs +614 -0
  57. package/ez-agents/bin/lib/retry.cjs +119 -119
  58. package/ez-agents/bin/lib/roadmap.cjs +306 -306
  59. package/ez-agents/bin/lib/safe-exec.cjs +128 -128
  60. package/ez-agents/bin/lib/safe-path.cjs +130 -130
  61. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  62. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  63. package/ez-agents/bin/lib/session-export.cjs +251 -0
  64. package/ez-agents/bin/lib/session-import.cjs +262 -0
  65. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  66. package/ez-agents/bin/lib/state.cjs +736 -736
  67. package/ez-agents/bin/lib/temp-file.cjs +239 -239
  68. package/ez-agents/bin/lib/template.cjs +223 -223
  69. package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
  70. package/ez-agents/bin/lib/test-graceful.cjs +93 -93
  71. package/ez-agents/bin/lib/test-logger.cjs +60 -60
  72. package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
  73. package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
  74. package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
  75. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  76. package/ez-agents/bin/lib/timeout-exec.cjs +63 -63
  77. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  78. package/ez-agents/bin/lib/verify.cjs +15 -1
  79. package/ez-agents/references/checkpoints.md +776 -776
  80. package/ez-agents/references/continuation-format.md +249 -249
  81. package/ez-agents/references/metrics-schema.md +118 -0
  82. package/ez-agents/references/planning-config.md +140 -0
  83. package/ez-agents/references/questioning.md +162 -162
  84. package/ez-agents/references/tdd.md +263 -263
  85. package/ez-agents/references/tier-strategy.md +103 -0
  86. package/ez-agents/templates/bdd-feature.md +173 -0
  87. package/ez-agents/templates/codebase/concerns.md +310 -310
  88. package/ez-agents/templates/codebase/conventions.md +307 -307
  89. package/ez-agents/templates/codebase/integrations.md +280 -280
  90. package/ez-agents/templates/codebase/stack.md +186 -186
  91. package/ez-agents/templates/codebase/testing.md +480 -480
  92. package/ez-agents/templates/config.json +37 -37
  93. package/ez-agents/templates/continue-here.md +78 -78
  94. package/ez-agents/templates/discussion.md +68 -0
  95. package/ez-agents/templates/incident-runbook.md +205 -0
  96. package/ez-agents/templates/milestone-archive.md +123 -123
  97. package/ez-agents/templates/milestone.md +115 -115
  98. package/ez-agents/templates/release-checklist.md +133 -0
  99. package/ez-agents/templates/requirements.md +231 -231
  100. package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
  101. package/ez-agents/templates/research-project/FEATURES.md +147 -147
  102. package/ez-agents/templates/research-project/PITFALLS.md +200 -200
  103. package/ez-agents/templates/research-project/STACK.md +120 -120
  104. package/ez-agents/templates/research-project/SUMMARY.md +170 -170
  105. package/ez-agents/templates/retrospective.md +54 -54
  106. package/ez-agents/templates/roadmap.md +202 -202
  107. package/ez-agents/templates/rollback-plan.md +201 -0
  108. package/ez-agents/templates/summary-minimal.md +41 -41
  109. package/ez-agents/templates/summary-standard.md +48 -48
  110. package/ez-agents/templates/summary.md +248 -248
  111. package/ez-agents/templates/user-setup.md +311 -311
  112. package/ez-agents/templates/verification-report.md +322 -322
  113. package/ez-agents/workflows/add-phase.md +112 -112
  114. package/ez-agents/workflows/add-tests.md +351 -351
  115. package/ez-agents/workflows/add-todo.md +158 -158
  116. package/ez-agents/workflows/arch-review.md +54 -0
  117. package/ez-agents/workflows/audit-milestone.md +332 -332
  118. package/ez-agents/workflows/autonomous.md +131 -30
  119. package/ez-agents/workflows/check-todos.md +177 -177
  120. package/ez-agents/workflows/cleanup.md +152 -152
  121. package/ez-agents/workflows/complete-milestone.md +766 -766
  122. package/ez-agents/workflows/diagnose-issues.md +219 -219
  123. package/ez-agents/workflows/discovery-phase.md +289 -289
  124. package/ez-agents/workflows/discuss-phase.md +762 -762
  125. package/ez-agents/workflows/execute-phase.md +513 -468
  126. package/ez-agents/workflows/execute-plan.md +483 -483
  127. package/ez-agents/workflows/export-session.md +255 -0
  128. package/ez-agents/workflows/gather-requirements.md +206 -0
  129. package/ez-agents/workflows/health.md +159 -159
  130. package/ez-agents/workflows/help.md +584 -492
  131. package/ez-agents/workflows/hotfix.md +291 -0
  132. package/ez-agents/workflows/import-session.md +303 -0
  133. package/ez-agents/workflows/insert-phase.md +130 -130
  134. package/ez-agents/workflows/list-phase-assumptions.md +178 -178
  135. package/ez-agents/workflows/map-codebase.md +316 -316
  136. package/ez-agents/workflows/new-milestone.md +339 -10
  137. package/ez-agents/workflows/new-project.md +293 -299
  138. package/ez-agents/workflows/node-repair.md +92 -92
  139. package/ez-agents/workflows/pause-work.md +122 -122
  140. package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
  141. package/ez-agents/workflows/plan-phase.md +673 -651
  142. package/ez-agents/workflows/progress.md +372 -382
  143. package/ez-agents/workflows/quick.md +610 -610
  144. package/ez-agents/workflows/release.md +253 -0
  145. package/ez-agents/workflows/remove-phase.md +155 -155
  146. package/ez-agents/workflows/research-phase.md +74 -74
  147. package/ez-agents/workflows/resume-project.md +307 -307
  148. package/ez-agents/workflows/resume-session.md +215 -0
  149. package/ez-agents/workflows/set-profile.md +81 -81
  150. package/ez-agents/workflows/settings.md +242 -242
  151. package/ez-agents/workflows/standup.md +64 -0
  152. package/ez-agents/workflows/stats.md +57 -57
  153. package/ez-agents/workflows/transition.md +544 -544
  154. package/ez-agents/workflows/ui-phase.md +290 -290
  155. package/ez-agents/workflows/ui-review.md +157 -157
  156. package/ez-agents/workflows/update.md +320 -320
  157. package/ez-agents/workflows/validate-phase.md +167 -167
  158. package/ez-agents/workflows/verify-phase.md +243 -243
  159. package/ez-agents/workflows/verify-work.md +584 -584
  160. package/package.json +10 -4
  161. package/scripts/build-hooks.js +43 -43
  162. package/scripts/run-tests.cjs +29 -29
@@ -1,6 +1,8 @@
1
1
  <purpose>
2
2
 
3
- Drive all remaining milestone phases autonomously. For each incomplete phase: discuss → plan → execute using Skill() flat invocations. Pauses only for explicit user decisions (grey area acceptance, blockers, validation requests). Re-reads ROADMAP.md after each phase to catch dynamically inserted phases.
3
+ Drive all remaining milestone phases autonomously. For each incomplete phase: discuss → plan → execute **ALL tasks in loop** using Skill() flat invocations. Pauses only for explicit user decisions (grey area acceptance, blockers, validation requests). Re-reads ROADMAP.md after each phase to catch dynamically inserted phases.
4
+
5
+ **Key:** Execute-phase loops through ALL task plans within a phase, not just the phase as a whole.
4
6
 
5
7
  </purpose>
6
8
 
@@ -86,12 +88,12 @@ Exit cleanly.
86
88
  ```
87
89
  ## Phase Plan
88
90
 
89
- | # | Phase | Status |
90
- |---|-------|--------|
91
- | 5 | Skill Scaffolding & Phase Discovery | In Progress |
92
- | 6 | Smart Discuss | Not Started |
93
- | 7 | Auto-Chain Refinements | Not Started |
94
- | 8 | Lifecycle Orchestration | Not Started |
91
+ | # | Phase | Status | Tasks |
92
+ |---|-------|--------|-------|
93
+ | 5 | Skill Scaffolding & Phase Discovery | In Progress | [count] |
94
+ | 6 | Smart Discuss | Not Started | [count] |
95
+ | 7 | Auto-Chain Refinements | Not Started | [count] |
96
+ | 8 | Lifecycle Orchestration | Not Started | [count] |
95
97
  ```
96
98
 
97
99
  **Fetch details for each phase:**
@@ -100,13 +102,13 @@ Exit cleanly.
100
102
  DETAIL=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap get-phase ${PHASE_NUM})
101
103
  ```
102
104
 
103
- Extract `phase_name`, `goal`, `success_criteria` from each. Store for use in execute_phase and transition messages.
105
+ Extract `phase_name`, `goal`, `success_criteria`, `task_count` from each. Store for use in execute_phase and transition messages.
104
106
 
105
107
  </step>
106
108
 
107
109
  <step name="execute_phase">
108
110
 
109
- ## 3. Execute Phase
111
+ ## 3. Execute Phase (with Task Loop)
110
112
 
111
113
  For the current phase, display the progress banner:
112
114
 
@@ -114,9 +116,11 @@ For the current phase, display the progress banner:
114
116
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
115
117
  EZ ► AUTONOMOUS ▸ Phase {N}/{T}: {Name} [████░░░░] {P}%
116
118
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
119
+
120
+ Phase {N} has {task_count} tasks to execute
117
121
  ```
118
122
 
119
- Where N = current phase number (from the ROADMAP, e.g., 6), T = total milestone phases (from `phase_count` parsed in initialize step, e.g., 8), P = percentage of all milestone phases completed so far. Calculate P as: (number of phases with `disk_status` "complete" from the latest `roadmap analyze` / T × 100). Use █ for filled and ░ for empty segments in the progress bar (8 characters wide).
123
+ Where N = current phase number (from the ROADMAP, e.g., 6), T = total milestone phases (from `phase_count` parsed in initialize step, e.g., 8), P = percentage of all milestone phases completed so far.
120
124
 
121
125
  **3a. Smart Discuss**
122
126
 
@@ -154,15 +158,95 @@ Skill(skill="ez:plan-phase", args="${PHASE_NUM}")
154
158
 
155
159
  Verify plan produced output — re-run `init phase-op` and check `has_plans`. If false → go to handle_blocker: "Plan phase ${PHASE_NUM} did not produce any plans."
156
160
 
157
- **3c. Execute**
161
+ **Get task list for loop:**
162
+
163
+ ```bash
164
+ PLANS=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase-list-plans ${PHASE_NUM})
165
+ ```
166
+
167
+ Parse JSON for: `plans` array with `plan_number`, `plan_name`, `task_description`, `status` for each plan.
168
+
169
+ **Filter to incomplete plans:** Keep only plans where `status !== "complete"`.
170
+
171
+ **Store for task loop:** `plan_list` = array of incomplete plans.
172
+
173
+ **3c. Execute ALL Tasks in Loop**
174
+
175
+ Display task execution banner:
176
+
177
+ ```
178
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179
+ EZ ► AUTONOMOUS ▸ Phase {N} Task Execution
180
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
181
+
182
+ {task_count} tasks to execute in Phase {N}
183
+ ```
184
+
185
+ **For each plan in `plan_list` (loop through ALL tasks):**
186
+
187
+ ```
188
+ FOR EACH plan IN plan_list:
189
+ ```
190
+
191
+ **3c-i. Display task progress:**
192
+
193
+ ```
194
+ Task {plan.plan_number}/{task_count}: {plan.plan_name}
195
+ [████░░░░] {completed_tasks}/{total_tasks} completed
196
+ ```
197
+
198
+ **3c-ii. Execute single task:**
158
199
 
159
200
  ```
160
- Skill(skill="ez:execute-phase", args="${PHASE_NUM} --no-transition")
201
+ Skill(skill="ez:execute-phase", args="${PHASE_NUM} --plan ${plan.plan_number} --no-transition")
161
202
  ```
162
203
 
163
- **3d. Post-Execution Routing**
204
+ **3c-iii. Verify task completion:**
164
205
 
165
- After execute-phase returns, read the verification result:
206
+ ```bash
207
+ TASK_STATUS=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase-get-task-status ${PHASE_NUM} ${plan.plan_number})
208
+ ```
209
+
210
+ Parse `status` from JSON (values: "complete", "in_progress", "blocked", "failed").
211
+
212
+ **If `complete`:**
213
+ - Display: `✅ Task ${plan.plan_number}: ${plan.plan_name} — Complete`
214
+ - Mark task as completed in local tracking
215
+ - Continue to next task in loop
216
+
217
+ **If `in_progress`:**
218
+ - Display: `⚠ Task ${plan.plan_number}: ${plan.plan_name} — Still in progress`
219
+ - Retry status check once (wait 30 seconds)
220
+ - If still `in_progress` → go to handle_blocker: "Task ${plan.plan_number} did not complete"
221
+
222
+ **If `blocked` or `failed`:**
223
+ - Read error/blocker details from task status
224
+ - Go to handle_blocker with: "Task ${plan.plan_number} (${plan.plan_name}) ${status}: {details}"
225
+
226
+ **3c-iv. After each task completes, update phase progress:**
227
+
228
+ ```bash
229
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase-update-progress ${PHASE_NUM}
230
+ ```
231
+
232
+ **End loop** (continue to next plan in plan_list)
233
+
234
+ **After ALL tasks complete:**
235
+
236
+ Display phase completion banner:
237
+
238
+ ```
239
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
240
+ EZ ► AUTONOMOUS ▸ Phase {N} Complete ✅
241
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
242
+
243
+ All {task_count} tasks completed successfully
244
+ Phase {N}: {phase_name} — DONE
245
+ ```
246
+
247
+ **3d. Post-Execution Verification**
248
+
249
+ After all tasks in the phase complete, read the verification result:
166
250
 
167
251
  ```bash
168
252
  VERIFY_STATUS=$(grep "^status:" "${PHASE_DIR}"/*-VERIFICATION.md 2>/dev/null | head -1 | cut -d: -f2 | tr -d ' ')
@@ -185,6 +269,7 @@ Go to handle_blocker: "Execute phase ${PHASE_NUM} did not produce verification r
185
269
  Display:
186
270
  ```
187
271
  Phase ${PHASE_NUM} ✅ ${PHASE_NAME} — Verification passed
272
+ All {task_count} tasks verified
188
273
  ```
189
274
 
190
275
  Proceed to iterate step.
@@ -194,7 +279,7 @@ Proceed to iterate step.
194
279
  Read the human_verification section from VERIFICATION.md to get the count and items requiring manual testing.
195
280
 
196
281
  Display the items, then ask user via AskUserQuestion:
197
- - **question:** "Phase ${PHASE_NUM} has items needing manual verification. Validate now or continue to next phase?"
282
+ - **question:** "Phase ${PHASE_NUM} has {N} items needing manual verification. Validate now or continue to next phase?"
198
283
  - **options:** "Validate now" / "Continue without validation"
199
284
 
200
285
  On **"Validate now"**: Present the specific items from VERIFICATION.md's human_verification section. After user reviews, ask:
@@ -213,6 +298,7 @@ Read gap summary from VERIFICATION.md (score and missing items). Display:
213
298
  ```
214
299
  ⚠ Phase ${PHASE_NUM}: ${PHASE_NAME} — Gaps Found
215
300
  Score: {N}/{M} must-haves verified
301
+ {gap_count} tasks have gaps
216
302
  ```
217
303
 
218
304
  Ask user via AskUserQuestion:
@@ -227,9 +313,15 @@ Skill(skill="ez:plan-phase", args="${PHASE_NUM} --gaps")
227
313
 
228
314
  Verify gap plans were created — re-run `init phase-op ${PHASE_NUM}` and check `has_plans`. If no new gap plans → go to handle_blocker: "Gap closure planning for phase ${PHASE_NUM} did not produce plans."
229
315
 
230
- Re-execute:
316
+ **Re-execute ALL gap tasks in loop:**
317
+
318
+ ```bash
319
+ GAP_PLANS=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase-list-plans ${PHASE_NUM} --gap-only)
320
+ ```
321
+
322
+ For each gap plan in GAP_PLANS:
231
323
  ```
232
- Skill(skill="ez:execute-phase", args="${PHASE_NUM} --no-transition")
324
+ Skill(skill="ez:execute-phase", args="${PHASE_NUM} --plan ${gap_plan.number} --no-transition")
233
325
  ```
234
326
 
235
327
  Re-read verification status:
@@ -357,7 +449,7 @@ Read the 3-5 most relevant files to understand existing patterns.
357
449
  DETAIL=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap get-phase ${PHASE_NUM})
358
450
  ```
359
451
 
360
- Extract `goal`, `requirements`, `success_criteria` from the JSON response.
452
+ Extract `goal`, `requirements`, `success_criteria`, `task_count` from the JSON response.
361
453
 
362
454
  **Infrastructure detection — check FIRST before generating grey areas:**
363
455
 
@@ -542,7 +634,7 @@ Decisions captured: {count} across {area_count} areas
542
634
 
543
635
  ## 4. Iterate
544
636
 
545
- After each phase completes, re-read ROADMAP.md to catch phases inserted mid-execution (decimal phases like 5.1):
637
+ After each phase completes (ALL tasks executed), re-read ROADMAP.md to catch phases inserted mid-execution (decimal phases like 5.1):
546
638
 
547
639
  ```bash
548
640
  ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)
@@ -563,7 +655,7 @@ Check for blockers in the Blockers/Concerns section. If blockers are found, go t
563
655
 
564
656
  If incomplete phases remain: proceed to next phase, loop back to execute_phase.
565
657
 
566
- If all phases complete, proceed to lifecycle step.
658
+ If all phases complete: proceed to lifecycle step.
567
659
 
568
660
  </step>
569
661
 
@@ -674,6 +766,7 @@ Display final completion banner:
674
766
  Milestone: {milestone_version} — {milestone_name}
675
767
  Status: Complete ✅
676
768
  Lifecycle: audit ✅ → complete ✅ → cleanup ✅
769
+ All Tasks: {total_tasks} executed across {phase_count} phases
677
770
 
678
771
  Ship it! 🚀
679
772
  ```
@@ -686,16 +779,16 @@ Display final completion banner:
686
779
 
687
780
  When any phase operation fails or a blocker is detected, present 3 options via AskUserQuestion:
688
781
 
689
- **Prompt:** "Phase {N} ({Name}) encountered an issue: {description}"
782
+ **Prompt:** "Phase {N} ({Name}), Task {task_num} encountered an issue: {description}"
690
783
 
691
784
  **Options:**
692
- 1. **"Fix and retry"** — Re-run the failed step (discuss, plan, or execute) for this phase
693
- 2. **"Skip this phase"** — Mark phase as skipped, continue to the next incomplete phase
785
+ 1. **"Fix and retry"** — Re-run the failed step (discuss, plan, or execute) for this task
786
+ 2. **"Skip this task"** — Mark task as skipped, continue to next task in same phase
694
787
  3. **"Stop autonomous mode"** — Display summary of progress so far and exit cleanly
695
788
 
696
789
  **On "Fix and retry":** Loop back to the failed step within execute_phase. If the same step fails again after retry, re-present these options.
697
790
 
698
- **On "Skip this phase":** Log `Phase {N} ⏭ {Name} — Skipped by user` and proceed to iterate.
791
+ **On "Skip this task":** Log `Phase {N}, Task {task_num} ⏭ {task_name} — Skipped by user` and continue to next task in the phase loop.
699
792
 
700
793
  **On "Stop autonomous mode":** Display progress summary:
701
794
 
@@ -704,11 +797,12 @@ When any phase operation fails or a blocker is detected, present 3 options via A
704
797
  EZ ► AUTONOMOUS ▸ STOPPED
705
798
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
706
799
 
707
- Completed: {list of completed phases}
708
- Skipped: {list of skipped phases}
709
- Remaining: {list of remaining phases}
800
+ Completed Phases: {list of completed phases}
801
+ In Progress: Phase {N}, Task {task_num}
802
+ Skipped Tasks: {list of skipped tasks}
803
+ Remaining Tasks: {count} tasks in {count} phases
710
804
 
711
- Resume with: /ez:autonomous --from {next_phase}
805
+ Resume with: /ez:autonomous --from {current_phase}
712
806
  ```
713
807
 
714
808
  </step>
@@ -719,16 +813,23 @@ When any phase operation fails or a blocker is detected, present 3 options via A
719
813
  - [ ] All incomplete phases executed in order (smart discuss → plan → execute each)
720
814
  - [ ] Smart discuss proposes grey area answers in tables, user accepts or overrides per area
721
815
  - [ ] Progress banners displayed between phases
722
- - [ ] Execute-phase invoked with --no-transition (autonomous manages transitions)
816
+ - [ ] Execute-phase loops through ALL task plans within each phase
817
+ - [ ] Each task plan executed individually with --plan {N} flag
818
+ - [ ] Task progress displayed during loop ([████░░░░] X/Y completed)
819
+ - [ ] Task completion verified after each execution
820
+ - [ ] Failed/blocked tasks route to handle_blocker
821
+ - [ ] After ALL tasks complete, phase verification runs
723
822
  - [ ] Post-execution verification reads VERIFICATION.md and routes on status
724
823
  - [ ] Passed verification → automatic continue to next phase
725
824
  - [ ] Human-needed verification → user prompted to validate or skip
726
825
  - [ ] Gaps-found → user offered gap closure, continue, or stop
826
+ - [ ] Gap closure re-executes ALL gap tasks in loop
727
827
  - [ ] Gap closure limited to 1 retry (prevents infinite loops)
728
828
  - [ ] Plan-phase and execute-phase failures route to handle_blocker
729
829
  - [ ] ROADMAP.md re-read after each phase (catches inserted phases)
730
830
  - [ ] STATE.md checked for blockers before each phase
731
831
  - [ ] Blockers handled via user choice (retry / skip / stop)
832
+ - [ ] Task-level blocker handling (skip task vs skip phase)
732
833
  - [ ] Final completion or stop summary displayed
733
834
  - [ ] After all phases complete, lifecycle step is invoked (not manual suggestion)
734
835
  - [ ] Lifecycle transition banner displayed before audit
@@ -737,7 +838,7 @@ When any phase operation fails or a blocker is detected, present 3 options via A
737
838
  - [ ] Audit technical failure (no file/no status) routes to handle_blocker
738
839
  - [ ] Complete-milestone invoked via Skill() with ${milestone_version} arg
739
840
  - [ ] Cleanup invoked via Skill() — internal confirmation is acceptable (CTRL-01)
740
- - [ ] Final completion banner displayed after lifecycle
841
+ - [ ] Final completion banner displays total task count
741
842
  - [ ] Progress bar uses phase number / total milestone phases (not position among incomplete)
742
843
  - [ ] Smart discuss documents relationship to discuss-phase with CTRL-03 note
743
844
  </success_criteria>
@@ -1,177 +1,177 @@
1
- <purpose>
2
- List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
3
- </purpose>
4
-
5
- <required_reading>
6
- Read all files referenced by the invoking prompt's execution_context before starting.
7
- </required_reading>
8
-
9
- <process>
10
-
11
- <step name="init_context">
12
- Load todo context:
13
-
14
- ```bash
15
- INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init todos)
16
- if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
17
- ```
18
-
19
- Extract from init JSON: `todo_count`, `todos`, `pending_dir`.
20
-
21
- If `todo_count` is 0:
22
- ```
23
- No pending todos.
24
-
25
- Todos are captured during work sessions with /ez:add-todo.
26
-
27
- ---
28
-
29
- Would you like to:
30
-
31
- 1. Continue with current phase (/ez:progress)
32
- 2. Add a todo now (/ez:add-todo)
33
- ```
34
-
35
- Exit.
36
- </step>
37
-
38
- <step name="parse_filter">
39
- Check for area filter in arguments:
40
- - `/ez:check-todos` → show all
41
- - `/ez:check-todos api` → filter to area:api only
42
- </step>
43
-
44
- <step name="list_todos">
45
- Use the `todos` array from init context (already filtered by area if specified).
46
-
47
- Parse and display as numbered list:
48
-
49
- ```
50
- Pending Todos:
51
-
52
- 1. Add auth token refresh (api, 2d ago)
53
- 2. Fix modal z-index issue (ui, 1d ago)
54
- 3. Refactor database connection pool (database, 5h ago)
55
-
56
- ---
57
-
58
- Reply with a number to view details, or:
59
- - `/ez:check-todos [area]` to filter by area
60
- - `q` to exit
61
- ```
62
-
63
- Format age as relative time from created timestamp.
64
- </step>
65
-
66
- <step name="handle_selection">
67
- Wait for user to reply with a number.
68
-
69
- If valid: load selected todo, proceed.
70
- If invalid: "Invalid selection. Reply with a number (1-[N]) or `q` to exit."
71
- </step>
72
-
73
- <step name="load_context">
74
- Read the todo file completely. Display:
75
-
76
- ```
77
- ## [title]
78
-
79
- **Area:** [area]
80
- **Created:** [date] ([relative time] ago)
81
- **Files:** [list or "None"]
82
-
83
- ### Problem
84
- [problem section content]
85
-
86
- ### Solution
87
- [solution section content]
88
- ```
89
-
90
- If `files` field has entries, read and briefly summarize each.
91
- </step>
92
-
93
- <step name="check_roadmap">
94
- Check for roadmap (can use init progress or directly check file existence):
95
-
96
- If `.planning/ROADMAP.md` exists:
97
- 1. Check if todo's area matches an upcoming phase
98
- 2. Check if todo's files overlap with a phase's scope
99
- 3. Note any match for action options
100
- </step>
101
-
102
- <step name="offer_actions">
103
- **If todo maps to a roadmap phase:**
104
-
105
- Use AskUserQuestion:
106
- - header: "Action"
107
- - question: "This todo relates to Phase [N]: [name]. What would you like to do?"
108
- - options:
109
- - "Work on it now" — move to done, start working
110
- - "Add to phase plan" — include when planning Phase [N]
111
- - "Brainstorm approach" — think through before deciding
112
- - "Put it back" — return to list
113
-
114
- **If no roadmap match:**
115
-
116
- Use AskUserQuestion:
117
- - header: "Action"
118
- - question: "What would you like to do with this todo?"
119
- - options:
120
- - "Work on it now" — move to done, start working
121
- - "Create a phase" — /ez:add-phase with this scope
122
- - "Brainstorm approach" — think through before deciding
123
- - "Put it back" — return to list
124
- </step>
125
-
126
- <step name="execute_action">
127
- **Work on it now:**
128
- ```bash
129
- mv ".planning/todos/pending/[filename]" ".planning/todos/done/"
130
- ```
131
- Update STATE.md todo count. Present problem/solution context. Begin work or ask how to proceed.
132
-
133
- **Add to phase plan:**
134
- Note todo reference in phase planning notes. Keep in pending. Return to list or exit.
135
-
136
- **Create a phase:**
137
- Display: `/ez:add-phase [description from todo]`
138
- Keep in pending. User runs command in fresh context.
139
-
140
- **Brainstorm approach:**
141
- Keep in pending. Start discussion about problem and approaches.
142
-
143
- **Put it back:**
144
- Return to list_todos step.
145
- </step>
146
-
147
- <step name="update_state">
148
- After any action that changes todo count:
149
-
150
- Re-run `init todos` to get updated count, then update STATE.md "### Pending Todos" section if exists.
151
- </step>
152
-
153
- <step name="git_commit">
154
- If todo was moved to done/, commit the change:
155
-
156
- ```bash
157
- git rm --cached .planning/todos/pending/[filename] 2>/dev/null || true
158
- node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: start work on todo - [title]" --files .planning/todos/done/[filename] .planning/STATE.md
159
- ```
160
-
161
- Tool respects `commit_docs` config and gitignore automatically.
162
-
163
- Confirm: "Committed: docs: start work on todo - [title]"
164
- </step>
165
-
166
- </process>
167
-
168
- <success_criteria>
169
- - [ ] All pending todos listed with title, area, age
170
- - [ ] Area filter applied if specified
171
- - [ ] Selected todo's full context loaded
172
- - [ ] Roadmap context checked for phase match
173
- - [ ] Appropriate actions offered
174
- - [ ] Selected action executed
175
- - [ ] STATE.md updated if todo count changed
176
- - [ ] Changes committed to git (if todo moved to done/)
177
- </success_criteria>
1
+ <purpose>
2
+ List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="init_context">
12
+ Load todo context:
13
+
14
+ ```bash
15
+ INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init todos)
16
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
17
+ ```
18
+
19
+ Extract from init JSON: `todo_count`, `todos`, `pending_dir`.
20
+
21
+ If `todo_count` is 0:
22
+ ```
23
+ No pending todos.
24
+
25
+ Todos are captured during work sessions with /ez:add-todo.
26
+
27
+ ---
28
+
29
+ Would you like to:
30
+
31
+ 1. Continue with current phase (/ez:progress)
32
+ 2. Add a todo now (/ez:add-todo)
33
+ ```
34
+
35
+ Exit.
36
+ </step>
37
+
38
+ <step name="parse_filter">
39
+ Check for area filter in arguments:
40
+ - `/ez:check-todos` → show all
41
+ - `/ez:check-todos api` → filter to area:api only
42
+ </step>
43
+
44
+ <step name="list_todos">
45
+ Use the `todos` array from init context (already filtered by area if specified).
46
+
47
+ Parse and display as numbered list:
48
+
49
+ ```
50
+ Pending Todos:
51
+
52
+ 1. Add auth token refresh (api, 2d ago)
53
+ 2. Fix modal z-index issue (ui, 1d ago)
54
+ 3. Refactor database connection pool (database, 5h ago)
55
+
56
+ ---
57
+
58
+ Reply with a number to view details, or:
59
+ - `/ez:check-todos [area]` to filter by area
60
+ - `q` to exit
61
+ ```
62
+
63
+ Format age as relative time from created timestamp.
64
+ </step>
65
+
66
+ <step name="handle_selection">
67
+ Wait for user to reply with a number.
68
+
69
+ If valid: load selected todo, proceed.
70
+ If invalid: "Invalid selection. Reply with a number (1-[N]) or `q` to exit."
71
+ </step>
72
+
73
+ <step name="load_context">
74
+ Read the todo file completely. Display:
75
+
76
+ ```
77
+ ## [title]
78
+
79
+ **Area:** [area]
80
+ **Created:** [date] ([relative time] ago)
81
+ **Files:** [list or "None"]
82
+
83
+ ### Problem
84
+ [problem section content]
85
+
86
+ ### Solution
87
+ [solution section content]
88
+ ```
89
+
90
+ If `files` field has entries, read and briefly summarize each.
91
+ </step>
92
+
93
+ <step name="check_roadmap">
94
+ Check for roadmap (can use init progress or directly check file existence):
95
+
96
+ If `.planning/ROADMAP.md` exists:
97
+ 1. Check if todo's area matches an upcoming phase
98
+ 2. Check if todo's files overlap with a phase's scope
99
+ 3. Note any match for action options
100
+ </step>
101
+
102
+ <step name="offer_actions">
103
+ **If todo maps to a roadmap phase:**
104
+
105
+ Use AskUserQuestion:
106
+ - header: "Action"
107
+ - question: "This todo relates to Phase [N]: [name]. What would you like to do?"
108
+ - options:
109
+ - "Work on it now" — move to done, start working
110
+ - "Add to phase plan" — include when planning Phase [N]
111
+ - "Brainstorm approach" — think through before deciding
112
+ - "Put it back" — return to list
113
+
114
+ **If no roadmap match:**
115
+
116
+ Use AskUserQuestion:
117
+ - header: "Action"
118
+ - question: "What would you like to do with this todo?"
119
+ - options:
120
+ - "Work on it now" — move to done, start working
121
+ - "Create a phase" — /ez:add-phase with this scope
122
+ - "Brainstorm approach" — think through before deciding
123
+ - "Put it back" — return to list
124
+ </step>
125
+
126
+ <step name="execute_action">
127
+ **Work on it now:**
128
+ ```bash
129
+ mv ".planning/todos/pending/[filename]" ".planning/todos/done/"
130
+ ```
131
+ Update STATE.md todo count. Present problem/solution context. Begin work or ask how to proceed.
132
+
133
+ **Add to phase plan:**
134
+ Note todo reference in phase planning notes. Keep in pending. Return to list or exit.
135
+
136
+ **Create a phase:**
137
+ Display: `/ez:add-phase [description from todo]`
138
+ Keep in pending. User runs command in fresh context.
139
+
140
+ **Brainstorm approach:**
141
+ Keep in pending. Start discussion about problem and approaches.
142
+
143
+ **Put it back:**
144
+ Return to list_todos step.
145
+ </step>
146
+
147
+ <step name="update_state">
148
+ After any action that changes todo count:
149
+
150
+ Re-run `init todos` to get updated count, then update STATE.md "### Pending Todos" section if exists.
151
+ </step>
152
+
153
+ <step name="git_commit">
154
+ If todo was moved to done/, commit the change:
155
+
156
+ ```bash
157
+ git rm --cached .planning/todos/pending/[filename] 2>/dev/null || true
158
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: start work on todo - [title]" --files .planning/todos/done/[filename] .planning/STATE.md
159
+ ```
160
+
161
+ Tool respects `commit_docs` config and gitignore automatically.
162
+
163
+ Confirm: "Committed: docs: start work on todo - [title]"
164
+ </step>
165
+
166
+ </process>
167
+
168
+ <success_criteria>
169
+ - [ ] All pending todos listed with title, area, age
170
+ - [ ] Area filter applied if specified
171
+ - [ ] Selected todo's full context loaded
172
+ - [ ] Roadmap context checked for phase match
173
+ - [ ] Appropriate actions offered
174
+ - [ ] Selected action executed
175
+ - [ ] STATE.md updated if todo count changed
176
+ - [ ] Changes committed to git (if todo moved to done/)
177
+ </success_criteria>