@rse/ase 2.0.5 → 2.0.7

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 (74) hide show
  1. package/dst/ase-agent-definition-api.d.ts +2 -0
  2. package/dst/ase-agent-definition-core.js +24 -3
  3. package/dst/ase-agent-fleet.js +2 -1
  4. package/dst/ase-agent-runtime-engine.js +22 -4
  5. package/dst/ase-agent-runtime-tool.js +10 -8
  6. package/dst/ase-agent-runtime.js +8 -4
  7. package/dst/ase-config-schema.js +1 -1
  8. package/dst/ase-man-catalog.js +1 -1
  9. package/dst/ase-setup-settings.js +111 -1
  10. package/dst/ase-setup.js +19 -7
  11. package/dst/ase-spec.js +184 -49
  12. package/dst/ase-task-board-tui-model.js +8 -1
  13. package/dst/ase-task-board-tui.js +26 -2
  14. package/dst/ase-task-board-web-client.js +10 -10
  15. package/dst/ase-task-store-plugin-gitea.js +3 -3
  16. package/dst/man/ase-agent-adhoc.md +25 -6
  17. package/dst/man/ase-agent-condenser.md +7 -0
  18. package/dst/man/ase-agent-editor.md +7 -0
  19. package/dst/man/ase-agent-estimator.md +7 -0
  20. package/dst/man/ase-agent-fleet.md +7 -4
  21. package/dst/man/ase-agent-implementer.md +7 -0
  22. package/dst/man/ase-agent-integrator.md +7 -0
  23. package/dst/man/ase-agent-qualifier.md +7 -0
  24. package/dst/man/ase-agent-rebooter.md +7 -0
  25. package/dst/man/ase-agent-researcher.md +7 -0
  26. package/dst/man/ase-artifact.md +1 -1
  27. package/dst/man/ase-config.md +5 -3
  28. package/dst/man/ase-mcp.md +1 -1
  29. package/dst/man/ase-setup-install.md +10 -1
  30. package/dst/man/ase-setup-status.md +6 -0
  31. package/dst/man/ase-setup-uninstall.md +3 -1
  32. package/dst/man/ase-setup-update.md +3 -0
  33. package/dst/man/ase-setup.md +4 -4
  34. package/dst/man/ase-spec-export.md +14 -3
  35. package/dst/man/ase-spec-init.md +10 -1
  36. package/dst/man/ase-spec-lint.md +2 -1
  37. package/dst/man/ase-spec-preview.md +10 -1
  38. package/dst/man/ase-spec-query.md +96 -0
  39. package/dst/man/ase-spec.md +32 -11
  40. package/dst/man/ase.md +3 -3
  41. package/package.json +20 -17
  42. package/plugin/.claude-plugin/icon.png +0 -0
  43. package/plugin/.claude-plugin/plugin.json +1 -1
  44. package/plugin/.codex-plugin/plugin.json +1 -1
  45. package/plugin/.github/plugin/plugin.json +1 -1
  46. package/plugin/meta/ase-common-task.md +9 -1
  47. package/plugin/meta/ase-control.md +14 -0
  48. package/plugin/meta/ase-format-spec.md +29 -5
  49. package/plugin/meta/ase-format-specbook.md +427 -47
  50. package/plugin/meta/ase-format-specbook.yaml +189 -87
  51. package/plugin/meta/ase-skill.md +7 -0
  52. package/plugin/mods/ase-mods-common.ts +36 -6
  53. package/plugin/mods/ase-mods-evaluate.ts +227 -0
  54. package/plugin/mods/ase-mods-grill.ts +1 -30
  55. package/plugin/mods/ase-mods-help-browse.ts +18 -13
  56. package/plugin/mods/ase-mods-help-find.ts +17 -9
  57. package/plugin/mods/ase-mods-help-hint.ts +1 -1
  58. package/plugin/mods/ase-mods.ts +23 -17
  59. package/plugin/skills/ase-code-edit/SKILL.md +53 -16
  60. package/plugin/skills/ase-code-edit/help.md +26 -13
  61. package/plugin/skills/ase-code-lint/SKILL.md +7 -3
  62. package/plugin/skills/ase-help-intent/data.md +170 -28
  63. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  64. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  65. package/plugin/skills/ase-repo-changelog/SKILL.md +29 -10
  66. package/plugin/skills/ase-repo-changelog/help.md +5 -1
  67. package/plugin/skills/ase-repo-commit/SKILL.md +4 -1
  68. package/plugin/skills/ase-repo-dissect/help.md +2 -1
  69. package/plugin/skills/ase-repo-stage/SKILL.md +459 -0
  70. package/plugin/skills/ase-repo-stage/help.md +120 -0
  71. package/plugin/skills/ase-spec-activate/SKILL.md +4 -1
  72. package/plugin/skills/ase-spec-edit/SKILL.md +20 -12
  73. package/plugin/skills/ase-spec-edit/help.md +22 -14
  74. package/plugin/mods/claude-code.d.ts +0 -13440
@@ -3,7 +3,7 @@
3
3
  ** Copyright (c) 2025-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
4
  ** Licensed under Apache 2.0 <https://spdx.org/licenses/Apache-2.0>
5
5
  */
6
- import { giteaApi } from "gitea-js";
6
+ import { giteaApi, ContentType } from "gitea-js";
7
7
  import { LRUCache } from "lru-cache";
8
8
  import * as TaskFormat from "./ase-task-format.js";
9
9
  import * as TaskIssues from "./ase-task-store-issues.js";
@@ -396,7 +396,7 @@ class GiteaTaskStoragePlugin extends TaskIssues.IssueTaskStoragePlugin {
396
396
  for (const blocker of after) {
397
397
  if (have.has(blocker.number))
398
398
  continue;
399
- await this.call(loc, this.gt.repos.issueCreateIssueDependencies(loc.owner, loc.repo, String(issue.number), meta(blocker)))
399
+ await this.call(loc, this.gt.repos.issueCreateIssueDependencies(loc.owner, loc.repo, String(issue.number), meta(blocker), { type: ContentType.Json }))
400
400
  .catch((err) => {
401
401
  if (statusOf(err) === 404)
402
402
  throw new Error(`Gitea rejected the dependency of issue #${issue.number} on issue #${blocker.number} ` +
@@ -406,7 +406,7 @@ class GiteaTaskStoragePlugin extends TaskIssues.IssueTaskStoragePlugin {
406
406
  }
407
407
  for (const blocker of current)
408
408
  if (!want.has(blocker.number))
409
- await found(this.call(loc, this.gt.repos.issueRemoveIssueDependencies(loc.owner, loc.repo, String(issue.number), meta(blocker))));
409
+ await found(this.call(loc, this.gt.repos.issueRemoveIssueDependencies(loc.owner, loc.repo, String(issue.number), meta(blocker), { type: ContentType.Json })));
410
410
  }
411
411
  /* synchronize the comments with the attachments, touching changed ones only
412
412
  (see the common issue tracker parts) */
@@ -19,6 +19,7 @@
19
19
  \[`--lifecycle` *model*\]
20
20
  \[`--serial`\]
21
21
  \[`--unclaimed`\]
22
+ \[`-M`|`--model` *model*\]
22
23
  \[`--params` *name*`=`*value*\]
23
24
  \[`--state-`*item* *state*\]
24
25
  \[`--tag-`*item* *tag*\]
@@ -169,12 +170,12 @@ tags (except the request state tag) and, by default, gets its previous
169
170
  assignee back. An agent consumes the request prompts if its prompt
170
171
  template references `{prompt}` (except within the conditional
171
172
  `{?prompt:`*text*`}` only, which makes the prompt *optional*) or it
172
- has a hook `prepare`, `prompt`, or `finish` (which receive the request
173
- prompt in their *job*), where it then refuses a request with an empty
174
- prompt as failed, else it accepts requests with an empty prompt (which
175
- an agent with an optional prompt still passes on if non-empty), and
176
- announces this to the agent relay, so the task boards accept an empty
177
- prompt for its requests, too.
173
+ has a hook `prepare`, `prompt`, `model`, or `finish` (which receive
174
+ the request prompt in their *job*), where it then refuses a request
175
+ with an empty prompt as failed, else it accepts requests with an empty
176
+ prompt (which an agent with an optional prompt still passes on if
177
+ non-empty), and announces this to the agent relay, so the task boards
178
+ accept an empty prompt for its requests, too.
178
179
 
179
180
  Only the prompt (and `--state-incoming` for `--type phase`) is
180
181
  mandatory, while all other options default to the safe *annotate*
@@ -431,6 +432,16 @@ and `--prompt-skill` with `--prompt-args`, and `--tag-retry` and
431
432
  `passes`, and `--workdir changeset` resp. `target` (as the task can
432
433
  be claimed by another agent meanwhile).
433
434
 
435
+ - \[`-M`|`--model` *model*\]:
436
+ The model of the agent tool, passed to it as `--model` *model*
437
+ verbatim (e.g., an alias like `sonnet` or a full model name), either a
438
+ *model* for all tasks, or comma-separated *size*`=`*model* pairs per
439
+ `Effort:` size of the task (`XS`, `S`, `M`, `L`, `XL`, or `*` for all
440
+ other tasks, e.g., `XS=haiku,S=haiku,M=sonnet,*=opus`), where a task
441
+ without a matching pair gets the default model of the agent tool (the
442
+ default for all tasks). The hook `model` can override it per task (see
443
+ **HOOKS**).
444
+
434
445
  - \[`--params` *name*`=`*value*\]:
435
446
  (repeatable) The value of the parameter *name* declared by the
436
447
  definition (see **PARAMETERS**), where a later value of the same
@@ -986,6 +997,14 @@ invocation:
986
997
  `{ text }`, a plain prompt text, or `undefined` to keep the
987
998
  configured one, where a thrown error fails the processing.
988
999
 
1000
+ - `model(task, model, job, ctx)`:
1001
+ The model of the agent tool for the job, given the configured *model*
1002
+ of `--model` for the `Effort:` size of the task (empty for the default
1003
+ model of the agent tool): a model (empty for the default one), or
1004
+ `undefined` to keep the configured one, where a thrown error fails the
1005
+ processing. This allows choosing the model per task by any means,
1006
+ e.g., by asking a cheap model via `ctx.exec`.
1007
+
989
1008
  - `verdict(task, result, ctx)`:
990
1009
  (after a successful agent tool only) The verdict of the result (an
991
1010
  upper-case word, accepted only if listed by `--verdict-allow`), an
@@ -9,6 +9,7 @@
9
9
  \[`-T`|`--timeout` *duration*\]
10
10
  \[`-o`|`--one-shot`\]
11
11
  \[`--agent-relay` *url*\]
12
+ \[`-M`|`--model` *model*\]
12
13
  \[`--`*group*`-`*item* *value* \[...\]\]
13
14
  \[`-f`|`--foreground`\]
14
15
 
@@ -145,6 +146,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
145
146
  (`phase` only). Built-in: not set. Not allowed, as the condenser
146
147
  claims the tasks into its activity state.
147
148
 
149
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
150
+ for all tasks, or comma-separated *size*`=`*model* pairs per
151
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
152
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
153
+ model of the agent tool. Built-in: none.
154
+
148
155
  - \[`--params` *name*`=`*value*\]: The value of a parameter
149
156
  declared by the definition (repeatable). Built-in: none declared.
150
157
 
@@ -11,6 +11,7 @@
11
11
  \[`--agent-relay` *url*\]
12
12
  \[`-r`|`--repo` *url*\]
13
13
  \[`-d`|`--tempdir` *dir*\]
14
+ \[`-M`|`--model` *model*\]
14
15
  \[`--`*group*`-`*item* *value* \[...\]\]
15
16
  \[`-f`|`--foreground`\]
16
17
 
@@ -192,6 +193,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
192
193
  (`phase` only). Built-in: not set. Not allowed, as the editor is
193
194
  of type `request`.
194
195
 
196
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
197
+ for all tasks, or comma-separated *size*`=`*model* pairs per
198
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
199
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
200
+ model of the agent tool. Built-in: none.
201
+
195
202
  - \[`--params` *name*`=`*value*\]: The value of a parameter
196
203
  declared by the definition (repeatable). Built-in: none declared.
197
204
 
@@ -10,6 +10,7 @@
10
10
  \[`-o`|`--one-shot`\]
11
11
  \[`--agent-relay` *url*\]
12
12
  \[`-m`|`--mode` `phase`|`request`\]
13
+ \[`-M`|`--model` *model*\]
13
14
  \[`--`*group*`-`*item* *value* \[...\]\]
14
15
  \[`-f`|`--foreground`\]
15
16
 
@@ -204,6 +205,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
204
205
  (`phase` only). Built-in: enabled (mode `phase`) resp. not set
205
206
  (mode `request`).
206
207
 
208
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
209
+ for all tasks, or comma-separated *size*`=`*model* pairs per
210
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
211
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
212
+ model of the agent tool. Built-in: none.
213
+
207
214
  - \[`--params` *name*`=`*value*\]: The value of a parameter
208
215
  declared by the definition (repeatable). Built-in: none declared.
209
216
 
@@ -79,7 +79,7 @@ members) or `ase agent fleet stop`.
79
79
  (with all its options commented out, so they fall back to
80
80
  `project.relay.url`, `project.relay.crt`, and `project.relay.key`),
81
81
  the section `default` (with `tool`, `parallel: 1`, and `timeout: 60m`,
82
- plus `repo` and `tempdir` commented out), the edit request agent
82
+ plus `model`, `repo`, and `tempdir` commented out), the edit request agent
83
83
  `editor`, the effort estimation agent `estimator` (mode `phase`,
84
84
  estimating the planned tasks, i.e., the `OPEN` tasks for `solo`, the
85
85
  `PLANNING` tasks for `team`, and the `PLANNED` tasks for `enterprise`,
@@ -201,8 +201,9 @@ value omits an option, and a list repeats an option:
201
201
  `project.relay.url` selecting HTTPS requires both.
202
202
 
203
203
  - `default`:
204
- (optional) The default options of all agents: `tool`, `parallel`,
205
- `timeout`, `repo`, `tempdir`, and `agent-relay` (see `ase-agent`(1)),
204
+ (optional) The default options of all agents: `tool`, `model`,
205
+ `parallel`, `timeout`, `repo`, `tempdir`, and `agent-relay` (see
206
+ `ase-agent`(1) and `ase-agent-adhoc`(1)),
206
207
  each one applied only to the agents supporting it (e.g., `repo` not to
207
208
  `rebooter`), and overridden by the section of an agent. The option
208
209
  `agent-relay` is not allowed together with the section `relay`.
@@ -315,7 +316,8 @@ $ ase agent fleet stop
315
316
  ```
316
317
 
317
318
  A configuration `.ase/fleet.yaml` with the agent relay, the built-in
318
- agents, two editors of different agent tools, an agent of the
319
+ agents (with an implementer using cheaper models for smaller tasks),
320
+ two editors of different agent tools, an agent of the
319
321
  definition file `.ase/agents/reviewer.mts`, and an ad-hoc request
320
322
  agent:
321
323
 
@@ -329,6 +331,7 @@ default:
329
331
  rebooter:
330
332
  implementer:
331
333
  parallel: 2
334
+ model: XS=haiku,S=haiku,*=sonnet
332
335
  editor-claude:
333
336
  kind: editor
334
337
  editor-codex:
@@ -12,6 +12,7 @@
12
12
  \[`-r`|`--repo` *url*\]
13
13
  \[`-d`|`--tempdir` *dir*\]
14
14
  \[`-m`|`--mode` `implement`|`draft`\]
15
+ \[`-M`|`--model` *model*\]
15
16
  \[`--`*group*`-`*item* *value* \[...\]\]
16
17
  \[`-f`|`--foreground`\]
17
18
 
@@ -260,6 +261,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
260
261
  (`phase` only). Built-in: not set. Not allowed, as the implementer
261
262
  claims the tasks into its activity state.
262
263
 
264
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
265
+ for all tasks, or comma-separated *size*`=`*model* pairs per
266
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
267
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
268
+ model of the agent tool. Built-in: none.
269
+
263
270
  - \[`--params` *name*`=`*value*\]: The value of a parameter
264
271
  declared by the definition (repeatable). Built-in: `effort-wait`
265
272
  (`true` or `false`, default: `true`), whether to wait for the
@@ -12,6 +12,7 @@
12
12
  \[`-r`|`--repo` *url*\]
13
13
  \[`-d`|`--tempdir` *dir*\]
14
14
  \[`-m`|`--mode` `merge`|`rebase`|`squash`\]
15
+ \[`-M`|`--model` *model*\]
15
16
  \[`--`*group*`-`*item* *value* \[...\]\]
16
17
  \[`-f`|`--foreground`\]
17
18
 
@@ -206,6 +207,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
206
207
  (`phase` only). Built-in: not set. Not allowed, as the integrator
207
208
  claims the tasks into its activity state.
208
209
 
210
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
211
+ for all tasks, or comma-separated *size*`=`*model* pairs per
212
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
213
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
214
+ model of the agent tool. Built-in: none.
215
+
209
216
  - \[`--params` *name*`=`*value*\]: The value of a parameter
210
217
  declared by the definition (repeatable). Built-in: none declared.
211
218
 
@@ -12,6 +12,7 @@
12
12
  \[`-r`|`--repo` *url*\]
13
13
  \[`-d`|`--tempdir` *dir*\]
14
14
  \[`-m`|`--mode` `judge`|`qualify`\]
15
+ \[`-M`|`--model` *model*\]
15
16
  \[`--`*group*`-`*item* *value* \[...\]\]
16
17
  \[`-f`|`--foreground`\]
17
18
 
@@ -187,6 +188,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
187
188
  (`phase` only). Built-in: not set. Not allowed, as the qualifier
188
189
  claims the tasks into its activity state.
189
190
 
191
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
192
+ for all tasks, or comma-separated *size*`=`*model* pairs per
193
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
194
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
195
+ model of the agent tool. Built-in: none.
196
+
190
197
  - \[`--params` *name*`=`*value*\]: The value of a parameter
191
198
  declared by the definition (repeatable). Built-in: none declared.
192
199
 
@@ -9,6 +9,7 @@
9
9
  \[`-T`|`--timeout` *duration*\]
10
10
  \[`-o`|`--one-shot`\]
11
11
  \[`--agent-relay` *url*\]
12
+ \[`-M`|`--model` *model*\]
12
13
  \[`--`*group*`-`*item* *value* \[...\]\]
13
14
  \[`-f`|`--foreground`\]
14
15
 
@@ -145,6 +146,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
145
146
  (`phase` only). Built-in: not set. Not allowed, as the rebooter
146
147
  claims the tasks into its activity state.
147
148
 
149
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
150
+ for all tasks, or comma-separated *size*`=`*model* pairs per
151
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
152
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
153
+ model of the agent tool. Built-in: none.
154
+
148
155
  - \[`--params` *name*`=`*value*\]: The value of a parameter
149
156
  declared by the definition (repeatable). Built-in: none declared.
150
157
 
@@ -12,6 +12,7 @@
12
12
  \[`-r`|`--repo` *url*\]
13
13
  \[`-d`|`--tempdir` *dir*\]
14
14
  \[`-m`|`--mode` `phase`|`request`\]
15
+ \[`-M`|`--model` *model*\]
15
16
  \[`--`*group*`-`*item* *value* \[...\]\]
16
17
  \[`-f`|`--foreground`\]
17
18
 
@@ -246,6 +247,12 @@ All other options belong to the sub-commands (see **COMMANDS**).
246
247
  - \[`--unclaimed`\]: Process the tasks of the incoming states
247
248
  without claiming them (`phase` only). Built-in: not set.
248
249
 
250
+ - \[`-M`|`--model` *model*\]: The model of the agent tool: a model
251
+ for all tasks, or comma-separated *size*`=`*model* pairs per
252
+ `Effort:` size (`XS`, `S`, `M`, `L`, `XL`, or `*` for all other
253
+ tasks), see `ase-agent-adhoc`(1). Generic default: the default
254
+ model of the agent tool. Built-in: none.
255
+
249
256
  - \[`--params` *name*`=`*value*\]: The value of a parameter
250
257
  declared by the definition (repeatable). Built-in: none declared.
251
258
 
@@ -21,7 +21,7 @@ which provide the same) to locate the files of a kind. The recognized
21
21
  kinds are:
22
22
 
23
23
  - `spec`: the specification (by default below `docs/specbook`,
24
- the files `*.{md,txt,svg,png,jpg}`).
24
+ the files `**/*.{md,txt,svg,png,jpg}`).
25
25
  - `code`: the source code (by default below `src`, all files
26
26
  except `**/etc/**` and `**/{.gitignore,.npmignore,package.json}`).
27
27
  - `docs`: the documentation (by default below `doc`, all files plus
@@ -259,12 +259,14 @@ glob). See `ase-artifact`(1):
259
259
 
260
260
  - `project.artifact.spec.basedir`, `project.artifact.spec.files`:
261
261
  The specification files (default: `docs/specbook` and
262
- `*.{md,txt,svg,png,jpg}`).
262
+ `**/*.{md,txt,svg,png,jpg}`).
263
263
 
264
264
  - `project.artifact.spec.schema` (*string*):
265
265
  The whitespace-separated list of *SpecBook* schema configuration
266
- files, where `std` names the bundled standard one and every other
267
- entry is a file relative to the project root (default: empty, i.e.,
266
+ files, where `std`, `meta`, and `pm` name the bundled standard, meta,
267
+ and project management ones, `npm:`, `github:`, `http:`, and
268
+ `https:` references name remote ones, and every other entry is a file
269
+ or glob pattern relative to the project root (default: empty, i.e.,
268
270
  `std`). See `ase-spec`(1).
269
271
 
270
272
  - `project.artifact.code.basedir`, `project.artifact.code.files`:
@@ -53,7 +53,7 @@ The service provides the `ase_*` MCP tools of the skills, e.g.,
53
53
  `ase_config_list`, `ase_state_get`, `ase_state_set`,
54
54
  `ase_state_delete`, `ase_kv_get`, `ase_kv_set`, `ase_kv_delete`,
55
55
  `ase_kv_clear`, `ase_kv_batch`, the `ase_task_*` tools, `ase_artifact_list`,
56
- `ase_artifact_name`, `ase_specbook_lint`, `ase_specbook_export`,
56
+ `ase_artifact_name`, `ase_specbook_lint`, `ase_specbook_export`, `ase_specbook_query`,
57
57
  `ase_diagram`, `ase_worktree_path`, `ase_mint`, `ase_text_metric`,
58
58
  `ase_getopt`, `ase_markdown_prepare`, `ase_timestamp`, `ase_sleep`,
59
59
  `ase_compat`, `ase_component_info`, and `ase_decision_matrix`.
@@ -34,6 +34,14 @@ and `--tool codex`, which have no output style concept, the `ase hook
34
34
  session-start` handler injects the identical style instructions into
35
35
  the session context instead (see `ase-hook`(1)).
36
36
 
37
+ For `--tool claude`, the function hooks of the plugin-shipped
38
+ *Claude Code* mods (e.g., the clickable grilling table and the help
39
+ bands above the prompt) are additionally enabled by writing
40
+ `"CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1"` into the `env` of the
41
+ `settings.json` of the installation scope, unless the variable is
42
+ already present there: an *ASE* one (value `1`) is left as is, and a
43
+ foreign one (any other value) is preserved with a warning.
44
+
37
45
  The *ASE* tool itself is not installed by this command, as it is
38
46
  already installed when running it (e.g., via `npm install -g
39
47
  @rse/ase`).
@@ -82,7 +90,8 @@ already installed when running it (e.g., via `npm install -g
82
90
 
83
91
  - `~/.claude/settings.json`, `.claude/settings.json`, `.claude/settings.local.json`:
84
92
  The settings file of the `user`, `project`, resp. `local` scope,
85
- receiving the `outputStyle` selection for `--tool claude`.
93
+ receiving the `outputStyle` selection and the
94
+ `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` variable for `--tool claude`.
86
95
 
87
96
  ## EXIT STATUS
88
97
 
@@ -33,6 +33,12 @@ the agent tool to be found in `$PATH`. The rows are:
33
33
  (the *ASE* output style `ase:ase-terse`) or `foreign`
34
34
  (hand-selected).
35
35
 
36
+ - `FUNCTIONHOOKS` (`--tool claude` only):
37
+ One row per settings file (of the scopes `user`, `project`, and
38
+ `local`) carrying a `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` variable in
39
+ its `env`, with the status `enabled` (value `1`) or `foreign` (any
40
+ other value).
41
+
36
42
  - `STATUSLINE` (`--tool claude` and `--tool copilot` only):
37
43
  One row per settings file carrying a `statusLine` entry, with the
38
44
  status `activated` (its command starts with `ase statusline`, i.e.,
@@ -20,7 +20,9 @@ steps are:
20
20
  2. For `--tool claude`, the selection of the output style
21
21
  `ase:ase-terse` is removed from the `settings.json` of the
22
22
  installation scope, while a foreign `outputStyle` is preserved with
23
- a warning.
23
+ a warning. Likewise, the variable `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS`
24
+ (value `1`) is removed from its `env` (together with an `env` which
25
+ became empty), while a foreign value is preserved with a warning.
24
26
  3. The plugin `ase@ase` is uninstalled (`<cli> plugin uninstall
25
27
  ase@ase`, resp. `codex plugin remove ase@ase`) and the plugin
26
28
  marketplace `ase` is removed (`<cli> plugin marketplace remove
@@ -42,6 +42,9 @@ carry no version change in the plugin manifest.
42
42
  Like `ase setup install`, for `--tool claude`, the output style
43
43
  `ase:ase-terse` is finally selected in the `settings.json` of the
44
44
  installation scope, unless a foreign `outputStyle` is already selected
45
+ there, which is preserved with a warning, and the function hooks are
46
+ enabled through `"CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1"` in its
47
+ `env`, unless a foreign value of the variable is already present
45
48
  there, which is preserved with a warning.
46
49
 
47
50
  ## OPTIONS
@@ -23,8 +23,8 @@ The target agent tool is either *Anthropic Claude Code CLI*
23
23
  (`codex`). All operations are performed through the plugin and MCP
24
24
  commands of the respective agent tool CLI (e.g., `claude plugin
25
25
  install`), which hence has to be found in `$PATH`, and through direct
26
- edits of its settings files (for the output style, the statusline,
27
- and the telemetry). Every sub-process command is logged (with API keys
26
+ edits of its settings files (for the output style, the function
27
+ hooks, the statusline, and the telemetry). Every sub-process command is logged (with API keys
28
28
  masked) and its output is shown only on failure.
29
29
 
30
30
  ## OPTIONS
@@ -79,8 +79,8 @@ individual manual pages for the exact applicability):
79
79
  `ase-setup-disable`(1).
80
80
 
81
81
  - `ase setup status` \[`-t`|`--tool` *tool*\]:
82
- Report the plugin, MCP server, output style, statusline, and
83
- telemetry registrations of all scopes. See `ase-setup-status`(1).
82
+ Report the plugin, MCP server, output style, function hooks,
83
+ statusline, and telemetry registrations of all scopes. See `ase-setup-status`(1).
84
84
 
85
85
  - `ase setup mcp` `list`|`activate`|`deactivate` \[...\]:
86
86
  List, activate, or deactivate the pre-defined foreign MCP servers.
@@ -6,6 +6,7 @@
6
6
  \[`-h`|`--help`\]
7
7
  \[`-o`|`--output` \[*format*`:`\]*file*\] \[...\]
8
8
  \[`-w`|`--watch`\]
9
+ \[`-S`|`--schema`\]
9
10
 
10
11
  ## DESCRIPTION
11
12
 
@@ -55,8 +56,10 @@ The MCP tool `ase_specbook_export` provides the same to the skills.
55
56
  mixes into the export on standard output. An unknown format prefix and
56
57
  a not inferable format are errors. A relative *file* is relative to the
57
58
  current working directory. Default: the HTML rendering into
58
- `index.html` inside the specification base directory (e.g.,
59
- `docs/specbook/index.html`).
59
+ `index.html` (resp. `schema.html` under `--schema`) inside the
60
+ specification base directory (e.g., `docs/specbook/index.html`).
61
+ A `md` output inside the specification base directory is refused,
62
+ as it would be parsed as a specification file itself.
60
63
 
61
64
  - \[`-w`|`--watch`\]:
62
65
  Do not terminate after the initial export, but keep the outputs in
@@ -67,6 +70,10 @@ The MCP tool `ase_specbook_export` provides the same to the skills.
67
70
  `--watch` rejects the `-` standard output. The command then runs
68
71
  until it is interrupted (e.g., via `CTRL+C`).
69
72
 
73
+ - \[`-S`|`--schema`\]:
74
+ Export the effective schema configuration `project.artifact.spec.schema`
75
+ itself, rendered as a *SpecBook* document, instead of the specification.
76
+
70
77
  ## EXIT STATUS
71
78
 
72
79
  Exits with status `0` on success, and with status `1` on any lint
@@ -88,11 +95,15 @@ $ ase spec export -o md:-
88
95
 
89
96
  # keep an HTML export in sync with the sources
90
97
  $ ase spec export -o /tmp/spec.html -w
98
+
99
+ # export the schema configuration as PDF
100
+ $ ase spec export -S -o schema.pdf
91
101
  ```
92
102
 
93
103
  ## SEE ALSO
94
104
 
95
- `ase`(1), `ase-spec`(1), `ase-spec-lint`(1), `ase-spec-preview`(1).
105
+ `ase`(1), `ase-spec`(1), `ase-spec-lint`(1), `ase-spec-query`(1),
106
+ `ase-spec-preview`(1).
96
107
 
97
108
  ## AUTHOR
98
109
 
@@ -4,6 +4,7 @@
4
4
 
5
5
  `ase spec init`
6
6
  \[`-h`|`--help`\]
7
+ \[`-s`|`--sample`\]
7
8
 
8
9
  ## DESCRIPTION
9
10
 
@@ -31,6 +32,11 @@ configuration are taken from the *ASE* configuration (see
31
32
  - \[`-h`|`--help`\]:
32
33
  Show usage information and exit.
33
34
 
35
+ - \[`-s`|`--sample`\]:
36
+ Additionally scaffold one lint-clean sample object per allowed object
37
+ kind into the created files, with placeholder values satisfying the
38
+ schema configuration, so the format is learnable from them.
39
+
34
40
  ## EXIT STATUS
35
41
 
36
42
  Exits with status `0` on success, and with status `1` if the
@@ -44,12 +50,15 @@ $ ase spec init
44
50
 
45
51
  # initialize and then lint the specification
46
52
  $ ase spec init && ase spec lint
53
+
54
+ # initialize the specification with sample objects
55
+ $ ase spec init -s
47
56
  ```
48
57
 
49
58
  ## SEE ALSO
50
59
 
51
60
  `ase`(1), `ase-spec`(1), `ase-spec-lint`(1), `ase-spec-export`(1),
52
- `ase-spec-preview`(1), `ase-config`(1).
61
+ `ase-spec-query`(1), `ase-spec-preview`(1), `ase-config`(1).
53
62
 
54
63
  ## AUTHOR
55
64
 
@@ -67,7 +67,8 @@ $ ase spec lint -m
67
67
 
68
68
  ## SEE ALSO
69
69
 
70
- `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-preview`(1).
70
+ `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-query`(1),
71
+ `ase-spec-preview`(1).
71
72
 
72
73
  ## AUTHOR
73
74
 
@@ -6,6 +6,7 @@
6
6
  \[`-h`|`--help`\]
7
7
  \[`-a`|`--addr` *ip-addr*\]
8
8
  \[`-p`|`--port` *tcp-port*\]
9
+ \[`-S`|`--schema`\]
9
10
 
10
11
  ## DESCRIPTION
11
12
 
@@ -33,6 +34,10 @@ interrupted (e.g., via `CTRL+C`).
33
34
  The TCP port to listen on, an integer in the range `1`..`65535`
34
35
  (default: `12345`).
35
36
 
37
+ - \[`-S`|`--schema`\]:
38
+ Preview the effective schema configuration `project.artifact.spec.schema`
39
+ itself, rendered as a *SpecBook* document, instead of the specification.
40
+
36
41
  ## EXIT STATUS
37
42
 
38
43
  Runs until interrupted. Exits with status `1` on an invalid TCP port
@@ -46,11 +51,15 @@ $ ase spec preview
46
51
 
47
52
  # serve the live preview on all interfaces on port 8080
48
53
  $ ase spec preview -a 0.0.0.0 -p 8080
54
+
55
+ # serve the live preview of the schema configuration
56
+ $ ase spec preview -S
49
57
  ```
50
58
 
51
59
  ## SEE ALSO
52
60
 
53
- `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-lint`(1).
61
+ `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-lint`(1),
62
+ `ase-spec-query`(1).
54
63
 
55
64
  ## AUTHOR
56
65
 
@@ -0,0 +1,96 @@
1
+ # ase-spec-query(1) -- Query the Project Specification
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase spec query`
6
+ \[`-h`|`--help`\]
7
+ \[`-P`|`--param` *name*`=`*value*\] \[...\]
8
+ \[`-f`|`--format` *format*\]
9
+ \[`-o`|`--output` \[*format*`:`\]*file*\]
10
+ \[`-S`|`--schema`\]
11
+ *selector*
12
+
13
+ ## DESCRIPTION
14
+
15
+ **ase spec query** loads the *SpecBook*-based specification Markdown
16
+ files below `project.artifact.spec.basedir` (see `ase-spec`(1)),
17
+ strictly validated like for `ase spec export` (see `ase-spec-export`(1)),
18
+ and queries its Abstract Syntax Tree (AST) with the XPath-like *ASTq*
19
+ *selector*, e.g., `// USE-CASE [ @STATUS == 'Done' ]`. The matched
20
+ nodes are written as a JSON, JSON5, YAML, or TOON array, their subtrees
21
+ included and the embedded file contents dropped.
22
+
23
+ The queried tree consists of:
24
+
25
+ - the root node of type `specification`,
26
+ - its children of type `artifact`, with the attributes `created`,
27
+ `modified`, and `file`, and
28
+ - the objects below, typed by their kind (with whitespace dashed),
29
+ with the attributes `kind`, `id`, `anchor`, `paren`, `name`,
30
+ `primary`, `description`, `rationale`, `elaboration`, and one per
31
+ property key.
32
+
33
+ The query function `refs()` yields the objects the references of the
34
+ current object resolve to, e.g., `// USE-CASE [ count(refs()) == 0 ]`.
35
+
36
+ The query fails on any lint diagnostic of `error` severity (see
37
+ `ase-spec-lint`(1)), while warnings are only logged, so a partial or
38
+ invalid specification is never queried.
39
+
40
+ The MCP tool `ase_specbook_query` provides the same to the skills.
41
+
42
+ ## OPTIONS
43
+
44
+ - \[`-h`|`--help`\]:
45
+ Show usage information and exit.
46
+
47
+ - \[`-P`|`--param` *name*`=`*value*\]:
48
+ Substitute the value *value* for the parameter `{`*name*`}` of the
49
+ *selector*. The option is repeatable, one per parameter.
50
+
51
+ - \[`-f`|`--format` *format*\]:
52
+ The output format `json`, `json5`, `yaml`, or `toon` (default:
53
+ inferred from the *file* of `--output` like for `ase spec export`,
54
+ else `json`).
55
+
56
+ - \[`-o`|`--output` \[*format*`:`\]*file*\]:
57
+ Write the result into *file*, or to standard output for `-`
58
+ (default: `-`). A relative *file* is relative to the current working
59
+ directory.
60
+
61
+ - \[`-S`|`--schema`\]:
62
+ Query the effective schema configuration `project.artifact.spec.schema`
63
+ itself, described as a *SpecBook* document of the bundled meta schema
64
+ configuration, instead of the specification.
65
+
66
+ ## EXIT STATUS
67
+
68
+ Exits with status `0` on success, and with status `1` on any lint
69
+ diagnostic of `error` severity, an invalid *selector* or parameter, an
70
+ unsupported output format, or an unwritable output file.
71
+
72
+ ## EXAMPLES
73
+
74
+ ```sh
75
+ # list all use cases as JSON
76
+ $ ase spec query "// USE-CASE"
77
+
78
+ # list the finished use cases as YAML
79
+ $ ase spec query -f yaml "// USE-CASE [ @STATUS == 'Done' ]"
80
+
81
+ # list the objects of a given kind into a TOON file
82
+ $ ase spec query -P kind=ROLE -o roles.toon "// * [ @kind == {kind} ]"
83
+
84
+ # list the artifacts of the schema configuration itself
85
+ $ ase spec query -S "/ artifact"
86
+ ```
87
+
88
+ ## SEE ALSO
89
+
90
+ `ase`(1), `ase-spec`(1), `ase-spec-lint`(1), `ase-spec-export`(1),
91
+ `ase-spec-preview`(1).
92
+
93
+ ## AUTHOR
94
+
95
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
96
+