@howlil/ez-agents 2.0.0 → 3.0.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 (145) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +157 -110
  3. package/README.zh-CN.md +84 -84
  4. package/agents/ez-plan-checker.md +2 -2
  5. package/agents/ez-research-synthesizer.md +1 -1
  6. package/agents/ez-ui-auditor.md +0 -2
  7. package/agents/ez-ui-checker.md +2 -4
  8. package/agents/ez-ui-researcher.md +0 -2
  9. package/agents/ez-verifier.md +1 -1
  10. package/bin/install.js +211 -211
  11. package/commands/ez/debug.md +1 -1
  12. package/commands/ez/map-codebase.md +1 -1
  13. package/commands/ez/reapply-patches.md +3 -3
  14. package/commands/ez/research-phase.md +1 -1
  15. package/{get-shit-done → ez-agents}/bin/ez-tools.cjs +1 -1
  16. package/{get-shit-done → ez-agents}/bin/lib/assistant-adapter.cjs +205 -205
  17. package/{get-shit-done → ez-agents}/bin/lib/audit-exec.cjs +150 -150
  18. package/{get-shit-done → ez-agents}/bin/lib/auth.cjs +175 -175
  19. package/{get-shit-done → ez-agents}/bin/lib/circuit-breaker.cjs +118 -118
  20. package/{get-shit-done → ez-agents}/bin/lib/commands.cjs +666 -666
  21. package/{get-shit-done → ez-agents}/bin/lib/config.cjs +183 -183
  22. package/{get-shit-done → ez-agents}/bin/lib/core.cjs +495 -495
  23. package/{get-shit-done → ez-agents}/bin/lib/file-lock.cjs +236 -236
  24. package/{get-shit-done → ez-agents}/bin/lib/frontmatter.cjs +299 -299
  25. package/{get-shit-done → ez-agents}/bin/lib/fs-utils.cjs +153 -153
  26. package/{get-shit-done → ez-agents}/bin/lib/git-utils.cjs +203 -203
  27. package/{get-shit-done → ez-agents}/bin/lib/health-check.cjs +163 -163
  28. package/{get-shit-done → ez-agents}/bin/lib/index.cjs +113 -113
  29. package/{get-shit-done → ez-agents}/bin/lib/init.cjs +710 -710
  30. package/{get-shit-done → ez-agents}/bin/lib/logger.cjs +117 -117
  31. package/{get-shit-done → ez-agents}/bin/lib/milestone.cjs +241 -241
  32. package/{get-shit-done → ez-agents}/bin/lib/model-provider.cjs +146 -146
  33. package/{get-shit-done → ez-agents}/bin/lib/phase.cjs +908 -908
  34. package/{get-shit-done → ez-agents}/bin/lib/retry.cjs +119 -119
  35. package/{get-shit-done → ez-agents}/bin/lib/roadmap.cjs +305 -305
  36. package/{get-shit-done → ez-agents}/bin/lib/safe-exec.cjs +128 -128
  37. package/{get-shit-done → ez-agents}/bin/lib/safe-path.cjs +130 -130
  38. package/{get-shit-done → ez-agents}/bin/lib/state.cjs +721 -721
  39. package/{get-shit-done → ez-agents}/bin/lib/temp-file.cjs +239 -239
  40. package/{get-shit-done → ez-agents}/bin/lib/template.cjs +222 -222
  41. package/{get-shit-done → ez-agents}/bin/lib/test-file-lock.cjs +112 -112
  42. package/{get-shit-done → ez-agents}/bin/lib/test-graceful.cjs +93 -93
  43. package/{get-shit-done → ez-agents}/bin/lib/test-logger.cjs +60 -60
  44. package/{get-shit-done → ez-agents}/bin/lib/test-safe-exec.cjs +38 -38
  45. package/{get-shit-done → ez-agents}/bin/lib/test-safe-path.cjs +33 -33
  46. package/{get-shit-done → ez-agents}/bin/lib/test-temp-file.cjs +125 -125
  47. package/{get-shit-done → ez-agents}/bin/lib/timeout-exec.cjs +62 -62
  48. package/{get-shit-done → ez-agents}/bin/lib/verify.cjs +820 -820
  49. package/{get-shit-done → ez-agents}/references/checkpoints.md +776 -776
  50. package/{get-shit-done → ez-agents}/references/questioning.md +162 -162
  51. package/{get-shit-done → ez-agents}/references/tdd.md +263 -263
  52. package/{get-shit-done → ez-agents}/templates/codebase/concerns.md +310 -310
  53. package/{get-shit-done → ez-agents}/templates/codebase/conventions.md +307 -307
  54. package/{get-shit-done → ez-agents}/templates/codebase/integrations.md +280 -280
  55. package/{get-shit-done → ez-agents}/templates/codebase/stack.md +186 -186
  56. package/{get-shit-done → ez-agents}/templates/codebase/testing.md +480 -480
  57. package/{get-shit-done → ez-agents}/templates/config.json +37 -37
  58. package/{get-shit-done → ez-agents}/templates/continue-here.md +78 -78
  59. package/{get-shit-done → ez-agents}/templates/milestone-archive.md +123 -123
  60. package/{get-shit-done → ez-agents}/templates/milestone.md +115 -115
  61. package/{get-shit-done → ez-agents}/templates/requirements.md +231 -231
  62. package/{get-shit-done → ez-agents}/templates/research-project/ARCHITECTURE.md +204 -204
  63. package/{get-shit-done → ez-agents}/templates/research-project/FEATURES.md +147 -147
  64. package/{get-shit-done → ez-agents}/templates/research-project/PITFALLS.md +200 -200
  65. package/{get-shit-done → ez-agents}/templates/research-project/STACK.md +120 -120
  66. package/{get-shit-done → ez-agents}/templates/research-project/SUMMARY.md +170 -170
  67. package/{get-shit-done → ez-agents}/templates/retrospective.md +54 -54
  68. package/{get-shit-done → ez-agents}/templates/roadmap.md +202 -202
  69. package/{get-shit-done → ez-agents}/templates/summary-minimal.md +41 -41
  70. package/{get-shit-done → ez-agents}/templates/summary-standard.md +48 -48
  71. package/{get-shit-done → ez-agents}/templates/summary.md +248 -248
  72. package/{get-shit-done → ez-agents}/templates/user-setup.md +311 -311
  73. package/{get-shit-done → ez-agents}/templates/verification-report.md +322 -322
  74. package/{get-shit-done → ez-agents}/workflows/add-phase.md +112 -112
  75. package/{get-shit-done → ez-agents}/workflows/add-tests.md +351 -351
  76. package/{get-shit-done → ez-agents}/workflows/add-todo.md +158 -158
  77. package/{get-shit-done → ez-agents}/workflows/audit-milestone.md +332 -332
  78. package/{get-shit-done → ez-agents}/workflows/autonomous.md +743 -743
  79. package/{get-shit-done → ez-agents}/workflows/check-todos.md +177 -177
  80. package/{get-shit-done → ez-agents}/workflows/cleanup.md +152 -152
  81. package/{get-shit-done → ez-agents}/workflows/complete-milestone.md +766 -766
  82. package/ez-agents/workflows/debug.md +0 -0
  83. package/{get-shit-done → ez-agents}/workflows/diagnose-issues.md +219 -219
  84. package/{get-shit-done → ez-agents}/workflows/discovery-phase.md +289 -289
  85. package/{get-shit-done → ez-agents}/workflows/discuss-phase.md +762 -762
  86. package/{get-shit-done → ez-agents}/workflows/execute-phase.md +468 -468
  87. package/{get-shit-done → ez-agents}/workflows/execute-plan.md +483 -483
  88. package/{get-shit-done → ez-agents}/workflows/health.md +159 -159
  89. package/{get-shit-done → ez-agents}/workflows/help.md +492 -492
  90. package/{get-shit-done → ez-agents}/workflows/insert-phase.md +130 -130
  91. package/{get-shit-done → ez-agents}/workflows/list-phase-assumptions.md +178 -178
  92. package/{get-shit-done → ez-agents}/workflows/map-codebase.md +316 -316
  93. package/{get-shit-done → ez-agents}/workflows/new-milestone.md +384 -384
  94. package/{get-shit-done → ez-agents}/workflows/new-project.md +1111 -1111
  95. package/{get-shit-done → ez-agents}/workflows/node-repair.md +92 -92
  96. package/{get-shit-done → ez-agents}/workflows/pause-work.md +122 -122
  97. package/{get-shit-done → ez-agents}/workflows/plan-milestone-gaps.md +274 -274
  98. package/{get-shit-done → ez-agents}/workflows/plan-phase.md +651 -651
  99. package/{get-shit-done → ez-agents}/workflows/progress.md +382 -382
  100. package/{get-shit-done → ez-agents}/workflows/quick.md +610 -610
  101. package/{get-shit-done → ez-agents}/workflows/remove-phase.md +155 -155
  102. package/{get-shit-done → ez-agents}/workflows/research-phase.md +74 -74
  103. package/{get-shit-done → ez-agents}/workflows/resume-project.md +307 -307
  104. package/{get-shit-done → ez-agents}/workflows/set-profile.md +81 -81
  105. package/{get-shit-done → ez-agents}/workflows/settings.md +242 -242
  106. package/{get-shit-done → ez-agents}/workflows/stats.md +57 -57
  107. package/{get-shit-done → ez-agents}/workflows/transition.md +544 -544
  108. package/{get-shit-done → ez-agents}/workflows/ui-phase.md +290 -290
  109. package/{get-shit-done → ez-agents}/workflows/ui-review.md +157 -157
  110. package/{get-shit-done → ez-agents}/workflows/update.md +320 -320
  111. package/{get-shit-done → ez-agents}/workflows/validate-phase.md +167 -167
  112. package/{get-shit-done → ez-agents}/workflows/verify-phase.md +243 -243
  113. package/{get-shit-done → ez-agents}/workflows/verify-work.md +5 -5
  114. package/hooks/dist/ez-check-update.js +81 -0
  115. package/hooks/dist/ez-context-monitor.js +141 -0
  116. package/hooks/dist/ez-statusline.js +115 -0
  117. package/package.json +13 -3
  118. package/scripts/build-hooks.js +43 -43
  119. package/scripts/run-tests.cjs +29 -29
  120. /package/{get-shit-done → ez-agents}/references/continuation-format.md +0 -0
  121. /package/{get-shit-done → ez-agents}/references/decimal-phase-calculation.md +0 -0
  122. /package/{get-shit-done → ez-agents}/references/git-integration.md +0 -0
  123. /package/{get-shit-done → ez-agents}/references/git-planning-commit.md +0 -0
  124. /package/{get-shit-done → ez-agents}/references/model-profile-resolution.md +0 -0
  125. /package/{get-shit-done → ez-agents}/references/model-profiles.md +0 -0
  126. /package/{get-shit-done → ez-agents}/references/phase-argument-parsing.md +0 -0
  127. /package/{get-shit-done → ez-agents}/references/planning-config.md +0 -0
  128. /package/{get-shit-done → ez-agents}/references/ui-brand.md +0 -0
  129. /package/{get-shit-done → ez-agents}/references/verification-patterns.md +0 -0
  130. /package/{get-shit-done → ez-agents}/templates/DEBUG.md +0 -0
  131. /package/{get-shit-done → ez-agents}/templates/UAT.md +0 -0
  132. /package/{get-shit-done → ez-agents}/templates/UI-SPEC.md +0 -0
  133. /package/{get-shit-done → ez-agents}/templates/VALIDATION.md +0 -0
  134. /package/{get-shit-done → ez-agents}/templates/codebase/architecture.md +0 -0
  135. /package/{get-shit-done → ez-agents}/templates/codebase/structure.md +0 -0
  136. /package/{get-shit-done → ez-agents}/templates/context.md +0 -0
  137. /package/{get-shit-done → ez-agents}/templates/copilot-instructions.md +0 -0
  138. /package/{get-shit-done → ez-agents}/templates/debug-subagent-prompt.md +0 -0
  139. /package/{get-shit-done → ez-agents}/templates/discovery.md +0 -0
  140. /package/{get-shit-done → ez-agents}/templates/phase-prompt.md +0 -0
  141. /package/{get-shit-done → ez-agents}/templates/planner-subagent-prompt.md +0 -0
  142. /package/{get-shit-done → ez-agents}/templates/project.md +0 -0
  143. /package/{get-shit-done → ez-agents}/templates/research.md +0 -0
  144. /package/{get-shit-done → ez-agents}/templates/state.md +0 -0
  145. /package/{get-shit-done → ez-agents}/templates/summary-complex.md +0 -0
@@ -1,382 +1,382 @@
1
- <purpose>
2
- Check project progress, summarize recent work and what's ahead, then intelligently route to the next action — either executing an existing plan or creating the next one. Provides situational awareness before continuing work.
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 progress context (paths only):**
13
-
14
- ```bash
15
- INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init progress)
16
- if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
17
- ```
18
-
19
- Extract from init JSON: `project_exists`, `roadmap_exists`, `state_exists`, `phases`, `current_phase`, `next_phase`, `milestone_version`, `completed_count`, `phase_count`, `paused_at`, `state_path`, `roadmap_path`, `project_path`, `config_path`.
20
-
21
- If `project_exists` is false (no `.planning/` directory):
22
-
23
- ```
24
- No planning structure found.
25
-
26
- Run /ez:new-project to start a new project.
27
- ```
28
-
29
- Exit.
30
-
31
- If missing STATE.md: suggest `/ez:new-project`.
32
-
33
- **If ROADMAP.md missing but PROJECT.md exists:**
34
-
35
- This means a milestone was completed and archived. Go to **Route F** (between milestones).
36
-
37
- If missing both ROADMAP.md and PROJECT.md: suggest `/ez:new-project`.
38
- </step>
39
-
40
- <step name="load">
41
- **Use structured extraction from gsd-tools:**
42
-
43
- Instead of reading full files, use targeted tools to get only the data needed for the report:
44
- - `ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)`
45
- - `STATE=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" state-snapshot)`
46
-
47
- This minimizes orchestrator context usage.
48
- </step>
49
-
50
- <step name="analyze_roadmap">
51
- **Get comprehensive roadmap analysis (replaces manual parsing):**
52
-
53
- ```bash
54
- ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)
55
- ```
56
-
57
- This returns structured JSON with:
58
- - All phases with disk status (complete/partial/planned/empty/no_directory)
59
- - Goal and dependencies per phase
60
- - Plan and summary counts per phase
61
- - Aggregated stats: total plans, summaries, progress percent
62
- - Current and next phase identification
63
-
64
- Use this instead of manually reading/parsing ROADMAP.md.
65
- </step>
66
-
67
- <step name="recent">
68
- **Gather recent work context:**
69
-
70
- - Find the 2-3 most recent SUMMARY.md files
71
- - Use `summary-extract` for efficient parsing:
72
- ```bash
73
- node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" summary-extract <path> --fields one_liner
74
- ```
75
- - This shows "what we've been working on"
76
- </step>
77
-
78
- <step name="position">
79
- **Parse current position from init context and roadmap analysis:**
80
-
81
- - Use `current_phase` and `next_phase` from `$ROADMAP`
82
- - Note `paused_at` if work was paused (from `$STATE`)
83
- - Count pending todos: use `init todos` or `list-todos`
84
- - Check for active debug sessions: `ls .planning/debug/*.md 2>/dev/null | grep -v resolved | wc -l`
85
- </step>
86
-
87
- <step name="report">
88
- **Generate progress bar from gsd-tools, then present rich status report:**
89
-
90
- ```bash
91
- # Get formatted progress bar
92
- PROGRESS_BAR=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" progress bar --raw)
93
- ```
94
-
95
- Present:
96
-
97
- ```
98
- # [Project Name]
99
-
100
- **Progress:** {PROGRESS_BAR}
101
- **Profile:** [quality/balanced/budget]
102
-
103
- ## Recent Work
104
- - [Phase X, Plan Y]: [what was accomplished - 1 line from summary-extract]
105
- - [Phase X, Plan Z]: [what was accomplished - 1 line from summary-extract]
106
-
107
- ## Current Position
108
- Phase [N] of [total]: [phase-name]
109
- Plan [M] of [phase-total]: [status]
110
- CONTEXT: [✓ if has_context | - if not]
111
-
112
- ## Key Decisions Made
113
- - [extract from $STATE.decisions[]]
114
- - [e.g. jq -r '.decisions[].decision' from state-snapshot]
115
-
116
- ## Blockers/Concerns
117
- - [extract from $STATE.blockers[]]
118
- - [e.g. jq -r '.blockers[].text' from state-snapshot]
119
-
120
- ## Pending Todos
121
- - [count] pending — /ez:check-todos to review
122
-
123
- ## Active Debug Sessions
124
- - [count] active — /ez:debug to continue
125
- (Only show this section if count > 0)
126
-
127
- ## What's Next
128
- [Next phase/plan objective from roadmap analyze]
129
- ```
130
-
131
- </step>
132
-
133
- <step name="route">
134
- **Determine next action based on verified counts.**
135
-
136
- **Step 1: Count plans, summaries, and issues in current phase**
137
-
138
- List files in the current phase directory:
139
-
140
- ```bash
141
- ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null | wc -l
142
- ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null | wc -l
143
- ls -1 .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null | wc -l
144
- ```
145
-
146
- State: "This phase has {X} plans, {Y} summaries."
147
-
148
- **Step 1.5: Check for unaddressed UAT gaps**
149
-
150
- Check for UAT.md files with status "diagnosed" (has gaps needing fixes).
151
-
152
- ```bash
153
- # Check for diagnosed UAT with gaps
154
- grep -l "status: diagnosed" .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null
155
- ```
156
-
157
- Track:
158
- - `uat_with_gaps`: UAT.md files with status "diagnosed" (gaps need fixing)
159
-
160
- **Step 2: Route based on counts**
161
-
162
- | Condition | Meaning | Action |
163
- |-----------|---------|--------|
164
- | uat_with_gaps > 0 | UAT gaps need fix plans | Go to **Route E** |
165
- | summaries < plans | Unexecuted plans exist | Go to **Route A** |
166
- | summaries = plans AND plans > 0 | Phase complete | Go to Step 3 |
167
- | plans = 0 | Phase not yet planned | Go to **Route B** |
168
-
169
- ---
170
-
171
- **Route A: Unexecuted plan exists**
172
-
173
- Find the first PLAN.md without matching SUMMARY.md.
174
- Read its `<objective>` section.
175
-
176
- ```
177
- ---
178
-
179
- ## ▶ Next Up
180
-
181
- **{phase}-{plan}: [Plan Name]** — [objective summary from PLAN.md]
182
-
183
- `/ez:execute-phase {phase}`
184
-
185
- <sub>`/clear` first → fresh context window</sub>
186
-
187
- ---
188
- ```
189
-
190
- ---
191
-
192
- **Route B: Phase needs planning**
193
-
194
- Check if `{phase_num}-CONTEXT.md` exists in phase directory.
195
-
196
- **If CONTEXT.md exists:**
197
-
198
- ```
199
- ---
200
-
201
- ## ▶ Next Up
202
-
203
- **Phase {N}: {Name}** — {Goal from ROADMAP.md}
204
- <sub>✓ Context gathered, ready to plan</sub>
205
-
206
- `/ez:plan-phase {phase-number}`
207
-
208
- <sub>`/clear` first → fresh context window</sub>
209
-
210
- ---
211
- ```
212
-
213
- **If CONTEXT.md does NOT exist:**
214
-
215
- ```
216
- ---
217
-
218
- ## ▶ Next Up
219
-
220
- **Phase {N}: {Name}** — {Goal from ROADMAP.md}
221
-
222
- `/ez:discuss-phase {phase}` — gather context and clarify approach
223
-
224
- <sub>`/clear` first → fresh context window</sub>
225
-
226
- ---
227
-
228
- **Also available:**
229
- - `/ez:plan-phase {phase}` — skip discussion, plan directly
230
- - `/ez:list-phase-assumptions {phase}` — see Claude's assumptions
231
-
232
- ---
233
- ```
234
-
235
- ---
236
-
237
- **Route E: UAT gaps need fix plans**
238
-
239
- UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
240
-
241
- ```
242
- ---
243
-
244
- ## ⚠ UAT Gaps Found
245
-
246
- **{phase_num}-UAT.md** has {N} gaps requiring fixes.
247
-
248
- `/ez:plan-phase {phase} --gaps`
249
-
250
- <sub>`/clear` first → fresh context window</sub>
251
-
252
- ---
253
-
254
- **Also available:**
255
- - `/ez:execute-phase {phase}` — execute phase plans
256
- - `/ez:verify-work {phase}` — run more UAT testing
257
-
258
- ---
259
- ```
260
-
261
- ---
262
-
263
- **Step 3: Check milestone status (only when phase complete)**
264
-
265
- Read ROADMAP.md and identify:
266
- 1. Current phase number
267
- 2. All phase numbers in the current milestone section
268
-
269
- Count total phases and identify the highest phase number.
270
-
271
- State: "Current phase is {X}. Milestone has {N} phases (highest: {Y})."
272
-
273
- **Route based on milestone status:**
274
-
275
- | Condition | Meaning | Action |
276
- |-----------|---------|--------|
277
- | current phase < highest phase | More phases remain | Go to **Route C** |
278
- | current phase = highest phase | Milestone complete | Go to **Route D** |
279
-
280
- ---
281
-
282
- **Route C: Phase complete, more phases remain**
283
-
284
- Read ROADMAP.md to get the next phase's name and goal.
285
-
286
- ```
287
- ---
288
-
289
- ## ✓ Phase {Z} Complete
290
-
291
- ## ▶ Next Up
292
-
293
- **Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
294
-
295
- `/ez:discuss-phase {Z+1}` — gather context and clarify approach
296
-
297
- <sub>`/clear` first → fresh context window</sub>
298
-
299
- ---
300
-
301
- **Also available:**
302
- - `/ez:plan-phase {Z+1}` — skip discussion, plan directly
303
- - `/ez:verify-work {Z}` — user acceptance test before continuing
304
-
305
- ---
306
- ```
307
-
308
- ---
309
-
310
- **Route D: Milestone complete**
311
-
312
- ```
313
- ---
314
-
315
- ## 🎉 Milestone Complete
316
-
317
- All {N} phases finished!
318
-
319
- ## ▶ Next Up
320
-
321
- **Complete Milestone** — archive and prepare for next
322
-
323
- `/ez:complete-milestone`
324
-
325
- <sub>`/clear` first → fresh context window</sub>
326
-
327
- ---
328
-
329
- **Also available:**
330
- - `/ez:verify-work` — user acceptance test before completing milestone
331
-
332
- ---
333
- ```
334
-
335
- ---
336
-
337
- **Route F: Between milestones (ROADMAP.md missing, PROJECT.md exists)**
338
-
339
- A milestone was completed and archived. Ready to start the next milestone cycle.
340
-
341
- Read MILESTONES.md to find the last completed milestone version.
342
-
343
- ```
344
- ---
345
-
346
- ## ✓ Milestone v{X.Y} Complete
347
-
348
- Ready to plan the next milestone.
349
-
350
- ## ▶ Next Up
351
-
352
- **Start Next Milestone** — questioning → research → requirements → roadmap
353
-
354
- `/ez:new-milestone`
355
-
356
- <sub>`/clear` first → fresh context window</sub>
357
-
358
- ---
359
- ```
360
-
361
- </step>
362
-
363
- <step name="edge_cases">
364
- **Handle edge cases:**
365
-
366
- - Phase complete but next phase not planned → offer `/ez:plan-phase [next]`
367
- - All work complete → offer milestone completion
368
- - Blockers present → highlight before offering to continue
369
- - Handoff file exists → mention it, offer `/ez:resume-work`
370
- </step>
371
-
372
- </process>
373
-
374
- <success_criteria>
375
-
376
- - [ ] Rich context provided (recent work, decisions, issues)
377
- - [ ] Current position clear with visual progress
378
- - [ ] What's next clearly explained
379
- - [ ] Smart routing: /ez:execute-phase if plans exist, /ez:plan-phase if not
380
- - [ ] User confirms before any action
381
- - [ ] Seamless handoff to appropriate gsd command
382
- </success_criteria>
1
+ <purpose>
2
+ Check project progress, summarize recent work and what's ahead, then intelligently route to the next action — either executing an existing plan or creating the next one. Provides situational awareness before continuing work.
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 progress context (paths only):**
13
+
14
+ ```bash
15
+ INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init progress)
16
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
17
+ ```
18
+
19
+ Extract from init JSON: `project_exists`, `roadmap_exists`, `state_exists`, `phases`, `current_phase`, `next_phase`, `milestone_version`, `completed_count`, `phase_count`, `paused_at`, `state_path`, `roadmap_path`, `project_path`, `config_path`.
20
+
21
+ If `project_exists` is false (no `.planning/` directory):
22
+
23
+ ```
24
+ No planning structure found.
25
+
26
+ Run /ez:new-project to start a new project.
27
+ ```
28
+
29
+ Exit.
30
+
31
+ If missing STATE.md: suggest `/ez:new-project`.
32
+
33
+ **If ROADMAP.md missing but PROJECT.md exists:**
34
+
35
+ This means a milestone was completed and archived. Go to **Route F** (between milestones).
36
+
37
+ If missing both ROADMAP.md and PROJECT.md: suggest `/ez:new-project`.
38
+ </step>
39
+
40
+ <step name="load">
41
+ **Use structured extraction from ez-tools:**
42
+
43
+ Instead of reading full files, use targeted tools to get only the data needed for the report:
44
+ - `ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)`
45
+ - `STATE=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" state-snapshot)`
46
+
47
+ This minimizes orchestrator context usage.
48
+ </step>
49
+
50
+ <step name="analyze_roadmap">
51
+ **Get comprehensive roadmap analysis (replaces manual parsing):**
52
+
53
+ ```bash
54
+ ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)
55
+ ```
56
+
57
+ This returns structured JSON with:
58
+ - All phases with disk status (complete/partial/planned/empty/no_directory)
59
+ - Goal and dependencies per phase
60
+ - Plan and summary counts per phase
61
+ - Aggregated stats: total plans, summaries, progress percent
62
+ - Current and next phase identification
63
+
64
+ Use this instead of manually reading/parsing ROADMAP.md.
65
+ </step>
66
+
67
+ <step name="recent">
68
+ **Gather recent work context:**
69
+
70
+ - Find the 2-3 most recent SUMMARY.md files
71
+ - Use `summary-extract` for efficient parsing:
72
+ ```bash
73
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" summary-extract <path> --fields one_liner
74
+ ```
75
+ - This shows "what we've been working on"
76
+ </step>
77
+
78
+ <step name="position">
79
+ **Parse current position from init context and roadmap analysis:**
80
+
81
+ - Use `current_phase` and `next_phase` from `$ROADMAP`
82
+ - Note `paused_at` if work was paused (from `$STATE`)
83
+ - Count pending todos: use `init todos` or `list-todos`
84
+ - Check for active debug sessions: `ls .planning/debug/*.md 2>/dev/null | grep -v resolved | wc -l`
85
+ </step>
86
+
87
+ <step name="report">
88
+ **Generate progress bar from ez-tools, then present rich status report:**
89
+
90
+ ```bash
91
+ # Get formatted progress bar
92
+ PROGRESS_BAR=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" progress bar --raw)
93
+ ```
94
+
95
+ Present:
96
+
97
+ ```
98
+ # [Project Name]
99
+
100
+ **Progress:** {PROGRESS_BAR}
101
+ **Profile:** [quality/balanced/budget]
102
+
103
+ ## Recent Work
104
+ - [Phase X, Plan Y]: [what was accomplished - 1 line from summary-extract]
105
+ - [Phase X, Plan Z]: [what was accomplished - 1 line from summary-extract]
106
+
107
+ ## Current Position
108
+ Phase [N] of [total]: [phase-name]
109
+ Plan [M] of [phase-total]: [status]
110
+ CONTEXT: [✓ if has_context | - if not]
111
+
112
+ ## Key Decisions Made
113
+ - [extract from $STATE.decisions[]]
114
+ - [e.g. jq -r '.decisions[].decision' from state-snapshot]
115
+
116
+ ## Blockers/Concerns
117
+ - [extract from $STATE.blockers[]]
118
+ - [e.g. jq -r '.blockers[].text' from state-snapshot]
119
+
120
+ ## Pending Todos
121
+ - [count] pending — /ez:check-todos to review
122
+
123
+ ## Active Debug Sessions
124
+ - [count] active — /ez:debug to continue
125
+ (Only show this section if count > 0)
126
+
127
+ ## What's Next
128
+ [Next phase/plan objective from roadmap analyze]
129
+ ```
130
+
131
+ </step>
132
+
133
+ <step name="route">
134
+ **Determine next action based on verified counts.**
135
+
136
+ **Step 1: Count plans, summaries, and issues in current phase**
137
+
138
+ List files in the current phase directory:
139
+
140
+ ```bash
141
+ ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null | wc -l
142
+ ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null | wc -l
143
+ ls -1 .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null | wc -l
144
+ ```
145
+
146
+ State: "This phase has {X} plans, {Y} summaries."
147
+
148
+ **Step 1.5: Check for unaddressed UAT gaps**
149
+
150
+ Check for UAT.md files with status "diagnosed" (has gaps needing fixes).
151
+
152
+ ```bash
153
+ # Check for diagnosed UAT with gaps
154
+ grep -l "status: diagnosed" .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null
155
+ ```
156
+
157
+ Track:
158
+ - `uat_with_gaps`: UAT.md files with status "diagnosed" (gaps need fixing)
159
+
160
+ **Step 2: Route based on counts**
161
+
162
+ | Condition | Meaning | Action |
163
+ |-----------|---------|--------|
164
+ | uat_with_gaps > 0 | UAT gaps need fix plans | Go to **Route E** |
165
+ | summaries < plans | Unexecuted plans exist | Go to **Route A** |
166
+ | summaries = plans AND plans > 0 | Phase complete | Go to Step 3 |
167
+ | plans = 0 | Phase not yet planned | Go to **Route B** |
168
+
169
+ ---
170
+
171
+ **Route A: Unexecuted plan exists**
172
+
173
+ Find the first PLAN.md without matching SUMMARY.md.
174
+ Read its `<objective>` section.
175
+
176
+ ```
177
+ ---
178
+
179
+ ## ▶ Next Up
180
+
181
+ **{phase}-{plan}: [Plan Name]** — [objective summary from PLAN.md]
182
+
183
+ `/ez:execute-phase {phase}`
184
+
185
+ <sub>`/clear` first → fresh context window</sub>
186
+
187
+ ---
188
+ ```
189
+
190
+ ---
191
+
192
+ **Route B: Phase needs planning**
193
+
194
+ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
195
+
196
+ **If CONTEXT.md exists:**
197
+
198
+ ```
199
+ ---
200
+
201
+ ## ▶ Next Up
202
+
203
+ **Phase {N}: {Name}** — {Goal from ROADMAP.md}
204
+ <sub>✓ Context gathered, ready to plan</sub>
205
+
206
+ `/ez:plan-phase {phase-number}`
207
+
208
+ <sub>`/clear` first → fresh context window</sub>
209
+
210
+ ---
211
+ ```
212
+
213
+ **If CONTEXT.md does NOT exist:**
214
+
215
+ ```
216
+ ---
217
+
218
+ ## ▶ Next Up
219
+
220
+ **Phase {N}: {Name}** — {Goal from ROADMAP.md}
221
+
222
+ `/ez:discuss-phase {phase}` — gather context and clarify approach
223
+
224
+ <sub>`/clear` first → fresh context window</sub>
225
+
226
+ ---
227
+
228
+ **Also available:**
229
+ - `/ez:plan-phase {phase}` — skip discussion, plan directly
230
+ - `/ez:list-phase-assumptions {phase}` — see Claude's assumptions
231
+
232
+ ---
233
+ ```
234
+
235
+ ---
236
+
237
+ **Route E: UAT gaps need fix plans**
238
+
239
+ UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
240
+
241
+ ```
242
+ ---
243
+
244
+ ## ⚠ UAT Gaps Found
245
+
246
+ **{phase_num}-UAT.md** has {N} gaps requiring fixes.
247
+
248
+ `/ez:plan-phase {phase} --gaps`
249
+
250
+ <sub>`/clear` first → fresh context window</sub>
251
+
252
+ ---
253
+
254
+ **Also available:**
255
+ - `/ez:execute-phase {phase}` — execute phase plans
256
+ - `/ez:verify-work {phase}` — run more UAT testing
257
+
258
+ ---
259
+ ```
260
+
261
+ ---
262
+
263
+ **Step 3: Check milestone status (only when phase complete)**
264
+
265
+ Read ROADMAP.md and identify:
266
+ 1. Current phase number
267
+ 2. All phase numbers in the current milestone section
268
+
269
+ Count total phases and identify the highest phase number.
270
+
271
+ State: "Current phase is {X}. Milestone has {N} phases (highest: {Y})."
272
+
273
+ **Route based on milestone status:**
274
+
275
+ | Condition | Meaning | Action |
276
+ |-----------|---------|--------|
277
+ | current phase < highest phase | More phases remain | Go to **Route C** |
278
+ | current phase = highest phase | Milestone complete | Go to **Route D** |
279
+
280
+ ---
281
+
282
+ **Route C: Phase complete, more phases remain**
283
+
284
+ Read ROADMAP.md to get the next phase's name and goal.
285
+
286
+ ```
287
+ ---
288
+
289
+ ## ✓ Phase {Z} Complete
290
+
291
+ ## ▶ Next Up
292
+
293
+ **Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
294
+
295
+ `/ez:discuss-phase {Z+1}` — gather context and clarify approach
296
+
297
+ <sub>`/clear` first → fresh context window</sub>
298
+
299
+ ---
300
+
301
+ **Also available:**
302
+ - `/ez:plan-phase {Z+1}` — skip discussion, plan directly
303
+ - `/ez:verify-work {Z}` — user acceptance test before continuing
304
+
305
+ ---
306
+ ```
307
+
308
+ ---
309
+
310
+ **Route D: Milestone complete**
311
+
312
+ ```
313
+ ---
314
+
315
+ ## 🎉 Milestone Complete
316
+
317
+ All {N} phases finished!
318
+
319
+ ## ▶ Next Up
320
+
321
+ **Complete Milestone** — archive and prepare for next
322
+
323
+ `/ez:complete-milestone`
324
+
325
+ <sub>`/clear` first → fresh context window</sub>
326
+
327
+ ---
328
+
329
+ **Also available:**
330
+ - `/ez:verify-work` — user acceptance test before completing milestone
331
+
332
+ ---
333
+ ```
334
+
335
+ ---
336
+
337
+ **Route F: Between milestones (ROADMAP.md missing, PROJECT.md exists)**
338
+
339
+ A milestone was completed and archived. Ready to start the next milestone cycle.
340
+
341
+ Read MILESTONES.md to find the last completed milestone version.
342
+
343
+ ```
344
+ ---
345
+
346
+ ## ✓ Milestone v{X.Y} Complete
347
+
348
+ Ready to plan the next milestone.
349
+
350
+ ## ▶ Next Up
351
+
352
+ **Start Next Milestone** — questioning → research → requirements → roadmap
353
+
354
+ `/ez:new-milestone`
355
+
356
+ <sub>`/clear` first → fresh context window</sub>
357
+
358
+ ---
359
+ ```
360
+
361
+ </step>
362
+
363
+ <step name="edge_cases">
364
+ **Handle edge cases:**
365
+
366
+ - Phase complete but next phase not planned → offer `/ez:plan-phase [next]`
367
+ - All work complete → offer milestone completion
368
+ - Blockers present → highlight before offering to continue
369
+ - Handoff file exists → mention it, offer `/ez:resume-work`
370
+ </step>
371
+
372
+ </process>
373
+
374
+ <success_criteria>
375
+
376
+ - [ ] Rich context provided (recent work, decisions, issues)
377
+ - [ ] Current position clear with visual progress
378
+ - [ ] What's next clearly explained
379
+ - [ ] Smart routing: /ez:execute-phase if plans exist, /ez:plan-phase if not
380
+ - [ ] User confirms before any action
381
+ - [ ] Seamless handoff to appropriate gsd command
382
+ </success_criteria>