@rse/ase 0.9.7 → 0.9.9

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 (85) hide show
  1. package/dst/ase-getopt.js +71 -5
  2. package/dst/ase-hook.js +6 -21
  3. package/dst/ase-markdown.js +32 -11
  4. package/dst/ase-mcp.js +22 -8
  5. package/dst/ase-notify.js +32 -0
  6. package/dst/ase-service.js +5 -2
  7. package/dst/ase-setup.js +45 -131
  8. package/dst/ase-skills.js +17 -13
  9. package/dst/ase-statusline.js +8 -12
  10. package/dst/ase-task.js +32 -23
  11. package/package.json +3 -3
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/.github/plugin/plugin.json +1 -1
  14. package/plugin/agents/ase-docs-proofread.md +2 -2
  15. package/plugin/meta/ase-constitution.md +7 -0
  16. package/plugin/meta/ase-control.md +24 -3
  17. package/plugin/meta/ase-dialog.md +105 -7
  18. package/plugin/meta/ase-format-task.md +2 -2
  19. package/plugin/meta/ase-getopt.md +31 -22
  20. package/plugin/meta/ase-skill.md +87 -12
  21. package/plugin/package.json +2 -2
  22. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  23. package/plugin/skills/ase-arch-analyze/help.md +2 -2
  24. package/plugin/skills/ase-arch-discover/SKILL.md +56 -34
  25. package/plugin/skills/ase-arch-discover/help.md +1 -1
  26. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  27. package/plugin/skills/ase-code-analyze/help.md +2 -2
  28. package/plugin/skills/ase-code-craft/SKILL.md +83 -71
  29. package/plugin/skills/ase-code-craft/help.md +2 -2
  30. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  31. package/plugin/skills/ase-code-explain/help.md +1 -1
  32. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  33. package/plugin/skills/ase-code-insight/help.md +1 -1
  34. package/plugin/skills/ase-code-lint/SKILL.md +35 -18
  35. package/plugin/skills/ase-code-lint/help.md +2 -2
  36. package/plugin/skills/ase-code-refactor/SKILL.md +81 -70
  37. package/plugin/skills/ase-code-refactor/help.md +2 -2
  38. package/plugin/skills/ase-code-resolve/SKILL.md +83 -70
  39. package/plugin/skills/ase-code-resolve/help.md +3 -3
  40. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  41. package/plugin/skills/ase-docs-distill/help.md +4 -4
  42. package/plugin/skills/ase-docs-proofread/SKILL.md +36 -19
  43. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  44. package/plugin/skills/ase-meta-brainstorm/SKILL.md +29 -8
  45. package/plugin/skills/ase-meta-brainstorm/help.md +7 -11
  46. package/plugin/skills/ase-meta-changelog/help.md +1 -1
  47. package/plugin/skills/ase-meta-chat/help.md +1 -1
  48. package/plugin/skills/ase-meta-commit/help.md +1 -1
  49. package/plugin/skills/ase-meta-diaboli/help.md +2 -2
  50. package/plugin/skills/ase-meta-diff/SKILL.md +6 -5
  51. package/plugin/skills/ase-meta-diff/help.md +11 -12
  52. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  53. package/plugin/skills/ase-meta-evaluate/help.md +2 -2
  54. package/plugin/skills/ase-meta-persona/help.md +1 -1
  55. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  56. package/plugin/skills/ase-meta-quorum/help.md +1 -1
  57. package/plugin/skills/ase-meta-review/SKILL.md +3 -4
  58. package/plugin/skills/ase-meta-review/help.md +5 -5
  59. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  60. package/plugin/skills/ase-meta-search/help.md +1 -1
  61. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-steelman/help.md +2 -2
  63. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  64. package/plugin/skills/ase-meta-why/help.md +1 -1
  65. package/plugin/skills/ase-task-condense/SKILL.md +36 -19
  66. package/plugin/skills/ase-task-condense/help.md +3 -3
  67. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  68. package/plugin/skills/ase-task-delete/help.md +2 -2
  69. package/plugin/skills/ase-task-edit/SKILL.md +61 -36
  70. package/plugin/skills/ase-task-edit/help.md +4 -4
  71. package/plugin/skills/ase-task-grill/SKILL.md +57 -26
  72. package/plugin/skills/ase-task-grill/help.md +3 -3
  73. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  74. package/plugin/skills/ase-task-id/help.md +2 -2
  75. package/plugin/skills/ase-task-implement/SKILL.md +40 -17
  76. package/plugin/skills/ase-task-implement/help.md +2 -2
  77. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  78. package/plugin/skills/ase-task-list/help.md +2 -2
  79. package/plugin/skills/ase-task-preflight/SKILL.md +44 -22
  80. package/plugin/skills/ase-task-preflight/help.md +3 -3
  81. package/plugin/skills/ase-task-reboot/SKILL.md +31 -20
  82. package/plugin/skills/ase-task-reboot/help.md +2 -2
  83. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  84. package/plugin/skills/ase-task-rename/help.md +2 -2
  85. package/plugin/skills/ase-task-view/help.md +26 -7
@@ -106,13 +106,15 @@ addressing surface-level symptoms.
106
106
 
107
107
  Ask <question/> and surface up to <width/> *distinct*,
108
108
  *non-overlapping* candidate sub-causes, each documented in <answer-k/>.
109
+ Let <count/> be the number of candidates you actually surfaced
110
+ (at least one, at most <width/>).
109
111
  Don't stop at symptoms, keep digging for systemic issues.
110
112
  Explore *different* candidates -- technical, domain-specific,
111
113
  process-related, or organizational causes -- and avoid restating
112
114
  the same cause in different words.
113
115
 
114
116
  Start with <k>1</k> (set candidate counter to one).
115
- <while condition="<k/> is less than or equal to <width/>">
117
+ <while condition="<k/> is less than or equal to <count/>">
116
118
  <template>
117
119
  <ase-tpl-bullet-secondary/> **WHY <n/>.<k/>**: <answer-k/>
118
120
  </template>
@@ -150,15 +152,19 @@ addressing surface-level symptoms.
150
152
  whole chain up to the original <problem/>).
151
153
 
152
154
  When <width/> is *greater than 1* and this backward validation *fails* at
153
- some level -- i.e. the chosen sub-cause does *not* adequately explain the
154
- fact above it -- *backtrack*: discard the chosen sub-cause from that level
155
- downward, pick the next-best candidate from that level's <fallbacks/>, set
156
- <question/> to it, and re-run the STEP 2 widened descent from there. Repeat
157
- until a chain survives backward validation or that level's <fallbacks/> are
158
- exhausted (then report the strongest chain found and note that no candidate
159
- fully validated). This is the payoff of <width/> *greater than 1*: the
160
- enumerated alternatives let the analysis *recover* from a wrong turn instead
161
- of committing to a mis-rooted chain.
155
+ some level <m/> -- i.e. the chosen sub-cause does *not* adequately explain
156
+ the fact above it -- *backtrack*: discard the chosen sub-cause (and every
157
+ chosen sub-cause below it) from level <m/> downward, pick the next-best
158
+ candidate from level <m/>'s <fallbacks/>, and resume the STEP 2 widened
159
+ descent: set <n/> to <m/> (reset the iteration counter to the failed level),
160
+ set <question/> to the picked candidate, and re-enter STEP 2's
161
+ <while condition="<n/> is less than or equal to <depth/>"/> loop at that
162
+ level -- so the original <depth/> budget is honored from <m/> downward.
163
+ Repeat until a chain survives backward validation or level <m/>'s
164
+ <fallbacks/> are exhausted (then report the strongest chain found and note
165
+ that no candidate fully validated). This is the payoff of <width/> *greater
166
+ than 1*: the enumerated alternatives let the analysis *recover* from a wrong
167
+ turn instead of committing to a mis-rooted chain.
162
168
 
163
169
  Propose a solution that addresses and solves the validated root-cause.
164
170
  For the proposed solution, optionally directly propose corresponding source code changes.
@@ -77,4 +77,4 @@ committing early to the wrong root-cause:
77
77
 
78
78
  ## SEE ALSO
79
79
 
80
- `ase-code-analyze`, `ase-code-resolve`, `ase-arch-analyze`.
80
+ [`ase-code-analyze`](../ase-code-analyze/help.md), [`ase-code-resolve`](../ase-code-resolve/help.md), [`ase-arch-analyze`](../ase-arch-analyze/help.md).
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
65
65
  </template>
66
66
  </if>
67
67
 
68
- 2. else <if condition="<instruction/> is NOT empty">
68
+ 2. <elseif condition="<instruction/> is NOT empty">
69
69
  The argument is neither empty nor a valid task id. As this
70
70
  skill only accepts an optional `[<id>]` argument and *never*
71
71
  a free-text instruction, only output the following <template/>
@@ -74,7 +74,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
74
74
  <template>
75
75
  ⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: expected single `[<id>]` argument
76
76
  </template>
77
- </if>
77
+ </elseif>
78
78
 
79
79
  2. **Determine Operation:**
80
80
 
@@ -114,9 +114,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
114
114
  and unchanged*. Honor the following ruleset *strictly*:
115
115
 
116
116
  1. *Preserve-exactly (never alter)*: the plan <format/>
117
- structure (the headings `#`/`##`, the `※`/`◉`/`✪` markers,
118
- all three `## ※ CONTEXT`, `## ※ CHANGES`, and `##
119
- VERIFICATION` sections, the `created:`/`modified:` line, and
117
+ structure (the headings `#`/`##`, all three `## CONTEXT`,
118
+ `## CHANGES`, and `## VERIFICATION` sections, the
119
+ `Created:`/`Modified:` lines, and
120
120
  the `- **<aspect/>**:` bullet labels), all *code spans* and
121
121
  code blocks, technical terms, file paths, identifiers,
122
122
  numbers, severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and
@@ -203,9 +203,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
203
203
  </template>
204
204
 
205
205
  - If <getopt-option-next/> is equal to `none`:
206
- Let the *user interactively choose* what to do as the next step.
206
+ Let the *user interactively choose* what to do as the next
207
+ step. For this you *MUST* use the custom `custom-dialog` and
208
+ *NOT* the `AskUserQuestion` based "user-dialog":
207
209
 
208
- <expand name="user-dialog">
210
+ <expand name="custom-dialog">
209
211
  Next Step: How would you like to proceed with the plan?
210
212
  DONE: Stop processing.
211
213
  EDIT: Hand off plan to editing.
@@ -223,13 +225,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
223
225
  </template>
224
226
 
225
227
  - If <result/> is `EDIT`:
226
- Set <args></args> (empty).
228
+ Set <args></args> (set args to empty).
229
+ <if condition="the condensed plan was saved via `ase_task_save` in step 3">
230
+ Set <args>--int-reuse-task</args>.
231
+ </if>
227
232
  <if condition="<getopt-option-next/> is not equal `none`">
228
- Set <args>--next <getopt-option-next/></args> (forward
229
- remaining list tokens to the downstream skill).
233
+ Set <args><args/> --next <getopt-option-next/></args>
230
234
  </if>
231
235
  Only output the following <template/> and then call the
232
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
236
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
233
237
  to invoke the `ase:ase-task-edit` skill in order to *edit*
234
238
  the condensed plan. Immediately stop processing the current
235
239
  skill once the `Skill` tool was used.
@@ -239,13 +243,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
239
243
  </template>
240
244
 
241
245
  - If <result/> is `IMPLEMENT`:
242
- Set <args></args> (empty).
246
+ Set <args></args> (set args to empty).
247
+ <if condition="the condensed plan was saved via `ase_task_save` in step 3">
248
+ Set <args>--int-reuse-task</args>.
249
+ </if>
243
250
  <if condition="<getopt-option-next/> is not equal `none`">
244
- Set <args>--next <getopt-option-next/></args> (forward
245
- remaining list tokens to the downstream skill).
251
+ Set <args><args/> --next <getopt-option-next/></args>
246
252
  </if>
247
253
  Only output the following <template/> and then call the
248
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
254
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
249
255
  to *apply* the plan.
250
256
 
251
257
  <template>
@@ -253,15 +259,26 @@ explicitly requested by this procedure via outputs based on a <template/>!
253
259
  </template>
254
260
 
255
261
  - If <result/> is `PREFLIGHT`:
256
- Set <args></args> (empty).
262
+ Set <args></args> (set args to empty).
263
+ <if condition="the condensed plan was saved via `ase_task_save` in step 3">
264
+ Set <args>--int-reuse-task</args>.
265
+ </if>
257
266
  <if condition="<getopt-option-next/> is not equal `none`">
258
- Set <args>--next <getopt-option-next/></args> (forward
259
- remaining list tokens to the downstream skill).
267
+ Set <args><args/> --next <getopt-option-next/></args>
260
268
  </if>
261
269
  Only output the following <template/> and then call the
262
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
270
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
263
271
  to *apply* the plan.
264
272
 
265
273
  <template>
266
274
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to pre-flight**
267
275
  </template>
276
+
277
+ - If <result/> matches `OTHER: <text/>` or is any other
278
+ unrecognized value:
279
+ Treat it as `DONE` (the condensed plan is already saved):
280
+ only output the following <template/> and then *STOP*.
281
+
282
+ <template>
283
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- done**
284
+ </template>
@@ -30,7 +30,7 @@ telegrapher-like even under the `writer` persona.
30
30
 
31
31
  The plan is saved *only* when condensing actually makes it smaller; if no
32
32
  further reduction is possible, the plan is left untouched (including its
33
- `✎ modified:` timestamp) and reported as *already condensed*.
33
+ `⚙ Modified:` timestamp) and reported as *already condensed*.
34
34
 
35
35
  After condensing, the user is asked whether to stop or hand off to
36
36
  `ase-task-edit`, `ase-task-implement`, or `ase-task-preflight`, unless
@@ -73,5 +73,5 @@ Condense a specific task and hand off to editing:
73
73
 
74
74
  ## SEE ALSO
75
75
 
76
- `ase-task-edit`, `ase-task-reboot`, `ase-task-view`,
77
- `ase-task-rename`, `ase-task-delete`.
76
+ [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md), [`ase-task-view`](../ase-task-view/help.md),
77
+ [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
@@ -35,6 +35,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
35
35
  1. Set <id>$ARGUMENTS</id> initially, with any leading and trailing
36
36
  whitespace stripped.
37
37
  Inherit the always existing <ase-task-id/> from the current context.
38
+ Inherit the always existing <ase-session-id/> from the current context.
38
39
  Do not output anything.
39
40
 
40
41
  2. <if condition="<id/> is empty">
@@ -59,20 +60,22 @@ explicitly requested by this procedure via outputs based on a <template/>!
59
60
  output anything related to this MCP tool call.
60
61
 
61
62
  - If <text/> starts with `ERROR:` or `WARNING:`:
62
- Only output the following <template/>:
63
+ Set <deleted>false</deleted> and only output the following
64
+ <template/>:
63
65
 
64
66
  <template>
65
67
  ⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **<text/>**
66
68
  </template>
67
69
 
68
70
  - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
69
- Only output the following <template/>:
71
+ Set <deleted>true</deleted> and only output the following
72
+ <template/>:
70
73
 
71
74
  <template>
72
75
  ⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **task deleted**
73
76
  </template>
74
77
 
75
- 2. <if condition="<id/> is equal <ase-task-id/> AND <ase-task-id/> is not equal 'default'">
78
+ 2. <if condition="<deleted/> is equal 'true' AND <id/> is equal <ase-task-id/> AND <ase-task-id/> is not equal 'default'">
76
79
  Set <ase-task-id>default</ase-task-id>. Call the `ase_task_id(id:
77
80
  "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase`
78
81
  MCP server to switch the task to the default task. Only output
@@ -39,5 +39,5 @@ Delete a specific task plan:
39
39
 
40
40
  ## SEE ALSO
41
41
 
42
- `ase-task-edit`, `ase-task-list`, `ase-task-view`,
43
- `ase-task-rename`, `ase-task-reboot`.
42
+ [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-list`](../ase-task-list/help.md), [`ase-task-view`](../ase-task-view/help.md),
43
+ [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md).
@@ -23,7 +23,7 @@ Iteratively Edit a Task Plan
23
23
 
24
24
  <expand name="getopt"
25
25
  arg1="ase-task-edit"
26
- arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|GRILL|PREFLIGHT|IMPLEMENT)...">
26
+ arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|GRILL|PREFLIGHT|IMPLEMENT)... --int-reuse-task">
27
27
  $ARGUMENTS
28
28
  </expand>
29
29
 
@@ -67,7 +67,7 @@ the <instruction/> and all decisions you derived from the
67
67
 
68
68
  If a `CHANGELOG.md` file exists in the project (or in any
69
69
  affected sub-package), the plan *MUST* include, as part of
70
- its `##CHANGES` section, an explicit bullet point
70
+ its `## CHANGES` section, an explicit bullet point
71
71
  describing the addition of a corresponding new entry to
72
72
  that `CHANGELOG.md` file, aligned with its existing style
73
73
  and conventions.
@@ -111,7 +111,7 @@ Set <content-dirty>true</content-dirty>.
111
111
  </template>
112
112
  </if>
113
113
 
114
- 2. else <if condition="
114
+ 2. <elseif condition="
115
115
  <instruction/> has the format `<id/>: <text/>` where
116
116
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
117
117
  <text/> is *empty*
@@ -126,9 +126,9 @@ Set <content-dirty>true</content-dirty>.
126
126
  <template>
127
127
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
128
128
  </template>
129
- </if>
129
+ </elseif>
130
130
 
131
- 3. else <if condition="
131
+ 3. <elseif condition="
132
132
  <instruction/> has the format `<id/>: <text/>` where
133
133
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
134
134
  <text/> is *not empty*
@@ -144,9 +144,9 @@ Set <content-dirty>true</content-dirty>.
144
144
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
145
145
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
146
146
  </template>
147
- </if>
147
+ </elseif>
148
148
 
149
- 4. else <if condition="
149
+ 4. <elseif condition="
150
150
  <instruction/> is not empty
151
151
  ">
152
152
  Only output the following <template/>:
@@ -155,9 +155,9 @@ Set <content-dirty>true</content-dirty>.
155
155
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
156
156
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
157
157
  </template>
158
- </if>
158
+ </elseif>
159
159
 
160
- 5. else <if condition="
160
+ 5. <elseif condition="
161
161
  <instruction/> is empty
162
162
  ">
163
163
  Only output the following <template/>:
@@ -165,14 +165,26 @@ Set <content-dirty>true</content-dirty>.
165
165
  <template>
166
166
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
167
167
  </template>
168
- </if>
168
+ </elseif>
169
169
 
170
170
  2. **Determine Plan:**
171
171
 
172
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
173
- server to load any existing plan content and set <text/> to
174
- the `text` output field of this `ase_task_load` tool call.
175
- Do not output anything related to this MCP tool call.
172
+ 1. Determine any existing plan content:
173
+
174
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
175
+ Set <text/> to the `text` argument of the most recent
176
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
177
+ *without* calling `ase_task_load` again. Set <status>plan
178
+ reused</status>. Do not output anything.
179
+ </if>
180
+ <else>
181
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
182
+ `ase` MCP server to load any existing plan content and set
183
+ <text/> to the `text` output field of this `ase_task_load`
184
+ tool call. Do not output anything related to this MCP tool
185
+ call. Set <status>plan loaded</status>.
186
+ </else>
187
+
176
188
  Set <content-dirty>false</content-dirty>.
177
189
 
178
190
  - If <text/> starts with `ERROR:`:
@@ -187,7 +199,7 @@ Set <content-dirty>true</content-dirty>.
187
199
  Only output the following <template/>:
188
200
 
189
201
  <template>
190
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
202
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
191
203
  </template>
192
204
 
193
205
  2. <if condition="<content/> is empty AND <instruction/> is empty">
@@ -214,9 +226,11 @@ Set <content-dirty>true</content-dirty>.
214
226
  Set <result><getopt-option-plan/></result>.
215
227
 
216
228
  - If <getopt-option-plan/> is equal to `none`:
217
- Let the *user interactively choose* what to do as the next step.
229
+ Let the *user interactively choose* what to do as the next
230
+ step. For this you *MUST* use the custom `custom-dialog` and
231
+ *NOT* the `AskUserQuestion` based "user-dialog":
218
232
 
219
- <expand name="user-dialog">
233
+ <expand name="custom-dialog">
220
234
  Previous Plan: Should the previous plan content be overwritten, refined, or preserved?
221
235
  OVERWRITE: Continue operation, overwrite previous plan.
222
236
  REFINE: Continue operation, refine previous plan.
@@ -271,7 +285,7 @@ Set <content-dirty>true</content-dirty>.
271
285
  </template>
272
286
  </if>
273
287
 
274
- 4. <if condition="<content/> does not contain '#TASK' AND <instruction/> is empty">
288
+ 4. <if condition="<content/> does not contain '# TASK' AND <instruction/> is empty">
275
289
  Set <instruction><content/></instruction> (set instruction to content).
276
290
  Set <content></content> (set content to empty).
277
291
  Set <content-dirty>true</content-dirty>.
@@ -296,12 +310,12 @@ Set <content-dirty>true</content-dirty>.
296
310
  `PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
297
311
 
298
312
  1. *Update timestamp*:
299
- <if condition="<content/> contains '✎ modified:' AND <content-dirty/> is 'true'">
313
+ <if condition="<content/> contains '⚙ Modified:' AND <content-dirty/> is 'true'">
300
314
  Update <timestamp-modified/> with the current time in
301
315
  ISO-style format, which has to be determined by calling the
302
316
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
303
317
  MCP server and use the `text` field of its response. Update
304
- <content/> with the new `✎ modified: **<timestamp-modified/>**`.
318
+ <content/> with the new `Modified: <timestamp-modified/>`.
305
319
  Do not output anything.
306
320
  </if>
307
321
 
@@ -350,8 +364,8 @@ Set <content-dirty>true</content-dirty>.
350
364
  Set <instruction></instruction> (clear the instruction, as
351
365
  any instruction carried in via the arguments was already
352
366
  applied to the plan in step 2 before this loop), so that a
353
- pre-selected `REFINE` correctly asks the user for a *fresh*
354
- refinement instruction below.
367
+ later `OTHER: <text/>` refinement correctly starts from a
368
+ *fresh* refinement instruction below.
355
369
 
356
370
  - else:
357
371
  Only output the following <template/> and then immediately
@@ -362,9 +376,11 @@ Set <content-dirty>true</content-dirty>.
362
376
  </template>
363
377
 
364
378
  - If <getopt-option-next/> is equal to `none`:
365
- Let the *user interactively choose* what to do as the next step.
379
+ Let the *user interactively choose* what to do as the next
380
+ step. For this you *MUST* use the custom `custom-dialog` and
381
+ *NOT* the `AskUserQuestion` based "user-dialog":
366
382
 
367
- <expand name="user-dialog">
383
+ <expand name="custom-dialog">
368
384
  Next Step: How would you like to proceed with the plan?
369
385
  DONE: Mark plan finalized, exit planning loop.
370
386
  GRILL: Hand off plan to grilling.
@@ -385,13 +401,16 @@ Set <content-dirty>true</content-dirty>.
385
401
 
386
402
  - If <result/> is `GRILL`:
387
403
 
388
- *Break* out of the *loop*. Set <args></args> (empty).
404
+ *Break* out of the *loop*.
405
+ Set <args></args> (set args to empty).
406
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
407
+ Set <args>--int-reuse-task</args>.
408
+ </if>
389
409
  <if condition="<getopt-option-next/> is not equal `none`">
390
- Set <args>--next <getopt-option-next/></args> (forward
391
- remaining list tokens to the downstream skill).
410
+ Set <args><args/> --next <getopt-option-next/></args>
392
411
  </if>
393
412
  Only output the following <template/> and then call the
394
- `Skill(skill: "ase:ase-task-grill", args: <args/>)` tool
413
+ `Skill(skill: "ase:ase-task-grill", args: "<args/>")` tool
395
414
  to *grill* the finalized plan.
396
415
 
397
416
  <template>
@@ -400,13 +419,16 @@ Set <content-dirty>true</content-dirty>.
400
419
 
401
420
  - If <result/> is `PREFLIGHT`:
402
421
 
403
- *Break* out of the *loop*. Set <args></args> (empty).
422
+ *Break* out of the *loop*.
423
+ Set <args></args> (set args to empty).
424
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
425
+ Set <args>--int-reuse-task</args>.
426
+ </if>
404
427
  <if condition="<getopt-option-next/> is not equal `none`">
405
- Set <args>--next <getopt-option-next/></args> (forward
406
- remaining list tokens to the downstream skill).
428
+ Set <args><args/> --next <getopt-option-next/></args>
407
429
  </if>
408
430
  Only output the following <template/> and then call the
409
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
431
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
410
432
  to *apply* the finalized plan.
411
433
 
412
434
  <template>
@@ -415,13 +437,16 @@ Set <content-dirty>true</content-dirty>.
415
437
 
416
438
  - If <result/> is `IMPLEMENT`:
417
439
 
418
- *Break* out of the *loop*. Set <args></args> (empty).
440
+ *Break* out of the *loop*.
441
+ Set <args></args> (set args to empty).
442
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
443
+ Set <args>--int-reuse-task</args>.
444
+ </if>
419
445
  <if condition="<getopt-option-next/> is not equal `none`">
420
- Set <args>--next <getopt-option-next/></args> (forward
421
- remaining list tokens to the downstream skill).
446
+ Set <args><args/> --next <getopt-option-next/></args>
422
447
  </if>
423
448
  Only output the following <template/> and then call the
424
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
449
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
425
450
  to *apply* the finalized plan.
426
451
 
427
452
  <template>
@@ -48,8 +48,8 @@ hand-off to implementation or preflight.
48
48
  `none` (default, interactive answer required), `DONE` (no next
49
49
  step), `GRILL` (hand-over to `ase-task-grill`), `PREFLIGHT`
50
50
  (hand-over to `ase-task-preflight`), or `IMPLEMENT` (hand-over to
51
- `ase-task-implement`). Example: `--next GRILL,DONE` first refines
52
- once, then exits the loop without asking.
51
+ `ase-task-implement`). Example: `--next GRILL,DONE` hands the plan
52
+ off to grilling and forwards `DONE` so grilling exits without asking.
53
53
 
54
54
  ## ARGUMENTS
55
55
 
@@ -82,5 +82,5 @@ Further refine the task under id `hello`:
82
82
 
83
83
  ## SEE ALSO
84
84
 
85
- `ase-task-reboot`, `ase-task-preflight`, `ase-task-implement`,
86
- `ase-task-view`, `ase-task-list`, `ase-task-rename`, `ase-task-delete`.
85
+ [`ase-task-reboot`](../ase-task-reboot/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md),
86
+ [`ase-task-view`](../ase-task-view/help.md), [`ase-task-list`](../ase-task-list/help.md), [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).