@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.
Files changed (47) hide show
  1. package/dst/ase-artifact.js +3 -1
  2. package/dst/ase-compat.js +1 -1
  3. package/dst/ase-config.js +76 -13
  4. package/dst/ase-diagram.js +10 -15
  5. package/dst/ase-getopt.js +66 -60
  6. package/dst/ase-guidance.js +89 -0
  7. package/dst/ase-hook.js +46 -66
  8. package/dst/ase-kv.js +18 -43
  9. package/dst/ase-mcp.js +1 -1
  10. package/dst/ase-meta.js +1 -1
  11. package/dst/ase-service.js +4 -6
  12. package/dst/ase-setup.js +24 -39
  13. package/dst/ase-skills.js +1 -1
  14. package/dst/ase-statusline.js +42 -18
  15. package/dst/ase-stdio.js +25 -0
  16. package/dst/ase-task.js +11 -11
  17. package/dst/ase.js +1 -1
  18. package/package.json +1 -1
  19. package/plugin/.claude-plugin/plugin.json +1 -1
  20. package/plugin/.codex-plugin/plugin.json +1 -1
  21. package/plugin/.github/plugin/plugin.json +1 -1
  22. package/plugin/meta/ase-common-task.md +9 -0
  23. package/plugin/meta/ase-constitution.md +17 -6
  24. package/plugin/meta/ase-getopt.md +11 -1
  25. package/plugin/meta/ase-skill.md +92 -4
  26. package/plugin/package.json +1 -1
  27. package/plugin/skills/ase-arch-analyze/SKILL.md +8 -6
  28. package/plugin/skills/ase-arch-discover/SKILL.md +12 -0
  29. package/plugin/skills/ase-code-analyze/SKILL.md +6 -4
  30. package/plugin/skills/ase-code-lint/SKILL.md +16 -0
  31. package/plugin/skills/ase-docs-proofread/SKILL.md +10 -0
  32. package/plugin/skills/ase-help-intent/SKILL.md +3 -8
  33. package/plugin/skills/ase-help-skill/SKILL.md +10 -2
  34. package/plugin/skills/ase-help-skill/catalog.md +1 -1
  35. package/plugin/skills/ase-meta-brainstorm/SKILL.md +8 -0
  36. package/plugin/skills/ase-meta-commit/SKILL.md +13 -0
  37. package/plugin/skills/ase-meta-config/SKILL.md +165 -0
  38. package/plugin/skills/ase-meta-config/help.md +136 -0
  39. package/plugin/skills/ase-meta-diaboli/help.md +1 -1
  40. package/plugin/skills/ase-meta-diff/SKILL.md +22 -0
  41. package/plugin/skills/ase-meta-review/SKILL.md +13 -1
  42. package/plugin/skills/ase-sync-export/SKILL.md +14 -0
  43. package/plugin/skills/ase-sync-import/SKILL.md +10 -0
  44. package/plugin/skills/ase-task-list/SKILL.md +21 -0
  45. package/plugin/skills/ase-task-view/SKILL.md +21 -0
  46. package/plugin/skills/ase-meta-persona/SKILL.md +0 -84
  47. 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
- Just output the following <template/>:
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/>
@@ -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`) you *MUST* once output the following output
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`), once
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">
@@ -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.47",
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
- 4. <step id="STEP 4: Give Final Hint">
471
- Finally, output the following <template/> to give a final hint:
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, output the following <template/> to give a final hint:
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
- <template>
202
- ⧉ **ASE**: ↪ hint: **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.**
203
- </template>
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
- ● **INTENT**:
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
@@ -55,6 +55,6 @@
55
55
  ○ `ase-task-delete`: Delete a Task Plan
56
56
 
57
57
  ⎈ **OTHER SKILLS**
58
- ○ `ase-meta-persona`: Persona Configuration
58
+ ○ `ase-meta-config`: Configuration Management
59
59
  ○ `ase-meta-compat`: Self-Test ASE Compatibility
60
60
 
@@ -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-persona`](../ase-meta-persona/help.md).
77
+ [`ase-meta-steelman`](../ase-meta-steelman/help.md).
78
78