@rse/ase 0.9.47 → 0.9.49
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-artifact.js +3 -1
- package/dst/ase-compat.js +1 -1
- package/dst/ase-config.js +76 -13
- package/dst/ase-diagram.js +10 -15
- package/dst/ase-getopt.js +66 -60
- package/dst/ase-guidance.js +89 -0
- package/dst/ase-hook.js +46 -66
- package/dst/ase-kv.js +18 -43
- package/dst/ase-mcp.js +1 -1
- package/dst/ase-meta.js +1 -1
- package/dst/ase-service.js +4 -6
- package/dst/ase-setup.js +24 -39
- package/dst/ase-skills.js +1 -1
- package/dst/ase-statusline.js +42 -18
- package/dst/ase-stdio.js +25 -0
- package/dst/ase-task.js +11 -11
- package/dst/ase.js +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/meta/ase-common-task.md +9 -0
- package/plugin/meta/ase-constitution.md +17 -6
- package/plugin/meta/ase-getopt.md +11 -1
- package/plugin/meta/ase-skill.md +92 -4
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +8 -6
- package/plugin/skills/ase-arch-discover/SKILL.md +12 -0
- package/plugin/skills/ase-code-analyze/SKILL.md +6 -4
- package/plugin/skills/ase-code-lint/SKILL.md +16 -0
- package/plugin/skills/ase-docs-proofread/SKILL.md +10 -0
- package/plugin/skills/ase-help-intent/SKILL.md +3 -8
- package/plugin/skills/ase-help-skill/SKILL.md +10 -2
- package/plugin/skills/ase-help-skill/catalog.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +8 -0
- package/plugin/skills/ase-meta-commit/SKILL.md +13 -0
- package/plugin/skills/ase-meta-config/SKILL.md +165 -0
- package/plugin/skills/ase-meta-config/help.md +136 -0
- package/plugin/skills/ase-meta-diaboli/help.md +1 -1
- package/plugin/skills/ase-meta-diff/SKILL.md +22 -0
- package/plugin/skills/ase-meta-review/SKILL.md +13 -1
- package/plugin/skills/ase-sync-export/SKILL.md +14 -0
- package/plugin/skills/ase-sync-import/SKILL.md +10 -0
- package/plugin/skills/ase-task-list/SKILL.md +21 -0
- package/plugin/skills/ase-task-view/SKILL.md +21 -0
- package/plugin/skills/ase-meta-persona/SKILL.md +0 -84
- package/plugin/skills/ase-meta-persona/help.md +0 -60
|
@@ -76,6 +76,15 @@ set placeholders into the context as a side-effect.
|
|
|
76
76
|
⧉ **ASE**: ✪ skill: **<getopt-skill/>**, ▶ ERROR: option parsing failed: **<text/>**
|
|
77
77
|
</template>
|
|
78
78
|
|
|
79
|
+
Directly *after* this error <template/>, and *before* stopping, give
|
|
80
|
+
the corrective hint by expanding the following (which, depending on
|
|
81
|
+
the configured <ase-guidance-level/>, may expand into nothing and
|
|
82
|
+
hence emit no output at all):
|
|
83
|
+
|
|
84
|
+
<ase-tpl-hint level="verbose">
|
|
85
|
+
Run `/<getopt-skill/> --help` for the accepted options and arguments of this skill.
|
|
86
|
+
</ase-tpl-hint>
|
|
87
|
+
|
|
79
88
|
5. **Parsing JSON Result**:
|
|
80
89
|
The tool returned a single `text` content payload containing JSON.
|
|
81
90
|
Parse this JSON in <text/> now into <getopt-result/> by recognizing
|
|
@@ -100,7 +109,8 @@ set placeholders into the context as a side-effect.
|
|
|
100
109
|
whose long name starts with `int-`.
|
|
101
110
|
|
|
102
111
|
7. **Display Results**:
|
|
103
|
-
|
|
112
|
+
If <ase-guidance-level/> is equal to `normal` or `verbose`,
|
|
113
|
+
output the following <template/>:
|
|
104
114
|
|
|
105
115
|
<template>
|
|
106
116
|
⧉ **ASE**: ✪ skill: **<getopt-skill/>**, ▶ options: <getopt-info/>
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -214,15 +214,17 @@ Skill Identification
|
|
|
214
214
|
|
|
215
215
|
In case <skill/> later becomes *not* empty by defining it as <skill
|
|
216
216
|
name="<name/>"><body/></skill>, set <skill-name><name/></skill-name>
|
|
217
|
-
(set skill name to name), and then (but only if `$1` is *NOT* equal
|
|
218
|
-
to `-h` or `--help`)
|
|
217
|
+
(set skill name to name), and then (but only if ((`$1` is *NOT* equal
|
|
218
|
+
to `-h` or `--help`) *AND* (<ase-guidance-level/> is equal to `normal`
|
|
219
|
+
or `verbose`))) you *MUST* once output the following output
|
|
219
220
|
<template/>:
|
|
220
221
|
|
|
221
222
|
<template>
|
|
222
223
|
⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<skill/>**, ▶ status: **skill started**
|
|
223
224
|
</template>
|
|
224
225
|
|
|
225
|
-
Later (but only if `$1` is *NOT* equal to `-h` or `--help`)
|
|
226
|
+
Later (but only if ((`$1` is *NOT* equal to `-h` or `--help`) *AND*
|
|
227
|
+
(<ase-guidance-level/> is equal to `normal` or `verbose`))), once
|
|
226
228
|
this skill finally will stop processing, you *MUST* once output the
|
|
227
229
|
following output <template/>:
|
|
228
230
|
|
|
@@ -231,7 +233,8 @@ Skill Identification
|
|
|
231
233
|
</template>
|
|
232
234
|
|
|
233
235
|
- *IMPORTANT*: Set <objective></objective> (set to empty).
|
|
234
|
-
Then, in case <objective/> later becomes *not* empty
|
|
236
|
+
Then, in case <objective/> later becomes *not* empty
|
|
237
|
+
(but only if <ase-guidance-level/> is equal to `normal` or `verbose`),
|
|
235
238
|
you *MUST* once output the following output <template/>:
|
|
236
239
|
|
|
237
240
|
<template>
|
|
@@ -292,6 +295,65 @@ Artifact Boxing Transparency
|
|
|
292
295
|
deterministically skip or suppress and *win* over the implicit decisions
|
|
293
296
|
above. Where no such branches exist, the decisions above apply.
|
|
294
297
|
|
|
298
|
+
Guidance Hint Level
|
|
299
|
+
-------------------
|
|
300
|
+
|
|
301
|
+
- *IMPORTANT*: The *guidance* of the agent (indicated by
|
|
302
|
+
<ase-guidance-level/> configuration) classifies how many
|
|
303
|
+
*unsolicited hints* -- pointers to the available *ASE* skills, to
|
|
304
|
+
their options, and to the recommended next operations, which the
|
|
305
|
+
user did *not* explicitly ask for -- you *MUST* emit in addition to
|
|
306
|
+
the requested result.
|
|
307
|
+
|
|
308
|
+
- *IMPORTANT*: Guidance modulates only the *hints*, per the four
|
|
309
|
+
levels below. It *MUST* *NOT* alter the *communication style*
|
|
310
|
+
(governed exclusively by the persona), it *MUST* *NOT* alter the
|
|
311
|
+
*work depth* or the *output visibility* (governed exclusively by the
|
|
312
|
+
boxing), and it *MUST* *NOT* suppress, reduce, or expand any
|
|
313
|
+
*requested* output. In particular, guidance *MUST* *NOT* apply to:
|
|
314
|
+
|
|
315
|
+
- the *manual page* emitted for `-h`/`--help`, which is
|
|
316
|
+
explicitly requested,
|
|
317
|
+
- the *skill catalog*, *manual page*, and *command proposal*
|
|
318
|
+
results of the `ase-help-skill` and `ase-help-intent` skills,
|
|
319
|
+
which are explicitly requested,
|
|
320
|
+
- the *option affordance* lines of a user dialog (e.g. `Please
|
|
321
|
+
choose *one* option by typing ...`), which are functional parts
|
|
322
|
+
of the dialog and not hints,
|
|
323
|
+
- the *artifact state* lines of a skill (e.g. `plan loaded`, `plan
|
|
324
|
+
created`, `task given`) and every `ERROR:` line, which carry
|
|
325
|
+
state rather than pointers.
|
|
326
|
+
|
|
327
|
+
The *skill identification* chrome (the `skill started`, `skill
|
|
328
|
+
finished`, and `objective` lines) is the sole exception: it is
|
|
329
|
+
*decoration* rather than result, so it is gated on `normal` and
|
|
330
|
+
`verbose` directly in the `Skill Identification` section above.
|
|
331
|
+
|
|
332
|
+
- *IMPORTANT*: Every hint carries a *level* -- `minimal`, `normal`,
|
|
333
|
+
or `verbose` -- and is emitted only if the configured
|
|
334
|
+
<ase-guidance-level/> *includes* that level:
|
|
335
|
+
|
|
336
|
+
- If <ase-guidance-level/> is `none`:
|
|
337
|
+
- Hints emitted: *none*
|
|
338
|
+
- If <ase-guidance-level/> is `minimal`:
|
|
339
|
+
- Hints emitted: `minimal` -- the *essential* pointers only,
|
|
340
|
+
i.e. those without which the just-produced result cannot be
|
|
341
|
+
consumed at all (such as the follow-up command that turns
|
|
342
|
+
persisted findings into actual changes)
|
|
343
|
+
- If <ase-guidance-level/> is `normal`:
|
|
344
|
+
- Hints emitted: `minimal` *and* `normal` -- additionally the
|
|
345
|
+
*canonical next step* of the finished skill
|
|
346
|
+
- If <ase-guidance-level/> is `verbose`:
|
|
347
|
+
- Hints emitted: `minimal`, `normal`, *and* `verbose` --
|
|
348
|
+
additionally the *unused options* of the current skill, the
|
|
349
|
+
*related* skills, and the *configuration* skills
|
|
350
|
+
- If <ase-guidance-level/> is empty or not set:
|
|
351
|
+
- Treat it as `normal`
|
|
352
|
+
|
|
353
|
+
- *IMPORTANT*: A hint *MUST* be emitted *exclusively* through the
|
|
354
|
+
`<ase-tpl-hint/>` template pattern below, and *never* as free-text
|
|
355
|
+
prose, so that its suppression is uniform across all skills.
|
|
356
|
+
|
|
295
357
|
Template Patterns
|
|
296
358
|
-----------------
|
|
297
359
|
|
|
@@ -347,6 +409,32 @@ Template Patterns
|
|
|
347
409
|
|
|
348
410
|
</template>
|
|
349
411
|
|
|
412
|
+
- When `<ase-tpl-hint level="<level/>"><content/></ase-tpl-hint>`
|
|
413
|
+
should be expanded, first determine whether the hint passes the
|
|
414
|
+
configured guidance level (see `Guidance Hint Level` above):
|
|
415
|
+
|
|
416
|
+
- Set <emit>false</emit>.
|
|
417
|
+
- If <ase-guidance-level/> is `minimal` and <level/> is `minimal`,
|
|
418
|
+
set <emit>true</emit>.
|
|
419
|
+
- If <ase-guidance-level/> is `normal` and <level/> is `minimal`
|
|
420
|
+
or `normal`, set <emit>true</emit>.
|
|
421
|
+
- If <ase-guidance-level/> is `verbose` and <level/> is `minimal`,
|
|
422
|
+
`normal`, or `verbose`, set <emit>true</emit>.
|
|
423
|
+
- If <ase-guidance-level/> is empty or not set, treat it as
|
|
424
|
+
`normal` and apply the corresponding decision above.
|
|
425
|
+
|
|
426
|
+
Then dispatch on <emit/>:
|
|
427
|
+
|
|
428
|
+
<if condition="<emit/> is `true`">
|
|
429
|
+
<template>
|
|
430
|
+
⧉ **ASE**: ▷ hint [<level/>]: **<content/>**
|
|
431
|
+
</template>
|
|
432
|
+
</if>
|
|
433
|
+
<else>
|
|
434
|
+
This construct is expanded into *nothing*.
|
|
435
|
+
Do not output anything.
|
|
436
|
+
</else>
|
|
437
|
+
|
|
350
438
|
- When `<ase-tpl-boxline><line/></ase-tpl-boxline>` should be expanded, use:
|
|
351
439
|
|
|
352
440
|
<if condition="<line/> is not empty">
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.49",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -465,14 +465,16 @@ interface quality, quality attributes, and architecture governance.
|
|
|
465
465
|
"<title/>: <description/>" }` entry per reported PROBLEM and one
|
|
466
466
|
`{ command: "set", key: "ase-issue-T<n/>", val: "<title/>:
|
|
467
467
|
<description/>" }` entry per reported TRADEOFF.
|
|
468
|
-
</step>
|
|
469
468
|
|
|
470
|
-
|
|
471
|
-
|
|
469
|
+
Finally, give a final hint by expanding the following (which,
|
|
470
|
+
depending on the configured <ase-guidance-level/>, may expand into
|
|
471
|
+
nothing and hence emit no output at all):
|
|
472
|
+
|
|
473
|
+
<ase-tpl-hint level="minimal">
|
|
474
|
+
For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve P{n}` or `/ase-code-resolve T{n}` in the same or even a different session.
|
|
475
|
+
</ase-tpl-hint>
|
|
472
476
|
|
|
473
|
-
<template>
|
|
474
|
-
⧉ **ASE**: ↪ hint: **For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve P{n}` or `/ase-code-resolve T{n}` in the same or even a different session.**
|
|
475
|
-
</template>
|
|
476
477
|
</step>
|
|
478
|
+
|
|
477
479
|
</flow>
|
|
478
480
|
|
|
@@ -238,6 +238,18 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
238
238
|
[...]
|
|
239
239
|
| **<name-N/>** | `<package-N/>` | <version-N/> | **<downloads-N/>** | **<stars-N/>** | **<updated-N/>** | <created-N/> | <deps-N/> |
|
|
240
240
|
</template>
|
|
241
|
+
|
|
242
|
+
3. Finally, give the closing hints by expanding the following
|
|
243
|
+
(which, depending on the configured <ase-guidance-level/>, may
|
|
244
|
+
each expand into nothing and hence emit no output at all):
|
|
245
|
+
|
|
246
|
+
<ase-tpl-hint level="normal">
|
|
247
|
+
To pick a single component from the ranking against weighted criteria, use `/ase-meta-evaluate`.
|
|
248
|
+
</ase-tpl-hint>
|
|
249
|
+
|
|
250
|
+
<ase-tpl-hint level="verbose">
|
|
251
|
+
Use `/ase-arch-discover --limit` to widen the candidate set, `--staleness` to change the aging threshold, and `--small-scope` to prefer small, focused components.
|
|
252
|
+
</ase-tpl-hint>
|
|
241
253
|
</step>
|
|
242
254
|
</flow>
|
|
243
255
|
|
|
@@ -196,11 +196,13 @@ problems in *performance* and *efficiency*, or problems in *security*.
|
|
|
196
196
|
followed by one `{ command: "set", key: "ase-issue-P<n/>", val:
|
|
197
197
|
"<title/>: <description/>" }` entry per reported problem.
|
|
198
198
|
|
|
199
|
-
Finally,
|
|
199
|
+
Finally, give a final hint by expanding the following (which,
|
|
200
|
+
depending on the configured <ase-guidance-level/>, may expand into
|
|
201
|
+
nothing and hence emit no output at all):
|
|
200
202
|
|
|
201
|
-
<
|
|
202
|
-
|
|
203
|
-
</
|
|
203
|
+
<ase-tpl-hint level="minimal">
|
|
204
|
+
For deeper analysis, suggestions on solution approaches and then final problem resolution, use `/ase-code-resolve P{n}` in the same or even a different session.
|
|
205
|
+
</ase-tpl-hint>
|
|
204
206
|
|
|
205
207
|
You *MUST* not output anything else in this STEP 3,
|
|
206
208
|
especially not any further explanations.
|
|
@@ -431,6 +431,22 @@ related to a set of code quality aspects.
|
|
|
431
431
|
<ase-tpl-bullet-secondary/> **LINT FINISHED**
|
|
432
432
|
</template>
|
|
433
433
|
|
|
434
|
+
5. Finally, give the closing hints by expanding the following
|
|
435
|
+
(which, depending on the configured <ase-guidance-level/>, may
|
|
436
|
+
each expand into nothing and hence emit no output at all):
|
|
437
|
+
|
|
438
|
+
<if condition="at least one problem in <problems/> was left uncorrected">
|
|
439
|
+
<ase-tpl-hint level="normal">
|
|
440
|
+
For problems whose correction demands more than a local edit, use `/ase-code-resolve` to derive and apply a full solution approach.
|
|
441
|
+
</ase-tpl-hint>
|
|
442
|
+
</if>
|
|
443
|
+
|
|
444
|
+
<if condition="<getopt-option-auto/> is not equal `true`">
|
|
445
|
+
<ase-tpl-hint level="verbose">
|
|
446
|
+
Use `/ase-code-lint --auto` to apply all corrections unattended, and `--severity` to raise the reporting floor.
|
|
447
|
+
</ase-tpl-hint>
|
|
448
|
+
</if>
|
|
449
|
+
|
|
434
450
|
</step>
|
|
435
451
|
|
|
436
452
|
</flow>
|
|
@@ -322,6 +322,16 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
322
322
|
<ase-tpl-bullet-secondary/> **PROOFREAD FINISHED**
|
|
323
323
|
</template>
|
|
324
324
|
|
|
325
|
+
5. Finally, give the closing hint by expanding the following
|
|
326
|
+
(which, depending on the configured <ase-guidance-level/>, may
|
|
327
|
+
expand into nothing and hence emit no output at all):
|
|
328
|
+
|
|
329
|
+
<if condition="<getopt-option-auto/> is not equal `true`">
|
|
330
|
+
<ase-tpl-hint level="verbose">
|
|
331
|
+
Use `/ase-docs-proofread --auto` to apply all corrections unattended.
|
|
332
|
+
</ase-tpl-hint>
|
|
333
|
+
</if>
|
|
334
|
+
|
|
325
335
|
</step>
|
|
326
336
|
|
|
327
337
|
</flow>
|
|
@@ -102,16 +102,11 @@ catalog you match <intent/> against:
|
|
|
102
102
|
<template>
|
|
103
103
|
<ase-tpl-head title="SKILL COMMAND PROPOSAL"/>
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
○ <intent/>
|
|
107
|
-
|
|
108
|
-
● **COMMAND**:
|
|
109
|
-
⌘ `<command/>`
|
|
110
|
-
|
|
111
|
-
● **RATIONALE**:
|
|
112
|
-
○ <rationale/>
|
|
105
|
+
❯ `<command/>`
|
|
113
106
|
|
|
114
107
|
<ase-tpl-foot title="SKILL COMMAND PROPOSAL"/>
|
|
108
|
+
|
|
109
|
+
**RATIONALE**: <rationale/>
|
|
115
110
|
</template>
|
|
116
111
|
|
|
117
112
|
4. *Dispatch Command*:
|
|
@@ -63,9 +63,17 @@ the *sole* index <skill-ref/> is resolved against:
|
|
|
63
63
|
<catalog/>
|
|
64
64
|
|
|
65
65
|
<ase-tpl-foot title="SKILL CATALOG"/>
|
|
66
|
-
|
|
67
|
-
⧉ **ASE**: ✪ skill: **ase-help-skill**, ▶ hint: **run `/ase-help-skill ase-xxx-xxx` for manual page of individual skill**
|
|
68
66
|
</template>
|
|
67
|
+
|
|
68
|
+
The rendered <catalog/> itself was explicitly requested and
|
|
69
|
+
hence is *always* emitted. Only the trailing pointer to the
|
|
70
|
+
per-skill manual page is a *hint*, so emit it by expanding the
|
|
71
|
+
following (which, depending on the configured
|
|
72
|
+
<ase-guidance-level/>, may expand into nothing):
|
|
73
|
+
|
|
74
|
+
<ase-tpl-hint level="normal">
|
|
75
|
+
run `/ase-help-skill ase-xxx-xxx` for manual page of individual skill
|
|
76
|
+
</ase-tpl-hint>
|
|
69
77
|
</if>
|
|
70
78
|
|
|
71
79
|
2. Set <skill-ref-raw/> to <skill-ref/> with only its leading and
|
|
@@ -271,6 +271,14 @@ Honor the following tenets throughout the brainstorming:
|
|
|
271
271
|
<ase-tpl-bullet-signal/> **RECOMMENDED IDEA**: <recommendation/>
|
|
272
272
|
</template>
|
|
273
273
|
|
|
274
|
+
5. Finally, give the closing hint by expanding the following (which,
|
|
275
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
276
|
+
into nothing and hence emit no output at all):
|
|
277
|
+
|
|
278
|
+
<ase-tpl-hint level="normal">
|
|
279
|
+
To turn the recommended idea into a plan, use `/ase-task-edit`; to turn it directly into code, use `/ase-code-craft`.
|
|
280
|
+
</ase-tpl-hint>
|
|
281
|
+
|
|
274
282
|
</step>
|
|
275
283
|
|
|
276
284
|
</flow>
|
|
@@ -71,6 +71,19 @@ currently staged Git changes.
|
|
|
71
71
|
|
|
72
72
|
Do *not* output any further explanation.
|
|
73
73
|
|
|
74
|
+
Finally, give the closing hint by expanding the following (which,
|
|
75
|
+
depending on the configured <ase-guidance-level/>, may expand into
|
|
76
|
+
nothing and hence emit no output at all):
|
|
77
|
+
|
|
78
|
+
<if condition="
|
|
79
|
+
a `CHANGELOG.md` file exists in the project (or in any affected
|
|
80
|
+
sub-package) and is *not* itself part of the staged changes
|
|
81
|
+
">
|
|
82
|
+
<ase-tpl-hint level="normal">
|
|
83
|
+
The staged changes do not touch `CHANGELOG.md` -- use `/ase-meta-changelog` to update its entries before committing.
|
|
84
|
+
</ase-tpl-hint>
|
|
85
|
+
</if>
|
|
86
|
+
|
|
74
87
|
</step>
|
|
75
88
|
|
|
76
89
|
</flow>
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-config
|
|
3
|
+
argument-hint: "[--help|-h] [--scope|-s <scope>] <operation> [<args>]"
|
|
4
|
+
description: >
|
|
5
|
+
List, get, set, or delete the layered ASE configuration values across
|
|
6
|
+
the user/project/task/session scope chain.
|
|
7
|
+
Use when the user wants to "configure" ASE, or to inspect or change a
|
|
8
|
+
configuration key like `agent.persona`, `agent.guidance`, `agent.task`,
|
|
9
|
+
or `project.boxing`.
|
|
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-meta-config">
|
|
20
|
+
Configuration Management
|
|
21
|
+
</skill>
|
|
22
|
+
|
|
23
|
+
<expand name="getopt"
|
|
24
|
+
arg1="ase-meta-config"
|
|
25
|
+
arg2="--scope|-s=">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
29
|
+
<objective>
|
|
30
|
+
*List*, *get*, *set*, or *delete* the values of the *layered
|
|
31
|
+
configuration* of ASE, mirroring the non-interactive `ase config
|
|
32
|
+
<operation>` CLI subcommands *exclusively* through the `ase` MCP server.
|
|
33
|
+
</objective>
|
|
34
|
+
|
|
35
|
+
Procedure
|
|
36
|
+
---------
|
|
37
|
+
|
|
38
|
+
1. **Determine Operation:**
|
|
39
|
+
|
|
40
|
+
1. Set <arguments><getopt-arguments/></arguments>, with any leading
|
|
41
|
+
and trailing whitespace stripped. Split <arguments/> into
|
|
42
|
+
whitespace-separated tokens, honoring single and double quotes
|
|
43
|
+
(a quoted token is *one* token, with its surrounding quotes
|
|
44
|
+
removed). Set <operation/> to the *first* token, lower-cased,
|
|
45
|
+
and <operands/> to the list of the *remaining* tokens. If
|
|
46
|
+
<arguments/> is empty, set <operation>(none)</operation> and
|
|
47
|
+
<operands/> to the empty list. Inherit the always existing
|
|
48
|
+
<ase-session-id/> from the current context.
|
|
49
|
+
Do not output anything.
|
|
50
|
+
|
|
51
|
+
2. Determine the target scope chain:
|
|
52
|
+
|
|
53
|
+
<if condition="<getopt-option-scope/> is empty">
|
|
54
|
+
Set <scope>session:<ase-session-id/></scope>. Reads then cascade
|
|
55
|
+
`user` -> `project` -> `session`, and writes land on the *session*
|
|
56
|
+
layer -- the only layer on which the `agent.task` and `agent.skill`
|
|
57
|
+
keys are writable at all.
|
|
58
|
+
</if>
|
|
59
|
+
<else>
|
|
60
|
+
Set <scope><getopt-option-scope/></scope>, forwarding the given
|
|
61
|
+
scope chain verbatim.
|
|
62
|
+
</else>
|
|
63
|
+
|
|
64
|
+
Do not output anything.
|
|
65
|
+
|
|
66
|
+
3. You *MUST* *NOT* use `Bash`, `Read`, `Write`, `Edit`, or any
|
|
67
|
+
other filesystem-touching tool anywhere in this skill. *Every*
|
|
68
|
+
configuration access is performed *exclusively* through the
|
|
69
|
+
`ase_config_*` tools of the `ase` MCP server.
|
|
70
|
+
Do not output anything.
|
|
71
|
+
|
|
72
|
+
2. **Dispatch Operation:**
|
|
73
|
+
|
|
74
|
+
1. <if condition="<operation/> is `list` AND <operands/> is empty">
|
|
75
|
+
Call the `ase_config_list(scope: "<scope/>")` tool from the `ase`
|
|
76
|
+
MCP server. The result is a structured object with an `entries`
|
|
77
|
+
array where each entry has a `key`, a `value`, and a `scope` field.
|
|
78
|
+
|
|
79
|
+
- If the `entries` array is empty, output the following <template/>:
|
|
80
|
+
|
|
81
|
+
<template>
|
|
82
|
+
⧉ **ASE**: ⚙ config (scope: `<scope/>`): *(none)*
|
|
83
|
+
</template>
|
|
84
|
+
|
|
85
|
+
- Else output the following <template/>, where each <key/>,
|
|
86
|
+
<value/>, and <entry-scope/> correspond to one entry of the
|
|
87
|
+
`entries` array, in the given order:
|
|
88
|
+
|
|
89
|
+
<template>
|
|
90
|
+
⧉ **ASE**: ⚙ config (scope: `<scope/>`):
|
|
91
|
+
|
|
92
|
+
| *Key* | *Value* | *Scope* |
|
|
93
|
+
|------------------|------------------|------------------|
|
|
94
|
+
| `<key/>` | **<value/>** | `<entry-scope/>` |
|
|
95
|
+
| [...] | [...] | [...] |
|
|
96
|
+
|
|
97
|
+
</template>
|
|
98
|
+
</if>
|
|
99
|
+
|
|
100
|
+
2. <elseif condition="<operation/> is `get` AND <operands/> has exactly one token">
|
|
101
|
+
Set <key/> to the single token of <operands/>. Call the
|
|
102
|
+
`ase_config_get(key: "<key/>", scope: "<scope/>")` tool from the
|
|
103
|
+
`ase` MCP server and set <text/> to its `text` output field.
|
|
104
|
+
|
|
105
|
+
- If <text/> is empty, the key is not set at all. Output the
|
|
106
|
+
following <template/>:
|
|
107
|
+
|
|
108
|
+
<template>
|
|
109
|
+
⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): *(not set)*
|
|
110
|
+
</template>
|
|
111
|
+
|
|
112
|
+
- Else set <value/> to the JSON-decoded <text/> and output the
|
|
113
|
+
following <template/>:
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): **<value/>**
|
|
117
|
+
</template>
|
|
118
|
+
</elseif>
|
|
119
|
+
|
|
120
|
+
3. <elseif condition="<operation/> is `set` AND <operands/> has exactly two tokens">
|
|
121
|
+
Set <key/> to the *first* and <value/> to the *second* token of
|
|
122
|
+
<operands/>. Call the `ase_config_set(key: "<key/>", val:
|
|
123
|
+
"<value/>", scope: "<scope/>")` tool from the `ase` MCP server.
|
|
124
|
+
|
|
125
|
+
Then, if <key/> is one of the three keys steering your *own*
|
|
126
|
+
behaviour, you *MUST* immediately adopt the new <value/> for
|
|
127
|
+
the remainder of the session -- *including* the output of this
|
|
128
|
+
very skill run -- by re-evaluating and internalizing the
|
|
129
|
+
corresponding rules of the constitution: for `agent.persona` set
|
|
130
|
+
<ase-persona-style><value/></ase-persona-style> and re-evaluate
|
|
131
|
+
the `Persona Communication Style` rules, for `agent.guidance` set
|
|
132
|
+
<ase-guidance-level><value/></ase-guidance-level> and re-evaluate
|
|
133
|
+
the `Guidance Hint Level` rules, and for `project.boxing` set
|
|
134
|
+
<ase-project-boxing><value/></ase-project-boxing> and re-evaluate
|
|
135
|
+
the `Artifact Boxing Transparency` rules. Do not output anything
|
|
136
|
+
for this.
|
|
137
|
+
|
|
138
|
+
Then only output the following <template/>:
|
|
139
|
+
|
|
140
|
+
<template>
|
|
141
|
+
⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): **<value/>** (*updated*)
|
|
142
|
+
</template>
|
|
143
|
+
</elseif>
|
|
144
|
+
|
|
145
|
+
4. <elseif condition="<operation/> is `delete` AND <operands/> has exactly one token">
|
|
146
|
+
Set <key/> to the single token of <operands/>. Call the
|
|
147
|
+
`ase_config_delete(key: "<key/>", scope: "<scope/>")` tool from
|
|
148
|
+
the `ase` MCP server. Then only output the following <template/>:
|
|
149
|
+
|
|
150
|
+
<template>
|
|
151
|
+
⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): (*deleted*)
|
|
152
|
+
</template>
|
|
153
|
+
</elseif>
|
|
154
|
+
|
|
155
|
+
5. <else>
|
|
156
|
+
The <operation/> is either missing, unknown, or was given with
|
|
157
|
+
the wrong number of operands. Notice that the `init` and `edit`
|
|
158
|
+
subcommands of the `ase config` CLI are deliberately *not*
|
|
159
|
+
mirrored by this skill. Only output the following <template/>
|
|
160
|
+
and then immediately *STOP* processing the entire current skill:
|
|
161
|
+
|
|
162
|
+
<template>
|
|
163
|
+
⧉ **ASE**: ☻ skill: **ase-meta-config**, ▶ ERROR: invalid operation: **<operation/>** (expected `list`, `get <key>`, `set <key> <value>`, or `delete <key>`)
|
|
164
|
+
</template>
|
|
165
|
+
</else>
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-config` - Configuration Management
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-config`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--scope`|`-s` *scope*]
|
|
11
|
+
*operation*
|
|
12
|
+
[*args*]
|
|
13
|
+
|
|
14
|
+
## DESCRIPTION
|
|
15
|
+
|
|
16
|
+
The `ase-meta-config` skill lists, reads, writes, and removes the values
|
|
17
|
+
of the *layered ASE configuration* from inside the assistant session. It
|
|
18
|
+
mirrors the non-interactive subcommands of the `ase config` CLI, but
|
|
19
|
+
performs *every* access through the `ase_config_list`, `ase_config_get`,
|
|
20
|
+
`ase_config_set`, and `ase_config_delete` tools of the `ase` MCP server -
|
|
21
|
+
it never shells out and never touches a file directly.
|
|
22
|
+
|
|
23
|
+
The configuration is organized as a chain of *scopes*, canonically
|
|
24
|
+
ordered `default` < `user` < `project` < `task` < `session`. Reads
|
|
25
|
+
cascade from the strongest (rightmost) scope down to the weakest and
|
|
26
|
+
return the first value that is defined; writes are always confined to
|
|
27
|
+
the strongest (target) scope of the chain.
|
|
28
|
+
|
|
29
|
+
The recognized keys are grouped under `project.*` (`project.id`,
|
|
30
|
+
`project.name`, `project.boxing`, and the
|
|
31
|
+
`project.artifact.`*kind*`.{basedir,files}` globs) and `agent.*`
|
|
32
|
+
(`agent.persona`, `agent.guidance`, `agent.task`, and `agent.skill`).
|
|
33
|
+
Some keys are writable on selected scopes only; in particular
|
|
34
|
+
`agent.task` and `agent.skill` are writable on a `session` scope only,
|
|
35
|
+
and the `project.artifact.*` globs are writable on the `user` and
|
|
36
|
+
`project` scopes only.
|
|
37
|
+
|
|
38
|
+
The three keys steering the behaviour of the agent itself accept fixed
|
|
39
|
+
value sets: `agent.persona` selects the *communication style* and is one
|
|
40
|
+
of the decorative, eloquent, and explaining `writer`, the concise,
|
|
41
|
+
factual, and accurate `engineer` (the default), the layered,
|
|
42
|
+
pyramid-structured `journalist`, the brief, factual, and abbreviating
|
|
43
|
+
`telegrapher`, or the terse, rough, and stuttering `caveman`;
|
|
44
|
+
`agent.guidance` selects the amount of unsolicited hints and is one of
|
|
45
|
+
`none`, `minimal`, `normal` (the default), or `verbose`; and
|
|
46
|
+
`project.boxing` selects the artifact transparency and is one of `white`,
|
|
47
|
+
`grey`, or `black`. Setting `agent.persona`, `agent.guidance`, or
|
|
48
|
+
`project.boxing` takes effect immediately, i.e. still within the running
|
|
49
|
+
session.
|
|
50
|
+
|
|
51
|
+
The following *operations* exist:
|
|
52
|
+
|
|
53
|
+
- `list`: List all effective configuration entries of the scope chain as
|
|
54
|
+
a table of key, value, and the scope that supplied the value. For
|
|
55
|
+
overlapping keys only the value of the strongest scope is shown.
|
|
56
|
+
|
|
57
|
+
- `get` *key*: Report the effective value at the dotted *key*, or
|
|
58
|
+
`(not set)` if no scope of the chain defines it.
|
|
59
|
+
|
|
60
|
+
- `set` *key* *value*: Write *value* at the dotted *key* on the target
|
|
61
|
+
scope. The value is validated against the configuration schema before
|
|
62
|
+
it is persisted.
|
|
63
|
+
|
|
64
|
+
- `delete` *key*: Remove the value at the dotted *key* from the target
|
|
65
|
+
scope. A key that is not present is silently ignored.
|
|
66
|
+
|
|
67
|
+
The `init` and `edit` subcommands of the `ase config` CLI are
|
|
68
|
+
deliberately *not* mirrored: `edit` is bound to the interactive `$EDITOR`
|
|
69
|
+
and therefore has no meaning inside an assistant turn, and `init` is a
|
|
70
|
+
preset-bootstrapping operation that stays a shell concern next to `ase
|
|
71
|
+
setup`. Both remain available as `ase config init` and `ase config edit`
|
|
72
|
+
on the command line.
|
|
73
|
+
|
|
74
|
+
## OPTIONS
|
|
75
|
+
|
|
76
|
+
`--scope`|`-s` *scope*:
|
|
77
|
+
The scope chain to operate on, given as a comma-separated list of
|
|
78
|
+
`user`, `project`, `task:`*id*, and/or `session:`*id* terms, in any
|
|
79
|
+
order and at most one term per kind. The `user` term is always
|
|
80
|
+
implicitly added at the bottom of the chain, and `project` is
|
|
81
|
+
implicitly added whenever a project context exists. If the option is
|
|
82
|
+
omitted, the chain of the *current session* (`session:`*id*) is used,
|
|
83
|
+
so that reads see the full `user` -> `project` -> `session` cascade
|
|
84
|
+
and writes -- including those to the session-only keys `agent.task`
|
|
85
|
+
and `agent.skill` -- land on the session layer.
|
|
86
|
+
|
|
87
|
+
## ARGUMENTS
|
|
88
|
+
|
|
89
|
+
*operation*:
|
|
90
|
+
The operation to perform; one of `list`, `get`, `set`, or `delete`.
|
|
91
|
+
|
|
92
|
+
*args*:
|
|
93
|
+
The operands of the operation: none for `list`, a dotted *key* for
|
|
94
|
+
`get` and `delete`, and a dotted *key* plus a *value* for `set`.
|
|
95
|
+
|
|
96
|
+
## EXAMPLES
|
|
97
|
+
|
|
98
|
+
List all effective configuration entries:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
❯ /ase-meta-config list
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Report the effective persona style:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
❯ /ase-meta-config get agent.persona
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Switch the communication style for the current session only:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
❯ /ase-meta-config set agent.persona telegrapher
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Switch the project boxing for the current session only:
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
❯ /ase-meta-config set project.boxing grey
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Persist the guidance level for the whole project instead:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
❯ /ase-meta-config --scope project set agent.guidance minimal
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Remove a value from the user-level configuration:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
❯ /ase-meta-config --scope user delete project.name
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## SEE ALSO
|
|
135
|
+
|
|
136
|
+
[`ase-task-id`](../ase-task-id/help.md).
|
|
@@ -74,5 +74,5 @@ Surface at least fifteen anti-theses:
|
|
|
74
74
|
## SEE ALSO
|
|
75
75
|
|
|
76
76
|
[`ase-meta-why`](../ase-meta-why/help.md), [`ase-meta-evaluate`](../ase-meta-evaluate/help.md), [`ase-meta-quorum`](../ase-meta-quorum/help.md),
|
|
77
|
-
[`ase-meta-
|
|
77
|
+
[`ase-meta-steelman`](../ase-meta-steelman/help.md).
|
|
78
78
|
|