@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.
Files changed (41) hide show
  1. package/dst/ase-getopt.js +28 -2
  2. package/dst/ase-hello.js +5 -5
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/meta/ase-format-adr.md +199 -0
  7. package/plugin/meta/ase-getopt.md +29 -9
  8. package/plugin/package.json +1 -1
  9. package/plugin/skills/ase-arch-discover/SKILL.md +1 -1
  10. package/plugin/skills/ase-code-craft/SKILL.md +49 -15
  11. package/plugin/skills/ase-code-craft/help.md +24 -8
  12. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  13. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  14. package/plugin/skills/ase-code-refactor/SKILL.md +49 -15
  15. package/plugin/skills/ase-code-refactor/help.md +24 -8
  16. package/plugin/skills/ase-code-resolve/SKILL.md +49 -15
  17. package/plugin/skills/ase-code-resolve/help.md +24 -8
  18. package/plugin/skills/ase-meta-changes/SKILL.md +1 -1
  19. package/plugin/skills/ase-meta-chat/SKILL.md +1 -1
  20. package/plugin/skills/ase-meta-diaboli/SKILL.md +152 -0
  21. package/plugin/skills/ase-meta-diaboli/help.md +60 -0
  22. package/plugin/skills/ase-meta-persona/SKILL.md +1 -1
  23. package/plugin/skills/ase-meta-quorum/SKILL.md +1 -1
  24. package/plugin/skills/ase-meta-search/SKILL.md +1 -1
  25. package/plugin/skills/ase-meta-why/SKILL.md +4 -4
  26. package/plugin/skills/ase-task-delete/SKILL.md +2 -2
  27. package/plugin/skills/ase-task-edit/SKILL.md +89 -81
  28. package/plugin/skills/ase-task-edit/help.md +19 -4
  29. package/plugin/skills/ase-task-grill/SKILL.md +275 -0
  30. package/plugin/skills/ase-task-grill/help.md +79 -0
  31. package/plugin/skills/ase-task-id/SKILL.md +1 -1
  32. package/plugin/skills/ase-task-implement/SKILL.md +41 -9
  33. package/plugin/skills/ase-task-implement/help.md +15 -4
  34. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  35. package/plugin/skills/ase-task-preflight/SKILL.md +40 -13
  36. package/plugin/skills/ase-task-preflight/help.md +10 -5
  37. package/plugin/skills/ase-task-reboot/SKILL.md +61 -11
  38. package/plugin/skills/ase-task-reboot/help.md +13 -6
  39. package/plugin/skills/ase-task-rename/SKILL.md +1 -1
  40. package/plugin/skills/ase-task-view/SKILL.md +1 -1
  41. /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
- Create a new plan from scratch and store the result as
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
- Treat the <instruction/> as a *refinement instruction* for
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
- Treat the <instruction/> as a *refinement instruction* for
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
- Create a new plan from scratch and store the result as
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/> matches the regex `^(DONE|IMPLEMENT|PREFLIGHT|REFINE)$`:
336
- Honor the pre-selection what to do as the next step.
337
- Set <result><getopt-option-next/></result>.
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
- Then *clear* <getopt-option-next/> by setting
340
- <getopt-option-next>none</getopt-option-next> so that
341
- subsequent loop iterations fall back to the interactive
342
- dialog.
354
+ - else:
355
+ Only output the following <template/> and then immediately
356
+ *STOP* processing the entire current skill:
343
357
 
344
- Set <instruction></instruction> (clear the instruction, as
345
- any instruction carried in via the arguments was already
346
- applied to the plan in step 2 before this loop), so that a
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*, only output the following
375
- <template/> and then call the `Skill(skill:
376
- "ase:ase-task-implement")` tool to *apply* the finalized
377
- plan.
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*, only output the following
386
- <template/> and then call the `Skill(skill:
387
- "ase:ase-task-preflight")` tool to *apply* the finalized
388
- plan.
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
- Treat the <instruction/> as a *refinement instruction* for
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
- Treat the <instruction/> as a *refinement instruction* for
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
- [`--next`|`-n` *option*]
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
- `--next`|`-n` *option*:
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) with *option*, which can be either `none` (default,
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
+ &#x1F7E0; 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
+ &#x1F535; 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`.
@@ -7,7 +7,7 @@ description: >
7
7
  or wants to know what the current task is.
8
8
  user-invocable: true
9
9
  disable-model-invocation: false
10
- effort: low
10
+ effort: high
11
11
  ---
12
12
 
13
13
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md