@rse/ase 0.0.30 → 0.0.31

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 (48) hide show
  1. package/dst/ase-hello.js +22 -0
  2. package/dst/ase-hook.js +3 -1
  3. package/dst/ase-setup.js +10 -7
  4. package/package.json +2 -1
  5. package/plugin/.claude/settings.local.json +7 -0
  6. package/plugin/.claude-plugin/plugin.json +20 -0
  7. package/plugin/.github/plugin/plugin.json +21 -0
  8. package/plugin/agents/ase-meta-chat.md +10 -0
  9. package/plugin/agents/ase-meta-search.md +16 -0
  10. package/plugin/commands/ase-code-lint/complete.md +9 -0
  11. package/plugin/commands/ase-code-lint/explain.md +9 -0
  12. package/plugin/commands/ase-code-lint/nope.md +11 -0
  13. package/plugin/commands/ase-code-lint/reassess.md +15 -0
  14. package/plugin/commands/ase-code-lint/recheck.md +9 -0
  15. package/plugin/commands/ase-code-lint/refine.md +9 -0
  16. package/plugin/hooks/hooks-copilot.json +23 -0
  17. package/plugin/hooks/hooks.json +40 -0
  18. package/plugin/meta/ase-constitution.md +114 -0
  19. package/plugin/meta/ase-dialog.md +122 -0
  20. package/plugin/meta/ase-persona.md +63 -0
  21. package/plugin/meta/ase-plan.md +69 -0
  22. package/plugin/meta/ase-skill.md +238 -0
  23. package/plugin/skills/ase-arch-analyze/SKILL.md +442 -0
  24. package/plugin/skills/ase-arch-discover/SKILL.md +160 -0
  25. package/plugin/skills/ase-code-analyze/SKILL.md +108 -0
  26. package/plugin/skills/ase-code-craft/SKILL.md +237 -0
  27. package/plugin/skills/ase-code-explain/SKILL.md +115 -0
  28. package/plugin/skills/ase-code-insight/SKILL.md +96 -0
  29. package/plugin/skills/ase-code-lint/SKILL.md +382 -0
  30. package/plugin/skills/ase-code-refactor/SKILL.md +241 -0
  31. package/plugin/skills/ase-code-resolve/SKILL.md +299 -0
  32. package/plugin/skills/ase-meta-changes/SKILL.md +95 -0
  33. package/plugin/skills/ase-meta-chat/SKILL.md +58 -0
  34. package/plugin/skills/ase-meta-commit/SKILL.md +64 -0
  35. package/plugin/skills/ase-meta-diagram/SKILL.md +101 -0
  36. package/plugin/skills/ase-meta-evaluate/SKILL.md +247 -0
  37. package/plugin/skills/ase-meta-persona/SKILL.md +52 -0
  38. package/plugin/skills/ase-meta-quorum/SKILL.md +122 -0
  39. package/plugin/skills/ase-meta-search/SKILL.md +48 -0
  40. package/plugin/skills/ase-meta-why/SKILL.md +69 -0
  41. package/plugin/skills/ase-task-delete/SKILL.md +76 -0
  42. package/plugin/skills/ase-task-edit/SKILL.md +390 -0
  43. package/plugin/skills/ase-task-id/SKILL.md +46 -0
  44. package/plugin/skills/ase-task-implement/SKILL.md +146 -0
  45. package/plugin/skills/ase-task-list/SKILL.md +44 -0
  46. package/plugin/skills/ase-task-preflight/SKILL.md +181 -0
  47. package/plugin/skills/ase-task-reboot/SKILL.md +161 -0
  48. package/plugin/skills/ase-task-view/SKILL.md +81 -0
@@ -0,0 +1,390 @@
1
+ ---
2
+ name: ase-task-edit
3
+ argument-hint: "[<id> | <id>: <instruction> | <instruction>]"
4
+ description: >
5
+ Iteratively edit and refine a named plan for a task through a
6
+ conversational loop. Each round, the current plan is shown and the
7
+ user is asked whether to keep refining, mark the plan as done, or
8
+ proceed to the implementation or preflight. Use when the user wants
9
+ to plan a task purely through chat-driven refinement.
10
+ user-invocable: true
11
+ disable-model-invocation: false
12
+ effort: high
13
+ ---
14
+
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
16
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
17
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
18
+
19
+ Iteratively Edit a Task Plan
20
+ ============================
21
+
22
+ <skill name="ase-task-edit">
23
+ Iteratively Edit a Task Plan
24
+ </skill>
25
+
26
+ Your role is an experienced, *expert-level assistant*,
27
+ specialized in the *planning* of changes
28
+ through *iterative conversational refinement*.
29
+
30
+ Establish and refine the *task plan* purely through a *chat-driven
31
+ loop*. The user steers each round via interactive dialog that offers
32
+ continued refinement, finalization, or hand-off to implementation or
33
+ preflight.
34
+
35
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-plan.md
36
+
37
+ Procedure
38
+ ---------
39
+
40
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
41
+ You *MUST* not skip any numbered item during processing!
42
+
43
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
44
+ explicitly requested by this procedure via outputs based on a <template/>!
45
+
46
+ 1. **Determine Task and Instruction:**
47
+
48
+ 1. Set <instruction>$ARGUMENTS</instruction> initially.
49
+ Inherit the always existing <ase-task-id/> from the current context.
50
+ Do not output anything.
51
+
52
+ 2. React on task and/or instruction:
53
+
54
+ 1. <if condition="
55
+ <instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
56
+ ">
57
+ Set <ase-task-id><instruction/></ase-task-id> (set task
58
+ id to instruction) and <instruction></instruction> (set
59
+ instruction empty), call the `task_id(id: <ase-task-id/>,
60
+ session: <ase-session-id/>)` tool from the `ase` MCP
61
+ service to switch the task, and then only output the
62
+ following <template/>:
63
+
64
+ <template>
65
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
66
+ </template>
67
+ </if>
68
+
69
+ 2. else <if condition="
70
+ <instruction/> has the format `<id/>: <text/>` where
71
+ <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
72
+ <text/> is *empty*
73
+ ">
74
+ Set <instruction></instruction> (set instruction to empty)
75
+ and <ase-task-id><id/></ase-task-id> (set task id to
76
+ id) and call the `task_id(id: <ase-task-id/>, session:
77
+ <ase-session-id/>)` tool from the `ase` MCP service to
78
+ switch the task, and then only output the following
79
+ <template/>:
80
+
81
+ <template>
82
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
83
+ </template>
84
+ </if>
85
+
86
+ 3. else <if condition="
87
+ <instruction/> has the format `<id/>: <text/>` where
88
+ <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
89
+ <text/> is *not empty*
90
+ ">
91
+ Set <instruction><text/></instruction> (set instruction to
92
+ text) and <ase-task-id><id/></ase-task-id> (set task id
93
+ to id) and call the `task_id(id: <ase-task-id/>, session:
94
+ <ase-session-id/>)` tool from the `ase` MCP service to
95
+ switch the task, and then only output the following
96
+ <template/>:
97
+
98
+ <template>
99
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
100
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
101
+ </template>
102
+ </if>
103
+
104
+ 4. else <if condition="
105
+ <instruction/> is not empty
106
+ ">
107
+ Only output the following <template/>:
108
+
109
+ <template>
110
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
111
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
112
+ </template>
113
+ </if>
114
+
115
+ 5. else <if condition="
116
+ <instruction/> is empty
117
+ ">
118
+ Only output the following <template/>:
119
+
120
+ <template>
121
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
122
+ </template>
123
+ </if>
124
+
125
+ 2. **Determine Plan:**
126
+
127
+ 1. Call the `task_load(id: <ase-task-id/>)` tool of the `ase` MCP
128
+ service to load any existing plan content and set <text/> to
129
+ the `text` output field of this `task_load` tool call.
130
+ Do not output anything related to this MCP tool call.
131
+ Set <content-dirty>false</content-dirty>.
132
+
133
+ - If <text/> starts with `ERROR:`:
134
+ Silently ignore the MCP error.
135
+ Set <content/> to empty.
136
+ Set <words/> to "0".
137
+ Do not output anything.
138
+
139
+ - If <text/> starts NOT with `ERROR:`:
140
+ Set <content><text/></content> (set content to text).
141
+ Calculate the number of words <words/> of <content/>.
142
+ Only output the following <template/>:
143
+
144
+ <template>
145
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
146
+ </template>
147
+
148
+ 2. <if condition="<content/> is empty AND <instruction/> is empty">
149
+ Ask the user interactively, without a special tool, for the
150
+ initial plan content with a single question:
151
+
152
+ `**No plan content yet. What is the task you want to plan?**`
153
+
154
+ Then set <instruction/> to the response of the user and only
155
+ output the following <template/>:
156
+
157
+ <template>
158
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
159
+ </template>
160
+ </if>
161
+
162
+ 3. <if condition="<content/> is not empty AND
163
+ <instruction/> is not empty AND
164
+ <instruction/> is not equal <content/>">
165
+ Let the *user interactively choose* what to do as the next step.
166
+
167
+ <expand name="user-dialog>
168
+ Previous Plan: Should the previous plan content be overwritten, refined, or preserved?
169
+ OVERWRITE: Continue operation, overwrite previous plan.
170
+ REFINE: Continue operation, refine previous plan.
171
+ PRESERVE: Cancel operation, preserve previous plan.
172
+ </expand>
173
+
174
+ Check the tool <result/> and dispatch accordingly:
175
+
176
+ - If <result/> is `CANCEL` or `PRESERVE`:
177
+
178
+ Only output the following <template/> and then immediately
179
+ *STOP* processing this skill:
180
+
181
+ <template>
182
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan preserved**
183
+ </template>
184
+
185
+ - If <result/> is `OVERWRITE`:
186
+
187
+ Create a new plan from scratch and store the result as
188
+ <content/> by closely following the defined plan format
189
+ <format/> and injecting into it all the information from
190
+ the <instruction/> and all decisions you derived from the
191
+ <instruction/>.
192
+
193
+ Call the `timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
194
+ `ase` MCP service and use the `text` field of its response
195
+ for fresh <timestamp-created/> and <timestamp-modified/>
196
+ information. Then insert the current <ase-task-id/>,
197
+ <timestamp-created/>, and <timestamp-modified/> information
198
+ and calculate the number of words <words/> of <content/>.
199
+ Set <content-dirty>true</content-dirty>.
200
+
201
+ Only output the following <template/> and continue processing:
202
+
203
+ <template>
204
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan overwritten**
205
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
206
+ </template>
207
+
208
+ - If <result/> is `REFINE`:
209
+
210
+ Treat the <instruction/> as a *refinement instruction* for
211
+ the plan, and update <content/> in-place by *applying* the
212
+ requested <instruction/> to the *plan*. When refining the
213
+ plan this way, preserve the overall structure of the plan
214
+ and only modify what the user actually requested. Do *not*
215
+ rewrite unrelated sections of the plan.
216
+
217
+ Calculate the number of words <words/> of <content/>.
218
+ Set <content-dirty>true</content-dirty>.
219
+
220
+ Only output the following <template/> and continue processing:
221
+
222
+ <template>
223
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan refined**
224
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
225
+ </template>
226
+ </if>
227
+
228
+ 4. <if condition="<content/> does not contain '# ✪ TASK PLAN:' AND <instruction/> is empty">
229
+ Set <instruction><content/></instruction> (set instruction to content).
230
+ Set <content></content> (set content to empty).
231
+ Set <content-dirty>true</content-dirty>.
232
+ Do not output anything.
233
+ </if>
234
+
235
+ 5. <if condition="<content/> is empty AND <instruction/> is not empty">
236
+ Create a new plan from scratch and store the result as
237
+ <content/> by closely following the defined plan format
238
+ <format/> and injecting into it all the information from
239
+ the <instruction/> and all decisions you derived from the
240
+ <instruction/>.
241
+
242
+ Call the `timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
243
+ `ase` MCP service and use the `text` field of its response
244
+ for fresh <timestamp-created/> and <timestamp-modified/>
245
+ information. Then insert the current <ase-task-id/>,
246
+ <timestamp-created/>, and <timestamp-modified/> information
247
+ and calculate the number of words <words/> of <content/>.
248
+ Set <content-dirty>true</content-dirty>.
249
+
250
+ Only output the following <template/> and continue processing:
251
+
252
+ <template>
253
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
254
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan generated**
255
+ </template>
256
+ </if>
257
+
258
+ 3. **Iterative Plan Refinement Loop:**
259
+
260
+ *REPEAT* the following steps 3.1 to 3.4 in a *LOOP* until
261
+ the user selects `DONE`, `IMPLEMENT`, or `PREFLIGHT`, or
262
+ declines/cancels in the dialog of step 3.4:
263
+
264
+ 1. *Update timestamp*:
265
+ <if condition="<content/> contains '✎ modified:' AND <content-dirty/> is 'true'">
266
+ Set update <timestamp-modified/> with the current time in
267
+ ISO-style format, which has to be determined by calling the
268
+ `timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
269
+ MCP service and use the `text` field of its response. Update
270
+ <content/> with the new `✎ modified: **<timestamp-modified/>**`.
271
+ Do not output anything.
272
+ </if>
273
+
274
+ 2. *Persist plan*:
275
+ <if condition="<content-dirty/> is 'true'">
276
+ Call the `task_save(id: <ase-task-id/>, text: <content/>)` tool
277
+ of the `ase` MCP service to persist the current plan, and then
278
+ set <content-dirty>false</content-dirty> again. Calculate the
279
+ number of words <words/> of <content/>. Do not output anything
280
+ related to this MCP tool call except the following <template/>:
281
+
282
+ <template>
283
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan saved**
284
+ </template>
285
+ </if>
286
+
287
+ 3. *Render plan*: Only output the following <template/>, so the user
288
+ can read the plan and react to it. Do *not* truncate, summarize,
289
+ or partially show the plan -- always show the complete plan
290
+ <content/> here:.
291
+
292
+ <template>
293
+ ⧉ **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `TASK-PLAN-BEGIN` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
294
+ <content/>
295
+ ⧉ **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `TASK-PLAN-END` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
296
+ </template>
297
+
298
+ 4. *Ask user*: Let the *user interactively choose* what to do as the
299
+ next step.
300
+
301
+ <expand name="user-dialog>
302
+ Next Step: How would you like to proceed with the plan?
303
+ DONE: Mark plan finalized, exit planning loop.
304
+ IMPLEMENT: Hand off plan to implementation.
305
+ PREFLIGHT: Hand off plan to pre-flighting.
306
+ REFINE: Further refine plan with instructions.
307
+ </expand>
308
+
309
+ Check the tool <result/> and dispatch accordingly:
310
+
311
+ - If <result/> is `DONE`:
312
+
313
+ *Break* out of the *loop*, only output the following <template/>
314
+ and then *STOP*. Do *not* implement the plan.
315
+
316
+ <template>
317
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
318
+ </template>
319
+
320
+ - If <result/> is `IMPLEMENT`:
321
+
322
+ *Break* out of the *loop*, only output the following
323
+ <template/> and then use the `Skill` tool to invoke the
324
+ `ase:ase-task-implement` skill in order to *apply* the finalized
325
+ plan.
326
+
327
+ <template>
328
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to implementation**
329
+ </template>
330
+
331
+ - If <result/> is `PREFLIGHT`:
332
+
333
+ *Break* out of the *loop*, only output the following
334
+ <template/> and then use the `Skill` tool to invoke the
335
+ `ase:ase-task-preflight` skill in order to *apply* the finalized
336
+ plan.
337
+
338
+ <template>
339
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to pre-flight**
340
+ </template>
341
+
342
+ - If <result/> is `REFINE`:
343
+
344
+ Ask the user interactively, without a special tool, for
345
+ the refinement instruction with a single question `**What
346
+ is your instruction for refining the plan?**`. Then set
347
+ <instruction/> to the response of the user.
348
+
349
+ Treat the <instruction/> as a *refinement instruction* for
350
+ the plan, and update <content/> in-place by *applying* the
351
+ requested <instruction/> to the *plan*. When refining the
352
+ plan this way, preserve the overall structure of the plan
353
+ and only modify what the user actually requested. Do *not*
354
+ rewrite unrelated sections of the plan.
355
+ Set <content-dirty>true</content-dirty>.
356
+
357
+ Finally, only output the following <template/> and then
358
+ *continue* the *loop* at step **3.1**!
359
+
360
+ <template>
361
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **plan refined**
362
+ </template>
363
+
364
+ - If <result/> matches `OTHER: <text/>`:
365
+
366
+ Set <instruction><text/></instruction>.
367
+
368
+ Treat the <instruction/> as a *refinement instruction* for
369
+ the plan, and update <content/> in-place by *applying* the
370
+ requested <instruction/> to the *plan*. When refining the
371
+ plan this way, preserve the overall structure of the plan
372
+ and only modify what the user actually requested. Do *not*
373
+ rewrite unrelated sections of the plan.
374
+ Set <content-dirty>true</content-dirty>.
375
+
376
+ Finally, only output the following <template/> and then
377
+ *continue* the *loop* at step **3.1**!
378
+
379
+ <template>
380
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **plan refined**
381
+ </template>
382
+
383
+ - If <result/> is `CANCEL`:
384
+
385
+ *Break* out of the *loop*, only output the following <template/>
386
+ and then *STOP*. Do *not* implement the plan.
387
+
388
+ <template>
389
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan refinement cancelled**
390
+ </template>
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: ase-task-id
3
+ argument-hint: "[<id>]"
4
+ description: >
5
+ Get or set unique task id <id>.
6
+ Use when user requests to work on a certain task
7
+ or wants to know what the current task is.
8
+ user-invocable: true
9
+ disable-model-invocation: false
10
+ effort: low
11
+ ---
12
+
13
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
14
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
+
16
+ Task Configuration
17
+ ==================
18
+
19
+ <skill name="ase-task-id">
20
+ Configure Task Id
21
+ </skill>
22
+
23
+ 1. Determine request:
24
+ <request>$ARGUMENTS</request>
25
+
26
+ 2. <if condition="<request/> is empty">
27
+ - Call the `task_id(session: <ase-session-id/>)`
28
+ tool from the `ase` MCP service and set
29
+ <ase-task-id/> to its `text` output.
30
+
31
+ - Output:
32
+ <template>
33
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**
34
+ </template>
35
+ </if>
36
+
37
+ 3. <if condition="<request/> is NOT empty">
38
+ - Set <ase-task-id><request/></ase-task-id> and
39
+ call the `task_id(id: <ase-task-id/>, session: <ase-session-id/>)`
40
+ tool from the `ase` MCP service.
41
+
42
+ - Output:
43
+ <template>
44
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>** (*updated*)
45
+ </template>
46
+ </if>
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: ase-task-implement
3
+ argument-hint: "[<id>]"
4
+ description: >
5
+ Implement current or given task plan.
6
+ Use when the user calls to "implement", "realize" or "apply" the
7
+ "task", "plan", "spec", or "specification".
8
+ user-invocable: true
9
+ disable-model-invocation: false
10
+ effort: xhigh
11
+ ---
12
+
13
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
14
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
16
+
17
+ Implement a Task Plan
18
+ =====================
19
+
20
+ <skill name="ase-task-implement">
21
+ Implement a Task Plan
22
+ </skill>
23
+
24
+ Your role is an experienced, *expert-level assistant*,
25
+ specialized in the *implementation* of changes.
26
+
27
+ *Implement* the task plan by modifying the *artifacts*
28
+ with a corresponding, complete *change set*.
29
+
30
+ Procedure
31
+ ---------
32
+
33
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
34
+ You *MUST* not skip any numbered item during processing!
35
+
36
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
37
+ explicitly requested by this procedure via outputs based on a <template/>!
38
+
39
+ 1. **Determine Task:**
40
+
41
+ 1. Set <instruction>$ARGUMENTS</instruction> 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
+ <instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
50
+ ">
51
+ Set <ase-task-id><instruction/></ase-task-id> (set task
52
+ id to instruction) and <instruction></instruction> (set
53
+ instruction empty), call the `task_id(id: <ase-task-id/>,
54
+ session: <ase-session-id/>)` tool from the `ase` MCP
55
+ service to switch the task, and then only output the
56
+ following <template/>:
57
+
58
+ <template>
59
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
60
+ </template>
61
+ </if>
62
+
63
+ 2. else <if condition="
64
+ <instruction/> has the format `<id/>: <text/>` where
65
+ <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
66
+ <text/> is *empty*
67
+ ">
68
+ Set <instruction></instruction> (set instruction to empty)
69
+ and <ase-task-id><id/></ase-task-id> (set task id to
70
+ id) and call the `task_id(id: <ase-task-id/>, session:
71
+ <ase-session-id/>)` tool from the `ase` MCP service to
72
+ switch the task, and then only output the following
73
+ <template/>:
74
+
75
+ <template>
76
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
77
+ </template>
78
+ </if>
79
+
80
+ 2. **Determine Operation**:
81
+
82
+ 1. Call the `task_load(id: <ase-task-id/>)` tool of the `ase` MCP
83
+ service to load the current task plan content and set <content/> to
84
+ the `text` output field of the `task_load` tool call.
85
+
86
+ Calculate the number of words <words/> of <content/>.
87
+
88
+ Only output the following <template/>:
89
+
90
+ <template>
91
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
92
+ </template>
93
+
94
+ 2. If the <content/> is still empty, complain and tell the user to
95
+ use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
96
+ or `ase-task-edit` skills first to create a task plan.
97
+
98
+ 3. **Create Implementation:**
99
+
100
+ 1. Perform a *final implementation* of the task plan
101
+ by modifying the *artifacts* with a corresponding, complete
102
+ *change set*.
103
+
104
+ For this, primarily follow and honor the task plan in <content/>.
105
+
106
+ Secondarily, derive hints from the optionally existing
107
+ `IMPLEMENTATION DRAFT` section (from skill `ase-task-preflight`)
108
+ in <content/>. But the specification text in <content/> always
109
+ overrules the implementation draft in the `IMPLEMENTATION DRAFT`
110
+ section of <content/>.
111
+
112
+ 2. Only output the following <template/>:
113
+
114
+ <template>
115
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented**
116
+ </template>
117
+
118
+ 4. **Decide Next Step:**
119
+
120
+ 1. *Ask user*: Let the *user interactively choose*
121
+ what to do as the next step.
122
+
123
+ <expand name="user-dialog>
124
+ Next Step: How would you like to proceed with the plan?
125
+ DONE: Stop processing and PRESERVE task plan.
126
+ DELETE: Stop processing and DELETE the task plan.
127
+ </expand>
128
+
129
+ 2. Check the tool <result/> and dispatch accordingly:
130
+
131
+ - If <result/> is `DONE` or `CANCEL`:
132
+ Only output the following <template/> and then *STOP*.
133
+
134
+ <template>
135
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
136
+ </template>
137
+
138
+ - If <result/> is `DELETE`:
139
+ Only output the following <template/> and then use the
140
+ `Skill` tool to invoke the `ase:ase-task-delete` skill in
141
+ order to *implement* the updated plan. Immediately stop
142
+ processing the current skill once the `Skill` tool was used.
143
+
144
+ <template>
145
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
146
+ </template>
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: ase-task-list
3
+ argument-hint: ""
4
+ description: >
5
+ List all available task ids.
6
+ Use when user wants to see all tasks.
7
+ user-invocable: true
8
+ disable-model-invocation: false
9
+ effort: low
10
+ ---
11
+
12
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
13
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
14
+
15
+ Task List
16
+ =========
17
+
18
+ <skill name="ase-task-list">
19
+ List Task Plans
20
+ </skill>
21
+
22
+ 1. Call the `task_list({ verbose: true })` tool from the `ase` MCP service.
23
+ The result is a structured object with a `tasks` array where each
24
+ entry has an `id` field and an `mtime` field (formatted as
25
+ `YYYY-MM-DD HH:MM`).
26
+
27
+ 2. If the `tasks` array is empty, output the following <template/>:
28
+
29
+ <template>
30
+ ⧉ **ASE**: ◉ tasks: *(none)*
31
+ </template>
32
+
33
+ Else, output the list of tasks with the following <template/>, where
34
+ each <id/> and <mtime/> correspond to an entry in the task list:
35
+
36
+ <template>
37
+ ⧉ **ASE**: ◉ tasks:
38
+
39
+ | *Task Id* | *Last Modified* |
40
+ |-----------|--------------------|
41
+ | **<id/>** | `<mtime/>` |
42
+ | [...] | [...] |
43
+ </template>
44
+