@rse/ase 0.0.57 → 0.0.59
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.
- package/dst/ase-getopt.js +28 -2
- package/dst/ase-hello.js +5 -5
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/meta/ase-format-adr.md +199 -0
- package/plugin/meta/ase-getopt.md +29 -9
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +49 -15
- package/plugin/skills/ase-code-craft/help.md +24 -8
- package/plugin/skills/ase-code-explain/SKILL.md +1 -1
- package/plugin/skills/ase-code-insight/SKILL.md +1 -1
- package/plugin/skills/ase-code-refactor/SKILL.md +49 -15
- package/plugin/skills/ase-code-refactor/help.md +24 -8
- package/plugin/skills/ase-code-resolve/SKILL.md +49 -15
- package/plugin/skills/ase-code-resolve/help.md +24 -8
- package/plugin/skills/ase-meta-changes/SKILL.md +1 -1
- package/plugin/skills/ase-meta-chat/SKILL.md +1 -1
- package/plugin/skills/ase-meta-diaboli/SKILL.md +152 -0
- package/plugin/skills/ase-meta-diaboli/help.md +60 -0
- package/plugin/skills/ase-meta-persona/SKILL.md +1 -1
- package/plugin/skills/ase-meta-quorum/SKILL.md +1 -1
- package/plugin/skills/ase-meta-search/SKILL.md +1 -1
- package/plugin/skills/ase-meta-why/SKILL.md +4 -4
- package/plugin/skills/ase-task-delete/SKILL.md +2 -2
- package/plugin/skills/ase-task-edit/SKILL.md +89 -81
- package/plugin/skills/ase-task-edit/help.md +19 -4
- package/plugin/skills/ase-task-grill/SKILL.md +275 -0
- package/plugin/skills/ase-task-grill/help.md +79 -0
- package/plugin/skills/ase-task-id/SKILL.md +1 -1
- package/plugin/skills/ase-task-implement/SKILL.md +41 -9
- package/plugin/skills/ase-task-implement/help.md +15 -4
- package/plugin/skills/ase-task-list/SKILL.md +1 -1
- package/plugin/skills/ase-task-preflight/SKILL.md +40 -13
- package/plugin/skills/ase-task-preflight/help.md +10 -5
- package/plugin/skills/ase-task-reboot/SKILL.md +61 -11
- package/plugin/skills/ase-task-reboot/help.md +13 -6
- package/plugin/skills/ase-task-rename/SKILL.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +1 -1
- /package/plugin/meta/{ase-plan.md → ase-format-plan.md} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-task-edit
|
|
3
|
-
argument-hint: "[--help|-h] [--plan|-p <option>] [--next|-n <option>] [<id> | <id>: <instruction> | <instruction>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--plan|-p <option>] [--dry|-d] [--next|-n <option>[,...]] [<id> | <id>: <instruction> | <instruction>]"
|
|
4
4
|
description: >
|
|
5
5
|
Iteratively edit and refine a named plan for a task through a
|
|
6
6
|
conversational loop. Each round, the current plan is shown and the
|
|
@@ -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) --next|-n=(none|DONE|IMPLEMENT|PREFLIGHT|REFINE)">
|
|
26
|
+
arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|IMPLEMENT|PREFLIGHT|REFINE)...">
|
|
27
27
|
$ARGUMENTS
|
|
28
28
|
</expand>
|
|
29
29
|
|
|
@@ -34,7 +34,7 @@ continued refinement, finalization, or hand-off to implementation or
|
|
|
34
34
|
preflight.
|
|
35
35
|
</objective>
|
|
36
36
|
|
|
37
|
-
@${CLAUDE_SKILL_DIR}/../../meta/ase-plan.md
|
|
37
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
|
|
38
38
|
|
|
39
39
|
Procedure
|
|
40
40
|
---------
|
|
@@ -45,6 +45,47 @@ You *MUST* not skip any numbered item during processing!
|
|
|
45
45
|
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
46
46
|
explicitly requested by this procedure via outputs based on a <template/>!
|
|
47
47
|
|
|
48
|
+
<define name="apply-refinement">
|
|
49
|
+
Treat the <instruction/> as a *refinement instruction* for
|
|
50
|
+
the plan, and update <content/> in-place by *applying* the
|
|
51
|
+
requested <instruction/> to the *plan*. When refining the
|
|
52
|
+
plan this way, preserve the overall structure of the plan
|
|
53
|
+
and only modify what the user actually requested. Do *not*
|
|
54
|
+
rewrite unrelated sections of the plan.
|
|
55
|
+
|
|
56
|
+
Calculate the number of words <words/> of <content/>.
|
|
57
|
+
Set <content-dirty>true</content-dirty>.
|
|
58
|
+
</define>
|
|
59
|
+
|
|
60
|
+
<define name="generate-plan">
|
|
61
|
+
Create a new plan from scratch and store the result as
|
|
62
|
+
<content/> by closely following the defined plan format
|
|
63
|
+
<format/> and injecting into it all the information from
|
|
64
|
+
the <instruction/> and all decisions you derived from the
|
|
65
|
+
<instruction/>.
|
|
66
|
+
|
|
67
|
+
If a `CHANGELOG.md` file exists in the project (or in any
|
|
68
|
+
affected sub-package), the plan *MUST* include, as part of
|
|
69
|
+
its `## ※ CHANGES` section, an explicit bullet point
|
|
70
|
+
describing the addition of a corresponding new entry to
|
|
71
|
+
that `CHANGELOG.md` file, aligned with its existing style
|
|
72
|
+
and conventions.
|
|
73
|
+
|
|
74
|
+
<if condition="<getopt-option-dry/> is equal `true`">
|
|
75
|
+
You *MUST* completely omit the `## ※ VERIFICATION` section
|
|
76
|
+
(including its heading and all of its bullet points) from
|
|
77
|
+
<content/>.
|
|
78
|
+
</if>
|
|
79
|
+
|
|
80
|
+
Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
81
|
+
`ase` MCP server and use the `text` field of its response
|
|
82
|
+
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
83
|
+
information. Then insert the current <ase-task-id/>,
|
|
84
|
+
<timestamp-created/>, and <timestamp-modified/> information
|
|
85
|
+
and calculate the number of words <words/> of <content/>.
|
|
86
|
+
Set <content-dirty>true</content-dirty>.
|
|
87
|
+
</define>
|
|
88
|
+
|
|
48
89
|
1. **Determine Task and Instruction:**
|
|
49
90
|
|
|
50
91
|
1. Set <instruction><getopt-arguments/></instruction> initially.
|
|
@@ -194,19 +235,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
194
235
|
|
|
195
236
|
- If <result/> is `OVERWRITE`:
|
|
196
237
|
|
|
197
|
-
|
|
198
|
-
<content/> by closely following the defined plan format
|
|
199
|
-
<format/> and injecting into it all the information from
|
|
200
|
-
the <instruction/> and all decisions you derived from the
|
|
201
|
-
<instruction/>.
|
|
202
|
-
|
|
203
|
-
Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
204
|
-
`ase` MCP server and use the `text` field of its response
|
|
205
|
-
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
206
|
-
information. Then insert the current <ase-task-id/>,
|
|
207
|
-
<timestamp-created/>, and <timestamp-modified/> information
|
|
208
|
-
and calculate the number of words <words/> of <content/>.
|
|
209
|
-
Set <content-dirty>true</content-dirty>.
|
|
238
|
+
<expand name="generate-plan"/>
|
|
210
239
|
|
|
211
240
|
Only output the following <template/> and continue processing:
|
|
212
241
|
|
|
@@ -217,15 +246,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
217
246
|
|
|
218
247
|
- If <result/> is `REFINE`:
|
|
219
248
|
|
|
220
|
-
|
|
221
|
-
the plan, and update <content/> in-place by *applying* the
|
|
222
|
-
requested <instruction/> to the *plan*. When refining the
|
|
223
|
-
plan this way, preserve the overall structure of the plan
|
|
224
|
-
and only modify what the user actually requested. Do *not*
|
|
225
|
-
rewrite unrelated sections of the plan.
|
|
226
|
-
|
|
227
|
-
Calculate the number of words <words/> of <content/>.
|
|
228
|
-
Set <content-dirty>true</content-dirty>.
|
|
249
|
+
<expand name="apply-refinement"/>
|
|
229
250
|
|
|
230
251
|
Only output the following <template/> and continue processing:
|
|
231
252
|
|
|
@@ -239,15 +260,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
239
260
|
Set <instruction><instruction/> <text/></instruction> (append
|
|
240
261
|
the user's free-text hint to the existing instruction).
|
|
241
262
|
|
|
242
|
-
|
|
243
|
-
the plan, and update <content/> in-place by *applying* the
|
|
244
|
-
requested <instruction/> to the *plan*. When refining the
|
|
245
|
-
plan this way, preserve the overall structure of the plan
|
|
246
|
-
and only modify what the user actually requested. Do *not*
|
|
247
|
-
rewrite unrelated sections of the plan.
|
|
248
|
-
|
|
249
|
-
Calculate the number of words <words/> of <content/>.
|
|
250
|
-
Set <content-dirty>true</content-dirty>.
|
|
263
|
+
<expand name="apply-refinement"/>
|
|
251
264
|
|
|
252
265
|
Only output the following <template/> and continue processing:
|
|
253
266
|
|
|
@@ -265,19 +278,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
265
278
|
</if>
|
|
266
279
|
|
|
267
280
|
5. <if condition="<content/> is empty AND <instruction/> is not empty">
|
|
268
|
-
|
|
269
|
-
<content/> by closely following the defined plan format
|
|
270
|
-
<format/> and injecting into it all the information from
|
|
271
|
-
the <instruction/> and all decisions you derived from the
|
|
272
|
-
<instruction/>.
|
|
273
|
-
|
|
274
|
-
Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
275
|
-
`ase` MCP server and use the `text` field of its response
|
|
276
|
-
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
277
|
-
information. Then insert the current <ase-task-id/>,
|
|
278
|
-
<timestamp-created/>, and <timestamp-modified/> information
|
|
279
|
-
and calculate the number of words <words/> of <content/>.
|
|
280
|
-
Set <content-dirty>true</content-dirty>.
|
|
281
|
+
<expand name="generate-plan"/>
|
|
281
282
|
|
|
282
283
|
Only output the following <template/> and continue processing:
|
|
283
284
|
|
|
@@ -332,20 +333,31 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
332
333
|
|
|
333
334
|
4. *Determine next step*:
|
|
334
335
|
|
|
335
|
-
- If <getopt-option-next/>
|
|
336
|
-
|
|
337
|
-
|
|
336
|
+
- If <getopt-option-next/> is not equal to `none`:
|
|
337
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
338
|
+
list of pre-selected next-step tokens. *Split* it on `,`,
|
|
339
|
+
take the *first* token as <head/>, and store the remaining
|
|
340
|
+
tokens (joined back with `,`, or `none` if empty) into
|
|
341
|
+
<getopt-option-next/> so subsequent loop iterations or
|
|
342
|
+
downstream skills can consume the tail.
|
|
343
|
+
|
|
344
|
+
- If <head/> matches the regex `^(DONE|IMPLEMENT|PREFLIGHT|REFINE)$`:
|
|
345
|
+
Honor the pre-selected token.
|
|
346
|
+
Set <result><head/></result>.
|
|
347
|
+
|
|
348
|
+
Set <instruction></instruction> (clear the instruction, as
|
|
349
|
+
any instruction carried in via the arguments was already
|
|
350
|
+
applied to the plan in step 2 before this loop), so that a
|
|
351
|
+
pre-selected `REFINE` correctly asks the user for a *fresh*
|
|
352
|
+
refinement instruction below.
|
|
338
353
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
dialog.
|
|
354
|
+
- else:
|
|
355
|
+
Only output the following <template/> and then immediately
|
|
356
|
+
*STOP* processing the entire current skill:
|
|
343
357
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
pre-selected `REFINE` correctly asks the user for a *fresh*
|
|
348
|
-
refinement instruction below.
|
|
358
|
+
<template>
|
|
359
|
+
⧉ **ASE**: ☻ skill: **ase-task-edit**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
360
|
+
</template>
|
|
349
361
|
|
|
350
362
|
- If <getopt-option-next/> is equal to `none`:
|
|
351
363
|
Let the *user interactively choose* what to do as the next step.
|
|
@@ -371,10 +383,14 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
371
383
|
|
|
372
384
|
- If <result/> is `IMPLEMENT`:
|
|
373
385
|
|
|
374
|
-
*Break* out of the *loop
|
|
375
|
-
<
|
|
376
|
-
|
|
377
|
-
|
|
386
|
+
*Break* out of the *loop*. Set <args></args> (empty).
|
|
387
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
388
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
389
|
+
remaining list tokens to the downstream skill).
|
|
390
|
+
</if>
|
|
391
|
+
Only output the following <template/> and then call the
|
|
392
|
+
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
393
|
+
to *apply* the finalized plan.
|
|
378
394
|
|
|
379
395
|
<template>
|
|
380
396
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to implementation**
|
|
@@ -382,10 +398,14 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
382
398
|
|
|
383
399
|
- If <result/> is `PREFLIGHT`:
|
|
384
400
|
|
|
385
|
-
*Break* out of the *loop
|
|
386
|
-
<
|
|
387
|
-
|
|
388
|
-
|
|
401
|
+
*Break* out of the *loop*. Set <args></args> (empty).
|
|
402
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
403
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
404
|
+
remaining list tokens to the downstream skill).
|
|
405
|
+
</if>
|
|
406
|
+
Only output the following <template/> and then call the
|
|
407
|
+
`Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
|
|
408
|
+
to *apply* the finalized plan.
|
|
389
409
|
|
|
390
410
|
<template>
|
|
391
411
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to pre-flight**
|
|
@@ -398,13 +418,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
398
418
|
your instruction for further refining the plan?**`. Then set
|
|
399
419
|
<instruction/> to the response of the user.
|
|
400
420
|
|
|
401
|
-
|
|
402
|
-
the plan, and update <content/> in-place by *applying* the
|
|
403
|
-
requested <instruction/> to the *plan*. When refining the
|
|
404
|
-
plan this way, preserve the overall structure of the plan
|
|
405
|
-
and only modify what the user actually requested. Do *not*
|
|
406
|
-
rewrite unrelated sections of the plan.
|
|
407
|
-
Set <content-dirty>true</content-dirty>.
|
|
421
|
+
<expand name="apply-refinement"/>
|
|
408
422
|
|
|
409
423
|
Finally, only output the following <template/> and then
|
|
410
424
|
*continue* the *loop* at step **3.1**!
|
|
@@ -417,13 +431,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
417
431
|
|
|
418
432
|
Set <instruction><text/></instruction> (replace existing instruction).
|
|
419
433
|
|
|
420
|
-
|
|
421
|
-
the plan, and update <content/> in-place by *applying* the
|
|
422
|
-
requested <instruction/> to the *plan*. When refining the
|
|
423
|
-
plan this way, preserve the overall structure of the plan
|
|
424
|
-
and only modify what the user actually requested. Do *not*
|
|
425
|
-
rewrite unrelated sections of the plan.
|
|
426
|
-
Set <content-dirty>true</content-dirty>.
|
|
434
|
+
<expand name="apply-refinement"/>
|
|
427
435
|
|
|
428
436
|
Finally, only output the following <template/> and then
|
|
429
437
|
*continue* the *loop* at step **3.1**!
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
`ase-task-edit`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
10
|
[`--plan`|`-p` *option*]
|
|
11
|
-
[`--
|
|
11
|
+
[`--dry`|`-d`]
|
|
12
|
+
[`--next`|`-n` *option*[,...]]
|
|
12
13
|
[*id* | *id*: *instruction* | *instruction*]
|
|
13
14
|
|
|
14
15
|
## DESCRIPTION
|
|
@@ -32,13 +33,27 @@ command from outside the agent tool.
|
|
|
32
33
|
*instruction*), or `PRESERVE` (preserve the existing plan by
|
|
33
34
|
ignoring *instruction* and stopping skill processing).
|
|
34
35
|
|
|
35
|
-
`--
|
|
36
|
+
`--dry`|`-d`:
|
|
37
|
+
Generate any *new* plan *without* the `※ VERIFICATION` section.
|
|
38
|
+
Applies only to freshly generated plans, not to existing plans
|
|
39
|
+
loaded from disk. When `ase-task-implement` later applies such
|
|
40
|
+
a plan, it strictly skips the entire verification phase (no
|
|
41
|
+
build, tests, linter, type-checker, or program execution) once
|
|
42
|
+
the source files have been modified.
|
|
43
|
+
|
|
44
|
+
`--next`|`-n` *option*[,...]:
|
|
36
45
|
Automatically answer the user dialog for the next step (at the end
|
|
37
|
-
of this skill)
|
|
46
|
+
of this skill). *option* is a single token or a *comma-separated
|
|
47
|
+
chronological list* of tokens; each iteration of the planning loop
|
|
48
|
+
consumes the *first* token of the list, and on hand-off (`IMPLEMENT`
|
|
49
|
+
/ `PREFLIGHT`) any remaining tokens are *forwarded* (via `--next`)
|
|
50
|
+
to the downstream skill so an entire pipeline can be pre-scripted
|
|
51
|
+
in one shot. Recognized tokens at this skill: `none` (default,
|
|
38
52
|
interactive answer required), `DONE` (no next step), `IMPLEMENT`
|
|
39
53
|
(hand-over to `ase-task-implement`), `PREFLIGHT` (hand-over to
|
|
40
54
|
`ase-task-preflight`), or `REFINE` (refine the plan with subsequent
|
|
41
|
-
instruction).
|
|
55
|
+
instruction). Example: `--next REFINE,DONE` first refines once,
|
|
56
|
+
then exits the loop without asking.
|
|
42
57
|
|
|
43
58
|
## ARGUMENTS
|
|
44
59
|
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-grill
|
|
3
|
+
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
|
|
4
|
+
description: >
|
|
5
|
+
Interview the user relentlessly about the task plan until reaching a
|
|
6
|
+
shared understanding, resolving each branch of the question decision
|
|
7
|
+
tree. Use when the user wants to stress-test a plan, get grilled on
|
|
8
|
+
their plan, or mentions "grill me" or "grill plan".
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
effort: high
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
|
+
|
|
19
|
+
<skill name="ase-task-grill">
|
|
20
|
+
Iteratively Grill a Task Plan
|
|
21
|
+
</skill>
|
|
22
|
+
|
|
23
|
+
<expand name="getopt"
|
|
24
|
+
arg1="ase-task-grill"
|
|
25
|
+
arg2="--next|-n=(none|DONE|EDIT)...">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
29
|
+
<objective>
|
|
30
|
+
Interview the user relentlessly about every essential aspect of the
|
|
31
|
+
task plan until reaching a shared understanding.
|
|
32
|
+
</objective>
|
|
33
|
+
|
|
34
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
|
|
35
|
+
|
|
36
|
+
Procedure
|
|
37
|
+
---------
|
|
38
|
+
|
|
39
|
+
1. **Determine Task:**
|
|
40
|
+
|
|
41
|
+
1. Set <id>$ARGUMENTS</id> initially.
|
|
42
|
+
Inherit the always existing <ase-task-id/> from the current context.
|
|
43
|
+
Inherit the always existing <ase-session-id/> from the current context.
|
|
44
|
+
Do not output anything.
|
|
45
|
+
|
|
46
|
+
2. React on task id:
|
|
47
|
+
|
|
48
|
+
1. <if condition="
|
|
49
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
50
|
+
">
|
|
51
|
+
Set <ase-task-id><id/></ase-task-id> (set task id) and
|
|
52
|
+
call the `ase_task_id(id: "<ase-task-id/>", session:
|
|
53
|
+
"<ase-session-id/>")` tool from the `ase` MCP server
|
|
54
|
+
to switch the task, and then only output the following
|
|
55
|
+
<template/>:
|
|
56
|
+
|
|
57
|
+
<template>
|
|
58
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
59
|
+
</template>
|
|
60
|
+
</if>
|
|
61
|
+
|
|
62
|
+
2. else <if condition="<id/> is NOT empty">
|
|
63
|
+
The argument is neither empty nor a valid task id. As this
|
|
64
|
+
skill only accepts an optional `[<id>]` argument and *never*
|
|
65
|
+
a free-text instruction, only output the following <template/>
|
|
66
|
+
and then immediately *STOP* processing the entire current skill:
|
|
67
|
+
|
|
68
|
+
<template>
|
|
69
|
+
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **ERROR**: expected single `[<id>]` argument
|
|
70
|
+
</template>
|
|
71
|
+
</if>
|
|
72
|
+
|
|
73
|
+
2. **Determine Task Plan:**
|
|
74
|
+
|
|
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.
|
|
78
|
+
|
|
79
|
+
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
80
|
+
Output the following <template/> and then immediately *STOP*
|
|
81
|
+
processing the entire current skill:
|
|
82
|
+
|
|
83
|
+
<template>
|
|
84
|
+
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **<text/>**
|
|
85
|
+
</template>
|
|
86
|
+
|
|
87
|
+
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
88
|
+
Set <plan><text/></plan> (set plan to text).
|
|
89
|
+
Calculate the number of words <words/> of <plan/>.
|
|
90
|
+
|
|
91
|
+
Output the following <template/>:
|
|
92
|
+
|
|
93
|
+
<template>
|
|
94
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
95
|
+
</template>
|
|
96
|
+
|
|
97
|
+
2. <if condition="<plan/> is empty">
|
|
98
|
+
Complain and tell the user to use the `ase-code-resolve`,
|
|
99
|
+
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
100
|
+
first to create a task plan. Then immediately stop processing
|
|
101
|
+
this skill.
|
|
102
|
+
</if>
|
|
103
|
+
|
|
104
|
+
3. **Iterate Over Task Plan Aspects:**
|
|
105
|
+
|
|
106
|
+
Interactively interview the user *relentlessly* about every
|
|
107
|
+
*essential aspect* of the task plan in <plan/> *until* reaching a
|
|
108
|
+
shared understanding and no decisions/questions are left open.
|
|
109
|
+
|
|
110
|
+
For this process, determine the <n/> essential aspects <aspect-N/>
|
|
111
|
+
(a one or two word long short identifier like `Foo` or `Bar-Baz`)
|
|
112
|
+
and the corresponding decision/question <question-N/> where a shared
|
|
113
|
+
understanding is required upon.
|
|
114
|
+
|
|
115
|
+
Honor also the following checks for identifying the problematic
|
|
116
|
+
aspects:
|
|
117
|
+
|
|
118
|
+
- **Fuzzy Language**:
|
|
119
|
+
When the user uses vague or overloaded terms instead of a precise
|
|
120
|
+
or canonical terms.
|
|
121
|
+
|
|
122
|
+
- **Conflicting Terminology**:
|
|
123
|
+
When the user uses a term that conflicts with the existing
|
|
124
|
+
terminology in the code base.
|
|
125
|
+
|
|
126
|
+
- **Conflicting Code**:
|
|
127
|
+
When the user states how something works, check whether the
|
|
128
|
+
current code state really agrees.
|
|
129
|
+
|
|
130
|
+
- **Non-Concrete Scenarios**:
|
|
131
|
+
When domain relationships are being discussed, stress-test them
|
|
132
|
+
with specific scenarios. Invent scenarios that probe edge cases
|
|
133
|
+
and force the user to be precise about the boundaries between
|
|
134
|
+
concepts.
|
|
135
|
+
|
|
136
|
+
Then create a decisions/questions tree for them. Walk down each
|
|
137
|
+
branch of this decision tree, resolving dependencies between
|
|
138
|
+
decisions one-by-one. Ask the questions <question-N/> and determine
|
|
139
|
+
corresponding answer <answer-N/>, one at a time.
|
|
140
|
+
|
|
141
|
+
1. For each question <question-N/> in the iteration circle <N/>:
|
|
142
|
+
|
|
143
|
+
1. Output the following <template/>:
|
|
144
|
+
|
|
145
|
+
<template>
|
|
146
|
+
🟠 ASPECT <N/>/<n/>: **<aspect-N/>**, QUESTION: **<question-N/>**
|
|
147
|
+
</template>
|
|
148
|
+
|
|
149
|
+
2. Determine the answer alternatives:
|
|
150
|
+
|
|
151
|
+
1. Check the <plan/> for the answer <answer-N-1/>.
|
|
152
|
+
|
|
153
|
+
2. Check the code base and your world knowledge and
|
|
154
|
+
use this information to find *up to three* grounded
|
|
155
|
+
alternative answers <answer-N-K/> (K={2,3,4}).
|
|
156
|
+
|
|
157
|
+
3. Use an interactive user dialog
|
|
158
|
+
with header <aspect-N/> and question <question-N/>, and
|
|
159
|
+
let the user select the <answer-N/> out of <answer-N-K/>
|
|
160
|
+
(K={1..4}). In this dialog, mark the <answer-N-1/> by
|
|
161
|
+
appending ` ⚝ **CURRENT PLAN** ⚝` to its option name (not the
|
|
162
|
+
description).
|
|
163
|
+
|
|
164
|
+
4. Output the following <template/>:
|
|
165
|
+
|
|
166
|
+
<template>
|
|
167
|
+
🔵 ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
|
|
168
|
+
</template>
|
|
169
|
+
|
|
170
|
+
3. Finally, update the in <plan/> based on all answers <answer-N/>.
|
|
171
|
+
|
|
172
|
+
4. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
173
|
+
`ase` MCP server and use the `text` field of its response for
|
|
174
|
+
<timestamp-modified/> information. Then insert the current
|
|
175
|
+
<ase-task-id/>, previous <timestamp-created/>, and refreshed
|
|
176
|
+
<timestamp-modified/> information and calculate the number of
|
|
177
|
+
words <words/> of <plan/>.
|
|
178
|
+
|
|
179
|
+
5. Call the `ase_task_save(id: "<ase-task-id/>",
|
|
180
|
+
text: "<plan/>")` of the `ase` MCP server to save the updated
|
|
181
|
+
task plan content. Do not output anything related to this MCP
|
|
182
|
+
call.
|
|
183
|
+
|
|
184
|
+
6. Only output the following <template/> and continue processing:
|
|
185
|
+
|
|
186
|
+
<template>
|
|
187
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated**
|
|
188
|
+
</template>
|
|
189
|
+
|
|
190
|
+
4. **Decide Next Step:**
|
|
191
|
+
|
|
192
|
+
1. *Determine next step*:
|
|
193
|
+
|
|
194
|
+
- If <getopt-option-next/> is not equal to `none`:
|
|
195
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
196
|
+
list of pre-selected next-step tokens. *Split* it on `,`,
|
|
197
|
+
take the *first* token as <head/>, and store the remaining
|
|
198
|
+
tokens (joined back with `,`, or `none` if empty) into
|
|
199
|
+
<getopt-option-next/> so downstream skills can consume the tail.
|
|
200
|
+
|
|
201
|
+
- If <head/> matches the regex `^(DONE|EDIT|IMPLEMENT|PREFLIGHT)$`:
|
|
202
|
+
Honor the pre-selected token.
|
|
203
|
+
Set <result><head/></result>.
|
|
204
|
+
|
|
205
|
+
- else:
|
|
206
|
+
Only output the following <template/> and then immediately
|
|
207
|
+
*STOP* processing the entire current skill:
|
|
208
|
+
|
|
209
|
+
<template>
|
|
210
|
+
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
211
|
+
</template>
|
|
212
|
+
|
|
213
|
+
- If <getopt-option-next/> is equal to `none`:
|
|
214
|
+
Let the *user interactively choose* what to do as the next step.
|
|
215
|
+
|
|
216
|
+
<expand name="user-dialog">
|
|
217
|
+
Next Step: How would you like to proceed with the plan?
|
|
218
|
+
DONE: Stop processing.
|
|
219
|
+
EDIT: Hand off plan to editing.
|
|
220
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
221
|
+
PREFLIGHT: Hand off plan to pre-flighting.
|
|
222
|
+
</expand>
|
|
223
|
+
|
|
224
|
+
2. Check the tool <result/> and dispatch accordingly:
|
|
225
|
+
|
|
226
|
+
- If <result/> is `DONE` or `CANCEL`:
|
|
227
|
+
Only output the following <template/> and then *STOP*.
|
|
228
|
+
|
|
229
|
+
<template>
|
|
230
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
|
|
231
|
+
</template>
|
|
232
|
+
|
|
233
|
+
- If <result/> is `EDIT`:
|
|
234
|
+
Set <args></args> (empty).
|
|
235
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
236
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
237
|
+
remaining list tokens to the downstream skill).
|
|
238
|
+
</if>
|
|
239
|
+
Only output the following <template/> and then call the
|
|
240
|
+
tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
|
|
241
|
+
to invoke the `ase:ase-task-edit` skill in order to *edit*
|
|
242
|
+
the updated plan. Immediately stop processing the current
|
|
243
|
+
skill once the `Skill` tool was used.
|
|
244
|
+
|
|
245
|
+
<template>
|
|
246
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to edit**
|
|
247
|
+
</template>
|
|
248
|
+
|
|
249
|
+
- If <result/> is `IMPLEMENT`:
|
|
250
|
+
Set <args></args> (empty).
|
|
251
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
252
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
253
|
+
remaining list tokens to the downstream skill).
|
|
254
|
+
</if>
|
|
255
|
+
Only output the following <template/> and then call the
|
|
256
|
+
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
257
|
+
to *apply* the plan.
|
|
258
|
+
|
|
259
|
+
<template>
|
|
260
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
|
|
261
|
+
</template>
|
|
262
|
+
|
|
263
|
+
- If <result/> is `PREFLIGHT`:
|
|
264
|
+
Set <args></args> (empty).
|
|
265
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
266
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
267
|
+
remaining list tokens to the downstream skill).
|
|
268
|
+
</if>
|
|
269
|
+
Only output the following <template/> and then call the
|
|
270
|
+
`Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
|
|
271
|
+
to *apply* the plan.
|
|
272
|
+
|
|
273
|
+
<template>
|
|
274
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to pre-flight**
|
|
275
|
+
</template>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-task-grill` - Iteratively Grill a Task Plan
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-task-grill`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--next`|`-n` *option*[,...]]
|
|
11
|
+
[*id*]
|
|
12
|
+
|
|
13
|
+
## DESCRIPTION
|
|
14
|
+
|
|
15
|
+
The `ase-task-grill` skill *relentlessly interviews* the user about
|
|
16
|
+
every *essential aspect* of an existing *task plan* until a *shared
|
|
17
|
+
understanding* is reached and no decisions or questions are left open.
|
|
18
|
+
|
|
19
|
+
The skill identifies the essential aspects of the plan, builds a
|
|
20
|
+
decision tree of the open questions, and walks down each branch
|
|
21
|
+
one-by-one. For each aspect it presents up to four *grounded*
|
|
22
|
+
alternative answers (the current plan plus alternatives derived from
|
|
23
|
+
the code base and world knowledge), marks the current-plan choice, and
|
|
24
|
+
lets the user pick via an interactive dialog. It honors checks for
|
|
25
|
+
*fuzzy language*, *conflicting terminology*, *conflicting code*, and
|
|
26
|
+
*non-concrete scenarios*. Once all aspects are resolved, the plan is
|
|
27
|
+
updated and persisted, and the user is offered a hand-off to editing,
|
|
28
|
+
implementation, or preflight.
|
|
29
|
+
|
|
30
|
+
The task plan is stored in `.ase/tasks/`*id*`/plan.md` files of the
|
|
31
|
+
project and can be alternatively edited with the "`ase task edit` *id*"
|
|
32
|
+
command from outside the agent tool.
|
|
33
|
+
|
|
34
|
+
## OPTIONS
|
|
35
|
+
|
|
36
|
+
`--next`|`-n` *option*[,...]:
|
|
37
|
+
Automatically answer the user dialog for the next step (at the end
|
|
38
|
+
of this skill). *option* is a single token or a *comma-separated
|
|
39
|
+
chronological list* of tokens; the *first* token is consumed by
|
|
40
|
+
this skill and any remaining tokens are *forwarded* (via `--next`)
|
|
41
|
+
to the downstream skill on hand-off so an entire pipeline can be
|
|
42
|
+
pre-scripted in one shot. Recognized tokens at this skill: `none`
|
|
43
|
+
(default, interactive answer required), `DONE` (no next step),
|
|
44
|
+
`EDIT` (hand-over to `ase-task-edit`), `IMPLEMENT` (hand-over to
|
|
45
|
+
`ase-task-implement`), or `PREFLIGHT` (hand-over to
|
|
46
|
+
`ase-task-preflight`).
|
|
47
|
+
|
|
48
|
+
## ARGUMENTS
|
|
49
|
+
|
|
50
|
+
*id*:
|
|
51
|
+
Grill the task with the unique identifier *id* (default: `default`).
|
|
52
|
+
The skill accepts *only* an optional *id* argument and never a
|
|
53
|
+
free-text instruction.
|
|
54
|
+
|
|
55
|
+
## EXAMPLES
|
|
56
|
+
|
|
57
|
+
Grill the current task plan:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
❯ /ase-task-grill
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Grill the task plan under id `hello`:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
❯ /ase-task-grill hello
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Grill the current task plan and then hand off to editing:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
❯ /ase-task-grill --next EDIT
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## SEE ALSO
|
|
76
|
+
|
|
77
|
+
`ase-task-edit`, `ase-task-reboot`, `ase-task-preflight`,
|
|
78
|
+
`ase-task-implement`, `ase-task-view`, `ase-task-list`,
|
|
79
|
+
`ase-task-rename`, `ase-task-delete`.
|