@rse/ase 0.9.4 → 0.9.6

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 (43) hide show
  1. package/dst/ase-artifact.js +331 -0
  2. package/dst/ase-config.js +56 -10
  3. package/dst/ase-service.js +2 -0
  4. package/dst/ase-task.js +139 -64
  5. package/dst/ase.js +2 -0
  6. package/package.json +5 -3
  7. package/plugin/.claude-plugin/plugin.json +1 -1
  8. package/plugin/.github/plugin/plugin.json +1 -1
  9. package/plugin/meta/ase-format-meta.md +5 -2
  10. package/plugin/meta/{ase-format-plan.md → ase-format-task.md} +7 -6
  11. package/plugin/package.json +1 -1
  12. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  13. package/plugin/skills/ase-arch-discover/SKILL.md +17 -9
  14. package/plugin/skills/ase-arch-discover/help.md +14 -0
  15. package/plugin/skills/ase-code-craft/SKILL.md +2 -2
  16. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  17. package/plugin/skills/ase-code-lint/SKILL.md +1 -1
  18. package/plugin/skills/ase-code-refactor/SKILL.md +2 -2
  19. package/plugin/skills/ase-code-resolve/SKILL.md +3 -3
  20. package/plugin/skills/ase-docs-proofread/SKILL.md +1 -1
  21. package/plugin/skills/ase-meta-brainstorm/SKILL.md +22 -21
  22. package/plugin/skills/ase-meta-brainstorm/help.md +38 -12
  23. package/plugin/skills/ase-meta-chat/SKILL.md +1 -1
  24. package/plugin/skills/ase-meta-diaboli/SKILL.md +1 -1
  25. package/plugin/skills/ase-meta-diff/SKILL.md +1 -1
  26. package/plugin/skills/ase-meta-quorum/SKILL.md +37 -5
  27. package/plugin/skills/ase-meta-quorum/help.md +18 -0
  28. package/plugin/skills/ase-meta-review/SKILL.md +1 -1
  29. package/plugin/skills/ase-meta-search/SKILL.md +35 -6
  30. package/plugin/skills/ase-meta-search/help.md +14 -2
  31. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  32. package/plugin/skills/ase-meta-why/SKILL.md +117 -25
  33. package/plugin/skills/ase-meta-why/help.md +30 -2
  34. package/plugin/skills/ase-task-condense/SKILL.md +1 -1
  35. package/plugin/skills/ase-task-delete/help.md +0 -4
  36. package/plugin/skills/ase-task-edit/SKILL.md +4 -4
  37. package/plugin/skills/ase-task-edit/help.md +0 -4
  38. package/plugin/skills/ase-task-grill/SKILL.md +1 -1
  39. package/plugin/skills/ase-task-grill/help.md +0 -4
  40. package/plugin/skills/ase-task-implement/SKILL.md +1 -1
  41. package/plugin/skills/ase-task-implement/help.md +5 -6
  42. package/plugin/skills/ase-task-preflight/SKILL.md +1 -1
  43. package/plugin/skills/ase-task-reboot/SKILL.md +1 -1
@@ -48,7 +48,7 @@ related to a set of code quality aspects.
48
48
 
49
49
  ```text
50
50
  Agent(
51
- name: "ase:ase-code-lint",
51
+ name: "ase-code-lint",
52
52
  description: "Lint Investigation",
53
53
  subagent_type: "ase:ase-code-lint",
54
54
  mode: "plan",
@@ -38,7 +38,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
38
38
  <request><getopt-arguments/></request>
39
39
  </objective>
40
40
 
41
- @${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
41
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
42
42
 
43
43
  Procedure
44
44
  ---------
@@ -218,7 +218,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
218
218
  (e.g. `flowchart TB`, `stateDiagram-v2`, `sequenceDiagram`,
219
219
  `classDiagram`, or `erDiagram`, depending on intent) and
220
220
  dispatching the rendering to the `ase-meta-diagram`
221
- sub-agent by calling the tool `Agent(name: "ase:ase-meta-diagram",
221
+ sub-agent by calling the tool `Agent(name: "ase-meta-diagram",
222
222
  description: "Diagram Rendering", subagent_type:
223
223
  "ase:ase-meta-diagram", prompt: <mermaid-spec/>)`, reproducing
224
224
  its returned fenced code block verbatim. For *current
@@ -38,7 +38,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
38
38
  <problem><getopt-arguments/></problem>
39
39
  </objective>
40
40
 
41
- @${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
41
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
42
42
 
43
43
  Procedure
44
44
  ---------
@@ -154,7 +154,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
154
154
  TB`, `stateDiagram-v2`, `sequenceDiagram`, `classDiagram`, or
155
155
  `erDiagram`, depending on intent) and dispatching the rendering
156
156
  to the `ase-meta-diagram` sub-agent by calling the tool
157
- `Agent(name: "ase:ase-meta-diagram", description: "Diagram
157
+ `Agent(name: "ase-meta-diagram", description: "Diagram
158
158
  Rendering", subagent_type: "ase:ase-meta-diagram", prompt:
159
159
  <mermaid-spec/>)`, reproducing its returned fenced code block
160
160
  verbatim. Omit <optional-diagram/> entirely for simple or
@@ -267,7 +267,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
267
267
  (e.g. `flowchart TB`, `stateDiagram-v2`, `sequenceDiagram`,
268
268
  `classDiagram`, or `erDiagram`, depending on intent) and
269
269
  dispatching the rendering to the `ase-meta-diagram`
270
- sub-agent by calling the tool `Agent(name: "ase:ase-meta-diagram",
270
+ sub-agent by calling the tool `Agent(name: "ase-meta-diagram",
271
271
  description: "Diagram Rendering", subagent_type:
272
272
  "ase:ase-meta-diagram", prompt: <mermaid-spec/>)`, reproducing
273
273
  its returned fenced code block verbatim. For *current
@@ -48,7 +48,7 @@ Analyze documents for spelling, punctuation, or grammar errors
48
48
 
49
49
  ```text
50
50
  Agent(
51
- name: "ase:ase-docs-proofread",
51
+ name: "ase-docs-proofread",
52
52
  description: "Proofread Investigation",
53
53
  subagent_type: "ase:ase-docs-proofread",
54
54
  mode: "plan",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-meta-brainstorm
3
- argument-hint: "[--help|-h] [--count|-c=12] <topic>"
3
+ argument-hint: "[--help|-h] [--max-clarify|-c=3] [--min-ideas|-i=12] [--min-rank|-r=7] [--max-shortlist|-s=4] <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
@@ -23,15 +23,15 @@ Collaboratively Brainstorm a Topic
23
23
 
24
24
  <expand name="getopt"
25
25
  arg1="ase-meta-brainstorm"
26
- arg2="--count|-c=12">
26
+ arg2="--max-clarify|-c=3 --min-ideas|-i=12 --min-rank|-r=7 --max-shortlist|-s=4">
27
27
  $ARGUMENTS
28
28
  </expand>
29
29
 
30
30
  <objective>
31
- Collaboratively brainstorm the topic <topic><getopt-arguments/></topic> by first
32
- *diverging* into a broad space of candidate ideas, then *converging*
33
- through clustering and scoring, and finally distilling a *shortlist*
34
- with a single recommended direction.
31
+ Collaboratively brainstorm the topic <topic><getopt-arguments/></topic>
32
+ by first *diverging* into a broad space of candidate ideas, then
33
+ *converging* through clustering and scoring, and finally distilling a
34
+ *shortlist* with a single recommended direction.
35
35
  </objective>
36
36
 
37
37
  Guiding Tenets
@@ -90,19 +90,20 @@ Honor the following tenets throughout the brainstorming:
90
90
 
91
91
  Before generating any ideas, *explore the project context* (review
92
92
  relevant existing files, documentation, and recent changes) and
93
- determine the <m/> (<m/>=1-3) *essential unknowns* about the topic
94
- - the purpose, constraints, scope boundaries, and success criteria
95
- that must be pinned down for the brainstorming to be reasonably
96
- grounded.
93
+ determine the <m/> (<m/> = 1..<getopt-option-max-clarify/>)
94
+ *essential unknowns* about the topic - the purpose, constraints,
95
+ scope boundaries, and success criteria that must be pinned down for
96
+ the brainstorming to be reasonably grounded.
97
97
 
98
- Notice: you are intentionally constrained to just 1-3 unknowns,
99
- as too much upfront intent clarification kills the brainstorming
100
- of ideas later. So, you *MUST* reduce the clarifications of the
101
- unknowns to the absolute minimum!
98
+ Notice: you are intentionally constrained to just
99
+ 1..<getopt-option-max-clarify/> unknowns, as too much upfront intent
100
+ clarification kills the brainstorming of ideas later. So, you *MUST*
101
+ reduce the clarifications of the unknowns to the absolute minimum in
102
+ general and cap it at <getopt-option-max-clarify/>!
102
103
 
103
- For each essential unknown, derive a short 1-3 word facet <facet-M/>
104
- and a corresponding question <question-M/> whose answer materially
105
- changes which ideas make sense at all.
104
+ For each essential unknown to clarify, derive a short 1-3 word facet
105
+ <facet-M/> and a corresponding question <question-M/> whose answer
106
+ materially changes which ideas make sense at all.
106
107
 
107
108
  1. For each <question-M/> in the iteration cycle <M/> (<M/>=1...<m/>):
108
109
 
@@ -159,7 +160,7 @@ Honor the following tenets throughout the brainstorming:
159
160
  variety in outcome.
160
161
 
161
162
  Do still *not* judge, rank, or prune ideas in this step. Generate
162
- ideas until you either reach at least <getopt-option-count/> distinct
163
+ ideas until you either reach at least <getopt-option-min-ideas/> distinct
163
164
  candidate ideas or have clearly exhausted the meaningfully distinct
164
165
  space.
165
166
 
@@ -199,10 +200,10 @@ Honor the following tenets throughout the brainstorming:
199
200
  purpose and constraints on a Likert scale of 0 (poor) to 10
200
201
  (excellent), considering *value*, *uniqueness*, *risk*, and
201
202
  *alignment with the existing code base*. Keep only ideas in the
202
- clusters with a rank of at least 7.
203
+ clusters with a rank of at least <getopt-option-min-rank/>.
203
204
 
204
205
  3. From the scored ideas <idea-N/>, distill a *shortlist* of the top
205
- 3-4 options, sorted by rank from highest to lowest.
206
+ <getopt-option-max-shortlist/> options, sorted by rank from highest to lowest.
206
207
 
207
208
  For this, draw the shortlist from *distinct* clusters <cluster-C/>
208
209
  wherever possible - prefer a diverse shortlist spanning different
@@ -216,7 +217,7 @@ Honor the following tenets throughout the brainstorming:
216
217
  and its primary trade-off), and output the following <template/>:
217
218
 
218
219
  <template>
219
- <ase-tpl-bullet-normal/> **DISTILLED IDEA <N/>**: <option-N/>
220
+ <ase-tpl-bullet-normal/> **DISTILLED IDEA**: <option-N/>
220
221
  </template>
221
222
 
222
223
  4. Finally, derive a single *recommended idea* - the highest-ranked
@@ -7,7 +7,10 @@
7
7
 
8
8
  `ase-meta-brainstorm`
9
9
  [`--help`|`-h`]
10
- [`--count`|`-c=12`]
10
+ [`--max-clarify=3`]
11
+ [`--min-ideas`|`-i=12`]
12
+ [`--min-rank=7`]
13
+ [`--max-shortlist=4`]
11
14
  *topic*
12
15
 
13
16
  ## DESCRIPTION
@@ -16,18 +19,19 @@ The `ase-meta-brainstorm` skill guides a collaborative ideation
16
19
  session on a *topic* *before* any implementation begins. It first
17
20
  *clarifies intent* by exploring the project context and interviewing
18
21
  the user - one grounded, multiple-choice question at a time - about
19
- purpose, constraints, scope, and success criteria. It then *diverges*
20
- into a broad space of candidate ideas (at least `--count`, default 12)
21
- pursued from deliberately diverse angles (MVP-first, risk-first,
22
- UX-first, reuse-first, and wildcard), without judging them.
22
+ purpose, constraints, scope, and success criteria (asking at most
23
+ `--max-clarify`, default 3, questions). It then *diverges* into a broad
24
+ space of candidate ideas (at least `--min-ideas`, default 12) pursued from
25
+ deliberately diverse angles (MVP-first, risk-first, UX-first,
26
+ reuse-first, and wildcard), without judging them.
23
27
 
24
28
  Next it *converges* by clustering the ideas into coherent themes,
25
29
  pruning speculative or out-of-scope ones via *YAGNI*, and scoring the
26
- survivors on a 0-10 fit scale (keeping only those ranked 7 or higher).
27
- Finally it distills a *shortlist* of the top 3-4 directions - drawn from
28
- distinct clusters wherever possible - and derives a single
29
- *RECOMMENDATION*, being either the highest-ranked option or a principled
30
- synthesis of the shortlist.
30
+ survivors on a 0-10 fit scale (keeping only those ranked `--min-rank`,
31
+ default 7, or higher). Finally it distills a *shortlist* of the top
32
+ `--max-shortlist`, default 4, directions - drawn from distinct clusters
33
+ wherever possible - and derives a single *RECOMMENDATION*, being either
34
+ the highest-ranked option or a principled synthesis of the shortlist.
31
35
 
32
36
  On completion the skill offers a *next step*: stop, or hand the
33
37
  recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
@@ -35,11 +39,26 @@ recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
35
39
 
36
40
  ## OPTIONS
37
41
 
38
- `--count`|`-c=12`:
42
+ `--max-clarify=3`:
43
+ The *maximum* number of essential-unknown clarification questions
44
+ asked in the *clarify intent* phase (default: 3). Lower it for a
45
+ faster, leaner intake, raise it for more upfront grounding.
46
+
47
+ `--min-ideas`|`-i=12`:
39
48
  The *minimum* number of candidate ideas to generate in the *diverge*
40
49
  phase before converging (default: 12). Raise it for a broader idea
41
50
  space, lower it for a quicker, narrower session.
42
51
 
52
+ `--min-rank=7`:
53
+ The *minimum* 0-10 fit rank an idea must score to survive the
54
+ *converge* phase (default: 7). Raise it for a stricter filter, lower
55
+ it to retain more ideas.
56
+
57
+ `--max-shortlist=4`:
58
+ The *maximum* number of distilled options on the final *shortlist*
59
+ (default: 4). Lower it for a sharper focus, raise it for more
60
+ finalists.
61
+
43
62
  ## ARGUMENTS
44
63
 
45
64
  *topic*:
@@ -57,7 +76,14 @@ Brainstorm an approach for a new feature:
57
76
  Brainstorm with a broader idea space of at least 20 candidates:
58
77
 
59
78
  ```text
60
- ❯ /ase-meta-brainstorm --count 20 an offline-first sync layer
79
+ ❯ /ase-meta-brainstorm --min-ideas 20 an offline-first sync layer
80
+ ```
81
+
82
+ Brainstorm quickly with a single clarification, a stricter score floor,
83
+ and a tighter shortlist:
84
+
85
+ ```text
86
+ ❯ /ase-meta-brainstorm --max-clarify 1 --min-rank 8 --max-shortlist 3 an offline-first sync layer
61
87
  ```
62
88
 
63
89
  ## SEE ALSO
@@ -28,7 +28,7 @@ Query foreign LLM for: <query>$ARGUMENTS</query>
28
28
 
29
29
  ```text
30
30
  Agent(
31
- name: "ase:ase-meta-chat",
31
+ name: "ase-meta-chat",
32
32
  description: "Query Foreign LLM for Chat",
33
33
  subagent_type: "ase:ase-meta-chat",
34
34
  prompt: <query/>
@@ -35,7 +35,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
35
35
 
36
36
  <flow>
37
37
 
38
- 1. <step id="STEP 1: Repeat Thesis">
38
+ 1. <step id="STEP 1: Restate Thesis">
39
39
 
40
40
  Output the thesis with the following <template/>:
41
41
 
@@ -306,7 +306,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
306
306
  labels ultra short (basenames or module names only).
307
307
 
308
308
  2. Dispatch the rendering to the `ase-meta-diagram` sub-agent by
309
- calling the tool `Agent(name: "ase:ase-meta-diagram",
309
+ calling the tool `Agent(name: "ase-meta-diagram",
310
310
  description: "Diagram Rendering", subagent_type:
311
311
  "ase:ase-meta-diagram", prompt: "<mermaid-spec/>")` and capture
312
312
  its returned `text` field as <diagram/>.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-meta-quorum
3
- argument-hint: "[--help|-h] <question>"
3
+ argument-hint: "[--help|-h] [--models|-m <model>[,...]] <question>"
4
4
  description: >
5
5
  Query Multiple AIs for Quorum Answer.
6
6
  user-invocable: true
@@ -13,11 +13,18 @@ allowed-tools:
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-quorum">
18
19
  Query Multiple AIs for Quorum Answer
19
20
  </skill>
20
21
 
22
+ <expand name="getopt"
23
+ arg1="ase-meta-quorum"
24
+ arg2="--models|-m=(all|chatgpt|gemini|deepseek|grok|glm|qwen)...">
25
+ $ARGUMENTS
26
+ </expand>
27
+
21
28
  <objective>
22
29
  Find a *quorum answer* on an arbitrary question,
23
30
  by querying *multiple* AIs for an *optimal consensus*.
@@ -30,7 +37,7 @@ by querying *multiple* AIs for an *optimal consensus*.
30
37
  Prepare the LLM query by setting <query/> to the following <template/>:
31
38
 
32
39
  <template>
33
- $ARGUMENTS.
40
+ <getopt-arguments/>.
34
41
  Please respond with facts and very concise and brief only,
35
42
  usually with just 1 to 7 corresponding bullet points and with short sentences.
36
43
  Optionally, mention potential cruxes which should be noticed.
@@ -53,12 +60,20 @@ by querying *multiple* AIs for an *optimal consensus*.
53
60
 
54
61
  2. <step id="STEP 2: Query Foreign AIs">
55
62
 
63
+ The user-selectable foreign models are restricted by the
64
+ `--models`/`-m` option, parsed into <getopt-option-models/>
65
+ as a comma-separated list of model tokens. The default is
66
+ the single token `all`. If <getopt-option-models/> contains
67
+ the token `all`, you *MUST* treat it as the full list
68
+ `chatgpt,gemini,deepseek,grok,glm,qwen` (all models). Anthropic
69
+ Claude (yourself) is *always* included, independent of this option.
70
+
56
71
  <define name="agent">
57
72
  Call the `Agent` tool:
58
73
 
59
74
  ```text
60
75
  Agent(
61
- name: "ase:ase-meta-chat",
76
+ name: "ase-meta-chat-<arg2/>",
62
77
  description: "Query Foreign LLM: <arg1/>",
63
78
  subagent_type: "ase:ase-meta-chat",
64
79
  prompt: "<arg2/> <query/>"
@@ -67,12 +82,28 @@ by querying *multiple* AIs for an *optimal consensus*.
67
82
 
68
83
  </define>
69
84
 
85
+ Query only those foreign models whose token is contained in
86
+ <getopt-option-models/> (where `all` selects every model); silently
87
+ skip all others:
88
+
89
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `chatgpt`">
70
90
  <expand name="agent" arg1="OpenAI ChatGPT" arg2="chatgpt"></expand>
91
+ </if>
92
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `gemini`">
71
93
  <expand name="agent" arg1="Google Gemini" arg2="gemini"></expand>
94
+ </if>
95
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `deepseek`">
72
96
  <expand name="agent" arg1="DeepSeek" arg2="deepseek"></expand>
97
+ </if>
98
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `grok`">
73
99
  <expand name="agent" arg1="xAI Grok" arg2="grok"></expand>
100
+ </if>
101
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `glm`">
74
102
  <expand name="agent" arg1="Z.AI GLM" arg2="glm"></expand>
103
+ </if>
104
+ <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `qwen`">
75
105
  <expand name="agent" arg1="Alibaba Qwen" arg2="qwen"></expand>
106
+ </if>
76
107
 
77
108
  You *MUST* *NOT* output anything in this step.
78
109
 
@@ -116,7 +147,7 @@ by querying *multiple* AIs for an *optimal consensus*.
116
147
 
117
148
  <template>
118
149
  **QUESTION**:
119
- $ARGUMENTS
150
+ <getopt-arguments/>
120
151
 
121
152
  &#x25CF; **CONSENSUS ANSWER**:
122
153
  - [...]
@@ -153,7 +184,8 @@ by querying *multiple* AIs for an *optimal consensus*.
153
184
  - [...]
154
185
  </template>
155
186
 
156
- In this output, remove the sections of those AIs which were not available.
187
+ In this output, remove the sections of those AIs which were not
188
+ queried (excluded via `--models`/`-m`) or were not available.
157
189
  You *MUST* *NOT* output any further explanations yourself.
158
190
 
159
191
  </step>
@@ -7,6 +7,7 @@
7
7
 
8
8
  `ase-meta-quorum`
9
9
  [`--help`|`-h`]
10
+ [`--models`|`-m` *model*[,...]]
10
11
  *question*
11
12
 
12
13
  ## DESCRIPTION
@@ -23,6 +24,17 @@ a Likert scale of `0..N` (where `N` is the number of available
23
24
  responders), and reports the consensus answer alongside the
24
25
  complete, unmodified individual responses.
25
26
 
27
+ ## OPTIONS
28
+
29
+ `--models`|`-m` *model*[,...]:
30
+ Restrict the *foreign* LLMs that are queried to the given
31
+ comma-separated list of *model* tokens. Recognized tokens are
32
+ `all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`, and `qwen`,
33
+ where `all` selects every model. The default is `all`. Models that
34
+ are not selected (or not available) are *silently skipped*.
35
+ Anthropic Claude (the skill itself) is *always* included,
36
+ independent of this option.
37
+
26
38
  ## ARGUMENTS
27
39
 
28
40
  *question*:
@@ -36,6 +48,12 @@ Ask the quorum a factual question:
36
48
  ❯ /ase-meta-quorum What are the most common causes of memory leaks in Node.js?
37
49
  ```
38
50
 
51
+ Ask only a subset of the foreign models:
52
+
53
+ ```text
54
+ ❯ /ase-meta-quorum --models chatgpt,gemini,grok Which sorting algorithm is fastest in practice?
55
+ ```
56
+
39
57
  ## SEE ALSO
40
58
 
41
59
  `ase-meta-chat`, `ase-meta-search`, `ase-meta-evaluate`.
@@ -90,7 +90,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
90
90
 
91
91
  ```text
92
92
  Agent(
93
- name: "ase:ase-meta-review",
93
+ name: "ase-meta-review",
94
94
  description: "Review Investigation",
95
95
  subagent_type: "ase:ase-meta-review",
96
96
  mode: "plan",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-meta-search
3
- argument-hint: "[--help|-h] <query>"
3
+ argument-hint: "[--help|-h] [--services|-s=(all|perplexity|brave|exa|websearch)...] <query>"
4
4
  description: >
5
5
  Search the Internet/Web with a query.
6
6
  Prefer this skill before using Perplexity, Brave and WebSearch.
@@ -17,14 +17,21 @@ allowed-tools:
17
17
 
18
18
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
19
19
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
20
21
 
21
22
  <skill name="ase-meta-search">
22
23
  Search the Internet/Web
23
24
  </skill>
24
25
 
26
+ <expand name="getopt"
27
+ arg1="ase-meta-search"
28
+ arg2="--services|-s=(all|perplexity|brave|exa|websearch)...">
29
+ $ARGUMENTS
30
+ </expand>
31
+
25
32
  <objective>
26
33
  Your objective is to *search* the *Internet*/*Web* for the following query:
27
- <query>$ARGUMENTS</query>
34
+ <query><getopt-arguments/></query>
28
35
  </objective>
29
36
 
30
37
  <flow>
@@ -34,7 +41,7 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
34
41
  <define name="agent">
35
42
  ```text
36
43
  Agent(
37
- name: "ase:ase-meta-search",
44
+ name: "ase-meta-search",
38
45
  description: "Query Web Search Service",
39
46
  subagent_type: "ase:ase-meta-search",
40
47
  prompt: <content/>
@@ -42,24 +49,46 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
42
49
  ```
43
50
  </define>
44
51
 
45
- If the MCP tool `perplexity_search` from the MCP server `search-perplexity` is available:
52
+ Treat <getopt-option-services/> as a comma-separated list of
53
+ *backend tokens*. The getopt parser validates only the *first*
54
+ token, so you *MUST* validate each remaining token yourself against
55
+ the allowed set `all`, `perplexity`, `brave`, `exa`, `websearch`. If
56
+ any token is *not* in this set, only output the following <template/>
57
+ and then immediately *STOP* processing the entire current skill:
58
+
59
+ <template>
60
+ ⧉ **ASE**: ✪ skill: **ase-meta-search**, ▶ ERROR: invalid `--services` token: **<token/>**
61
+ </template>
62
+
63
+ A backend is *selected* if `all` is in <getopt-option-services/> *OR*
64
+ that backend's own name is in <getopt-option-services/>.
65
+
66
+ If the `perplexity` backend is *selected* and the MCP tool
67
+ `perplexity_search` from the MCP server `search-perplexity` is available:
68
+
46
69
  <expand name="agent">
47
70
  Call the MCP tool `perplexity_search(query: "<query/>")`
48
71
  from the MCP server `search-perplexity`.
49
72
  </expand>
50
73
 
51
- If the MCP tool `brave_web_search` from the MCP server `search-brave` is available:
74
+ If the `brave` backend is *selected* and the MCP tool
75
+ `brave_web_search` from the MCP server `search-brave` is available:
76
+
52
77
  <expand name="agent">
53
78
  Call the MCP tool `brave_web_search(query: "<query/>")`
54
79
  from the MCP server `search-brave`.
55
80
  </expand>
56
81
 
57
- If the MCP tool `web_search_exa` from the MCP server `search-exa` is available:
82
+ If the `exa` backend is *selected* and the MCP tool
83
+ `web_search_exa` from the MCP server `search-exa` is available:
84
+
58
85
  <expand name="agent">
59
86
  Call the MCP tool `web_search_exa(query: "<query/>")`
60
87
  from the MCP server `search-exa`.
61
88
  </expand>
62
89
 
90
+ If the `websearch` backend is *selected*:
91
+
63
92
  <expand name="agent">
64
93
  Call the tool `WebSearch(query: "<query/>")`.
65
94
  </expand>
@@ -7,12 +7,13 @@
7
7
 
8
8
  `ase-meta-search`
9
9
  [`--help`|`-h`]
10
+ [`--services`|`-s`=(`all`|`perplexity`|`brave`|`exa`|`websearch`)...]
10
11
  *query*
11
12
 
12
13
  ## DESCRIPTION
13
14
 
14
15
  The `ase-meta-search` skill searches the *Internet*/*Web* for the
15
- given *query*. It dispatches the query in parallel to all available
16
+ given *query*. It dispatches the query in parallel to the *selected*
16
17
  search services (Perplexity, Brave, Exa, and Claude's built-in
17
18
  `WebSearch`) via the `ase:ase-meta-search` sub-agent and consolidates
18
19
  all responses into a single answer without removing original
@@ -23,17 +24,28 @@ Brave, or `WebSearch` individually.
23
24
 
24
25
  ## ARGUMENTS
25
26
 
27
+ `--services`|`-s`=(`all`|`perplexity`|`brave`|`exa`|`websearch`)...:
28
+ The comma-separated list of search backends to query. The default
29
+ `all` queries every available backend (the original behavior);
30
+ otherwise only the listed backends are queried.
31
+
26
32
  *query*:
27
33
  The search query to dispatch to the search services.
28
34
 
29
35
  ## EXAMPLES
30
36
 
31
- Search the Web for a topic:
37
+ Search the Web for a topic across all backends:
32
38
 
33
39
  ```text
34
40
  ❯ /ase-meta-search latest stable release of TypeScript and release notes
35
41
  ```
36
42
 
43
+ Search the Web using only the Brave and Exa backends:
44
+
45
+ ```text
46
+ ❯ /ase-meta-search --services=brave,exa latest stable release of TypeScript
47
+ ```
48
+
37
49
  ## SEE ALSO
38
50
 
39
51
  `ase-meta-chat`, `ase-meta-quorum`, `ase-arch-discover`.
@@ -39,7 +39,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
39
39
 
40
40
  <flow>
41
41
 
42
- 1. <step id="STEP 1: Repeat Thesis">
42
+ 1. <step id="STEP 1: Restate Thesis">
43
43
 
44
44
  Begin a *round* of fortification and consolidating reasoning. On
45
45
  the first visit, set <i>1</i> (set round counter to one); on each