@rse/ase 0.9.7 → 0.9.8

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 (49) hide show
  1. package/dst/ase-getopt.js +11 -1
  2. package/dst/ase-task.js +20 -21
  3. package/package.json +2 -2
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/agents/ase-docs-proofread.md +2 -2
  7. package/plugin/meta/ase-constitution.md +7 -0
  8. package/plugin/meta/ase-control.md +24 -3
  9. package/plugin/meta/ase-format-task.md +2 -2
  10. package/plugin/meta/ase-getopt.md +2 -1
  11. package/plugin/meta/ase-skill.md +28 -9
  12. package/plugin/package.json +2 -2
  13. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  14. package/plugin/skills/ase-arch-discover/SKILL.md +18 -9
  15. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  16. package/plugin/skills/ase-code-craft/SKILL.md +42 -35
  17. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  18. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  19. package/plugin/skills/ase-code-lint/SKILL.md +16 -8
  20. package/plugin/skills/ase-code-refactor/SKILL.md +42 -35
  21. package/plugin/skills/ase-code-resolve/SKILL.md +43 -35
  22. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  23. package/plugin/skills/ase-docs-distill/help.md +3 -3
  24. package/plugin/skills/ase-docs-proofread/SKILL.md +22 -13
  25. package/plugin/skills/ase-meta-brainstorm/SKILL.md +25 -6
  26. package/plugin/skills/ase-meta-brainstorm/help.md +6 -10
  27. package/plugin/skills/ase-meta-diff/SKILL.md +5 -4
  28. package/plugin/skills/ase-meta-diff/help.md +10 -11
  29. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  30. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  31. package/plugin/skills/ase-meta-review/SKILL.md +3 -3
  32. package/plugin/skills/ase-meta-review/help.md +3 -3
  33. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  34. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  35. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  36. package/plugin/skills/ase-task-condense/SKILL.md +32 -17
  37. package/plugin/skills/ase-task-condense/help.md +1 -1
  38. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  39. package/plugin/skills/ase-task-edit/SKILL.md +53 -32
  40. package/plugin/skills/ase-task-edit/help.md +2 -2
  41. package/plugin/skills/ase-task-grill/SKILL.md +53 -24
  42. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  43. package/plugin/skills/ase-task-implement/SKILL.md +36 -15
  44. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  45. package/plugin/skills/ase-task-preflight/SKILL.md +40 -20
  46. package/plugin/skills/ase-task-preflight/help.md +1 -1
  47. package/plugin/skills/ase-task-reboot/SKILL.md +27 -18
  48. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  49. package/plugin/skills/ase-task-view/help.md +24 -5
@@ -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">
@@ -271,7 +283,7 @@ Set <content-dirty>true</content-dirty>.
271
283
  </template>
272
284
  </if>
273
285
 
274
- 4. <if condition="<content/> does not contain '#TASK' AND <instruction/> is empty">
286
+ 4. <if condition="<content/> does not contain '# TASK' AND <instruction/> is empty">
275
287
  Set <instruction><content/></instruction> (set instruction to content).
276
288
  Set <content></content> (set content to empty).
277
289
  Set <content-dirty>true</content-dirty>.
@@ -296,12 +308,12 @@ Set <content-dirty>true</content-dirty>.
296
308
  `PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
297
309
 
298
310
  1. *Update timestamp*:
299
- <if condition="<content/> contains '✎ modified:' AND <content-dirty/> is 'true'">
311
+ <if condition="<content/> contains '⚙ Modified:' AND <content-dirty/> is 'true'">
300
312
  Update <timestamp-modified/> with the current time in
301
313
  ISO-style format, which has to be determined by calling the
302
314
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
303
315
  MCP server and use the `text` field of its response. Update
304
- <content/> with the new `✎ modified: **<timestamp-modified/>**`.
316
+ <content/> with the new `Modified: <timestamp-modified/>`.
305
317
  Do not output anything.
306
318
  </if>
307
319
 
@@ -350,8 +362,8 @@ Set <content-dirty>true</content-dirty>.
350
362
  Set <instruction></instruction> (clear the instruction, as
351
363
  any instruction carried in via the arguments was already
352
364
  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.
365
+ later `OTHER: <text/>` refinement correctly starts from a
366
+ *fresh* refinement instruction below.
355
367
 
356
368
  - else:
357
369
  Only output the following <template/> and then immediately
@@ -385,13 +397,16 @@ Set <content-dirty>true</content-dirty>.
385
397
 
386
398
  - If <result/> is `GRILL`:
387
399
 
388
- *Break* out of the *loop*. Set <args></args> (empty).
400
+ *Break* out of the *loop*.
401
+ Set <args></args> (set args to empty).
402
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
403
+ Set <args>--int-reuse-task</args>.
404
+ </if>
389
405
  <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).
406
+ Set <args><args/> --next <getopt-option-next/></args>
392
407
  </if>
393
408
  Only output the following <template/> and then call the
394
- `Skill(skill: "ase:ase-task-grill", args: <args/>)` tool
409
+ `Skill(skill: "ase:ase-task-grill", args: "<args/>")` tool
395
410
  to *grill* the finalized plan.
396
411
 
397
412
  <template>
@@ -400,13 +415,16 @@ Set <content-dirty>true</content-dirty>.
400
415
 
401
416
  - If <result/> is `PREFLIGHT`:
402
417
 
403
- *Break* out of the *loop*. Set <args></args> (empty).
418
+ *Break* out of the *loop*.
419
+ Set <args></args> (set args to empty).
420
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
421
+ Set <args>--int-reuse-task</args>.
422
+ </if>
404
423
  <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).
424
+ Set <args><args/> --next <getopt-option-next/></args>
407
425
  </if>
408
426
  Only output the following <template/> and then call the
409
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
427
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
410
428
  to *apply* the finalized plan.
411
429
 
412
430
  <template>
@@ -415,13 +433,16 @@ Set <content-dirty>true</content-dirty>.
415
433
 
416
434
  - If <result/> is `IMPLEMENT`:
417
435
 
418
- *Break* out of the *loop*. Set <args></args> (empty).
436
+ *Break* out of the *loop*.
437
+ Set <args></args> (set args to empty).
438
+ <if condition="the plan was saved via `ase_task_save` in step 3.2">
439
+ Set <args>--int-reuse-task</args>.
440
+ </if>
419
441
  <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).
442
+ Set <args><args/> --next <getopt-option-next/></args>
422
443
  </if>
423
444
  Only output the following <template/> and then call the
424
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
445
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
425
446
  to *apply* the finalized plan.
426
447
 
427
448
  <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
 
@@ -22,7 +22,7 @@ Iteratively Grill a Task Plan
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-task-grill"
25
- arg2="--next|-n=(none|DONE|EDIT)...">
25
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -36,9 +36,15 @@ task plan until reaching a shared understanding.
36
36
  Procedure
37
37
  ---------
38
38
 
39
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
40
+ You *MUST* not skip any numbered item during processing!
41
+
42
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
43
+ explicitly requested by this procedure via outputs based on a <template/>!
44
+
39
45
  1. **Determine Task:**
40
46
 
41
- 1. Set <id>$ARGUMENTS</id> initially.
47
+ 1. Set <id><getopt-arguments/></id> initially.
42
48
  Inherit the always existing <ase-task-id/> from the current context.
43
49
  Inherit the always existing <ase-session-id/> from the current context.
44
50
  Do not output anything.
@@ -59,22 +65,34 @@ Procedure
59
65
  </template>
60
66
  </if>
61
67
 
62
- 2. else <if condition="<id/> is NOT empty">
68
+ 2. <elseif condition="<id/> is NOT empty">
63
69
  The argument is neither empty nor a valid task id. As this
64
70
  skill only accepts an optional `[<id>]` argument and *never*
65
71
  a free-text instruction, only output the following <template/>
66
72
  and then immediately *STOP* processing the entire current skill:
67
73
 
68
74
  <template>
69
- ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **ERROR**: expected single `[<id>]` argument
75
+ ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: expected single `[<id>]` argument
70
76
  </template>
71
- </if>
77
+ </elseif>
72
78
 
73
79
  2. **Determine Task Plan:**
74
80
 
75
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
76
- server to load the current task plan content and set <text/> to
77
- the `text` output field of the `ase_task_load` tool call.
81
+ 1. Determine the current task plan content:
82
+
83
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
84
+ Set <text/> to the `text` argument of the most recent
85
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
86
+ *without* calling `ase_task_load` again. Set <status>plan
87
+ reused</status>. Do not output anything.
88
+ </if>
89
+ <else>
90
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
91
+ `ase` MCP server to load the current task plan content and
92
+ set <text/> to the `text` output field of this `ase_task_load`
93
+ tool call. Do not output anything related to this MCP tool
94
+ call. Set <status>plan loaded</status>.
95
+ </else>
78
96
 
79
97
  - If <text/> starts with `ERROR:` or `WARNING:`:
80
98
  Output the following <template/> and then immediately *STOP*
@@ -91,7 +109,7 @@ Procedure
91
109
  Output the following <template/>:
92
110
 
93
111
  <template>
94
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
112
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
95
113
  </template>
96
114
 
97
115
  2. <if condition="<plan/> is empty">
@@ -107,7 +125,7 @@ Procedure
107
125
  *essential aspect* of the task plan in <plan/> *until* reaching a
108
126
  shared understanding and no decisions/questions are left open.
109
127
 
110
- This especially means, you *MUST* clarify as much aspects as
128
+ This especially means, you *MUST* clarify as many aspects as
111
129
  necessary to ensure that for at least the most important decisions,
112
130
  during a subsequent implementation, no essential freedom of choices
113
131
  exist any longer.
@@ -143,7 +161,7 @@ Procedure
143
161
  decisions one-by-one. Ask the questions <question-N/> and determine
144
162
  corresponding answer <answer-N/>, one at a time.
145
163
 
146
- 1. For each question <question-N/> in the iteration circle <N/>:
164
+ 1. For each question <question-N/> in the iteration cycle <N/>:
147
165
 
148
166
  1. Output the following <template/>:
149
167
 
@@ -172,7 +190,12 @@ Procedure
172
190
  <ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
173
191
  </template>
174
192
 
175
- 3. Finally, update the plan in <plan/> based on all answers <answer-N/>.
193
+ 2. Finally, update the plan in <plan/> based on all answers <answer-N/>.
194
+
195
+ 3. <if condition="<plan/> contains 'Created: <text/>'">
196
+ Set <timestamp-created><text/></timestamp-created> (set
197
+ timestamp-created to extracted text)
198
+ </if>
176
199
 
177
200
  4. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
178
201
  `ase` MCP server and use the `text` field of its response for
@@ -237,13 +260,12 @@ Procedure
237
260
  </template>
238
261
 
239
262
  - If <result/> is `EDIT`:
240
- Set <args></args> (empty).
263
+ Set <args>--int-reuse-task</args>.
241
264
  <if condition="<getopt-option-next/> is not equal `none`">
242
- Set <args>--next <getopt-option-next/></args> (forward
243
- remaining list tokens to the downstream skill).
265
+ Set <args><args/> --next <getopt-option-next/></args>
244
266
  </if>
245
267
  Only output the following <template/> and then call the
246
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
268
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
247
269
  to invoke the `ase:ase-task-edit` skill in order to *edit*
248
270
  the updated plan. Immediately stop processing the current
249
271
  skill once the `Skill` tool was used.
@@ -253,13 +275,12 @@ Procedure
253
275
  </template>
254
276
 
255
277
  - If <result/> is `PREFLIGHT`:
256
- Set <args></args> (empty).
278
+ Set <args>--int-reuse-task</args>.
257
279
  <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).
280
+ Set <args><args/> --next <getopt-option-next/></args>
260
281
  </if>
261
282
  Only output the following <template/> and then call the
262
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
283
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
263
284
  to *apply* the plan.
264
285
 
265
286
  <template>
@@ -267,15 +288,23 @@ Procedure
267
288
  </template>
268
289
 
269
290
  - If <result/> is `IMPLEMENT`:
270
- Set <args></args> (empty).
291
+ Set <args>--int-reuse-task</args>.
271
292
  <if condition="<getopt-option-next/> is not equal `none`">
272
- Set <args>--next <getopt-option-next/></args> (forward
273
- remaining list tokens to the downstream skill).
293
+ Set <args><args/> --next <getopt-option-next/></args>
274
294
  </if>
275
295
  Only output the following <template/> and then call the
276
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
296
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
277
297
  to *apply* the plan.
278
298
 
279
299
  <template>
280
300
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
281
301
  </template>
302
+
303
+ - If <result/> matches `OTHER: <text/>` or is any other
304
+ unrecognized value:
305
+ Treat it as `DONE` (the updated plan is already saved):
306
+ only output the following <template/> and then *STOP*.
307
+
308
+ <template>
309
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
310
+ </template>
@@ -24,7 +24,16 @@ Configure Task Id
24
24
  1. Determine request:
25
25
  <request>$ARGUMENTS</request>
26
26
 
27
- 2. <if condition="<request/> is empty">
27
+ 2. <if condition="<request/> is NOT empty AND <request/> does NOT match the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`">
28
+ Only output the following <template/> and then immediately
29
+ *STOP* processing the entire current skill:
30
+
31
+ <template>
32
+ ⧉ **ASE**: ☻ skill: **ase-task-id**, ▶ ERROR: given task id `<request/>` is not a valid id
33
+ </template>
34
+ </if>
35
+
36
+ 3. <if condition="<request/> is empty">
28
37
  - Call the `ase_task_id(session: "<ase-session-id/>")`
29
38
  tool from the `ase` MCP server and set
30
39
  <ase-task-id/> to its `text` output.
@@ -35,7 +44,7 @@ Configure Task Id
35
44
  </template>
36
45
  </if>
37
46
 
38
- 3. <if condition="<request/> is NOT empty">
47
+ 4. <if condition="<request/> is NOT empty">
39
48
  - Set <ase-task-id><request/></ase-task-id> and
40
49
  call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")`
41
50
  tool from the `ase` MCP server.
@@ -21,7 +21,7 @@ Implement a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-implement"
24
- arg2="--next|-n=(none|DONE|DELETE)...">
24
+ arg2="--next|-n=(none|DONE|DELETE)... --int-reuse-task">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -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="
68
+ 2. <elseif condition="
69
69
  <instruction/> has the format `<id/>: <text/>` where
70
70
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
71
71
  <text/> is *empty*
@@ -80,9 +80,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
  <template>
81
81
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
82
82
  </template>
83
- </if>
83
+ </elseif>
84
84
 
85
- 3. else <if condition="<instruction/> is NOT empty">
85
+ 3. <elseif condition="<instruction/> is NOT empty">
86
86
  The argument is neither empty nor a valid task id. As this
87
87
  skill only accepts an optional `[<id>]` argument and *never*
88
88
  a free-text instruction, only output the following <template/>
@@ -91,13 +91,25 @@ explicitly requested by this procedure via outputs based on a <template/>!
91
91
  <template>
92
92
  ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: expected single `[<id>]` argument
93
93
  </template>
94
- </if>
94
+ </elseif>
95
95
 
96
96
  2. **Determine Operation**:
97
97
 
98
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
99
- server to load the current task plan content and set <text/> to
100
- the `text` output field of the `ase_task_load` tool call.
98
+ 1. Determine the current task plan content:
99
+
100
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
101
+ Set <text/> to the `text` argument of the most recent
102
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
+ *without* calling `ase_task_load` again. Set <status>plan
104
+ reused</status>. Do not output anything.
105
+ </if>
106
+ <else>
107
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
108
+ `ase` MCP server to load the current task plan content and
109
+ set <text/> to the `text` output field of this `ase_task_load`
110
+ tool call. Do not output anything related to this MCP tool
111
+ call. Set <status>plan loaded</status>.
112
+ </else>
101
113
 
102
114
  - If <text/> starts with `ERROR:` or `WARNING:`:
103
115
  Set <content></content> (set content to empty).
@@ -110,12 +122,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
110
122
  Only output the following <template/>:
111
123
 
112
124
  <template>
113
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
125
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
114
126
  </template>
115
127
 
116
128
  2. If the <content/> is still empty, complain and tell the user to
117
129
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
118
- or `ase-task-edit` skills first to create a task plan.
130
+ or `ase-task-edit` skills first to create a task plan. Then
131
+ immediately stop processing this skill.
119
132
 
120
133
  3. **Create Implementation:**
121
134
 
@@ -189,11 +202,10 @@ explicitly requested by this procedure via outputs based on a <template/>!
189
202
  </template>
190
203
 
191
204
  - If <result/> is `DELETE`:
192
- Set <args></args> (empty).
193
- <if condition="<getopt-option-next/> is not equal `none`">
194
- Set <args>--next <getopt-option-next/></args> (forward
195
- remaining list tokens to the downstream skill).
196
- </if>
205
+ Set <args></args> (empty). Do *not* forward any remaining
206
+ `--next` list tokens, because the `ase:ase-task-delete`
207
+ skill accepts only an optional `[<id>]` argument and no
208
+ `--next` option; remaining tokens are intentionally discarded.
197
209
  Only output the following <template/> and then call the
198
210
  tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
199
211
  to invoke the `ase:ase-task-delete` skill in order to
@@ -204,3 +216,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
204
216
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
205
217
  </template>
206
218
 
219
+ - If <result/> matches `OTHER: <text/>` or is any other
220
+ unrecognized value:
221
+ Treat it as `DONE` (the plan is already implemented):
222
+ only output the following <template/> and then *STOP*.
223
+
224
+ <template>
225
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
226
+ </template>
227
+
@@ -27,7 +27,7 @@ List Task Plans
27
27
  *List* all available *task plans* of the current project.
28
28
  </objective>
29
29
 
30
- 1. Call the `ase_task_list(verbose: "<getopt-option-verbose/>")` tool from
30
+ 1. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
31
31
  the `ase` MCP server. The result is a structured object with a
32
32
  `tasks` array where each entry has an `id` field, and -- if
33
33
  <getopt-option-verbose/> is `true` -- additionally an `mtime` field