@rse/ase 0.9.9 → 0.9.11

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 (40) hide show
  1. package/package.json +1 -1
  2. package/plugin/.claude-plugin/plugin.json +1 -1
  3. package/plugin/.github/plugin/plugin.json +1 -1
  4. package/plugin/meta/ase-dialog.md +52 -24
  5. package/plugin/meta/ase-format-arch.md +3 -3
  6. package/plugin/meta/ase-format-spec.md +13 -4
  7. package/plugin/meta/ase-getopt.md +11 -7
  8. package/plugin/meta/ase-skill.md +17 -10
  9. package/plugin/package.json +1 -1
  10. package/plugin/skills/ase-arch-analyze/SKILL.md +6 -1
  11. package/plugin/skills/ase-arch-discover/SKILL.md +9 -6
  12. package/plugin/skills/ase-code-analyze/SKILL.md +12 -5
  13. package/plugin/skills/ase-code-craft/SKILL.md +20 -16
  14. package/plugin/skills/ase-code-explain/SKILL.md +6 -1
  15. package/plugin/skills/ase-code-insight/SKILL.md +11 -5
  16. package/plugin/skills/ase-code-lint/SKILL.md +16 -10
  17. package/plugin/skills/ase-code-refactor/SKILL.md +20 -16
  18. package/plugin/skills/ase-code-resolve/SKILL.md +27 -22
  19. package/plugin/skills/ase-docs-proofread/SKILL.md +16 -10
  20. package/plugin/skills/ase-meta-brainstorm/SKILL.md +26 -10
  21. package/plugin/skills/ase-meta-changelog/SKILL.md +16 -5
  22. package/plugin/skills/ase-meta-chat/SKILL.md +6 -1
  23. package/plugin/skills/ase-meta-commit/SKILL.md +5 -0
  24. package/plugin/skills/ase-meta-diaboli/SKILL.md +9 -5
  25. package/plugin/skills/ase-meta-diff/SKILL.md +1 -1
  26. package/plugin/skills/ase-meta-evaluate/SKILL.md +20 -12
  27. package/plugin/skills/ase-meta-persona/SKILL.md +6 -1
  28. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -3
  29. package/plugin/skills/ase-meta-search/SKILL.md +9 -1
  30. package/plugin/skills/ase-meta-steelman/SKILL.md +5 -1
  31. package/plugin/skills/ase-meta-why/SKILL.md +6 -4
  32. package/plugin/skills/ase-task-condense/SKILL.md +5 -4
  33. package/plugin/skills/ase-task-delete/SKILL.md +6 -1
  34. package/plugin/skills/ase-task-edit/SKILL.md +10 -8
  35. package/plugin/skills/ase-task-grill/SKILL.md +35 -13
  36. package/plugin/skills/ase-task-id/SKILL.md +10 -3
  37. package/plugin/skills/ase-task-implement/SKILL.md +5 -4
  38. package/plugin/skills/ase-task-preflight/SKILL.md +5 -4
  39. package/plugin/skills/ase-task-reboot/SKILL.md +7 -6
  40. package/plugin/skills/ase-task-rename/SKILL.md +15 -1
@@ -209,10 +209,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
209
209
  anything else in this step:
210
210
 
211
211
  <template>
212
- ● **APPROACH A<n/>**<annotation/>: *<summary/>*
212
+ ● **APPROACH A<n/>**<annotation/>: **<summary/>**
213
213
  ○ [...]
214
- **PRO**: [...]
215
- **CON**: [...]
214
+ *PRO*: [...]
215
+ *CON*: [...]
216
216
  </template>
217
217
 
218
218
  Hints:
@@ -230,18 +230,19 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
230
230
 
231
231
  7. <if condition="<getopt-option-auto/> is not `true`">
232
232
 
233
- You *MUST* use the custom `custom-dialog` and *NOT* the
234
- `AskUserQuestion`-based `user-dialog` to let the *user
235
- interactively choose* the preferred approach A<n/>.
233
+ In the following, you *MUST* *NOT* use the <user-dialog-tool/>
234
+ tool! Instead, you *MUST* just show a custom output, let the
235
+ user enter input, and then you set the result accordingly.
236
236
 
237
- Per approach A<n/>, use the option `A<n/>: <short-summary/>`
238
- where <short-summary/> is an ultra brief summary of the approach
239
- A<n/>. For your recommended approach, use
240
- `A<n/>: **RECOMMENDATION** ⚝: <short-summary/>` instead.
237
+ Let the user choose the preferred approach A<n/> by raising
238
+ a question with the following custom dialog, where per
239
+ approach A<n/>, you determine an ultra brief summary
240
+ <short-summary/> and then use the answer option `A<n/>:
241
+ ⚝ **RECOMMENDATION** ⚝: <short-summary/>` for your
242
+ recommended approach plus zero or more answer options `A<n/>:
243
+ <short-summary/>` for all other approaches:
241
244
 
242
- Now raise the user dialog:
243
-
244
- <expand name="custom-dialog">
245
+ <expand name="custom-dialog" arg1="--no-other">
245
246
  Select Approach: Select your preferred refactoring approach to follow?
246
247
  A<n/>: <short-summary/>
247
248
  [...]
@@ -331,18 +332,21 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
331
332
  Hand off to `ase-task-edit`.
332
333
  <if condition="<head/> is equal `EDIT`">
333
334
  Consume the head: set <getopt-option-next/> to the remaining
334
- tokens (joined back with `,`, or `none` if empty).
335
+ tokens (joined back with `,`, or `none` if empty). `EDIT`
336
+ is this skill's own dispatch token, *not* part of
337
+ `ase-task-edit`'s `--next` vocabulary, so it must be
338
+ stripped here rather than forwarded.
335
339
  </if>
336
340
  All remaining tokens are `ase-task-edit`'s own vocabulary
337
341
  and are forwarded verbatim, so `ase-task-edit` consumes its
338
- head itself.
342
+ own head itself.
339
343
  <if condition="<getopt-option-next/> is not equal `none`">
340
344
  Set <args><args/> --next <getopt-option-next/></args>
341
345
  </if>
342
346
  Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
343
347
  </else>
344
348
 
345
- <step>
349
+ </step>
346
350
 
347
351
  </flow>
348
352
 
@@ -60,14 +60,15 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
60
60
  1. If <problem/> matches the regexp `^[PT]\d+$` (i.e. a bare issue
61
61
  identifier like `P1`, `P2`, `T1`, `T2`, ...),
62
62
  set <problem-id><problem/></problem-id> and
63
- <ase-task-id><problem/></ase-task-id>, call the `ase_task_id(id:
64
- "<ase-task-id/>", session: "<ase-session-id/>")` tool from the
65
- `ase` MCP server to implicitly switch the task, and then
66
- call the `ase_kv_get(key: "ase-issue-<problem-id/>")` tool of
63
+ <ase-task-id><problem/></ase-task-id>, then call the
64
+ `ase_kv_get(key: "ase-issue-<problem-id/>")` tool of
67
65
  the `ase` MCP server to retrieve the previously persisted
68
66
  problem description. If the returned `text` is non-empty, set
69
- <problem><text/></problem>, otherwise complain to the user that
70
- no analyzer result exists for <problem-id/> and stop processing.
67
+ <problem><text/></problem> and call the `ase_task_id(id:
68
+ "<ase-task-id/>", session: "<ase-session-id/>")` tool from the
69
+ `ase` MCP server to implicitly switch the task, otherwise
70
+ complain to the user that no analyzer result exists for
71
+ <problem-id/> and stop processing.
71
72
 
72
73
  2. <if condition="
73
74
  <problem/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
@@ -259,10 +260,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
259
260
  anything else in this step:
260
261
 
261
262
  <template>
262
- ● **APPROACH A<n/>**<annotation/>: *<summary/>*
263
+ ● **APPROACH A<n/>**<annotation/>: **<summary/>**
263
264
  ○ [...]
264
- **PRO**: [...]
265
- **CON**: [...]
265
+ *PRO*: [...]
266
+ *CON*: [...]
266
267
  </template>
267
268
 
268
269
  Hints:
@@ -280,18 +281,19 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
280
281
 
281
282
  7. <if condition="<getopt-option-auto/> is not `true`">
282
283
 
283
- You *MUST* use the custom `custom-dialog` and *NOT* the
284
- `AskUserQuestion`-based `user-dialog` to let the *user
285
- interactively choose* the preferred approach A<n/>.
284
+ In the following, you *MUST* *NOT* use the <user-dialog-tool/>
285
+ tool! Instead, you *MUST* just show a custom output, let the
286
+ user enter input, and then you set the result accordingly.
286
287
 
287
- Per approach A<n/>, use the option `A<n/>: <short-summary/>`
288
- where <short-summary/> is an ultra brief summary of the approach
289
- A<n/>. For your recommended approach, use
290
- `A<n/>: **RECOMMENDATION** ⚝: <short-summary/>` instead.
288
+ Let the user choose the preferred approach A<n/> by raising
289
+ a question with the following custom dialog, where per
290
+ approach A<n/>, you determine an ultra brief summary
291
+ <short-summary/> and then use the answer option `A<n/>:
292
+ ⚝ **RECOMMENDATION** ⚝: <short-summary/>` for your
293
+ recommended approach plus zero or more answer options `A<n/>:
294
+ <short-summary/>` for all other approaches:
291
295
 
292
- Now raise the user dialog:
293
-
294
- <expand name="custom-dialog">
296
+ <expand name="custom-dialog" arg1="--no-other">
295
297
  Select Approach: Select your preferred resolution approach to follow?
296
298
  A<n/>: <short-summary/>
297
299
  [...]
@@ -388,18 +390,21 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
388
390
  Hand off to `ase-task-edit`.
389
391
  <if condition="<head/> is equal `EDIT`">
390
392
  Consume the head: set <getopt-option-next/> to the remaining
391
- tokens (joined back with `,`, or `none` if empty).
393
+ tokens (joined back with `,`, or `none` if empty). `EDIT`
394
+ is this skill's own dispatch token, *not* part of
395
+ `ase-task-edit`'s `--next` vocabulary, so it must be
396
+ stripped here rather than forwarded.
392
397
  </if>
393
398
  All remaining tokens are `ase-task-edit`'s own vocabulary
394
399
  and are forwarded verbatim, so `ase-task-edit` consumes its
395
- head itself.
400
+ own head itself.
396
401
  <if condition="<getopt-option-next/> is not equal `none`">
397
402
  Set <args><args/> --next <getopt-option-next/></args>
398
403
  </if>
399
404
  Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
400
405
  </else>
401
406
 
402
- <step>
407
+ </step>
403
408
 
404
409
  </flow>
405
410
 
@@ -129,7 +129,7 @@ Analyze documents for spelling, punctuation, or grammar errors
129
129
  ```diff
130
130
  --- <file/> (original)
131
131
  +++ <file/> (corrected)
132
- @@ -<old-start/>,<n/> +<new-start/>,<m/> @@
132
+ @@ -<old-start/>,<old-count/> +<new-start/>,<new-count/> @@
133
133
  <context-before/>
134
134
  -<old-text/>
135
135
  +<new-text/>
@@ -143,10 +143,10 @@ Analyze documents for spelling, punctuation, or grammar errors
143
143
  the line of <context-before/> (one before <line/>).
144
144
  - The <new-start/> is the same as <old-start/> (the unchanged
145
145
  <context-before/> line shares the same start in both files).
146
- - The <n/> is the total number of old-side hunk lines, i.e.,
146
+ - The <old-count/> is the total number of old-side hunk lines, i.e.,
147
147
  the number of lines in <context-before/>, <old-text/>, and
148
148
  <context-after/> combined.
149
- - The <m/> is the total number of new-side hunk lines, i.e.,
149
+ - The <new-count/> is the total number of new-side hunk lines, i.e.,
150
150
  the number of lines in <context-before/>, <new-text/>, and
151
151
  <context-after/> combined.
152
152
 
@@ -154,11 +154,11 @@ Analyze documents for spelling, punctuation, or grammar errors
154
154
 
155
155
  4. <if condition="<getopt-option-auto/> is not 'true'">
156
156
 
157
- Let the *user interactively choose* what to do as the next
158
- step. For this you *MUST* use the custom `custom-dialog` and
159
- not the `AskUserQuestion` based `user-dialog`:
157
+ In the following, you *MUST* *NOT* use the <user-dialog-tool/>
158
+ tool! Instead, you *MUST* just show a custom output, let the
159
+ user enter input, and then you set the result accordingly.
160
160
 
161
- <expand name="custom-dialog">
161
+ <expand name="custom-dialog" arg1="--other">
162
162
  CORRECTION: How would you like to proceed with this proposed correction?
163
163
  ACCEPT: Apply the proposed correction.
164
164
  REJECT: Skip this proposed correction.
@@ -188,9 +188,15 @@ Analyze documents for spelling, punctuation, or grammar errors
188
188
 
189
189
  Generate a *new* proposal for the *same* <item/>,
190
190
  incorporating the user's free-text hint from <result/>
191
- after the "OTHER:" prefix, and *go back* to substep 2 of
192
- this `for`-iteration. There is *no* cap on refinement rounds -
193
- keep refining until the user picks `ACCEPT` or `REJECT`.
191
+ after the "OTHER:" prefix. *Reassign* <description/>,
192
+ <old-text/>, and <new-text/> to reflect this refined
193
+ proposal (<old-text/> stays anchored to the existing text
194
+ at <file/>:<line/>; <new-text/> and <description/> carry the
195
+ refinement) so the subsequent rendering and any `Edit` use
196
+ the new proposal rather than the original. Then *go back* to
197
+ substep 2 of this `for`-iteration. There is *no* cap on
198
+ refinement rounds - keep refining until the user picks
199
+ `ACCEPT` or `REJECT`.
194
200
 
195
201
  </if>
196
202
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-meta-brainstorm
3
- argument-hint: "[--help|-h] [--max-clarify|-c=3] [--min-ideas|-i=12] [--min-rank|-r=7] [--max-shortlist|-s=4] <topic>"
3
+ argument-hint: "[--help|-h] [--max-clarify|-c <num>] [--min-ideas|-i <num>] [--min-rank|-r <num>] [--max-shortlist|-s <num>] <topic>"
4
4
  description: >
5
5
  Collaboratively brainstorm a topic by diverging on ideas, converging
6
6
  through clustering and scoring, and distilling a shortlist with
@@ -121,16 +121,17 @@ Honor the following tenets throughout the brainstorming:
121
121
  question <question-M/>, and let the user select the
122
122
  <answer-M/> out of the candidate answers <answer-M-K/> (leave
123
123
  out the answer lines of those candidate answers you have
124
- not determined). For this you *MUST* use the custom
125
- `custom-dialog` and *NOT* the `AskUserQuestion` based
126
- "user-dialog":
124
+ not determined).
127
125
 
128
- <expand name="custom-dialog">
126
+ In the following, you *MUST* *NOT* use the <user-dialog-tool/>
127
+ tool! Instead, you *MUST* just show a custom output, let the
128
+ user enter input, and then you set the result accordingly.
129
+
130
+ <expand name="custom-dialog" arg1="--other">
129
131
  <facet-M/>: <question-M/>
130
- <answer-M-1/>: (first grounded candidate answer)
131
- <answer-M-2/>: (second grounded candidate answer)
132
- <answer-M-3/>: (third grounded candidate answer)
133
- <answer-M-4/>: (fourth grounded candidate answer)
132
+ <answer-M-1/>: (grounded candidate answer 1)
133
+ <answer-M-2/>: (grounded candidate answer 2)
134
+ [...]
134
135
  </expand>
135
136
 
136
137
  4. Dispatch on the dialog <result/>:
@@ -214,15 +215,30 @@ Honor the following tenets throughout the brainstorming:
214
215
 
215
216
  <template>
216
217
  <ase-tpl-bullet-secondary/> **IDEA CLUSTER <C/>/<c/>**: <cluster-C/> - <cluster-summary-C/>,
217
- **IDEAS**: <N/>, <M/>[, ...]
218
+ **IDEAS**: <idea-index-C/>
218
219
  </template>
219
220
 
221
+ Here, <idea-index-C/> is the comma-separated list of the indices
222
+ <N/> of those retained ideas <idea-N/> that belong to cluster
223
+ <cluster-C/> (e.g. `2, 5, 9`).
224
+
220
225
  2. *Score*: for each retained idea <idea-N/> in the clusters, rank its *fit* against the
221
226
  purpose and constraints on a Likert scale of 0 (poor) to 10
222
227
  (excellent), considering *value*, *uniqueness*, *risk*, and
223
228
  *alignment with the existing code base*. Keep only ideas in the
224
229
  clusters with a rank of at least <getopt-option-min-rank/>.
225
230
 
231
+ If *no* idea meets the <getopt-option-min-rank/> floor, the floor
232
+ filter would empty the set and leave the downstream steps without
233
+ any options. In this case, *disregard* the floor and instead keep
234
+ the up-to-<getopt-option-max-shortlist/> highest-ranked ideas, and
235
+ output the following <template/> to flag that even the strongest
236
+ ideas fall below the bar:
237
+
238
+ <template>
239
+ <ase-tpl-bullet-signal/> **NOTICE**: no idea reached the minimum rank of <getopt-option-min-rank/>/10 - shortlisting the highest-ranked ideas regardless.
240
+ </template>
241
+
226
242
  3. From the scored ideas <idea-N/>, distill a *shortlist* of the top
227
243
  <getopt-option-max-shortlist/> options, sorted by rank from highest to lowest.
228
244
 
@@ -16,11 +16,16 @@ allowed-tools:
16
16
 
17
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
18
18
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
19
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
19
20
 
20
21
  <skill name="ase-meta-changelog">
21
22
  Update ChangeLog Entries
22
23
  </skill>
23
24
 
25
+ <expand name="getopt" arg1="ase-meta-changelog">
26
+ $ARGUMENTS
27
+ </expand>
28
+
24
29
  <objective>
25
30
  Help to complete, consolidate and sort *ChangeLog* entries of the most
26
31
  recent *ChangeLog* section, based on underlying *Git* commits and staged
@@ -81,11 +86,17 @@ Processing
81
86
  the Git *commits* plus the currently already staged changes in the Git
82
87
  *index*, but *ignore* the Git *stash* and still unstaged changes.
83
88
 
84
- For finding the corresponding Git *commits*, use the `N.M.K` from the
85
- *second* level-2 header in the *ChangeLog* file as the corresponding
86
- Git tag and then check all Git commits between `HEAD` and this tag
87
- with the command `git log N.M.K..HEAD --numstat --pretty=format:'%h:
88
- %s'`.
89
+ For finding the corresponding Git *commits*, first determine the
90
+ correct baseline Git tag. Take the `N.M.K` from the *first* (most
91
+ recent) level-2 header in the *ChangeLog* file and check whether a
92
+ corresponding Git tag already exists with the command `git tag --list
93
+ N.M.K`. If this command produces *no* output, the first section is
94
+ still in-progress/untagged, so use the `N.M.K` from the *second*
95
+ level-2 header as the baseline tag instead. If this command *does*
96
+ produce output, the first section is already released/tagged, so use
97
+ the `N.M.K` from the *first* level-2 header as the baseline tag. Then
98
+ check all Git commits between `HEAD` and this baseline tag with the
99
+ command `git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`.
89
100
 
90
101
  For finding the corresponding staged Git *changes* in the Git
91
102
  *index*, use the command `git diff --cached --numstat`, but silently
@@ -14,13 +14,18 @@ allowed-tools:
14
14
 
15
15
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
16
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
17
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
17
18
 
18
19
  <skill name="ase-meta-chat">
19
20
  Query Foreign LLM for Chat
20
21
  </skill>
21
22
 
23
+ <expand name="getopt" arg1="ase-meta-chat">
24
+ $ARGUMENTS
25
+ </expand>
26
+
22
27
  <objective>
23
- Query foreign LLM for: <query>$ARGUMENTS</query>
28
+ Query foreign LLM for: <query><getopt-arguments/></query>
24
29
  </objective>
25
30
 
26
31
  1. You *MUST* *NOT* output anything in this step.
@@ -12,11 +12,16 @@ allowed-tools:
12
12
 
13
13
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
14
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
15
16
 
16
17
  <skill name="ase-meta-commit">
17
18
  Git Commit
18
19
  </skill>
19
20
 
21
+ <expand name="getopt" arg1="ase-meta-commit">
22
+ $ARGUMENTS
23
+ </expand>
24
+
20
25
  <objective>
21
26
  Help to *craft* a *concise commit message* for the
22
27
  currently staged Git changes.
@@ -2,7 +2,7 @@
2
2
  name: ase-meta-diaboli
3
3
  argument-hint: "[--help|-h] [--count|-c <count>] <thesis>"
4
4
  description: >
5
- Challenge a thesis by playing "Devil’s Advocate" (latin: "Advocatus
5
+ Challenge a thesis by playing "Devil’s Advocate" (Latin: "Advocatus
6
6
  Diaboli"). Use when the user wants a thesis or statement
7
7
  relentlessly challenged or criticised.
8
8
  user-invocable: true
@@ -25,7 +25,7 @@ effort: xhigh
25
25
  </expand>
26
26
 
27
27
  <objective>
28
- Play "Devil’s Advocate" (latin: "Advocatus Diaboli") by relentlessly
28
+ Play "Devil’s Advocate" (Latin: "Advocatus Diaboli") by relentlessly
29
29
  challenging or criticising the thesis: <thesis><getopt-arguments/></thesis>
30
30
  </objective>
31
31
 
@@ -48,7 +48,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
48
48
  2. <step id="STEP 2: Determine Anti-Theses">
49
49
 
50
50
  Reason on the thesis in <thesis/> by playing *Devil's Advocate*
51
- (latin: *Advocatus Diaboli*) by relentlessly challenging or
51
+ (Latin: *Advocatus Diaboli*) by relentlessly challenging or
52
52
  criticising it with the help of the following tenets:
53
53
 
54
54
  - **Steelmanning**:
@@ -88,7 +88,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
88
88
 
89
89
  - **Push the Logic to its Conclusion**:
90
90
  Ask "If we accept this, then what?" and apply "Reduction to
91
- Absurdity" (latin: "Reductio Ad Absurdum"), because this disproves
91
+ Absurdity" (Latin: "Reductio Ad Absurdum"), because this disproves
92
92
  the thesis by showing that accepting it leads to a logically
93
93
  absurd, contradictory, or impossible conclusion.
94
94
 
@@ -120,7 +120,11 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
120
120
  Anti-Theses or Counter-Arguments until you EITHER have found at
121
121
  least <count/> Anti-Theses or Counter-Arguments with at least a rank
122
122
  of 7 OR you have already checked a total of <count/> x 5 Anti-Theses
123
- or Counter-Arguments.
123
+ or Counter-Arguments. If the second condition is reached first and
124
+ fewer than <count/> Anti-Theses or Counter-Arguments reached a rank
125
+ of at least 7, nevertheless surface the <count/> highest-ranked ones
126
+ found so far, because <count/> is the *minimum* number of
127
+ Anti-Theses to surface.
124
128
 
125
129
  Then, for the top-<count/> highest-ranked Anti-Theses or
126
130
  Counter-Arguments, sort them by their rank from highest to lowest,
@@ -109,7 +109,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
109
109
 
110
110
  3. For each discovered *intent group*, emit the following row
111
111
  <template/>, where <intent/> is the intent label, <changes/>
112
- is the total number of lines changes per feature in format
112
+ is the total number of lines changed per intent group in format
113
113
  `+N/-M`, <files/> is the list of affected file references,
114
114
  and <description/> is a *brief* one-to-two-sentence
115
115
  narrative of what changed and why:
@@ -13,11 +13,16 @@ effort: high
13
13
 
14
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
15
15
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
16
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
16
17
 
17
18
  <skill name="ase-meta-evaluate">
18
19
  Evaluate Alternatives
19
20
  </skill>
20
21
 
22
+ <expand name="getopt" arg1="ase-meta-evaluate">
23
+ $ARGUMENTS
24
+ </expand>
25
+
21
26
  <objective>
22
27
  *Evaluate* *alternatives* through a weighted
23
28
  multi-*criteria* decision matrix.
@@ -25,7 +30,7 @@ multi-*criteria* decision matrix.
25
30
 
26
31
  <flow>
27
32
  1. <step id="STEP 1: Determine Reason">
28
- - From the <request>$ARGUMENTS</request>, try to derive the overall
33
+ - From the <request><getopt-arguments/></request>, try to derive the overall
29
34
  reason <reason/> for the evaluation. If no such reason can be
30
35
  derived, assume <reason>generic comparison</reason>.
31
36
 
@@ -38,7 +43,7 @@ multi-*criteria* decision matrix.
38
43
  </step>
39
44
 
40
45
  2. <step id="STEP 2: Determine Alternatives">
41
- - From the <request>$ARGUMENTS</request> derive the two or more
46
+ - From the <request><getopt-arguments/></request> derive the two or more
42
47
  alternatives <alternative-K/> (K=1-N) the user wants to be
43
48
  evaluated. Do not output anything.
44
49
 
@@ -105,7 +110,7 @@ multi-*criteria* decision matrix.
105
110
  </step>
106
111
 
107
112
  3. <step id="STEP 3: Derive Criteria">
108
- - From the <request>$ARGUMENTS</request>, try to derive the criteria
113
+ - From the <request><getopt-arguments/></request>, try to derive the criteria
109
114
  <criteria-L/> (L=1-M) for the evaluation. Do not output anything.
110
115
 
111
116
  - For each criterion <criteria-L/> (L=1-M), decide on its <weight-L/>
@@ -222,23 +227,26 @@ multi-*criteria* decision matrix.
222
227
  ⚠ *Please give some hints on the criteria to ensure a single best alternative!*
223
228
  </template>
224
229
 
225
- - Otherwise, if <percentage/> is less than 0.10, stop the flow after
226
- you output just the following <template/> and do not output anything
227
- else:
230
+ - Otherwise, if <rating-K/> is less than zero (i.e. all alternatives
231
+ rate negatively and the "best" is merely the least-bad), stop the
232
+ flow after you output just the following <template/> and do not
233
+ output anything else. This all-negative check is evaluated *before*
234
+ the small-distance check below, so that an all-negative alternative
235
+ set with a small winning gap surfaces the all-negative warning rather
236
+ than being masked by the small-distance branch:
228
237
 
229
238
  <template>
230
239
  <ase-tpl-bullet-signal/> **BEST ALTERNATIVE**: ⚑ **<alternative-K/>**
231
- ⚠ *ATTENTION: small distance to second best alternative!*
240
+ ⚠ *ATTENTION: all alternatives rate negatively; this is the least-bad choice, not a strong winner!*
232
241
  </template>
233
242
 
234
- - Otherwise, if <rating-K/> is less than zero (i.e. all alternatives
235
- rate negatively and the "best" is merely the least-bad), stop the
236
- flow after you output just the following <template/> and do not
237
- output anything else:
243
+ - Otherwise, if <percentage/> is less than 0.10, stop the flow after
244
+ you output just the following <template/> and do not output anything
245
+ else:
238
246
 
239
247
  <template>
240
248
  <ase-tpl-bullet-signal/> **BEST ALTERNATIVE**: ⚑ **<alternative-K/>**
241
- ⚠ *ATTENTION: all alternatives rate negatively; this is the least-bad choice, not a strong winner!*
249
+ ⚠ *ATTENTION: small distance to second best alternative!*
242
250
  </template>
243
251
 
244
252
  - Otherwise (<percentage/> is greater than or equal to 0.10), output
@@ -15,18 +15,23 @@ effort: high
15
15
 
16
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
17
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
18
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
18
19
 
19
20
  <skill name="ase-meta-persona">
20
21
  Persona Configuration
21
22
  </skill>
22
23
 
24
+ <expand name="getopt" arg1="ase-meta-persona">
25
+ $ARGUMENTS
26
+ </expand>
27
+
23
28
  <objective>
24
29
  *Configure* the *persona style* of the agent to adjust the communication
25
30
  style and token usage intensity.
26
31
  </objective>
27
32
 
28
33
  1. Determine request:
29
- <request>$ARGUMENTS</request>
34
+ <request><getopt-arguments/></request>
30
35
  Do not output anything.
31
36
 
32
37
  2. <if condition="<request/> is empty">
@@ -134,9 +134,17 @@ by querying *multiple* AIs for an *optimal consensus*.
134
134
 
135
135
  4. <step id="STEP 4: Determine Consensus Rating">
136
136
 
137
- Determine, on a Likert scale of 0..<n/>, the amount of the overall
138
- consensus <c/> of all the responses. The <n/> is the *total number of
139
- responders* (yourself plus all available foreign AIs above).
137
+ First, count the number of *available foreign AIs* (those queried in
138
+ STEP 2 which did *not* return an `ERROR:` response). If this count is
139
+ *zero* -- i.e., every foreign AI errored out or none were reachable
140
+ and only yourself (Anthropic Claude) remains -- a quorum is *not*
141
+ possible. In this case, set <c></c> and <n></n> to empty and instead
142
+ set <disagreement/> to `(no quorum: no foreign AIs were available)`,
143
+ then skip the rest of this step.
144
+
145
+ Otherwise, determine, on a Likert scale of 0..<n/>, the amount of the
146
+ overall consensus <c/> of all the responses. The <n/> is the *total
147
+ number of responders* (yourself plus all available foreign AIs above).
140
148
  If all responses disagree, the consensus <c/> is zero.
141
149
  If all responses agree, <c/> is <n/>.
142
150
 
@@ -165,6 +173,10 @@ by querying *multiple* AIs for an *optimal consensus*.
165
173
 
166
174
  **CONSENSUS RATE**: **<c/>/<n/>** <disagreement/>
167
175
 
176
+ When a quorum was *not* possible (see STEP 4), render this line
177
+ instead as just `**CONSENSUS RATE**: *n/a* <disagreement/>` (omitting
178
+ the `<c/>/<n/>` fraction), as a single AI cannot form a consensus.
179
+
168
180
  &#x25CB; **Anthropic Claude**:
169
181
  - [...]
170
182
  - [...]
@@ -88,12 +88,20 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
88
88
  from the MCP server `search-exa`.
89
89
  </expand>
90
90
 
91
- If the `websearch` backend is *selected*:
91
+ If the `websearch` backend is *selected* and the tool
92
+ `WebSearch` is available:
92
93
 
93
94
  <expand name="agent" arg1="websearch">
94
95
  Call the tool `WebSearch(query: "<query/>")`.
95
96
  </expand>
96
97
 
98
+ If the `websearch` backend is *selected* and the tool `web_search` is
99
+ available and the tool `WebSearch` is not available:
100
+
101
+ <expand name="agent" arg1="websearch">
102
+ Call the tool `web_search(query: "<query/>")`.
103
+ </expand>
104
+
97
105
  </step>
98
106
 
99
107
  2. <step id="STEP 2: Consolidate Search Answers">
@@ -142,7 +142,11 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
142
142
  more Pro-Theses or Supporting-Arguments until you EITHER have found
143
143
  at least <count/> Pro-Theses or Supporting-Arguments with at least a
144
144
  rank of 7 OR you have already checked a total of <count/> x 5
145
- Pro-Theses or Supporting-Arguments.
145
+ Pro-Theses or Supporting-Arguments. If the second condition is
146
+ reached first and fewer than <count/> Pro-Theses or
147
+ Supporting-Arguments reached a rank of at least 7, nevertheless
148
+ surface the <count/> highest-ranked ones found so far, because
149
+ <count/> is the *minimum* number of Pro-Theses to surface.
146
150
 
147
151
  Then, for the top-<count/> highest-ranked Pro-Theses or
148
152
  Supporting-Arguments, sort them by their rank from highest to lowest,
@@ -123,10 +123,12 @@ addressing surface-level symptoms.
123
123
 
124
124
  Then choose, among the <answer-k/>, the *most causally-significant*
125
125
  candidate -- the one most likely to lead to the true root-cause --
126
- and *justify* the choice in one line (state explicitly *why* it
127
- beats the other candidates, e.g. it alone also explains the timing,
128
- scope, or magnitude of the level's fact). A bare "most significant"
129
- is *not* sufficient; if no candidate clearly dominates, say so.
126
+ set <chosen-k/> to its candidate index (the <k/> of the chosen
127
+ <answer-k/>), and *justify* the choice in one line (state explicitly
128
+ *why* it beats the other candidates, e.g. it alone also explains the
129
+ timing, scope, or magnitude of the level's fact). A bare "most
130
+ significant" is *not* sufficient; if no candidate clearly dominates,
131
+ say so.
130
132
 
131
133
  <template>
132
134
  <ase-tpl-bullet-secondary/> **WHY <n/> → chosen <n/>.<chosen-k/>**: <justification/>
@@ -203,11 +203,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
203
203
  </template>
204
204
 
205
205
  - If <getopt-option-next/> is equal to `none`:
206
- Let the *user interactively choose* what to do as the next
207
- step. For this you *MUST* use the custom `custom-dialog` and
208
- *NOT* the `AskUserQuestion` based "user-dialog":
209
206
 
210
- <expand name="custom-dialog">
207
+ In the following, you *MUST* *NOT* use the <user-dialog-tool/>
208
+ tool! Instead, you *MUST* just show a custom output, let the
209
+ user enter input, and then you set the result accordingly.
210
+
211
+ <expand name="custom-dialog" arg1="--no-other">
211
212
  Next Step: How would you like to proceed with the plan?
212
213
  DONE: Stop processing.
213
214
  EDIT: Hand off plan to editing.