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.
- package/README.md +7 -0
- package/docs/assets/delegation-layer-hero.jpg +0 -0
- package/package.json +1 -1
- package/plugins/delegation-layer/.claude-plugin/plugin.json +1 -1
- package/plugins/delegation-layer/.codex-plugin/plugin.json +1 -1
- package/plugins/delegation-layer/skills/agent-integration/SKILL.md +16 -8
- package/plugins/delegation-layer/skills/agent-integration/evals/evals.json +23 -3
- package/plugins/delegation-layer/skills/agent-integration/examples/json-results.md +5 -2
- package/plugins/delegation-layer/skills/agent-integration/examples/managed-workspace.md +50 -17
- package/plugins/delegation-layer/skills/agent-integration/examples/read-only-task.md +3 -1
- package/plugins/delegation-layer/skills/agent-integration/references/ccr.md +7 -3
- package/plugins/delegation-layer/skills/agent-integration/references/collaboration.md +2 -2
- package/plugins/delegation-layer/skills/agent-integration/references/command-reference.md +152 -47
- package/plugins/delegation-layer/skills/agent-integration/references/continuation.md +7 -4
- package/plugins/delegation-layer/skills/agent-integration/references/interaction.md +6 -5
- package/plugins/delegation-layer/skills/agent-integration/references/result-handling.md +66 -3
- package/plugins/delegation-layer/skills/agent-integration/references/routing-rule.json +1 -1
- package/plugins/delegation-layer/skills/agent-integration/references/workspaces.md +18 -14
- package/skills/agent-integration/SKILL.md +16 -8
- package/skills/agent-integration/evals/evals.json +23 -3
- package/skills/agent-integration/examples/json-results.md +5 -2
- package/skills/agent-integration/examples/managed-workspace.md +50 -17
- package/skills/agent-integration/examples/read-only-task.md +3 -1
- package/skills/agent-integration/references/ccr.md +7 -3
- package/skills/agent-integration/references/collaboration.md +2 -2
- package/skills/agent-integration/references/command-reference.md +152 -47
- package/skills/agent-integration/references/continuation.md +7 -4
- package/skills/agent-integration/references/interaction.md +6 -5
- package/skills/agent-integration/references/result-handling.md +66 -3
- package/skills/agent-integration/references/routing-rule.json +1 -1
- package/skills/agent-integration/references/workspaces.md +18 -14
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ and retrieving results with evidence.
|
|
|
8
8
|
· [Example](#ask-naturally)
|
|
9
9
|
· [Providers](https://github.com/hishamkaram/delegation-layer/blob/main/docs/providers.md)
|
|
10
10
|
· [Teams](https://github.com/hishamkaram/delegation-layer/blob/main/docs/teams.md)
|
|
11
|
+
· [Start recurring tasks](docs/getting-started.md#recurring-tasks)
|
|
11
12
|
· [Docs](https://github.com/hishamkaram/delegation-layer/blob/main/docs/README.md)
|
|
12
13
|
|
|
13
14
|
<p align="center">
|
|
@@ -55,6 +56,12 @@ for activation and limits.
|
|
|
55
56
|
For a manual CLI task, use the packaged
|
|
56
57
|
[read-only example](skills/agent-integration/examples/read-only-task.md).
|
|
57
58
|
|
|
59
|
+
For recurring work, follow the [scheduler walkthrough](docs/getting-started.md#recurring-tasks)
|
|
60
|
+
to start `delegate scheduler serve` in your own terminal or tmux pane, even
|
|
61
|
+
before saving a definition. Agents and manual commands share the CLI's default
|
|
62
|
+
state across projects. The walkthrough covers saving a schedule, inspecting its
|
|
63
|
+
first result and stopping or restarting the host.
|
|
64
|
+
|
|
58
65
|
## Help and contributing
|
|
59
66
|
|
|
60
67
|
See [troubleshooting](https://github.com/hishamkaram/delegation-layer/blob/main/docs/troubleshooting.md),
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "delegation-layer",
|
|
3
3
|
"displayName": "Delegation Layer",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"description": "Consult external AI harnesses and CCR-configured models for reviews, research, implementation, and debate through the resumable Delegate CLI.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Hesham Karam",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "delegation-layer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Consult external AI harnesses and CCR-configured models for reviews, research, implementation, and debate through the resumable Delegate CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Hesham Karam",
|
|
@@ -87,11 +87,16 @@ Use a supplied brief or write the worker's bounded assignment and acceptance
|
|
|
87
87
|
criteria to a regular file. Do not copy the orchestration request or ask workers
|
|
88
88
|
to recruit others unless recursive delegation was requested.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
For ordinary task, schedule, observation, interaction, and continuation commands,
|
|
91
|
+
omit `--root`; the CLI owns default-root resolution for the user's configuration
|
|
92
|
+
context, independently of the project cwd. Do not assemble a default path, use a
|
|
93
|
+
sample path or shell fallback, or treat ambient `DELEGATE_ROOT` as authority.
|
|
94
|
+
Only pass `--root` when the user explicitly supplies a root or existing work has
|
|
95
|
+
an already recorded custom or historical root; preserve that exact path for
|
|
96
|
+
every command concerning that work. Never search other roots for an old task.
|
|
97
|
+
Task IDs separate tasks; do not invent per-task or per-project roots. The state
|
|
98
|
+
root must remain outside provider-writable workspaces, provider runtime
|
|
99
|
+
directories, and temporary trees they may write.
|
|
95
100
|
|
|
96
101
|
Prepare paths and dispatch in one tool invocation; shell variables may not
|
|
97
102
|
persist between calls. Use saved absolute paths in later calls. Do not use
|
|
@@ -125,13 +130,16 @@ original command and intent.
|
|
|
125
130
|
### 5. Observe and collect
|
|
126
131
|
|
|
127
132
|
Follow [observation decisions](references/result-handling.md#observe-and-collect)
|
|
128
|
-
with the
|
|
133
|
+
with the created task ID, using the CLI default for ordinary work:
|
|
129
134
|
|
|
130
135
|
```sh
|
|
131
|
-
delegate
|
|
132
|
-
delegate
|
|
136
|
+
delegate status TASK_ID --json
|
|
137
|
+
delegate collect TASK_ID --watch 5s --json
|
|
133
138
|
```
|
|
134
139
|
|
|
140
|
+
For work bound to an explicit custom or historical root, add its exact
|
|
141
|
+
`--root` to both commands under the [root rule](#3-prepare-separate-paths-and-a-finite-brief).
|
|
142
|
+
|
|
135
143
|
Apply the owning decision order before waiting: terminal outcomes and concrete
|
|
136
144
|
errors, cancellation/timeout/interruption, interaction, then pending
|
|
137
145
|
observation. Keep collection in the foreground until completion or a reported
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "normal-dispatch",
|
|
12
12
|
"prompt": "Run one bounded task through the available agent provider.",
|
|
13
|
-
"expected": ["dispatch --auto", "--json", "save task_id", "status", "collect"]
|
|
13
|
+
"expected": ["dispatch --auto", "omit --root on ordinary commands", "--json", "save task_id", "status", "collect"]
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"name": "model-discovery-when-needed",
|
|
@@ -68,9 +68,29 @@
|
|
|
68
68
|
"expected": ["use status with returned task_id", "read saved dispatch response if needed", "do not dispatch again to print an exit code", "exactly one admitted task for the assignment"]
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
|
-
"name": "
|
|
71
|
+
"name": "ambient-root-ignored-across-shell-calls",
|
|
72
72
|
"prompt": "DELEGATE_ROOT is already set. Consult a separate external agent and answer its questions; each shell tool call starts a new shell.",
|
|
73
|
-
"expected": ["
|
|
73
|
+
"expected": ["omit --root on dispatch, status, collect, reply, steer, and continue", "ambient DELEGATE_ROOT has no root-selection authority", "CLI resolves its default in the same user/configuration context", "no assembled default, shell fallback, sample path, or per-task root"]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "ordinary-root-from-another-project",
|
|
77
|
+
"prompt": "DELEGATE_ROOT is unset. An admitted task was dispatched without --root in project A. Observe and continue it from project B in the same user/configuration context.",
|
|
78
|
+
"expected": ["omit --root on status, collect, and continue", "use the recorded task ID", "CLI default is independent of project cwd", "no path guessed from project A or B", "no search across roots"]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "explicit-root-across-shell-calls",
|
|
82
|
+
"prompt": "For this isolated test, I explicitly choose the state root /state/custom with spaces. Consult a separate external agent and answer its questions; each shell tool call starts a new shell.",
|
|
83
|
+
"expected": ["pass --root with the exact single argument /state/custom with spaces on dispatch, status, collect, reply, steer, and continue", "quote the root in shell commands", "save and reassign absolute brief and response paths in each needed shell invocation", "no ambient variable or fallback overrides the explicit choice"]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "historical-root-continuation",
|
|
87
|
+
"prompt": "An eligible predecessor task has recorded historical root /state/legacy with spaces. Continue that exact task and collect its successor. The current CLI default is different.",
|
|
88
|
+
"expected": ["pass the exact recorded --root argument /state/legacy with spaces on continue, status, and collect", "use the exact predecessor and returned successor IDs", "no fresh dispatch", "do not move or search for the task in the default root"]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "ordinary-schedule-root",
|
|
92
|
+
"prompt": "Create a recurring task in this project, then inspect its definition, history, and execution from another project in the same user/configuration context. No custom state root was requested.",
|
|
93
|
+
"expected": ["omit --root on schedule create, list, show, history, and execution", "keep the definition's own project --cwd", "no per-project root", "do not start a persistent scheduler inside the agent task", "forward any returned scheduler.serve_command argv intact"]
|
|
74
94
|
},
|
|
75
95
|
{
|
|
76
96
|
"name": "pending-without-questions",
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# JSON decision sketch
|
|
2
2
|
|
|
3
|
+
Use the created task's exact ID as `TASK_ID` and follow the main skill's
|
|
4
|
+
[root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief).
|
|
5
|
+
|
|
3
6
|
```sh
|
|
4
|
-
delegate
|
|
5
|
-
delegate
|
|
7
|
+
delegate status TASK_ID --json
|
|
8
|
+
delegate collect TASK_ID --watch 5s --json
|
|
6
9
|
```
|
|
7
10
|
|
|
8
11
|
Apply [result handling](../references/result-handling.md) to each response and
|
|
@@ -3,14 +3,18 @@
|
|
|
3
3
|
Use this example for independent write work that should be isolated in a
|
|
4
4
|
retained Git worktree. The source must be a Git checkout and the state root
|
|
5
5
|
must remain outside provider-writable workspaces.
|
|
6
|
+
Commands use the CLI default under the main skill's
|
|
7
|
+
[root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief); preserve any
|
|
8
|
+
explicit custom or recorded historical root on all related commands.
|
|
6
9
|
|
|
7
10
|
```sh
|
|
8
11
|
SOURCE="$PWD"
|
|
9
|
-
BRIEF="$(mktemp)"
|
|
10
|
-
RESPONSE="$(mktemp)"
|
|
12
|
+
BRIEF="$(mktemp)" || exit 1
|
|
13
|
+
RESPONSE="$(mktemp)" || exit 1
|
|
11
14
|
printf '%s\n' 'Implement the requested change and report the files changed.' >"$BRIEF"
|
|
15
|
+
printf 'Saved response: %s\n' "$RESPONSE"
|
|
12
16
|
|
|
13
|
-
if delegate
|
|
17
|
+
if delegate dispatch --auto \
|
|
14
18
|
--brief "$BRIEF" --cwd "$SOURCE" \
|
|
15
19
|
--permission workspace-write --isolation git-worktree \
|
|
16
20
|
--base HEAD --workspace-budget 5m --budget 30m --json >"$RESPONSE"; then
|
|
@@ -26,28 +30,51 @@ Read the saved JSON before running another command. When
|
|
|
26
30
|
`task_record: "created"`, use its `task_id` as `TASK_ID` below. When no task
|
|
27
31
|
was created, follow the [result decisions](../references/result-handling.md#managed-workspace-results);
|
|
28
32
|
do not run task status or collection against that nonexistent record.
|
|
33
|
+
Each later block is a separate shell invocation. Replace `ABS_SAVED_RESPONSE`
|
|
34
|
+
with the printed absolute response path and the ID placeholders with the actual
|
|
35
|
+
returned IDs; reassign the path in each invocation.
|
|
29
36
|
|
|
30
37
|
```sh
|
|
31
|
-
|
|
38
|
+
RESPONSE="ABS_SAVED_RESPONSE"
|
|
39
|
+
if delegate status TASK_ID --json >"$RESPONSE.status"; then
|
|
32
40
|
status_exit=0
|
|
33
41
|
else
|
|
34
42
|
status_exit=$?
|
|
35
43
|
fi
|
|
36
44
|
printf '%s\n' "$status_exit" >"$RESPONSE.status.exit"
|
|
37
|
-
|
|
45
|
+
cat "$RESPONSE.status"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Read the saved status JSON and apply
|
|
49
|
+
[Observe and collect](../references/result-handling.md#observe-and-collect)
|
|
50
|
+
before running another command. Run the collection below only when that
|
|
51
|
+
guidance calls for it.
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
RESPONSE="ABS_SAVED_RESPONSE"
|
|
55
|
+
if delegate collect TASK_ID --watch 5s --json >"$RESPONSE.collect"; then
|
|
38
56
|
collect_exit=0
|
|
39
57
|
else
|
|
40
58
|
collect_exit=$?
|
|
41
59
|
fi
|
|
42
60
|
printf '%s\n' "$collect_exit" >"$RESPONSE.collect.exit"
|
|
61
|
+
cat "$RESPONSE.collect"
|
|
43
62
|
```
|
|
44
63
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
64
|
+
Apply that same decision order to the collection JSON before treating exit `3`
|
|
65
|
+
as pending. Cancellation, `failure.code: "task_cancelled"` or
|
|
66
|
+
`failure.next_action: "stop_and_report"` ends pending polling; do not continue
|
|
67
|
+
the task or dispatch a replacement. Bounded
|
|
68
|
+
[failure diagnosis](../references/result-handling.md#failure-diagnosis)
|
|
69
|
+
remains available. Keep observing the same task with a finite watch only when
|
|
70
|
+
the canonical guidance calls for it.
|
|
71
|
+
|
|
72
|
+
Before release, wait for the workspace to return to `state: retained` and inspect
|
|
73
|
+
its final capture. Only after the Lead explicitly chooses release, run:
|
|
48
74
|
|
|
49
75
|
```sh
|
|
50
|
-
|
|
76
|
+
RESPONSE="ABS_SAVED_RESPONSE"
|
|
77
|
+
if delegate workspace release WORKSPACE_ID \
|
|
51
78
|
--budget 5m --json >"$RESPONSE.release"; then
|
|
52
79
|
release_exit=0
|
|
53
80
|
else
|
|
@@ -62,10 +89,11 @@ Follow the same result decisions rather than assuming either response is
|
|
|
62
89
|
completed cleanup.
|
|
63
90
|
|
|
64
91
|
Save each response and exit code once. A created task is observed with
|
|
65
|
-
`status` first and collected in the foreground
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
apply, commit, branch merge,
|
|
92
|
+
`status` first and collected in the foreground, following the canonical
|
|
93
|
+
observation decisions before each next step. Exit `3` alone is not a reason
|
|
94
|
+
to keep polling. The Lead reviews the capture and owns landing any changes.
|
|
95
|
+
`workspace release` is explicit; no automatic apply, commit, branch merge,
|
|
96
|
+
TTL eviction, or provider-CLI fallback occurs.
|
|
69
97
|
|
|
70
98
|
## Fork from a checkpoint
|
|
71
99
|
|
|
@@ -77,8 +105,9 @@ owns every response decision.
|
|
|
77
105
|
|
|
78
106
|
```sh
|
|
79
107
|
SOURCE="$PWD"
|
|
80
|
-
RESPONSE="$(mktemp)"
|
|
81
|
-
|
|
108
|
+
RESPONSE="$(mktemp)" || exit 1
|
|
109
|
+
printf 'Saved response: %s\n' "$RESPONSE"
|
|
110
|
+
if delegate checkpoint create \
|
|
82
111
|
--cwd "$SOURCE" --budget 5m --json >"$RESPONSE.checkpoint"; then
|
|
83
112
|
checkpoint_exit=0
|
|
84
113
|
else
|
|
@@ -91,9 +120,12 @@ cat "$RESPONSE.checkpoint"
|
|
|
91
120
|
Exit `3` with `checkpoint.id` and `next_action: "watch_checkpoint"` means the
|
|
92
121
|
request was accepted, not captured. Use that `checkpoint.id` as
|
|
93
122
|
`CHECKPOINT_ID`. Do not run `create` again.
|
|
123
|
+
For the later checkpoint blocks, replace `ABS_SAVED_RESPONSE` with the absolute
|
|
124
|
+
response path printed by this checkpoint invocation.
|
|
94
125
|
|
|
95
126
|
```sh
|
|
96
|
-
|
|
127
|
+
RESPONSE="ABS_SAVED_RESPONSE"
|
|
128
|
+
if delegate checkpoint status CHECKPOINT_ID \
|
|
97
129
|
--watch 30s --json >"$RESPONSE.checkpoint.status"; then
|
|
98
130
|
checkpoint_status_exit=0
|
|
99
131
|
else
|
|
@@ -112,7 +144,8 @@ dispatch example, replacing `--base HEAD` with `--base COMMIT_OID`. Report a
|
|
|
112
144
|
When the Lead no longer needs the checkpoint, remove it explicitly:
|
|
113
145
|
|
|
114
146
|
```sh
|
|
115
|
-
|
|
147
|
+
RESPONSE="ABS_SAVED_RESPONSE"
|
|
148
|
+
if delegate checkpoint remove CHECKPOINT_ID \
|
|
116
149
|
--budget 5m --json >"$RESPONSE.checkpoint.remove"; then
|
|
117
150
|
checkpoint_remove_exit=0
|
|
118
151
|
else
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Run from the intended workspace, outside Delegate's private state root.
|
|
4
4
|
Use a catalog provider ID in place of `--auto` when a destination was named.
|
|
5
|
+
This example uses the CLI default under the main skill's
|
|
6
|
+
[root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief).
|
|
5
7
|
Prepare paths and dispatch in this same shell invocation:
|
|
6
8
|
|
|
7
9
|
```sh
|
|
@@ -13,7 +15,7 @@ Inspect the workspace and summarize the current test failures. Do not edit files
|
|
|
13
15
|
You are the assigned worker; perform this task without delegating it.
|
|
14
16
|
EOF
|
|
15
17
|
printf 'Saved response: %s\n' "$RESPONSE"
|
|
16
|
-
if delegate
|
|
18
|
+
if delegate dispatch --auto \
|
|
17
19
|
--brief "$BRIEF" --cwd "$WORKSPACE" \
|
|
18
20
|
--permission read-only --budget 30m --json >"$RESPONSE"; then
|
|
19
21
|
dispatch_exit=0
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
Use this reference when asked to consult Claude Code Router (CCR), use one of
|
|
4
4
|
its configured model aliases, or compare its models with other harnesses.
|
|
5
5
|
CCR runs Claude Code against a configured third-party or local provider.
|
|
6
|
+
Use the CLI default under the main skill's
|
|
7
|
+
[root rule](../SKILL.md#3-prepare-separate-paths-and-a-finite-brief); preserve any
|
|
8
|
+
explicit custom or recorded historical root for model discovery and dispatch.
|
|
6
9
|
|
|
7
10
|
1. Resolve CCR through `delegate providers --json`; its profile is `ccr:print`.
|
|
8
11
|
2. Preserve an explicitly requested CCR alias as `--model ALIAS`. Do not replace
|
|
@@ -12,9 +15,10 @@ CCR runs Claude Code against a configured third-party or local provider.
|
|
|
12
15
|
Choose a suitable configured alias from the available metadata and report
|
|
13
16
|
the choice. Clarify when the intended model remains ambiguous. If discovery
|
|
14
17
|
is unavailable and no alias is known, report the blocker; do not guess.
|
|
15
|
-
4. Dispatch through Delegate with
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
4. Dispatch through Delegate with
|
|
19
|
+
`--provider ccr:print --model ALIAS`, the brief, workspace, permission, finite
|
|
20
|
+
budget, and `--json`. Use the normal status, collect, and continuation procedure
|
|
21
|
+
from the main skill.
|
|
18
22
|
|
|
19
23
|
CCR requires an explicit alias. Unspecified external collaboration still uses
|
|
20
24
|
`dispatch --auto`; do not prefer CCR unless the request calls for it. Multiple
|
|
@@ -45,7 +45,7 @@ RECEIPTS="$(mktemp -d)" || exit 1
|
|
|
45
45
|
# Set these absolute paths and catalog IDs in this same tool invocation.
|
|
46
46
|
# BRIEF_A and BRIEF_B contain the real independent assignments.
|
|
47
47
|
(
|
|
48
|
-
if delegate
|
|
48
|
+
if delegate dispatch --provider "$PROVIDER_A" \
|
|
49
49
|
--brief "$BRIEF_A" --cwd "$WORKSPACE_A" \
|
|
50
50
|
--permission read-only --budget 30m --json \
|
|
51
51
|
>"$RECEIPTS/review-a.json" 2>"$RECEIPTS/review-a.stderr"; then
|
|
@@ -56,7 +56,7 @@ RECEIPTS="$(mktemp -d)" || exit 1
|
|
|
56
56
|
printf '%s\n' "$dispatch_exit" >"$RECEIPTS/review-a.exit"
|
|
57
57
|
) &
|
|
58
58
|
(
|
|
59
|
-
if delegate
|
|
59
|
+
if delegate dispatch --provider "$PROVIDER_B" \
|
|
60
60
|
--brief "$BRIEF_B" --cwd "$WORKSPACE_B" \
|
|
61
61
|
--permission read-only --budget 30m --json \
|
|
62
62
|
>"$RECEIPTS/review-b.json" 2>"$RECEIPTS/review-b.stderr"; then
|