@rse/ase 0.9.44 → 0.9.46

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 (57) hide show
  1. package/dst/ase-setup.js +50 -0
  2. package/package.json +3 -3
  3. package/plugin/.claude-plugin/plugin.json +1 -1
  4. package/plugin/.codex-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/agents/ase-code-lint.md +11 -0
  7. package/plugin/agents/ase-docs-proofread.md +8 -0
  8. package/plugin/agents/ase-meta-chat.md +13 -7
  9. package/plugin/agents/ase-meta-search.md +0 -1
  10. package/plugin/etc/stx.conf +6 -1
  11. package/plugin/meta/ase-common-task.md +145 -0
  12. package/plugin/meta/ase-constitution.md +4 -1
  13. package/plugin/meta/ase-dialog.md +7 -7
  14. package/plugin/meta/ase-format-arch.md +4 -4
  15. package/plugin/meta/ase-format-spec.md +23 -23
  16. package/plugin/meta/ase-format-task.md +1 -1
  17. package/plugin/meta/ase-persona.md +3 -3
  18. package/plugin/meta/ase-skill.md +2 -2
  19. package/plugin/meta/ase-tenets.md +4 -4
  20. package/plugin/package.json +1 -1
  21. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
  22. package/plugin/skills/ase-code-craft/SKILL.md +23 -9
  23. package/plugin/skills/ase-code-craft/help.md +5 -4
  24. package/plugin/skills/ase-code-lint/SKILL.md +19 -3
  25. package/plugin/skills/ase-code-refactor/SKILL.md +23 -9
  26. package/plugin/skills/ase-code-refactor/help.md +5 -4
  27. package/plugin/skills/ase-code-resolve/SKILL.md +22 -8
  28. package/plugin/skills/ase-code-resolve/help.md +6 -5
  29. package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
  30. package/plugin/skills/ase-docs-proofread/SKILL.md +18 -3
  31. package/plugin/skills/ase-meta-changelog/SKILL.md +5 -2
  32. package/plugin/skills/ase-meta-commit/SKILL.md +4 -4
  33. package/plugin/skills/ase-meta-compat/SKILL.md +3 -3
  34. package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
  35. package/plugin/skills/ase-meta-eli5/SKILL.md +116 -0
  36. package/plugin/skills/ase-meta-eli5/help.md +61 -0
  37. package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
  38. package/plugin/skills/ase-meta-intent/SKILL.md +157 -0
  39. package/plugin/skills/ase-meta-intent/help.md +56 -0
  40. package/plugin/skills/ase-meta-proximity/SKILL.md +224 -0
  41. package/plugin/skills/ase-meta-proximity/help.md +78 -0
  42. package/plugin/skills/ase-meta-quorum/SKILL.md +33 -4
  43. package/plugin/skills/ase-meta-search/SKILL.md +1 -1
  44. package/plugin/skills/ase-meta-steelman/SKILL.md +3 -3
  45. package/plugin/skills/ase-meta-why/SKILL.md +1 -1
  46. package/plugin/skills/ase-sync-export/SKILL.md +7 -7
  47. package/plugin/skills/ase-sync-import/SKILL.md +20 -16
  48. package/plugin/skills/ase-sync-reconcile/SKILL.md +9 -9
  49. package/plugin/skills/ase-task-condense/SKILL.md +34 -79
  50. package/plugin/skills/ase-task-edit/SKILL.md +41 -49
  51. package/plugin/skills/ase-task-grill/SKILL.md +10 -12
  52. package/plugin/skills/ase-task-id/SKILL.md +7 -3
  53. package/plugin/skills/ase-task-implement/SKILL.md +18 -111
  54. package/plugin/skills/ase-task-list/SKILL.md +3 -0
  55. package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
  56. package/plugin/skills/ase-task-reboot/SKILL.md +27 -63
  57. package/plugin/skills/ase-task-view/SKILL.md +7 -7
@@ -41,20 +41,20 @@ Procedure
41
41
 
42
42
  <define name="apply-refinement">
43
43
  Treat the <instruction/> as a *refinement instruction* for
44
- the plan, and update <content/> in-place by *applying* the
44
+ the plan, and update <task-content/> in-place by *applying* the
45
45
  requested <instruction/> to the *plan*.
46
46
 
47
47
  When refining the plan this way, preserve the overall structure of the
48
48
  plan and only modify what the user actually requested. Do *not* rewrite
49
49
  unrelated sections of the plan.
50
50
 
51
- Calculate the number of words <words/> of <content/>.
52
- Set <content-dirty>true</content-dirty>.
51
+ Calculate the number of words <words/> of <task-content/>.
52
+ Set <task-content-dirty>true</task-content-dirty>.
53
53
  </define>
54
54
 
55
55
  <define name="generate-plan">
56
56
  Create a new plan from scratch and store the result as
57
- <content/> by closely following the defined plan format
57
+ <task-content/> by closely following the defined plan format
58
58
  <format/> and injecting into it all the information from
59
59
  the <instruction/> and all decisions you derived from the
60
60
  <instruction/>.
@@ -69,7 +69,7 @@ and conventions.
69
69
  <if condition="<getopt-option-dry/> is equal `true`">
70
70
  You *MUST* completely omit the `## VERIFICATION` section
71
71
  (including its heading and all of its bullet points) from
72
- <content/>.
72
+ <task-content/>.
73
73
  </if>
74
74
 
75
75
  Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
@@ -77,8 +77,18 @@ Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
77
77
  for fresh <timestamp-created/> and <timestamp-modified/>
78
78
  information. Then insert the current <ase-task-id/>,
79
79
  <timestamp-created/>, and <timestamp-modified/> information
80
- and calculate the number of words <words/> of <content/>.
81
- Set <content-dirty>true</content-dirty>.
80
+ and calculate the number of words <words/> of <task-content/>.
81
+ Set <task-content-dirty>true</task-content-dirty>.
82
+ </define>
83
+
84
+ <define name="handoff-args">
85
+ Set <args></args> (set args to empty).
86
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
87
+ Set <args>--int-reuse-task</args>.
88
+ </if>
89
+ <if condition="<getopt-option-next/> is not equal `none`">
90
+ Set <args><args/> --next <getopt-option-next/></args>
91
+ </if>
82
92
  </define>
83
93
 
84
94
  1. **Determine Task and Instruction:**
@@ -183,24 +193,24 @@ Set <content-dirty>true</content-dirty>.
183
193
  call. Set <status>plan loaded</status>.
184
194
  </else>
185
195
 
186
- Set <content-dirty>false</content-dirty>.
196
+ Set <task-content-dirty>false</task-content-dirty>.
187
197
 
188
198
  - If <text/> starts with `ERROR:` or `WARNING:`:
189
199
  Silently ignore the MCP error.
190
- Set <content/> to empty.
200
+ Set <task-content/> to empty.
191
201
  Set <words/> to "0".
192
202
  Do not output anything.
193
203
 
194
204
  - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
195
- Set <content><text/></content> (set content to text).
196
- Calculate the number of words <words/> of <content/>.
205
+ Set <task-content><text/></task-content> (set task content to text).
206
+ Calculate the number of words <words/> of <task-content/>.
197
207
  Only output the following <template/>:
198
208
 
199
209
  <template>
200
210
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
201
211
  </template>
202
212
 
203
- 2. <if condition="<content/> is empty AND <instruction/> is empty">
213
+ 2. <if condition="<task-content/> is empty AND <instruction/> is empty">
204
214
  Ask the user interactively, without a special tool, for the
205
215
  initial plan content with a single question:
206
216
 
@@ -214,9 +224,9 @@ Set <content-dirty>true</content-dirty>.
214
224
  </template>
215
225
  </if>
216
226
 
217
- 3. <if condition="<content/> is not empty AND
227
+ 3. <if condition="<task-content/> is not empty AND
218
228
  <instruction/> is not empty AND
219
- <instruction/> is not equal <content/>">
229
+ <instruction/> is not equal <task-content/>">
220
230
  *Determine previous-plan handling*:
221
231
 
222
232
  - If <getopt-option-plan/> matches the regex `^(OVERWRITE|REFINE|PRESERVE)$`:
@@ -285,14 +295,14 @@ Set <content-dirty>true</content-dirty>.
285
295
  </template>
286
296
  </if>
287
297
 
288
- 4. <if condition="no line of <content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
289
- Set <instruction><content/></instruction> (set instruction to content).
290
- Set <content></content> (set content to empty).
291
- Set <content-dirty>true</content-dirty>.
298
+ 4. <if condition="no line of <task-content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
299
+ Set <instruction><task-content/></instruction> (set instruction to task content).
300
+ Set <task-content></task-content> (set task content to empty).
301
+ Set <task-content-dirty>true</task-content-dirty>.
292
302
  Do not output anything.
293
303
  </if>
294
304
 
295
- 5. <if condition="<content/> is empty AND <instruction/> is not empty">
305
+ 5. <if condition="<task-content/> is empty AND <instruction/> is not empty">
296
306
  <expand name="generate-plan"/>
297
307
 
298
308
  Only output the following <template/> and continue processing:
@@ -310,22 +320,22 @@ Set <content-dirty>true</content-dirty>.
310
320
  `PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
311
321
 
312
322
  1. *Update timestamp*:
313
- <if condition="<content/> contains '⚙ Modified:' AND <content-dirty/> is 'true'">
323
+ <if condition="<task-content/> contains '⚙ Modified:' AND <task-content-dirty/> is 'true'">
314
324
  Update <timestamp-modified/> with the current time in
315
325
  ISO-style format, which has to be determined by calling the
316
326
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
317
327
  MCP server and use the `text` field of its response. Update
318
- the `⚙ Modified: ...` line of <content/> with the new
328
+ the `⚙ Modified: ...` line of <task-content/> with the new
319
329
  `⚙ Modified: <timestamp-modified/>`.
320
330
  Do not output anything.
321
331
  </if>
322
332
 
323
333
  2. *Persist plan*:
324
- <if condition="<content-dirty/> is 'true'">
325
- Call the `ase_task_save(id: "<ase-task-id/>", text: "<content/>")` tool
334
+ <if condition="<task-content-dirty/> is 'true'">
335
+ Call the `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")` tool
326
336
  of the `ase` MCP server to persist the current plan, and then
327
- set <content-dirty>false</content-dirty> again. Calculate the
328
- number of words <words/> of <content/>. Do not output anything
337
+ set <task-content-dirty>false</task-content-dirty> again. Calculate the
338
+ number of words <words/> of <task-content/>. Do not output anything
329
339
  related to this MCP tool call except the following <template/>:
330
340
 
331
341
  <template>
@@ -333,9 +343,9 @@ Set <content-dirty>true</content-dirty>.
333
343
  </template>
334
344
  </if>
335
345
 
336
- 3. *Render plan*: Treat <content/> as *verbatim* Markdown.
346
+ 3. *Render plan*: Treat <task-content/> as *verbatim* Markdown.
337
347
  Only output the following <template/>, so the user
338
- can read the plan and react to it. If <content/> is longer
348
+ can read the plan and react to it. If <task-content/> is longer
339
349
  than 90 lines and a `## IMPLEMENTATION DRAFT` section (from the
340
350
  companion skill `ase-task-preflight`) exists, replace the entire
341
351
  content of the `## IMPLEMENTATION DRAFT` section with `[...]`.
@@ -344,7 +354,7 @@ Set <content-dirty>true</content-dirty>.
344
354
 
345
355
  <template>
346
356
  <ase-tpl-head title="TASK"/>
347
- <content/>
357
+ <task-content/>
348
358
  <ase-tpl-foot title="TASK"/>
349
359
  </template>
350
360
 
@@ -405,13 +415,7 @@ Set <content-dirty>true</content-dirty>.
405
415
  - If <result/> is `GRILL`:
406
416
 
407
417
  *Break* out of the *loop*.
408
- Set <args></args> (set args to empty).
409
- <if condition="the plan was saved via `ase_task_save` in step 3.2">
410
- Set <args>--int-reuse-task</args>.
411
- </if>
412
- <if condition="<getopt-option-next/> is not equal `none`">
413
- Set <args><args/> --next <getopt-option-next/></args>
414
- </if>
418
+ <expand name="handoff-args"/>
415
419
  Only output the following <template/> and then call the
416
420
  `Skill(skill: "ase:ase-task-grill", args: "<args/>")` tool
417
421
  to *grill* the finalized plan.
@@ -423,13 +427,7 @@ Set <content-dirty>true</content-dirty>.
423
427
  - If <result/> is `PREFLIGHT`:
424
428
 
425
429
  *Break* out of the *loop*.
426
- Set <args></args> (set args to empty).
427
- <if condition="the plan was saved via `ase_task_save` in step 3.2">
428
- Set <args>--int-reuse-task</args>.
429
- </if>
430
- <if condition="<getopt-option-next/> is not equal `none`">
431
- Set <args><args/> --next <getopt-option-next/></args>
432
- </if>
430
+ <expand name="handoff-args"/>
433
431
  Only output the following <template/> and then call the
434
432
  `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
435
433
  to *apply* the finalized plan.
@@ -441,13 +439,7 @@ Set <content-dirty>true</content-dirty>.
441
439
  - If <result/> is `IMPLEMENT`:
442
440
 
443
441
  *Break* out of the *loop*.
444
- Set <args></args> (set args to empty).
445
- <if condition="the plan was saved via `ase_task_save` in step 3.2">
446
- Set <args>--int-reuse-task</args>.
447
- </if>
448
- <if condition="<getopt-option-next/> is not equal `none`">
449
- Set <args><args/> --next <getopt-option-next/></args>
450
- </if>
442
+ <expand name="handoff-args"/>
451
443
  Only output the following <template/> and then call the
452
444
  `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
453
445
  to *apply* the finalized plan.
@@ -36,6 +36,13 @@ task plan until reaching a shared understanding.
36
36
  Procedure
37
37
  ---------
38
38
 
39
+ <define name="handoff-args">
40
+ Set <args>--int-reuse-task</args>.
41
+ <if condition="<getopt-option-next/> is not equal `none`">
42
+ Set <args><args/> --next <getopt-option-next/></args>
43
+ </if>
44
+ </define>
45
+
39
46
  1. **Determine Task:**
40
47
 
41
48
  1. Set <id><getopt-arguments/></id> initially.
@@ -282,10 +289,7 @@ Procedure
282
289
  </template>
283
290
 
284
291
  - If <result/> is `EDIT`:
285
- Set <args>--int-reuse-task</args>.
286
- <if condition="<getopt-option-next/> is not equal `none`">
287
- Set <args><args/> --next <getopt-option-next/></args>
288
- </if>
292
+ <expand name="handoff-args"/>
289
293
  Only output the following <template/> and then call the
290
294
  tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
291
295
  to invoke the `ase:ase-task-edit` skill in order to *edit*
@@ -297,10 +301,7 @@ Procedure
297
301
  </template>
298
302
 
299
303
  - If <result/> is `PREFLIGHT`:
300
- Set <args>--int-reuse-task</args>.
301
- <if condition="<getopt-option-next/> is not equal `none`">
302
- Set <args><args/> --next <getopt-option-next/></args>
303
- </if>
304
+ <expand name="handoff-args"/>
304
305
  Only output the following <template/> and then call the
305
306
  `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
306
307
  to *apply* the plan.
@@ -310,10 +311,7 @@ Procedure
310
311
  </template>
311
312
 
312
313
  - If <result/> is `IMPLEMENT`:
313
- Set <args>--int-reuse-task</args>.
314
- <if condition="<getopt-option-next/> is not equal `none`">
315
- Set <args><args/> --next <getopt-option-next/></args>
316
- </if>
314
+ <expand name="handoff-args"/>
317
315
  Only output the following <template/> and then call the
318
316
  `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
319
317
  to *apply* the plan.
@@ -26,6 +26,9 @@ Configure Task Id
26
26
  *Get* or *set* the unique *task id* of the current session.
27
27
  </objective>
28
28
 
29
+ Procedure
30
+ ---------
31
+
29
32
  1. Determine request:
30
33
  <request><getopt-arguments/></request>
31
34
  Inherit the always existing <ase-session-id/> and the current
@@ -43,9 +46,10 @@ Configure Task Id
43
46
  3. <if condition="<request/> is empty">
44
47
  - Call the `ase_task_id(session: "<ase-session-id/>")`
45
48
  tool from the `ase` MCP server and set <text/> to its
46
- `text` output. Check the response as mandated above; only
47
- on a clean response set <ase-task-id><text/></ase-task-id>.
48
- On an `ERROR:`/`WARNING:` response, keep the <ase-task-id/>
49
+ `text` output. Only on a clean response set
50
+ <ase-task-id><text/></ase-task-id>. On an `ERROR:`/`WARNING:`
51
+ response, silently ignore the MCP error (deviating from the
52
+ generic MCP error rule) and keep the <ase-task-id/>
49
53
  inherited from the current context as the fallback.
50
54
 
51
55
  - Output:
@@ -31,99 +31,30 @@ with a corresponding, complete *change set*.
31
31
  </objective>
32
32
 
33
33
  @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
34
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
34
35
 
35
36
  Procedure
36
37
  ---------
37
38
 
38
39
  1. **Determine Task:**
39
40
 
40
- 1. Set <instruction><getopt-arguments/></instruction> initially.
41
+ 1. Set <instruction><getopt-arguments/></instruction> initially, with any
42
+ leading and trailing whitespace stripped.
41
43
  Inherit the always existing <ase-task-id/> from the current context.
42
44
  Inherit the always existing <ase-session-id/> from the current context.
43
45
  Do not output anything.
44
46
 
45
47
  2. React on task id:
46
48
 
47
- 1. <if condition="
48
- <instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
49
- ">
50
- Set <ase-task-id><instruction/></ase-task-id> (set task
51
- id to instruction) and <instruction></instruction> (set
52
- instruction empty), call the `ase_task_id(id: "<ase-task-id/>",
53
- session: "<ase-session-id/>")` tool from the `ase` MCP
54
- server to switch the task, and then only output the
55
- following <template/>:
49
+ <expand name="task-react-id" arg1="ase-task-implement"></expand>
56
50
 
57
- <template>
58
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
59
- </template>
60
- </if>
61
-
62
- 2. <elseif condition="
63
- <instruction/> has the format `<id/>: <text/>` where
64
- <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
65
- <text/> is *empty*
66
- ">
67
- Set <instruction></instruction> (set instruction to empty)
68
- and <ase-task-id><id/></ase-task-id> (set task id to
69
- id) and call the `ase_task_id(id: "<ase-task-id/>", session:
70
- "<ase-session-id/>")` tool from the `ase` MCP server to
71
- switch the task, and then only output the following
72
- <template/>:
73
-
74
- <template>
75
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
76
- </template>
77
- </elseif>
78
-
79
- 3. <elseif condition="<instruction/> is NOT empty">
80
- The argument is neither empty nor a valid task id. As this
81
- skill only accepts an optional `[<id>]` argument and *never*
82
- a free-text instruction, only output the following <template/>
83
- and then immediately *STOP* processing the entire current skill:
84
-
85
- <template>
86
- ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: expected single `[<id>]` argument
87
- </template>
88
- </elseif>
89
-
90
- 2. **Determine Operation**:
51
+ 2. **Determine Operation:**
91
52
 
92
53
  1. Determine the current task plan content:
93
54
 
94
- <if condition="
95
- <getopt-option-int-reuse-task/> is equal `true`
96
- *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
97
- exists earlier in the current session
98
- ">
99
- Set <text/> to the `text` argument of the most recent
100
- `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
101
- *without* calling `ase_task_load` again. Set <status>plan
102
- reused</status>. Do not output anything.
103
- </if>
104
- <else>
105
- Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
106
- `ase` MCP server to load the current task plan content and
107
- set <text/> to the `text` output field of this `ase_task_load`
108
- tool call. Do not output anything related to this MCP tool
109
- call. Set <status>plan loaded</status>.
110
- </else>
111
-
112
- - If <text/> starts with `ERROR:` or `WARNING:`:
113
- Set <content></content> (set content to empty).
114
- Set <words/> to "0".
115
-
116
- - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
117
- Set <content><text/></content> (set content to text).
118
- Calculate the number of words <words/> of <content/>.
119
-
120
- Only output the following <template/>:
121
-
122
- <template>
123
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
124
- </template>
55
+ <expand name="task-load-content"></expand>
125
56
 
126
- 2. If the <content/> is still empty, complain and tell the user to
57
+ 2. If the <task-content/> is still empty, complain and tell the user to
127
58
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
128
59
  or `ase-task-edit` skills first to create a task plan. Then
129
60
  immediately stop processing this skill.
@@ -134,15 +65,15 @@ Procedure
134
65
  by modifying the *artifacts* with a corresponding, complete
135
66
  *change set*.
136
67
 
137
- For this, primarily follow and honor the task plan in <content/>.
68
+ For this, primarily follow and honor the task plan in <task-content/>.
138
69
 
139
70
  Secondarily, derive hints from the optionally existing
140
71
  `IMPLEMENTATION DRAFT` section (from skill `ase-task-preflight`)
141
- in <content/>. But the specification text in <content/> always
72
+ in <task-content/>. But the specification text in <task-content/> always
142
73
  overrules the implementation draft in the `IMPLEMENTATION DRAFT`
143
- section of <content/>.
74
+ section of <task-content/>.
144
75
 
145
- <if condition="<content/> does NOT contain a `## VERIFICATION` section heading">
76
+ <if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
146
77
  The task plan deliberately *omits* the `## VERIFICATION`
147
78
  section. You *MUST* therefore *strictly skip* the entire
148
79
  verification phase after modifying the source files: do *NOT*
@@ -162,37 +93,13 @@ Procedure
162
93
 
163
94
  1. *Determine next step*:
164
95
 
165
- - If <getopt-option-next/> is not equal to `none`:
166
- Treat <getopt-option-next/> as a comma-separated chronological
167
- list of pre-selected next-step tokens. *Split* it on `,`,
168
- take the *first* token as <head/>, and store the remaining
169
- tokens (joined back with `,`, or `none` if empty) into
170
- <getopt-option-next/> so downstream skills can consume the tail.
171
-
172
- - If <head/> matches the regex `^(DONE|DELETE)$`:
173
- Honor the pre-selected token.
174
- Set <result><head/></result>.
175
-
176
- - else:
177
- Only output the following <template/> and then immediately
178
- *STOP* processing the entire current skill:
179
-
180
- <template>
181
- ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: invalid `--next` token: **<head/>**
182
- </template>
183
-
184
- - If <getopt-option-next/> is equal to `none`:
185
-
186
- In the following, you *MUST* *NOT* use your built-in
187
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
188
- custom dialog according to the expanded `custom-dialog`
189
- definition. You *MUST* closely follow this definition:
190
-
191
- <expand name="custom-dialog" arg1="--no-other">
192
- Next Step: How would you like to proceed with the plan?
193
- DONE: Stop processing and PRESERVE task plan.
194
- DELETE: Stop processing and DELETE the task plan.
195
- </expand>
96
+ <expand name="task-next-select"
97
+ arg1="ase-task-implement"
98
+ arg2="DONE|DELETE">
99
+ Next Step: How would you like to proceed with the plan?
100
+ DONE: Stop processing and PRESERVE task plan.
101
+ DELETE: Stop processing and DELETE the task plan.
102
+ </expand>
196
103
 
197
104
  2. Check the tool <result/> and dispatch accordingly:
198
105
 
@@ -27,6 +27,9 @@ List Task Plans
27
27
  *List* all available *task plans* of the current project.
28
28
  </objective>
29
29
 
30
+ Procedure
31
+ ---------
32
+
30
33
  1. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
31
34
  the `ase` MCP server. The result is a structured object with a
32
35
  `tasks` array where each entry has an `id` field, and -- if