taskchef 5.12.0 → 6.1.0
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/.codex-plugin/plugin.json +5 -2
- package/BACKLOG.md +6 -15
- package/README.md +30 -40
- package/SPEC.md +92 -369
- package/assets/e2e-benchmark-example.json +37 -33
- package/assets/taskchef-dark.svg +9 -0
- package/assets/taskchef.svg +9 -0
- package/docs/delegation-design.md +219 -170
- package/index.js +3 -11
- package/package.json +2 -2
- package/scripts/e2e-benchmark.js +101 -412
- package/skills/taskchef-bootstrap/SKILL.md +2 -3
- package/skills/taskchef-delegate/SKILL.md +60 -138
- package/skills/taskchef-report/SKILL.md +12 -8
- package/src/cli.js +2 -1
- package/src/delegation.js +24 -201
- package/src/mcp.js +10 -10
- package/src/workspace.js +128 -61
- package/hooks/hooks.json +0 -18
- package/hooks/taskchef-initial-prompt.js +0 -17
- package/src/hook.js +0 -96
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "taskchef",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Favo Yang",
|
|
@@ -33,6 +33,9 @@
|
|
|
33
33
|
"$taskchef-delegate Dispatch this request to the right project.",
|
|
34
34
|
"$taskchef-report Report on work in the TaskChef task history."
|
|
35
35
|
],
|
|
36
|
-
"brandColor": "#D97706"
|
|
36
|
+
"brandColor": "#D97706",
|
|
37
|
+
"composerIcon": "./assets/taskchef.svg",
|
|
38
|
+
"logo": "./assets/taskchef.svg",
|
|
39
|
+
"logoDark": "./assets/taskchef-dark.svg"
|
|
37
40
|
}
|
|
38
41
|
}
|
package/BACKLOG.md
CHANGED
|
@@ -40,18 +40,9 @@ clear data model before implementation.
|
|
|
40
40
|
- Consider multiple executor threads for one logical assignment if a real
|
|
41
41
|
workflow requires it.
|
|
42
42
|
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
`wait_for_thread(clientThreadId, timeoutMs) -> { status, threadId? }` or
|
|
50
|
-
`resolve_client_thread(clientThreadId) -> { status, threadId? }`. Returning a
|
|
51
|
-
reserved durable ID from `create_thread`, or emitting a materialization event
|
|
52
|
-
containing it, would also close the lifecycle gap.
|
|
53
|
-
- Replace bounded exact-marker discovery when Codex exposes one of these APIs.
|
|
54
|
-
The initial hook intentionally never links from `session_id`, because Codex
|
|
55
|
-
documents that subagent hooks use the parent session ID. Keep exact
|
|
56
|
-
correlation verification unless an official contract provides equivalent
|
|
57
|
-
guarantees.
|
|
43
|
+
## Transport-authenticated executor identity
|
|
44
|
+
|
|
45
|
+
- If custom MCP later receives authenticated calling-task metadata, compare it
|
|
46
|
+
with the executor's `link_task` assertion.
|
|
47
|
+
- Keep the current local cooperative trust model until such metadata exists;
|
|
48
|
+
do not reintroduce parent/session identity, hooks, task search, or polling.
|
package/README.md
CHANGED
|
@@ -32,8 +32,7 @@ Executors report a compact `completed`, `needs_input`, or `failed` result into
|
|
|
32
32
|
their existing task entry. When you ask for a report, TaskChef filters old
|
|
33
33
|
terminal work and checks cheap live metadata once for every selected task.
|
|
34
34
|
Active or approval-waiting metadata overrides the cache immediately; idle MCP
|
|
35
|
-
results are trusted by default, with detailed reads reserved for anomalies.
|
|
36
|
-
never infers completion from hook events.
|
|
35
|
+
results are trusted by default, with detailed reads reserved for anomalies.
|
|
37
36
|
|
|
38
37
|
See [Delegation design](docs/delegation-design.md) for the illustrated workflow,
|
|
39
38
|
writer boundaries, locking, trust model, freshness rules, and follow-up example.
|
|
@@ -52,11 +51,8 @@ codex plugin marketplace add favoyang/codex-plugins
|
|
|
52
51
|
codex plugin add taskchef@favoyang-plugins
|
|
53
52
|
```
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
so repeat this review after an update changes the hook. TaskChef uses this hook
|
|
58
|
-
to link the marked initial executor prompt and to provide read-only current-turn
|
|
59
|
-
identity on later prompts in that same executor. It never writes task outcomes.
|
|
54
|
+
TaskChef installs without lifecycle hooks, hook trust prompts, or reapproval.
|
|
55
|
+
Executors link their own durable Codex task IDs through the local MCP server.
|
|
60
56
|
|
|
61
57
|
### 2. Bootstrap the dispatcher workspace
|
|
62
58
|
|
|
@@ -137,15 +133,12 @@ timestamp, and writer. There is no transition-event log.
|
|
|
137
133
|
|
|
138
134
|
Every delegated instruction begins with a unique
|
|
139
135
|
`<!-- taskchef_id=<UUID> -->` marker followed by a blank line, an
|
|
140
|
-
executor-ownership paragraph, a
|
|
141
|
-
valid HTML comment stays invisible in
|
|
142
|
-
TaskChef records the marked delegation before executor
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
that verified link, but never treats its session ID as executor identity:
|
|
147
|
-
subagent hooks can carry the parent session ID. If no unique match appears,
|
|
148
|
-
TaskChef leaves the entry unresolved instead of risking a wrong link.
|
|
136
|
+
executor-ownership paragraph, a mandatory self-link paragraph, a result-callback
|
|
137
|
+
paragraph, and the assignment. The valid HTML comment stays invisible in
|
|
138
|
+
rendered Markdown. TaskChef records the marked delegation before executor
|
|
139
|
+
creation and returns immediately. The child calls `link_task` before substantive
|
|
140
|
+
work with its own durable native ID, never the parent/delegator or provisional
|
|
141
|
+
client ID. Failed or interrupted linking remains visibly pending and retryable.
|
|
149
142
|
|
|
150
143
|
### Ask for a live report
|
|
151
144
|
|
|
@@ -255,9 +248,8 @@ project metadata that TaskChef used when it delegated the work.
|
|
|
255
248
|
|
|
256
249
|
## Important boundaries
|
|
257
250
|
|
|
258
|
-
- TaskChef is an interactive dispatcher, not a scheduler, daemon, or
|
|
259
|
-
worker.
|
|
260
|
-
provides read-only current-turn context on follow-up prompts.
|
|
251
|
+
- TaskChef is an interactive dispatcher, not a scheduler, daemon, hook, or
|
|
252
|
+
background worker. Executors self-link and report their current turn.
|
|
261
253
|
- Executors are visible Codex tasks. The dispatcher does not supervise them or
|
|
262
254
|
wait for them to finish.
|
|
263
255
|
- TaskChef routes only to projects on the same local execution host.
|
|
@@ -346,10 +338,11 @@ validates a stable schema, derives durations and summary totals, and writes a
|
|
|
346
338
|
timestamped result under the supplied output directory (default:
|
|
347
339
|
`reports/e2e-benchmarks`). Use `validate <file>` to verify a saved result and
|
|
348
340
|
`clean [directory]` to remove only prior TaskChef end-to-end result JSON files.
|
|
349
|
-
Start from `assets/e2e-benchmark-example.json`; the
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
341
|
+
Start from `assets/e2e-benchmark-example.json`; the strict schema records the
|
|
342
|
+
record-before-create order, provisional client ID, executor self-link, rejected
|
|
343
|
+
parent identity, needs-input callback, fresh follow-up turn, final result, and
|
|
344
|
+
exact dashboard deep link. The writer stamps `taskchefVersion` from its own
|
|
345
|
+
package; saved files retain that version for historical validation.
|
|
353
346
|
|
|
354
347
|
### One-time upgrade from an older workspace
|
|
355
348
|
|
|
@@ -435,14 +428,13 @@ task lines remain readable without an eager rewrite of the JSONL history.
|
|
|
435
428
|
`project` value is the exact configured project path:
|
|
436
429
|
|
|
437
430
|
```sh
|
|
438
|
-
printf '%s\n' '{"id":"c0f010ff-84f2-4838-a69d-0ff1f5d721d7","project":"/workspace/payments","title":"Add retry logs","instruction":"<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->\n\nThis task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.\n\nBefore ending, call the TaskChef report_result MCP tool with completed, needs_input, or failed and a concise summary. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.\n\nAdd structured logs for failed retries and test them.","threadId":
|
|
431
|
+
printf '%s\n' '{"id":"c0f010ff-84f2-4838-a69d-0ff1f5d721d7","project":"/workspace/payments","title":"Add retry logs","instruction":"<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->\n\nThis task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.\n\nBefore any other work, read this executor's own durable Codex thread ID from the current task's CODEX_THREAD_ID environment value and call the TaskChef link_task MCP tool with that thread ID and the marked TaskChef task ID. Never use CODEX_SESSION_ID or the parent or delegator thread ID. If linking fails, CODEX_THREAD_ID is unavailable, or the tool is unavailable, report the failure visibly and retry on a later turn; do not guess an identity or continue substantive work while the task is link-pending.\n\nBefore ending, call the TaskChef report_result MCP tool with the marked task ID, this executor's self-linked thread ID, the current turn ID from an exact native read of that same thread, completed, needs_input, or failed, and a concise summary. Never reuse a prior turn ID after a follow-up. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.\n\nAdd structured logs for failed retries and test them.","threadId":null}' |
|
|
439
432
|
taskchef task record --json
|
|
440
433
|
```
|
|
441
434
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
from null to one unique thread ID:
|
|
435
|
+
For unresolved records created by TaskChef 5.x or older, direct manual recovery
|
|
436
|
+
may use the CLI operation below after verifying one exact structured marker
|
|
437
|
+
match. Schema 4 self-linking records reject this command:
|
|
446
438
|
|
|
447
439
|
```sh
|
|
448
440
|
taskchef task resolve c0f010ff-84f2-4838-a69d-0ff1f5d721d7 \
|
|
@@ -489,13 +481,15 @@ Updated: 2026-08-12T10:08:00.000Z
|
|
|
489
481
|
Updated by: mcp
|
|
490
482
|
Task ID: c0f010ff-84f2-4838-a69d-0ff1f5d721d7
|
|
491
483
|
Thread ID: 019f9d46-f42c-7482-9707-3c107bf241ee
|
|
492
|
-
Turn ID: 019f9d47-
|
|
484
|
+
Turn ID: 019f9d47-f42c-7482-9707-3c107bf241ef
|
|
493
485
|
Instruction:
|
|
494
486
|
<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->
|
|
495
487
|
|
|
496
488
|
This task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.
|
|
497
489
|
|
|
498
|
-
Before
|
|
490
|
+
Before any other work, read this executor's own durable Codex thread ID from the current task's CODEX_THREAD_ID environment value and call the TaskChef link_task MCP tool with that thread ID and the marked TaskChef task ID. Never use CODEX_SESSION_ID or the parent or delegator thread ID. If linking fails, CODEX_THREAD_ID is unavailable, or the tool is unavailable, report the failure visibly and retry on a later turn; do not guess an identity or continue substantive work while the task is link-pending.
|
|
491
|
+
|
|
492
|
+
Before ending, call the TaskChef report_result MCP tool with the marked task ID, this executor's self-linked thread ID, the current turn ID from an exact native read of that same thread, completed, needs_input, or failed, and a concise summary. Never reuse a prior turn ID after a follow-up. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.
|
|
499
493
|
|
|
500
494
|
Add structured logs for failed payment retries and test them.
|
|
501
495
|
```
|
|
@@ -514,16 +508,12 @@ workflow, writer boundaries, and freshness rules are in
|
|
|
514
508
|
|
|
515
509
|
## Development and release
|
|
516
510
|
|
|
517
|
-
This
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
`
|
|
522
|
-
|
|
523
|
-
callbacks instead. The old pure thread-inspection exports remain temporarily
|
|
524
|
-
available as deprecated compatibility helpers, but TaskChef no longer calls
|
|
525
|
-
them. Creation errors expose `taskChefTaskId` and `taskChefResultReporting` so
|
|
526
|
-
library callers can recover a record when the failure callback was unavailable.
|
|
511
|
+
This executor self-linking redesign removes post-creation discovery and hooks.
|
|
512
|
+
It requires a major release. Library callers migrating from TaskChef 5.x should
|
|
513
|
+
remove thread-list/read, checkpoint, timeout, and `resolveRecordedTask`
|
|
514
|
+
arguments. Provide `recordTask` before creation and optionally
|
|
515
|
+
`reportRecordedResult` for creation failure. Creation errors expose
|
|
516
|
+
`taskChefTaskId` and `taskChefResultReporting` for bounded recovery.
|
|
527
517
|
|
|
528
518
|
```sh
|
|
529
519
|
npm test
|