agent-conveyor 0.1.23 → 0.1.24
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 +11 -3
- package/package.json +1 -1
- package/plugin/agent-conveyor/plugin.json +1 -1
- package/plugin/agent-conveyor/skills/conveyor-create-pair/SKILL.md +17 -2
- package/plugin/agent-conveyor/skills/conveyor-create-worker-set/SKILL.md +12 -2
- package/plugin/agent-conveyor/skills/conveyor-smoke-app-connections/SKILL.md +48 -8
package/README.md
CHANGED
|
@@ -194,7 +194,12 @@ worker have visible app-thread send receipts, fresh app heartbeats, durable
|
|
|
194
194
|
received/accepted acknowledgements, and an `app-smoke status` result with
|
|
195
195
|
`real_work_allowed=true`. The plain CLI records and evaluates receipts; the
|
|
196
196
|
Codex app skill/operator layer must perform live `send_message_to_thread`
|
|
197
|
-
delivery and record `sent`, `blocked`, or skipped/advisory evidence.
|
|
197
|
+
delivery and record `sent`, `blocked`, or skipped/advisory evidence. After
|
|
198
|
+
required smoke passes, pair and worker-set skills start `app-autopilot` before
|
|
199
|
+
real work so the just-proved sessions keep polling. A setup is autonomous only
|
|
200
|
+
when the emitted heartbeat automation specs have been applied, or explicitly
|
|
201
|
+
deferred as `manual-poll only`; smoke-passed by itself only proves connection
|
|
202
|
+
plumbing at that moment.
|
|
198
203
|
When the manager is itself running in the Codex app and
|
|
199
204
|
thread tools are available, the skill should first call `create_thread` for a
|
|
200
205
|
fresh same-project worker, name it with `set_thread_title`, pass the returned
|
|
@@ -560,7 +565,9 @@ stay out of receipts.
|
|
|
560
565
|
same blockers without blocking, and skip mode records an explicit bypass. The
|
|
561
566
|
CLI does not call Codex app thread tools; use the
|
|
562
567
|
`conveyor-smoke-app-connections` plugin skill from a Codex app operator
|
|
563
|
-
session for live `send_message_to_thread` delivery.
|
|
568
|
+
session for live `send_message_to_thread` delivery. A smoke-passed operator
|
|
569
|
+
flow should immediately run `app-autopilot start` and handle the emitted
|
|
570
|
+
automation specs before sending real task prompts.
|
|
564
571
|
- `app-worker-rotation-plan TASK --old-worker-thread-id ID [--require-handoff]
|
|
565
572
|
[--reason TEXT] [--json]` — Prepare a Codex app fresh-worker rotation. The
|
|
566
573
|
CLI verifies that `ID` exactly matches the active bound worker session before
|
|
@@ -845,7 +852,8 @@ stay out of receipts.
|
|
|
845
852
|
either received, accepted, or blocked on it. `received` requires delivery;
|
|
846
853
|
`accepted` and `blocked` require consumption. Use this after visible Codex app
|
|
847
854
|
sessions print `CONVEYOR RECEIVED`; do not use direct app-thread text as the
|
|
848
|
-
durable receipt.
|
|
855
|
+
durable receipt. `--from-stdin` expects a JSON object, for example
|
|
856
|
+
`printf '%s\n' '{"summary":"accepted","evidence":["consumed notification"],"blockers":[]}' | conveyor inbox-ack ... --from-stdin`.
|
|
849
857
|
|
|
850
858
|
### Actuation
|
|
851
859
|
|
package/package.json
CHANGED
|
@@ -28,6 +28,14 @@ tranche.
|
|
|
28
28
|
`conveyor-smoke-app-connections` skill in required mode. If smoke fails, do
|
|
29
29
|
not send the real task prompt; return the exact smoke blockers and repair
|
|
30
30
|
action.
|
|
31
|
+
- After required smoke passes, start app-autopilot before sending real work:
|
|
32
|
+
`conveyor app-autopilot start "$TASK" --dispatcher-id dispatch-local --path "$LEDGER" --json`.
|
|
33
|
+
Apply the emitted Codex app automation specs when automation tools are
|
|
34
|
+
available. If they are unavailable, report the pair as `manual-poll only`
|
|
35
|
+
and include the manager/worker heartbeat prompts.
|
|
36
|
+
- Do not report a created pair as autonomous unless required smoke passed,
|
|
37
|
+
`app-autopilot start` succeeded, and automation specs were either applied or
|
|
38
|
+
explicitly deferred by the operator.
|
|
31
39
|
- Tell the operator to use `conveyor-app-wake-relay` for stale app threads;
|
|
32
40
|
direct app-thread prompts are wake prompts only, not durable task truth.
|
|
33
41
|
|
|
@@ -45,7 +53,14 @@ LEDGER="$PWD/.codex-workers/workerctl.db"
|
|
|
45
53
|
3. Run `conveyor create-disposable-binding` with the created thread ids and:
|
|
46
54
|
`--path "$PWD/.codex-workers/workerctl.db" --json`.
|
|
47
55
|
4. Run `conveyor-smoke-app-connections` for the created task. Required smoke
|
|
48
|
-
must pass before the real task starts
|
|
49
|
-
|
|
56
|
+
must pass before the real task starts, and the smoke skill must start
|
|
57
|
+
app-autopilot before returning `real_work_allowed=true` as actionable.
|
|
58
|
+
5. If automation tools are available, create the manager and worker heartbeat
|
|
59
|
+
automations from the `app-autopilot start` output. If automation tools are
|
|
60
|
+
not available, return the automation specs and mark the setup
|
|
61
|
+
`manual-poll only`.
|
|
62
|
+
6. Return the manager thread title/id, worker thread title/id, ledger path,
|
|
50
63
|
task name, and exact status command:
|
|
51
64
|
`TASK="example-task"; conveyor app-loop-status "$TASK" --path "$PWD/.codex-workers/workerctl.db" --json`.
|
|
65
|
+
Include `app-autopilot status` and whether heartbeat automation specs were
|
|
66
|
+
applied, deferred, or blocked.
|
|
@@ -22,6 +22,14 @@ not run a campaign, Ralph loop, ship-it loop, or tmux workflow.
|
|
|
22
22
|
set passes only when every required worker smoke passes. If any smoke fails,
|
|
23
23
|
do not send real task prompts to any worker; return exact blockers and repair
|
|
24
24
|
actions.
|
|
25
|
+
- After each worker task's required smoke passes, start app-autopilot for that
|
|
26
|
+
task before sending real work:
|
|
27
|
+
`conveyor app-autopilot start "$TASK" --dispatcher-id dispatch-local --path "$LEDGER" --json`.
|
|
28
|
+
Apply emitted Codex app automation specs when automation tools are available,
|
|
29
|
+
or report that shard as `manual-poll only`.
|
|
30
|
+
- Do not report a worker set as autonomous unless every worker task has passed
|
|
31
|
+
smoke, started app-autopilot, and had automation specs applied or explicitly
|
|
32
|
+
deferred by the operator.
|
|
25
33
|
- Tell the operator to use `conveyor-app-wake-relay` for stale app threads;
|
|
26
34
|
only Dispatch inboxes and Conveyor receipts are durable task truth.
|
|
27
35
|
|
|
@@ -60,6 +68,8 @@ conveyor create-disposable-binding "$TASK" \
|
|
|
60
68
|
|
|
61
69
|
5. Run `conveyor-smoke-app-connections` once per worker task. Aggregate the
|
|
62
70
|
resulting `app-smoke status` receipts. Required smoke must pass for every
|
|
63
|
-
worker before the real task starts.
|
|
71
|
+
worker before the real task starts. Each shard must also start
|
|
72
|
+
app-autopilot before it is treated as autonomous.
|
|
64
73
|
6. Return a setup receipt listing every task, worker role, thread id/title,
|
|
65
|
-
manager thread id/title, ledger path, smoke id/status,
|
|
74
|
+
manager thread id/title, ledger path, smoke id/status, autopilot status,
|
|
75
|
+
automation spec state, and status command.
|
|
@@ -35,6 +35,9 @@ only.
|
|
|
35
35
|
`app-smoke status`.
|
|
36
36
|
- If `conveyor app-smoke status` reports `real_work_allowed=false`, do not send
|
|
37
37
|
the real task prompt.
|
|
38
|
+
- Prompts that ask a manager or worker to use `--from-stdin` must include an
|
|
39
|
+
explicit JSON stdin example. Do not rely on the target session to infer the
|
|
40
|
+
payload format.
|
|
38
41
|
|
|
39
42
|
## Default Ledger
|
|
40
43
|
|
|
@@ -109,9 +112,12 @@ Then poll for the worker smoke report:
|
|
|
109
112
|
conveyor manager-inbox '<TASK>' --consume-next --wait --timeout 60 --path '<LEDGER>' --json
|
|
110
113
|
|
|
111
114
|
If you consume a manager inbox item for smoke <NONCE>, record:
|
|
112
|
-
|
|
113
|
-
conveyor inbox-ack '<TASK>' --notification-id '<consumed.id>' --role manager --status
|
|
114
|
-
|
|
115
|
+
printf '%s\n' '{"summary":"manager received worker smoke report","evidence":["consumed manager inbox item for smoke <NONCE>"],"blockers":[]}' \
|
|
116
|
+
| conveyor inbox-ack '<TASK>' --notification-id '<consumed.id>' --role manager --status received --from-stdin --path '<LEDGER>' --json
|
|
117
|
+
printf '%s\n' '{"summary":"manager accepted worker smoke report","evidence":["worker report nonce matched <NONCE>"],"blockers":[]}' \
|
|
118
|
+
| conveyor inbox-ack '<TASK>' --notification-id '<consumed.id>' --role manager --status accepted --from-stdin --path '<LEDGER>' --json
|
|
119
|
+
printf '%s\n' '{"summary":"manager accepted app smoke","evidence":["fresh manager heartbeat","worker smoke report consumed","worker nonce matched <NONCE>"],"blockers":[]}' \
|
|
120
|
+
| conveyor app-smoke record '<TASK>' --smoke-id '<SMOKE_ID>' --nonce '<NONCE>' --role manager --status accepted --thread-id '<MANAGER_THREAD_ID>' --notification-id '<consumed.id>' --from-stdin --path '<LEDGER>' --json
|
|
115
121
|
|
|
116
122
|
If blocked, record app-smoke blocked with the exact blocker.
|
|
117
123
|
Stop after the smoke receipt. Do not start real work.
|
|
@@ -152,12 +158,16 @@ conveyor app-heartbeat '<TASK>' --role worker --path '<LEDGER>' --json
|
|
|
152
158
|
conveyor worker-inbox '<TASK>' --consume-next --wait --timeout 60 --path '<LEDGER>' --json
|
|
153
159
|
|
|
154
160
|
For the consumed smoke item, record:
|
|
155
|
-
|
|
156
|
-
conveyor
|
|
161
|
+
printf '%s\n' '{"summary":"worker received smoke item","evidence":["consumed worker inbox item for smoke <NONCE>"],"blockers":[]}' \
|
|
162
|
+
| conveyor inbox-ack '<TASK>' --notification-id '<consumed.id>' --role worker --status received --from-stdin --path '<LEDGER>' --json
|
|
163
|
+
printf '%s\n' '{"summary":"worker received app smoke","evidence":["fresh worker heartbeat","worker inbox item consumed","nonce matched <NONCE>"],"blockers":[]}' \
|
|
164
|
+
| conveyor app-smoke record '<TASK>' --smoke-id '<SMOKE_ID>' --nonce '<NONCE>' --role worker --status received --thread-id '<WORKER_THREAD_ID>' --notification-id '<consumed.id>' --from-stdin --path '<LEDGER>' --json
|
|
157
165
|
|
|
158
166
|
Then record accepted:
|
|
159
|
-
|
|
160
|
-
conveyor
|
|
167
|
+
printf '%s\n' '{"summary":"worker accepted smoke item","evidence":["smoke instructions understood","no product work started"],"blockers":[]}' \
|
|
168
|
+
| conveyor inbox-ack '<TASK>' --notification-id '<consumed.id>' --role worker --status accepted --from-stdin --path '<LEDGER>' --json
|
|
169
|
+
printf '%s\n' '{"summary":"worker accepted app smoke","evidence":["smoke item accepted","nonce matched <NONCE>"],"blockers":[]}' \
|
|
170
|
+
| conveyor app-smoke record '<TASK>' --smoke-id '<SMOKE_ID>' --nonce '<NONCE>' --role worker --status accepted --thread-id '<WORKER_THREAD_ID>' --notification-id '<consumed.id>' --from-stdin --path '<LEDGER>' --json
|
|
161
171
|
|
|
162
172
|
Finally notify the manager:
|
|
163
173
|
conveyor enqueue-notify-manager '<TASK>' --message 'CONVEYOR SMOKE <NONCE>: worker accepted smoke.' --correlation-id '<SMOKE_ID>-worker-report' --path '<LEDGER>' --json
|
|
@@ -189,6 +199,33 @@ conveyor app-smoke status "$TASK" --smoke-id "$SMOKE_ID" --path "$LEDGER" --json
|
|
|
189
199
|
If `real_work_allowed=true`, the setup may send the real work prompt. If
|
|
190
200
|
`real_work_allowed=false`, report exact blockers and stop.
|
|
191
201
|
|
|
202
|
+
8. Start app-autopilot immediately after required smoke passes and before
|
|
203
|
+
sending real work:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
conveyor app-autopilot start "$TASK" \
|
|
207
|
+
--dispatcher-id dispatch-local \
|
|
208
|
+
--path "$LEDGER" \
|
|
209
|
+
--json
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The operator or manager must apply the emitted Codex app automation specs with
|
|
213
|
+
Codex app automation tools. If automation tools are unavailable, report the
|
|
214
|
+
task as `manual-poll only` and include the manager and worker heartbeat prompts
|
|
215
|
+
from the autopilot output. Do not report the pair as autonomous until autopilot
|
|
216
|
+
is started and its automation specs are either applied or explicitly deferred.
|
|
217
|
+
|
|
218
|
+
9. After autopilot start, run:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
conveyor app-autopilot status "$TASK" --path "$LEDGER" --json
|
|
222
|
+
conveyor app-loop-status "$TASK" --path "$LEDGER" --json
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
If `app-loop-status` reports stale manager or worker immediately after
|
|
226
|
+
autopilot setup, wake the stale role or report the exact blocker before sending
|
|
227
|
+
real work.
|
|
228
|
+
|
|
192
229
|
## Worker Set Flow
|
|
193
230
|
|
|
194
231
|
For worker sets, run the pair flow once per bound worker task. Treat each worker
|
|
@@ -214,7 +251,10 @@ End with:
|
|
|
214
251
|
- `blocked_roles`
|
|
215
252
|
- `status_after`
|
|
216
253
|
- `real_work_allowed`
|
|
254
|
+
- `autopilot_status`
|
|
255
|
+
- `automation_specs_applied_or_deferred`
|
|
217
256
|
- `next_action`
|
|
218
257
|
|
|
219
258
|
If any role is blocked, name the exact blocker and do not report the smoke as
|
|
220
|
-
passed.
|
|
259
|
+
passed. If smoke passed but autopilot was not started or automation specs were
|
|
260
|
+
not applied/deferred, report the pair as smoke-passed but not autonomous.
|