@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,477 @@
1
+ # ase-agent-estimator(1) -- Effort Estimation Agent
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase agent estimator start`
6
+ \[`-n`|`--name` *name*\]
7
+ \[`-t`|`--tool` `claude`|`copilot`|`codex`\]
8
+ \[`-p`|`--parallel` *num*\]
9
+ \[`-T`|`--timeout` *duration*\]
10
+ \[`-o`|`--one-shot`\]
11
+ \[`--agent-relay` *url*\]
12
+ \[`-m`|`--mode` `phase`|`request`\]
13
+ \[`--`*group*`-`*item* *value* \[...\]\]
14
+ \[`-f`|`--foreground`\]
15
+
16
+ `ase agent estimator status`
17
+ \[`-n`|`--name` *name*\]
18
+
19
+ `ase agent estimator log`
20
+ \[`-f`|`--follow`\]
21
+ \[`-n`|`--lines` *n*\]
22
+ \[`--name` *name*\]
23
+
24
+ `ase agent estimator stop`
25
+ \[`-n`|`--name` *name*\]
26
+
27
+ ## DESCRIPTION
28
+
29
+ **ase agent estimator** estimates the effort of tasks, i.e., it stores
30
+ the expected human time of a task as a T-shirt size in its `Effort:`
31
+ frontmatter key (see the skill `ase-task-estimate`). Unlike the phase
32
+ agents, it drives no phase and supports all task lifecycle models
33
+ (`solo`, `team`, and `enterprise`). It runs in one of two modes (see
34
+ `--mode`): the mode `phase` (the default) estimates the unestimated
35
+ planned tasks automatically and is intended for the *final* estimation
36
+ of the tasks, once their plans are complete, while the mode `request`
37
+ (re-)estimates the tasks in any unfinished status on request and is
38
+ intended for *dry-runs*, i.e., provisional estimations of plans still
39
+ in progress.
40
+
41
+ In the mode `phase`, the estimator observes the tasks in the state `PLANNED`, adapted onto
42
+ the task lifecycle model of the project, i.e., `PLANNED` for
43
+ `enterprise`, `PLANNING` for `team`, and `OPEN` for `solo` (see
44
+ `--state-incoming`), which do not carry its tag `ase-agent-estimator`
45
+ yet, independent of their `Assignee:` and their `After:` predecessors.
46
+ Of these, it processes every task which carries no valid `Effort:` key
47
+ yet, whose plan is not empty, and which is no explicit epic (a task
48
+ whose `Group:` is its own id, as its effort is the sum of the efforts
49
+ of its members).
50
+
51
+ The estimator processes each such task *unclaimed* (see
52
+ `--unclaimed`): it neither moves the task into an activity state, nor
53
+ tags it as active, nor assigns it to itself, and it never changes its
54
+ status or its assignee. Hence, it keeps no other agent and no human off
55
+ the task. However, the built-in `implementer` by default waits with a
56
+ `PLANNED` task until the estimator is done with it (see its parameter
57
+ `effort-wait` in `ase-agent-implementer`(1)), so with both agents
58
+ running, the tasks are estimated before their implementation. An agent
59
+ of the kind `estimator` does not pick up a task already processed by
60
+ another one on the same host.
61
+
62
+ It estimates the effort via the skill invocation `ase-task-estimate`
63
+ *id*, which writes just the `Effort:` key in a conditional save, i.e.,
64
+ only if the plan was not changed meanwhile (re-estimating the task
65
+ otherwise), so a concurrent change of the task by another agent or a
66
+ human is never lost. It writes neither the `Status:` nor the
67
+ `Modified:` key of the task.
68
+
69
+ The estimation succeeds only if the agent tool succeeded, the skill
70
+ reported no error, and the task afterwards carries a valid `Effort:`
71
+ key. A successfully estimated task is left untagged, as its valid
72
+ `Effort:` key itself keeps it from being estimated again, until its
73
+ plan content changes, which drops its then stale `Effort:` key, so it
74
+ is estimated again. A task not estimated is tagged with
75
+ `ase-agent-estimator` instead, so it is not processed again and again
76
+ (removing this tag requests another estimation).
77
+
78
+ In the mode `request`, the estimator instead processes the `estimate`
79
+ requests attached to tasks in any lifecycle status except a finished
80
+ one (e.g., `DRAFTED`, which the mode `phase` never picks up), as
81
+ requested via `ase task request` *id* `estimate` (see
82
+ `ase-task-request`(1)) resp. key `R` of the task boards, where a
83
+ prompt is ignored and hence may be empty. Like the request
84
+ agent `editor` (see `ase-agent-editor`(1)), it claims such a task by
85
+ tagging it with `ase-agent-estimate:active` and assigning it to itself
86
+ (deferring a task in an activity status until it changes), estimates
87
+ its effort via the skill invocation `ase-task-estimate --force` *id*,
88
+ i.e., even if it already carries a valid `Effort:` key, restores its
89
+ previous assignee, and removes the request on success, else turns it
90
+ into a failed request (to be re-requested). The estimation succeeds
91
+ under the same conditions as in the mode `phase`, so a request for an
92
+ explicit epic or a task with an empty plan fails.
93
+
94
+ Both modes can run side by side as two agents of the kind `estimator`
95
+ under different names (e.g., `estimator` and `estimator-request`).
96
+
97
+ On an interrupt, a task being processed in the mode `phase` is left
98
+ untouched, while the request of a task being processed in the mode
99
+ `request` is turned back into a pending one. The
100
+ estimator works in the project root only, so it neither requires a Git
101
+ working copy nor `git`, and it accepts no `--repo` and `--tempdir`. See
102
+ `ase-agent`(1) for the common mechanics of all agents.
103
+
104
+ ## OPTIONS
105
+
106
+ - \[`-h`|`--help`\]: Show usage information of `ase agent estimator`
107
+ (or of the given sub-command) only.
108
+
109
+ All other options belong to the sub-commands (see **COMMANDS**).
110
+
111
+ ## COMMANDS
112
+
113
+ - `ase agent estimator start` \[*options*\]: Start the estimator agent
114
+ in the background, logging into `.ase/agent/`*name*`.log`. The agent
115
+ is validated and initialized (e.g., its agent tool is looked up)
116
+ before the command returns (waiting up to 30 seconds), so a failing
117
+ agent is reported together with the tail of its log. An agent of the
118
+ same name already running is left alone. The options are:
119
+
120
+ - \[`-n`|`--name` *name*\]: The name of the agent (default:
121
+ `estimator`): up to 64 letters, digits, underscores, and dashes,
122
+ starting with a letter or digit, other than the name of another
123
+ agent kind, `relay`, or `fleet`.
124
+
125
+ It names the agent in its log lines (also in the shared processing
126
+ log attachment `agent`), and its process files
127
+ `.ase/agent/`*name*`.yaml` and `.ase/agent/`*name*`.log`. Agents
128
+ of the kind `estimator` under different names form a pool,
129
+ competing for the same tasks and processing them in parallel to
130
+ each other.
131
+
132
+ - \[`-t`|`--tool` *tool*\]: The headless agent tool processing the
133
+ tasks: `claude` (*Anthropic Claude Code CLI*), `copilot` (*GitHub
134
+ Copilot CLI*), or `codex` (*OpenAI Codex CLI*) (default:
135
+ `$ASE_TOOL`, else `claude`). Its command has to be found in
136
+ `$PATH`.
137
+
138
+ - \[`-p`|`--parallel` *num*\]: The maximum number of tasks processed
139
+ in parallel by this agent (default: `1`), a positive integer.
140
+
141
+ - \[`-T`|`--timeout` *duration*\]: The maximum duration of
142
+ processing a task (the run of the agent tool), as *number* *unit*
143
+ (without a space) with *unit* `s` (seconds), `m` (minutes), or `h`
144
+ (hours) (default: `60m`). A processing exceeding it is aborted and
145
+ counts as failed.
146
+
147
+ - \[`-o`|`--one-shot`\]: Terminate the agent, instead of observing
148
+ for further tasks, once a check of the task store finds no
149
+ dispatchable task while the agent processes no task anymore --
150
+ intended for CI contexts like GitHub Actions, and not allowed in a
151
+ fleet. A check of the task store failing three times in a row then
152
+ terminates the agent with a non-zero exit status (instead of being
153
+ retried endlessly after a growing delay).
154
+
155
+ - \[`--agent-relay` *url*\]: The agent relay to pass the live
156
+ presence of the agent to, as `ase://`*addr*`:`*port*\[`/`*token*\]
157
+ resp. `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] for
158
+ HTTPS (default: the configured `project.relay.url`, else none).
159
+ See **AGENT RELAY** in `ase-agent`(1).
160
+
161
+ - \[`-m`|`--mode` *mode*\]: The mode of the agent (default:
162
+ `phase`): `phase` estimates the unestimated tasks in `PLANNED`
163
+ automatically and unclaimed (intended for the final estimation),
164
+ while `request` (re-)estimates the tasks of the `estimate`
165
+ requests in any unfinished status (intended for dry-runs). An
166
+ invalid mode is an error. The built-in values of the following
167
+ options are given per mode where they differ, and in the mode
168
+ `request`, the options for `phase` only (`--unclaimed`,
169
+ `--state-`\*, `--tag-success`, `--tag-failure`, `--tag-retry`,
170
+ `--assign-required`, and `--attach-skip`) are not allowed.
171
+
172
+ - \[`--title` *text*\]: The one-line title of the operation of the
173
+ agent (at most 80 characters), shown on the task boards. Built-in:
174
+ `Estimate the effort of unestimated planned tasks` (`phase`) resp.
175
+ `Re-estimate the effort of tasks on request` (`request`).
176
+
177
+ - \[`--description` *text*\]: The brief description of the operation
178
+ of the agent (about 3-6 lines, at most 600 characters, with its
179
+ whitespace collapsed), shown on the task boards. Built-in: a
180
+ description of the operation of the mode.
181
+
182
+ - \[`--type` `phase`|`request`\]: The processing type: `phase`
183
+ claims the tasks by their lifecycle status, `request` processes
184
+ the prompt requests attached to the tasks. Generic default:
185
+ `phase`. Built-in: `phase` (mode `phase`) resp. `request` (mode
186
+ `request`).
187
+
188
+ - \[`--workdir` *kind*\]: The working directory of the agent tool:
189
+ `project`, `source`, `changeset`, `changeset-read`, or `target`.
190
+ Generic default: `project`. Built-in: `project`.
191
+
192
+ - \[`--lifecycle` *model*\]: A supported task lifecycle model
193
+ (`solo`, `team`, or `enterprise`, repeatable). Generic default:
194
+ every model containing all given states, resp. all models for
195
+ `request` and with `--unclaimed`. Built-in: not set. Hence, all
196
+ task lifecycle models are supported.
197
+
198
+ - \[`--serial`\]: Process the tasks serially only, ignoring
199
+ `--parallel`. Built-in: not set.
200
+
201
+ - \[`--unclaimed`\]: Process the tasks of the incoming states
202
+ without claiming them, independent of their assignee and
203
+ predecessors, and without ever changing their status and assignee
204
+ (`phase` only). Built-in: enabled (mode `phase`) resp. not set
205
+ (mode `request`).
206
+
207
+ - \[`--params` *name*`=`*value*\]: The value of a parameter
208
+ declared by the definition (repeatable). Built-in: none declared.
209
+
210
+ - \[`--state-incoming` *state*\]: The state of the tasks to process
211
+ (mandatory for `phase`, repeatable with `--unclaimed` only), where
212
+ each state is adapted onto the task lifecycle model of the project.
213
+ Built-in: `PLANNED` (i.e., `PLANNING` for `team` and `OPEN` for
214
+ `solo`) (mode `phase`) resp. not set (mode `request`). For
215
+ instance, `--state-incoming DRAFTED --state-incoming PLANNED`
216
+ additionally estimates the drafted tasks of the `enterprise`
217
+ model in the mode `phase`.
218
+
219
+ - \[`--state-activity` *state*\]: The state of a task during its
220
+ processing. Generic default: the incoming state. Built-in: not
221
+ set. Not allowed, as the estimator processes the tasks unclaimed.
222
+
223
+ - \[`--state-success` *state*\]: The target state on success.
224
+ Generic default: the incoming state. Built-in: not set. Not
225
+ allowed, as the estimator processes the tasks unclaimed.
226
+
227
+ - \[`--state-failure` *state*\]: The target state on failure.
228
+ Generic default: the incoming state. Built-in: not set. Not
229
+ allowed, as the estimator processes the tasks unclaimed.
230
+
231
+ - \[`--state-phase` *state*\]: The phase success state, into which
232
+ the skill itself can move a task. Generic default: the success
233
+ state. Built-in: not set. Not allowed, as the estimator processes
234
+ the tasks unclaimed.
235
+
236
+ - \[`--state-passed` *state*\]: The first state from which on a task
237
+ has passed the phase for its `After:` successors. Generic default:
238
+ the phase success state. Built-in: not set. Not allowed, as the
239
+ estimator processes the tasks unclaimed.
240
+
241
+ - \[`--state-verdict` *VERDICT*`=`*state*\]: The target state per
242
+ verdict (repeatable). Built-in: not set. Not allowed, as the
243
+ estimator processes the tasks unclaimed.
244
+
245
+ - \[`--tag-name` *tag*\]: The tag of the processed tasks
246
+ (`ase-agent-`*word*). Generic default: `ase-agent-`*name*, resp.
247
+ for `request` always `ase-agent-`*request-name*. Built-in:
248
+ `ase-agent-estimator` (mode `phase`) resp. `ase-agent-estimate`
249
+ (mode `request`).
250
+
251
+ - \[`--tag-success` *tag*\]: The tag on success: *tag-name*,
252
+ *tag-name*`:`*value*, or `none` (`phase` only). Generic default:
253
+ *tag-name*. Built-in: `none` (mode `phase`), as the valid
254
+ `Effort:` key of an estimated task keeps it from being estimated
255
+ again, resp. not set (mode `request`).
256
+
257
+ - \[`--tag-failure` *tag*\]: The tag on failure: *tag-name*,
258
+ *tag-name*`:`*value*, or `none` (`phase` only). Generic default:
259
+ *tag-name*. Built-in: not set.
260
+
261
+ - \[`--tag-require` *tag*\]: A tag a claimable task has to carry
262
+ (repeatable). Built-in: not set.
263
+
264
+ - \[`--tag-exclude` *tag*\]: A tag a claimable task must not carry
265
+ (repeatable). Built-in: not set.
266
+
267
+ - \[`--tag-retry`\]: A shorthand for `--tag-failure none`, so a
268
+ failed task is processed again after a growing delay (`phase`
269
+ only). Built-in: not set.
270
+
271
+ - \[`--assign-name` *who*\]: The assignee under which the tasks are
272
+ claimed, held, recognized, and released, and which names the
273
+ agent-owned worktrees. Generic default: the agent name. Built-in:
274
+ not set. As the estimator never assigns a task in the mode
275
+ `phase`, it then names the mode of the agent as announced to the
276
+ agent relay only.
277
+
278
+ - \[`--assign-required`\]: Claim only the tasks explicitly assigned
279
+ to *who* of `--assign-name` (`phase` only). Built-in: not set. Not
280
+ allowed, as the estimator processes the tasks unclaimed.
281
+
282
+ - \[`--assign-success` *who*\]: The assignee of a task after its
283
+ successful processing: a name, `none`, or `previous`. Generic
284
+ default: `none` for `phase`, `previous` for `request`. Built-in:
285
+ not set. Not allowed in the mode `phase`, as the estimator then
286
+ processes the tasks unclaimed.
287
+
288
+ - \[`--assign-failure` *who*\]: The assignee of a task after its
289
+ failed processing: a name, `none`, or `previous`. Generic default:
290
+ `none` for `phase`, `previous` for `request`. Built-in: not set.
291
+ Not allowed in the mode `phase`, as the estimator then processes
292
+ the tasks unclaimed.
293
+
294
+ - \[`--request-name` *name*\]: The name of the processed requests
295
+ (`request` only). Generic default: the agent name. Built-in: not
296
+ set (mode `phase`) resp. `estimate` (mode `request`).
297
+
298
+ - \[`--request-done` *word*\]: The word naming a processed task in
299
+ the log lines (`request` only). Generic default: `processed`.
300
+ Built-in: not set (mode `phase`) resp. `estimated` (mode
301
+ `request`).
302
+
303
+ - \[`--prompt-skill` *name*\]: The skill to invoke (mutually
304
+ exclusive with `--prompt-text` and `--prompt-file`). Built-in:
305
+ `ase-task-estimate`.
306
+
307
+ - \[`--prompt-args` *template*\]: The argument template of the
308
+ skill. Generic default: `{id}` for `phase`, `{id}: {prompt}` for
309
+ `request`. Built-in: `{id}` (mode `phase`) resp. `--force {id}`
310
+ (mode `request`), the latter ignoring the request prompt.
311
+
312
+ - \[`--prompt-text` *template*\]: The prompt text template to invoke
313
+ instead of a skill. Built-in: not set.
314
+
315
+ - \[`--prompt-file` *file*\]: The file with the prompt text template
316
+ to invoke instead of a skill. Built-in: not set.
317
+
318
+ - \[`--prepare-run` *cmd*\]: A shell command run in the working
319
+ directory before the prompt (repeatable). Built-in: not set.
320
+
321
+ - \[`--success-criterion` *criterion*\]: A success criterion:
322
+ `exit`, `clean`, `changed`, `verdict`, `attachment`, or `status`
323
+ (repeatable). Generic default: `exit` and `clean` for `phase`,
324
+ `clean` and `changed` for `request`. Built-in: `exit` and
325
+ `clean` (in both modes, as a re-estimation of the same size leaves
326
+ the plan content unchanged), where additionally the task has to
327
+ carry a valid `Effort:` key afterwards.
328
+
329
+ - \[`--success-match` *regex*\]: A regular expression an output line
330
+ has to match (repeatable). Built-in: not set.
331
+
332
+ - \[`--verdict-label` *label*\]: The label after which the verdict
333
+ is given in the output. Built-in: not set.
334
+
335
+ - \[`--verdict-allow` *VERDICT*\]: An accepted verdict (repeatable).
336
+ Generic default: the verdicts of `--state-verdict`, else any.
337
+ Built-in: not set.
338
+
339
+ - \[`--attach-output` *kind*\]: The kind of the attachment storing
340
+ the output lines of the prompt. Built-in: not set.
341
+
342
+ - \[`--attach-expect` *spec*\]: The attachment
343
+ \[*mime-type*`;`\]*kind* to be created or changed by the
344
+ processing for the success criterion `attachment`. Built-in: not
345
+ set.
346
+
347
+ - \[`--attach-skip` *spec*\]: The attachment
348
+ \[*mime-type*`;`\]*kind* leaving a task unclaimed (`phase` only).
349
+ Built-in: not set.
350
+
351
+ - \[`--attach-changeset` *kind*\]: The kind of the attachment
352
+ `text/x-diff;`*kind* storing the change set snapshot of the task
353
+ (with `--workdir changeset` or `target` only). Built-in: not set.
354
+ Not allowed, as the estimator works in the project root.
355
+
356
+ - \[`--finish-commit`\]: Commit the work onto a `branch:` changeset
357
+ and publish it (with `--workdir changeset` only). Built-in: not
358
+ set. Not allowed, as the estimator works in the project root.
359
+
360
+ - \[`--finish-success` *cmd*\]: A shell command run in the working
361
+ directory after a successful processing. Built-in: not set.
362
+
363
+ - \[`--finish-failure` *cmd*\]: A shell command run in the working
364
+ directory after a failed processing. Built-in: not set.
365
+
366
+ - \[`-f`|`--foreground`\]: Run the agent in the current process
367
+ instead, logging to the terminal, until it is interrupted (e.g.,
368
+ via `CTRL+C`) or stopped, where an agent of the same name already
369
+ running is an error.
370
+
371
+ - \[`-h`|`--help`\]: Show the usage information of the sub-command
372
+ only.
373
+
374
+ The options `--`*group*`-`*item* above override the built-in
375
+ definition of the agent (where an option also replaces its mutually
376
+ exclusive alternatives, e.g., `--prompt-text` replaces the skill of
377
+ `--prompt-skill`), while the agent keeps the identity of its kind (its
378
+ runs and its presence are named after `estimator`). See
379
+ `ase-agent-adhoc`(1) for their full semantics.
380
+
381
+ - `ase agent estimator status` \[`-n`|`--name` *name*\]: Report whether
382
+ the estimator agent of the name *name* (default: `estimator`) is
383
+ running, as `agent` *name*`: running (pid` *pid*`)` resp. `agent`
384
+ *name*`: not running` (exit status 1).
385
+
386
+ - `ase agent estimator log` \[`-f`|`--follow`\] \[`-n`|`--lines` *n*\]
387
+ \[`--name` *name*\]: Show the log `.ase/agent/`*name*`.log` of the
388
+ estimator agent of the name *name* (default: `estimator`) run in the
389
+ background, where an agent of a fleet logs into the log of the fleet
390
+ instead (see `ase-agent-fleet`(1)). Without a log file, an
391
+ informational message is shown only. The options are:
392
+
393
+ - \[`-f`|`--follow`\]: Show the last *n* lines (default: 10) and
394
+ then follow all newly appended lines, in the style of `tail -f`,
395
+ until interrupted.
396
+
397
+ - \[`-n`|`--lines` *n*\]: Show the last *n* lines only (default:
398
+ all, or 10 with `--follow`).
399
+
400
+ - \[`--name` *name*\]: The name of the agent (default:
401
+ `estimator`), given in its long form only, as `-n` is the short
402
+ form of `--lines`.
403
+
404
+ - `ase agent estimator stop` \[`-n`|`--name` *name*\]: Stop the
405
+ estimator agent of the name *name* (default: `estimator`) by
406
+ `SIGTERM`, waiting (up to 5 minutes) until it aborted its running
407
+ processings. An agent not running is reported informationally only.
408
+
409
+ ## CONFIGURATION
410
+
411
+ The estimation itself is configured by the keys
412
+ `project.task.effort.scale`, `project.task.effort.factor`,
413
+ `project.task.effort.file`, `project.task.effort.line`, and
414
+ `project.task.effort.iteration` of the skill
415
+ `ase-task-estimate` (see `ase-config`(1)).
416
+
417
+ ## ENVIRONMENT
418
+
419
+ - `ASE_TOOL`: The default agent tool of `--tool` (default: `claude`).
420
+
421
+ - `ASE_AGENT_RELAY_TOKEN`: The bearer token of the agent relay, if not
422
+ embedded in the URL of `--agent-relay` resp. `project.relay.url`.
423
+
424
+ - `ASE_HEADLESS`: Set to `true` for the agent tool processes spawned by
425
+ the agent.
426
+
427
+ ## FILES
428
+
429
+ - `.ase/agent/`*name*`.yaml`: The process state (kind, process id, and
430
+ process start time) of the agent, existing while it runs.
431
+
432
+ - `.ase/agent/`*name*`.log`: The log of the agent run in the background.
433
+
434
+ - *per-user state
435
+ directory*`/agent-estimator/`*store-hash*`/`*run-id*`.lock` and
436
+ `.json`: The run lock and the run record of each estimator agent
437
+ process, which records the tasks it currently processes, so no other
438
+ agent of the kind `estimator` on the same host picks them up.
439
+
440
+ ## EXIT STATUS
441
+
442
+ `ase agent estimator start` exits with status `0` once the agent
443
+ started (or was already running), resp. once a foreground agent
444
+ terminated regularly, and with status `1` on any error (e.g., an
445
+ invalid option or a missing agent tool). `ase agent estimator status`
446
+ exits with status `1` if the agent is not running.
447
+
448
+ ## EXAMPLES
449
+
450
+ ```sh
451
+ # start the estimator, estimating the planned tasks without a valid effort
452
+ $ ase agent estimator start
453
+
454
+ # estimate all drafted and planned tasks once, e.g., in a CI context
455
+ $ ase agent estimator start -f -o --state-incoming DRAFTED --state-incoming PLANNED
456
+
457
+ # start a second estimator of another agent tool as a pool
458
+ $ ase agent estimator start -n estimator-codex -t codex
459
+
460
+ # additionally start an estimator processing the "estimate" requests,
461
+ # and request the (re-)estimation of a drafted task
462
+ $ ase agent estimator start -n estimator-request -m request
463
+ $ ase task request example-task estimate re-estimate
464
+ ```
465
+
466
+ ## SEE ALSO
467
+
468
+ `ase`(1), `ase-agent`(1), `ase-agent-rebooter`(1),
469
+ `ase-agent-condenser`(1), `ase-agent-researcher`(1),
470
+ `ase-agent-implementer`(1), `ase-agent-qualifier`(1),
471
+ `ase-agent-integrator`(1), `ase-agent-editor`(1), `ase-agent-adhoc`(1),
472
+ `ase-agent-fleet`(1), `ase-agent-relay`(1), `ase-task`(1),
473
+ `ase-task-board`(1), `ase-config`(1).
474
+
475
+ ## AUTHOR
476
+
477
+ Dr. Ralf S. Engelschall <rse@engelschall.com>