@howlil/ez-agents 2.0.0 → 2.0.1

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 (106) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +93 -93
  3. package/agents/ez-plan-checker.md +2 -2
  4. package/agents/ez-research-synthesizer.md +1 -1
  5. package/agents/ez-ui-researcher.md +1 -1
  6. package/agents/ez-verifier.md +1 -1
  7. package/bin/install.js +132 -132
  8. package/get-shit-done/bin/lib/assistant-adapter.cjs +205 -205
  9. package/get-shit-done/bin/lib/audit-exec.cjs +150 -150
  10. package/get-shit-done/bin/lib/auth.cjs +175 -175
  11. package/get-shit-done/bin/lib/circuit-breaker.cjs +118 -118
  12. package/get-shit-done/bin/lib/commands.cjs +666 -666
  13. package/get-shit-done/bin/lib/config.cjs +183 -183
  14. package/get-shit-done/bin/lib/core.cjs +495 -495
  15. package/get-shit-done/bin/lib/file-lock.cjs +236 -236
  16. package/get-shit-done/bin/lib/frontmatter.cjs +299 -299
  17. package/get-shit-done/bin/lib/fs-utils.cjs +153 -153
  18. package/get-shit-done/bin/lib/git-utils.cjs +203 -203
  19. package/get-shit-done/bin/lib/health-check.cjs +163 -163
  20. package/get-shit-done/bin/lib/index.cjs +113 -113
  21. package/get-shit-done/bin/lib/init.cjs +710 -710
  22. package/get-shit-done/bin/lib/logger.cjs +117 -117
  23. package/get-shit-done/bin/lib/milestone.cjs +241 -241
  24. package/get-shit-done/bin/lib/model-provider.cjs +146 -146
  25. package/get-shit-done/bin/lib/phase.cjs +908 -908
  26. package/get-shit-done/bin/lib/retry.cjs +119 -119
  27. package/get-shit-done/bin/lib/roadmap.cjs +305 -305
  28. package/get-shit-done/bin/lib/safe-exec.cjs +128 -128
  29. package/get-shit-done/bin/lib/safe-path.cjs +130 -130
  30. package/get-shit-done/bin/lib/state.cjs +721 -721
  31. package/get-shit-done/bin/lib/temp-file.cjs +239 -239
  32. package/get-shit-done/bin/lib/template.cjs +222 -222
  33. package/get-shit-done/bin/lib/test-file-lock.cjs +112 -112
  34. package/get-shit-done/bin/lib/test-graceful.cjs +93 -93
  35. package/get-shit-done/bin/lib/test-logger.cjs +60 -60
  36. package/get-shit-done/bin/lib/test-safe-exec.cjs +38 -38
  37. package/get-shit-done/bin/lib/test-safe-path.cjs +33 -33
  38. package/get-shit-done/bin/lib/test-temp-file.cjs +125 -125
  39. package/get-shit-done/bin/lib/timeout-exec.cjs +62 -62
  40. package/get-shit-done/bin/lib/verify.cjs +820 -820
  41. package/get-shit-done/references/checkpoints.md +776 -776
  42. package/get-shit-done/references/questioning.md +162 -162
  43. package/get-shit-done/references/tdd.md +263 -263
  44. package/get-shit-done/templates/codebase/concerns.md +310 -310
  45. package/get-shit-done/templates/codebase/conventions.md +307 -307
  46. package/get-shit-done/templates/codebase/integrations.md +280 -280
  47. package/get-shit-done/templates/codebase/stack.md +186 -186
  48. package/get-shit-done/templates/codebase/testing.md +480 -480
  49. package/get-shit-done/templates/config.json +37 -37
  50. package/get-shit-done/templates/continue-here.md +78 -78
  51. package/get-shit-done/templates/milestone-archive.md +123 -123
  52. package/get-shit-done/templates/milestone.md +115 -115
  53. package/get-shit-done/templates/requirements.md +231 -231
  54. package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -204
  55. package/get-shit-done/templates/research-project/FEATURES.md +147 -147
  56. package/get-shit-done/templates/research-project/PITFALLS.md +200 -200
  57. package/get-shit-done/templates/research-project/STACK.md +120 -120
  58. package/get-shit-done/templates/research-project/SUMMARY.md +170 -170
  59. package/get-shit-done/templates/retrospective.md +54 -54
  60. package/get-shit-done/templates/roadmap.md +202 -202
  61. package/get-shit-done/templates/summary-minimal.md +41 -41
  62. package/get-shit-done/templates/summary-standard.md +48 -48
  63. package/get-shit-done/templates/summary.md +248 -248
  64. package/get-shit-done/templates/user-setup.md +311 -311
  65. package/get-shit-done/templates/verification-report.md +322 -322
  66. package/get-shit-done/workflows/add-phase.md +112 -112
  67. package/get-shit-done/workflows/add-tests.md +351 -351
  68. package/get-shit-done/workflows/add-todo.md +158 -158
  69. package/get-shit-done/workflows/audit-milestone.md +332 -332
  70. package/get-shit-done/workflows/autonomous.md +743 -743
  71. package/get-shit-done/workflows/check-todos.md +177 -177
  72. package/get-shit-done/workflows/cleanup.md +152 -152
  73. package/get-shit-done/workflows/complete-milestone.md +766 -766
  74. package/get-shit-done/workflows/diagnose-issues.md +219 -219
  75. package/get-shit-done/workflows/discovery-phase.md +289 -289
  76. package/get-shit-done/workflows/discuss-phase.md +762 -762
  77. package/get-shit-done/workflows/execute-phase.md +468 -468
  78. package/get-shit-done/workflows/execute-plan.md +483 -483
  79. package/get-shit-done/workflows/health.md +159 -159
  80. package/get-shit-done/workflows/help.md +492 -492
  81. package/get-shit-done/workflows/insert-phase.md +130 -130
  82. package/get-shit-done/workflows/list-phase-assumptions.md +178 -178
  83. package/get-shit-done/workflows/map-codebase.md +316 -316
  84. package/get-shit-done/workflows/new-milestone.md +384 -384
  85. package/get-shit-done/workflows/new-project.md +1111 -1111
  86. package/get-shit-done/workflows/node-repair.md +92 -92
  87. package/get-shit-done/workflows/pause-work.md +122 -122
  88. package/get-shit-done/workflows/plan-milestone-gaps.md +274 -274
  89. package/get-shit-done/workflows/plan-phase.md +651 -651
  90. package/get-shit-done/workflows/progress.md +382 -382
  91. package/get-shit-done/workflows/quick.md +610 -610
  92. package/get-shit-done/workflows/remove-phase.md +155 -155
  93. package/get-shit-done/workflows/research-phase.md +74 -74
  94. package/get-shit-done/workflows/resume-project.md +307 -307
  95. package/get-shit-done/workflows/set-profile.md +81 -81
  96. package/get-shit-done/workflows/settings.md +242 -242
  97. package/get-shit-done/workflows/stats.md +57 -57
  98. package/get-shit-done/workflows/transition.md +544 -544
  99. package/get-shit-done/workflows/ui-phase.md +290 -290
  100. package/get-shit-done/workflows/ui-review.md +157 -157
  101. package/get-shit-done/workflows/update.md +320 -320
  102. package/get-shit-done/workflows/validate-phase.md +167 -167
  103. package/get-shit-done/workflows/verify-phase.md +243 -243
  104. package/package.json +1 -1
  105. package/scripts/build-hooks.js +43 -43
  106. package/scripts/run-tests.cjs +29 -29
@@ -1,92 +1,92 @@
1
- <purpose>
2
- Autonomous repair operator for failed task verification. Invoked by execute-plan when a task fails its done-criteria. Proposes and attempts structured fixes before escalating to the user.
3
- </purpose>
4
-
5
- <inputs>
6
- - FAILED_TASK: Task number, name, and done-criteria from the plan
7
- - ERROR: What verification produced — actual result vs expected
8
- - PLAN_CONTEXT: Adjacent tasks and phase goal (for constraint awareness)
9
- - REPAIR_BUDGET: Max repair attempts remaining (default: 2)
10
- </inputs>
11
-
12
- <repair_directive>
13
- Analyze the failure and choose exactly one repair strategy:
14
-
15
- **RETRY** — The approach was right but execution failed. Try again with a concrete adjustment.
16
- - Use when: command error, missing dependency, wrong path, env issue, transient failure
17
- - Output: `RETRY: [specific adjustment to make before retrying]`
18
-
19
- **DECOMPOSE** — The task is too coarse. Break it into smaller verifiable sub-steps.
20
- - Use when: done-criteria covers multiple concerns, implementation gaps are structural
21
- - Output: `DECOMPOSE: [sub-task 1] | [sub-task 2] | ...` (max 3 sub-tasks)
22
- - Sub-tasks must each have a single verifiable outcome
23
-
24
- **PRUNE** — The task is infeasible given current constraints. Skip with justification.
25
- - Use when: prerequisite missing and not fixable here, out of scope, contradicts an earlier decision
26
- - Output: `PRUNE: [one-sentence justification]`
27
-
28
- **ESCALATE** — Repair budget exhausted, or this is an architectural decision (Rule 4).
29
- - Use when: RETRY failed more than once with different approaches, or fix requires structural change
30
- - Output: `ESCALATE: [what was tried] | [what decision is needed]`
31
- </repair_directive>
32
-
33
- <process>
34
-
35
- <step name="diagnose">
36
- Read the error and done-criteria carefully. Ask:
37
- 1. Is this a transient/environmental issue? → RETRY
38
- 2. Is the task verifiably too broad? → DECOMPOSE
39
- 3. Is a prerequisite genuinely missing and unfixable in scope? → PRUNE
40
- 4. Has RETRY already been attempted with this task? Check REPAIR_BUDGET. If 0 → ESCALATE
41
- </step>
42
-
43
- <step name="execute_retry">
44
- If RETRY:
45
- 1. Apply the specific adjustment stated in the directive
46
- 2. Re-run the task implementation
47
- 3. Re-run verification
48
- 4. If passes → continue normally, log `[Node Repair - RETRY] Task [X]: [adjustment made]`
49
- 5. If fails again → decrement REPAIR_BUDGET, re-invoke node-repair with updated context
50
- </step>
51
-
52
- <step name="execute_decompose">
53
- If DECOMPOSE:
54
- 1. Replace the failed task inline with the sub-tasks (do not modify PLAN.md on disk)
55
- 2. Execute sub-tasks sequentially, each with its own verification
56
- 3. If all sub-tasks pass → treat original task as succeeded, log `[Node Repair - DECOMPOSE] Task [X] → [N] sub-tasks`
57
- 4. If a sub-task fails → re-invoke node-repair for that sub-task (REPAIR_BUDGET applies per sub-task)
58
- </step>
59
-
60
- <step name="execute_prune">
61
- If PRUNE:
62
- 1. Mark task as skipped with justification
63
- 2. Log to SUMMARY "Issues Encountered": `[Node Repair - PRUNE] Task [X]: [justification]`
64
- 3. Continue to next task
65
- </step>
66
-
67
- <step name="execute_escalate">
68
- If ESCALATE:
69
- 1. Surface to user via verification_failure_gate with full repair history
70
- 2. Present: what was tried (each RETRY/DECOMPOSE attempt), what the blocker is, options available
71
- 3. Wait for user direction before continuing
72
- </step>
73
-
74
- </process>
75
-
76
- <logging>
77
- All repair actions must appear in SUMMARY.md under "## Deviations from Plan":
78
-
79
- | Type | Format |
80
- |------|--------|
81
- | RETRY success | `[Node Repair - RETRY] Task X: [adjustment] — resolved` |
82
- | RETRY fail → ESCALATE | `[Node Repair - RETRY] Task X: [N] attempts exhausted — escalated to user` |
83
- | DECOMPOSE | `[Node Repair - DECOMPOSE] Task X split into [N] sub-tasks — all passed` |
84
- | PRUNE | `[Node Repair - PRUNE] Task X skipped: [justification]` |
85
- </logging>
86
-
87
- <constraints>
88
- - REPAIR_BUDGET defaults to 2 per task. Configurable via config.json `workflow.node_repair_budget`.
89
- - Never modify PLAN.md on disk — decomposed sub-tasks are in-memory only.
90
- - DECOMPOSE sub-tasks must be more specific than the original, not synonymous rewrites.
91
- - If config.json `workflow.node_repair` is `false`, skip directly to verification_failure_gate (user retains original behavior).
92
- </constraints>
1
+ <purpose>
2
+ Autonomous repair operator for failed task verification. Invoked by execute-plan when a task fails its done-criteria. Proposes and attempts structured fixes before escalating to the user.
3
+ </purpose>
4
+
5
+ <inputs>
6
+ - FAILED_TASK: Task number, name, and done-criteria from the plan
7
+ - ERROR: What verification produced — actual result vs expected
8
+ - PLAN_CONTEXT: Adjacent tasks and phase goal (for constraint awareness)
9
+ - REPAIR_BUDGET: Max repair attempts remaining (default: 2)
10
+ </inputs>
11
+
12
+ <repair_directive>
13
+ Analyze the failure and choose exactly one repair strategy:
14
+
15
+ **RETRY** — The approach was right but execution failed. Try again with a concrete adjustment.
16
+ - Use when: command error, missing dependency, wrong path, env issue, transient failure
17
+ - Output: `RETRY: [specific adjustment to make before retrying]`
18
+
19
+ **DECOMPOSE** — The task is too coarse. Break it into smaller verifiable sub-steps.
20
+ - Use when: done-criteria covers multiple concerns, implementation gaps are structural
21
+ - Output: `DECOMPOSE: [sub-task 1] | [sub-task 2] | ...` (max 3 sub-tasks)
22
+ - Sub-tasks must each have a single verifiable outcome
23
+
24
+ **PRUNE** — The task is infeasible given current constraints. Skip with justification.
25
+ - Use when: prerequisite missing and not fixable here, out of scope, contradicts an earlier decision
26
+ - Output: `PRUNE: [one-sentence justification]`
27
+
28
+ **ESCALATE** — Repair budget exhausted, or this is an architectural decision (Rule 4).
29
+ - Use when: RETRY failed more than once with different approaches, or fix requires structural change
30
+ - Output: `ESCALATE: [what was tried] | [what decision is needed]`
31
+ </repair_directive>
32
+
33
+ <process>
34
+
35
+ <step name="diagnose">
36
+ Read the error and done-criteria carefully. Ask:
37
+ 1. Is this a transient/environmental issue? → RETRY
38
+ 2. Is the task verifiably too broad? → DECOMPOSE
39
+ 3. Is a prerequisite genuinely missing and unfixable in scope? → PRUNE
40
+ 4. Has RETRY already been attempted with this task? Check REPAIR_BUDGET. If 0 → ESCALATE
41
+ </step>
42
+
43
+ <step name="execute_retry">
44
+ If RETRY:
45
+ 1. Apply the specific adjustment stated in the directive
46
+ 2. Re-run the task implementation
47
+ 3. Re-run verification
48
+ 4. If passes → continue normally, log `[Node Repair - RETRY] Task [X]: [adjustment made]`
49
+ 5. If fails again → decrement REPAIR_BUDGET, re-invoke node-repair with updated context
50
+ </step>
51
+
52
+ <step name="execute_decompose">
53
+ If DECOMPOSE:
54
+ 1. Replace the failed task inline with the sub-tasks (do not modify PLAN.md on disk)
55
+ 2. Execute sub-tasks sequentially, each with its own verification
56
+ 3. If all sub-tasks pass → treat original task as succeeded, log `[Node Repair - DECOMPOSE] Task [X] → [N] sub-tasks`
57
+ 4. If a sub-task fails → re-invoke node-repair for that sub-task (REPAIR_BUDGET applies per sub-task)
58
+ </step>
59
+
60
+ <step name="execute_prune">
61
+ If PRUNE:
62
+ 1. Mark task as skipped with justification
63
+ 2. Log to SUMMARY "Issues Encountered": `[Node Repair - PRUNE] Task [X]: [justification]`
64
+ 3. Continue to next task
65
+ </step>
66
+
67
+ <step name="execute_escalate">
68
+ If ESCALATE:
69
+ 1. Surface to user via verification_failure_gate with full repair history
70
+ 2. Present: what was tried (each RETRY/DECOMPOSE attempt), what the blocker is, options available
71
+ 3. Wait for user direction before continuing
72
+ </step>
73
+
74
+ </process>
75
+
76
+ <logging>
77
+ All repair actions must appear in SUMMARY.md under "## Deviations from Plan":
78
+
79
+ | Type | Format |
80
+ |------|--------|
81
+ | RETRY success | `[Node Repair - RETRY] Task X: [adjustment] — resolved` |
82
+ | RETRY fail → ESCALATE | `[Node Repair - RETRY] Task X: [N] attempts exhausted — escalated to user` |
83
+ | DECOMPOSE | `[Node Repair - DECOMPOSE] Task X split into [N] sub-tasks — all passed` |
84
+ | PRUNE | `[Node Repair - PRUNE] Task X skipped: [justification]` |
85
+ </logging>
86
+
87
+ <constraints>
88
+ - REPAIR_BUDGET defaults to 2 per task. Configurable via config.json `workflow.node_repair_budget`.
89
+ - Never modify PLAN.md on disk — decomposed sub-tasks are in-memory only.
90
+ - DECOMPOSE sub-tasks must be more specific than the original, not synonymous rewrites.
91
+ - If config.json `workflow.node_repair` is `false`, skip directly to verification_failure_gate (user retains original behavior).
92
+ </constraints>
@@ -1,122 +1,122 @@
1
- <purpose>
2
- Create `.continue-here.md` handoff file to preserve complete work state across sessions. Enables seamless resumption with full context restoration.
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="detect">
12
- Find current phase directory from most recently modified files:
13
-
14
- ```bash
15
- # Find most recent phase directory with work
16
- ls -lt .planning/phases/*/PLAN.md 2>/dev/null | head -1 | grep -oP 'phases/\K[^/]+'
17
- ```
18
-
19
- If no active phase detected, ask user which phase they're pausing work on.
20
- </step>
21
-
22
- <step name="gather">
23
- **Collect complete state for handoff:**
24
-
25
- 1. **Current position**: Which phase, which plan, which task
26
- 2. **Work completed**: What got done this session
27
- 3. **Work remaining**: What's left in current plan/phase
28
- 4. **Decisions made**: Key decisions and rationale
29
- 5. **Blockers/issues**: Anything stuck
30
- 6. **Mental context**: The approach, next steps, "vibe"
31
- 7. **Files modified**: What's changed but not committed
32
-
33
- Ask user for clarifications if needed via conversational questions.
34
- </step>
35
-
36
- <step name="write">
37
- **Write handoff to `.planning/phases/XX-name/.continue-here.md`:**
38
-
39
- ```markdown
40
- ---
41
- phase: XX-name
42
- task: 3
43
- total_tasks: 7
44
- status: in_progress
45
- last_updated: [timestamp from current-timestamp]
46
- ---
47
-
48
- <current_state>
49
- [Where exactly are we? Immediate context]
50
- </current_state>
51
-
52
- <completed_work>
53
-
54
- - Task 1: [name] - Done
55
- - Task 2: [name] - Done
56
- - Task 3: [name] - In progress, [what's done]
57
- </completed_work>
58
-
59
- <remaining_work>
60
-
61
- - Task 3: [what's left]
62
- - Task 4: Not started
63
- - Task 5: Not started
64
- </remaining_work>
65
-
66
- <decisions_made>
67
-
68
- - Decided to use [X] because [reason]
69
- - Chose [approach] over [alternative] because [reason]
70
- </decisions_made>
71
-
72
- <blockers>
73
- - [Blocker 1]: [status/workaround]
74
- </blockers>
75
-
76
- <context>
77
- [Mental state, what were you thinking, the plan]
78
- </context>
79
-
80
- <next_action>
81
- Start with: [specific first action when resuming]
82
- </next_action>
83
- ```
84
-
85
- Be specific enough for a fresh Claude to understand immediately.
86
-
87
- Use `current-timestamp` for last_updated field. You can use init todos (which provides timestamps) or call directly:
88
- ```bash
89
- timestamp=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" current-timestamp full --raw)
90
- ```
91
- </step>
92
-
93
- <step name="commit">
94
- ```bash
95
- node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/phases/*/.continue-here.md
96
- ```
97
- </step>
98
-
99
- <step name="confirm">
100
- ```
101
- ✓ Handoff created: .planning/phases/[XX-name]/.continue-here.md
102
-
103
- Current state:
104
-
105
- - Phase: [XX-name]
106
- - Task: [X] of [Y]
107
- - Status: [in_progress/blocked]
108
- - Committed as WIP
109
-
110
- To resume: /ez:resume-work
111
-
112
- ```
113
- </step>
114
-
115
- </process>
116
-
117
- <success_criteria>
118
- - [ ] .continue-here.md created in correct phase directory
119
- - [ ] All sections filled with specific content
120
- - [ ] Committed as WIP
121
- - [ ] User knows location and how to resume
122
- </success_criteria>
1
+ <purpose>
2
+ Create `.continue-here.md` handoff file to preserve complete work state across sessions. Enables seamless resumption with full context restoration.
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="detect">
12
+ Find current phase directory from most recently modified files:
13
+
14
+ ```bash
15
+ # Find most recent phase directory with work
16
+ ls -lt .planning/phases/*/PLAN.md 2>/dev/null | head -1 | grep -oP 'phases/\K[^/]+'
17
+ ```
18
+
19
+ If no active phase detected, ask user which phase they're pausing work on.
20
+ </step>
21
+
22
+ <step name="gather">
23
+ **Collect complete state for handoff:**
24
+
25
+ 1. **Current position**: Which phase, which plan, which task
26
+ 2. **Work completed**: What got done this session
27
+ 3. **Work remaining**: What's left in current plan/phase
28
+ 4. **Decisions made**: Key decisions and rationale
29
+ 5. **Blockers/issues**: Anything stuck
30
+ 6. **Mental context**: The approach, next steps, "vibe"
31
+ 7. **Files modified**: What's changed but not committed
32
+
33
+ Ask user for clarifications if needed via conversational questions.
34
+ </step>
35
+
36
+ <step name="write">
37
+ **Write handoff to `.planning/phases/XX-name/.continue-here.md`:**
38
+
39
+ ```markdown
40
+ ---
41
+ phase: XX-name
42
+ task: 3
43
+ total_tasks: 7
44
+ status: in_progress
45
+ last_updated: [timestamp from current-timestamp]
46
+ ---
47
+
48
+ <current_state>
49
+ [Where exactly are we? Immediate context]
50
+ </current_state>
51
+
52
+ <completed_work>
53
+
54
+ - Task 1: [name] - Done
55
+ - Task 2: [name] - Done
56
+ - Task 3: [name] - In progress, [what's done]
57
+ </completed_work>
58
+
59
+ <remaining_work>
60
+
61
+ - Task 3: [what's left]
62
+ - Task 4: Not started
63
+ - Task 5: Not started
64
+ </remaining_work>
65
+
66
+ <decisions_made>
67
+
68
+ - Decided to use [X] because [reason]
69
+ - Chose [approach] over [alternative] because [reason]
70
+ </decisions_made>
71
+
72
+ <blockers>
73
+ - [Blocker 1]: [status/workaround]
74
+ </blockers>
75
+
76
+ <context>
77
+ [Mental state, what were you thinking, the plan]
78
+ </context>
79
+
80
+ <next_action>
81
+ Start with: [specific first action when resuming]
82
+ </next_action>
83
+ ```
84
+
85
+ Be specific enough for a fresh Claude to understand immediately.
86
+
87
+ Use `current-timestamp` for last_updated field. You can use init todos (which provides timestamps) or call directly:
88
+ ```bash
89
+ timestamp=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" current-timestamp full --raw)
90
+ ```
91
+ </step>
92
+
93
+ <step name="commit">
94
+ ```bash
95
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/phases/*/.continue-here.md
96
+ ```
97
+ </step>
98
+
99
+ <step name="confirm">
100
+ ```
101
+ ✓ Handoff created: .planning/phases/[XX-name]/.continue-here.md
102
+
103
+ Current state:
104
+
105
+ - Phase: [XX-name]
106
+ - Task: [X] of [Y]
107
+ - Status: [in_progress/blocked]
108
+ - Committed as WIP
109
+
110
+ To resume: /ez:resume-work
111
+
112
+ ```
113
+ </step>
114
+
115
+ </process>
116
+
117
+ <success_criteria>
118
+ - [ ] .continue-here.md created in correct phase directory
119
+ - [ ] All sections filled with specific content
120
+ - [ ] Committed as WIP
121
+ - [ ] User knows location and how to resume
122
+ </success_criteria>