@rse/ase 0.9.4 → 0.9.5
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.
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +17 -9
- package/plugin/skills/ase-arch-discover/help.md +14 -0
- package/plugin/skills/ase-code-craft/SKILL.md +1 -1
- package/plugin/skills/ase-code-insight/SKILL.md +1 -1
- package/plugin/skills/ase-code-lint/SKILL.md +1 -1
- package/plugin/skills/ase-code-refactor/SKILL.md +1 -1
- package/plugin/skills/ase-code-resolve/SKILL.md +2 -2
- package/plugin/skills/ase-docs-proofread/SKILL.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +22 -21
- package/plugin/skills/ase-meta-brainstorm/help.md +38 -12
- package/plugin/skills/ase-meta-chat/SKILL.md +1 -1
- package/plugin/skills/ase-meta-diaboli/SKILL.md +1 -1
- package/plugin/skills/ase-meta-diff/SKILL.md +1 -1
- package/plugin/skills/ase-meta-quorum/SKILL.md +37 -5
- package/plugin/skills/ase-meta-quorum/help.md +18 -0
- package/plugin/skills/ase-meta-review/SKILL.md +1 -1
- package/plugin/skills/ase-meta-search/SKILL.md +35 -6
- package/plugin/skills/ase-meta-search/help.md +14 -2
- package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
- package/plugin/skills/ase-meta-why/SKILL.md +117 -25
- package/plugin/skills/ase-meta-why/help.md +30 -2
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.5",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.5",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -299,7 +299,7 @@ interface quality, quality attributes, and architecture governance.
|
|
|
299
299
|
specification <mermaid-spec/> for a `flowchart TB` of the
|
|
300
300
|
high-level component or layer structure and dispatch the rendering
|
|
301
301
|
to the `ase-meta-diagram` sub-agent by calling the tool
|
|
302
|
-
`Agent(name: "ase
|
|
302
|
+
`Agent(name: "ase-meta-diagram", description: "Diagram Rendering",
|
|
303
303
|
subagent_type: "ase:ase-meta-diagram", prompt: <mermaid-spec/>)`,
|
|
304
304
|
using its returned fenced code block verbatim. Show layers /
|
|
305
305
|
slices / major components and their dependency direction.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-arch-discover
|
|
3
|
-
argument-hint: "[--help|-h] <functionality>"
|
|
3
|
+
argument-hint: "[--help|-h] [--limit|-l=12] <functionality>"
|
|
4
4
|
description: >
|
|
5
5
|
Discover additional, third-party components (libraries/frameworks) for
|
|
6
6
|
the technology stack to provide needed functionality.
|
|
@@ -16,15 +16,23 @@ 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-dialog.md
|
|
20
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
19
21
|
|
|
20
22
|
<skill name="ase-arch-discover">
|
|
21
23
|
Discover Components
|
|
22
24
|
</skill>
|
|
23
25
|
|
|
26
|
+
<expand name="getopt"
|
|
27
|
+
arg1="ase-arch-discover"
|
|
28
|
+
arg2="--limit|-l=12">
|
|
29
|
+
$ARGUMENTS
|
|
30
|
+
</expand>
|
|
31
|
+
|
|
24
32
|
<objective>
|
|
25
33
|
*Discover* additional, *third-party components* (libraries/frameworks)
|
|
26
34
|
for the technology stack to *provide* the *needed functionality*
|
|
27
|
-
<request
|
|
35
|
+
<request><getopt-arguments/></request>.
|
|
28
36
|
</objective>
|
|
29
37
|
|
|
30
38
|
<flow>
|
|
@@ -93,13 +101,13 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
93
101
|
|
|
94
102
|
- Based on the essential keywords <keyword-L/> (L=1-M),
|
|
95
103
|
use the `ase-meta-search` skill in a subagent to *generally*
|
|
96
|
-
discover an initial set of a maximum of
|
|
104
|
+
discover an initial set of a maximum of <getopt-option-limit/> *NPM packages*
|
|
97
105
|
<component-K/> and at least their real name <name-K/> and
|
|
98
106
|
their unique package names <package-K/>.
|
|
99
107
|
|
|
100
|
-
- Use the shell command `npm search --json --searchlimit
|
|
108
|
+
- Use the shell command `npm search --json --searchlimit <getopt-option-limit/>
|
|
101
109
|
"<keyword-1/>" [...] "<keyword-M/>"` to *specifically*
|
|
102
|
-
discover an additional set of a maximum of
|
|
110
|
+
discover an additional set of a maximum of <getopt-option-limit/> *NPM packages*
|
|
103
111
|
<component-K/> and at least their unique package names
|
|
104
112
|
<package-K/>, based on the essential keywords <keyword-L/>
|
|
105
113
|
(L=1-M). Merge the results into the already existing result
|
|
@@ -109,14 +117,14 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
109
117
|
|
|
110
118
|
- Based on the essential keywords <keyword-L/> (L=1-M),
|
|
111
119
|
use the `ase-meta-search` skill in a subagent to *generally*
|
|
112
|
-
discover an initial set of a maximum of
|
|
120
|
+
discover an initial set of a maximum of <getopt-option-limit/> *Maven packages*
|
|
113
121
|
<component-K/> and at least their real name <name-K/> and
|
|
114
122
|
their unique Maven coordinates <package-K/> of the form
|
|
115
123
|
`groupId:artifactId`.
|
|
116
124
|
|
|
117
|
-
- Use the shell command `curl -s 'https://search.maven.org/solrsearch/select?q=<keyword-1/>+<keyword-M/>&rows
|
|
125
|
+
- Use the shell command `curl -s 'https://search.maven.org/solrsearch/select?q=<keyword-1/>+<keyword-M/>&rows=<getopt-option-limit/>&wt=json'`
|
|
118
126
|
to *specifically* discover an additional set of a maximum
|
|
119
|
-
of
|
|
127
|
+
of <getopt-option-limit/> *Maven packages* <component-K/> and at least their
|
|
120
128
|
unique Maven coordinates <package-K/> (i.e. `<g/>:<a/>` from
|
|
121
129
|
each result document's `g` and `a` fields), based on the
|
|
122
130
|
essential keywords <keyword-L/> (L=1-M). Merge the results
|
|
@@ -139,7 +147,7 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
139
147
|
|
|
140
148
|
- Sort, in descending order, the discovered components
|
|
141
149
|
<component-K/> (K=1-N) by their `rank` field and trim the result
|
|
142
|
-
list to just a maximum of
|
|
150
|
+
list to just a maximum of <getopt-option-limit/> total components.
|
|
143
151
|
|
|
144
152
|
- For each component <component-K/> (K=1-N), research and then
|
|
145
153
|
decide which *one* of *USP* (Unique Selling Point -- what makes
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
`ase-arch-discover`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
|
+
[`--limit`|`-l=12`]
|
|
10
11
|
*functionality*
|
|
11
12
|
|
|
12
13
|
## DESCRIPTION
|
|
@@ -23,6 +24,13 @@ stars, dates) via the `ase_component_info` MCP tool, and reports
|
|
|
23
24
|
the top-ranked components as a Markdown table together with a single
|
|
24
25
|
distinguishing hint (USP, Crux, or Gotcha) per component.
|
|
25
26
|
|
|
27
|
+
## OPTIONS
|
|
28
|
+
|
|
29
|
+
`--limit`|`-l=12`:
|
|
30
|
+
The *maximum* number of components searched per source and retained
|
|
31
|
+
in the final ranking (default: 12). Raise it for a broader, more
|
|
32
|
+
exhaustive survey, lower it for a quicker, narrower lookup.
|
|
33
|
+
|
|
26
34
|
## ARGUMENTS
|
|
27
35
|
|
|
28
36
|
*functionality*:
|
|
@@ -43,6 +51,12 @@ Discover components for HTTP client functionality:
|
|
|
43
51
|
❯ /ase-arch-discover HTTP client with retries
|
|
44
52
|
```
|
|
45
53
|
|
|
54
|
+
Discover a broader set of up to 20 HTTP client components:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
❯ /ase-arch-discover --limit 20 HTTP client with retries
|
|
58
|
+
```
|
|
59
|
+
|
|
46
60
|
## SEE ALSO
|
|
47
61
|
|
|
48
62
|
`ase-arch-analyze`, `ase-meta-search`, `ase-meta-evaluate`.
|
|
@@ -228,7 +228,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
228
228
|
TB`, `stateDiagram-v2`, `sequenceDiagram`, `classDiagram`,
|
|
229
229
|
or `erDiagram`, depending on intent) and dispatching the
|
|
230
230
|
rendering to the `ase-meta-diagram` sub-agent by calling
|
|
231
|
-
the tool `Agent(name: "ase
|
|
231
|
+
the tool `Agent(name: "ase-meta-diagram", description:
|
|
232
232
|
"Diagram Rendering", subagent_type: "ase:ase-meta-diagram",
|
|
233
233
|
prompt: <mermaid-spec/>)`, reproducing its returned fenced
|
|
234
234
|
code block verbatim. For *current vs. proposed* comparisons,
|
|
@@ -89,7 +89,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
|
|
|
89
89
|
<mermaid-spec/> for a `flowchart TB` diagram with all modules as
|
|
90
90
|
boxes and the imports between modules as the directed edges. Then
|
|
91
91
|
dispatch the rendering to the `ase-meta-diagram` sub-agent by
|
|
92
|
-
calling the tool `Agent(name: "ase
|
|
92
|
+
calling the tool `Agent(name: "ase-meta-diagram", description:
|
|
93
93
|
"Diagram Rendering", subagent_type: "ase:ase-meta-diagram", prompt:
|
|
94
94
|
<mermaid-spec/>)` and reproduce its returned fenced code block
|
|
95
95
|
verbatim in the response text. Do not display any further
|
|
@@ -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
|
|
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
|
|
@@ -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
|
|
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
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-meta-brainstorm
|
|
3
|
-
argument-hint: "[--help|-h] [--
|
|
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="--
|
|
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>
|
|
32
|
-
*diverging* into a broad space of candidate ideas, then
|
|
33
|
-
through clustering and scoring, and finally distilling a
|
|
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
|
|
94
|
-
- the purpose, constraints,
|
|
95
|
-
that must be pinned down for
|
|
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
|
|
99
|
-
as too much upfront intent
|
|
100
|
-
of ideas later. So, you *MUST*
|
|
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
|
|
104
|
-
and a corresponding question <question-M/> whose answer
|
|
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-
|
|
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
|
|
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
|
-
|
|
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 <
|
|
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
|
-
[`--
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
27
|
-
Finally it distills a *shortlist* of the top
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
`--
|
|
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 --
|
|
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
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
150
|
+
<getopt-arguments/>
|
|
120
151
|
|
|
121
152
|
● **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
|
|
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`.
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-meta-why
|
|
3
|
-
argument-hint: "[--help|-h] [--depth|-d <N>] <fact>"
|
|
3
|
+
argument-hint: "[--help|-h] [--depth|-d <N>] [--width|-w <M>] <fact>"
|
|
4
4
|
description: >
|
|
5
5
|
Five-Whys Root-Cause Analysis.
|
|
6
6
|
user-invocable: true
|
|
@@ -18,7 +18,7 @@ Five-Whys Root-Cause Analysis
|
|
|
18
18
|
|
|
19
19
|
<expand name="getopt"
|
|
20
20
|
arg1="ase-meta-why"
|
|
21
|
-
arg2="--depth|-d=5">
|
|
21
|
+
arg2="--depth|-d=5 --width|-w=1">
|
|
22
22
|
$ARGUMENTS
|
|
23
23
|
</expand>
|
|
24
24
|
|
|
@@ -34,48 +34,140 @@ addressing surface-level symptoms.
|
|
|
34
34
|
</objective>
|
|
35
35
|
|
|
36
36
|
<flow>
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
1. <step id="STEP 1: Restate Problem">
|
|
39
|
+
|
|
38
40
|
State the problem statement.
|
|
39
41
|
|
|
40
42
|
<template>
|
|
41
43
|
<ase-tpl-bullet-signal/> **PROBLEM**: <problem/>
|
|
42
44
|
</template>
|
|
45
|
+
|
|
43
46
|
</step>
|
|
44
47
|
|
|
45
48
|
2. <step id="STEP 2: Root-Cause Analysis">
|
|
49
|
+
|
|
46
50
|
Find the root-cause of <problem/> by following the following iteration cycle.
|
|
47
51
|
Start with a <question/> set equal to the <problem/>.
|
|
48
52
|
|
|
49
|
-
Determine the *maximum chain length* from <getopt-option-depth/>:
|
|
50
|
-
<getopt-option-depth
|
|
51
|
-
use the default *5* instead.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
53
|
+
Determine the *maximum chain length* from <getopt-option-depth/>:
|
|
54
|
+
set <depth/> to <getopt-option-depth/>; if <getopt-option-depth/>
|
|
55
|
+
is *non-numeric* or *less than or equal to 0*, use the default *5* instead.
|
|
56
|
+
|
|
57
|
+
Determine the *maximum chain width* from <getopt-option-width/>:
|
|
58
|
+
set <width/> to <getopt-option-width/>; if <getopt-option-width/>
|
|
59
|
+
is *non-numeric* or *less than or equal to 0*, use the default *1* instead.
|
|
60
|
+
|
|
61
|
+
- <if condition="<width/> is less than or equal to 1">
|
|
62
|
+
|
|
63
|
+
Walk a *single* causality chain (the classic Five-Whys):
|
|
64
|
+
|
|
65
|
+
Start with <n>1</n> (set iteration counter to one).
|
|
66
|
+
|
|
67
|
+
<while condition="<n/> is less than or equal to <depth/>">
|
|
68
|
+
|
|
69
|
+
Ask <question/> and document the answer in <answer/> with the following template:
|
|
70
|
+
Don't stop at symptoms, keep digging for systemic issues.
|
|
71
|
+
Consider technical, domain-specific, process-related, or organizational causes.
|
|
72
|
+
|
|
73
|
+
<template>
|
|
74
|
+
<ase-tpl-bullet-secondary/> **WHY <n/>**: <answer/>
|
|
75
|
+
</template>
|
|
76
|
+
|
|
77
|
+
Then, for the next iteration set <question/> now to be the last <answer/>.
|
|
78
|
+
The magic is NOT in exactly <depth/> "Why" -- you can <break/>
|
|
79
|
+
the iteration when you already reached the root-cause.
|
|
80
|
+
Finally, set <n/> to <n/> + 1 (increment iteration counter).
|
|
81
|
+
|
|
82
|
+
</while>
|
|
83
|
+
|
|
84
|
+
</if>
|
|
85
|
+
|
|
86
|
+
- <if condition="<width/> is greater than 1">
|
|
87
|
+
|
|
88
|
+
Walk a *widened* causality chain: at each "why" level, surface up to
|
|
89
|
+
<width/> *candidate* sub-causes, then commit to the single most
|
|
90
|
+
significant one and descend into it (the chain stays single-rooted --
|
|
91
|
+
the extra candidates are *not* each drilled to their own root-cause).
|
|
92
|
+
Their purpose is to guard against *premature commitment* to the wrong
|
|
93
|
+
sub-cause: by enumerating the plausible alternatives at each level, the
|
|
94
|
+
chosen descent is a *justified* selection rather than the first
|
|
95
|
+
plausible answer, and the unchosen candidates remain on record as
|
|
96
|
+
*fallbacks* to backtrack into (see STEP 3) should the chosen path fail
|
|
97
|
+
validation.
|
|
98
|
+
|
|
99
|
+
Remember the *unchosen* candidates of every level (keep them in
|
|
100
|
+
<fallbacks/>, tagged by their level <n/>), so STEP 3 can backtrack
|
|
101
|
+
into them.
|
|
102
|
+
|
|
103
|
+
Start with <n>1</n> (set iteration counter to one).
|
|
104
|
+
|
|
105
|
+
<while condition="<n/> is less than or equal to <depth/>">
|
|
106
|
+
|
|
107
|
+
Ask <question/> and surface up to <width/> *distinct*,
|
|
108
|
+
*non-overlapping* candidate sub-causes, each documented in <answer-k/>.
|
|
109
|
+
Don't stop at symptoms, keep digging for systemic issues.
|
|
110
|
+
Explore *different* candidates -- technical, domain-specific,
|
|
111
|
+
process-related, or organizational causes -- and avoid restating
|
|
112
|
+
the same cause in different words.
|
|
113
|
+
|
|
114
|
+
Start with <k>1</k> (set candidate counter to one).
|
|
115
|
+
<while condition="<k/> is less than or equal to <width/>">
|
|
116
|
+
<template>
|
|
117
|
+
<ase-tpl-bullet-secondary/> **WHY <n/>.<k/>**: <answer-k/>
|
|
118
|
+
</template>
|
|
119
|
+
Set <k/> to <k/> + 1 (increment candidate counter).
|
|
120
|
+
</while>
|
|
121
|
+
|
|
122
|
+
Then choose, among the <answer-k/>, the *most causally-significant*
|
|
123
|
+
candidate -- the one most likely to lead to the true root-cause --
|
|
124
|
+
and *justify* the choice in one line (state explicitly *why* it
|
|
125
|
+
beats the other candidates, e.g. it alone also explains the timing,
|
|
126
|
+
scope, or magnitude of the level's fact). A bare "most significant"
|
|
127
|
+
is *not* sufficient; if no candidate clearly dominates, say so.
|
|
128
|
+
|
|
129
|
+
<template>
|
|
130
|
+
<ase-tpl-bullet-secondary/> **WHY <n/> → chosen <n/>.<chosen-k/>**: <justification/>
|
|
131
|
+
</template>
|
|
132
|
+
|
|
133
|
+
Record the remaining candidates as <fallbacks/> for level <n/>.
|
|
134
|
+
Then, for the next iteration, set <question/> to the chosen candidate.
|
|
135
|
+
You can <break/> the iteration when the chosen candidate already
|
|
136
|
+
reached its root-cause.
|
|
137
|
+
Finally, set <n/> to <n/> + 1 (increment iteration counter).
|
|
138
|
+
|
|
139
|
+
</while>
|
|
140
|
+
|
|
141
|
+
</if>
|
|
142
|
+
|
|
69
143
|
</step>
|
|
70
144
|
|
|
71
145
|
3. <step id="STEP 3: Report Solution">
|
|
72
|
-
|
|
73
|
-
|
|
146
|
+
|
|
147
|
+
Validate the root-cause by working backwards along the chosen causality
|
|
148
|
+
chain: check, level by level, that each chosen sub-cause genuinely *causes*
|
|
149
|
+
the fact above it (and that fixing the final root-cause would dissolve the
|
|
150
|
+
whole chain up to the original <problem/>).
|
|
151
|
+
|
|
152
|
+
When <width/> is *greater than 1* and this backward validation *fails* at
|
|
153
|
+
some level -- i.e. the chosen sub-cause does *not* adequately explain the
|
|
154
|
+
fact above it -- *backtrack*: discard the chosen sub-cause from that level
|
|
155
|
+
downward, pick the next-best candidate from that level's <fallbacks/>, set
|
|
156
|
+
<question/> to it, and re-run the STEP 2 widened descent from there. Repeat
|
|
157
|
+
until a chain survives backward validation or that level's <fallbacks/> are
|
|
158
|
+
exhausted (then report the strongest chain found and note that no candidate
|
|
159
|
+
fully validated). This is the payoff of <width/> *greater than 1*: the
|
|
160
|
+
enumerated alternatives let the analysis *recover* from a wrong turn instead
|
|
161
|
+
of committing to a mis-rooted chain.
|
|
162
|
+
|
|
163
|
+
Propose a solution that addresses and solves the validated root-cause.
|
|
74
164
|
For the proposed solution, optionally directly propose corresponding source code changes.
|
|
75
165
|
|
|
76
166
|
<template>
|
|
77
167
|
<ase-tpl-bullet-signal/> **SOLUTION**: <solution/>
|
|
78
168
|
</template>
|
|
169
|
+
|
|
79
170
|
</step>
|
|
171
|
+
|
|
80
172
|
</flow>
|
|
81
173
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
`ase-meta-why`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
10
|
[`--depth`|`-d` *N*]
|
|
11
|
+
[`--width`|`-w` *M*]
|
|
11
12
|
*fact*
|
|
12
13
|
|
|
13
14
|
## DESCRIPTION
|
|
@@ -17,8 +18,16 @@ analysis* technique to the supplied *fact*. The skill iteratively
|
|
|
17
18
|
asks "why" - up to *N* times (see `--depth`, default five) - to drill
|
|
18
19
|
down from surface symptoms to the underlying root cause, considering
|
|
19
20
|
technical, domain-specific, process-related, and organizational
|
|
20
|
-
causes.
|
|
21
|
-
|
|
21
|
+
causes. By default it walks a *single* causality chain, but with
|
|
22
|
+
`--width` *M* (> 1) it walks a *widened* chain: at each level it surfaces
|
|
23
|
+
up to *M* candidate sub-causes, descends into the most significant one
|
|
24
|
+
with an explicit justification for the choice, and keeps the unchosen
|
|
25
|
+
candidates as *fallbacks*. If backward validation later shows the chosen
|
|
26
|
+
path was mis-rooted, it *backtracks* into a fallback and re-descends -
|
|
27
|
+
guarding against the classic Five-Whys failure of committing early to the
|
|
28
|
+
wrong sub-cause. After identifying (and validating) the root cause it
|
|
29
|
+
proposes a *SOLUTION* that addresses it, optionally including concrete
|
|
30
|
+
source code changes.
|
|
22
31
|
|
|
23
32
|
## ARGUMENTS
|
|
24
33
|
|
|
@@ -28,6 +37,18 @@ addresses it, optionally including concrete source code changes.
|
|
|
28
37
|
early once the root cause is reached. Defaults to *5*. A non-numeric
|
|
29
38
|
or non-positive value falls back to the default.
|
|
30
39
|
|
|
40
|
+
`--width`|`-w` *M*:
|
|
41
|
+
The *maximum* number of *candidate sub-causes* to surface per "why"
|
|
42
|
+
level. With the default *1*, the skill walks a single causality chain
|
|
43
|
+
(classic Five-Whys); with *M* > 1, each level surfaces up to *M*
|
|
44
|
+
candidate sub-causes, descends into the single most significant one
|
|
45
|
+
(justifying the choice), and retains the rest as *fallbacks*. During
|
|
46
|
+
backward validation a mis-rooted choice is *backtracked* into a fallback
|
|
47
|
+
and re-descended, so the widening actively improves which root-cause is
|
|
48
|
+
reached rather than merely listing alternatives. The result is still a
|
|
49
|
+
single, but better-justified, root-cause. A non-numeric or non-positive
|
|
50
|
+
value falls back to the default.
|
|
51
|
+
|
|
31
52
|
*fact*:
|
|
32
53
|
The observed *fact* (symptom, problem, or surprising outcome)
|
|
33
54
|
whose root cause should be investigated. The skill implicitly
|
|
@@ -47,6 +68,13 @@ Drill down deeper with a tunable chain length of seven:
|
|
|
47
68
|
❯ /ase-meta-why -d 7 the production latency spiked after the last deploy
|
|
48
69
|
```
|
|
49
70
|
|
|
71
|
+
Weigh several candidate sub-causes per level (with backtracking) to avoid
|
|
72
|
+
committing early to the wrong root-cause:
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
❯ /ase-meta-why -w 3 the release was delayed by two weeks
|
|
76
|
+
```
|
|
77
|
+
|
|
50
78
|
## SEE ALSO
|
|
51
79
|
|
|
52
80
|
`ase-code-analyze`, `ase-code-resolve`, `ase-arch-analyze`.
|