@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.
Files changed (41) hide show
  1. package/dst/ase-hello.js +24 -0
  2. package/dst/ase-statusline.js +15 -5
  3. package/package.json +2 -2
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/agents/ase-meta-review.md +188 -0
  7. package/plugin/etc/eslint.mjs +25 -0
  8. package/plugin/etc/markdownlint.yaml +13 -11
  9. package/plugin/etc/stx.conf +2 -1
  10. package/plugin/meta/ase-control.md +7 -2
  11. package/plugin/meta/ase-dialog.md +2 -0
  12. package/plugin/meta/ase-format-arch.md +31 -31
  13. package/plugin/meta/ase-format-spec.md +3 -3
  14. package/plugin/meta/ase-getopt.md +1 -0
  15. package/plugin/meta/ase-persona.md +1 -1
  16. package/plugin/meta/ase-skill.md +6 -6
  17. package/plugin/package.json +5 -2
  18. package/plugin/skills/ase-arch-analyze/SKILL.md +33 -33
  19. package/plugin/skills/ase-code-analyze/SKILL.md +162 -18
  20. package/plugin/skills/ase-code-analyze/help.md +47 -7
  21. package/plugin/skills/ase-code-lint/SKILL.md +11 -3
  22. package/plugin/skills/ase-code-lint/help.md +14 -1
  23. package/plugin/skills/ase-docs-distill/SKILL.md +158 -0
  24. package/plugin/skills/ase-docs-distill/help.md +76 -0
  25. package/plugin/skills/ase-docs-proofread/SKILL.md +1 -1
  26. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  27. package/plugin/skills/ase-meta-brainstorm/SKILL.md +29 -15
  28. package/plugin/skills/ase-meta-brainstorm/help.md +21 -7
  29. package/plugin/skills/ase-meta-diaboli/SKILL.md +36 -13
  30. package/plugin/skills/ase-meta-diaboli/help.md +22 -4
  31. package/plugin/skills/ase-meta-diff/SKILL.md +110 -64
  32. package/plugin/skills/ase-meta-diff/help.md +30 -6
  33. package/plugin/skills/ase-meta-review/SKILL.md +184 -0
  34. package/plugin/skills/ase-meta-review/help.md +88 -0
  35. package/plugin/skills/ase-meta-steelman/SKILL.md +210 -0
  36. package/plugin/skills/ase-meta-steelman/help.md +92 -0
  37. package/plugin/skills/ase-meta-why/SKILL.md +20 -7
  38. package/plugin/skills/ase-meta-why/help.md +18 -5
  39. package/plugin/skills/ase-task-condense/SKILL.md +3 -3
  40. package/plugin/skills/ase-task-grill/SKILL.md +1 -1
  41. 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 with `--auto` applies
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>$ARGUMENTS</topic> by first
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 a one-line config
37
- change as much as a new subsystem because the simplest-looking
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 — the
87
- purpose, constraints, scope boundaries, and success criteria that
88
- must be pinned down for the brainstorming to be reasonably grounded.
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* e.g. the minimal/MVP-first
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 because variety in origin yields
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 12 distinct candidate ideas or
150
- have clearly exhausted the meaningfully distinct space.
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/> <cluster-summary-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 prefer a diverse shortlist spanning different
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* the highest-ranked
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 store its one-sentence rationale (not
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 one grounded, multiple-choice question at a time about
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 pursued from deliberately diverse
20
- angles (MVP-first, risk-first, UX-first, reuse-first, and wildcard),
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 drawn from
27
- distinct clusters wherever possible and derives a single
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 a feature, component, behavior, or
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>$ARGUMENTS</thesis>
29
+ challenging or criticising the thesis: <thesis><getopt-arguments/></thesis>
23
30
  </objective>
24
31
 
25
- 1. **Repeat Thesis**:
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-secondary/> **THESIS**: <thesis/>
43
+ <ase-tpl-bullet-normal/> **THESIS**: <thesis/>
31
44
  </template>
32
45
 
33
- 2. **Determine Anti-Thesis**:
46
+ </step>
47
+
48
+ 2. <step id="STEP 2: Determine Anti-Theses">
34
49
 
35
- Reason on the thesis in <thesis/> by playing *Devils Advocate*
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 never the
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 10 Anti-Theses or Counter-Arguments with at least a rank
107
- of 7 OR you have already checked a total of 50 Anti-Theses or
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-10 highest-ranked Anti-Theses or
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
- 3. **Dialectical Reasoning**:
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 precisely
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 steelmanning, stress-testing fundamentals, surfacing implicit
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 while targeting the claim rather than its proponent and
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 ten anti-theses
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 ten sorted from strongest to
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`,