delegation-layer 0.2.0 → 0.3.1

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 (31) hide show
  1. package/README.md +7 -0
  2. package/docs/assets/delegation-layer-hero.jpg +0 -0
  3. package/package.json +1 -1
  4. package/plugins/delegation-layer/.claude-plugin/plugin.json +1 -1
  5. package/plugins/delegation-layer/.codex-plugin/plugin.json +1 -1
  6. package/plugins/delegation-layer/skills/agent-integration/SKILL.md +16 -8
  7. package/plugins/delegation-layer/skills/agent-integration/evals/evals.json +23 -3
  8. package/plugins/delegation-layer/skills/agent-integration/examples/json-results.md +5 -2
  9. package/plugins/delegation-layer/skills/agent-integration/examples/managed-workspace.md +50 -17
  10. package/plugins/delegation-layer/skills/agent-integration/examples/read-only-task.md +3 -1
  11. package/plugins/delegation-layer/skills/agent-integration/references/ccr.md +7 -3
  12. package/plugins/delegation-layer/skills/agent-integration/references/collaboration.md +2 -2
  13. package/plugins/delegation-layer/skills/agent-integration/references/command-reference.md +152 -47
  14. package/plugins/delegation-layer/skills/agent-integration/references/continuation.md +7 -4
  15. package/plugins/delegation-layer/skills/agent-integration/references/interaction.md +6 -5
  16. package/plugins/delegation-layer/skills/agent-integration/references/result-handling.md +66 -3
  17. package/plugins/delegation-layer/skills/agent-integration/references/routing-rule.json +1 -1
  18. package/plugins/delegation-layer/skills/agent-integration/references/workspaces.md +18 -14
  19. package/skills/agent-integration/SKILL.md +16 -8
  20. package/skills/agent-integration/evals/evals.json +23 -3
  21. package/skills/agent-integration/examples/json-results.md +5 -2
  22. package/skills/agent-integration/examples/managed-workspace.md +50 -17
  23. package/skills/agent-integration/examples/read-only-task.md +3 -1
  24. package/skills/agent-integration/references/ccr.md +7 -3
  25. package/skills/agent-integration/references/collaboration.md +2 -2
  26. package/skills/agent-integration/references/command-reference.md +152 -47
  27. package/skills/agent-integration/references/continuation.md +7 -4
  28. package/skills/agent-integration/references/interaction.md +6 -5
  29. package/skills/agent-integration/references/result-handling.md +66 -3
  30. package/skills/agent-integration/references/routing-rule.json +1 -1
  31. package/skills/agent-integration/references/workspaces.md +18 -14
@@ -2,6 +2,9 @@
2
2
 
3
3
  Read response fields independently. A successful control command is not a
4
4
  successful provider result.
5
+ Examples use the CLI default under the main skill's
6
+ [root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief); preserve an
7
+ explicit custom or recorded historical root on related commands.
5
8
 
6
9
  ## Task control response
7
10
 
@@ -49,7 +52,7 @@ this table to each dispatch or continuation attempt separately, in order:
49
52
  | Response | Next action |
50
53
  |---|---|
51
54
  | Usage error, no JSON response | Correct the reported syntax using Delegate help or `providers --json`, then invoke that request again. Parsing failed before admission. |
52
- | `task_record: not_created`, `failure.code: supervisor_upgrade_required`, and `failure.next_action: run_supervisor_migrate` | Run `delegate --root "<the exact absolute state root used by the failed command>" supervisor migrate --json` once. Retry the exact original admission argv once only after `supervisor_control.state: migrated` and `supervisor_control.next_action: retry_dispatch`; otherwise stop and report the migration response. Preserve an explicit custom root exactly. A failed `continue` must be retried as the same `continue`; never replace it with a fresh `dispatch` or a direct provider call. |
55
+ | `task_record: not_created`, `failure.code: supervisor_upgrade_required`, and `failure.next_action: run_supervisor_migrate` | Run `delegate supervisor migrate --json` once in the same user/configuration context for ordinary default-root work. If the failed command used an explicit custom or recorded historical root, run `delegate --root "<the exact absolute root used by the failed command>" supervisor migrate --json` instead. Retry the exact original admission argv once only after `supervisor_control.state: migrated` and `supervisor_control.next_action: retry_dispatch`; otherwise stop and report the migration response. A failed `continue` must be retried as the same `continue`; never replace it with a fresh `dispatch` or a direct provider call. |
53
56
  | `task_record: not_created` and `failure.next_action: correct_request` | Correct that request and retry it. |
54
57
  | `task_record: not_created`, `failure.code: workspace_provision_pending` or `workspace_busy`, and `failure.next_action: watch_workspace` | Follow [managed workspace recovery](#managed-workspace-results) using the same root and workspace. Once ready, retry the exact admission command and inputs. A failed `continue` remains that same `continue`, never a new dispatch. |
55
58
  | `task_record: not_created`, `failure.code: resource_pressure`, `failure.next_action: retry_later`, and `failure.retry_after_seconds: 30` | Delegate checked the host and confirmed resource pressure, so no ordinary task record was created and no provider task is running for this attempt. Do not poll or observe a task. Choose one: report the refusal and stop, or wait at least 30 seconds in the foreground and retry the exact original admission argv once. A `continue` stays that same `continue`. If the retry is refused again, report and stop. Never loop, retry in the background, schedule a retry, or run Pueue or process commands. The 30 seconds is advice, not a guarantee that the retry will pass. |
@@ -166,6 +169,66 @@ asking again, but never infer it from a rejection or silently substitute a
166
169
  destination. Keep the original failed attempt reported as failed; independent
167
170
  requests and explicitly allowed recovery paths retain their existing rules.
168
171
 
172
+ ## Schedule definition and host results
173
+
174
+ Use the installed build's help to check `scheduler serve/status/stop` support.
175
+ Keep three facts separate: the definition was
176
+ saved, the host is ready, and an occurrence produced an accepted provider result.
177
+ Neither saving nor host readiness proves that a task ran.
178
+
179
+ Schedule create/resume report confirmed persistence as `schedule.saved: true`;
180
+ keep `schedule.id` even if the command exits nonzero. The separate top-level
181
+ `scheduler` object carries host observation and guidance:
182
+
183
+ | JSON field | Meaning |
184
+ | --- | --- |
185
+ | `scheduler.state` | Observed lifecycle or availability state, including `foreground` for a current raw `scheduler run`. Read it with `ready` and the process exit. |
186
+ | `scheduler.epoch`, `scheduler.attempt` | Owner generation string and numeric child attempt, when known. Omission does not identify an owner. |
187
+ | `scheduler.ready` | Whether this observation confirms host/child readiness; it is not an occurrence result. |
188
+ | `scheduler.fault` | Optional `true` for a permanent fault reported by the host owner. Do not infer it from degraded state or `last_error`; omission is not proof that the whole command is fault-free. |
189
+ | `scheduler.next_retry_at` | Optional next retry timestamp during recovery. Observation does not reset it. |
190
+ | `scheduler.last_error` | Optional bounded host diagnostic. Keep it alongside pending or readiness facts. |
191
+ | `scheduler.next_action` | Caller guidance, such as `start_required`, `inspect_scheduler` or `stop_foreground_runtime`. |
192
+ | `scheduler.serve_command` | Optional exact argv array for an independent user start. Preserve every element and its argument boundary. |
193
+ | `scheduler.stop_accepted` | Optional boolean for acceptance of this stop request. `true` is accepted, `false` is explicitly not accepted, and omission is unknown. Acceptance does not prove shutdown completed. |
194
+
195
+ For `start_required`, both `schedule.next_action` and `scheduler.next_action`
196
+ carry that guidance. `scheduler.serve_command` is JSON argv, including the
197
+ resolved executable and exact root. Human output also prints JSON argv after
198
+ `run independently (argv):`. For example, a returned root containing spaces:
199
+
200
+ ```text
201
+ run independently (argv): ["/installation with spaces/delegate","--root","/state with spaces","scheduler","serve"]
202
+ ```
203
+
204
+ Forward the array intact. It is not an unquoted shell command: do not join its
205
+ elements with spaces or pass the joined text through a shell. The user starts
206
+ serve independently with those exact argument boundaries; the agent must not
207
+ execute it inside its bounded task. An omitted `schedule.saved` does not confirm
208
+ persistence; preserve any ID and follow the reported storage/error guidance.
209
+
210
+ | Response or observation | Next action |
211
+ | --- | --- |
212
+ | Create/resume saved the definition and confirmed a compatible ready host; exit `0` | Keep its schedule ID/root. The host will handle future due work; use history/execution for actual occurrence evidence. |
213
+ | Create/resume returns exit `3`, `schedule.saved: true` and `scheduler.next_action: start_required` | The definition remains saved. Preserve the returned schedule ID/root and give `scheduler.serve_command` unchanged to the user to run in an independent terminal or tmux pane. Never start it inside the agent's bounded task, detach it in the background, or submit another create. |
214
+ | Create/resume saved the definition but reports starting, backoff or pending readiness; exit `3` | Keep the same ID and report its host state and available retry time. Use passive scheduler status for later observation; do not create another definition, start a competing host or reset cooldown. |
215
+ | Create/resume saved the definition but the host is temporarily unreachable; exit `3`, pending guidance and no top-level `error` | Preserve `schedule.saved: true` and the same ID. Use passive status to observe the uncertainty. A transport failure does not establish owner death or a permanent host fault. |
216
+ | Create/resume saved the definition and the host reports `scheduler.fault: true`; exit `1` | Report the permanent fault and available `scheduler.last_error`; retain `schedule.saved: true` and the ID. For an incompatible saved definition, the before-Ready check stops automatic child restart. Repeated create, serve or status calls are not a repair. |
217
+ | Scheduler status observes starting, ready, backoff, degraded, stopping or stopped; exit `0` | Observation completed. Report the observed state; exit `0` does not mean ready or that an occurrence succeeded. Status does not start, migrate, repair or clean resources. |
218
+ | Scheduler stop confirms completed stop; exit `0` | The exact stopped intent has a validated owner-written closure witness and the exact host is absent. The witness follows joined child shutdown and free execution ownership. Independently admitted tasks keep their existing lifetimes. A later host needs a fresh explicit user-run serve command. |
219
+ | Scheduler stop has `scheduler.stop_accepted: true` but completion is pending; exit `3` | Preserve its acceptance and pending state. The host remains control-responsive while joining its child or waiting for a prior execution owner. Host death before the closure witness does not complete stop. Observe the same generation; do not claim stopped, launch a replacement or repeat schedule creation. An omitted `stop_accepted` is unknown, not false. |
220
+ | Scheduler stop has authenticated `scheduler.stop_accepted: true` and a later readback fault; exit `1` | Preserve the accepted fact and report the concrete fault. Readback failure does not revoke acceptance or establish completed shutdown. |
221
+ | Status reports `scheduler.state: foreground`, or stop returns exit `3` with that state, `stop_accepted: false` and `next_action: stop_foreground_runtime` | The current compatibility `scheduler run` owns this generation; an older managed-host receipt cannot hide it. Public stop does not terminate it. Have the user end that invocation with Ctrl-C in its original pane. Prefer managed `scheduler serve` afterward. |
222
+ | Invalid input/state; exit `2`, or concrete operational/compatibility/cleanup fault; exit `1` | Report the error and retain any saved ID or accepted-control fact. A concrete fault joined to pending work remains a fault; it is not a pending-only result. |
223
+
224
+ If the host dies, its pane closes or the machine reboots, the user must start
225
+ serve again. Child crash recovery applies only while that host remains alive.
226
+ An absent heartbeat or unresponsive endpoint is uncertainty, not permission to
227
+ replace an owner. Do not install a service or invoke a detached bootstrap as a
228
+ recovery step. Pause/delete affect future claims and need no live host; they do
229
+ not cancel already admitted occurrences. [Scheduler runtime](command-reference.md#scheduler-runtime)
230
+ owns launch, backoff and calendar behavior.
231
+
169
232
  ## Scheduled execution results
170
233
 
171
234
  Use [schedule history and execution](command-reference.md#schedule-history-and-execution)
@@ -220,7 +283,7 @@ For an older released occurrence whose publication is unfinished, use the
220
283
  existing collection command with the same root and task ID:
221
284
 
222
285
  ```sh
223
- delegate --root "${DELEGATE_ROOT:-$HOME/delegation-state}" collect TASK_ID --watch 0s --json
286
+ delegate collect TASK_ID --watch 0s --json
224
287
  ```
225
288
 
226
289
  Follow its own response and exit using [observation guidance](#observe-and-collect).
@@ -330,7 +393,7 @@ When Delegate returns `failure.next_action: "recheck"`, use the same root and
330
393
  exact task ID:
331
394
 
332
395
  ```sh
333
- delegate --root "${DELEGATE_ROOT:-$HOME/delegation-state}" recheck TASK_ID --json
396
+ delegate recheck TASK_ID --json
334
397
  ```
335
398
 
336
399
  This command checks the already sealed evidence with an explicitly compatible
@@ -1 +1 @@
1
- "For work assigned to an external agent, model, or separate harness session, load the installed agent-integration skill before choosing tools and use Delegate. This includes research, implementation, testing, review, consultation, comparison, and debate, including external collaboration you choose. Discover destinations through Delegate. Preserve requested model IDs, effort, and permissions; do not guess ambiguous model identifiers. For task commands, pass --root \"${DELEGATE_ROOT:-$HOME/delegation-state}\" directly in each shell invocation; reuse that root for dispatch, observation, and continuation, never an invented /tmp root. If the user explicitly requests another root, use that exact path consistently. Keep each concurrent request and its response associated separately. Capture each dispatch response and exit status once; after task_record created, observe that task ID. Never dispatch again merely to recover output or inspect its exit status. Naming a CLI identifies the destination, not a request to bypass Delegate. Earlier assistant-generated direct-launch workflows do not override this preference. Native same-harness subagents remain available unless a separate session is requested. Respect an explicit user choice of another integration; otherwise do not substitute provider CLIs, plugins, or APIs after a Delegate blocker. Before observing or retrying an admission, read the installed skill's references/result-handling.md#task-creation and apply its creation decisions. It owns the narrow same-root migration, workspace-wait, and resource-refusal exceptions before the generic not_created stop rule. Preserve the original admission intent: dispatch remains dispatch and continue remains continue; never replace a failed continue with a fresh dispatch or direct provider call. A stop_and_report failure ends that attempt, not diagnosis: follow references/result-handling.md#failure-diagnosis without another generic troubleshooting request. Inspect bounded returned evidence and relevant authorized local read-only facts, distinguish supported causes from uncertainty, and propose a concrete next step. Do not poll unknown/uncreated tasks, expose credentials or unrestricted output, retry uncertain work, change setup/permissions or substitute destinations without authorization covering that action. Continue other independent requests. Keep collection in the foreground until completion or a reported blocker unless the user requested detachment. Pending work is observed through Delegate status, collect, or events, not OS process searches or supervisor commands. Merely discussing or configuring a tool is not delegation."
1
+ "For work assigned to an external agent, model, or separate harness session, load the installed agent-integration skill before choosing tools and use Delegate. This includes research, implementation, testing, review, consultation, comparison, and debate, including external collaboration you choose. Discover destinations through Delegate. Preserve requested model IDs, effort, and permissions; do not guess ambiguous model identifiers. For ordinary task, schedule, observation, interaction, and continuation commands, omit --root and let the CLI resolve its default in the same user/configuration context, independently of project cwd. Never assemble a default path, use a sample path or shell fallback, or treat ambient DELEGATE_ROOT as authority. Only pass --root for an explicitly user-supplied or already recorded custom or historical root; preserve that exact path for every command concerning its work. Do not search other roots for an old task or invent per-task or per-project roots. Keep each concurrent request and its response associated separately. Capture each dispatch response and exit status once; after task_record created, observe that task ID. Never dispatch again merely to recover output or inspect its exit status. Naming a CLI identifies the destination, not a request to bypass Delegate. Earlier assistant-generated direct-launch workflows do not override this preference. Native same-harness subagents remain available unless a separate session is requested. Respect an explicit user choice of another integration; otherwise do not substitute provider CLIs, plugins, or APIs after a Delegate blocker. Before observing or retrying an admission, read the installed skill's references/result-handling.md#task-creation and apply its creation decisions. It owns the narrow same-root migration, workspace-wait, and resource-refusal exceptions before the generic not_created stop rule. Preserve the original admission intent: dispatch remains dispatch and continue remains continue; never replace a failed continue with a fresh dispatch or direct provider call. A stop_and_report failure ends that attempt, not diagnosis: follow references/result-handling.md#failure-diagnosis without another generic troubleshooting request. Inspect bounded returned evidence and relevant authorized local read-only facts, distinguish supported causes from uncertainty, and propose a concrete next step. Do not poll unknown/uncreated tasks, expose credentials or unrestricted output, retry uncertain work, change setup/permissions or substitute destinations without authorization covering that action. Continue other independent requests. Keep collection in the foreground until completion or a reported blocker unless the user requested detachment. Pending work is observed through Delegate status, collect, or events, not OS process searches or supervisor commands. Merely discussing or configuring a tool is not delegation."
@@ -7,6 +7,10 @@ or attaches to a managed workspace (`--isolation git-worktree` or
7
7
  `--workspace ID`), or creates or removes a [Git checkpoint](#git-checkpoints).
8
8
 
9
9
  This reference is self-contained guidance for using managed workspaces.
10
+ Commands use the CLI default under the main skill's
11
+ [root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief). For a workspace
12
+ or checkpoint in an explicit custom or recorded historical root, pass that
13
+ exact `--root` on every related command.
10
14
 
11
15
  Provider-native permissions still apply inside an isolated checkout. A provider
12
16
  may edit files but be unable to stage or commit because linked-worktree Git
@@ -41,7 +45,7 @@ row ending or a provider outcome alone is not closure evidence.
41
45
  Create a managed workspace from a committed source base:
42
46
 
43
47
  ```text
44
- delegate --root ROOT dispatch --isolation git-worktree --cwd ABS \
48
+ delegate dispatch --isolation git-worktree --cwd ABS \
45
49
  [--base REV] [--workspace-budget DURATION] ... --json
46
50
  ```
47
51
 
@@ -55,7 +59,7 @@ removing that source does not block capture, release, or forget. A request that
55
59
  workspace uses its recorded checkout and source identity:
56
60
 
57
61
  ```text
58
- delegate --root ROOT dispatch --workspace WORKSPACE_ID ... --json
62
+ delegate dispatch --workspace WORKSPACE_ID ... --json
59
63
  ```
60
64
 
61
65
  Public `--workspace` cannot be combined with `--cwd`, `--base`, or
@@ -80,11 +84,11 @@ made no write outside the promised content scope.
80
84
  The CLI currently exposes these managed-workspace commands:
81
85
 
82
86
  ```text
83
- delegate --root ROOT workspace list [--after ID] [--limit 1..50] --json
84
- delegate --root ROOT workspace status ID [--operation OP] [--watch DURATION] --json
85
- delegate --root ROOT workspace exec ID --budget DURATION --json -- ARGV...
86
- delegate --root ROOT workspace release ID [--discard] [--budget DURATION] --json
87
- delegate --root ROOT workspace forget ID [--budget DURATION] --json
87
+ delegate workspace list [--after ID] [--limit 1..50] --json
88
+ delegate workspace status ID [--operation OP] [--watch DURATION] --json
89
+ delegate workspace exec ID --budget DURATION --json -- ARGV...
90
+ delegate workspace release ID [--discard] [--budget DURATION] --json
91
+ delegate workspace forget ID [--budget DURATION] --json
88
92
  ```
89
93
 
90
94
  `workspace exec` passes `ARGV...` directly to the supervised helper; the
@@ -110,7 +114,7 @@ must not mutate the predecessor's immutable records. A retained workspace can be
110
114
  read-only review by attaching its ID, for example:
111
115
 
112
116
  ```text
113
- delegate --root ROOT dispatch --provider codex:review \
117
+ delegate dispatch --provider codex:review \
114
118
  --workspace WORKSPACE_ID --review-target TARGET --brief ABS_BRIEF \
115
119
  --permission read-only --budget 1h --json
116
120
  ```
@@ -183,11 +187,11 @@ fixed Delegate values; trailers carry the checkpoint ID and request digest.
183
187
  This is unrelated to a provider continuation `mode: "checkpoint"`.
184
188
 
185
189
  ```text
186
- delegate --root ROOT checkpoint create --cwd ABS [--budget DURATION] --json
187
- delegate --root ROOT checkpoint create --workspace ID [--budget DURATION] --json
188
- delegate --root ROOT checkpoint status CHECKPOINT_ID [--operation OP] [--watch DURATION] --json
189
- delegate --root ROOT checkpoint list [--after CHECKPOINT_ID] [--limit 1..50] --json
190
- delegate --root ROOT checkpoint remove CHECKPOINT_ID [--budget DURATION] --json
190
+ delegate checkpoint create --cwd ABS [--budget DURATION] --json
191
+ delegate checkpoint create --workspace ID [--budget DURATION] --json
192
+ delegate checkpoint status CHECKPOINT_ID [--operation OP] [--watch DURATION] --json
193
+ delegate checkpoint list [--after CHECKPOINT_ID] [--limit 1..50] --json
194
+ delegate checkpoint remove CHECKPOINT_ID [--budget DURATION] --json
191
195
  ```
192
196
 
193
197
  - `create` names exactly one target: `--cwd` for an absolute ordinary Git
@@ -232,7 +236,7 @@ Save every response and exit code once; follow
232
236
  the same repository as `--cwd`, normally the source the Lead already uses:
233
237
 
234
238
  ```text
235
- delegate --root ROOT dispatch --auto --brief ABS_BRIEF --cwd ABS_SOURCE \
239
+ delegate dispatch --auto --brief ABS_BRIEF --cwd ABS_SOURCE \
236
240
  --isolation git-worktree --base COMMIT_OID \
237
241
  --permission workspace-write --budget 30m --json
238
242
  ```