@rse/ase 0.9.55 → 0.9.57

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 (86) hide show
  1. package/dst/ase-config.js +72 -31
  2. package/dst/ase-getopt.js +3 -1
  3. package/dst/ase-hook.js +5 -3
  4. package/dst/ase-markdown.js +7 -4
  5. package/dst/ase-service.js +1 -1
  6. package/dst/ase-setup.js +4 -2
  7. package/dst/ase-statusline.js +6 -8
  8. package/dst/ase-task.js +37 -11
  9. package/package.json +5 -5
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/.github/plugin/plugin.json +1 -1
  13. package/plugin/agents/ase-code-analyze.md +1 -1
  14. package/plugin/agents/ase-code-lint.md +4 -4
  15. package/plugin/agents/ase-meta-chat.md +1 -1
  16. package/plugin/agents/ase-meta-proximity.md +1 -1
  17. package/plugin/meta/ase-common-code.md +168 -1
  18. package/plugin/meta/ase-common-task.md +31 -13
  19. package/plugin/meta/ase-constitution.md +3 -3
  20. package/plugin/meta/ase-control.md +7 -7
  21. package/plugin/meta/ase-dialog.md +5 -4
  22. package/plugin/meta/ase-format-arch.md +6 -21
  23. package/plugin/meta/ase-format-meta.md +15 -2
  24. package/plugin/meta/ase-format-spec.md +9 -24
  25. package/plugin/meta/ase-format-task.md +2 -2
  26. package/plugin/meta/ase-getopt.md +1 -1
  27. package/plugin/meta/ase-persona.md +3 -3
  28. package/plugin/meta/ase-skill.md +14 -24
  29. package/plugin/meta/ase-tenets.md +5 -5
  30. package/plugin/package.json +2 -2
  31. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
  32. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  33. package/plugin/skills/ase-arch-discover/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  35. package/plugin/skills/ase-code-analyze/help.md +1 -1
  36. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  37. package/plugin/skills/ase-code-craft/help.md +1 -1
  38. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  39. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  40. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  41. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  42. package/plugin/skills/ase-code-resolve/SKILL.md +48 -173
  43. package/plugin/skills/ase-code-resolve/help.md +15 -4
  44. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  45. package/plugin/skills/ase-docs-distill/help.md +1 -1
  46. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  47. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  48. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  49. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  50. package/plugin/skills/ase-meta-changelog/SKILL.md +13 -8
  51. package/plugin/skills/ase-meta-chat/SKILL.md +9 -0
  52. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  53. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  54. package/plugin/skills/ase-meta-config/help.md +3 -2
  55. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  56. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  57. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  58. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  59. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  60. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  61. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  63. package/plugin/skills/ase-meta-review/help.md +2 -2
  64. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  65. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  66. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  67. package/plugin/skills/ase-meta-why/help.md +3 -3
  68. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  69. package/plugin/skills/ase-sync-export/help.md +1 -1
  70. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  71. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  72. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  73. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  74. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  75. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  76. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  77. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  78. package/plugin/skills/ase-task-implement/help.md +1 -1
  79. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  80. package/plugin/skills/ase-task-preflight/SKILL.md +17 -33
  81. package/plugin/skills/ase-task-reboot/SKILL.md +24 -100
  82. package/plugin/skills/ase-task-reboot/help.md +1 -1
  83. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  84. package/dst/ase-guidance.js +0 -89
  85. package/dst/ase-persona.js +0 -87
  86. package/dst/ase-stdout.js +0 -18
@@ -78,6 +78,15 @@ Honor the following tenets throughout the brainstorming:
78
78
 
79
79
  1. <step id="STEP 1: Restate Topic">
80
80
 
81
+ <if condition="<topic/> is empty">
82
+ Only output the following <template/> and then immediately *STOP*
83
+ processing the entire current skill:
84
+
85
+ <template>
86
+ ⧉ **ASE**: ✪ skill: **ase-meta-brainstorm**, ▶ ERROR: expected a `<topic>` argument
87
+ </template>
88
+ </if>
89
+
81
90
  Restate the topic to be brainstormed by outputting the following <template/>:
82
91
 
83
92
  <template>
@@ -99,7 +108,7 @@ Honor the following tenets throughout the brainstorming:
99
108
  1..<getopt-option-max-clarify/> unknowns, as too much upfront intent
100
109
  clarification kills the brainstorming of ideas later. So, you *MUST*
101
110
  reduce the clarifications of the unknowns to the absolute minimum in
102
- general and cap it at <getopt-option-max-clarify/>!
111
+ general and cap them at <getopt-option-max-clarify/>!
103
112
 
104
113
  For each essential unknown to clarify, derive a short 1-3 word facet
105
114
  <facet-M/> and a corresponding question <question-M/> whose answer
@@ -185,7 +194,7 @@ Honor the following tenets throughout the brainstorming:
185
194
  the unconventional/wildcard angle - because variety in origin yields
186
195
  variety in outcome.
187
196
 
188
- Do still *not* judge, rank, or prune ideas in this step. Generate
197
+ Still do *not* judge, rank, or prune ideas in this step. Generate
189
198
  ideas until you either reach at least <getopt-option-min-ideas/> distinct
190
199
  candidate ideas or have clearly exhausted the meaningfully distinct
191
200
  space.
@@ -11,6 +11,7 @@ allowed-tools:
11
11
  - "Bash(git diff *)"
12
12
  - "Bash(git show *)"
13
13
  - "Bash(git tag --list *)"
14
+ - "Read"
14
15
  - "Write"
15
16
  - "Edit"
16
17
  ---
@@ -106,14 +107,18 @@ Processing
106
107
  correct baseline Git tag. Take the `N.M.K` from the *first* (most
107
108
  recent) level-2 header in the *ChangeLog* file and check whether a
108
109
  corresponding Git tag already exists with the command `git tag --list
109
- N.M.K`. If this command produces *no* output, the first section is
110
- still in-progress/untagged, so use the `N.M.K` from the *second*
111
- level-2 header as the baseline tag instead. If *no* second level-2
112
- header exists (very first, still untagged release), skip the baseline
113
- tag and check *all* Git commits with the command `git log HEAD
114
- --numstat --pretty=format:'%h: %s'` instead. If this command *does*
115
- produce output, the first section is already released/tagged, so use
116
- the `N.M.K` from the *first* level-2 header as the baseline tag. Then
110
+ N.M.K`. If this command *does* produce output, the first section is
111
+ already released/tagged, so use the `N.M.K` from the *first* level-2
112
+ header as the baseline tag and *insert* a new, still-unreleased
113
+ level-2 section (next patch version, current date) *above* it, which
114
+ then becomes the *first* (most recent) section all subsequent steps
115
+ operate on - the already released section *MUST* *NOT* be modified.
116
+ If this command produces *no* output, the
117
+ first section is still in-progress/untagged, so use the `N.M.K` from
118
+ the *second* level-2 header as the baseline tag instead. If *no*
119
+ second level-2 header exists (very first, still untagged release),
120
+ skip the baseline tag and check *all* Git commits with the command
121
+ `git log HEAD --numstat --pretty=format:'%h: %s'` instead. Then
117
122
  check all Git commits between `HEAD` and this baseline tag with the
118
123
  command `git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`.
119
124
 
@@ -28,6 +28,15 @@ Query Foreign LLM for Chat
28
28
  Query foreign LLM for: <query><getopt-arguments/></query>
29
29
  </objective>
30
30
 
31
+ <if condition="<query/> is empty">
32
+ Only output the following <template/> and then immediately *STOP*
33
+ processing the entire current skill:
34
+
35
+ <template>
36
+ ⧉ **ASE**: ✪ skill: **ase-meta-chat**, ▶ ERROR: expected a `<query>` argument
37
+ </template>
38
+ </if>
39
+
31
40
  1. You *MUST* *NOT* output anything in this step.
32
41
  Just call the underlying agent with the following tool:
33
42
 
@@ -8,6 +8,7 @@ disable-model-invocation: false
8
8
  effort: medium
9
9
  allowed-tools:
10
10
  - "Bash(git diff *)"
11
+ - "Bash(git ls-files *)"
11
12
  ---
12
13
 
13
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -32,10 +33,19 @@ currently staged Git changes.
32
33
  1. <step id="STEP 1: Find out staged changes">
33
34
 
34
35
  Run the following command to find out details of what changes are
35
- currently staged in the Git *index* for commit:
36
+ currently staged in the Git *index* for commit, capturing its output
37
+ into <diff/>:
36
38
 
37
39
  `git diff --cached`
38
40
 
41
+ <if condition="<diff/> is empty">
42
+ Only output the following <template/> and then *STOP* immediately:
43
+
44
+ <template>
45
+ ⧉ **ASE**: ✪ skill: **ase-meta-commit**, ▶ status: **no changes to commit**
46
+ </template>
47
+ </if>
48
+
39
49
  </step>
40
50
 
41
51
  2. <step id="STEP 2: Craft a consolidated commit message">
@@ -34,8 +34,8 @@ on -- *control flow*, *XML placeholders*, *regex matching*, and
34
34
  *arithmetic* -- and report an overall **0%…100% compatibility** rating.
35
35
 
36
36
  This skill is unusual: it is both the *test definition* and the *system
37
- under test*. Each *probe* is a pure ASE construct that you execute and
38
- record its *actual* result. You *MUST NOT* compare against any expected
37
+ under test*. Each *probe* is a pure ASE construct that you execute,
38
+ recording its *actual* result. You *MUST NOT* compare against any expected
39
39
  value until STEP 6. Do not fabricate passes: a probe whose actual result
40
40
  differs from its expected result *MUST* be recorded as a *fail*.
41
41
 
@@ -41,7 +41,7 @@ of the decorative, eloquent, and explaining `writer`, the concise,
41
41
  factual, and accurate `engineer` (the default), the layered,
42
42
  pyramid-structured `journalist`, the brief, factual, and abbreviating
43
43
  `telegrapher`, or the terse, rough, and stuttering `caveman`;
44
- `agent.guidance` selects the amount of unsolicited hints and is one of
44
+ `agent.guidance` selects the number of unsolicited hints and is one of
45
45
  `none`, `minimal`, `normal` (the default), or `verbose`; and
46
46
  `project.boxing` selects the artifact transparency and is one of `white`,
47
47
  `grey`, or `black`. Setting `agent.persona`, `agent.guidance`, or
@@ -78,7 +78,8 @@ preset-bootstrapping operation that stays a shell concern next to
78
78
  `user`, `project`, `task:`*id*, and/or `session:`*id* terms, in any
79
79
  order and at most one term per kind. The `user` term is always
80
80
  implicitly added at the bottom of the chain, and `project` is
81
- implicitly added whenever a project context exists. If the option is
81
+ implicitly added whenever a project context exists, but never above
82
+ the strongest explicitly requested term. If the option is
82
83
  omitted, the chain of the *current session* (`session:`*id*) is used,
83
84
  so that reads see the full `user` -> `project` -> `session` cascade
84
85
  and writes -- including those to the session-only keys `agent.task`
@@ -37,6 +37,15 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
37
37
 
38
38
  1. <step id="STEP 1: Restate Thesis">
39
39
 
40
+ <if condition="<thesis/> is empty">
41
+ Only output the following <template/> and then immediately *STOP*
42
+ processing the entire current skill:
43
+
44
+ <template>
45
+ ⧉ **ASE**: ✪ skill: **ase-meta-diaboli**, ▶ ERROR: expected a `<thesis>` argument
46
+ </template>
47
+ </if>
48
+
40
49
  Output the thesis with the following <template/>:
41
50
 
42
51
  <template>
@@ -112,10 +121,10 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
112
121
  just a contrarian.
113
122
 
114
123
  - **Pre-Mortem Thinking**:
115
- Imagine failure scenarios of the thesis, because better to
116
- prevent them in advance than having to resolve them later.
124
+ Imagine failure scenarios of the thesis, because it is better to
125
+ prevent them in advance than to have to resolve them later.
117
126
 
118
- For each Anti-Thesis or Counter-Argument rank it on a Likert scale
127
+ For each Anti-Thesis or Counter-Argument, rank it on a Likert scale
119
128
  of 0 (weak) to 10 (strong). Repeat the process of finding more
120
129
  Anti-Theses or Counter-Arguments until you EITHER have found at
121
130
  least <count/> Anti-Theses or Counter-Arguments with at least a rank
@@ -52,13 +52,13 @@ Procedure
52
52
  (taken exactly as given) and capturing the full diff output into
53
53
  <diff/> for the subsequent analysis:
54
54
 
55
- `git diff --cached HEAD`
55
+ `git diff --cached`
56
56
 
57
57
  2. Determine the *diff statistics* by running the corresponding command
58
58
  (taken exactly as given) and capturing the full stat output into
59
59
  <stat/> for the subsequent analysis:
60
60
 
61
- `git diff --cached --numstat HEAD`
61
+ `git diff --cached --numstat`
62
62
 
63
63
  </step>
64
64
 
@@ -112,7 +112,7 @@ Procedure
112
112
  | **<intent/>** | <changes/> | <files/>: <description/> |
113
113
  </template>
114
114
 
115
- In the <files/> part of the second column, markup all file
115
+ In the <files/> part of the second column, mark up all file
116
116
  references as code (with backticks), prepend them with `▢ `,
117
117
  append ` [+N/-M]` (based on the information in <stat/>) to them,
118
118
  and separate them with `, ` (a comma and space). Do *not* repeat
@@ -174,7 +174,7 @@ Procedure
174
174
  logging, `TODO`/`FIXME` scaffolding, disabled tests), which
175
175
  should be just removed and not part of any commit.
176
176
 
177
- 3. A hunk that *serves* <thesis/> will be *not* reported. Only hunks that
177
+ 3. A hunk that *serves* <thesis/> will *not* be reported. Only hunks that
178
178
  do *not* serve it will be reported. If *every* hunk serves the thesis,
179
179
  the diff is *coherent* and you report *no* flagged hunks.
180
180
 
@@ -203,7 +203,7 @@ Procedure
203
203
  the hunk does not serve <thesis/> and what to do with it (e.g.
204
204
  split into its own commit, drop the debug residue).
205
205
 
206
- In the <location/> column, markup all file references as code
206
+ In the <location/> column, mark up all file references as code
207
207
  (with backticks), prepend them with `▢ ` and append ` [+N/-M]`
208
208
  (based on the information in <stat/>) to them.
209
209
 
@@ -212,7 +212,7 @@ Procedure
212
212
 
213
213
  <template>
214
214
 
215
- | Deviation | Location | Why it does not serve the thesis? |
215
+ | Deviation | Location | Why does it not serve the thesis? |
216
216
  | ---------------- | ----------- | --------------------------------- |
217
217
  | **<deviation/>** | <location/> | <reason/> |
218
218
 
@@ -278,7 +278,7 @@ Procedure
278
278
  and <mitigation/> texts *concise* and *ultra brief*. Do *not*
279
279
  output any further explanation.
280
280
 
281
- In <evidence/> markup all file references as code (with
281
+ In <evidence/> mark up all file references as code (with
282
282
  backticks), prepend them with `▢ ` and append ` [+N/-M]` (based
283
283
  on the information in <stat/>) to them.
284
284
 
@@ -297,7 +297,7 @@ Procedure
297
297
 
298
298
  1. From the *same* captured <diff/> and <stat/>, *extract the
299
299
  touched modules* - the distinct changed source files (or their
300
- enclosing modules/ packages, according to the language idiom).
300
+ enclosing modules/packages, according to the language idiom).
301
301
 
302
302
  2. Then, for each touched module, *scan its reverse dependencies*
303
303
  - the other first-party files that *import* or *reference* it
@@ -322,14 +322,14 @@ Procedure
322
322
  calling the tool `Agent(description: "Diagram Rendering",
323
323
  subagent_type: "ase:ase-meta-diagram", prompt:
324
324
  "<mermaid-spec/>", run_in_background: false)` and capture
325
- its returned `text` field as <diagram/>.
325
+ its returned *fenced code block* verbatim as <diagram/>.
326
326
 
327
327
  4. Then emit the following <template/>, showing <diagram/> and
328
328
  appending a *brief impact summary* of bullets, where each
329
329
  <module/> is a *touched* module and <impact/> is a one-sentence
330
330
  note on *what depends on it* and *how far the blast reaches*.
331
331
 
332
- In <module/> and <impact/>, markup all file references as code
332
+ In <module/> and <impact/>, mark up all file references as code
333
333
  (with backticks), prepend them with `▢ ` and append ` [+N/-M]`
334
334
  (based on the information in <stat/>) to them.
335
335
 
@@ -341,9 +341,7 @@ Procedure
341
341
 
342
342
  <ase-tpl-bullet-signal/> **CHANGE BLAST RADIUS MAP**:
343
343
 
344
- ```text
345
344
  <diagram/>
346
- ```
347
345
 
348
346
  <ase-tpl-bullet-signal/> **BLAST**: ⚑ **<module/>**: <impact/>
349
347
 
@@ -351,7 +349,7 @@ Procedure
351
349
 
352
350
  [...]
353
351
 
354
- <ase-tpl-foot/>
352
+ <ase-tpl-foot title="CHANGE BLAST RADIUS"/>
355
353
  </template>
356
354
 
357
355
  </step>
@@ -29,7 +29,7 @@ Explain a Topic Like I'm 5
29
29
 
30
30
  <objective>
31
31
  *Explain* the following topic in "Explain Like I'm 5" (ELI5) style,
32
- so that even a five year old child could understand it:
32
+ so that even a five-year-old child could understand it:
33
33
  <topic><getopt-arguments/></topic>
34
34
  </objective>
35
35
 
@@ -46,7 +46,7 @@ so that even a five year old child could understand it:
46
46
  </template>
47
47
  </if>
48
48
 
49
- Set <facts></facts> (set to empty)
49
+ Set <facts></facts> (set to empty).
50
50
 
51
51
  </step>
52
52
 
@@ -80,7 +80,7 @@ so that even a five year old child could understand it:
80
80
  3. <step id="STEP 3: Explain Topic">
81
81
 
82
82
  Explain the <topic/> in "Explain Like I'm 5" (ELI5) style: use
83
- *simple*, *jargon-free* wording a five year old child could
83
+ *simple*, *jargon-free* wording a five-year-old child could
84
84
  understand -- short sentences, everyday words, and familiar images.
85
85
  Do *not* use technical terms without immediately putting them into
86
86
  child-friendly words.
@@ -13,7 +13,7 @@
13
13
  ## DESCRIPTION
14
14
 
15
15
  The `ase-meta-eli5` skill explains the supplied *topic* in "Explain
16
- Like I'm 5" (ELI5) style, so that even a five year old child could
16
+ Like I'm 5" (ELI5) style, so that even a five-year-old child could
17
17
  understand it. The explanation uses simple, jargon-free wording --
18
18
  short sentences, everyday words, and familiar images -- and is
19
19
  structured into three labeled blocks: *WHAT* (a plain-words summary),
@@ -114,12 +114,12 @@ multi-*criteria* decision matrix.
114
114
 
115
115
  - For each criterion <criteria-L/> (L=1-M), decide on its <weight-L/>
116
116
  from the value set { 4.00, 2.00, 1.00, 0.50, 0.25 } (from most
117
- important, over normal, to less important). Do not output anything.
117
+ important, via normal, to less important). Do not output anything.
118
118
 
119
119
  - Ensure the final number of criteria is always within the range of
120
120
  minimum 8 and maximum 12: if fewer than 8 criteria were requested,
121
121
  use the set of alternatives to decide on additional criteria
122
- which potentially allow best to triage the alternatives, take the
122
+ which potentially best allow triaging the alternatives, take the
123
123
  <reason/> into account, and use the `ase-meta-search` skill (drawing from
124
124
  the *skill-wide shared budget* of at most 8 `ase-meta-search` invocations
125
125
  in total across STEP 2 and STEP 3 combined) to find out about the
@@ -145,7 +145,7 @@ multi-*criteria* decision matrix.
145
145
  - For each alternative <alternative-K/> (K=1-N) and each criterion
146
146
  <criteria-L/> (L=1-M), decide on the evaluation <eval-K-L/>, which
147
147
  means how well the alternative meets the criterion on a Likert-scale
148
- from { -2, -1, 0, +1, +2 } (from worst, over neutral, to best). Do
148
+ from { -2, -1, 0, +1, +2 } (from worst, via neutral, to best). Do
149
149
  not output anything.
150
150
 
151
151
  - Then, calculate the ratings <rating-K/> (K=1-N) for all
@@ -38,6 +38,21 @@ by querying *multiple* AIs for an *optimal consensus*.
38
38
 
39
39
  1. <step id="STEP 1: Preview Own Answer">
40
40
 
41
+ The user-selectable foreign models are restricted by the
42
+ `--models`/`-m` option, parsed into <getopt-option-models/>
43
+ as a comma-separated list of model tokens. The getopt parser
44
+ validates only the *first* token, so you *MUST* validate each
45
+ remaining token yourself against the allowed set `all`, `chatgpt`,
46
+ `gemini`, `deepseek`, `grok`, `glm`, `qwen`, `claude`, `codex`,
47
+ `copilot`. If any token is *not*
48
+ in this set, bind <token/> to that offending token, then only output
49
+ the following <template/> and then immediately *STOP* processing the
50
+ entire current skill:
51
+
52
+ <template>
53
+ ⧉ **ASE**: ✪ skill: **ase-meta-quorum**, ▶ ERROR: invalid `--models` token: **<token/>**
54
+ </template>
55
+
41
56
  Prepare the LLM query by setting <query/> to the following <template/>:
42
57
 
43
58
  <template>
@@ -64,21 +79,6 @@ by querying *multiple* AIs for an *optimal consensus*.
64
79
 
65
80
  2. <step id="STEP 2: Query Foreign AIs">
66
81
 
67
- The user-selectable foreign models are restricted by the
68
- `--models`/`-m` option, parsed into <getopt-option-models/>
69
- as a comma-separated list of model tokens. The getopt parser
70
- validates only the *first* token, so you *MUST* validate each
71
- remaining token yourself against the allowed set `all`, `chatgpt`,
72
- `gemini`, `deepseek`, `grok`, `glm`, `qwen`, `claude`, `codex`,
73
- `copilot`. If any token is *not*
74
- in this set, bind <token/> to that offending token, then only output
75
- the following <template/> and then immediately *STOP* processing the
76
- entire current skill:
77
-
78
- <template>
79
- ⧉ **ASE**: ✪ skill: **ase-meta-quorum**, ▶ ERROR: invalid `--models` token: **<token/>**
80
- </template>
81
-
82
82
  The default is the single token `all`. If <getopt-option-models/>
83
83
  contains the token `all`, you *MUST* treat it as the full list
84
84
  `chatgpt,gemini,deepseek,grok,glm,qwen` (all API-based models). The
@@ -143,7 +143,7 @@ by querying *multiple* AIs for an *optimal consensus*.
143
143
  Agents which returned a response with an `ERROR:` prefix are
144
144
  silently skipped and are treated as not available.
145
145
 
146
- Summarize all responses, of both yourself and all available agents
146
+ Summarize all responses, of both yourself and all available agents,
147
147
  with just 1 to 7 corresponding bullet points and with short
148
148
  sentences.
149
149
 
@@ -178,7 +178,7 @@ by querying *multiple* AIs for an *optimal consensus*.
178
178
 
179
179
  5. <step id="STEP 5: Show Results">
180
180
 
181
- Finally show the summary, the consensus and the complete and
181
+ Finally, show the summary, the consensus, and the complete and
182
182
  unmodified responses of yourself and each of the queried foreign
183
183
  AIs, based on the following output <template/>:
184
184
 
@@ -185,7 +185,7 @@ Find Quotes on a Topic
185
185
  - ` *(unverified)*` if the exact wording or the attribution of
186
186
  the quote could not be established with confidence -- but
187
187
  omit this marker for a quote whose wording and attribution
188
- the Internet/Web search of STEP 2.2 confirmed -- including
188
+ the Internet/Web search of STEP 2.2 confirmed, including
189
189
  its re-application for a neighborhood topic in STEP 3.
190
190
 
191
191
  Render the single line `○ (none)` for a quadrant without any
@@ -150,14 +150,16 @@ Procedure
150
150
  You *MUST* *NOT* output anything else in this STEP 3.1.
151
151
 
152
152
  2. <if condition="<findings/> is empty">
153
- Only output the following <template/> and then *SKIP* the
154
- remainder of this STEP 3 (an empty finding list implies the
155
- `APPROVE` verdict, so the closing hint of substep 4 would expand
153
+ Only output the following <template/> - with <note/> set to `the
154
+ change was not reviewed` if <verdict/> starts with `SKIPPED` and
155
+ to `the change is clean` otherwise - and then *SKIP* the
156
+ remainder of this STEP 3 (an empty finding list never yields the
157
+ `REJECT` verdict, so the closing hint of substep 4 would expand
156
158
  into nothing anyway):
157
159
 
158
160
  <template>
159
161
 
160
- <ase-tpl-bullet-normal/> **NO FINDINGS**: the change is clean, nothing to flag.
162
+ <ase-tpl-bullet-normal/> **NO FINDINGS**: <note/>, nothing to flag.
161
163
 
162
164
  </template>
163
165
  </if>
@@ -173,7 +175,7 @@ Procedure
173
175
  <dimension/> to its `dimension` field, set <location/> to its
174
176
  `location` field, and set <finding/> to its `finding` field.
175
177
 
176
- In the <location/> column, markup the `file:line` reference
178
+ In the <location/> column, mark up the `file:line` reference
177
179
  as code (with backticks) and prepend it with `▢ ` - keep the
178
180
  sub-agent's own `:N` / `:N-M` line citation intact and do *not*
179
181
  append any further line-count decoration.
@@ -45,12 +45,12 @@ sub-agent so that the silent reading and read-only repository probing
45
45
  never leak into the transcript; only the structured verdict and findings
46
46
  are rendered.
47
47
 
48
- The skill *complements* rather than duplicates its neighbours:
48
+ The skill *complements* rather than duplicates its neighbors:
49
49
  `ase-code-lint` flags *mechanical* code-quality issues, `ase-code-analyze`
50
50
  inspects *logic and semantics*, `ase-meta-diff` narrates *what changed*
51
51
  (with optional coherence, risk, and blast-radius reports), and
52
52
  `ase-meta-diaboli` *adversarially challenges a thesis* - whereas
53
- `ase-meta-review` renders a *reviewer's judgement* on a concrete diff
53
+ `ase-meta-review` renders a *reviewer's judgment* on a concrete diff
54
54
  before it is committed.
55
55
 
56
56
  ## OPTIONS
@@ -38,6 +38,15 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
38
38
 
39
39
  1. <step id="STEP 1: Query Search Services">
40
40
 
41
+ <if condition="<query/> is empty">
42
+ Only output the following <template/> and then immediately *STOP*
43
+ processing the entire current skill:
44
+
45
+ <template>
46
+ ⧉ **ASE**: ✪ skill: **ase-meta-search**, ▶ ERROR: expected a `<query>` argument
47
+ </template>
48
+ </if>
49
+
41
50
  <define name="agent">
42
51
  ```text
43
52
  Agent(
@@ -105,6 +114,15 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
105
114
  Call the tool `web_search(query: "<query/>")`.
106
115
  </expand>
107
116
 
117
+ If *none* of the selected backends could be invoked - because no
118
+ corresponding tool is available - only output the following
119
+ <template/> and then immediately *STOP* processing the entire current
120
+ skill:
121
+
122
+ <template>
123
+ ⧉ **ASE**: ✪ skill: **ase-meta-search**, ▶ ERROR: no search backend available: **<getopt-option-services/>**
124
+ </template>
125
+
108
126
  </step>
109
127
 
110
128
  2. <step id="STEP 2: Consolidate Search Answers">
@@ -41,6 +41,15 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
41
41
 
42
42
  1. <step id="STEP 1: Restate Thesis">
43
43
 
44
+ <if condition="<thesis/> is empty">
45
+ Only output the following <template/> and then immediately *STOP*
46
+ processing the entire current skill:
47
+
48
+ <template>
49
+ ⧉ **ASE**: ✪ skill: **ase-meta-steelman**, ▶ ERROR: expected a `<thesis>` argument
50
+ </template>
51
+ </if>
52
+
44
53
  Begin a *round* of fortification and consolidating reasoning. On
45
54
  the first visit, set <i>1</i> (set round counter to one); on each
46
55
  subsequent visit (via the jump back in the last step), <i/> has
@@ -125,7 +134,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
125
134
 
126
135
  - **Argue in Good Faith**:
127
136
  Make clear you are building the best honest case, not
128
- overselling, because the goal of the objective is a better
137
+ overselling, because the goal is a better
129
138
  final decision, not a sales pitch.
130
139
 
131
140
  - **Concede the Real Weaknesses**:
@@ -137,7 +146,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
137
146
  Imagine success scenarios of the thesis, because envisioning
138
147
  how it wins clarifies the conditions worth securing in advance.
139
148
 
140
- For each Pro-Thesis or Supporting-Argument rank it on a Likert
149
+ For each Pro-Thesis or Supporting-Argument, rank it on a Likert
141
150
  scale of 0 (weak) to 10 (strong). Repeat the process of finding
142
151
  more Pro-Theses or Supporting-Arguments until you EITHER have found
143
152
  at least <count/> Pro-Theses or Supporting-Arguments with at least a
@@ -37,6 +37,15 @@ addressing surface-level symptoms.
37
37
 
38
38
  1. <step id="STEP 1: Restate Problem">
39
39
 
40
+ <if condition="<getopt-arguments/> is empty">
41
+ Only output the following <template/> and then immediately *STOP*
42
+ processing the entire current skill:
43
+
44
+ <template>
45
+ ⧉ **ASE**: ✪ skill: **ase-meta-why**, ▶ ERROR: expected a `<fact>` argument
46
+ </template>
47
+ </if>
48
+
40
49
  State the problem statement.
41
50
 
42
51
  <template>
@@ -67,16 +76,16 @@ addressing surface-level symptoms.
67
76
  <while condition="<n/> is less than or equal to <depth/>">
68
77
 
69
78
  Ask <question/> and document the answer in <answer/> with the following template.
70
- Don't stop at symptoms, keep digging for systemic issues.
79
+ Don't stop at symptoms; keep digging for systemic issues.
71
80
  Consider technical, domain-specific, process-related, or organizational causes.
72
81
 
73
82
  <template>
74
83
  <ase-tpl-bullet-secondary/> **WHY <n/>**: <answer/>
75
84
  </template>
76
85
 
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.
86
+ Then, for the next iteration, set <question/> now to be the last <answer/>.
87
+ The magic is NOT in exactly <depth/> "Whys" -- you can <break/>
88
+ the iteration when you have already reached the root-cause.
80
89
  Finally, set <n/> to <n/> + 1 (increment iteration counter).
81
90
 
82
91
  </while>
@@ -108,7 +117,7 @@ addressing surface-level symptoms.
108
117
  *non-overlapping* candidate sub-causes, each documented in <answer-k/>.
109
118
  Let <count/> be the number of candidates you actually surfaced
110
119
  (at least one, at most <width/>).
111
- Don't stop at symptoms, keep digging for systemic issues.
120
+ Don't stop at symptoms; keep digging for systemic issues.
112
121
  Explore *different* candidates -- technical, domain-specific,
113
122
  process-related, or organizational causes -- and avoid restating
114
123
  the same cause in different words.
@@ -136,7 +145,7 @@ addressing surface-level symptoms.
136
145
 
137
146
  Record the remaining candidates as <fallbacks/> for level <n/>.
138
147
  Then, for the next iteration, set <question/> to the chosen candidate.
139
- You can <break/> the iteration when the chosen candidate already
148
+ You can <break/> the iteration when the chosen candidate has already
140
149
  reached its root-cause.
141
150
  Finally, set <n/> to <n/> + 1 (increment iteration counter).
142
151
 
@@ -44,9 +44,9 @@ source code changes.
44
44
  candidate sub-causes, descends into the single most significant one
45
45
  (justifying the choice), and retains the rest as *fallbacks*. During
46
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
47
+ and re-descended, so the widening actively improves which root cause is
48
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
49
+ single, but better-justified, root cause. A non-numeric or non-positive
50
50
  value falls back to the default.
51
51
 
52
52
  ## ARGUMENTS
@@ -71,7 +71,7 @@ Drill down deeper with a tunable chain length of seven:
71
71
  ```
72
72
 
73
73
  Weigh several candidate sub-causes per level (with backtracking) to avoid
74
- committing early to the wrong root-cause:
74
+ committing early to the wrong root cause:
75
75
 
76
76
  ```text
77
77
  ❯ /ase-meta-why -w 3 the release was delayed by two weeks
@@ -10,7 +10,8 @@ user-invocable: true
10
10
  disable-model-invocation: false
11
11
  effort: xhigh
12
12
  allowed-tools:
13
- - Write
13
+ - "Read"
14
+ - "Write"
14
15
  ---
15
16
 
16
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -73,4 +73,4 @@ Export only the data-model artifact:
73
73
  ## SEE ALSO
74
74
 
75
75
  [`ase-sync-reconcile`](../ase-sync-reconcile/help.md),
76
- [`ase-sync-import`](../ase-sync-import/help.md)
76
+ [`ase-sync-import`](../ase-sync-import/help.md).