@rse/ase 0.0.58 → 0.0.60

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 +12 -5
  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 +43 -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 +43 -15
  15. package/plugin/skills/ase-code-refactor/help.md +24 -8
  16. package/plugin/skills/ase-code-resolve/SKILL.md +43 -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 +1 -1
  27. package/plugin/skills/ase-task-edit/SKILL.md +42 -23
  28. package/plugin/skills/ase-task-edit/help.md +10 -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 +31 -9
  33. package/plugin/skills/ase-task-implement/help.md +8 -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
@@ -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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-implement
3
- argument-hint: "[--help|-h] [--next|-n <option>] [<id>]"
3
+ argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
4
4
  description: >
5
5
  Implement current or given task plan.
6
6
  Use when the user calls to "implement", "realize" or "apply" the
@@ -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)...">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -30,6 +30,8 @@ Implement a Task Plan
30
30
  with a corresponding, complete *change set*.
31
31
  </objective>
32
32
 
33
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
34
+
33
35
  Procedure
34
36
  ---------
35
37
 
@@ -149,9 +151,24 @@ explicitly requested by this procedure via outputs based on a <template/>!
149
151
 
150
152
  1. *Determine next step*:
151
153
 
152
- - If <getopt-option-next/> matches the regex `^(DONE|DELETE)$`:
153
- Honor the pre-selection what to do as the next step.
154
- Set <result><getopt-option-next/></result>.
154
+ - If <getopt-option-next/> is not equal to `none`:
155
+ Treat <getopt-option-next/> as a comma-separated chronological
156
+ list of pre-selected next-step tokens. *Split* it on `,`,
157
+ take the *first* token as <head/>, and store the remaining
158
+ tokens (joined back with `,`, or `none` if empty) into
159
+ <getopt-option-next/> so downstream skills can consume the tail.
160
+
161
+ - If <head/> matches the regex `^(DONE|DELETE)$`:
162
+ Honor the pre-selected token.
163
+ Set <result><head/></result>.
164
+
165
+ - else:
166
+ Only output the following <template/> and then immediately
167
+ *STOP* processing the entire current skill:
168
+
169
+ <template>
170
+ ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: invalid `--next` token: **<head/>**
171
+ </template>
155
172
 
156
173
  - If <getopt-option-next/> is equal to `none`:
157
174
  Let the *user interactively choose* what to do as the next step.
@@ -172,11 +189,16 @@ explicitly requested by this procedure via outputs based on a <template/>!
172
189
  </template>
173
190
 
174
191
  - 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>
175
197
  Only output the following <template/> and then call the
176
- tool `Skill(skill: "ase:ase-task-delete")` to invoke the
177
- `ase:ase-task-delete` skill in order to *delete* the updated
178
- plan. Immediately stop processing the current skill once the
179
- `Skill` tool was used.
198
+ tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
199
+ to invoke the `ase:ase-task-delete` skill in order to
200
+ *delete* the updated plan. Immediately stop processing the
201
+ current skill once the `Skill` tool was used.
180
202
 
181
203
  <template>
182
204
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
@@ -7,7 +7,7 @@
7
7
 
8
8
  `ase-task-implement`
9
9
  [`--help`|`-h`]
10
- [`--next`|`-n` *option*]
10
+ [`--next`|`-n` *option*[,...]]
11
11
  [*id*]
12
12
 
13
13
  ## DESCRIPTION
@@ -31,9 +31,13 @@ delete the task plan, unless `--next` pre-selects this choice.
31
31
 
32
32
  ## OPTIONS
33
33
 
34
- `--next`|`-n` *option*:
35
- Automatically answer the user dialog for the next step with
36
- *option*, which can be either `none` (default, interactive
34
+ `--next`|`-n` *option*[,...]:
35
+ Automatically answer the user dialog for the next step. *option*
36
+ is a single token or a *comma-separated chronological list* of
37
+ tokens; the *first* token is consumed by this skill, and any
38
+ remaining tokens are *forwarded* (via `--next`) to the downstream
39
+ skill so an entire pipeline can be pre-scripted in one shot.
40
+ Recognized tokens at this skill: `none` (default, interactive
37
41
  answer required), `DONE` (preserve task plan and stop), or
38
42
  `DELETE` (hand off to `ase-task-delete`).
39
43
 
@@ -6,7 +6,7 @@ description: >
6
6
  Use when user wants to see all tasks.
7
7
  user-invocable: true
8
8
  disable-model-invocation: false
9
- effort: low
9
+ effort: high
10
10
  ---
11
11
 
12
12
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-preflight
3
- argument-hint: "[--help|-h] [--next|-n <option>] [<id>]"
3
+ argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
4
4
  description: >
5
5
  Preflight the implementation of current or given task plan.
6
6
  Use when the user calls to "preflight", "dry-run" or "test-drive"
@@ -21,7 +21,7 @@ Preflight a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-preflight"
24
- arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)">
24
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)...">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -30,6 +30,8 @@ Preflight a Task Plan
30
30
  for a corresponding, *complete source code change set*.
31
31
  </objective>
32
32
 
33
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
34
+
33
35
  Procedure
34
36
  ---------
35
37
 
@@ -161,9 +163,24 @@ explicitly requested by this procedure via outputs based on a <template/>!
161
163
 
162
164
  1. *Determine next step*:
163
165
 
164
- - If <getopt-option-next/> matches the regex `^(DONE|EDIT|IMPLEMENT)$`:
165
- Honor the pre-selection what to do as the next step.
166
- Set <result><getopt-option-next/></result>.
166
+ - If <getopt-option-next/> is not equal to `none`:
167
+ Treat <getopt-option-next/> as a comma-separated chronological
168
+ list of pre-selected next-step tokens. *Split* it on `,`,
169
+ take the *first* token as <head/>, and store the remaining
170
+ tokens (joined back with `,`, or `none` if empty) into
171
+ <getopt-option-next/> so downstream skills can consume the tail.
172
+
173
+ - If <head/> matches the regex `^(DONE|EDIT|IMPLEMENT)$`:
174
+ Honor the pre-selected token.
175
+ Set <result><head/></result>.
176
+
177
+ - else:
178
+ Only output the following <template/> and then immediately
179
+ *STOP* processing the entire current skill:
180
+
181
+ <template>
182
+ ⧉ **ASE**: ☻ skill: **ase-task-preflight**, ▶ ERROR: invalid `--next` token: **<head/>**
183
+ </template>
167
184
 
168
185
  - If <getopt-option-next/> is equal to `none`:
169
186
  Let the *user interactively choose* what to do as the next step.
@@ -185,22 +202,32 @@ explicitly requested by this procedure via outputs based on a <template/>!
185
202
  </template>
186
203
 
187
204
  - If <result/> is `EDIT`:
205
+ Set <args></args> (empty).
206
+ <if condition="<getopt-option-next/> is not equal `none`">
207
+ Set <args>--next <getopt-option-next/></args> (forward
208
+ remaining list tokens to the downstream skill).
209
+ </if>
188
210
  Only output the following <template/> and then call the
189
- tool `Skill(skill: "ase:ase-task-edit")` to invoke the
190
- `ase:ase-task-edit` skill in order to *edit* the updated
191
- plan. Immediately stop processing the current skill once the
192
- `Skill` tool was used.
211
+ tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
212
+ to invoke the `ase:ase-task-edit` skill in order to *edit*
213
+ the updated plan. Immediately stop processing the current
214
+ skill once the `Skill` tool was used.
193
215
 
194
216
  <template>
195
217
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to edit**
196
218
  </template>
197
219
 
198
220
  - If <result/> is `IMPLEMENT`:
221
+ Set <args></args> (empty).
222
+ <if condition="<getopt-option-next/> is not equal `none`">
223
+ Set <args>--next <getopt-option-next/></args> (forward
224
+ remaining list tokens to the downstream skill).
225
+ </if>
199
226
  Only output the following <template/> and then call the
200
- tool `Skill(skill: "ase:ase-task-implement")` to invoke the
201
- `ase:ase-task-implement` skill in order to *implement* the
202
- updated plan. Immediately stop processing the current skill
203
- once the `Skill` tool was used.
227
+ tool `Skill(skill: "ase:ase-task-implement", args: <args/>)`
228
+ to invoke the `ase:ase-task-implement` skill in order to
229
+ *implement* the updated plan. Immediately stop processing
230
+ the current skill once the `Skill` tool was used.
204
231
 
205
232
  <template>
206
233
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implement**
@@ -7,7 +7,7 @@
7
7
 
8
8
  `ase-task-preflight`
9
9
  [`--help`|`-h`]
10
- [`--next`|`-n` *option*]
10
+ [`--next`|`-n` *option*[,...]]
11
11
  [*id*]
12
12
 
13
13
  ## DESCRIPTION
@@ -25,12 +25,17 @@ unless `--next` pre-selects this choice.
25
25
 
26
26
  ## OPTIONS
27
27
 
28
- `--next`|`-n` *option*:
29
- Automatically answer the user dialog for the next step with
30
- *option*, which can be either `none` (default, interactive
28
+ `--next`|`-n` *option*[,...]:
29
+ Automatically answer the user dialog for the next step. *option*
30
+ is a single token or a *comma-separated chronological list* of
31
+ tokens; the *first* token is consumed by this skill, and any
32
+ remaining tokens are *forwarded* (via `--next`) to the downstream
33
+ skill so an entire pipeline can be pre-scripted in one shot.
34
+ Recognized tokens at this skill: `none` (default, interactive
31
35
  answer required), `DONE` (stop), `EDIT` (hand off to
32
36
  `ase-task-edit`), or `IMPLEMENT` (hand off to
33
- `ase-task-implement`).
37
+ `ase-task-implement`). Example: `--next IMPLEMENT,DONE` runs the
38
+ preflight, hands off to implementation, then exits without asking.
34
39
 
35
40
  ## ARGUMENTS
36
41