@rse/ase 2.0.2 → 2.0.4

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 (236) hide show
  1. package/dst/ase-agent-definition-core.js +111 -87
  2. package/dst/ase-agent-fleet.js +1 -1
  3. package/dst/ase-agent-runtime-claim.js +5 -3
  4. package/dst/ase-agent-runtime-engine.js +1 -1
  5. package/dst/ase-agent-runtime-phase.js +1 -1
  6. package/dst/ase-agent-runtime-request.js +1 -1
  7. package/dst/ase-agent-runtime.js +3 -5
  8. package/dst/ase-artifact.js +3 -3
  9. package/dst/ase-config-core.js +2 -16
  10. package/dst/ase-config-schema.js +1 -3
  11. package/dst/ase-config.js +2 -0
  12. package/dst/ase-hook.js +13 -13
  13. package/dst/ase-lib-daemon-cli.js +117 -4
  14. package/dst/ase-lib-server-cli.js +4 -5
  15. package/dst/ase-lib-version.js +14 -5
  16. package/dst/ase-man-catalog.js +229 -0
  17. package/dst/ase-man-render.js +278 -0
  18. package/dst/ase-man-tui.js +636 -0
  19. package/dst/ase-man.js +33 -27
  20. package/dst/ase-mcp.js +4 -4
  21. package/dst/ase-service-getopt.js +2 -2
  22. package/dst/ase-service-otel.js +4 -4
  23. package/dst/ase-service-skills.js +5 -15
  24. package/dst/ase-service.js +87 -210
  25. package/dst/ase-setup-common.js +1 -2
  26. package/dst/ase-setup-settings.js +6 -9
  27. package/dst/ase-setup.js +4 -5
  28. package/dst/ase-spec.js +103 -20
  29. package/dst/ase-statusline.js +170 -170
  30. package/dst/ase-task-board-filter.js +5 -4
  31. package/dst/ase-task-board-flow.js +7 -6
  32. package/dst/ase-task-board-graph.js +5 -4
  33. package/dst/ase-task-board-tui-control.js +41 -35
  34. package/dst/ase-task-board-tui-model.js +185 -167
  35. package/dst/ase-task-board-tui-popup.js +2 -3
  36. package/dst/ase-task-board-tui-view.js +74 -70
  37. package/dst/ase-task-board-web-client.js +27 -27
  38. package/dst/ase-task-board-web-server.js +2 -2
  39. package/dst/ase-task-board.js +1 -1
  40. package/dst/ase-task-format.js +1 -1
  41. package/dst/ase-task-store-client.js +17 -5
  42. package/dst/ase-task-store-core.js +5 -7
  43. package/dst/ase-task-store-issues.js +16 -1
  44. package/dst/ase-task-store-plugin-ase.js +7 -3
  45. package/dst/ase-task-store-plugin-gitea.js +9 -32
  46. package/dst/ase-task-store-plugin-github.js +3 -12
  47. package/dst/ase-task-store-plugin-gitlab.js +2 -18
  48. package/dst/ase-task.js +51 -23
  49. package/dst/ase-util-compat.js +1 -1
  50. package/dst/ase-util-diagram.js +13 -37
  51. package/dst/ase.js +5 -5
  52. package/dst/man/ase-agent-adhoc.md +1165 -0
  53. package/dst/man/ase-agent-condenser.md +383 -0
  54. package/dst/man/ase-agent-editor.md +441 -0
  55. package/dst/man/ase-agent-estimator.md +477 -0
  56. package/dst/man/ase-agent-fleet.md +358 -0
  57. package/dst/man/ase-agent-implementer.md +521 -0
  58. package/dst/man/ase-agent-integrator.md +449 -0
  59. package/dst/man/ase-agent-qualifier.md +426 -0
  60. package/dst/man/ase-agent-rebooter.md +384 -0
  61. package/dst/man/ase-agent-relay.md +262 -0
  62. package/dst/man/ase-agent-researcher.md +478 -0
  63. package/dst/man/ase-agent.md +628 -0
  64. package/dst/man/ase-artifact-list.md +57 -0
  65. package/dst/man/ase-artifact-name.md +56 -0
  66. package/dst/man/ase-artifact.md +92 -0
  67. package/dst/man/ase-config-delete.md +74 -0
  68. package/dst/man/ase-config-edit.md +83 -0
  69. package/dst/man/ase-config-get.md +70 -0
  70. package/dst/man/ase-config-init.md +110 -0
  71. package/dst/man/ase-config-list.md +68 -0
  72. package/dst/man/ase-config-set.md +92 -0
  73. package/dst/man/ase-config.md +426 -0
  74. package/dst/man/ase-hook-permission-request.md +61 -0
  75. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  76. package/dst/man/ase-hook-session-end.md +71 -0
  77. package/dst/man/ase-hook-session-persona.md +65 -0
  78. package/dst/man/ase-hook-session-start.md +184 -0
  79. package/dst/man/ase-hook-stop.md +52 -0
  80. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  81. package/dst/man/ase-hook.md +93 -0
  82. package/dst/man/ase-man.md +195 -0
  83. package/dst/man/ase-mcp.md +102 -0
  84. package/dst/man/ase-service-log.md +59 -0
  85. package/dst/man/ase-service-send.md +60 -0
  86. package/dst/man/ase-service-start.md +93 -0
  87. package/dst/man/ase-service-status.md +58 -0
  88. package/dst/man/ase-service-stop.md +52 -0
  89. package/dst/man/ase-service.md +124 -0
  90. package/dst/man/ase-setup-disable.md +67 -0
  91. package/dst/man/ase-setup-enable.md +66 -0
  92. package/dst/man/ase-setup-install.md +116 -0
  93. package/dst/man/ase-setup-mcp.md +213 -0
  94. package/dst/man/ase-setup-status.md +101 -0
  95. package/dst/man/ase-setup-statusline.md +162 -0
  96. package/dst/man/ase-setup-telemetry.md +166 -0
  97. package/dst/man/ase-setup-uninstall.md +85 -0
  98. package/dst/man/ase-setup-update.md +117 -0
  99. package/dst/man/ase-setup.md +156 -0
  100. package/dst/man/ase-spec-export.md +99 -0
  101. package/dst/man/ase-spec-init.md +57 -0
  102. package/dst/man/ase-spec-lint.md +74 -0
  103. package/dst/man/ase-spec-preview.md +57 -0
  104. package/dst/man/ase-spec.md +85 -0
  105. package/dst/man/ase-statusline.md +330 -0
  106. package/dst/man/ase-task-assign.md +138 -0
  107. package/dst/man/ase-task-board.md +651 -0
  108. package/dst/man/ase-task-delete.md +46 -0
  109. package/dst/man/ase-task-edit.md +73 -0
  110. package/dst/man/ase-task-idscheme.md +92 -0
  111. package/dst/man/ase-task-lifecycle.md +92 -0
  112. package/dst/man/ase-task-list.md +86 -0
  113. package/dst/man/ase-task-load.md +48 -0
  114. package/dst/man/ase-task-newid.md +100 -0
  115. package/dst/man/ase-task-purge.md +49 -0
  116. package/dst/man/ase-task-rename.md +69 -0
  117. package/dst/man/ase-task-request.md +108 -0
  118. package/dst/man/ase-task-save.md +78 -0
  119. package/dst/man/ase-task-status.md +79 -0
  120. package/dst/man/ase-task-store.md +377 -0
  121. package/dst/man/ase-task-view.md +50 -0
  122. package/dst/man/ase-task.md +335 -0
  123. package/dst/man/ase-util-compat.md +38 -0
  124. package/dst/man/ase-util-diagram.md +140 -0
  125. package/dst/man/ase-util-meta.md +68 -0
  126. package/dst/man/ase-util-metric.md +74 -0
  127. package/dst/man/ase-util-mint.md +85 -0
  128. package/dst/man/ase-util-worktree.md +109 -0
  129. package/dst/man/ase-util.md +81 -0
  130. package/dst/man/ase.md +228 -0
  131. package/package.json +12 -17
  132. package/plugin/.claude-plugin/plugin.json +1 -1
  133. package/plugin/.codex-plugin/plugin.json +1 -1
  134. package/plugin/.github/plugin/plugin.json +1 -1
  135. package/plugin/agents/ase-code-lint.md +3 -3
  136. package/plugin/agents/ase-docs-proofread.md +3 -3
  137. package/plugin/agents/ase-docs-refine.md +3 -3
  138. package/plugin/agents/ase-spec-lint.md +338 -0
  139. package/plugin/meta/ase-skill.md +7 -0
  140. package/plugin/mods/ase-mods.ts +10 -7
  141. package/plugin/mods/claude-code.d.ts +26 -3
  142. package/plugin/skills/ase-code-analyze/SKILL.md +18 -10
  143. package/plugin/skills/ase-code-analyze/help.md +11 -6
  144. package/plugin/skills/ase-code-lint/SKILL.md +37 -23
  145. package/plugin/skills/ase-code-lint/help.md +10 -5
  146. package/plugin/skills/ase-help-intent/data.md +204 -13
  147. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  148. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  149. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  150. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  151. package/plugin/skills/ase-repo-review/SKILL.md +5 -3
  152. package/plugin/skills/ase-repo-review/help.md +3 -1
  153. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  154. package/plugin/skills/ase-spec-edit/help.md +1 -1
  155. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  156. package/plugin/skills/ase-spec-lint/help.md +171 -0
  157. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  158. package/plugin/skills/ase-task-implement/help.md +11 -1
  159. package/dst/man/ase-agent-adhoc.1 +0 -515
  160. package/dst/man/ase-agent-condenser.1 +0 -193
  161. package/dst/man/ase-agent-editor.1 +0 -212
  162. package/dst/man/ase-agent-estimator.1 +0 -214
  163. package/dst/man/ase-agent-fleet.1 +0 -185
  164. package/dst/man/ase-agent-implementer.1 +0 -233
  165. package/dst/man/ase-agent-integrator.1 +0 -213
  166. package/dst/man/ase-agent-qualifier.1 +0 -214
  167. package/dst/man/ase-agent-rebooter.1 +0 -193
  168. package/dst/man/ase-agent-relay.1 +0 -128
  169. package/dst/man/ase-agent-researcher.1 +0 -217
  170. package/dst/man/ase-agent.1 +0 -264
  171. package/dst/man/ase-artifact-list.1 +0 -38
  172. package/dst/man/ase-artifact-name.1 +0 -39
  173. package/dst/man/ase-artifact.1 +0 -56
  174. package/dst/man/ase-config-delete.1 +0 -45
  175. package/dst/man/ase-config-edit.1 +0 -48
  176. package/dst/man/ase-config-get.1 +0 -46
  177. package/dst/man/ase-config-init.1 +0 -60
  178. package/dst/man/ase-config-list.1 +0 -42
  179. package/dst/man/ase-config-set.1 +0 -52
  180. package/dst/man/ase-config.1 +0 -231
  181. package/dst/man/ase-hook-permission-request.1 +0 -36
  182. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  183. package/dst/man/ase-hook-session-end.1 +0 -47
  184. package/dst/man/ase-hook-session-persona.1 +0 -37
  185. package/dst/man/ase-hook-session-start.1 +0 -81
  186. package/dst/man/ase-hook-stop.1 +0 -34
  187. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  188. package/dst/man/ase-hook.1 +0 -51
  189. package/dst/man/ase-man.1 +0 -67
  190. package/dst/man/ase-mcp.1 +0 -61
  191. package/dst/man/ase-service-log.1 +0 -43
  192. package/dst/man/ase-service-send.1 +0 -47
  193. package/dst/man/ase-service-start.1 +0 -54
  194. package/dst/man/ase-service-status.1 +0 -46
  195. package/dst/man/ase-service-stop.1 +0 -37
  196. package/dst/man/ase-service.1 +0 -85
  197. package/dst/man/ase-setup-disable.1 +0 -44
  198. package/dst/man/ase-setup-enable.1 +0 -45
  199. package/dst/man/ase-setup-install.1 +0 -73
  200. package/dst/man/ase-setup-mcp.1 +0 -124
  201. package/dst/man/ase-setup-status.1 +0 -60
  202. package/dst/man/ase-setup-statusline.1 +0 -92
  203. package/dst/man/ase-setup-telemetry.1 +0 -92
  204. package/dst/man/ase-setup-uninstall.1 +0 -59
  205. package/dst/man/ase-setup-update.1 +0 -64
  206. package/dst/man/ase-setup.1 +0 -93
  207. package/dst/man/ase-spec-export.1 +0 -62
  208. package/dst/man/ase-spec-lint.1 +0 -40
  209. package/dst/man/ase-spec-preview.1 +0 -40
  210. package/dst/man/ase-spec.1 +0 -46
  211. package/dst/man/ase-statusline.1 +0 -189
  212. package/dst/man/ase-task-assign.1 +0 -71
  213. package/dst/man/ase-task-board.1 +0 -384
  214. package/dst/man/ase-task-delete.1 +0 -35
  215. package/dst/man/ase-task-edit.1 +0 -46
  216. package/dst/man/ase-task-idscheme.1 +0 -65
  217. package/dst/man/ase-task-lifecycle.1 +0 -57
  218. package/dst/man/ase-task-list.1 +0 -47
  219. package/dst/man/ase-task-load.1 +0 -36
  220. package/dst/man/ase-task-newid.1 +0 -61
  221. package/dst/man/ase-task-purge.1 +0 -37
  222. package/dst/man/ase-task-rename.1 +0 -44
  223. package/dst/man/ase-task-request.1 +0 -61
  224. package/dst/man/ase-task-save.1 +0 -48
  225. package/dst/man/ase-task-status.1 +0 -55
  226. package/dst/man/ase-task-store.1 +0 -194
  227. package/dst/man/ase-task-view.1 +0 -40
  228. package/dst/man/ase-task.1 +0 -160
  229. package/dst/man/ase-util-compat.1 +0 -25
  230. package/dst/man/ase-util-diagram.1 +0 -76
  231. package/dst/man/ase-util-meta.1 +0 -45
  232. package/dst/man/ase-util-metric.1 +0 -54
  233. package/dst/man/ase-util-mint.1 +0 -59
  234. package/dst/man/ase-util-worktree.1 +0 -72
  235. package/dst/man/ase-util.1 +0 -50
  236. package/dst/man/ase.1 +0 -124
@@ -0,0 +1,74 @@
1
+ # ase-spec-lint(1) -- Lint the Project Specification
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase spec lint`
6
+ \[`-h`|`--help`\]
7
+ \[`-m`|`--markdown`\]
8
+ \[`-v`|`--verbose`\]
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase spec lint** lints the *SpecBook*-based specification Markdown
13
+ files below `project.artifact.spec.basedir` against the *SpecBook*
14
+ schema configuration `project.artifact.spec.schema` (see `ase-spec`(1)),
15
+ and optionally for their generic Markdown formatting via *markdownlint*.
16
+
17
+ Every diagnostic is logged to standard error as a single message
18
+ `lint: `*linter*`: `*file*`:`*line*`:`*column*`: `*message* of the
19
+ log level `error` resp. `warning` of its severity, where *linter* is
20
+ `specbook` or `markdownlint`, and *file* is relative to the project
21
+ root (a file outside the project, like the bundled standard schema, is
22
+ kept as-is). Without any diagnostic, nothing is logged.
23
+
24
+ The MCP tool `ase_specbook_lint` provides the same to the skills.
25
+
26
+ ## OPTIONS
27
+
28
+ - \[`-h`|`--help`\]:
29
+ Show usage information and exit.
30
+
31
+ - \[`-m`|`--markdown`\]:
32
+ Additionally lint the specification Markdown files for their generic
33
+ Markdown formatting via *markdownlint*, with the rules conflicting
34
+ with the *SpecBook* format (like mixed ATX and Setext headings, free
35
+ ordered list numbering, padded list markers and headings, unwrapped
36
+ lines, images without alternate text, and multiple artifacts per file)
37
+ disabled. Its findings are diagnostics of `warning` severity, so they
38
+ never fail the linting.
39
+
40
+ - \[`-v`|`--verbose`\]:
41
+ Instead of logging each diagnostic, print it to standard output as a
42
+ multi-line message with the affected source snippet (with an `ERROR`
43
+ resp. `WARNING` type, and a message prefixed by `markdownlint: ` for a
44
+ *markdownlint* diagnostic), colorized if standard output is a
45
+ terminal. If the source file is unreadable or empty, the single-line
46
+ message *file*`:`*line*`:`*column*`: `*message* is printed instead.
47
+
48
+ ## EXIT STATUS
49
+
50
+ Exits with status `0` if there is no diagnostic of `error` severity
51
+ (warnings alone do not fail), and with status `1` if there is any
52
+ diagnostic of `error` severity or the linting itself failed (e.g., an
53
+ unreadable schema configuration).
54
+
55
+ ## EXAMPLES
56
+
57
+ ```sh
58
+ # lint the specification
59
+ $ ase spec lint
60
+
61
+ # lint the specification, showing the affected source snippets
62
+ $ ase spec lint -v
63
+
64
+ # lint the specification, including its generic Markdown formatting
65
+ $ ase spec lint -m
66
+ ```
67
+
68
+ ## SEE ALSO
69
+
70
+ `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-preview`(1).
71
+
72
+ ## AUTHOR
73
+
74
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,57 @@
1
+ # ase-spec-preview(1) -- Serve a Live Preview of the Project Specification
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase spec preview`
6
+ \[`-h`|`--help`\]
7
+ \[`-a`|`--addr` *ip-addr*\]
8
+ \[`-p`|`--port` *tcp-port*\]
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase spec preview** serves the HTML export of the *SpecBook*-based
13
+ specification Markdown files below `project.artifact.spec.basedir` (see
14
+ `ase-spec`(1)) as a live preview on `http://`*ip-addr*`:`*tcp-port*`/`
15
+ (default: `http://127.0.0.1:12345/`). The export is kept in sync with
16
+ its sources exactly like under `ase spec export --watch` (see
17
+ `ase-spec-export`(1)), and every fresh export is pushed into the
18
+ connected browsers as an in-place document update. Before the first
19
+ successful export, a placeholder page is served instead.
20
+
21
+ The command does not terminate on its own, but runs until it is
22
+ interrupted (e.g., via `CTRL+C`).
23
+
24
+ ## OPTIONS
25
+
26
+ - \[`-h`|`--help`\]:
27
+ Show usage information and exit.
28
+
29
+ - \[`-a`|`--addr` *ip-addr*\]:
30
+ The IP address to listen on (default: `127.0.0.1`).
31
+
32
+ - \[`-p`|`--port` *tcp-port*\]:
33
+ The TCP port to listen on, an integer in the range `1`..`65535`
34
+ (default: `12345`).
35
+
36
+ ## EXIT STATUS
37
+
38
+ Runs until interrupted. Exits with status `1` on an invalid TCP port
39
+ or if the server cannot be started.
40
+
41
+ ## EXAMPLES
42
+
43
+ ```sh
44
+ # serve the live preview on the default address and port
45
+ $ ase spec preview
46
+
47
+ # serve the live preview on all interfaces on port 8080
48
+ $ ase spec preview -a 0.0.0.0 -p 8080
49
+ ```
50
+
51
+ ## SEE ALSO
52
+
53
+ `ase`(1), `ase-spec`(1), `ase-spec-export`(1), `ase-spec-lint`(1).
54
+
55
+ ## AUTHOR
56
+
57
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,85 @@
1
+ # ase-spec(1) -- Initialize, Lint, Export, and Preview the Project Specification
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase spec`
6
+ \[`-h`|`--help`\]
7
+
8
+ `ase spec init`
9
+
10
+ `ase spec lint`
11
+ \[`-m`|`--markdown`\]
12
+ \[`-v`|`--verbose`\]
13
+
14
+ `ase spec export`
15
+ \[`-o`|`--output` \[*format*`:`\]*file*\] \[...\]
16
+ \[`-w`|`--watch`\]
17
+
18
+ `ase spec preview`
19
+ \[`-a`|`--addr` *ip-addr*\]
20
+ \[`-p`|`--port` *tcp-port*\]
21
+
22
+ ## DESCRIPTION
23
+
24
+ **ase spec** is the entry point group for initializing, linting,
25
+ exporting, and previewing the *SpecBook*-based project specification
26
+ (SPEC), i.e., the Markdown files (plus their embedded assets) of the
27
+ artifact kind `spec` below the base directory
28
+ `project.artifact.spec.basedir` (default: `docs/specbook`, relative to
29
+ the project root).
30
+
31
+ The specification is governed by the *SpecBook* YAML schema
32
+ configuration `project.artifact.spec.schema`: a whitespace-separated
33
+ list of schema files, merged in the given order, where the entry `std`
34
+ names the full standard schema bundled with *SpecBook* (not its
35
+ compressed variant `ase-format-specbook.yaml` bundled with the plugin
36
+ for the agents, see `ase-util-meta`(1)) and every other entry is a file
37
+ path relative to the project root. An unset or empty value means `std`.
38
+
39
+ All reading specification commands honor the Git exclude rules exactly
40
+ like `ase artifact list` does (see `ase-artifact`(1)): an artifact file
41
+ Git excludes from the project counts as an *absent* one, so both
42
+ resolvers always see the very same specification.
43
+
44
+ The *SpecBook* processing information is logged at the `info` level
45
+ and its tracing details at the `debug` level (see the global option
46
+ `--log-level` of `ase`(1)).
47
+
48
+ Without a sub-command, the usage information is shown and the command
49
+ exits with status `1`.
50
+
51
+ ## OPTIONS
52
+
53
+ - \[`-h`|`--help`\]:
54
+ Show usage information and exit.
55
+
56
+ ## COMMANDS
57
+
58
+ - `ase spec init`:
59
+ Initialize the absent specification Markdown files of the schema
60
+ configuration. See `ase-spec-init`(1).
61
+
62
+ - `ase spec lint` \[`-m`|`--markdown`\] \[`-v`|`--verbose`\]:
63
+ Lint the specification against the schema configuration, and
64
+ optionally for its generic Markdown formatting. See `ase-spec-lint`(1).
65
+
66
+ - `ase spec export` \[`-o`|`--output` \[*format*`:`\]*file*\] \[...\] \[`-w`|`--watch`\]:
67
+ Export the specification as JSON, JSON5, YAML, TOON, HTML, PDF, or
68
+ normalized Markdown. See `ase-spec-export`(1).
69
+
70
+ - `ase spec preview` \[`-a`|`--addr` *ip-addr*\] \[`-p`|`--port` *tcp-port*\]:
71
+ Serve the HTML export of the specification as a live preview. See
72
+ `ase-spec-preview`(1).
73
+
74
+ ## EXIT STATUS
75
+
76
+ The group command without a sub-command exits with status `1`.
77
+
78
+ ## SEE ALSO
79
+
80
+ `ase`(1), `ase-spec-init`(1), `ase-spec-lint`(1), `ase-spec-export`(1),
81
+ `ase-spec-preview`(1), `ase-artifact`(1), `ase-config`(1).
82
+
83
+ ## AUTHOR
84
+
85
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,330 @@
1
+ # ase-statusline(1) -- Render the Statusline of the Agent Tool
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase statusline`
6
+ \[`-h`|`--help`\]
7
+ \[`-t`|`--tool` *tool*\]
8
+ \[`-w`|`--width` *n*\]
9
+ \[`-m`|`--margin` *n*\]
10
+ \[`-p`|`--padding` *n*\]
11
+ \[`--no-icons`\]
12
+ \[`--no-labels`\]
13
+ \[*line* \[...\]\]
14
+
15
+ ## DESCRIPTION
16
+
17
+ **ase statusline** renders the statusline of *Anthropic Claude Code
18
+ CLI* or *GitHub Copilot CLI* from the JSON payload the agent tool
19
+ passes on standard input, and writes the ANSI-colored result on
20
+ standard output. It is intended to be configured as the `statusLine`
21
+ command in the `settings.json` of *Anthropic Claude Code CLI* resp. as
22
+ the `statusLine.command` entry of `~/.copilot/settings.json` of
23
+ *GitHub Copilot CLI* (usually via `ase setup statusline activate`, see
24
+ `ase-setup-statusline`(1)), and not to be invoked directly by end users.
25
+
26
+ The output is composed from one or more template *line* arguments,
27
+ each rendered as one output line (or more, see **WRAPPING**). A *line*
28
+ may contain literal characters, `%`-prefixed placeholders (see
29
+ **PLACEHOLDERS**), and color markup (see **COLORS**). Without any
30
+ *line*, the single default line `%m %e %t` is rendered.
31
+
32
+ Each placeholder is rendered as an optional icon glyph, an optional
33
+ label followed by `: `, and the value in bold, e.g., `⚙ model:
34
+ `**Opus**. A `%` followed by any other character is emitted literally.
35
+
36
+ Under `--tool copilot`, the top-level `cwd` field of the payload is
37
+ mapped onto `workspace.current_dir`, and, as *GitHub Copilot CLI*
38
+ passes no `effort` field but embeds the reasoning effort as a ` · `
39
+ separated segment of `model.display_name` (e.g., `gpt-5.4 (2x) · high ·
40
+ 1M context`), the segment matching a known effort level (`low`,
41
+ `medium`, `high`, `xhigh`, or `max`) is split off again, so `%m`
42
+ renders the plain model and `%e` the effort.
43
+
44
+ When run inside a *tmux*(1) pane (i.e., with `TMUX` and `TMUX_PANE`
45
+ set), the resolved task id is additionally published as the per-pane
46
+ user option `@ase_task_id` of the pane, so external tools can pick it
47
+ up via `#{@ase_task_id}`.
48
+
49
+ ## OPTIONS
50
+
51
+ - \[`-h`|`--help`\]:
52
+ Show usage information and exit.
53
+
54
+ - \[`-t`|`--tool` *tool*\]:
55
+ Select the agent tool producing the payload: `claude` (*Anthropic
56
+ Claude Code CLI*) or `copilot` (*GitHub Copilot CLI*) (default:
57
+ the value of `ASE_TOOL`, else `claude`). The value `codex` is
58
+ rejected with an error, as *OpenAI Codex CLI* has no scriptable
59
+ custom statusline mechanism, and any other value is invalid.
60
+
61
+ - \[`-w`|`--width` *n*\]:
62
+ Force the terminal width to *n* characters, a non-negative integer
63
+ (default: `0`, i.e., auto-detect the width of the controlling
64
+ terminal via `tput cols` on `/dev/tty`, as standard output is a pipe
65
+ under the agent tool).
66
+
67
+ - \[`-m`|`--margin` *n*\]:
68
+ Reduce the maximum used terminal width by *n* characters on each
69
+ side, a non-negative integer (default: `2`). The margin only shrinks
70
+ the width budget and emits no characters.
71
+
72
+ - \[`-p`|`--padding` *n*\]:
73
+ Pad each non-empty rendered line with *n* spaces on the left and
74
+ right side, a non-negative integer (default: `0`). In contrast to the
75
+ margin, the padding spaces are actually emitted (and hence also
76
+ shrink the width budget). Empty lines stay unpadded. Under `--tool
77
+ copilot`, a padded output is prefixed with a zero-width space, so the
78
+ first line keeps its indentation.
79
+
80
+ - \[`--no-icons`\]:
81
+ Disable the leading icon glyph (e.g., `※`, `⚑`, or `⚙`) of each
82
+ placeholder rendering.
83
+
84
+ - \[`--no-labels`\]:
85
+ Disable the textual label (e.g., `user:`, `project:`, or `model:`)
86
+ in front of the bold value of each placeholder rendering.
87
+
88
+ ## ARGUMENTS
89
+
90
+ - \[*line* \[...\]\]:
91
+ The template lines (default: `%m %e %t`). Each argument yields its
92
+ own output line. Quote each line for the shell.
93
+
94
+ ## PLACEHOLDERS
95
+
96
+ The following placeholders are recognized. Unless stated otherwise, a
97
+ placeholder is always rendered. A placeholder marked as *suppressed* is
98
+ silently omitted (including its icon and label) if its source is
99
+ missing, e.g., in older agent tool versions or in synthetic payloads.
100
+
101
+ Scope:
102
+
103
+ - `%u`:
104
+ The user (`USER`, else `LOGNAME`, else `unknown`), with icon `※`.
105
+
106
+ - `%p`:
107
+ The project id, derived from the basename of the current directory
108
+ of the workspace (`workspace.current_dir`), with icon `⚑`.
109
+
110
+ - `%T`:
111
+ The active task id of the session (from its internal session state),
112
+ else `ASE_TASK_ID`, else `default`, with icon `◉`.
113
+
114
+ - `%s`:
115
+ The session id (`session_id`, else `unknown`), with icon `⏻`.
116
+
117
+ Model:
118
+
119
+ - `%m`:
120
+ The model (`model.display_name`), with icon `⚙`.
121
+
122
+ - `%e`:
123
+ The reasoning effort (`effort.level`, else the effort segment of the
124
+ *GitHub Copilot CLI* model, else `unknown`), with icon `⚒`.
125
+
126
+ - `%t`:
127
+ Whether extended thinking is enabled (`thinking.enabled`), as `yes`
128
+ or `no`, with icon `⚛`.
129
+
130
+ Output:
131
+
132
+ - `%O`:
133
+ The output style (`output_style.name`), with icon `≡`, *suppressed*.
134
+
135
+ - `%P`:
136
+ The persona style (`agent.persona`), with icon `☯`, *suppressed* if
137
+ empty.
138
+
139
+ - `%h`:
140
+ The guidance level (`agent.guidance`), with icon `▶`, *suppressed* if
141
+ empty.
142
+
143
+ - `%B`:
144
+ The project boxing transparency (`project.boxing`), with icon `▢`,
145
+ *suppressed* if empty.
146
+
147
+ - `%L`:
148
+ The project task lifecycle model (`project.task.lifecycle`), with
149
+ icon `⟳`, *suppressed* if empty.
150
+
151
+ The values of `%P`, `%h`, `%B`, and `%L` are resolved from the *ASE*
152
+ configuration cascade of the session (`session:`*id*), falling back
153
+ to the environment variables `ASE_PERSONA_STYLE`,
154
+ `ASE_GUIDANCE_LEVEL`, `ASE_PROJECT_BOXING`, and
155
+ `ASE_PROJECT_TASK_LIFECYCLE`.
156
+
157
+ Context:
158
+
159
+ - `%c`:
160
+ The context usage (`context_window.used_percentage`) as a progress
161
+ bar of 20 cells (`█` filled, `░` empty) plus the percentage, with
162
+ icon `◔`.
163
+
164
+ - `%C`:
165
+ The current and the maximum context tokens, e.g., `334.0k/1.0M`, with
166
+ icon `◆`. The current tokens are taken from
167
+ `context_window.current_context_tokens`, else
168
+ `last_call_input_tokens`, else `total_input_tokens`; the maximum from
169
+ `context_window.displayed_context_limit`, else
170
+ `context_window_size`, else derived from the current tokens and the
171
+ used percentage. *Suppressed* without a maximum.
172
+
173
+ Rate limits:
174
+
175
+ - `%S`:
176
+ The used percentage of the 5-hour rate-limit window, with icon `⏲`,
177
+ or `-` if unknown.
178
+
179
+ - `%D`:
180
+ The time until the reset of the 5-hour window, e.g., `4hr 27m`, with
181
+ icon `⏱`, or `-` if unknown.
182
+
183
+ - `%W`:
184
+ The used percentage of the 7-day rate-limit window, with icon `⏲`,
185
+ or `-` if unknown.
186
+
187
+ - `%Q`:
188
+ The time until the reset of the 7-day window, e.g., `6d 12hr 7m`,
189
+ with icon `⏱`, or `-` if unknown.
190
+
191
+ The windows are taken from `rate_limits.five_hour` and
192
+ `rate_limits.seven_day` of the payload. If the payload carries none,
193
+ the model matches `gpt-*`, and a template references one of these
194
+ placeholders, the windows are instead fetched from the *ChatGPT*
195
+ backend with the credential stored by *OpenAI Codex CLI*
196
+ (`$CODEX_HOME/auth.json`, default `~/.codex/auth.json`), with a
197
+ timeout of 3 seconds, and cached (also on failure) for 60 seconds.
198
+
199
+ Costs:
200
+
201
+ - `%H`:
202
+ The wall-clock duration of the session (`cost.total_duration_ms`) as
203
+ hours and minutes, e.g., `92hr 40m`, with icon `⏱`, *suppressed* if
204
+ zero or missing.
205
+
206
+ - `%X`:
207
+ The session costs in USD (`cost.total_cost_usd`), e.g., `$54.44`,
208
+ with icon `$`, *suppressed*.
209
+
210
+ Version control:
211
+
212
+ - `%a`:
213
+ The lines added in this session (`cost.total_lines_added`, else
214
+ `0`), with icon `⊕`.
215
+
216
+ - `%r`:
217
+ The lines removed in this session (`cost.total_lines_removed`, else
218
+ `0`), with icon `⊖`.
219
+
220
+ - `%b`:
221
+ The Git branch of the workspace directory, or `no git` outside of a
222
+ Git working tree, with icon `⎇`.
223
+
224
+ - `%g`:
225
+ The changed lines of the Git working tree against `HEAD`, e.g.,
226
+ `+42/-7`, with icon `±`, *suppressed* outside of a Git working tree.
227
+
228
+ - `%G`:
229
+ The number of untracked files of the Git working tree, with icon
230
+ `⁈`, *suppressed* outside of a Git working tree.
231
+
232
+ - `%d`:
233
+ The full path of the workspace directory, with icon `▶`,
234
+ *suppressed*.
235
+
236
+ Resources and versions:
237
+
238
+ - `%M`:
239
+ The used and total memory of the host, e.g., `33.2G/64.0G`, with icon
240
+ `⛁`.
241
+
242
+ - `%V`:
243
+ The agent tool and *ASE* versions (`version` of the payload), e.g.,
244
+ `claude/2.1.90 ase/1.0.7`, with icon `⎈`.
245
+
246
+ ## COLORS
247
+
248
+ A *line* may contain the markup `<`*color*`>`...`</`*color*`>` to
249
+ colorize its text (including rendered placeholders), where *color* is
250
+ one of `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`,
251
+ `white`, or `default`. A closing tag (of any recognized color name)
252
+ ends the colored span, returning to the default foreground color.
253
+ Spans do not nest: an opening tag inside a span is removed, but
254
+ ignored. A span still open at the end of a line ends there. A tag with
255
+ an unrecognized color name is kept literally in the output.
256
+
257
+ ## WRAPPING
258
+
259
+ Each rendered line is automatically wrapped before the next chunk (a
260
+ literal character or a whole placeholder rendering) which would exceed
261
+ the width budget, where the budget is the terminal width (see
262
+ `--width`) reduced by `2 *` (*margin* `+` *padding*) characters. Without
263
+ a known terminal width, no wrapping happens.
264
+
265
+ ## INPUT
266
+
267
+ The input is the standard statusline JSON payload of the agent tool,
268
+ of which the fields `workspace.current_dir` (resp. `cwd` for *GitHub
269
+ Copilot CLI*), `session_id`, `version`, `model.display_name`,
270
+ `effort.level`, `thinking.enabled`, `output_style.name`,
271
+ `context_window.*`, `rate_limits.five_hour` and
272
+ `rate_limits.seven_day` (each with `used_percentage` and `resets_at`),
273
+ and `cost.total_cost_usd`, `cost.total_duration_ms`,
274
+ `cost.total_lines_added`, and `cost.total_lines_removed` are used.
275
+
276
+ Invalid JSON is an error.
277
+
278
+ ## ENVIRONMENT
279
+
280
+ - `ASE_TOOL`:
281
+ The default of `--tool`.
282
+
283
+ - `ASE_TASK_ID`, `ASE_PERSONA_STYLE`, `ASE_GUIDANCE_LEVEL`,
284
+ `ASE_PROJECT_BOXING`, `ASE_PROJECT_TASK_LIFECYCLE`:
285
+ The fallbacks of `%T`, `%P`, `%h`, `%B`, and `%L`.
286
+
287
+ - `USER`, `LOGNAME`:
288
+ The user of `%u`.
289
+
290
+ - `CODEX_HOME`:
291
+ The configuration directory of *OpenAI Codex CLI* (default:
292
+ `~/.codex`), holding the credential `auth.json` for the rate limits
293
+ of the `gpt-*` models.
294
+
295
+ - `TMUX`, `TMUX_PANE`:
296
+ The *tmux* pane to publish the task id `@ase_task_id` to.
297
+
298
+ ## FILES
299
+
300
+ - *per-user state directory*`/statusline-codex-usage.json`:
301
+ The cache of the rate-limit windows fetched for the `gpt-*` models.
302
+
303
+ - *per-user state directory*`/session/`*id*`/config.yaml` and
304
+ `state.yaml`:
305
+ The configuration and the internal state (active task) of the
306
+ session.
307
+
308
+ ## EXIT STATUS
309
+
310
+ `0` on success, `1` on invalid JSON, an invalid option value, or
311
+ `--tool codex`.
312
+
313
+ ## EXAMPLES
314
+
315
+ ```sh
316
+ # render two lines from a sample payload
317
+ $ echo '{"model":{"display_name":"Opus"},"context_window":{"used_percentage":42}}' | \
318
+ ase statusline "%m %e %t" "<blue>%c</blue>"
319
+
320
+ # a compact statusline without icons and labels, padded by one space
321
+ $ ase statusline --no-icons --no-labels -p 1 "%p %T %b %g" "%m %c %X"
322
+ ```
323
+
324
+ ## SEE ALSO
325
+
326
+ `ase`(1), `ase-setup-statusline`(1), `ase-config`(1), `tmux`(1).
327
+
328
+ ## AUTHOR
329
+
330
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,138 @@
1
+ # ase-task-assign(1) -- Assign a Task
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase task assign`
6
+ \[`-h`|`--help`\]
7
+ \[`-s`|`--session` *id*\]
8
+ \[*id*\[`:`\]\]
9
+ *assignee*
10
+
11
+ ## DESCRIPTION
12
+
13
+ **ase task assign** assigns the task plan with the given *id* in the
14
+ task store (see `ase-task`(1)) by setting its `Assignee` frontmatter
15
+ key to *assignee*, where `me` stands for the current user and `none`
16
+ removes the key. The change is done in a conditional save of the task
17
+ plan (retried on a concurrent change of the task), leaving the
18
+ `Modified` key alone, as it tracks the changes of the plan body only.
19
+ The change is logged as `task: assigned "`*id*`" from "`*from*`" to
20
+ "`*to*`"`.
21
+
22
+ If the configuration key `project.users` (see `ase-config`(1)) lists
23
+ the known users, an *assignee* which is neither `none`, the current
24
+ user, one of these users, nor the name of an agent present at the
25
+ agent relay (see `ase-agent-relay`(1)) is still assigned, but with the
26
+ warning `task: unknown assignee "`*assignee*`" (neither one of the
27
+ users of "project.users" nor a known agent)` (with `--session`
28
+ reported as part of its notice).
29
+
30
+ With `--session`, the assignment is instead done on behalf of an agent
31
+ tool session through the running `ase service` of the project (see
32
+ `ase-service`(1)), which handles the *AI usage window* of the task, too
33
+ (only if the AI usage accounting is enabled via `telemetry.enabled`,
34
+ else a notice is reported):
35
+
36
+ - Assigning the task to oneself opens its usage window (or attaches
37
+ the session to an already open one).
38
+
39
+ - Assigning the task to anybody else closes its usage window and,
40
+ after a grace period of 10 seconds for late telemetry, atomically
41
+ adds the usage accumulated from the OTLP records of its sessions
42
+ (see `ase-setup-telemetry`(1)) to the YAML data of the usage
43
+ attachment of the task (`Type: application/yaml; kind="usage"`,
44
+ created on the first booking): `time.ai` (the AI request time in
45
+ minutes), `time.hr` (the human time in minutes, i.e., the whole real
46
+ time of the window), `time.real` (the wall-clock time of the window
47
+ in minutes), `token.cread`, `token.cwrite`, `token.input`, and
48
+ `token.output` (the disjoint token counts of the cache reads, cache
49
+ writes, uncached input, and output), `cost.ai` (the AI costs in USD,
50
+ as reported by the agent tool, else derived from
51
+ `telemetry.prices.ai`), and `cost.hr` (the human costs in USD, at the
52
+ hourly rate of the assignee in `telemetry.prices.hr`).
53
+
54
+ A usage window also closes when its last session ends, and when the
55
+ `Assignee` of its task is changed elsewhere while the task is the
56
+ active task of an attached session. Conversely, once the `Assignee` of
57
+ a task is changed to oneself elsewhere (e.g., on the task board), the
58
+ service opens its window (starting *paused*) and attaches every session
59
+ of the project whose active task it is.
60
+
61
+ Unless disabled via `telemetry.implicit`, the service also accounts an
62
+ *unassigned* task *implicitly*: it opens its window (starting
63
+ *paused*) and attaches every interactive session of the project whose
64
+ active task it is, without setting the `Assignee`, but only as long as
65
+ the task stays the active task of the session and unassigned (task
66
+ `default` excluded). Assigning such a task to oneself turns the
67
+ implicit attachment into a regular one, and unassigning a task
68
+ assigned to oneself elsewhere turns its attachments into implicit ones.
69
+
70
+ Open windows additionally book every `telemetry.service.interval`
71
+ minutes, pause after `telemetry.service.idle` minutes without any AI
72
+ request of an attached session (resumed silently by the next one,
73
+ without accounting the paused gap), and are closed and booked after 7
74
+ days without any activity. The result is logged together with the
75
+ action on the usage window and the booked usage. This is what the
76
+ `ase_task_assign` MCP tool of the `ase-task-assign` skill does for the
77
+ current session.
78
+
79
+ ## OPTIONS
80
+
81
+ - \[`-h`|`--help`\]:
82
+ Show usage information and exit.
83
+
84
+ - \[`-s`|`--session` *id*\]:
85
+ Assign the task on behalf of the agent tool session *id* through the
86
+ running `ase service` of the project (whose port is read from
87
+ `.ase/service.yaml`), which additionally handles the AI usage window
88
+ of the task (see **DESCRIPTION**). The service is not started on
89
+ demand, so it has to run already.
90
+
91
+ ## ARGUMENTS
92
+
93
+ - \[*id*\[`:`\]\]:
94
+ The id of the task (default: `$ASE_TASK_ID`, else `default`). A
95
+ trailing colon is stripped. If only a single argument is given, it is
96
+ taken as *assignee*, unless it has a trailing colon (then it is the
97
+ *id*, and the missing *assignee* is an error).
98
+
99
+ - *assignee*:
100
+ The new assignee of the task: `me` for the current user (the value
101
+ of `$USER`, else `$LOGNAME`, else `unknown`), `none` to remove the
102
+ `Assignee` key, or any other non-empty single-line name without
103
+ commas.
104
+
105
+ ## ENVIRONMENT
106
+
107
+ - `ASE_TASK_ID`:
108
+ The default task id (default: `default`).
109
+
110
+ - `USER`, `LOGNAME`:
111
+ The current user, as substituted for `me`.
112
+
113
+ ## EXIT STATUS
114
+
115
+ `0` on success, `1` if the *assignee* is missing or invalid, no such
116
+ task exists, or (with `--session`) the service is not reachable.
117
+
118
+ ## EXAMPLES
119
+
120
+ ```sh
121
+ # take the task "json-export"
122
+ $ ase task assign json-export me
123
+
124
+ # give the task back
125
+ $ ase task assign json-export none
126
+
127
+ # hand the task of $ASE_TASK_ID over to the implementer agent
128
+ $ ase task assign implementer
129
+ ```
130
+
131
+ ## SEE ALSO
132
+
133
+ `ase`(1), `ase-task`(1), `ase-service`(1), `ase-setup-telemetry`(1),
134
+ `ase-config`(1), `ase-agent`(1).
135
+
136
+ ## AUTHOR
137
+
138
+ Dr. Ralf S. Engelschall <rse@engelschall.com>