@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,521 @@
1
+ # ase-agent-implementer(1) -- Implementation Phase Agent
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase agent implementer 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
+ \[`-r`|`--repo` *url*\]
13
+ \[`-d`|`--tempdir` *dir*\]
14
+ \[`-m`|`--mode` `implement`|`draft`\]
15
+ \[`--`*group*`-`*item* *value* \[...\]\]
16
+ \[`-f`|`--foreground`\]
17
+
18
+ `ase agent implementer status`
19
+ \[`-n`|`--name` *name*\]
20
+
21
+ `ase agent implementer log`
22
+ \[`-f`|`--follow`\]
23
+ \[`-n`|`--lines` *n*\]
24
+ \[`--name` *name*\]
25
+
26
+ `ase agent implementer stop`
27
+ \[`-n`|`--name` *name*\]
28
+
29
+ ## DESCRIPTION
30
+
31
+ **ase agent implementer** drives the `Implementation` phase of the
32
+ `enterprise` task lifecycle model (refused for any other model). It claims
33
+ every task in the state `PLANNED` which is unassigned or assigned to the
34
+ agent, which does not carry the tag `ase-agent-implementer` yet, and whose
35
+ `After:` predecessors (and, for an explicit epic, its group members) are
36
+ *integrated*, i.e., `INTEGRATED` and not still tagged by the integrator
37
+ with the value `active` or `failed`, as the task is implemented from its
38
+ `Source:`, which contains the change set of a predecessor only then.
39
+
40
+ For a task *stacked* onto a predecessor (i.e., with the `branch:`
41
+ changeset of the predecessor as its `Source:`), the predecessor passes
42
+ already once `IMPLEMENTED` or later (and not still tagged by the
43
+ implementer with the value `active` or `failed` while `IMPLEMENTED`).
44
+ This predecessor rule is the hook `passes` of the built-in definition.
45
+
46
+ By default, the implementer additionally waits with a task until the
47
+ `estimator` agent (see `ase-agent-estimator`(1)) is done with it, as the
48
+ latter processes the `PLANNED` tasks unclaimed and would else race
49
+ against the implementer: it claims a task only once the task carries a
50
+ valid `Effort:` key, is an explicit epic, has an empty plan, or carries
51
+ the tag `ase-agent-estimator` (i.e., its estimation failed). Without an
52
+ estimator agent, disable this with `--params effort-wait=false`, as the
53
+ unestimated tasks would else wait forever. This rule is the hook `ready`
54
+ of the built-in definition (in both modes).
55
+
56
+ In its default mode `implement`, the implementer moves each claimed task
57
+ into `IMPLEMENTING`, tags it with `ase-agent-implementer:active`, and
58
+ implements the plan from its `Source:` into its `Changeset:` via the
59
+ skill invocation `ase-task-implement --next DONE` *id* (see
60
+ **CHANGESETS**). The skill itself puts a successfully implemented task
61
+ into `IMPLEMENTED`, while a task left in `IMPLEMENTING` is put into
62
+ `STALLED`. Afterwards, the task is unassigned and tagged with
63
+ `ase-agent-implementer`.
64
+
65
+ A task already `IMPLEMENTED`, but whose changeset branch could not be
66
+ committed or pushed, is instead tagged `ase-agent-implementer:failed`
67
+ and left for a manual intervention.
68
+
69
+ In mode `draft`, the implementer instead claims only the `PLANNED` tasks
70
+ without an implementation draft attachment (type `text/x-diff;
71
+ charset=utf-8; kind="draft"`) yet and without the separate tag
72
+ `ase-agent-implementer-draft` (so a drafted task is still implemented
73
+ later by an implementer in mode `implement`), drafts the implementation
74
+ from the `Source:` into this attachment only, ignoring the `Changeset:`,
75
+ via `ase-task-implement --next DONE --draft --stateless` *id* (in a
76
+ temporary worktree of the skill, leaving the working copy untouched),
77
+ and puts the task back into `PLANNED`: untagged if the draft attachment
78
+ was created or changed, as the attachment itself keeps the agent from
79
+ drafting it again, and otherwise tagged with
80
+ `ase-agent-implementer-draft`, so a failed drafting is not retried
81
+ endlessly.
82
+
83
+ On an interrupt, a task being processed is put back, untagged and with
84
+ its previous assignee, into `PLANNED`. See `ase-agent`(1) for the common
85
+ mechanics of all agents.
86
+
87
+ ## CHANGESETS
88
+
89
+ In mode `implement`, the `Changeset:` of the task (or the configured
90
+ `project.task.default.changeset`) is handled as follows:
91
+
92
+ - `worktree`: The change set stays *uncommitted* in the Git working copy
93
+ the agent is started in, which is switched to the branch of a
94
+ `branch:`*name* source beforehand, and where a task waits while the
95
+ working copy still carries uncommitted changes (e.g., of an earlier
96
+ task not yet integrated). With `--parallel` greater than `1`, it is
97
+ instead implemented in the own Git worktree `.ase/worktree/`*id* of
98
+ each task (via the skill option `--worktree` *id*).
99
+
100
+ - `branch:`*name*: The branch is checked out (created from the source if
101
+ missing) in the Git worktree `.ase/worktree/`*branch-id* of the agent,
102
+ named after the branch (with every character other than letters,
103
+ digits, `_`, and `-` replaced by `-`, runs of `-` reduced to one, and
104
+ leading and trailing `-` and `_` removed, and refused if its
105
+ directory already exists), unless already checked out in the working copy or
106
+ another *ASE* worktree, which then has to be without uncommitted
107
+ changes, as they would be committed, too. It is implemented there in
108
+ place (via the skill options `--changeset worktree --worktree`
109
+ *branch-id*, keeping
110
+ the `Source:` of the plan, so the change set snapshot of the agent
111
+ shows the entire branch), and afterwards *committed* onto the branch
112
+ with the message *Kind*`:` *title* `(`*id*`)` (where *Kind* is the
113
+ `Kind:` frontmatter key of the task, default `CRAFTING`) -- also a
114
+ partial result of a failed processing, as the plan tracks it --, where
115
+ the `.ase` directory is never committed.
116
+
117
+ The worktree of the agent is removed again only if clean. Under
118
+ `--repo`, the branch is pushed to the origin of the clone and, if
119
+ the push is rejected, kept as the branch `ase-agent-rescue/`*id* in
120
+ the preserved clone, also for a partial change set of a task put
121
+ into `STALLED`.
122
+
123
+ - `attachment:`*name*: The change set is entirely handled by the skill.
124
+
125
+ For a `worktree` or `branch:` changeset, the agent itself (and not the
126
+ skill) afterwards attaches the *change set snapshot* to the task: the
127
+ view-only, text-only unified diff of the change set from its fork point
128
+ from the `Source:` on (without the `.ase` directory), in the attachment
129
+ of type `text/x-diff; charset=utf-8; kind="changeset"` (see
130
+ `--attach-changeset`), replaced in place on every processing, with
131
+ `base` *commit* (plus `, partial` for a task not put into
132
+ `IMPLEMENTED`) in its `Desc:` key, so the change set can be viewed
133
+ wherever the task is visible, e.g., on the task boards during its
134
+ qualification.
135
+
136
+ For an `attachment:` changeset other than `attachment:changeset`, an
137
+ existing snapshot is removed as obsolete.
138
+
139
+ ## OPTIONS
140
+
141
+ - \[`-h`|`--help`\]: Show usage information of `ase agent implementer`
142
+ (or of the given sub-command) only.
143
+
144
+ All other options belong to the sub-commands (see **COMMANDS**).
145
+
146
+ ## COMMANDS
147
+
148
+ - `ase agent implementer start` \[*options*\]: Start the implementer
149
+ agent in the background, logging into `.ase/agent/`*name*`.log`. The
150
+ agent is validated and initialized (e.g., its agent tool is looked up
151
+ and the task lifecycle model is checked) before the command returns
152
+ (waiting up to 30 seconds), so a failing agent is reported together
153
+ with the tail of its log. An agent of the same name already running is
154
+ left alone. The options are:
155
+
156
+ - \[`-n`|`--name` *name*\]: The name of the agent (default:
157
+ `implementer`): up to 64 letters, digits, underscores, and dashes,
158
+ starting with a letter or digit, other than the name of another
159
+ agent kind, `relay`, or `fleet`. It names the agent in its log
160
+ lines (also in the shared processing log attachment `agent`), the
161
+ `Assignee:` of the tasks it processes, its temporary directory,
162
+ and its process files `.ase/agent/`*name*`.yaml` and
163
+ `.ase/agent/`*name*`.log`.
164
+
165
+ Agents of the kind `implementer` under different names form a
166
+ pool, competing for the same tasks and processing them in parallel
167
+ to each other.
168
+
169
+ - \[`-t`|`--tool` *tool*\]: The headless agent tool processing the
170
+ tasks: `claude` (*Anthropic Claude Code CLI*), `copilot` (*GitHub
171
+ Copilot CLI*), or `codex` (*OpenAI Codex CLI*) (default:
172
+ `$ASE_TOOL`, else `claude`). Its command has to be found in
173
+ `$PATH`.
174
+
175
+ - \[`-p`|`--parallel` *num*\]: The maximum number of tasks processed
176
+ in parallel by this agent (default: `1`), a positive integer. With
177
+ more than one, a task with a `worktree` changeset is implemented
178
+ in its own Git worktree `.ase/worktree/`*id* (created by the skill
179
+ via its option `--worktree` *id*) instead of the working copy
180
+ itself.
181
+
182
+ - \[`-T`|`--timeout` *duration*\]: The maximum duration of
183
+ processing a task (the run of the agent tool), as *number* *unit*
184
+ (without a space) with *unit* `s` (seconds), `m` (minutes), or `h`
185
+ (hours) (default: `60m`). A processing exceeding it is aborted and
186
+ counts as failed.
187
+
188
+ - \[`-o`|`--one-shot`\]: Terminate the agent, instead of observing
189
+ for further tasks, once a check of the task store finds no
190
+ dispatchable task while the agent processes no task anymore --
191
+ intended for CI contexts like GitHub Actions, and not allowed in a
192
+ fleet. A task still waiting for its predecessors at that time is
193
+ left for a later run. A check of the task store failing three
194
+ times in a row then terminates the agent with a non-zero exit
195
+ status (instead of being retried endlessly after a growing delay).
196
+
197
+ - \[`--agent-relay` *url*\]: The agent relay to pass the live
198
+ presence of the agent to, as `ase://`*addr*`:`*port*\[`/`*token*\]
199
+ resp. `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] for
200
+ HTTPS (default: the configured `project.relay.url`, else none).
201
+ See **AGENT RELAY** in `ase-agent`(1).
202
+
203
+ - \[`-r`|`--repo` *url*\]: The Git repository to clone once into the
204
+ temporary directory of the agent, where every task without a
205
+ `worktree` value is processed in its own temporary Git worktree of
206
+ this clone, and changed branches are pushed back to its origin
207
+ (default: none, i.e., all tasks are processed in the Git working
208
+ copy the agent is started in, which is hence mandatory).
209
+
210
+ Requires a task store not located in the working copy (i.e., not a
211
+ local `ase:`*path* one). See **WORKING COPY, CLONES, AND WORKTREES**
212
+ in `ase-agent`(1).
213
+
214
+ - \[`-d`|`--tempdir` *dir*\]: Create the temporary directory of the
215
+ agent as the sub-directory *name* of *dir*, where `%p` is expanded
216
+ to the process id of the agent, `%h` to a hash value unique to the
217
+ process, and `%%` to `%` (default: a fresh, private directory
218
+ below the system temporary directory). A missing *dir* is created
219
+ private to the current user, while an existing *dir* has to be a
220
+ directory (no symbolic link) owned by the current user.
221
+
222
+ - \[`-m`|`--mode` *mode*\]: The mode of the agent (default:
223
+ `implement`): `implement` implements the task from its `Source:`
224
+ into its `Changeset:` via the skill `ase-task-implement` and moves
225
+ it on into `IMPLEMENTED`, while `draft` just drafts its
226
+ implementation into its implementation draft attachment `draft`
227
+ and puts it back into `PLANNED`. An invalid mode is an error.
228
+
229
+ - \[`--title` *text*\]: The one-line title of the operation of the
230
+ agent (at most 80 characters), shown on the task boards. Built-in:
231
+ `Implement planned tasks into their changesets` (`implement`)
232
+ resp. `Draft the implementation of planned tasks` (`draft`).
233
+
234
+ - \[`--description` *text*\]: The brief description of the operation
235
+ of the agent (about 3-6 lines, at most 600 characters, with its
236
+ whitespace collapsed), shown on the task boards. Built-in: a
237
+ description of the operation of the mode.
238
+
239
+ - \[`--type` `phase`|`request`\]: The processing type: `phase`
240
+ claims the tasks by their lifecycle status, `request` processes
241
+ the prompt requests attached to the tasks. Generic default:
242
+ `phase`. Built-in: `phase`.
243
+
244
+ - \[`--workdir` *kind*\]: The working directory of the agent tool:
245
+ `project`, `source`, `changeset`, `changeset-read`, or `target`.
246
+ Generic default: `project`. Built-in: `changeset` (mode
247
+ `implement`), `source` (mode `draft`).
248
+
249
+ - \[`--lifecycle` *model*\]: A supported task lifecycle model
250
+ (`solo`, `team`, or `enterprise`, repeatable). Generic default:
251
+ every model containing all given states, resp. all models for
252
+ `request` and with `--unclaimed`. Built-in: `enterprise`.
253
+
254
+ - \[`--serial`\]: Process the tasks serially only, ignoring
255
+ `--parallel`. Built-in: not set.
256
+
257
+ - \[`--unclaimed`\]: Process the tasks of the incoming states
258
+ without claiming them, independent of their assignee and
259
+ predecessors, and without ever changing their status and assignee
260
+ (`phase` only). Built-in: not set. Not allowed, as the implementer
261
+ claims the tasks into its activity state.
262
+
263
+ - \[`--params` *name*`=`*value*\]: The value of a parameter
264
+ declared by the definition (repeatable). Built-in: `effort-wait`
265
+ (`true` or `false`, default: `true`), whether to wait for the
266
+ effort estimation of a task by the `estimator` agent (see
267
+ **DESCRIPTION**).
268
+
269
+ - \[`--state-incoming` *state*\]: The state of the tasks to claim
270
+ (mandatory for `phase`, repeatable with `--unclaimed` only).
271
+ Built-in: `PLANNED`.
272
+
273
+ - \[`--state-activity` *state*\]: The state of a task during its
274
+ processing. Generic default: the incoming state. Built-in:
275
+ `IMPLEMENTING`.
276
+
277
+ - \[`--state-success` *state*\]: The target state on success.
278
+ Generic default: the incoming state. Built-in: `IMPLEMENTED` (mode
279
+ `implement`), `PLANNED` (mode `draft`).
280
+
281
+ - \[`--state-failure` *state*\]: The target state on failure.
282
+ Generic default: the incoming state. Built-in: `STALLED` (mode
283
+ `implement`), `PLANNED` (mode `draft`).
284
+
285
+ - \[`--state-phase` *state*\]: The phase success state, into which
286
+ the skill itself can move a task. Generic default: the success
287
+ state. Built-in: not set (mode `implement`), `IMPLEMENTED` (mode
288
+ `draft`).
289
+
290
+ - \[`--state-passed` *state*\]: The first state from which on a task
291
+ has passed the phase for its `After:` successors. Generic default:
292
+ the phase success state. Built-in: `IMPLEMENTED`. The predecessor
293
+ rule is decided by the hook `passes` of the built-in definition
294
+ instead (see **DESCRIPTION**).
295
+
296
+ - \[`--state-verdict` *VERDICT*`=`*state*\]: The target state per
297
+ verdict (repeatable). Built-in: not set.
298
+
299
+ - \[`--tag-name` *tag*\]: The tag of the processed tasks
300
+ (`ase-agent-`*word*). Generic default: `ase-agent-`*name*, resp.
301
+ for `request` always `ase-agent-`*request-name*. Built-in:
302
+ `ase-agent-implementer` (mode `implement`),
303
+ `ase-agent-implementer-draft` (mode `draft`).
304
+
305
+ - \[`--tag-success` *tag*\]: The tag on success: *tag-name*,
306
+ *tag-name*`:`*value*, or `none` (`phase` only). Generic default:
307
+ *tag-name*. Built-in: not set (mode `implement`), `none` (mode
308
+ `draft`).
309
+
310
+ - \[`--tag-failure` *tag*\]: The tag on failure: *tag-name*,
311
+ *tag-name*`:`*value*, or `none` (`phase` only). Generic default:
312
+ *tag-name*. Built-in: not set.
313
+
314
+ - \[`--tag-require` *tag*\]: A tag a claimable task has to carry
315
+ (repeatable). Built-in: not set.
316
+
317
+ - \[`--tag-exclude` *tag*\]: A tag a claimable task must not carry
318
+ (repeatable). Built-in: not set.
319
+
320
+ - \[`--tag-retry`\]: A shorthand for `--tag-failure none`, so a
321
+ failed task is claimed again after a growing delay (`phase` only).
322
+ Built-in: not set.
323
+
324
+ - \[`--assign-name` *who*\]: The assignee under which the tasks are
325
+ claimed, held, recognized, and released, and which names the
326
+ agent-owned worktrees. Generic default: the agent name. Built-in:
327
+ not set.
328
+
329
+ - \[`--assign-required`\]: Claim only the tasks explicitly assigned
330
+ to *who* of `--assign-name` (`phase` only). Built-in: not set.
331
+
332
+ - \[`--assign-success` *who*\]: The assignee of a task after its
333
+ successful processing: a name, `none`, or `previous`. Generic
334
+ default: `none` for `phase`, `previous` for `request`. Built-in:
335
+ not set.
336
+
337
+ - \[`--assign-failure` *who*\]: The assignee of a task after its
338
+ failed processing: a name, `none`, or `previous`. Generic default:
339
+ `none` for `phase`, `previous` for `request`. Built-in: not set.
340
+
341
+ - \[`--request-name` *name*\]: The name of the processed requests
342
+ (`request` only). Generic default: the agent name. Built-in: not
343
+ set. Not allowed, as the implementer is of type `phase`.
344
+
345
+ - \[`--request-done` *word*\]: The word naming a processed task in
346
+ the log lines (`request` only). Generic default: `processed`.
347
+ Built-in: not set. Not allowed, as the implementer is of type
348
+ `phase`.
349
+
350
+ - \[`--prompt-skill` *name*\]: The skill to invoke (mutually
351
+ exclusive with `--prompt-text` and `--prompt-file`). Built-in:
352
+ `ase-task-implement`.
353
+
354
+ - \[`--prompt-args` *template*\]: The argument template of the
355
+ skill. Generic default: `{id}` for `phase`, `{id}: {prompt}` for
356
+ `request`. Built-in: `--next DONE{?changeset-type=branch:
357
+ --changeset worktree}{?changeset-worktree: --worktree
358
+ {changeset-worktree}} {id}` (mode `implement`), `--next DONE
359
+ --draft --stateless {id}` (mode `draft`).
360
+
361
+ - \[`--prompt-text` *template*\]: The prompt text template to invoke
362
+ instead of a skill. Built-in: not set.
363
+
364
+ - \[`--prompt-file` *file*\]: The file with the prompt text template
365
+ to invoke instead of a skill. Built-in: not set.
366
+
367
+ - \[`--prepare-run` *cmd*\]: A shell command run in the working
368
+ directory before the prompt (repeatable). Built-in: not set.
369
+
370
+ - \[`--success-criterion` *criterion*\]: A success criterion:
371
+ `exit`, `clean`, `changed`, `verdict`, `attachment`, or `status`
372
+ (repeatable). Generic default: `exit` and `clean` for `phase`,
373
+ `clean` and `changed` for `request`. Built-in: `status` (mode
374
+ `implement`), `exit` and `attachment` (mode `draft`).
375
+
376
+ - \[`--success-match` *regex*\]: A regular expression an output line
377
+ has to match (repeatable). Built-in: not set.
378
+
379
+ - \[`--verdict-label` *label*\]: The label after which the verdict
380
+ is given in the output. Built-in: not set.
381
+
382
+ - \[`--verdict-allow` *VERDICT*\]: An accepted verdict (repeatable).
383
+ Generic default: the verdicts of `--state-verdict`, else any.
384
+ Built-in: not set.
385
+
386
+ - \[`--attach-output` *kind*\]: The kind of the attachment storing
387
+ the output lines of the prompt. Built-in: not set.
388
+
389
+ - \[`--attach-expect` *spec*\]: The attachment
390
+ \[*mime-type*`;`\]*kind* to be created or changed by the
391
+ processing for the success criterion `attachment`. Built-in: not
392
+ set (mode `implement`), `text/x-diff;draft` (mode `draft`).
393
+
394
+ - \[`--attach-skip` *spec*\]: The attachment
395
+ \[*mime-type*`;`\]*kind* leaving a task unclaimed (`phase` only).
396
+ Built-in: not set (mode `implement`), `text/x-diff;draft` (mode
397
+ `draft`).
398
+
399
+ - \[`--attach-changeset` *kind*\]: The kind of the attachment
400
+ `text/x-diff;`*kind* storing the change set snapshot of the task
401
+ (with `--workdir changeset` or `target` only). Built-in:
402
+ `changeset` (mode `implement`), not set (mode `draft`).
403
+
404
+ - \[`--finish-commit`\]: Commit the work onto a `branch:` changeset
405
+ and publish it (with `--workdir changeset` only). Built-in:
406
+ enabled (mode `implement`), not set (mode `draft`).
407
+
408
+ - \[`--finish-success` *cmd*\]: A shell command run in the working
409
+ directory after a successful processing. Built-in: not set.
410
+
411
+ - \[`--finish-failure` *cmd*\]: A shell command run in the working
412
+ directory after a failed processing. Built-in: not set.
413
+
414
+ - \[`-f`|`--foreground`\]: Run the agent in the current process
415
+ instead, logging to the terminal, until it is interrupted (e.g.,
416
+ via `CTRL+C`) or stopped, where an agent of the same name already
417
+ running is an error.
418
+
419
+ - \[`-h`|`--help`\]: Show the usage information of the sub-command
420
+ only.
421
+
422
+ The options `--`*group*`-`*item* above override the built-in
423
+ definition of the mode of the agent (where an option also replaces its
424
+ mutually exclusive alternatives, e.g., `--prompt-text` replaces the
425
+ skill of `--prompt-skill`), while the agent keeps the identity of its
426
+ kind (its runs, its presence, and its agent-owned worktrees are named
427
+ after `implementer`). See `ase-agent-adhoc`(1) for their full
428
+ semantics.
429
+
430
+ - `ase agent implementer status` \[`-n`|`--name` *name*\]: Report
431
+ whether the implementer agent of the name *name* (default:
432
+ `implementer`) is running, as `agent` *name*`: running (pid` *pid*`)`
433
+ resp. `agent` *name*`: not running` (exit status 1).
434
+
435
+ - `ase agent implementer log` \[`-f`|`--follow`\] \[`-n`|`--lines` *n*\]
436
+ \[`--name` *name*\]: Show the log `.ase/agent/`*name*`.log` of the
437
+ implementer agent of the name *name* (default: `implementer`) run in
438
+ the background, where an agent of a fleet logs into the log of the
439
+ fleet instead (see `ase-agent-fleet`(1)). Without a log file, an
440
+ informational message is shown only. The options are:
441
+
442
+ - \[`-f`|`--follow`\]: Show the last *n* lines (default: 10) and
443
+ then follow all newly appended lines, in the style of `tail -f`,
444
+ until interrupted.
445
+
446
+ - \[`-n`|`--lines` *n*\]: Show the last *n* lines only (default:
447
+ all, or 10 with `--follow`).
448
+
449
+ - \[`--name` *name*\]: The name of the agent (default:
450
+ `implementer`), given in its long form only, as `-n` is the short
451
+ form of `--lines`.
452
+
453
+ - `ase agent implementer stop` \[`-n`|`--name` *name*\]: Stop the
454
+ implementer agent of the name *name* (default: `implementer`) by
455
+ `SIGTERM`, waiting (up to 5 minutes) until it aborted its running
456
+ processings and put their tasks back. An agent not running is reported
457
+ informationally only.
458
+
459
+ ## ENVIRONMENT
460
+
461
+ - `ASE_TOOL`: The default agent tool of `--tool` (default: `claude`).
462
+
463
+ - `ASE_AGENT_RELAY_TOKEN`: The bearer token of the agent relay, if not
464
+ embedded in the URL of `--agent-relay` resp. `project.relay.url`.
465
+
466
+ - `ASE_HEADLESS`: Set to `true` for the agent tool processes spawned by
467
+ the agent.
468
+
469
+ ## FILES
470
+
471
+ - `.ase/agent/`*name*`.yaml`: The process state (kind, process id, and
472
+ process start time) of the agent, existing while it runs.
473
+
474
+ - `.ase/agent/`*name*`.log`: The log of the agent run in the background.
475
+
476
+ - `.ase/worktree/`*id*, `.ase/worktree/`*branch-id*: The Git worktree
477
+ of a task with a `worktree` changeset under `--parallel` greater than
478
+ `1` (where a `#` of the task id is replaced by `_`), resp. the Git
479
+ worktree of the agent for a `branch:` changeset, named after the
480
+ branch.
481
+
482
+ - *per-user state
483
+ directory*`/agent-implementer/`*store-hash*`/`*run-id*`.lock` and
484
+ `.json`: The run lock and the run record of each implementer agent
485
+ process, used to recover the tasks of terminated agent processes (see
486
+ **INTERRUPTS AND RECOVERY** in `ase-agent`(1)).
487
+
488
+ ## EXIT STATUS
489
+
490
+ `ase agent implementer start` exits with status `0` once the agent
491
+ started (or was already running), resp. once a foreground agent
492
+ terminated regularly, and with status `1` on any error (e.g., an invalid
493
+ option, a task lifecycle model other than `enterprise`, or a missing
494
+ agent tool). `ase agent implementer status` exits with status `1` if the
495
+ agent is not running.
496
+
497
+ ## EXAMPLES
498
+
499
+ ```sh
500
+ # implement up to two tasks in parallel
501
+ $ ase agent implementer start -p 2
502
+
503
+ # implement the tasks in a temporary clone, pushing their branches back
504
+ $ ase agent implementer start -r git@github.com:example/project.git
505
+
506
+ # just draft the implementations of the planned tasks
507
+ $ ase agent implementer start -n drafter -m draft
508
+ ```
509
+
510
+ ## SEE ALSO
511
+
512
+ `ase`(1), `ase-agent`(1), `ase-agent-rebooter`(1),
513
+ `ase-agent-condenser`(1), `ase-agent-researcher`(1),
514
+ `ase-agent-qualifier`(1), `ase-agent-integrator`(1),
515
+ `ase-agent-editor`(1), `ase-agent-estimator`(1), `ase-agent-adhoc`(1),
516
+ `ase-agent-fleet`(1), `ase-agent-relay`(1), `ase-task`(1),
517
+ `ase-task-board`(1).
518
+
519
+ ## AUTHOR
520
+
521
+ Dr. Ralf S. Engelschall <rse@engelschall.com>