@rse/ase 0.9.33 → 0.9.35

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.
@@ -10,6 +10,7 @@ disable-model-invocation: false
10
10
  effort: high
11
11
  allowed-tools:
12
12
  - "Agent"
13
+ - "Glob"
13
14
  ---
14
15
 
15
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -53,180 +54,56 @@ problems in *performance* and *efficiency*, or problems in *security*.
53
54
 
54
55
  2. <step id="STEP 2: Investigate Code Base">
55
56
 
56
- In this STEP 2, investigate on the code. If the code base is large,
57
- you *MUST* use the `Agent` tool (not inline work) to create multiple
58
- sub-agents to split the investigation task into appropriate chunks.
59
-
60
- Tenets:
61
-
62
- - **Quiet Operation**:
63
-
64
- During investigation in this STEP 2, do *not* output anything else,
65
- especially do not give any further explanations or information.
66
-
67
- - **Practical Relevance Only**:
68
-
69
- Focus on *practically relevant* cases and especially do *not*
70
- investigate theoretical or fictive cases.
71
-
72
- - **Problem Focus Only**:
73
-
74
- Still focus on the *problem only* and do *not* already
75
- investigate any possible *solution* or apply any *change*.
76
-
77
- - **Lens Focus**:
78
-
79
- <if condition="<getopt-option-performance/> is equal `true`">
80
-
81
- Focus on *performance* and *efficiency* only - and do *not*
82
- investigate logic, semantics, control flow, or security
83
- problems.
84
-
85
- Analysis Hints (not exhaustive, just indicators):
86
- - high algorithmic complexity
87
- - needless resource allocations/copies
88
- - redundant recomputation
89
- - many I/O and query round-trips
90
- - concurrency bottlenecks
91
- - mismatched data structures
92
- - N+1 query patterns (1 parent query, N child queries)
93
- - missing caching/memoization of stable results
94
- - blocking/synchronous calls on hot paths
95
- - unbounded growth (memory leaks, ever-growing collections)
96
- - inefficient string building/concatenation in loops
97
- - premature or repeated serialization/parsing
98
- - lack of batching/pagination for bulk operations
99
- - excessive logging or instrumentation overhead
100
- - chatty network protocols (no connection pooling/keep-alive)
101
- - lock contention and overly coarse-grained locking
102
- - eager/over-fetching of data that is never used
103
- - missing database indexes
104
- - repeated regex (re)compilation in hot paths
105
- - busy-waiting/polling instead of event-driven waits
106
- - transferring uncompressed or overly verbose payloads
107
- - missing short-circuit evaluation in expensive conditions
108
- - recomputing invariants inside loops (loop-invariant code)
109
- - suboptimal batch sizes (too small = overhead, too large = latency)
110
- - inefficient algorithms for sorting/searching already-ordered data
111
- - redundant validation/sanitization of trusted internal data
112
- - missing connection/resource reuse (open-close per operation)
113
- - [...]
114
-
115
- </if>
116
-
117
- <if condition="<getopt-option-security/> is equal `true`">
118
-
119
- Focus on *security* only - and do *not* investigate logic,
120
- semantics, performance, or efficiency problems.
121
-
122
- Analysis Hints (not exhaustive, just indicators):
123
- - unsafe data deserialization
124
- - missing input data validation/sanitization
125
- - broken authentication/authorization
126
- - sensitive-data exposure
127
- - path traversal
128
- - unsafe cryptography
129
- - hard-coded secrets
130
- - vulnerable dependencies
131
- - injection flaws
132
- - cross-site scripting (XSS) and output-encoding gaps
133
- - cross-site request forgery (CSRF) and missing anti-forgery tokens
134
- - insecure direct object references (IDOR)
135
- - server-side request forgery (SSRF)
136
- - insecure or missing transport encryption (TLS)
137
- - weak session management (fixation, predictable tokens)
138
- - missing rate limiting/anti-automation controls
139
- - overly permissive CORS or file permissions
140
- - verbose error messages leaking internals
141
- - unsafe randomness for security-sensitive values
142
- - mass assignment / over-binding of request parameters
143
- - security misconfiguration (default credentials, debug modes, exposed admin endpoints)
144
- - missing or misconfigured security headers (CSP, HSTS, X-Frame-Options)
145
- - improper certificate/hostname validation (TLS verification disabled)
146
- - insufficient logging and monitoring of security events
147
- - race conditions / TOCTOU (time-of-check to time-of-use) flaws
148
- - integer overflow/underflow and buffer overflows
149
- - use-after-free and memory-safety violations
150
- - privilege escalation through improper privilege dropping
151
- - insecure file upload handling (unrestricted type/size, executable storage)
152
- - unsafe handling of untrusted regular expressions (ReDoS)
153
- - caching of sensitive data in shared or client-side caches
154
- - secrets or sensitive data leaking into logs, traces, or telemetry
155
- - insecure default-deny failures (fail-open instead of fail-closed)
156
- - missing integrity verification (unsigned updates, no subresource integrity)
157
- - excessive data exposure in API responses (returning more fields than needed)
158
- - improper resource cleanup leading to exhaustion (connection/file-descriptor leaks)
159
- - business-logic flaws (bypassable workflows, negative quantities, replay)
160
- - [...]
161
-
162
- </if>
163
-
164
- <if condition="<getopt-option-performance/> is NOT equal `true` and <getopt-option-security/> is NOT equal `true`">
165
-
166
- Focus on problems in the *logic* and *semantics* and the related
167
- *control flow* only - and do *not* investigate performance,
168
- efficiency, or security problems.
169
-
170
- Analysis Hints (not exhaustive, just indicators):
171
- - incorrect conditionals and boolean logic
172
- - off-by-one and boundary errors
173
- - operator misuse
174
- - mishandled edge cases
175
- - broken or missing error handling
176
- - incorrect async/await/promise handling
177
- - control-flow defects (unreachable code, missing breaks, wrong early returns)
178
- - state-mutation bugs
179
- - incorrect default values
180
- - null/undefined mishandling
181
- - type-coercion bugs
182
- - faulty parsing or merge/override semantics
183
- - race conditions and unsynchronized shared state
184
- - resource leaks (unclosed files, handles, connections)
185
- - inverted or swapped function arguments
186
- - incorrect loop termination or accumulator initialization
187
- - shadowed or reassigned variables changing intent
188
- - incomplete switch/case or enum coverage
189
- - silent exception swallowing
190
- - floating-point comparison and rounding errors
191
- - integer overflow/underflow or truncating division
192
- - sign and modulo errors with negative operands
193
- - reference vs. value semantics (aliasing, shared mutable defaults)
194
- - incorrect short-circuit evaluation or operator precedence
195
- - logical vs. bitwise operator confusion
196
- - negation mistakes in compound predicates
197
- - wrong comparison operator (`==` instead of `===`, `<` vs. `<=`, etc)
198
- - inverted condition or swapped if/else branches
199
- - dead or duplicated conditional branches
200
- - fall-through where a break or return was intended
201
- - missing or misplaced base case in recursion (non-termination)
202
- - mutation of a collection while iterating over it
203
- - incorrect index, key, or bounds when accessing collections
204
- - empty-collection or single-element edge cases unhandled
205
- - wrong order of operations in initialization or teardown
206
- - missing cleanup on early return, break, or exception path
207
- - double-free, use-after-free, or double-close of resources
208
- - incorrect time-zone, date arithmetic, or unit conversions
209
- - stale cache or memoization not invalidated on change
210
- - incorrect deep vs. shallow copy semantics
211
- - partial or non-atomic updates leaving inconsistent state
212
- - ignored or unchecked return values and status codes
213
- - error code vs. exception path mismatch
214
- - catching too broad an exception masking real failures
215
- - re-throwing without preserving the original cause
216
- - incorrect equality, hashing, or ordering for custom types
217
- - regex anchoring, greediness, or escaping mistakes
218
- - string encoding, normalization, or case-folding errors
219
- - missing `await` causing unhandled or dropped promises
220
- - incorrect promise concurrency (`all` vs. `allSettled`, races)
221
- - callback invoked zero times, twice, or out of order
222
- - unguarded re-entrancy or recursive lock acquisition
223
- - incorrect guard ordering allowing invalid states through
224
- - assumptions about iteration order of maps/sets/objects
225
- - [...]
226
-
227
- </if>
228
-
229
- You *MUST* not output anything in this STEP 2.
57
+ First, use the following <template/> to give a hint on this step:
58
+
59
+ <template>
60
+ <ase-tpl-bullet-secondary/> **ANALYSIS INVESTIGATION**
61
+ </template>
62
+
63
+ Dispatch the investigation to *sub-agents* via the `Agent`
64
+ tool so that *no* investigation details leak into the user-visible
65
+ transcript. The sub-agents perform the silent reading and checking;
66
+ only their final structured return values are consumed here.
67
+
68
+ For this, first determine the *analysis lens* <lens/>: set
69
+ <lens>performance</lens> if <getopt-option-performance/> is equal
70
+ `true`, set <lens>security</lens> if <getopt-option-security/> is
71
+ equal `true`, and set <lens>logic</lens> otherwise.
72
+
73
+ Then *silently* resolve `<getopt-arguments/>` to the list
74
+ <sources/> of individual source code files, expanding any
75
+ directory or wildcard references with the `Glob` tool. Then
76
+ partition <sources/>, preserving order, into at most *eight*
77
+ batches of roughly equal size (a single file yields a single
78
+ batch), and invoke the following tool once per batch, emitting
79
+ *all* invocations *in one single message* so they run in
80
+ *parallel*:
81
+
82
+ ```text
83
+ Agent(
84
+ description: "Analysis Investigation (<batch-index/>/<batch-count/>)",
85
+ subagent_type: "ase:ase-code-analyze",
86
+ prompt: "<lens/> <batch/>",
87
+ run_in_background: false
88
+ )
89
+ ```
90
+
91
+ Here <batch/> is the space-separated list of the source code file
92
+ paths of the corresponding batch, <batch-index/> is the 1-based
93
+ index of that batch, and <batch-count/> is the total number of
94
+ batches, so that each parallel invocation is distinguishable in
95
+ the progress display.
96
+
97
+ Parse the result message of each `Agent` tool invocation as a JSON
98
+ array and concatenate all those arrays. Then *deduplicate* the
99
+ combined list: when two problems share the same `file` and `line`,
100
+ *silently drop* all but the first one (sub-agents may have read
101
+ overlapping *related* files for comprehension). Finally sort the
102
+ list by `file` and then numerically by `line`, and set <problems/>
103
+ to that list.
104
+
105
+ You *MUST* *NOT* output anything at all in this STEP 2 beyond the
106
+ `Glob` and `Agent` tool invocations.
230
107
 
231
108
  </step>
232
109
 
@@ -235,7 +112,7 @@ problems in *performance* and *efficiency*, or problems in *security*.
235
112
  Before reporting, *apply the severity floor* selected via
236
113
  <getopt-option-severity/> (default `LOW`): define the ordinal rank
237
114
  `LOW`=1, `MEDIUM`=2, `HIGH`=3. *Keep* a detected problem if and only
238
- if its <severity/> is `ACCEPTED` *or* `rank(severity)` is greater
115
+ if its `severity` field is `ACCEPTED` *or* `rank(severity)` is greater
239
116
  than or equal to `rank(<getopt-option-severity/>)`; *silently drop*
240
117
  all other problems (they are neither reported nor persisted). With
241
118
  the default floor `LOW`, all problems are kept. `ACCEPTED` problems
@@ -250,9 +127,12 @@ problems in *performance* and *efficiency*, or problems in *security*.
250
127
  "ase-issue-" }` entry,
251
128
  and still emit the final hint <template/> below.
252
129
 
253
- In this STEP 3, for *EVERY* surviving problem, immediately report
254
- it with the following output <template/>, based on concise bullet
255
- points.
130
+ In this STEP 3, for *EVERY* surviving problem in <problems/>, set
131
+ <severity/> to its `severity` field, <title/> to its `title` field,
132
+ <description/> to its `description` field, <evidence/> to its
133
+ `evidence` field, and <trade-off/> to its `trade-off` field, and
134
+ immediately report it with the following output <template/>, based
135
+ on concise bullet points.
256
136
 
257
137
  <if condition="<getopt-option-performance/> is equal `true`">
258
138
 
@@ -288,45 +168,6 @@ problems in *performance* and *efficiency*, or problems in *security*.
288
168
 
289
169
  - Uniquely identify the problems with `P<n/>` where <n/> is 1, 2, ...
290
170
 
291
- - In <description/>, use *ultra brief* but still as *precise* as
292
- possible problem descriptions.
293
-
294
- - In <description/>, highlight *code* as <template>`<code/>`</template>
295
- and *key aspects* as <template>*<aspect/>*</template>.
296
-
297
- - In <description/>, add inline *references* to the related
298
- code positions in the form of either
299
- <template>(`<filename/>:<line-number/>`)</template>,
300
- <template>(`<filename/>:<line-number/>-<line-number/>`)</template> or
301
- <template>(`<filename/>#<function-or-method/>`)</template>.
302
-
303
- - In <description/>, classify the problem with a <severity/>
304
- of <template>LOW</template>, <template>MEDIUM</template>,
305
- <template>HIGH</template>, or <template>ACCEPTED</template>,
306
- ranked by the estimated *impact* of the problem. Use
307
- <template>ACCEPTED</template> when the problem is a deliberate,
308
- justified trade-off that should remain on record but is never
309
- dropped by the severity floor (see STEP 3).
310
-
311
- - For <title/> ultra-compress the <description/> to a concise,
312
- short, single sentence. Keep one inline reference to the code
313
- position which is most relevant to the problem.
314
-
315
- - <if condition="<getopt-option-performance/> is equal `true`">
316
- In <evidence/>, ground the finding by citing either the inferred
317
- *Big-O* time/space complexity (e.g. `O(n²)` reducible to `O(n)`)
318
- with the exact driving loop or recursion, or the matched
319
- performance *anti-pattern* (e.g. N+1 query, sync-in-loop, repeated
320
- recompute, string concat in loop), with an inline code reference.
321
- </if>
322
-
323
- - <if condition="<getopt-option-performance/> is equal `true`">
324
- In <trade-off/>, state the *cost* of the optimization (e.g.
325
- readability, additional memory for speed, added complexity), so
326
- the user can make an informed decision; use *none* if there is no
327
- meaningful trade-off.
328
- </if>
329
-
330
171
  - *Additionally*, persist all reported problems in a *single*
331
172
  `ase_kv_batch` call to the `ase` MCP server with `transactional`
332
173
  set to `true`. The `commands` parameter array of this call
@@ -74,11 +74,11 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
74
74
  diagram type per intent: `classDiagram` for class/method structure,
75
75
  `sequenceDiagram` for actor/message flow, or `flowchart TB` for
76
76
  boxes-and-lines component layouts. Then dispatch the rendering to
77
- the `ase-meta-diagram` sub-agent by calling the tool `Agent(name:
78
- "ase-meta-diagram", description: "Diagram Rendering", subagent_type:
79
- "ase:ase-meta-diagram", prompt: <mermaid-spec/>)` and reproduce its
80
- returned fenced code block verbatim in the response text. Do *not*
81
- hand-draw.
77
+ the `ase-meta-diagram` sub-agent by calling the tool
78
+ `Agent(description: "Diagram Rendering", subagent_type:
79
+ "ase:ase-meta-diagram", prompt: <mermaid-spec/>,
80
+ run_in_background: false)` and reproduce its returned fenced code
81
+ block verbatim in the response text. Do *not* hand-draw.
82
82
 
83
83
  Keep your explanation *brief* and *concise*.
84
84
  Output the result with the following <template/>:
@@ -95,11 +95,11 @@ Give *insights* into the project through the source code of <getopt-arguments/>.
95
95
  <mermaid-spec/> for a `flowchart TB` diagram with all modules as
96
96
  boxes and the imports between modules as the directed edges. Then
97
97
  dispatch the rendering to the `ase-meta-diagram` sub-agent by
98
- calling the tool `Agent(name: "ase-meta-diagram", description:
99
- "Diagram Rendering", subagent_type: "ase:ase-meta-diagram", prompt:
100
- <mermaid-spec/>)` and reproduce its returned fenced code block
101
- verbatim in the response text. Do not display any further
102
- explanation except for this diagram.
98
+ calling the tool `Agent(description: "Diagram Rendering",
99
+ subagent_type: "ase:ase-meta-diagram", prompt: <mermaid-spec/>,
100
+ run_in_background: false)` and reproduce its
101
+ returned fenced code block verbatim in the response text. Do not
102
+ display any further explanation except for this diagram.
103
103
  </step>
104
104
  </flow>
105
105
 
@@ -39,25 +39,42 @@ related to a set of code quality aspects.
39
39
  <ase-tpl-bullet-secondary/> **LINT INVESTIGATION**
40
40
  </template>
41
41
 
42
- Dispatch the investigation to a *sub-agent* via the `Agent`
42
+ Dispatch the investigation to *sub-agents* via the `Agent`
43
43
  tool so that *no* investigation details leak into the user-visible
44
- transcript. The sub-agent performs the silent reading and checking;
45
- only its final structured return value is consumed here.
46
-
47
- For this, invoke *exactly once* the tool:
44
+ transcript. The sub-agents perform the silent reading and checking;
45
+ only their final structured return values are consumed here.
46
+
47
+ For this, first *silently* resolve `<getopt-arguments/>` to the
48
+ list <sources/> of individual source code files, expanding any
49
+ directory or wildcard references with the `Glob` tool. Then
50
+ partition <sources/>, preserving order, into at most *eight*
51
+ batches of roughly equal size (a single file yields a single
52
+ batch), and invoke the following tool once per batch, emitting
53
+ *all* invocations *in one single message* so they run in
54
+ *parallel*:
48
55
 
49
56
  ```text
50
57
  Agent(
51
- name: "ase-code-lint",
52
- description: "Lint Investigation",
53
- subagent_type: "ase:ase-code-lint",
54
- mode: "plan",
55
- prompt: <getopt-arguments/>
58
+ description: "Lint Investigation (<batch-index/>/<batch-count/>)",
59
+ subagent_type: "ase:ase-code-lint",
60
+ prompt: <batch/>,
61
+ run_in_background: false
56
62
  )
57
63
  ```
58
64
 
59
- Parse the single result message of the `Agent` tool as a JSON array
60
- and set <problems/> to that list.
65
+ Here <batch/> is the space-separated list of the source code file
66
+ paths of the corresponding batch, <batch-index/> is the 1-based
67
+ index of that batch, and <batch-count/> is the total number of
68
+ batches, so that each parallel invocation is distinguishable in
69
+ the progress display.
70
+
71
+ Parse the result message of each `Agent` tool invocation as a JSON
72
+ array and concatenate all those arrays. Then *deduplicate* the
73
+ combined list: when two problems share the same `file`, `line`, and
74
+ `aspect`, *silently drop* all but the first one (sub-agents may
75
+ have read overlapping *related* files for comprehension). Finally
76
+ sort the list by `file` and then numerically by `line`, and set
77
+ <problems/> to that list.
61
78
 
62
79
  Then *apply the severity floor* selected via <getopt-option-severity/>
63
80
  (default `LOW`): define the ordinal rank `LOW`=1, `MEDIUM`=2,
@@ -260,7 +277,7 @@ related to a set of code quality aspects.
260
277
 
261
278
  <expand name="custom-dialog" arg1="--other">
262
279
  CORRECTION: How would you like to proceed with this proposed correction?
263
- ACCEPT: Apply the proposed correction.
280
+ ACCEPT: Apply this proposed correction.
264
281
  REJECT: Skip this proposed correction.
265
282
  </expand>
266
283
 
@@ -159,11 +159,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
159
159
  TB`, `stateDiagram-v2`, `sequenceDiagram`, `classDiagram`, or
160
160
  `erDiagram`, depending on intent) and dispatching the rendering
161
161
  to the `ase-meta-diagram` sub-agent by calling the tool
162
- `Agent(name: "ase-meta-diagram", description: "Diagram
163
- Rendering", subagent_type: "ase:ase-meta-diagram", prompt:
164
- <mermaid-spec/>)`, reproducing its returned fenced code block
165
- verbatim. Omit <optional-diagram/> entirely for simple or
166
- purely local situations.
162
+ `Agent(description: "Diagram Rendering", subagent_type:
163
+ "ase:ase-meta-diagram", prompt: <mermaid-spec/>,
164
+ run_in_background: false)`, reproducing its
165
+ returned fenced code block verbatim. Omit <optional-diagram/>
166
+ entirely for simple or purely local situations.
167
167
 
168
168
  </step>
169
169
 
@@ -39,28 +39,42 @@ Analyze documents for spelling, punctuation, or grammar errors
39
39
  <ase-tpl-bullet-secondary/> **PROOFREADING INVESTIGATION**
40
40
  </template>
41
41
 
42
- Dispatch the investigation to a *sub-agent* via the `Agent`
42
+ Dispatch the investigation to *sub-agents* via the `Agent`
43
43
  tool so that *no* investigation details leak into the user-visible
44
- transcript. The sub-agent performs the silent reading and checking;
45
- only its final structured return value is consumed here.
46
-
47
- For this, invoke *exactly once* the tool:
44
+ transcript. The sub-agents perform the silent reading and checking;
45
+ only their final structured return values are consumed here.
46
+
47
+ For this, first *silently* resolve `<getopt-arguments/>` to the
48
+ list <documents/> of individual document files, expanding any
49
+ directory or wildcard references with the `Glob` tool. Then
50
+ partition <documents/>, preserving order, into at most *eight*
51
+ batches of roughly equal size (a single document yields a single
52
+ batch), and invoke the following tool once per batch, emitting
53
+ *all* invocations *in one single message* so they run in
54
+ *parallel*:
48
55
 
49
56
  ```text
50
57
  Agent(
51
- name: "ase-docs-proofread",
52
- description: "Proofread Investigation",
53
- subagent_type: "ase:ase-docs-proofread",
54
- mode: "plan",
55
- prompt: <getopt-arguments/>
58
+ description: "Proofread Investigation (<batch-index/>/<batch-count/>)",
59
+ subagent_type: "ase:ase-docs-proofread",
60
+ prompt: <batch/>,
61
+ run_in_background: false
56
62
  )
57
63
  ```
58
64
 
59
- Parse the single result message of the `Agent` tool as a JSON array
60
- and set <problems/> to that list.
65
+ Here <batch/> is the space-separated list of the document file
66
+ paths of the corresponding batch, <batch-index/> is the 1-based
67
+ index of that batch, and <batch-count/> is the total number of
68
+ batches, so that each parallel invocation is distinguishable in
69
+ the progress display.
70
+
71
+ Parse the result message of each `Agent` tool invocation as a JSON
72
+ array, concatenate all those arrays, sort the combined list by
73
+ `file` and then numerically by `line`, and set <problems/> to that
74
+ list.
61
75
 
62
76
  You *MUST* *NOT* output anything at all in this step 1 beyond the
63
- single `Agent` tool invocation.
77
+ `Glob` and `Agent` tool invocations.
64
78
  </step>
65
79
 
66
80
  2. <step id="STEP 2: Summary">
@@ -192,7 +206,7 @@ Analyze documents for spelling, punctuation, or grammar errors
192
206
 
193
207
  <expand name="custom-dialog" arg1="--other">
194
208
  CORRECTION: How would you like to proceed with this proposed correction?
195
- ACCEPT: Apply the proposed correction.
209
+ ACCEPT: Apply this proposed correction.
196
210
  REJECT: Skip this proposed correction.
197
211
  </expand>
198
212
 
@@ -33,10 +33,10 @@ Query foreign LLM for: <query><getopt-arguments/></query>
33
33
 
34
34
  ```text
35
35
  Agent(
36
- name: "ase-meta-chat",
37
- description: "Query Foreign LLM for Chat",
38
- subagent_type: "ase:ase-meta-chat",
39
- prompt: <query/>
36
+ description: "Query Foreign LLM for Chat",
37
+ subagent_type: "ase:ase-meta-chat",
38
+ prompt: <query/>,
39
+ run_in_background: false
40
40
  )
41
41
  ```
42
42
 
@@ -301,9 +301,9 @@ Procedure
301
301
  labels ultra short (basenames or module names only).
302
302
 
303
303
  2. Dispatch the rendering to the `ase-meta-diagram` sub-agent by
304
- calling the tool `Agent(name: "ase-meta-diagram",
305
- description: "Diagram Rendering", subagent_type:
306
- "ase:ase-meta-diagram", prompt: "<mermaid-spec/>")` and capture
304
+ calling the tool `Agent(description: "Diagram Rendering",
305
+ subagent_type: "ase:ase-meta-diagram", prompt:
306
+ "<mermaid-spec/>", run_in_background: false)` and capture
307
307
  its returned `text` field as <diagram/>.
308
308
 
309
309
  4. Then emit the following <template/>, showing <diagram/> and
@@ -83,10 +83,10 @@ by querying *multiple* AIs for an *optimal consensus*.
83
83
 
84
84
  ```text
85
85
  Agent(
86
- name: "ase-meta-chat-<arg2/>",
87
- description: "Query Foreign LLM: <arg1/>",
88
- subagent_type: "ase:ase-meta-chat",
89
- prompt: "<arg2/> <query/>"
86
+ description: "Query Foreign LLM: <arg1/>",
87
+ subagent_type: "ase:ase-meta-chat",
88
+ prompt: "<arg2/> <query/>",
89
+ run_in_background: false
90
90
  )
91
91
  ```
92
92
 
@@ -94,7 +94,8 @@ by querying *multiple* AIs for an *optimal consensus*.
94
94
 
95
95
  Query only those foreign models whose token is contained in
96
96
  <getopt-option-models/> (where `all` selects every model); silently
97
- skip all others:
97
+ skip all others. Emit *all* these `Agent` tool invocations *in one
98
+ single message* so they run in *parallel*:
98
99
 
99
100
  <if condition="<getopt-option-models/> contains `all` OR <getopt-option-models/> contains `chatgpt`">
100
101
  <expand name="agent" arg1="OpenAI ChatGPT" arg2="chatgpt"></expand>
@@ -83,11 +83,10 @@ Procedure
83
83
 
84
84
  ```text
85
85
  Agent(
86
- name: "ase-meta-review",
87
- description: "Review Investigation",
88
- subagent_type: "ase:ase-meta-review",
89
- mode: "plan",
90
- prompt: "Review the staged changes."
86
+ description: "Review Investigation",
87
+ subagent_type: "ase:ase-meta-review",
88
+ prompt: "Review the staged changes.",
89
+ run_in_background: false
91
90
  )
92
91
  ```
93
92
 
@@ -149,7 +148,7 @@ Procedure
149
148
  Then render a *three-column table* with one row per finding by
150
149
  using the following output <template/>. For each finding, repeat
151
150
  the third line, set <severity/> to its `severity` field, set
152
- <dimension/> to its `dimension` field set <location/> to its
151
+ <dimension/> to its `dimension` field, set <location/> to its
153
152
  `location` field, and set <finding/> to its `finding` field.
154
153
 
155
154
  In the <location/> column, markup the `file:line` reference
@@ -41,10 +41,10 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
41
41
  <define name="agent">
42
42
  ```text
43
43
  Agent(
44
- name: "ase-meta-search-<arg1/>",
45
- description: "Query Web Search Service: <arg1/>",
46
- subagent_type: "ase:ase-meta-search",
47
- prompt: <content/>
44
+ description: "Query Web Search Service: <arg1/>",
45
+ subagent_type: "ase:ase-meta-search",
46
+ prompt: <content/>,
47
+ run_in_background: false
48
48
  )
49
49
  ```
50
50
  </define>
@@ -64,6 +64,9 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
64
64
  A backend is *selected* if `all` is in <getopt-option-services/> *OR*
65
65
  that backend's own name is in <getopt-option-services/>.
66
66
 
67
+ Then invoke the following tool once per *selected* backend, emitting
68
+ *all* invocations *in one single message* so they run in *parallel*:
69
+
67
70
  If the `perplexity` backend is *selected* and the MCP tool
68
71
  `perplexity_search` from the MCP server `search-perplexity` is available:
69
72
 
package/dst/ase-hello.js DELETED
@@ -1,23 +0,0 @@
1
- /*
2
- ** Agentic Software Engineering (ASE)
3
- ** Copyright (c) 2025-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
5
- */
6
- import { Chalk } from "chalk";
7
- /* auto-detecting chalk instance: colors on a TTY and degrades cleanly
8
- on pipes/redirects (unlike ase-statusline.ts, which forces level 1
9
- because Claude Code pipes its stdout) */
10
- const c = new Chalk();
11
- /* CLI command "ase hello" */
12
- export default class HelloCommand {
13
- register(program) {
14
- program
15
- .command("hello")
16
- .description("Print a nice greeting to the terminal")
17
- .option("-s, --subject <subject>", "subject to greet", "World")
18
- .action((opts) => {
19
- process.stdout.write(c.blue(`Hello ${opts.subject}!`) + "\n");
20
- process.exit(0);
21
- });
22
- }
23
- }