@rse/ase 2.0.3 → 2.0.5

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 (198) hide show
  1. package/dst/ase-hook.js +13 -4
  2. package/dst/ase-lib-version.js +14 -5
  3. package/dst/ase-man-catalog.js +229 -0
  4. package/dst/ase-man-render.js +278 -0
  5. package/dst/ase-man-tui.js +636 -0
  6. package/dst/ase-man.js +33 -27
  7. package/dst/ase-setup.js +2 -2
  8. package/dst/ase-spec.js +103 -20
  9. package/dst/ase-task-board-filter.js +5 -4
  10. package/dst/ase-task-board-web-client.js +26 -26
  11. package/dst/man/ase-agent-adhoc.md +1165 -0
  12. package/dst/man/ase-agent-condenser.md +383 -0
  13. package/dst/man/ase-agent-editor.md +441 -0
  14. package/dst/man/ase-agent-estimator.md +477 -0
  15. package/dst/man/ase-agent-fleet.md +358 -0
  16. package/dst/man/ase-agent-implementer.md +521 -0
  17. package/dst/man/ase-agent-integrator.md +449 -0
  18. package/dst/man/ase-agent-qualifier.md +426 -0
  19. package/dst/man/ase-agent-rebooter.md +384 -0
  20. package/dst/man/ase-agent-relay.md +262 -0
  21. package/dst/man/ase-agent-researcher.md +478 -0
  22. package/dst/man/ase-agent.md +628 -0
  23. package/dst/man/ase-artifact-list.md +57 -0
  24. package/dst/man/ase-artifact-name.md +56 -0
  25. package/dst/man/ase-artifact.md +92 -0
  26. package/dst/man/ase-config-delete.md +74 -0
  27. package/dst/man/ase-config-edit.md +83 -0
  28. package/dst/man/ase-config-get.md +70 -0
  29. package/dst/man/ase-config-init.md +110 -0
  30. package/dst/man/ase-config-list.md +68 -0
  31. package/dst/man/ase-config-set.md +92 -0
  32. package/dst/man/ase-config.md +426 -0
  33. package/dst/man/ase-hook-permission-request.md +61 -0
  34. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  35. package/dst/man/ase-hook-session-end.md +71 -0
  36. package/dst/man/ase-hook-session-persona.md +65 -0
  37. package/dst/man/ase-hook-session-start.md +184 -0
  38. package/dst/man/ase-hook-stop.md +52 -0
  39. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  40. package/dst/man/ase-hook.md +93 -0
  41. package/dst/man/ase-man.md +195 -0
  42. package/dst/man/ase-mcp.md +102 -0
  43. package/dst/man/ase-service-log.md +59 -0
  44. package/dst/man/ase-service-send.md +60 -0
  45. package/dst/man/ase-service-start.md +93 -0
  46. package/dst/man/ase-service-status.md +58 -0
  47. package/dst/man/ase-service-stop.md +52 -0
  48. package/dst/man/ase-service.md +124 -0
  49. package/dst/man/ase-setup-disable.md +67 -0
  50. package/dst/man/ase-setup-enable.md +66 -0
  51. package/dst/man/ase-setup-install.md +116 -0
  52. package/dst/man/ase-setup-mcp.md +213 -0
  53. package/dst/man/ase-setup-status.md +101 -0
  54. package/dst/man/ase-setup-statusline.md +162 -0
  55. package/dst/man/ase-setup-telemetry.md +166 -0
  56. package/dst/man/ase-setup-uninstall.md +85 -0
  57. package/dst/man/ase-setup-update.md +117 -0
  58. package/dst/man/ase-setup.md +156 -0
  59. package/dst/man/ase-spec-export.md +99 -0
  60. package/dst/man/ase-spec-init.md +57 -0
  61. package/dst/man/ase-spec-lint.md +74 -0
  62. package/dst/man/ase-spec-preview.md +57 -0
  63. package/dst/man/ase-spec.md +85 -0
  64. package/dst/man/ase-statusline.md +330 -0
  65. package/dst/man/ase-task-assign.md +138 -0
  66. package/dst/man/ase-task-board.md +651 -0
  67. package/dst/man/ase-task-delete.md +46 -0
  68. package/dst/man/ase-task-edit.md +73 -0
  69. package/dst/man/ase-task-idscheme.md +92 -0
  70. package/dst/man/ase-task-lifecycle.md +92 -0
  71. package/dst/man/ase-task-list.md +86 -0
  72. package/dst/man/ase-task-load.md +48 -0
  73. package/dst/man/ase-task-newid.md +100 -0
  74. package/dst/man/ase-task-purge.md +49 -0
  75. package/dst/man/ase-task-rename.md +69 -0
  76. package/dst/man/ase-task-request.md +108 -0
  77. package/dst/man/ase-task-save.md +78 -0
  78. package/dst/man/ase-task-status.md +79 -0
  79. package/dst/man/ase-task-store.md +377 -0
  80. package/dst/man/ase-task-view.md +50 -0
  81. package/dst/man/ase-task.md +335 -0
  82. package/dst/man/ase-util-compat.md +38 -0
  83. package/dst/man/ase-util-diagram.md +140 -0
  84. package/dst/man/ase-util-meta.md +68 -0
  85. package/dst/man/ase-util-metric.md +74 -0
  86. package/dst/man/ase-util-mint.md +85 -0
  87. package/dst/man/ase-util-worktree.md +109 -0
  88. package/dst/man/ase-util.md +81 -0
  89. package/dst/man/ase.md +228 -0
  90. package/package.json +16 -21
  91. package/plugin/.claude-plugin/plugin.json +1 -1
  92. package/plugin/.codex-plugin/plugin.json +1 -1
  93. package/plugin/.github/plugin/plugin.json +1 -1
  94. package/plugin/agents/ase-code-lint.md +3 -3
  95. package/plugin/agents/ase-docs-proofread.md +3 -3
  96. package/plugin/agents/ase-docs-refine.md +3 -3
  97. package/plugin/agents/ase-spec-lint.md +338 -0
  98. package/plugin/mods/ase-mods-common.ts +444 -0
  99. package/plugin/mods/ase-mods-grill.ts +312 -0
  100. package/plugin/mods/ase-mods-help-browse.ts +405 -0
  101. package/plugin/mods/ase-mods-help-compose.ts +561 -0
  102. package/plugin/mods/ase-mods-help-find.ts +426 -0
  103. package/plugin/mods/ase-mods-help-hint.ts +134 -0
  104. package/plugin/mods/ase-mods-help-show.ts +142 -0
  105. package/plugin/mods/ase-mods.ts +214 -381
  106. package/plugin/mods/claude-code.d.ts +26 -3
  107. package/plugin/skills/ase-code-lint/SKILL.md +15 -15
  108. package/plugin/skills/ase-code-lint/help.md +21 -8
  109. package/plugin/skills/ase-help-intent/SKILL.md +2 -1
  110. package/plugin/skills/ase-help-intent/data.md +214 -9
  111. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  112. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  113. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  114. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  115. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  116. package/plugin/skills/ase-spec-edit/help.md +1 -1
  117. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  118. package/plugin/skills/ase-spec-lint/help.md +184 -0
  119. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  120. package/plugin/skills/ase-task-implement/help.md +11 -1
  121. package/dst/man/ase-agent-adhoc.1 +0 -515
  122. package/dst/man/ase-agent-condenser.1 +0 -193
  123. package/dst/man/ase-agent-editor.1 +0 -212
  124. package/dst/man/ase-agent-estimator.1 +0 -214
  125. package/dst/man/ase-agent-fleet.1 +0 -185
  126. package/dst/man/ase-agent-implementer.1 +0 -233
  127. package/dst/man/ase-agent-integrator.1 +0 -213
  128. package/dst/man/ase-agent-qualifier.1 +0 -214
  129. package/dst/man/ase-agent-rebooter.1 +0 -193
  130. package/dst/man/ase-agent-relay.1 +0 -128
  131. package/dst/man/ase-agent-researcher.1 +0 -217
  132. package/dst/man/ase-agent.1 +0 -264
  133. package/dst/man/ase-artifact-list.1 +0 -38
  134. package/dst/man/ase-artifact-name.1 +0 -39
  135. package/dst/man/ase-artifact.1 +0 -56
  136. package/dst/man/ase-config-delete.1 +0 -45
  137. package/dst/man/ase-config-edit.1 +0 -48
  138. package/dst/man/ase-config-get.1 +0 -46
  139. package/dst/man/ase-config-init.1 +0 -60
  140. package/dst/man/ase-config-list.1 +0 -42
  141. package/dst/man/ase-config-set.1 +0 -52
  142. package/dst/man/ase-config.1 +0 -231
  143. package/dst/man/ase-hook-permission-request.1 +0 -36
  144. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  145. package/dst/man/ase-hook-session-end.1 +0 -47
  146. package/dst/man/ase-hook-session-persona.1 +0 -37
  147. package/dst/man/ase-hook-session-start.1 +0 -81
  148. package/dst/man/ase-hook-stop.1 +0 -34
  149. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  150. package/dst/man/ase-hook.1 +0 -51
  151. package/dst/man/ase-man.1 +0 -67
  152. package/dst/man/ase-mcp.1 +0 -61
  153. package/dst/man/ase-service-log.1 +0 -43
  154. package/dst/man/ase-service-send.1 +0 -47
  155. package/dst/man/ase-service-start.1 +0 -54
  156. package/dst/man/ase-service-status.1 +0 -46
  157. package/dst/man/ase-service-stop.1 +0 -37
  158. package/dst/man/ase-service.1 +0 -85
  159. package/dst/man/ase-setup-disable.1 +0 -44
  160. package/dst/man/ase-setup-enable.1 +0 -45
  161. package/dst/man/ase-setup-install.1 +0 -73
  162. package/dst/man/ase-setup-mcp.1 +0 -124
  163. package/dst/man/ase-setup-status.1 +0 -60
  164. package/dst/man/ase-setup-statusline.1 +0 -92
  165. package/dst/man/ase-setup-telemetry.1 +0 -92
  166. package/dst/man/ase-setup-uninstall.1 +0 -59
  167. package/dst/man/ase-setup-update.1 +0 -64
  168. package/dst/man/ase-setup.1 +0 -93
  169. package/dst/man/ase-spec-export.1 +0 -62
  170. package/dst/man/ase-spec-lint.1 +0 -40
  171. package/dst/man/ase-spec-preview.1 +0 -40
  172. package/dst/man/ase-spec.1 +0 -46
  173. package/dst/man/ase-statusline.1 +0 -189
  174. package/dst/man/ase-task-assign.1 +0 -71
  175. package/dst/man/ase-task-board.1 +0 -384
  176. package/dst/man/ase-task-delete.1 +0 -35
  177. package/dst/man/ase-task-edit.1 +0 -46
  178. package/dst/man/ase-task-idscheme.1 +0 -65
  179. package/dst/man/ase-task-lifecycle.1 +0 -57
  180. package/dst/man/ase-task-list.1 +0 -47
  181. package/dst/man/ase-task-load.1 +0 -36
  182. package/dst/man/ase-task-newid.1 +0 -61
  183. package/dst/man/ase-task-purge.1 +0 -37
  184. package/dst/man/ase-task-rename.1 +0 -44
  185. package/dst/man/ase-task-request.1 +0 -61
  186. package/dst/man/ase-task-save.1 +0 -48
  187. package/dst/man/ase-task-status.1 +0 -55
  188. package/dst/man/ase-task-store.1 +0 -194
  189. package/dst/man/ase-task-view.1 +0 -40
  190. package/dst/man/ase-task.1 +0 -160
  191. package/dst/man/ase-util-compat.1 +0 -25
  192. package/dst/man/ase-util-diagram.1 +0 -76
  193. package/dst/man/ase-util-meta.1 +0 -45
  194. package/dst/man/ase-util-metric.1 +0 -54
  195. package/dst/man/ase-util-mint.1 +0 -59
  196. package/dst/man/ase-util-worktree.1 +0 -72
  197. package/dst/man/ase-util.1 +0 -50
  198. package/dst/man/ase.1 +0 -124
@@ -0,0 +1,426 @@
1
+ # ase-config(1) -- Manage the Layered ASE Configuration
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`-h`|`--help`\]
7
+ \[`--scope` *scope*\]
8
+ *command*
9
+ \[*args* \[...\]\]
10
+
11
+ `ase config` \[`--scope` *scope*\] `init` *type*
12
+
13
+ `ase config` \[`--scope` *scope*\] `list`
14
+
15
+ `ase config` \[`--scope` *scope*\] `edit`
16
+
17
+ `ase config` \[`--scope` *scope*\] `get` *key*
18
+
19
+ `ase config` \[`--scope` *scope*\] `set` *key* *value*
20
+
21
+ `ase config` \[`--scope` *scope*\] `delete` *key*
22
+
23
+ ## DESCRIPTION
24
+
25
+ **ase config** manages the layered *ASE* configuration, a stack of
26
+ `config.yaml` files of the *scopes* `user` < `project` < `task:`*id* <
27
+ `session:`*id*, on top of a built-in `default` scope carrying the
28
+ default values. Reads cascade from the strongest scope down to the
29
+ weakest one and return the first defined value, while writes are
30
+ always confined to the file of the strongest scope of the chain (the
31
+ *target* scope).
32
+
33
+ All files are validated against the configuration schema: on read,
34
+ unknown or invalid entries are warned about and dropped from the
35
+ in-memory view, while on set, delete, and write they lead to a fatal
36
+ error. A target file still carrying invalid content is never
37
+ overwritten, as the skipped content would otherwise be lost: repair
38
+ it first (e.g. via `ase config edit`).
39
+
40
+ Obsolete (pre-1.1.0) entries `project.artifact.task.{basedir,files}`
41
+ and `agent.{task,skill}` are migrated in place on reading: a `basedir`
42
+ becomes `project.task.store.url` (as `ase:`*basedir*) unless the
43
+ latter is already set, and the other entries are dropped.
44
+
45
+ A *key* is a dotted path like `agent.persona`. Any unambiguous
46
+ trailing part of a known key is accepted, too, e.g., `persona` for
47
+ `agent.persona` or `store.url` for `project.task.store.url`, while an
48
+ ambiguous one (like `color.dim`) is an error.
49
+
50
+ Without a *command*, the usage information is shown and the command
51
+ exits with status `1`.
52
+
53
+ ## OPTIONS
54
+
55
+ - \[`-h`|`--help`\]:
56
+ Show usage information and exit.
57
+
58
+ - \[`--scope` *scope*\]:
59
+ Select the scope chain. This option belongs to `ase config` itself
60
+ and hence has to be given *before* the *command*, e.g.,
61
+ `ase config --scope user set agent.persona writer`.
62
+
63
+ The *scope* value is a comma-separated list of scope terms, in any
64
+ order, where each term is one of `user`, `project`, `task:`*id*, or
65
+ `session:`*id* (with *id* matching `[A-Za-z0-9._-]+`, but neither `.`
66
+ nor `..`). At most one term per kind is allowed. The chain is
67
+ canonicalized into the fixed inheritance order `default` < `user` <
68
+ `project` < `task` < `session`:
69
+
70
+ - `user` is always implicitly added at the bottom of the chain.
71
+ - `project` is implicitly added only when a *project context*
72
+ exists, i.e., when the current working directory is inside a Git
73
+ working tree or a `.ase` directory exists at or above it (except
74
+ in the home directory), and only as long as it stays weaker than
75
+ the strongest explicitly requested term, so an explicit `--scope
76
+ user` is never silently retargeted to `project`.
77
+ - Specifying `project` explicitly without a project context is an
78
+ error.
79
+
80
+ Without `--scope`, the chain is `project` (with `user` below it) when
81
+ a project context exists, otherwise `user` only. Example: `--scope
82
+ task:T1,session:S1` yields the chain `default` -> `user` -> `project`
83
+ -> `task:T1` -> `session:S1` with `session:S1` as the target scope.
84
+
85
+ ## COMMANDS
86
+
87
+ - `init` *type*:
88
+ Initialize the target scope with the preset values of *type*
89
+ (`default`, `vibe`, `pro`, or `industry`). See `ase-config-init`(1).
90
+
91
+ - `list`:
92
+ List all configuration keys with their effective values and the
93
+ scopes supplying them. See `ase-config-list`(1).
94
+
95
+ - `edit`:
96
+ Edit the configuration file of the target scope with the text editor.
97
+ See `ase-config-edit`(1).
98
+
99
+ - `get` *key*:
100
+ Print the effective value of *key*. See `ase-config-get`(1).
101
+
102
+ - `set` *key* *value*:
103
+ Set *key* to *value* on the target scope. See `ase-config-set`(1).
104
+
105
+ - `delete` *key*:
106
+ Delete *key* from the target scope. See `ase-config-delete`(1).
107
+
108
+ ## CONFIGURATION KEYS
109
+
110
+ The following keys are recognized. Every key is restricted to the
111
+ listed values (where *string* means any non-empty string) and is
112
+ writable on all scopes `user`, `project`, `task`, and `session`,
113
+ unless stated otherwise. A default stems from the built-in `default`
114
+ scope (shown by `ase config list` with scope `default`) or, where
115
+ stated, from the code using the key.
116
+
117
+ Project identity and classification:
118
+
119
+ - `project.id` (*string*):
120
+ The unique id of the project. Default: the sanitized basename of the
121
+ project root (with all characters other than `A-Z`, `a-z`, `0-9`,
122
+ `_`, and `-` replaced by `_`), or *basedir*`-`*worktree* if the
123
+ project root is a worktree *basedir*`/`*worktree* next to an `active`
124
+ symbolic link in *basedir*. An explicit id is required for a remote
125
+ task store and for the agent relay.
126
+
127
+ - `project.name` (*string*):
128
+ The full name of the project (default: `Example Project`).
129
+
130
+ - `project.boxing` (`white`, `grey`, or `black`):
131
+ Whether the project artifacts are treated as a white box (fully
132
+ transparent and understood), grey box (partially), or black box (not
133
+ at all), which modulates the work depth and output visibility of the
134
+ skills (default: `white`).
135
+
136
+ - `project.users` (*string*, `user` and `project` scopes only):
137
+ The comma-separated list of the known human assignees of the tasks
138
+ (default: empty). If not empty, an assignment to anybody else than
139
+ `none`, the current user, one of these users, or an agent present at
140
+ the agent relay is warned about (see `ase-task-assign`(1)), and the
141
+ assign popup of the task boards suggests these users (else the
142
+ current user) besides the agents (see `ase-task-board`(1)).
143
+
144
+ Task plans (all writable on the `user` and `project` scopes only,
145
+ `project.task.store.token` on the `user` scope only):
146
+
147
+ - `project.task.lifecycle` (`solo`, `team`, or `enterprise`):
148
+ The task lifecycle model: single-phase for a local solo developer,
149
+ two-phase for a small team, or four-phase for a gated enterprise
150
+ pipeline (default: `solo`). See `ase-task-lifecycle`(1).
151
+
152
+ - `project.task.idscheme` (`slug`\[`:`*words*\], `seq`\[`:`*template*\],
153
+ or `any`):
154
+ The task id scheme (default: `slug`). See `ase-task-idscheme`(1) and
155
+ `ase-task-newid`(1).
156
+
157
+ - `project.task.store.url` (*string*):
158
+ The URL of the task store: `ase:`*path* (local, default
159
+ `ase:./.ase/task`), `ase://`*addr*`:`*port*\[`/`*token*\] resp.
160
+ `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] (remote task
161
+ store server), `github:`*owner*`/`*repo* (and
162
+ `github+http`\[`s`\]`://`*host*`/`*owner*`/`*repo*),
163
+ `gitlab:`*namespace*`/`*project* (and `gitlab://`*host*`/`...,
164
+ `gitlab+http`\[`s`\]`://`*host*`/`...), or
165
+ `gitea+http`\[`s`\]`://`*host*`/`*owner*`/`*repo*. See `ase-task`(1).
166
+
167
+ - `project.task.store.token` (*string*, `user` scope only):
168
+ The bearer token of a remote task store, resp. the token of a GitHub,
169
+ GitLab, or Gitea task store. Masked as `***` by `ase config list`.
170
+
171
+ - `project.task.store.crt`, `project.task.store.key` (*string*):
172
+ The PEM certificate (chain) and private key files of the task store
173
+ server, relative to the directory of the configuration file defining
174
+ them. See `ase-task-store`(1).
175
+
176
+ - `project.task.default.source` (`worktree` or `branch:`*name*):
177
+ The default of the `Source:` key of the task plans (default:
178
+ `worktree`).
179
+
180
+ - `project.task.default.changeset` (`worktree`, `branch:`*name*, or
181
+ `attachment:`*name*):
182
+ The default of the `Changeset:` key of the task plans (default:
183
+ `worktree`).
184
+
185
+ - `project.task.default.target` (`worktree`, `branch:`*name*, or
186
+ `source`):
187
+ The default of the `Target:` key of the task plans (default:
188
+ `source`).
189
+
190
+ A branch *name* has to start with a letter, digit, or `_`, consist of
191
+ letters, digits, `_`, `.`, `/`, and `-`, must not end in `/`, `.`, or
192
+ `.lock`, and must not contain `..` or `//`. An attachment *name*
193
+ consists of letters, digits, `_`, and `-`. A branch or attachment
194
+ *name* can carry the placeholder `{id}`, which reads as the id of the
195
+ task (with every character other than letters, digits, `_`, and `-`
196
+ replaced by `-`, runs of `-` reduced to one, and leading and trailing
197
+ `-` and `_` removed, e.g., `12` for `#12` and `FOO-12` for `FOO#12`),
198
+ e.g., `branch:cs-{id}` for a
199
+ separate changeset branch per task.
200
+
201
+ - `project.task.effort.scale` (*xs*`,`*s*`,`*m*`,`*l*):
202
+ The upper bounds of the effort size bands `XS`, `S`, `M`, and `L` of
203
+ the `Effort:` key of the task plans, in strictly ascending human
204
+ minutes, while `XL` is open-ended (default: `15,60,240,960`). The
205
+ task boards sum the efforts via the band midpoints, counting `XL` as
206
+ twice the `L` bound.
207
+
208
+ - `project.task.effort.factor` (*number*):
209
+ The human minutes per point of the *attention score* of the effort
210
+ estimation, i.e., of the weighted requirements, behaviors, and
211
+ changes stated by the checklist items of a plan (default: `1`).
212
+ Fitted and stored by `/ase-task-estimate --calibrate --save`.
213
+
214
+ - `project.task.effort.file`, `project.task.effort.line` (*number*):
215
+ The additional human minutes per touched file resp. per predicted
216
+ changed line of the *volume score* of the effort estimation, where
217
+ the line minutes also cover the edge cases and polishing no plan
218
+ describes, and a newly written line weighs three times a changed
219
+ one (defaults: `1` resp. `0.025`). Fitted and stored by
220
+ `/ase-task-estimate --calibrate --save`.
221
+
222
+ - `project.task.effort.iteration` (*number*):
223
+ The multiplier of the estimated minutes of a task whose main
224
+ deliverable is an interactive or visual user interface, covering
225
+ its many rounds of post-adjustment, at least `1` (default: `2.5`).
226
+ Not fitted by the calibration.
227
+
228
+ Agent relay (all writable on the `user` and `project` scopes only,
229
+ `project.relay.token` on the `user` scope only):
230
+
231
+ - `project.relay.url` (*string*):
232
+ The URL of the agent relay, as `ase://`*addr*`:`*port*\[`/`*token*\]
233
+ or `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] (default:
234
+ none). See `ase-agent-relay`(1).
235
+
236
+ - `project.relay.token` (*string*, `user` scope only):
237
+ The bearer token of the agent relay. Masked as `***` by `ase config
238
+ list`.
239
+
240
+ - `project.relay.crt`, `project.relay.key` (*string*):
241
+ The PEM certificate (chain) and private key files of the agent relay
242
+ server, relative to the directory of the configuration file defining
243
+ them.
244
+
245
+ Per-project service:
246
+
247
+ - `project.service.port` (*port* `1024`..`65535`, `project` scope
248
+ only):
249
+ The preferred port of the per-project background service on
250
+ `127.0.0.1`, falling back to a random port out of the range
251
+ `42000`..`44000` if unavailable (default: none). See
252
+ `ase-service-start`(1).
253
+
254
+ Project artifacts (all writable on the `user` and `project` scopes
255
+ only), each kind defined by a `basedir` directory (relative to the
256
+ project root, empty for the root itself) and a whitespace-separated
257
+ `files` glob specification (relative to `basedir`, with `!` negating a
258
+ glob). See `ase-artifact`(1):
259
+
260
+ - `project.artifact.spec.basedir`, `project.artifact.spec.files`:
261
+ The specification files (default: `docs/specbook` and
262
+ `*.{md,txt,svg,png,jpg}`).
263
+
264
+ - `project.artifact.spec.schema` (*string*):
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.,
268
+ `std`). See `ase-spec`(1).
269
+
270
+ - `project.artifact.code.basedir`, `project.artifact.code.files`:
271
+ The source code files (default: `src` and `** !**/etc/**
272
+ !**/{.gitignore,.npmignore,package.json}`).
273
+
274
+ - `project.artifact.docs.basedir`, `project.artifact.docs.files`:
275
+ The documentation files (default: `doc` and `**
276
+ **/{README,LICENSE,CHANGELOG}.{md,txt} !{spec,arch}/**`).
277
+
278
+ - `project.artifact.infr.basedir`, `project.artifact.infr.files`:
279
+ The infrastructure files (default: empty and
280
+ `**/{.github,.claude*,etc}/**
281
+ **/{AGENTS.md,{package,tsconfig*}.json,.{git,npm}ignore}`).
282
+
283
+ Agent:
284
+
285
+ - `agent.persona` (`writer`, `engineer`, `journalist`, `telegrapher`,
286
+ or `caveman`):
287
+ The communication style of the AI agent (default: `engineer`).
288
+
289
+ - `agent.guidance` (`none`, `minimal`, `normal`, or `verbose`):
290
+ The amount of unsolicited help hints of the AI agent (default:
291
+ `normal`).
292
+
293
+ AI usage accounting (see `ase-task-assign`(1) and
294
+ `ase-setup-telemetry`(1)):
295
+
296
+ - `telemetry.enabled` (`true` or `false`, `user` and `project` scopes
297
+ only):
298
+ Whether the AI usage accounting is enabled as a whole (default:
299
+ `false`).
300
+
301
+ - `telemetry.implicit` (`true` or `false`, `user` and `project` scopes
302
+ only):
303
+ Whether the usage of an interactive session is also accounted onto
304
+ its active task while the task is *unassigned*, i.e., without
305
+ assigning it to oneself (default: `true`, never for task `default`).
306
+
307
+ - `telemetry.service.port` (*port* `1024`..`65535`, `user` scope only):
308
+ The port of the per-user OTLP ingress on `127.0.0.1` (default:
309
+ `44318`).
310
+
311
+ - `telemetry.service.token` (*string*, `user` scope only):
312
+ The bearer token of the OTLP ingress, generated by `ase setup
313
+ telemetry activate`. Masked as `***` by `ase config list`.
314
+
315
+ - `telemetry.service.interval` (*minutes*, `user` and `project` scopes
316
+ only):
317
+ The interval of the interim bookings of the open usage windows
318
+ (default: `10`, `0` disables).
319
+
320
+ - `telemetry.service.idle` (*minutes*, `user` and `project` scopes
321
+ only):
322
+ The idle time after which a usage window pauses (default: `30`, `0`
323
+ disables).
324
+
325
+ - `telemetry.prices.ai` (*table*, `user` scope only):
326
+ The price table *model*`=`*input*`/`*output*\[`/`*cread*`/`*cwrite*\]
327
+ \[...\] (whitespace-separated) in USD per million input, output,
328
+ cache read, and cache write tokens (the cache prices defaulting to the
329
+ input price), keyed by the model or the tool name, with `*` for all
330
+ others (default: `*=4.00/20.00/0.20/5.00`).
331
+
332
+ - `telemetry.prices.hr` (*table*, `user` and `project` scopes only):
333
+ The hourly rate table *user-id*`=`*usd-per-hour*\[`,`...\] of the
334
+ human time, keyed by the assignee, with `*` for all others (default:
335
+ `*=110`).
336
+
337
+ Task board (all writable on the `user` and `project` scopes only, see
338
+ `ase-task-board`(1)):
339
+
340
+ - `board.tui.color.dim`, `board.tui.color.normal`,
341
+ `board.tui.color.accent`, `board.tui.color.signal`:
342
+ The colors of the four color roles of the terminal board (defaults:
343
+ `grey`, `default`, `blue`, and `red`), each either `default` (the
344
+ foreground color of the terminal), a color name (like `blue` or
345
+ `blueBright`), `#rgb`, `#rrggbb`, `ansi256(`*n*`)`, or
346
+ `rgb(`*r*`,`*g*`,`*b*`)`.
347
+
348
+ - `board.web.color.dim`, `board.web.color.normal`,
349
+ `board.web.color.accent`, `board.web.color.signal`:
350
+ The base colors of the four color roles of the web board (defaults:
351
+ `grey`, `black`, `blue`, and `orange`), each either `default`, a
352
+ color name (`black`, `grey`, `gray`, `brown`, `red`, `orange`,
353
+ `yellow`, `green`, `teal`, `cyan`, `blue`, `purple`, or `magenta`),
354
+ `#rgb`, or `#rrggbb`. Each base color is expanded into a spread of 64
355
+ colors over the entire lightness range, out of which the web board
356
+ takes all its colors.
357
+
358
+ - `board.web.editor.keymap` (`default`, `vim`, or `emacs`):
359
+ The key bindings of the task plan editor of the web board (default:
360
+ `default`).
361
+
362
+ ## ENVIRONMENT
363
+
364
+ - `EDITOR`, `VISUAL`:
365
+ The text editor of `ase config edit`.
366
+
367
+ - `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `APPDATA`, `LOCALAPPDATA`:
368
+ The base directories of the *per-user configuration directory* and
369
+ the *per-user state directory* (see **FILES**).
370
+
371
+ ## FILES
372
+
373
+ - *per-user configuration directory*`/config.yaml`:
374
+ The configuration of scope `user` (with file mode `0600`). The
375
+ per-user configuration directory is `~/Library/Application
376
+ Support/ase` on macOS, `%APPDATA%\ase` on Windows, and
377
+ `$XDG_CONFIG_HOME/ase` (falling back to `~/.config/ase`) elsewhere.
378
+
379
+ - `.ase/config.yaml`:
380
+ The configuration of scope `project`, searched upward from the
381
+ current working directory up to the project root, else located in the
382
+ project root.
383
+
384
+ - `.ase/task/`*id*`/config.yaml`:
385
+ The configuration of scope `task:`*id*, located in the project root
386
+ (or the current working directory outside of a project).
387
+
388
+ - *per-user state directory*`/session/`*id*`/config.yaml`:
389
+ The configuration of scope `session:`*id*, independent of any
390
+ project. The per-user state directory is `~/Library/Application
391
+ Support/ase` on macOS, `%LOCALAPPDATA%\ase` on Windows, and
392
+ `$XDG_STATE_HOME/ase` (falling back to `~/.local/state/ase`)
393
+ elsewhere.
394
+
395
+ Every write happens under an advisory file lock and atomically. A file
396
+ carrying a secret key (a token) is written with file mode `0600`.
397
+
398
+ ## EXIT STATUS
399
+
400
+ `0` on success, `1` on any error (including a missing *command*).
401
+
402
+ ## EXAMPLES
403
+
404
+ ```sh
405
+ # initialize the project configuration with the "industry" preset
406
+ $ ase config init industry
407
+
408
+ # show the effective configuration
409
+ $ ase config list
410
+
411
+ # set the persona of the agent on the user scope
412
+ $ ase config --scope user set agent.persona telegrapher
413
+
414
+ # read a value by an abbreviated key
415
+ $ ase config get persona
416
+ ```
417
+
418
+ ## SEE ALSO
419
+
420
+ `ase`(1), `ase-config-init`(1), `ase-config-list`(1),
421
+ `ase-config-edit`(1), `ase-config-get`(1), `ase-config-set`(1),
422
+ `ase-config-delete`(1).
423
+
424
+ ## AUTHOR
425
+
426
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,61 @@
1
+ # ase-hook-permission-request(1) -- Handle the PermissionRequest Hook Event
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase hook permission-request`
6
+ \[`-h`|`--help`\]
7
+ \[`-t`|`--tool` *tool*\]
8
+
9
+ ## DESCRIPTION
10
+
11
+ **ase hook permission-request** handles the `PermissionRequest` hook
12
+ event of *OpenAI Codex CLI*, which the agent tool fires only when a
13
+ tool invocation would otherwise require an interactive user approval.
14
+ It is intended to be invoked by the agent tool internally as a
15
+ configured hook handler only, and not directly by end users. It is
16
+ configured for `--tool codex` only, as *OpenAI Codex CLI* does not
17
+ honor an approval in its `PreToolUse` event.
18
+
19
+ The handler reads the event payload from standard input, a JSON object
20
+ with the tool name (field `tool_name`), the tool input (field
21
+ `tool_input`), and the session id (field `session_id`), and applies the
22
+ very same auto-approval rules as `ase hook pre-tool-use` (see
23
+ `ase-hook-pre-tool-use`(1)): *ASE* CLI invocations, *ASE* skills, *ASE*
24
+ MCP tools, tools of the pre-defined foreign MCP servers, reads of
25
+ plugin files, and edits during an active edit-capable skill.
26
+
27
+ On approval, the handler writes the decision
28
+ `{"hookSpecificOutput":{"hookEventName":"PermissionRequest","decision":{"behavior":"allow"}}}`
29
+ to standard output. Otherwise, it stays silent and hence defers to the
30
+ regular approval flow of the agent tool.
31
+
32
+ ## OPTIONS
33
+
34
+ - \[`-h`|`--help`\]:
35
+ Show usage information and exit.
36
+
37
+ - \[`-t`|`--tool` *tool*\]:
38
+ The agent tool whose event payload is read: `claude`, `copilot`, or
39
+ `codex` (as configured: `codex`). Default: `$ASE_TOOL`, else
40
+ `claude`.
41
+
42
+ ## ENVIRONMENT
43
+
44
+ - `PLUGIN_ROOT`, `CLAUDE_PLUGIN_ROOT`, `COPILOT_PLUGIN_ROOT`:
45
+ The plugin root directory for the auto-approval of plugin file
46
+ reads.
47
+
48
+ - `ASE_TOOL`:
49
+ The default of `--tool`.
50
+
51
+ ## EXIT STATUS
52
+
53
+ Exits with status `0`, unless `--tool` is invalid (status `1`).
54
+
55
+ ## SEE ALSO
56
+
57
+ `ase`(1), `ase-hook`(1), `ase-hook-pre-tool-use`(1).
58
+
59
+ ## AUTHOR
60
+
61
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,96 @@
1
+ # ase-hook-pre-tool-use(1) -- Handle the PreToolUse Hook Event
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase hook pre-tool-use`
6
+ \[`-h`|`--help`\]
7
+ \[`-t`|`--tool` *tool*\]
8
+
9
+ ## DESCRIPTION
10
+
11
+ **ase hook pre-tool-use** handles the `PreToolUse` hook event of
12
+ *Anthropic Claude Code CLI* and *OpenAI Codex CLI*, resp. the
13
+ `preToolUse` hook event of *GitHub Copilot CLI*, which the agent tool
14
+ fires before each tool invocation. It is intended to be invoked by the
15
+ agent tool internally as a configured hook handler only, and not
16
+ directly by end users.
17
+
18
+ The handler reads the event payload from standard input, a JSON object
19
+ with the tool name (field `tool_name`, resp. `toolName` for *GitHub
20
+ Copilot CLI*), the tool input (field `tool_input`, resp. `toolArgs`,
21
+ either an object or a JSON-encoded string), and the session id (field
22
+ `session_id`, resp. `sessionId`). It auto-approves the invocation, so
23
+ the user is not prompted for it, if it is one of the following:
24
+
25
+ - a shell command (tool `Bash`, resp. `bash`) starting with the word
26
+ `ase` and not containing any of the characters `;`, `&`, `|`, `<`,
27
+ `>`, backtick, or newline, or a `$(` command substitution;
28
+
29
+ - a skill invocation (tool `Skill`) of an *ASE* skill (`ase-`*name*,
30
+ optionally namespaced as `ase:ase-`*name*);
31
+
32
+ - an *ASE* MCP tool (`mcp__plugin_ase_ase__`*tool* for `claude`,
33
+ `ase-`*tool* for `copilot`, and `mcp__ase__`*tool* for `codex`);
34
+
35
+ - a tool of one of the pre-defined foreign MCP servers of `ase setup
36
+ mcp` (`chat-alibaba-qwen`, `chat-deepseek`, `chat-google-gemini`,
37
+ `chat-openai-chatgpt`, `chat-xai-grok`, `chat-zai-glm`,
38
+ `search-brave`, `search-exa`, and `search-perplexity`, named
39
+ `mcp__`*server*`__`*tool* resp. *server*`-`*tool* for `copilot`);
40
+
41
+ - a file read (tool `Read`) of a file located below the plugin root
42
+ directory (e.g., the meta files included by the skills);
43
+
44
+ - a file edit (tool `Edit`) while one of the edit-capable skills
45
+ `ase-code-lint`, `ase-spec-lint`, `ase-docs-shorten`, `ase-docs-refine`, or
46
+ `ase-docs-proofread` is recorded as active in the internal session
47
+ state of the session.
48
+
49
+ On approval, the handler writes the decision `permissionDecision:
50
+ allow` with a human-readable `permissionDecisionReason` to standard
51
+ output, nested in `hookSpecificOutput` (`claude`), resp. as top-level
52
+ fields (`copilot`). Otherwise, it stays silent and hence defers to the
53
+ regular permission flow of the agent tool.
54
+
55
+ For `--tool codex`, the handler only drains its standard input and
56
+ stays silent, as *OpenAI Codex CLI* rejects an approval in
57
+ `PreToolUse`; the approval is granted by `ase hook permission-request`
58
+ instead.
59
+
60
+ ## OPTIONS
61
+
62
+ - \[`-h`|`--help`\]:
63
+ Show usage information and exit.
64
+
65
+ - \[`-t`|`--tool` *tool*\]:
66
+ The agent tool whose event payload is read and whose decision format
67
+ is written: `claude`, `copilot`, or `codex`. Default: `$ASE_TOOL`,
68
+ else `claude`.
69
+
70
+ ## ENVIRONMENT
71
+
72
+ - `CLAUDE_PLUGIN_ROOT`, `COPILOT_PLUGIN_ROOT`, `PLUGIN_ROOT`:
73
+ The plugin root directory for the auto-approval of plugin file
74
+ reads. If unset, such reads are not auto-approved.
75
+
76
+ - `ASE_TOOL`:
77
+ The default of `--tool`.
78
+
79
+ ## FILES
80
+
81
+ - *per-user state directory*`/session/`*id*`/state.yaml`:
82
+ The internal session state, whose `skill` field records the active
83
+ edit-capable skill.
84
+
85
+ ## EXIT STATUS
86
+
87
+ Exits with status `0`, unless `--tool` is invalid (status `1`).
88
+
89
+ ## SEE ALSO
90
+
91
+ `ase`(1), `ase-hook`(1), `ase-hook-permission-request`(1),
92
+ `ase-setup-mcp`(1).
93
+
94
+ ## AUTHOR
95
+
96
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,71 @@
1
+ # ase-hook-session-end(1) -- Handle the SessionEnd Hook Event
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase hook session-end`
6
+ \[`-h`|`--help`\]
7
+ \[`-t`|`--tool` *tool*\]
8
+
9
+ ## DESCRIPTION
10
+
11
+ **ase hook session-end** handles the `SessionEnd` hook event of
12
+ *Anthropic Claude Code CLI* and *OpenAI Codex CLI*, resp. the
13
+ `sessionEnd` hook event of *GitHub Copilot CLI*. It is intended to be
14
+ invoked by the agent tool internally as a configured hook handler only,
15
+ and not directly by end users.
16
+
17
+ The handler reads the event payload from standard input, a JSON object
18
+ with the session id (field `session_id`, resp. `sessionId`). For a
19
+ valid session id (matching `[A-Za-z0-9._-]+`), it:
20
+
21
+ 1. removes the session directory *per-user state
22
+ directory*`/session/`*id* with the session-scoped configuration
23
+ (scope `session:`*id*) and the internal session state, and
24
+
25
+ 2. detaches the session from its AI usage window (if any, see
26
+ `ase-task-assign`(1)) through the `ase service` of the owning project,
27
+ which closes and books the window once no other session remains
28
+ attached to it. If the owning project service is not reachable in
29
+ time, the session end is noted in the session registry
30
+ (*per-user state directory*`/telemetry.json`) instead, and the
31
+ service is started in the background, which then detaches the
32
+ session as of its noted end. A failure is only warned about.
33
+
34
+ An empty, malformed, or invalid payload is silently ignored. The
35
+ handler writes nothing to standard output.
36
+
37
+ ## OPTIONS
38
+
39
+ - \[`-h`|`--help`\]:
40
+ Show usage information and exit.
41
+
42
+ - \[`-t`|`--tool` *tool*\]:
43
+ The agent tool whose event payload is read: `claude`, `copilot`, or
44
+ `codex`. Default: `$ASE_TOOL`, else `claude`.
45
+
46
+ ## ENVIRONMENT
47
+
48
+ - `ASE_TOOL`:
49
+ The default of `--tool`.
50
+
51
+ ## FILES
52
+
53
+ - *per-user state directory*`/session/`*id*`/`:
54
+ The per-session directory, removed by this handler.
55
+
56
+ - *per-user state directory*`/telemetry.json`:
57
+ The telemetry state, whose session registry routes the session to
58
+ the service of its project.
59
+
60
+ ## EXIT STATUS
61
+
62
+ Exits with status `0`, unless `--tool` is invalid (status `1`).
63
+
64
+ ## SEE ALSO
65
+
66
+ `ase`(1), `ase-hook`(1), `ase-hook-session-start`(1),
67
+ `ase-task-assign`(1), `ase-service`(1), `ase-setup-telemetry`(1).
68
+
69
+ ## AUTHOR
70
+
71
+ Dr. Ralf S. Engelschall <rse@engelschall.com>