@rse/ase 0.0.48 → 0.0.50

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 (35) hide show
  1. package/dst/ase-config.js +1 -4
  2. package/dst/ase-diagram.js +3 -3
  3. package/dst/ase-getopt.js +3 -3
  4. package/dst/ase-hook.js +86 -33
  5. package/dst/ase-mcp.js +26 -20
  6. package/dst/ase-service.js +8 -2
  7. package/dst/ase-statusline.js +19 -23
  8. package/dst/ase-task.js +60 -1
  9. package/package.json +1 -1
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.github/plugin/plugin.json +1 -1
  12. package/plugin/agents/ase-code-lint.md +370 -0
  13. package/plugin/agents/ase-docs-proofread.md +100 -0
  14. package/plugin/agents/ase-meta-chat.md +38 -5
  15. package/plugin/agents/ase-meta-diagram.md +60 -0
  16. package/plugin/agents/ase-meta-search.md +3 -5
  17. package/plugin/meta/ase-persona.md +1 -1
  18. package/plugin/meta/ase-skill.md +7 -5
  19. package/plugin/package.json +1 -1
  20. package/plugin/skills/ase-arch-analyze/SKILL.md +8 -7
  21. package/plugin/skills/ase-code-analyze/SKILL.md +2 -2
  22. package/plugin/skills/ase-code-craft/SKILL.md +12 -8
  23. package/plugin/skills/ase-code-explain/SKILL.md +7 -5
  24. package/plugin/skills/ase-code-insight/SKILL.md +7 -4
  25. package/plugin/skills/ase-code-lint/SKILL.md +179 -298
  26. package/plugin/skills/ase-code-refactor/SKILL.md +11 -7
  27. package/plugin/skills/ase-code-resolve/SKILL.md +18 -11
  28. package/plugin/skills/ase-docs-proofread/SKILL.md +29 -103
  29. package/plugin/skills/ase-meta-chat/SKILL.md +22 -38
  30. package/plugin/skills/ase-meta-evaluate/SKILL.md +1 -1
  31. package/plugin/skills/ase-meta-persona/SKILL.md +1 -1
  32. package/plugin/skills/ase-meta-quorum/SKILL.md +58 -27
  33. package/plugin/skills/ase-meta-search/SKILL.md +39 -13
  34. package/plugin/skills/ase-task-rename/SKILL.md +92 -0
  35. package/plugin/skills/ase-meta-diagram/SKILL.md +0 -101
@@ -48,96 +48,25 @@ documents.
48
48
  ⚪ **PROOFREADING INVESTIGATION**
49
49
  </template>
50
50
 
51
- Then dispatch the investigation to a *sub-agent* via the `Agent`
51
+ Dispatch the investigation to a *sub-agent* via the `Agent`
52
52
  tool so that *no* investigation details leak into the user-visible
53
53
  transcript. The sub-agent performs the silent reading and checking;
54
54
  only its final structured return value is consumed here.
55
55
 
56
- Invoke the `Agent` tool *exactly once* with:
57
-
58
- - `subagent_type`: `general-purpose`
59
- - `description`: `Proofread Investigation`
60
- - `prompt`: a *self-contained* briefing, instructing the sub-agent to:
61
-
62
- 1. Use the `Read` tool to read all document files referenced
63
- by <getopt-arguments/>.
64
-
65
- 2. Check the contained texts *only* for the following problem
66
- types:
67
-
68
- - **Spelling**
69
- - **Punctuation**
70
- - **Grammar**
71
-
72
- Do *NOT* flag stylistic preferences, Markdown formatting
73
- choices, code/identifiers, XML/template tags, technical
74
- terms, intentional capitalization, list/heading style, or
75
- anything inside fenced code blocks or backtick spans. Be
76
- conservative — only report clear, objective errors.
77
-
78
- For each found problem:
79
-
80
- - Set <type/> to the string `SPELLING`, `PUNCTUATION`, or
81
- `GRAMMAR`, indicating the problem type.
82
-
83
- - Set <file/> to the *relative* filename path of the document.
84
- Set <line/> to the numeric 1-based line number in the
85
- document.
86
-
87
- - Set <old-text/> to the lines of the old text which
88
- should be changed. Set <new-text/> to the lines of the
89
- new text which will be changed.
90
-
91
- - Set <description/> to an ultra-brief and concise
92
- Markdown-formatted description of the problem with
93
- a hint of what is wrong and why it is wrong. In
94
- this description, mark up all referenced verbatim
95
- words <words/> from <old-text/> or <new-text/> as
96
- quoted strings containing monospaced text with
97
- Markdown based on the following <template/>:
98
- <template>"`<words/>`"</template>.
99
-
100
- - Set <context-before/> to exactly *up to two* lines of
101
- *unchanged* text context which occurs in the document
102
- directly *before* <old-text/>, i.e., the lines (<line/> -
103
- 2) and (<line/> - 1). Reduce to just one line (<line/> -
104
- 1) if <old-text/> is the second line of the document. Set
105
- <context-before/> to empty if <old-text/> is the first line in
106
- the document.
107
-
108
- - Set <context-after/> to exactly *up to two* lines of
109
- *unchanged* text content which occurs in the document
110
- directly *after* <old-text/> the lines (<line/> + <n/> + 1)
111
- and (<line/> + <n/> + 2), where <n/> is the number of lines
112
- in <old-text/>. Reduce to just one line (<line/> + <n/> + 1)
113
- if <old-text/> is the second-last line of the document. Set
114
- <context-after/> to empty if <old-text/> is the last line in
115
- the document.
116
-
117
- 3. Return *exclusively* a single fenced JSON block (no prose,
118
- no preamble, no summary) of the following shape:
119
-
120
- ```json
121
- [
122
- {
123
- "type": <type/>,
124
- "file": <file/>,
125
- "line": <line/>,
126
- "description": <description/>,
127
- "context_before": <context-before/>,
128
- "old_text": <old-text/>,
129
- "new_text": <new-text/>,
130
- "context_after": <context-after/>
131
- },
132
- [...]
133
- ]
134
- ```
56
+ For this, invoke *exactly once* the tool:
135
57
 
136
- 4. You *MUST* *NOT* propose, apply, or render any document
137
- changes itself.
58
+ ```text
59
+ Agent(
60
+ name: "ase:ase-docs-proofread",
61
+ description: "Proofread Investigation",
62
+ subagent_type: "ase:ase-docs-proofread",
63
+ mode: "plan",
64
+ prompt: <getopt-arguments/>
65
+ )
66
+ ```
138
67
 
139
- Parse the JSON array from the sub-agent's return value and set
140
- <problems/> to that list.
68
+ Parse the single result message of the `Agent` tool as a JSON array
69
+ and set <problems/> to that list.
141
70
 
142
71
  You *MUST* *NOT* output anything at all in this step 1 beyond the
143
72
  single `Agent` tool invocation.
@@ -169,11 +98,9 @@ documents.
169
98
 
170
99
  3. <step id="STEP 3: Correction">
171
100
 
172
- 1. You *MUST* activate the auto-approve gate for the `Edit` tool
173
- by setting the session-scoped `agent.skill` configuration value
174
- to this skill's name via the MCP tool call `config_set(key:
175
- "agent.skill", val: "ase-docs-proofread", scope:
176
- "session:<ase-session-id/>")` of the `ase` service.
101
+ 1. You *MUST* call the MCP tool `config_set(key: "agent.skill", val:
102
+ "ase-docs-proofread", scope: "session:<ase-session-id/>")` of the
103
+ `ase` MCP server.
177
104
 
178
105
  2. Iterate over all problems:
179
106
 
@@ -230,7 +157,6 @@ documents.
230
157
  <expand name="user-dialog">
231
158
  CORRECTION: How would you like to proceed with this proposed correction?
232
159
  ACCEPT: Apply the proposed correction.
233
- REFINE: Discard this proposed correction and generate a new one.
234
160
  REJECT: Skip this proposed correction.
235
161
  </expand>
236
162
 
@@ -253,15 +179,12 @@ documents.
253
179
 
254
180
  </if>
255
181
 
256
- - <if condition="
257
- <result/> starts with 'REFINE' or
258
- <result/> starts with 'OTHER'
259
- ">
182
+ - <if condition="<result/> starts with 'OTHER'">
260
183
 
261
- Generate a *new* proposal for the *same* <item/>
262
- (incorporating the user's free-text hint from <result/> if
263
- provided via the "OTHER" prefix) and loop back to substep 2
264
- of this iteration. There is *no* cap on refinement rounds —
184
+ Generate a *new* proposal for the *same* <item/>,
185
+ incorporating the user's free-text hint from <result/>
186
+ after the "OTHER:" prefix, and loop back to substep 2 of
187
+ this iteration. There is *no* cap on refinement rounds —
265
188
  keep refining until the user picks `ACCEPT` or `REJECT`.
266
189
 
267
190
  </if>
@@ -279,13 +202,16 @@ documents.
279
202
 
280
203
  </for>
281
204
 
282
- 3. After the iteration has finished, you *MUST* clear the auto-approve
283
- gate via the call MCP tool call `config_delete(key:
284
- "agent.skill", scope: "session:<ase-session-id/>")` of the `ase`
285
- service.
205
+ 3. You *MUST* call the MCP tool `config_delete(key: "agent.skill",
206
+ scope: "session:<ase-session-id/>")` of the `ase` MCP server.
286
207
 
287
208
  4. You *MUST* *NOT* output any further additional explanations or
288
- summaries at the end of this skill processing.
209
+ summaries at the end of this skill processing, except for the
210
+ following final <template/>:
211
+
212
+ <template>
213
+ &#x26AA; **PROOFREAD FINISHED**
214
+ </template>
289
215
 
290
216
  </step>
291
217
 
@@ -2,64 +2,48 @@
2
2
  name: ase-meta-chat
3
3
  argument-hint: "<llm> <query>"
4
4
  description: >
5
- Query foreign LLM for Chat.
5
+ Query foreign LLM for chat.
6
6
  Use this skill if a foreign LLM like OpenAI ChatGPT, Google Gemini,
7
7
  DeepSeek or xAI Grok should be queried with a single chat message.
8
8
  user-invocable: true
9
9
  disable-model-invocation: false
10
- context: fork
11
10
  effort: low
12
11
  allowed-tools:
13
- - "mcp__chat-openai-chatgpt"
14
- - "mcp__chat-google-gemini"
15
- - "mcp__chat-deepseek"
16
- - "mcp__chat-xai-grok"
17
- - "Task"
18
12
  - "Agent"
19
13
  ---
20
14
 
21
15
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
22
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
23
17
 
24
- Query Foreign LLMs for Chat
25
- ===========================
18
+ Query Foreign LLM for Chat
19
+ ==========================
26
20
 
27
21
  <skill name="ase-meta-chat">
28
- Query Foreign LLMs for Chat
22
+ Query Foreign LLM for Chat
29
23
  </skill>
30
24
 
25
+ <role>
31
26
  Your role is to act as a proxy to query a foreign LLM for a single chat message.
27
+ </role>
32
28
 
33
29
  <objective>
34
30
  Query foreign LLM for: <query>$ARGUMENTS</query>
35
31
  </objective>
36
32
 
37
- <flow>
38
-
39
- 1. <step id="STEP 1: Select LLMs">
40
- Use the *first word* of the following <query/> for selecting the
41
- foreign LLMs to query, and their corresponding MCP servers, from the
42
- following list:
43
-
44
- - **OpenAI ChatGPT**: via MCP server `chat-openai-chatgpt`
45
- - **Google Gemini**: via MCP server `chat-google-gemini`
46
- - **DeepSeek**: via MCP server `chat-deepseek`
47
- - **xAI Grok**: via MCP server `chat-xai-grok`
48
- </step>
49
-
50
- 2. <step id="STEP 2: Spawn Agents">
51
- Spawn a *sub-task* with the companion `ase-meta-chat` *agent* (and
52
- not this *skill*, but the agent of the same name) for the selected
53
- foreign LLMs, and pass the *second and all remaining* words of the
54
- following <query/> as the query for the selected LLM.
55
- </step>
56
-
57
- 3. <step id="STEP 3: Return Responses">
58
- Return the *plain response* of the `ase-meta-chat` agent 1:1 and
59
- *without any modifications*. Especially, do *NOT* add or remove any
60
- text from the agent response on your own and do not interpret the
61
- result in any way.
62
- </step>
63
-
64
- </flow>
33
+ 1. You *MUST* *NOT* output anything in this step.
34
+ Just call the underlying agent with the following tool:
35
+
36
+ ```text
37
+ Agent(
38
+ name: "ase:ase-meta-chat",
39
+ description: "Query Foreign LLM for Chat",
40
+ subagent_type: "ase:ase-meta-chat",
41
+ prompt: <query/>
42
+ )
43
+ ```
44
+
45
+ 2. Output the *plain response* of the `ase:ase-meta-chat` agent
46
+ *verbatim* and *without any modifications*. Especially, do *NOT* add or
47
+ remove any text from the agent response on your own and do not interpret
48
+ the result in any way.
65
49
 
@@ -248,7 +248,7 @@ multi-*criteria* decision matrix.
248
248
  ⚠ *ATTENTION: all alternatives rate negatively; this is the least-bad choice, not a strong winner!*
249
249
  </template>
250
250
 
251
- - Otherwise (<percentage/> is greater than or equal 0.10), output
251
+ - Otherwise (<percentage/> is greater than or equal to 0.10), output
252
252
  just the following <template/> and do not output anything else:
253
253
 
254
254
  <template>
@@ -6,7 +6,7 @@ description: >
6
6
  The <persona> can be either the decorative, eloquent, and explaining "writer",
7
7
  the concise, factual, and accurate "engineer" (default),
8
8
  the brief, factual, and abbreviating "telegrapher",
9
- the terse, rough and stuttering "caveman".
9
+ the terse, rough, and stuttering "caveman".
10
10
  Use when user says "persona <persona>" or "be <persona>".
11
11
  user-invocable: true
12
12
  disable-model-invocation: false
@@ -21,7 +21,9 @@ Query Multiple AIs for Quorum Answer
21
21
  Query Multiple AIs for Quorum Answer
22
22
  </skill>
23
23
 
24
+ <role>
24
25
  Your role is an *expert-level assistant*.
26
+ </role>
25
27
 
26
28
  <objective>
27
29
  Find a *quorum answer* on an arbitrary question,
@@ -29,11 +31,12 @@ by querying *multiple* AIs for an *optimal consensus*.
29
31
  </objective>
30
32
 
31
33
  <flow>
32
- 1. <step id="STEP 1: Determine Own Answer">
33
- Determine your own answer.
34
- For yourself (Anthropic Claude), first answer the following <query/> in advance:
35
34
 
36
- <query>
35
+ 1. <step id="STEP 1: Preview Own Answer">
36
+
37
+ Prepare the LLM query by setting <query/> to the following <template/>:
38
+
39
+ <template>
37
40
  $ARGUMENTS.
38
41
  Please respond with facts and very concise and brief only,
39
42
  usually with just 1 to 7 corresponding bullet points and with short sentences.
@@ -41,55 +44,80 @@ by querying *multiple* AIs for an *optimal consensus*.
41
44
  Beside bullet points, do not provide any additional explanations.
42
45
  Emphasize keywords or cruxes in your response with Markdown formatting.
43
46
  Format code parts with Markdown formatting.
44
- </query>
45
- </step>
47
+ </template>
46
48
 
47
- 2. <step id="STEP 2: Preview Own Answer">
48
- Show your own answer as a sneak preview.
49
- For this, use the following output <template/>:
49
+ For yourself (Anthropic Claude), first answer this <query/> in
50
+ advance yourself by showing your own answer to the query as a sneak
51
+ preview. For this, output the following <template/>:
50
52
 
51
53
  <template>
52
54
  **Anthropic Claude** (sneak preview in advance):
53
55
  - [...]
54
56
  - [...]
55
57
  </template>
58
+
56
59
  </step>
57
60
 
58
- 3. <step id="STEP 3: Query Foreign AIs">
59
- For each of the following foreign AIs and their potentially
60
- available, given, corresponding MCP servers, use a *sub-task* and
61
- the `ase-meta-chat` *agent* to perform the above same <query/> zero
62
- or more times and in *parallel* again:
61
+ 2. <step id="STEP 2: Query Foreign AIs">
62
+
63
+ <define name="agent">
64
+ Call the `Agent` tool:
65
+
66
+ ```text
67
+ Agent(
68
+ name: "ase:ase-meta-chat",
69
+ description: "Query Foreign LLM: <arg1/>",
70
+ subagent_type: "ase:ase-meta-chat",
71
+ prompt: "<arg2/> <query/>"
72
+ )
73
+ ```
74
+
75
+ </define>
76
+
77
+ <expand name="agent" arg1="OpenAI ChatGPT" arg2="chatgpt"></expand>
78
+ <expand name="agent" arg1="Google Gemini" arg2="gemini"></expand>
79
+ <expand name="agent" arg1="DeepSeek" arg2="deepseek"></expand>
80
+ <expand name="agent" arg1="xAI Grok" arg2="grok"></expand>
63
81
 
64
- - OpenAI ChatGPT: `chat-openai-chatgpt`
65
- - Google Gemini: `chat-google-gemini`
66
- - DeepSeek: `chat-deepseek`
67
- - xAI Grok: `chat-xai-grok`
82
+ You *MUST* *NOT* output anything in this step.
68
83
 
69
- Silently skip those AIs where the corresponding MCP server is not available.
70
84
  </step>
71
85
 
72
- 4. <step id="STEP 4: Summarize Responses">
73
- Summarize all responses, of both yourself and all available MCP servers,
74
- with just 1 to 7 corresponding bullet points and with short sentences.
86
+ 3. <step id="STEP 3: Summarize Responses">
87
+
88
+ Agents which returned a response with an `ERROR:` prefix are
89
+ silently skipped and are treatd as not available.
90
+
91
+ Summarize all responses, of both yourself and all available agents
92
+ with just 1 to 7 corresponding bullet points and with short
93
+ sentences.
94
+
95
+ You *MUST* *NOT* output anything in this step.
96
+
75
97
  </step>
76
98
 
77
- 5. <step id="STEP 5: Determine Consensus Rating">
99
+ 4. <step id="STEP 4: Determine Consensus Rating">
100
+
78
101
  Determine, on a Likert scale of 0..<n/>, the amount of the overall
79
102
  consensus <c/> of all the responses. The <n/> is the *total number of
80
103
  responders* (yourself plus all available foreign AIs above).
81
104
  If all responses disagree, the consensus <c/> is zero.
82
105
  If all responses agree, <c/> is <n/>.
83
106
 
84
- If not all AIs agree, determine a <disagreement/> information,
107
+ If not all AIs agree, determine <disagreement/> information,
85
108
  formatted as `(disagreement: <ai/>, <ai/>, [...])` where <ai/> is a
86
109
  name of an AI which disagreed with the consensus. Else, if all AIs
87
110
  agree, set <disagreement></disagreement>.
111
+
112
+ You *MUST* *NOT* output anything in this step.
113
+
88
114
  </step>
89
115
 
90
- 6. <step id="STEP 6: Show Results">
91
- Finally show the summary, the consensus and the complete and unmodified responses
92
- of yourself and each of the MCP servers, based on the following output <template/>:
116
+ 5. <step id="STEP 5: Show Results">
117
+
118
+ Finally show the summary, the consensus and the complete and
119
+ unmodified responses of yourself and each of the MCP servers, based
120
+ on the following output <template/>:
93
121
 
94
122
  <template>
95
123
  **QUESTION**:
@@ -123,6 +151,9 @@ by querying *multiple* AIs for an *optimal consensus*.
123
151
  </template>
124
152
 
125
153
  In this output, remove the sections of those AIs which were not available.
154
+ You *MUST* *NOT* output any further explanations yourself.
155
+
126
156
  </step>
157
+
127
158
  </flow>
128
159
 
@@ -10,9 +10,7 @@ effort: low
10
10
  allowed-tools:
11
11
  - "mcp__perplexity__perplexity_search"
12
12
  - "mcp__brave__brave_web_search"
13
- - "WebSearch"
14
- - "WebFetch"
15
- - "Task"
13
+ - "Agent"
16
14
  ---
17
15
 
18
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -25,7 +23,9 @@ Search the Internet/Web
25
23
  Search the Internet/Web
26
24
  </skill>
27
25
 
26
+ <role>
28
27
  Your role is an expert-level *web specialist*.
28
+ </role>
29
29
 
30
30
  <objective>
31
31
  Your objective is to *search* the *Internet*/*Web* for the following query:
@@ -33,20 +33,46 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
33
33
  </objective>
34
34
 
35
35
  <flow>
36
- 1. <step id="STEP 1: QUERY SERVICES">
37
- If the MCP tool `mcp__perplexity__perplexity_search` is available, send <query/> to it
38
- via a first *sub-task* and our companion `ase-meta-search` *agent*.
39
36
 
40
- If the MCP tool `mcp__brave__brave_web_search` is available, send <query/> to it
41
- via a second *sub-task* and our companion `ase-meta-search` *agent*.
37
+ 1. <step id="STEP 1: Query Search Services">
38
+
39
+ <define name="agent">
40
+ ```text
41
+ Agent(
42
+ name: "ase:ase-meta-search",
43
+ description: "Query Web Search Service",
44
+ subagent_type: "ase:ase-meta-search",
45
+ prompt: <content/>
46
+ )
47
+ ```
48
+ </define>
49
+
50
+ If the MCP tool `mcp__perplexity__perplexity_search` is available, call:
51
+ <expand name="agent">
52
+ Call the MCP tool `mcp__perplexity__perplexity_search(query: "<query/>")`
53
+ </expand>
54
+
55
+ If the MCP tool `mcp__brave__brave_web_search` is available, call:
56
+ <expand name="agent">
57
+ Call the MCP tool `mcp__brave__brave_web_search(query: "<query/>")`
58
+ </expand>
59
+
60
+ <expand name="agent">
61
+ Call the tool `WebSearch(query: "<query/>")`
62
+ </expand>
42
63
 
43
- Send <query/> to the built-in tool `WebSearch`
44
- via a third *sub-task* and our companion `ase-meta-search` *agent*.
45
64
  </step>
46
65
 
47
- 2. <step id="STEP 2: CONSOLIDATE ANSWERS">
48
- Consolidate all responses from the `ase-meta-search` *agents*
49
- into a single response and output it without giving any further explanations.
66
+ 2. <step id="STEP 2: Consolidate Search Answers">
67
+
68
+ Consolidate all responses from the `ase:ase-meta-search` agents
69
+ calls above into a single response and output it without giving any
70
+ further explanations.
71
+
72
+ For the consolidation, do *NOT* remove any orginal information,
73
+ just *MERGE* all overlapping information.
74
+
50
75
  </step>
76
+
51
77
  </flow>
52
78
 
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: ase-task-rename
3
+ argument-hint: "[<old>] <new>"
4
+ description: >
5
+ Rename the current or given task plan.
6
+ Use when the user calls to "rename", "move" or "relabel" the
7
+ "task", "plan", "spec", or "specification".
8
+ user-invocable: true
9
+ disable-model-invocation: false
10
+ effort: low
11
+ ---
12
+
13
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
14
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
+
16
+ Rename a Task Plan
17
+ ==================
18
+
19
+ <skill name="ase-task-rename">
20
+ Rename a Task Plan
21
+ </skill>
22
+
23
+ Your role is an experienced, *expert-level assistant*.
24
+ *Rename* the task plan.
25
+
26
+ Procedure
27
+ ---------
28
+
29
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
30
+ You *MUST* not skip any numbered item during processing!
31
+
32
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
33
+ explicitly requested by this procedure via outputs based on a <template/>!
34
+
35
+ 1. **Determine Task:**
36
+
37
+ 1. Parse <arguments>$ARGUMENTS</arguments> into a whitespace-separated
38
+ list of tokens. Inherit the always existing <ase-task-id/> from
39
+ the current context. Do not output anything.
40
+
41
+ 2. <if condition="<arguments/> contains two tokens">
42
+ Set <old/> to the first token of <arguments/>.
43
+ Set <new/> to the second token of <arguments/>.
44
+ Do not output anything.
45
+ </if>
46
+
47
+ 3. <if condition="<arguments/> contains exactly one token">
48
+ Set <old><ase-task-id/></old>.
49
+ Set <new/> to the single token of <arguments/>.
50
+ Do not output anything.
51
+ </if>
52
+
53
+ 4. <if condition="<arguments/> is empty OR contains more than two tokens">
54
+ Only output the following <template/> and then immediately
55
+ *STOP* processing the entire current skill:
56
+
57
+ <template>
58
+ ⧉ **ASE**: ☻ skill: **ase-task-rename**, ▶ ERROR: expected `[<old>] <new>` arguments
59
+ </template>
60
+ </if>
61
+
62
+ 2. **Perform Operation**:
63
+
64
+ 1. Call the `task_rename(old: <old/>, new: <new/>)` tool of the
65
+ `ase` MCP service to rename the task plan and set <text/> to the
66
+ `text` output field of this `task_rename` tool call. Do not
67
+ output anything related to this MCP tool call.
68
+
69
+ - If <text/> starts with `ERROR:` or `WARNING:`:
70
+ Only output the following <template/>:
71
+
72
+ <template>
73
+ ⧉ **ASE**: ◉ task: **<old/>**, ▶ status: **<text/>**
74
+ </template>
75
+
76
+ - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
77
+ Only output the following <template/>:
78
+
79
+ <template>
80
+ ⧉ **ASE**: ◉ task: **<new/>**, ▶ status: **task renamed**
81
+ </template>
82
+
83
+ 2. <if condition="<old/> is equal <ase-task-id/>">
84
+ Set <ase-task-id><new/></ase-task-id>. Call the `task_id(id:
85
+ <ase-task-id/>, session: <ase-session-id/>)` tool from the `ase`
86
+ MCP service to switch the task to the renamed task. Only output
87
+ the following <template/>:
88
+
89
+ <template>
90
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task switched**
91
+ </template>
92
+ </if>