agent-conveyor 0.1.14 → 0.1.15
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 +81 -5
- package/dist/cli/typescript-runtime.js +751 -8
- package/dist/cli/typescript-runtime.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/campaigns.d.ts +197 -0
- package/dist/runtime/campaigns.js +438 -0
- package/dist/runtime/campaigns.js.map +1 -0
- package/dist/state/schema-v23.js +87 -1
- package/dist/state/schema-v23.js.map +1 -1
- package/dist/state/sqlite-contract.d.ts +1 -1
- package/dist/state/sqlite-contract.js +13 -1
- package/dist/state/sqlite-contract.js.map +1 -1
- package/docs/manager-recipes.md +97 -0
- package/package.json +1 -1
- package/skills/manage-codex-workers/SKILL.md +67 -0
- package/skills/manage-codex-workers/agents/openai.yaml +2 -2
package/README.md
CHANGED
|
@@ -295,6 +295,64 @@ tmux attach -t codex-live-test
|
|
|
295
295
|
|
|
296
296
|
## Commands
|
|
297
297
|
|
|
298
|
+
### Campaigns
|
|
299
|
+
|
|
300
|
+
- `campaign create --name C --objective TEXT [--metadata-json JSON] [--json]` —
|
|
301
|
+
Create a campaign record for a multi-worker initiative.
|
|
302
|
+
- `campaign add-slot --name C --slot-key K --role-label TEXT [--channel CH] [--session-id S] [--thread-id ID] [--thread-title TITLE] [--state planned|active|idle|blocked|archived] [--metadata-json JSON] [--json]` —
|
|
303
|
+
Add a named worker slot to a campaign. If `--session-id` is supplied, the
|
|
304
|
+
runtime verifies that it is a registered worker session.
|
|
305
|
+
- `campaign attach-slot --name C --slot SLOT_ID [--session-id S] [--thread-id ID] [--thread-title TITLE] [--state planned|active|idle|blocked|archived] [--metadata-json JSON] [--json]` —
|
|
306
|
+
Attach or refresh worker-session and Codex app thread metadata for an existing
|
|
307
|
+
campaign slot. Supplying `--session-id` requires a registered worker session.
|
|
308
|
+
- `campaign rotate-slot --name C --slot SLOT_ID --expected-thread-id OLD --thread-id NEW [--thread-title TITLE] [--session-id S] [--state planned|active|idle|blocked|archived] [--json]` —
|
|
309
|
+
Record a campaign-owned worker slot rotation. The command refuses to update
|
|
310
|
+
the slot unless `OLD` matches the slot's current Codex app thread id.
|
|
311
|
+
- `campaign archive-slot --name C --slot SLOT_ID --expected-thread-id CURRENT [--json]` —
|
|
312
|
+
Mark a campaign worker slot archived only when the expected current thread id
|
|
313
|
+
matches the slot record.
|
|
314
|
+
- `campaign brief --name C --channel CH --brief-json JSON [--json]` —
|
|
315
|
+
Upsert the structured brief for a channel.
|
|
316
|
+
- `campaign assign --name C --slot SLOT_ID --title TEXT --instructions TEXT [--status queued|active|blocked|done|cancelled] [--metadata-json JSON] [--json]` —
|
|
317
|
+
Create a slot-scoped assignment.
|
|
318
|
+
- `campaign asset --name C --slot SLOT_ID --asset-type image|video|hyperframes|copy|audio|other --title TEXT [--assignment ASSIGNMENT_ID] [--channel CH] [--status draft|needs_review|approved|rejected|published] [--prompt-summary TEXT] [--artifact-path PATH] [--metadata-json JSON] [--review-notes TEXT] [--json]` —
|
|
319
|
+
Record a structured creative asset receipt.
|
|
320
|
+
- `campaign status --name C [--json]` —
|
|
321
|
+
Show campaign metadata, worker slots, channel briefs, assignment counts, and
|
|
322
|
+
asset receipt counts.
|
|
323
|
+
- `campaign dashboard --name C [--json]` —
|
|
324
|
+
Show a manager-oriented campaign aggregate: worker slot lifecycle states,
|
|
325
|
+
blockers, approval counts, and the next recommended manager action.
|
|
326
|
+
|
|
327
|
+
Creative Ops Campaign manager loop:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
conveyor campaign create --name "$CAMPAIGN" \
|
|
331
|
+
--objective "Produce reviewable channel assets." --json
|
|
332
|
+
conveyor campaign add-slot --name "$CAMPAIGN" --slot-key tiktok \
|
|
333
|
+
--role-label "TikTok worker" --channel tiktok \
|
|
334
|
+
--thread-id "$TIKTOK_THREAD_ID" --thread-title "TikTok Worker" \
|
|
335
|
+
--state active --json
|
|
336
|
+
conveyor campaign brief --name "$CAMPAIGN" --channel tiktok \
|
|
337
|
+
--brief-json '{"format":"9:16","review_gate":"human approval before publish"}' --json
|
|
338
|
+
conveyor campaign assign --name "$CAMPAIGN" --slot "$SLOT_ID" \
|
|
339
|
+
--title "Draft TikTok hooks" \
|
|
340
|
+
--instructions "Create reviewable draft copy only; do not publish." \
|
|
341
|
+
--status active --json
|
|
342
|
+
conveyor campaign asset --name "$CAMPAIGN" --slot "$SLOT_ID" \
|
|
343
|
+
--assignment "$ASSIGNMENT_ID" --asset-type copy \
|
|
344
|
+
--title "TikTok hooks v1" --status needs_review \
|
|
345
|
+
--prompt-summary "Sanitized prompt summary only." --json
|
|
346
|
+
conveyor campaign dashboard --name "$CAMPAIGN" --json
|
|
347
|
+
conveyor dashboard --campaign "$CAMPAIGN" --ensure-dispatch
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Use `campaign rotate-slot` or `campaign archive-slot` only with the exact
|
|
351
|
+
current `--expected-thread-id` for that campaign slot. Public publishing,
|
|
352
|
+
scheduling, posting, external account access, private phone content, raw audio,
|
|
353
|
+
tokens, JWTs, keys, archives, and IPAs require explicit human approval or must
|
|
354
|
+
stay out of receipts.
|
|
355
|
+
|
|
298
356
|
### Sessions and binding
|
|
299
357
|
|
|
300
358
|
- `start-worker --name N [--cwd D] [--task "..."] [--sandbox SANDBOX] [--ask-for-approval ASK_FOR_APPROVAL] [--accept-trust] [--timeout-seconds N]` —
|
|
@@ -443,6 +501,18 @@ tmux attach -t codex-live-test
|
|
|
443
501
|
heartbeats since the last command or inbox-consumption receipt, it recommends
|
|
444
502
|
`stop_autopilot` so operators can quiesce blocked/no-progress loops instead
|
|
445
503
|
of repeating idle pulses.
|
|
504
|
+
- `app-worker-rotation-plan TASK --old-worker-thread-id ID [--require-handoff]
|
|
505
|
+
[--reason TEXT] [--json]` — Prepare a Codex app fresh-worker rotation. The
|
|
506
|
+
CLI verifies that `ID` exactly matches the active bound worker session before
|
|
507
|
+
emitting adapter-ready actions to create a replacement worker thread and
|
|
508
|
+
archive the old worker thread. Blocked plans contain no archive action.
|
|
509
|
+
- `app-worker-rotation-record TASK --old-worker-thread-id OLD
|
|
510
|
+
--new-worker-thread-id NEW [--new-worker-thread-title TITLE]
|
|
511
|
+
--archive-status archived|blocked [--reason TEXT] [--json]` — Record the
|
|
512
|
+
result after the Codex app layer creates the replacement worker thread and
|
|
513
|
+
archives, or blocks on archiving, the old thread. The command re-checks active
|
|
514
|
+
binding ownership before updating the worker session to the new app thread id,
|
|
515
|
+
so a stale plan cannot archive or replace an unrelated thread.
|
|
446
516
|
- `discover [QUERY] [--all] [--limit N]` / `search [QUERY]` — Search tasks,
|
|
447
517
|
registered sessions, active bindings, and recent telemetry in one JSON result.
|
|
448
518
|
Use this for conversational setup when a manager or Codex session needs to
|
|
@@ -587,6 +657,10 @@ tmux attach -t codex-live-test
|
|
|
587
657
|
before/after sending the worker instruction. `--dry-run` still records the
|
|
588
658
|
command in `commands`, `replay`, and `mutation-audit` with `dry_run: true`
|
|
589
659
|
and `sent: false`.
|
|
660
|
+
In Codex app threads, remote `/compact` or `/clear` sent through
|
|
661
|
+
`send_message_to_thread` is prompt text, not an executable slash command. Use
|
|
662
|
+
`app-worker-rotation-plan` plus Codex app `create_thread` and
|
|
663
|
+
`set_thread_archived` when fresh context is required for app-native workers.
|
|
590
664
|
- `bind --task T --worker W --manager M` — Create the task binding.
|
|
591
665
|
- `unbind --task T` — End the active binding for a task.
|
|
592
666
|
- `finish-task <task> [--reason R] [--require-criteria-audit]
|
|
@@ -616,7 +690,7 @@ tmux attach -t codex-live-test
|
|
|
616
690
|
|
|
617
691
|
### Observation
|
|
618
692
|
|
|
619
|
-
- `dashboard [--task T] [--ensure-dispatch] [--dispatcher-id ID]
|
|
693
|
+
- `dashboard [--task T] [--campaign C] [--ensure-dispatch] [--dispatcher-id ID]
|
|
620
694
|
[--host 127.0.0.1] [--port 8797]` — Launch the
|
|
621
695
|
local live supervision cockpit. The dashboard binds to loopback by default,
|
|
622
696
|
uses the TypeScript backend to shell out to `conveyor` JSON commands, and
|
|
@@ -624,10 +698,12 @@ tmux attach -t codex-live-test
|
|
|
624
698
|
a WebSocket PTY bridge. It includes browser bootstrap controls for creating a
|
|
625
699
|
task, starting a worker/manager pair with `conveyor pair`, auto-attaching the
|
|
626
700
|
terminals, attach/bind controls, and audited action receipts for cycle,
|
|
627
|
-
nudge, interrupt, finish, and export. With `--
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
`--
|
|
701
|
+
nudge, interrupt, finish, and export. With `--campaign`, the observation rail
|
|
702
|
+
also shows campaign slot lifecycle, blockers, approval counts, and the next
|
|
703
|
+
manager action. With `--ensure-dispatch`, launch also ensures a Dispatch watch
|
|
704
|
+
process using the supplied `--dispatcher-id` when provided, reusing only a
|
|
705
|
+
fresh heartbeat from that same dispatcher id. Use `--dry-run --json` to
|
|
706
|
+
inspect the launch command.
|
|
631
707
|
- `cycle <task> [--busy-wait-seconds N]` — One observation cycle. Idempotent. Runs `ingest`, computes
|
|
632
708
|
worker state from the JSON event stream, captures the tmux pane as a shadow
|
|
633
709
|
signal, writes a `manager_cycles` row, and returns a JSON dict the manager
|