@rse/ase 0.9.2 → 0.9.4
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/dst/ase-hello.js +24 -0
- package/dst/ase-statusline.js +15 -5
- package/package.json +2 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-meta-review.md +188 -0
- package/plugin/etc/eslint.mjs +25 -0
- package/plugin/etc/markdownlint.yaml +13 -11
- package/plugin/etc/stx.conf +2 -1
- package/plugin/meta/ase-control.md +7 -2
- package/plugin/meta/ase-dialog.md +2 -0
- package/plugin/meta/ase-format-arch.md +31 -31
- package/plugin/meta/ase-format-spec.md +3 -3
- package/plugin/meta/ase-getopt.md +1 -0
- package/plugin/meta/ase-persona.md +1 -1
- package/plugin/meta/ase-skill.md +6 -6
- package/plugin/package.json +5 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +33 -33
- package/plugin/skills/ase-code-analyze/SKILL.md +162 -18
- package/plugin/skills/ase-code-analyze/help.md +47 -7
- package/plugin/skills/ase-code-lint/SKILL.md +11 -3
- package/plugin/skills/ase-code-lint/help.md +14 -1
- package/plugin/skills/ase-docs-distill/SKILL.md +158 -0
- package/plugin/skills/ase-docs-distill/help.md +76 -0
- package/plugin/skills/ase-docs-proofread/SKILL.md +1 -1
- package/plugin/skills/ase-docs-proofread/help.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +29 -15
- package/plugin/skills/ase-meta-brainstorm/help.md +21 -7
- package/plugin/skills/ase-meta-diaboli/SKILL.md +36 -13
- package/plugin/skills/ase-meta-diaboli/help.md +22 -4
- package/plugin/skills/ase-meta-diff/SKILL.md +110 -64
- package/plugin/skills/ase-meta-diff/help.md +30 -6
- package/plugin/skills/ase-meta-review/SKILL.md +184 -0
- package/plugin/skills/ase-meta-review/help.md +88 -0
- package/plugin/skills/ase-meta-steelman/SKILL.md +210 -0
- package/plugin/skills/ase-meta-steelman/help.md +92 -0
- package/plugin/skills/ase-meta-why/SKILL.md +20 -7
- package/plugin/skills/ase-meta-why/help.md +18 -5
- package/plugin/skills/ase-task-condense/SKILL.md +3 -3
- package/plugin/skills/ase-task-grill/SKILL.md +1 -1
- package/plugin/skills/ase-task-implement/help.md +1 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-docs-distill
|
|
3
|
+
argument-hint: "[--help|-h] [--top|-t <N>] <document-reference>"
|
|
4
|
+
description: >
|
|
5
|
+
Distill a provided document into a flat, importance-ranked list
|
|
6
|
+
of its key points, each with a salience rank, a rationale, and a
|
|
7
|
+
verbatim line-cited evidence snippet. Use when the user wants to
|
|
8
|
+
"distill", "summarize the key points", or "extract the essence" of a
|
|
9
|
+
document or pasted text.
|
|
10
|
+
user-invocable: true
|
|
11
|
+
disable-model-invocation: false
|
|
12
|
+
effort: high
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
|
+
|
|
19
|
+
<skill name="ase-docs-distill">
|
|
20
|
+
Distill Key Points
|
|
21
|
+
</skill>
|
|
22
|
+
|
|
23
|
+
<expand name="getopt"
|
|
24
|
+
arg1="ase-docs-distill"
|
|
25
|
+
arg2="--top|-t=5">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
29
|
+
<objective>
|
|
30
|
+
*Distill* the content `<getopt-arguments/>` into a *flat*,
|
|
31
|
+
*importance-ranked* list of its *key points* - each point an
|
|
32
|
+
*atomic* claim carrying a *0-10 salience rank*, a *one-line
|
|
33
|
+
rationale*, and a *verbatim, line-cited evidence* snippet - keeping
|
|
34
|
+
at most `<getopt-option-top/>` points.
|
|
35
|
+
</objective>
|
|
36
|
+
|
|
37
|
+
Procedure
|
|
38
|
+
---------
|
|
39
|
+
|
|
40
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
41
|
+
You *MUST* not skip any numbered item during processing!
|
|
42
|
+
|
|
43
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
44
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
45
|
+
|
|
46
|
+
<flow>
|
|
47
|
+
|
|
48
|
+
1. <step id="STEP 1: Resolve Input">
|
|
49
|
+
|
|
50
|
+
Resolve the document source from <getopt-arguments/> using
|
|
51
|
+
*probe-as-file-first* semantics:
|
|
52
|
+
|
|
53
|
+
1. <if condition="<getopt-arguments/> is empty">
|
|
54
|
+
|
|
55
|
+
Only output the following <template/> and then *STOP* immediately:
|
|
56
|
+
|
|
57
|
+
<template>
|
|
58
|
+
⧉ **ASE**: ✪ skill: **ase-docs-distill**, ▶ status: **no document to distill**
|
|
59
|
+
</template>
|
|
60
|
+
|
|
61
|
+
</if>
|
|
62
|
+
|
|
63
|
+
2. Treat the *entire* <getopt-arguments/> as a *file path*. If it
|
|
64
|
+
resolves to a *readable file*, read that file and capture its
|
|
65
|
+
content together with its *line numbers* into <source/>, and set
|
|
66
|
+
<origin/> to the file path.
|
|
67
|
+
|
|
68
|
+
3. <if condition="<getopt-arguments/> does NOT resolve to a readable file">
|
|
69
|
+
|
|
70
|
+
Treat <getopt-arguments/> *verbatim* as *pasted text*, capture it
|
|
71
|
+
into <source/> numbering its lines from *1*, and set <origin/>
|
|
72
|
+
to empty (so locations are cited as `:Ls-Le`).
|
|
73
|
+
|
|
74
|
+
</if>
|
|
75
|
+
|
|
76
|
+
4. <if condition="<source/> is empty">
|
|
77
|
+
|
|
78
|
+
Only output the following <template/> and then *STOP* immediately:
|
|
79
|
+
|
|
80
|
+
<template>
|
|
81
|
+
⧉ **ASE**: ✪ skill: **ase-docs-distill**, ▶ status: **no document to distill**
|
|
82
|
+
</template>
|
|
83
|
+
|
|
84
|
+
</if>
|
|
85
|
+
|
|
86
|
+
You *MUST* *NOT* output anything in this STEP 1.
|
|
87
|
+
|
|
88
|
+
</step>
|
|
89
|
+
|
|
90
|
+
2. <step id="STEP 2: Distill Key Points">
|
|
91
|
+
|
|
92
|
+
Read <source/> and distill it into its *key points*.
|
|
93
|
+
|
|
94
|
+
1. Extract the document's *key points*, where each point is *one
|
|
95
|
+
atomic, self-contained claim, decision, or fact* - *not* a
|
|
96
|
+
section-level summary that blends several claims.
|
|
97
|
+
|
|
98
|
+
2. For each point, determine:
|
|
99
|
+
|
|
100
|
+
- A <rank/> on a *0-10* salience scale reflecting its
|
|
101
|
+
*importance-to-the-reader* (impact, centrality, consequence)
|
|
102
|
+
- *not* its position in the document.
|
|
103
|
+
|
|
104
|
+
- A one-line <rationale/> that justifies *why* the point earns
|
|
105
|
+
that <rank/>.
|
|
106
|
+
|
|
107
|
+
- A <location/> citing the exact source line range as
|
|
108
|
+
`<origin/>:Ls-Le` (for a file) or `:Ls-Le` (for pasted text),
|
|
109
|
+
where `Ls` is the start line and `Le` is the end line.
|
|
110
|
+
|
|
111
|
+
- A *verbatim* <evidence/> snippet, copied exactly from
|
|
112
|
+
<source/> (but with all newlines replaced with spaces
|
|
113
|
+
and multiple spaces collapsed into a single space), that
|
|
114
|
+
*proves* the point. The cited snippet *MUST* prove the
|
|
115
|
+
point verbatim. If it does not, *re-investigate and re-cite
|
|
116
|
+
correctly*.
|
|
117
|
+
|
|
118
|
+
3. *Sort* the points by <rank/> from *highest to lowest*. Within the
|
|
119
|
+
same rank, keep the order of first appearance in <source/>.
|
|
120
|
+
|
|
121
|
+
4. Apply the *top-bound* <getopt-option-top/> as an *upper bound
|
|
122
|
+
only*: keep at most `min(<getopt-option-top/>, number of salient
|
|
123
|
+
points)` points and *never pad* the list with filler to reach
|
|
124
|
+
the bound. If <getopt-option-top/> is *non-numeric* or *less
|
|
125
|
+
than or equal to 0*, use the default *10* instead.
|
|
126
|
+
|
|
127
|
+
You *MUST* *NOT* output anything in this STEP 2.
|
|
128
|
+
|
|
129
|
+
</step>
|
|
130
|
+
|
|
131
|
+
3. <step id="STEP 3: Report Ranked Points">
|
|
132
|
+
|
|
133
|
+
For each distilled point, emit the following <template/>,
|
|
134
|
+
where <rank/> is its salience rank, <point/> is the atomic claim,
|
|
135
|
+
<location/> is its line-range citation, <evidence/> is the
|
|
136
|
+
verbatim proving snippet, and <rationale/> is the one-line
|
|
137
|
+
salience justification:
|
|
138
|
+
|
|
139
|
+
<template>
|
|
140
|
+
|
|
141
|
+
<ase-tpl-bullet-normal/> **KEY POINT**: **<point/>**
|
|
142
|
+
|
|
143
|
+
◯ LOCATION: <location/>
|
|
144
|
+
◯ EVIDENCE: "`<evidence/>`"
|
|
145
|
+
◯ RATIONALE: <rationale/>
|
|
146
|
+
◯ RANK: <rank/>/10
|
|
147
|
+
|
|
148
|
+
</template>
|
|
149
|
+
|
|
150
|
+
In the <location/>, markup the line-range reference as
|
|
151
|
+
code (with backticks) and prepend it with `▢ `.
|
|
152
|
+
|
|
153
|
+
Keep the overall report *concise* and *brief*. Do *not* output any
|
|
154
|
+
further explanation.
|
|
155
|
+
|
|
156
|
+
</step>
|
|
157
|
+
|
|
158
|
+
</flow>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-docs-distill` - Distill Document Key Points
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-docs-distill`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--top`|`-t` *N*]
|
|
11
|
+
*document-reference*
|
|
12
|
+
|
|
13
|
+
## DESCRIPTION
|
|
14
|
+
|
|
15
|
+
The `ase-docs-distill` skill reads a *provided document* and distills it
|
|
16
|
+
into a *flat*, *importance-ranked* list of its *key points*. The
|
|
17
|
+
*docs-reference* is resolved *probe-as-file-first*: if the argument names
|
|
18
|
+
a *readable file* it is read from disk, otherwise the argument is taken
|
|
19
|
+
*verbatim* as *pasted text*. The document is read *silently* - only the
|
|
20
|
+
final ranked list is shown - so even a large document does not flood the
|
|
21
|
+
transcript.
|
|
22
|
+
|
|
23
|
+
Each emitted point is *one atomic claim, decision, or fact* (not a
|
|
24
|
+
section-level summary) and carries four things: a *0-10 salience rank*
|
|
25
|
+
reflecting its *importance to the reader* (impact and centrality, *not*
|
|
26
|
+
its position in the document), a *one-line rationale* justifying *why* it
|
|
27
|
+
earns that rank, an exact *line-range citation* (`file:Ls-Le`, or `:Ls-Le`
|
|
28
|
+
for pasted text), and a *verbatim evidence* snippet copied from the source
|
|
29
|
+
that *proves* the point. The points are emitted as a *bulleted list* -
|
|
30
|
+
one block per point, each showing its *LOCATION*, *EVIDENCE*,
|
|
31
|
+
*RATIONALE*, and *RANK* - sorted from highest to lowest salience, so the
|
|
32
|
+
ranking is *auditable* rather than an opaque ordering.
|
|
33
|
+
|
|
34
|
+
The `--top`/`-t` *N* option is a *length dial* that bounds the list to at
|
|
35
|
+
most *N* points (default *10*). It is an *upper bound only*: when the
|
|
36
|
+
document has fewer salient points than *N*, the skill emits only the
|
|
37
|
+
points it found and *never pads* the list with filler; a `0`, negative, or
|
|
38
|
+
non-numeric value falls back to the default *10*.
|
|
39
|
+
|
|
40
|
+
## ARGUMENTS
|
|
41
|
+
|
|
42
|
+
`--top`, `-t` *N*:
|
|
43
|
+
Bound the ranked list to at most *N* key points (default *10*). The
|
|
44
|
+
bound is a *cap*, never a *quota* - fewer points are emitted when the
|
|
45
|
+
document does not contain *N* salient ones, and an invalid or
|
|
46
|
+
non-positive *N* reverts to the default.
|
|
47
|
+
|
|
48
|
+
*docs-reference*:
|
|
49
|
+
The document to distill - either a *path* to a readable file or the
|
|
50
|
+
*text* itself pasted inline. If it resolves to a readable file the
|
|
51
|
+
file is read; otherwise it is treated verbatim as pasted text.
|
|
52
|
+
|
|
53
|
+
## EXAMPLES
|
|
54
|
+
|
|
55
|
+
Distill the key points of a document file:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
❯ /ase-docs-distill doc/architecture.md
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Distill only the top 5 key points:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
❯ /ase-docs-distill --top 5 doc/architecture.md
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Distill a pasted block of text:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
❯ /ase-docs-distill The system shall accept payments in EUR and USD only.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## SEE ALSO
|
|
74
|
+
|
|
75
|
+
`ase-meta-search`, `ase-docs-proofread`, `ase-meta-why`.
|
|
76
|
+
|
|
@@ -175,7 +175,7 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
175
175
|
Generate a *new* proposal for the *same* <item/>,
|
|
176
176
|
incorporating the user's free-text hint from <result/>
|
|
177
177
|
after the "OTHER:" prefix, and loop back to substep 2 of
|
|
178
|
-
this iteration. There is *no* cap on refinement rounds
|
|
178
|
+
this iteration. There is *no* cap on refinement rounds -
|
|
179
179
|
keep refining until the user picks `ACCEPT` or `REJECT`.
|
|
180
180
|
|
|
181
181
|
</if>
|
|
@@ -20,7 +20,7 @@ the user-visible transcript.
|
|
|
20
20
|
|
|
21
21
|
For each detected problem, the skill renders a unified-diff
|
|
22
22
|
*CORRECTION* preview and either asks the user to `ACCEPT` or `REJECT`
|
|
23
|
-
the proposed correction interactively or
|
|
23
|
+
the proposed correction interactively or - with `--auto` - applies
|
|
24
24
|
all corrections automatically.
|
|
25
25
|
|
|
26
26
|
## OPTIONS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-meta-brainstorm
|
|
3
|
-
argument-hint: "[--help|-h] <topic>"
|
|
3
|
+
argument-hint: "[--help|-h] [--count|-c=12] <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
|
|
@@ -15,13 +15,20 @@ effort: high
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
17
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
18
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
19
|
|
|
19
20
|
<skill name="ase-meta-brainstorm">
|
|
20
21
|
Collaboratively Brainstorm a Topic
|
|
21
22
|
</skill>
|
|
22
23
|
|
|
24
|
+
<expand name="getopt"
|
|
25
|
+
arg1="ase-meta-brainstorm"
|
|
26
|
+
arg2="--count|-c=12">
|
|
27
|
+
$ARGUMENTS
|
|
28
|
+
</expand>
|
|
29
|
+
|
|
23
30
|
<objective>
|
|
24
|
-
Collaboratively brainstorm the topic <topic
|
|
31
|
+
Collaboratively brainstorm the topic <topic><getopt-arguments/></topic> by first
|
|
25
32
|
*diverging* into a broad space of candidate ideas, then *converging*
|
|
26
33
|
through clustering and scoring, and finally distilling a *shortlist*
|
|
27
34
|
with a single recommended direction.
|
|
@@ -33,8 +40,8 @@ Guiding Tenets
|
|
|
33
40
|
Honor the following tenets throughout the brainstorming:
|
|
34
41
|
|
|
35
42
|
- **No Assumption of Simplicity**:
|
|
36
|
-
Every topic goes through the full process
|
|
37
|
-
change as much as a new subsystem
|
|
43
|
+
Every topic goes through the full process - a one-line config
|
|
44
|
+
change as much as a new subsystem - because the simplest-looking
|
|
38
45
|
topics often hide the most harmful assumptions.
|
|
39
46
|
|
|
40
47
|
- **Explore Intent First**:
|
|
@@ -83,9 +90,15 @@ Honor the following tenets throughout the brainstorming:
|
|
|
83
90
|
|
|
84
91
|
Before generating any ideas, *explore the project context* (review
|
|
85
92
|
relevant existing files, documentation, and recent changes) and
|
|
86
|
-
determine the <m/> *essential unknowns* about the topic
|
|
87
|
-
purpose, constraints, scope boundaries, and success criteria
|
|
88
|
-
must be pinned down for the brainstorming to be reasonably
|
|
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.
|
|
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!
|
|
89
102
|
|
|
90
103
|
For each essential unknown, derive a short 1-3 word facet <facet-M/>
|
|
91
104
|
and a corresponding question <question-M/> whose answer materially
|
|
@@ -139,15 +152,16 @@ Honor the following tenets throughout the brainstorming:
|
|
|
139
152
|
<topic/> within the constraints established by the answers
|
|
140
153
|
<answer-M/>.
|
|
141
154
|
|
|
142
|
-
Deliberately pursue *diverse angles*
|
|
155
|
+
Deliberately pursue *diverse angles* - e.g. the minimal/MVP-first
|
|
143
156
|
angle, the robustness/risk-first angle, the user-experience-first
|
|
144
157
|
angle, the reuse-existing-machinery angle, the coolness angle, and
|
|
145
|
-
the unconventional/wildcard angle
|
|
158
|
+
the unconventional/wildcard angle - because variety in origin yields
|
|
146
159
|
variety in outcome.
|
|
147
160
|
|
|
148
161
|
Do still *not* judge, rank, or prune ideas in this step. Generate
|
|
149
|
-
ideas until you either reach at least
|
|
150
|
-
have clearly exhausted the meaningfully distinct
|
|
162
|
+
ideas until you either reach at least <getopt-option-count/> distinct
|
|
163
|
+
candidate ideas or have clearly exhausted the meaningfully distinct
|
|
164
|
+
space.
|
|
151
165
|
|
|
152
166
|
Store each candidate idea in <idea-N/> with the format
|
|
153
167
|
`**<idea-name-N/>**: <idea-statement-N/>` (where <idea-name-N/> is a
|
|
@@ -177,7 +191,7 @@ Honor the following tenets throughout the brainstorming:
|
|
|
177
191
|
statement of not more than 40 words):
|
|
178
192
|
|
|
179
193
|
<template>
|
|
180
|
-
<ase-tpl-bullet-secondary/> **IDEA CLUSTER <C/>/<c/>**: <cluster-C/>
|
|
194
|
+
<ase-tpl-bullet-secondary/> **IDEA CLUSTER <C/>/<c/>**: <cluster-C/> - <cluster-summary-C/>,
|
|
181
195
|
**IDEAS**: <N/>, <M/>[, ...]
|
|
182
196
|
</template>
|
|
183
197
|
|
|
@@ -191,7 +205,7 @@ Honor the following tenets throughout the brainstorming:
|
|
|
191
205
|
3-4 options, sorted by rank from highest to lowest.
|
|
192
206
|
|
|
193
207
|
For this, draw the shortlist from *distinct* clusters <cluster-C/>
|
|
194
|
-
wherever possible
|
|
208
|
+
wherever possible - prefer a diverse shortlist spanning different
|
|
195
209
|
clusters over several high-ranked variations of the same cluster,
|
|
196
210
|
unless one cluster clearly dominates on rank.
|
|
197
211
|
|
|
@@ -205,9 +219,9 @@ Honor the following tenets throughout the brainstorming:
|
|
|
205
219
|
<ase-tpl-bullet-normal/> **DISTILLED IDEA <N/>**: <option-N/>
|
|
206
220
|
</template>
|
|
207
221
|
|
|
208
|
-
4. Finally, derive a single *recommended idea*
|
|
222
|
+
4. Finally, derive a single *recommended idea* - the highest-ranked
|
|
209
223
|
option, or a principled synthesis of the option shortlist that preserves
|
|
210
|
-
what is strongest in each
|
|
224
|
+
what is strongest in each - store its one-sentence rationale (not
|
|
211
225
|
more than 40 words) in <recommendation/>, and output the following
|
|
212
226
|
<template/>:
|
|
213
227
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
`ase-meta-brainstorm`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
|
+
[`--count`|`-c=12`]
|
|
10
11
|
*topic*
|
|
11
12
|
|
|
12
13
|
## DESCRIPTION
|
|
@@ -14,17 +15,17 @@
|
|
|
14
15
|
The `ase-meta-brainstorm` skill guides a collaborative ideation
|
|
15
16
|
session on a *topic* *before* any implementation begins. It first
|
|
16
17
|
*clarifies intent* by exploring the project context and interviewing
|
|
17
|
-
the user
|
|
18
|
+
the user - one grounded, multiple-choice question at a time - about
|
|
18
19
|
purpose, constraints, scope, and success criteria. It then *diverges*
|
|
19
|
-
into a broad space of candidate ideas
|
|
20
|
-
angles (MVP-first, risk-first,
|
|
21
|
-
without judging them.
|
|
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
23
|
|
|
23
24
|
Next it *converges* by clustering the ideas into coherent themes,
|
|
24
25
|
pruning speculative or out-of-scope ones via *YAGNI*, and scoring the
|
|
25
26
|
survivors on a 0-10 fit scale (keeping only those ranked 7 or higher).
|
|
26
|
-
Finally it distills a *shortlist* of the top 3-4 directions
|
|
27
|
-
distinct clusters wherever possible
|
|
27
|
+
Finally it distills a *shortlist* of the top 3-4 directions - drawn from
|
|
28
|
+
distinct clusters wherever possible - and derives a single
|
|
28
29
|
*RECOMMENDATION*, being either the highest-ranked option or a principled
|
|
29
30
|
synthesis of the shortlist.
|
|
30
31
|
|
|
@@ -32,10 +33,17 @@ On completion the skill offers a *next step*: stop, or hand the
|
|
|
32
33
|
recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
|
|
33
34
|
`ase-task-preflight` skills.
|
|
34
35
|
|
|
36
|
+
## OPTIONS
|
|
37
|
+
|
|
38
|
+
`--count`|`-c=12`:
|
|
39
|
+
The *minimum* number of candidate ideas to generate in the *diverge*
|
|
40
|
+
phase before converging (default: 12). Raise it for a broader idea
|
|
41
|
+
space, lower it for a quicker, narrower session.
|
|
42
|
+
|
|
35
43
|
## ARGUMENTS
|
|
36
44
|
|
|
37
45
|
*topic*:
|
|
38
|
-
The subject to brainstorm
|
|
46
|
+
The subject to brainstorm - a feature, component, behavior, or
|
|
39
47
|
design question to explore *what* to build before *how*.
|
|
40
48
|
|
|
41
49
|
## EXAMPLES
|
|
@@ -46,6 +54,12 @@ Brainstorm an approach for a new feature:
|
|
|
46
54
|
❯ /ase-meta-brainstorm an offline-first sync layer for the mobile app
|
|
47
55
|
```
|
|
48
56
|
|
|
57
|
+
Brainstorm with a broader idea space of at least 20 candidates:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
❯ /ase-meta-brainstorm --count 20 an offline-first sync layer
|
|
61
|
+
```
|
|
62
|
+
|
|
49
63
|
## SEE ALSO
|
|
50
64
|
|
|
51
65
|
`ase-meta-evaluate`, `ase-meta-quorum`, `ase-meta-diaboli`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-meta-diaboli
|
|
3
|
-
argument-hint: "[--help|-h] <thesis>"
|
|
3
|
+
argument-hint: "[--help|-h] [--count|-c <count>] <thesis>"
|
|
4
4
|
description: >
|
|
5
5
|
Challenge a thesis by playing "Devil’s Advocate" (latin: "Advocatus
|
|
6
6
|
Diaboli"). Use when the user wants a thesis or statement
|
|
@@ -12,27 +12,42 @@ effort: xhigh
|
|
|
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-diaboli">
|
|
17
18
|
Play "Devil's Advocate"
|
|
18
19
|
</skill>
|
|
19
20
|
|
|
21
|
+
<expand name="getopt"
|
|
22
|
+
arg1="ase-meta-diaboli"
|
|
23
|
+
arg2="--count|-c=10">
|
|
24
|
+
$ARGUMENTS
|
|
25
|
+
</expand>
|
|
26
|
+
|
|
20
27
|
<objective>
|
|
21
28
|
Play "Devil’s Advocate" (latin: "Advocatus Diaboli") by relentlessly
|
|
22
|
-
challenging or criticising the thesis: <thesis
|
|
29
|
+
challenging or criticising the thesis: <thesis><getopt-arguments/></thesis>
|
|
23
30
|
</objective>
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
Determine the minimum number of *anti-theses* to surface: set <count/>
|
|
33
|
+
to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
|
|
34
|
+
*less than or equal to 0*, use the default *10* instead.
|
|
35
|
+
|
|
36
|
+
<flow>
|
|
37
|
+
|
|
38
|
+
1. <step id="STEP 1: Repeat Thesis">
|
|
26
39
|
|
|
27
40
|
Output the thesis with the following <template/>:
|
|
28
41
|
|
|
29
42
|
<template>
|
|
30
|
-
<ase-tpl-bullet-
|
|
43
|
+
<ase-tpl-bullet-normal/> **THESIS**: <thesis/>
|
|
31
44
|
</template>
|
|
32
45
|
|
|
33
|
-
|
|
46
|
+
</step>
|
|
47
|
+
|
|
48
|
+
2. <step id="STEP 2: Determine Anti-Theses">
|
|
34
49
|
|
|
35
|
-
Reason on the thesis in <thesis/> by playing *Devil
|
|
50
|
+
Reason on the thesis in <thesis/> by playing *Devil's Advocate*
|
|
36
51
|
(latin: *Advocatus Diaboli*) by relentlessly challenging or
|
|
37
52
|
criticising it with the help of the following tenets:
|
|
38
53
|
|
|
@@ -47,7 +62,7 @@ effort: xhigh
|
|
|
47
62
|
of polish on the surface can save what is built on top of it.
|
|
48
63
|
|
|
49
64
|
- **Target Claims, Not Person**:
|
|
50
|
-
Critique the thesis, the assumption, the evidence
|
|
65
|
+
Critique the thesis, the assumption, the evidence - never the
|
|
51
66
|
proponent's competence or motives, because the moment it gets
|
|
52
67
|
personal, the inquiry dies.
|
|
53
68
|
|
|
@@ -103,11 +118,11 @@ effort: xhigh
|
|
|
103
118
|
For each Anti-Thesis or Counter-Argument rank it on a Likert scale
|
|
104
119
|
of 0 (weak) to 10 (strong). Repeat the process of finding more
|
|
105
120
|
Anti-Theses or Counter-Arguments until you EITHER have found at
|
|
106
|
-
least
|
|
107
|
-
of 7 OR you have already checked a total of
|
|
108
|
-
Counter-Arguments.
|
|
121
|
+
least <count/> Anti-Theses or Counter-Arguments with at least a rank
|
|
122
|
+
of 7 OR you have already checked a total of <count/> x 5 Anti-Theses
|
|
123
|
+
or Counter-Arguments.
|
|
109
124
|
|
|
110
|
-
Then, for the top
|
|
125
|
+
Then, for the top-<count/> highest-ranked Anti-Theses or
|
|
111
126
|
Counter-Arguments, sort them by their rank from highest to lowest,
|
|
112
127
|
store each in <antithesis-N/> with the format `**<aspect-N/>**
|
|
113
128
|
(rank: <rank-N/>/10): <statement-N/>` (where <aspect-N/> is a short
|
|
@@ -120,7 +135,9 @@ effort: xhigh
|
|
|
120
135
|
<ase-tpl-bullet-signal/> **ANTITHESIS**: <antithesis-N/>
|
|
121
136
|
</template>
|
|
122
137
|
|
|
123
|
-
|
|
138
|
+
</step>
|
|
139
|
+
|
|
140
|
+
3. <step id="STEP 3: Dialectical Reasoning">
|
|
124
141
|
|
|
125
142
|
Following the Hegelian dialectics of...
|
|
126
143
|
|
|
@@ -133,7 +150,7 @@ effort: xhigh
|
|
|
133
150
|
while ignoring its own limits, gaps, or internal tensions.
|
|
134
151
|
|
|
135
152
|
- *Antithesis*: the opposing force. It is the contradiction,
|
|
136
|
-
objection, or counter-position that the thesis provokes
|
|
153
|
+
objection, or counter-position that the thesis provokes - precisely
|
|
137
154
|
the role a Devil's Advocate played. The antithesis exposes what the
|
|
138
155
|
thesis omitted or got wrong.
|
|
139
156
|
|
|
@@ -150,3 +167,9 @@ effort: xhigh
|
|
|
150
167
|
<ase-tpl-bullet-normal/> **SYNTHESIS**: <synthesis/>
|
|
151
168
|
</template>
|
|
152
169
|
|
|
170
|
+
Do not output any further explanations.
|
|
171
|
+
|
|
172
|
+
</step>
|
|
173
|
+
|
|
174
|
+
</flow>
|
|
175
|
+
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
`ase-meta-diaboli`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
|
+
[`--count`|`-c` *count*]
|
|
10
11
|
*thesis*
|
|
11
12
|
|
|
12
13
|
## DESCRIPTION
|
|
@@ -14,26 +15,37 @@
|
|
|
14
15
|
The `ase-meta-diaboli` skill plays *Devil's Advocate* (latin:
|
|
15
16
|
*Advocatus Diaboli*) by relentlessly challenging or criticising a
|
|
16
17
|
supplied *thesis*. It applies a disciplined set of critical-thinking
|
|
17
|
-
tenets
|
|
18
|
+
tenets - steelmanning, stress-testing fundamentals, surfacing implicit
|
|
18
19
|
assumptions, demanding proportional evidence, seeking disconfirming
|
|
19
20
|
cases, *Reductio Ad Absurdum*, exposing hidden costs, and pre-mortem
|
|
20
|
-
thinking
|
|
21
|
+
thinking - while targeting the claim rather than its proponent and
|
|
21
22
|
yielding where the argument genuinely holds.
|
|
22
23
|
|
|
23
|
-
The skill iterates until it has found at least
|
|
24
|
+
The skill iterates until it has found at least *count* anti-theses
|
|
24
25
|
(counter-arguments) each ranked at least 7 on a 0 (weak) to 10
|
|
25
|
-
(strong) Likert scale, reports the top
|
|
26
|
+
(strong) Likert scale, reports the top *count* sorted from strongest to
|
|
26
27
|
weakest, and finally applies *Hegelian dialectics* (*Thesis* +
|
|
27
28
|
*Antithesis* → *Synthesis*) to derive a single-sentence *SYNTHESIS*
|
|
28
29
|
that preserves what is true in both the thesis and its antitheses
|
|
29
30
|
while discarding what is false.
|
|
30
31
|
|
|
32
|
+
The `--count`/`-c` *count* option sets the minimum number of strong
|
|
33
|
+
anti-theses to surface (default *10*), raising or lowering the floor of
|
|
34
|
+
counter-arguments hunted for, sorted, and reported in the single
|
|
35
|
+
challenge pass. A `0`, negative, or non-numeric value falls back to the
|
|
36
|
+
default *10*.
|
|
37
|
+
|
|
31
38
|
The intent is constructive: stress-testing the thesis in good faith to
|
|
32
39
|
arrive at a better final decision, not obstructing or merely being
|
|
33
40
|
contrarian.
|
|
34
41
|
|
|
35
42
|
## ARGUMENTS
|
|
36
43
|
|
|
44
|
+
`--count`, `-c` *count*:
|
|
45
|
+
Surface at least *count* strong anti-theses (default *10*) before
|
|
46
|
+
sorting and reporting the top *count* and deriving the *SYNTHESIS*. An
|
|
47
|
+
invalid or non-positive *count* reverts to the default *10*.
|
|
48
|
+
|
|
37
49
|
*thesis*:
|
|
38
50
|
The statement, claim, or position to be relentlessly challenged.
|
|
39
51
|
It may be technical, factual, or opinion-based; the skill attacks
|
|
@@ -53,6 +65,12 @@ Stress-test a design decision:
|
|
|
53
65
|
❯ /ase-meta-diaboli We should rewrite the service in Rust.
|
|
54
66
|
```
|
|
55
67
|
|
|
68
|
+
Surface at least fifteen anti-theses:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
❯ /ase-meta-diaboli --count 15 We should rewrite the service in Rust.
|
|
72
|
+
```
|
|
73
|
+
|
|
56
74
|
## SEE ALSO
|
|
57
75
|
|
|
58
76
|
`ase-meta-why`, `ase-meta-evaluate`, `ase-meta-quorum`,
|