taskchef 6.1.2 → 7.0.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "6.1.2",
3
+ "version": "7.0.0",
4
4
  "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
package/BACKLOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TaskChef backlog
2
2
 
3
- `SPEC.md` is the current contract. These ideas need a concrete user case and a
3
+ [`docs/spec.md`](docs/spec.md) is the current contract. These ideas need a concrete user case and a
4
4
  clear data model before implementation.
5
5
 
6
6
  ## Task history views
package/README.md CHANGED
@@ -1,537 +1,179 @@
1
1
  # TaskChef
2
2
 
3
- Bring work for all your local Codex projects to one inbox. TaskChef reads each
4
- request, chooses the right project, and opens a normal Codex task there. It
5
- keeps a task history plus the executor's latest semantic result so you can find
6
- the work later. Codex task state remains authoritative for current activity.
7
-
8
- If a request contains independent work for different projects, TaskChef can
9
- open several tasks. It returns as soon as they are created, so you can send the
10
- next request or open any executor and work with it directly.
11
-
12
- ## The mental model
13
-
14
- - The **dispatcher workspace** is the per-user `~/.agents/taskchef` folder that
15
- stores project routes and task history. A Codex task opened in this folder is the
16
- **dispatcher**.
17
- - A **configured project** is a local repository or folder where TaskChef may
18
- send work.
19
- - An **executor** is the normal Codex task that handles delegated work inside a
20
- configured project.
21
- - A **task entry** records what TaskChef delegated, which project it chose, and
22
- the executor's Codex task ID.
3
+ TaskChef is a local dispatch desk for Codex. Give one dispatcher a request and
4
+ it records each independently useful outcome, creates a normal Codex task in
5
+ the right project, and returns immediately. The executor task is where live
6
+ work, approvals, and follow-ups happen; TaskChef keeps the latest compact
7
+ snapshot for navigation and reporting.
23
8
 
24
9
  ```text
25
- request in dispatcher
26
- |
27
- +-- task entry --> executor in project A
28
- +-- task entry --> executor in project B
10
+ request -> recorded TaskChef task -> Codex executor -> latest semantic result
29
11
  ```
30
12
 
31
- Executors report a compact `completed`, `needs_input`, or `failed` result into
32
- their existing task entry. When you ask for a report, TaskChef filters old
33
- terminal work and checks cheap live metadata once for every selected task.
34
- Active or approval-waiting metadata overrides the cache immediately; idle MCP
35
- results are trusted by default, with detailed reads reserved for anomalies.
13
+ ## Which document should I read?
36
14
 
37
- See [Delegation design](docs/delegation-design.md) for the illustrated workflow,
38
- writer boundaries, locking, trust model, freshness rules, and follow-up example.
15
+ | Goal | Document |
16
+ | --- | --- |
17
+ | Install, configure, dispatch, inspect, and recover | This README |
18
+ | Follow the normative agent contract and MCP interfaces | [Specification](docs/spec.md) |
19
+ | Understand implementation flows and trust boundaries | [Workflows](docs/workflows.md) |
20
+ | Compare TaskChef with FirstMate | [FirstMate comparison research](docs/firstmate-taskchef-comparison.md) |
21
+ | Review deferred ideas | [Backlog](BACKLOG.md) |
39
22
 
40
- ## Quickstart
23
+ ## Install
41
24
 
42
- ### 1. Install the plugin
43
-
44
- You need Node.js 18 or newer, Git, and local access to each target project.
45
-
46
- Add the [Favo Yang plugin marketplace](https://github.com/favoyang/codex-plugins)
47
- and install TaskChef:
25
+ TaskChef requires Node.js 18 or newer, Git, Codex desktop, and local access to
26
+ the projects that will receive work.
48
27
 
49
28
  ```sh
50
29
  codex plugin marketplace add favoyang/codex-plugins
51
30
  codex plugin add taskchef@favoyang-plugins
31
+ npm install --global taskchef
52
32
  ```
53
33
 
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.
34
+ The plugin provides three skills and a local MCP server. The npm installation
35
+ puts the `taskchef` CLI on `PATH`. TaskChef installs no hooks, schedules,
36
+ daemons, or background identity search.
56
37
 
57
- ### 2. Bootstrap the dispatcher workspace
38
+ ## Bootstrap and configure
58
39
 
59
- Invoke the bootstrap skill from any Codex project:
40
+ Ask the bootstrap skill to create the per-user dispatcher:
60
41
 
61
42
  ```text
62
43
  $taskchef-bootstrap Set up TaskChef.
63
44
  ```
64
45
 
65
- Bootstrap creates `~/.agents/taskchef`, opens it in the current Codex desktop
66
- app when it is not already a saved local project, and creates:
67
-
68
- ```text
69
- AGENTS.md
70
- taskchef.json
71
- tasks.jsonl
72
- ```
73
-
74
- TaskChef scans eligible local Codex projects during setup and adds them to the
75
- managed project list in `taskchef.json`.
76
-
77
- `taskchef.json` defines the available routes. A project name or GitHub issue or
78
- pull-request URL in your request is usually enough for TaskChef to choose the
79
- right project. Each project's `githubRepos` field is a list. A managed
80
- `*-workspace` project lists all child or sub-repositories there, so links into
81
- any of them route to the workspace. If a project needs more context, extend its
82
- optional `description` field with responsibilities and keywords that
83
- distinguish it from nearby projects.
84
-
85
- The generated `AGENTS.md` turns ordinary requests in the TaskChef project into
86
- delegated work. From any other project, explicitly invoke `$taskchef-delegate`;
87
- it uses the same configuration and task history.
88
-
89
- ### 3. Delegate the first task
90
-
91
- Suppose bootstrap found a project named `payments-api`. This prompt delegates
92
- one task to it:
46
+ The canonical workspace is `~/.agents/taskchef`. TaskChef owns only:
93
47
 
94
48
  ```text
95
- In payments-api, fix the duplicate charge shown after a payment retry, add a regression test, and report what changed.
49
+ AGENTS.md managed dispatcher instructions plus user additions
50
+ taskchef.json schema-2 configured projects and routing metadata
51
+ tasks.jsonl one schema-4 snapshot per task
96
52
  ```
97
53
 
98
- TaskChef replies with a link to the new Codex task. Open it to follow progress
99
- or give the executor more instructions. The dispatcher is ready for another
100
- request immediately.
101
-
102
- The plugin's focused MCP tools prepare and record delegations directly in the
103
- canonical workspace. They preserve TaskChef's lock and atomic-write guarantees
104
- without shell quoting, stdin handling, temporary record files, or a separate
105
- command-sandbox permission round trip.
106
-
107
- ## Everyday workflows
108
-
109
- ### Route work across projects
110
-
111
- Suppose `storefront` is another configured project and owns the customer web
112
- interface. These two changes do not depend on each other, so they can run in
113
- separate tasks:
54
+ List or change routing targets conversationally:
114
55
 
115
56
  ```text
116
- In payments-api, add structured logs for failed payment retries and test them. Separately, in storefront, fix the checkout form's keyboard focus order and run the browser tests.
57
+ $taskchef-bootstrap List my configured TaskChef projects.
58
+ $taskchef-bootstrap Add /workspace/payments as payments. It owns authorization, capture, refunds, and retries.
117
59
  ```
118
60
 
119
- TaskChef opens one executor in each project. If several changes need close
120
- coordination, keep them in one task instead of splitting them just because
121
- they touch frontend and backend code. Multiple active executors may also use
122
- the same project.
123
-
124
- ### Follow up on delegated work
125
-
126
- Open an executor and prompt it like any other Codex task. Its thread is the
127
- live source of truth for progress, questions, and results.
128
-
129
- The dispatcher workspace keeps `tasks.jsonl`, one line per submitted
130
- delegation. New tasks are appended. Later locked atomic updates may fill the
131
- nullable thread ID and replace the task's latest status, summary, turn ID,
132
- timestamp, and writer. There is no transition-event log.
61
+ Or use the CLI:
133
62
 
134
- Every delegated instruction begins with a unique
135
- `<!-- taskchef_id=<UUID> -->` marker followed by a blank line, an
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.
142
-
143
- ### Ask for a live report
144
-
145
- Ask the dispatcher when you want a current overview:
146
-
147
- ```text
148
- Report on the work TaskChef has dispatched.
63
+ ```sh
64
+ taskchef project add /workspace/payments --name payments \
65
+ --description "Authorization, capture, refunds, and retries."
66
+ taskchef project list
149
67
  ```
150
68
 
151
- This runs `$taskchef-report`. Overviews always consider working, needs-input,
152
- unresolved, legacy, and terminal tasks changed in the last seven days. Older
153
- terminal tasks are skipped unless requested or live metadata shows that they
154
- are active or awaiting approval. Cached MCP results are trusted for idle tasks
155
- in broad overviews. Active or approval-waiting tasks are reported directly from
156
- the one broad metadata snapshot. Focused reports read a selected idle task once
157
- when its metadata is newer than the callback; missing callbacks and other
158
- anomalies also receive at most one targeted read. Reporting writes nothing and
159
- never polls.
160
-
161
- ### Watch the local dashboard
162
-
163
- Run a local dashboard when you want the task history to remain visible while
164
- executors report results:
69
+ A project may advertise several GitHub repositories with repeated
70
+ `--github-repo`. TaskChef accepts Git roots and ordinary local folders on the
71
+ same execution host. Unsupported configuration schemas are rejected and are
72
+ never rewritten automatically.
165
73
 
166
- ```sh
167
- taskchef dashboard
168
- ```
74
+ ## Dispatch
169
75
 
170
- Open the printed local URL, which is `http://127.0.0.1:3210/` by default. The
171
- same server can be open in the Codex in-app browser and an external browser at
172
- the same time. Use `--port <number>` to choose another port and `--workspace
173
- <path>` to override the normal workspace resolution. Press Ctrl+C in the
174
- terminal to stop the server.
175
-
176
- The dashboard:
177
-
178
- - orders tasks by their latest semantic or identity update;
179
- - filters by project, status, and latest update window (24 hours, 7 days, or
180
- all time);
181
- - shows dismissible notifications when tasks are added or changed;
182
- - reveals the original instruction, latest semantic result, and task metadata;
183
- - opens the recorded task directly in Codex when it has a supported UUID thread
184
- ID, with a project-opening fallback for unresolved or legacy identities.
185
-
186
- The server binds only to the numeric IPv4 loopback interface and rejects
187
- non-loopback configuration. It intentionally does not authenticate browser
188
- sessions, so any local process or browser that can reach the port can read the
189
- dashboard data. Keep the server running only while needed and do not expose it
190
- through a proxy or tunnel. State-changing actions still require an exact Host
191
- and same-origin request. The server validates the same task schema as the CLI,
192
- retains its last valid snapshot if the log becomes invalid, and never writes
193
- dispatcher-workspace files. It limits event
194
- streams and disconnects slow clients instead of buffering snapshots without
195
- bound. It watches the workspace directory
196
- so TaskChef's atomic log replacement remains visible, uses a low-frequency file
197
- metadata check to recover from missed watcher events, and streams snapshots to
198
- the browser with automatic reconnect. To keep untrusted history from exhausting
199
- the server or browser, the dashboard rejects logs above 16 MiB, histories above
200
- 2,000 tasks, and unusually large display fields while retaining the last valid
201
- snapshot. The data CLI remains unaffected by these display limits.
202
-
203
- Date windows advance while the page is open, even when the task file is idle.
204
- They use persisted semantic/identity timestamps and identity changes observed by
205
- the current server. Legacy schema-v1 identity resolutions did not record an
206
- update timestamp, so after a dashboard restart those rare historical records
207
- fall back to their creation time.
208
-
209
- The dashboard uses Codex's registered `codex://threads/<thread-id>` desktop
210
- route for direct navigation. A task-level refresh would require native Codex
211
- metadata tools that are available to the report skill, not to a standalone
212
- browser page. TaskChef also does not submit replies from the dashboard: `codex
213
- resume <session> [prompt]` starts an interactive CLI session and may execute the
214
- prompt immediately, rather than opening a reviewed draft in the desktop app.
215
- Refresh and reply integrations remain deferred until Codex exposes supported
216
- browser-facing contracts for those actions.
217
-
218
- TaskChef task records do not contain model token usage, and the supported Codex
219
- task metadata surface does not expose it to this local server. The dashboard
220
- therefore does not estimate tokens or inspect private Codex session logs. Token
221
- usage can be added later if Codex exposes a supported per-task usage field or
222
- TaskChef executors begin reporting a structured usage value.
223
-
224
- ### Manage configured projects
225
-
226
- Use `$taskchef-bootstrap` to scan local Codex projects and refresh the managed
227
- list:
76
+ Open the TaskChef dispatcher project and ask for an outcome:
228
77
 
229
78
  ```text
230
- $taskchef-bootstrap Scan my local Codex projects and update TaskChef's managed project list.
79
+ In payments, fix duplicate charges after a retry, add a regression test, and report what changed.
231
80
  ```
232
81
 
233
- The same skill can diagnose the workspace and repair configuration errors that
234
- it can fix safely:
82
+ From another project, invoke the delegation skill explicitly:
235
83
 
236
84
  ```text
237
- $taskchef-bootstrap Diagnose this TaskChef workspace and fix any repairable configuration errors.
85
+ $taskchef-delegate In payments, add structured logs for failed retries and test them.
238
86
  ```
239
87
 
240
- Project paths must exist when you add or dispatch to them. Configure the
241
- repository root for a Git project. TaskChef also accepts non-Git folders. It
242
- detects Git status and the canonical GitHub `origin` when adding or importing
243
- a project. Repeat `--github-repo` to configure several repositories, or place a
244
- `githubRepos` array in an import. URLs are canonicalized and deduplicated.
88
+ TaskChef prepares a UUID and marker, persists the task before native creation,
89
+ creates the executor, and returns its task link. The executor reads its own
90
+ `CODEX_THREAD_ID` and self-links before substantive work. Independent
91
+ outcomes may become separate executors; dependent work should stay together.
245
92
 
246
- Removing a project does not rewrite old task entries. Each entry keeps the
247
- project metadata that TaskChef used when it delegated the work.
93
+ ## Work with and report executors
248
94
 
249
- ## Important boundaries
95
+ Open an executor as an ordinary Codex task. Each executor reports its latest
96
+ semantic outcome:
250
97
 
251
- - TaskChef is an interactive dispatcher, not a scheduler, daemon, hook, or
252
- background worker. Executors self-link and report their current turn.
253
- - Executors are visible Codex tasks. The dispatcher does not supervise them or
254
- wait for them to finish.
255
- - TaskChef routes only to projects on the same local execution host.
256
- - Each task line contains the latest reported semantic result, not a complete
257
- lifecycle or event history.
258
- - TaskChef does not store executor transcripts, hidden reasoning, or `hostId`.
259
- - A live report uses one metadata snapshot for all selected tasks and
260
- immediately overrides active or approval-waiting state. Broad overviews stay
261
- cache-first; focused reports read selected idle tasks once when metadata is
262
- newer than the callback. Reporting never persists inferred live state.
98
+ - `completed`: the requested outcome is complete.
99
+ - `needs_input`: a real user decision or missing fact blocks progress.
100
+ - `failed`: execution or executor creation failed.
263
101
 
264
- ## Updating
265
-
266
- Refresh the marketplace snapshot, then reinstall TaskChef:
267
-
268
- ```sh
269
- codex plugin marketplace upgrade favoyang-plugins
270
- codex plugin add taskchef@favoyang-plugins
271
- ```
102
+ A native approval prompt is live Codex state, not `needs_input`. TaskChef
103
+ stores a concise summary, never a transcript or hidden reasoning.
272
104
 
273
- ## CLI reference
105
+ Ask for a current report:
274
106
 
275
- The plugin has three skills:
276
-
277
- - `$taskchef-bootstrap` initializes, diagnoses, and configures a workspace
278
- - `$taskchef-delegate` routes requests and creates executor tasks
279
- - `$taskchef-report` reads the task history and reports live executor state once
280
-
281
- Normal delegation uses the plugin's bundled MCP tools. The bootstrap and report
282
- skills continue to call the CLI for deterministic workspace administration,
283
- task-history reads, and later recovery. The same CLI is also available for
284
- direct inspection, benchmarking, and manual operations over the shared
285
- workspace logic. Run it once with `npx` if you do not want a global installation:
286
-
287
- ```sh
288
- npx taskchef help
107
+ ```text
108
+ Report on the work TaskChef has dispatched.
289
109
  ```
290
110
 
291
- For the shorter command used below, install it globally:
111
+ The reporting skill combines cached semantic results with one bounded live
112
+ metadata snapshot. It does not poll or write inferred status. File-backed
113
+ inspection is also available:
292
114
 
293
115
  ```sh
294
- npm install --global taskchef
295
- ```
296
-
297
- The npm package provides the data CLI. The Codex plugin provides the skills and
298
- focused MCP tools used during delegation; native Codex tools still create and
299
- inspect executor tasks. From a source checkout, use `node bin/taskchef.js`.
300
-
301
- ```text
302
- taskchef help
303
- taskchef doctor
304
- taskchef workspace path
305
- taskchef workspace init
306
- taskchef project add <path>
307
- taskchef project import [<file> | -]
308
- taskchef project list
309
- taskchef project remove <name>
310
- taskchef dispatch prepare
311
- taskchef task record
312
- taskchef task resolve <task-id> --thread-id <thread-id>
313
- taskchef task show <task-id-or-8-character-prefix>
314
116
  taskchef task list
117
+ taskchef task list --project payments
118
+ taskchef task show c0f010ff
315
119
  taskchef task summary
316
120
  ```
317
121
 
318
- Workspace resolution is deterministic: `--workspace <path>`, then the
319
- `TASKCHEF_WORKSPACE` environment variable, then `~/.agents/taskchef`. The
320
- environment override must be absolute (or start with `~/`) so plugin processes
321
- with different working directories resolve the same workspace. The current
322
- directory is never an implicit workspace. Data commands use concise
323
- human-readable output by default and accept `--json` for machine-readable
324
- output. Run `taskchef help` for every option.
325
-
326
- `taskchef dispatch prepare --json` is the CLI equivalent of the MCP
327
- `prepare_dispatch` operation: it resolves the canonical workspace, loads and
328
- validates configured projects, and returns a generated task UUID, preparation
329
- timestamp, and exact correlation marker. Normal delegation calls the MCP tool;
330
- the CLI command remains useful for diagnostics and benchmarks. `task record`
331
- accepts one JSON value only from closed, non-interactive standard input and is
332
- intended for manual recovery or direct CLI use, not the skill's normal
333
- recording path.
334
-
335
- For repeatable live delegation measurements, run
336
- `npm run benchmark:e2e -- write`. It reads one non-interactive JSON value,
337
- validates a stable schema, derives durations and summary totals, and writes a
338
- timestamped result under the supplied output directory (default:
339
- `reports/e2e-benchmarks`). Use `validate <file>` to verify a saved result and
340
- `clean [directory]` to remove only prior TaskChef end-to-end result JSON files.
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.
346
-
347
- ### One-time upgrade from an older workspace
348
-
349
- TaskChef 5 does not include a general migration command. For a one-time upgrade,
350
- stop delegating and validate the old workspace. Then perform this one-time copy
351
- only when the destination does not already exist:
352
-
353
- ```sh
354
- set -eu
355
- old_workspace=/path/to/old-taskchef-workspace
356
- new_workspace="$HOME/.agents/taskchef"
357
- backup_workspace="$old_workspace.pre-taskchef-5-backup"
358
- if [ -e "$new_workspace" ]; then
359
- printf '%s\n' "Refusing to overwrite existing destination: $new_workspace" >&2
360
- exit 1
361
- fi
362
- if [ -e "$backup_workspace" ]; then
363
- printf '%s\n' "Refusing to overwrite existing backup: $backup_workspace" >&2
364
- exit 1
365
- fi
366
- taskchef doctor --workspace "$old_workspace"
367
- cp -pR "$old_workspace" "$backup_workspace"
368
- install -d -m 700 "$new_workspace"
369
- install -m 600 "$old_workspace/AGENTS.md" "$new_workspace/AGENTS.md"
370
- install -m 600 "$old_workspace/taskchef.json" "$new_workspace/taskchef.json"
371
- install -m 600 "$old_workspace/tasks.jsonl" "$new_workspace/tasks.jsonl"
372
- taskchef workspace init --workspace "$new_workspace" --register-codex
373
- taskchef doctor --workspace "$new_workspace"
374
- ```
375
-
376
- Keep the backup and old saved Codex project until `project list`, `task list`,
377
- and `doctor` confirm the expected project and task counts. Do not merge several
378
- histories by hand; conflicting task or thread IDs require case-by-case review.
122
+ Add `--json` for structured output. `task show` accepts a full task UUID or
123
+ an unambiguous eight-character prefix.
379
124
 
380
- ### Project administration
125
+ ## Dashboard
381
126
 
382
127
  ```sh
383
- taskchef workspace init
384
- taskchef doctor
385
-
386
- taskchef project add /workspace/payments \
387
- --name payments \
388
- --description "Owns payment authorization, capture, and refunds." \
389
- --github-repo https://github.com/example/payments-api \
390
- --github-repo https://github.com/example/payments-sdk
391
-
392
- taskchef project list
393
- taskchef project remove payments
128
+ taskchef dashboard
394
129
  ```
395
130
 
396
- Human-readable project listings group configured GitHub repositories by
397
- project. The first row shows the project details; additional repository rows
398
- leave the repeated name, kind, and path columns blank. A project without a
399
- configured repository has one row containing `-` in the repository column:
131
+ The loopback dashboard watches `tasks.jsonl`, groups current states, and opens
132
+ linked Codex tasks. It does not mutate TaskChef data and prints its local URL.
400
133
 
401
- ```text
402
- NAME KIND GITHUB REPOSITORY PATH
403
- notes folder - /workspace/notes
404
- payments git https://github.com/example/payments-api /workspace/payments
405
- https://github.com/example/payments-sdk
406
- ```
134
+ ## Common recovery
407
135
 
408
- Import projects as a JSON array from a file or standard input:
136
+ Check the managed workspace:
409
137
 
410
138
  ```sh
411
- taskchef project import projects.json
412
- taskchef project import - < projects.json
139
+ taskchef doctor
140
+ taskchef workspace init
141
+ taskchef doctor
413
142
  ```
414
143
 
415
- Import merges by canonical path, preserves an existing name or description
416
- when the imported object omits it, and unions repository lists without
417
- duplicates. `--replace` replaces the configured project set.
418
-
419
- The current configuration schema is version 2. Version 1 remains readable:
420
- legacy `githubRepo: null` normalizes to `githubRepos: []`, and a legacy string
421
- normalizes to a one-item `githubRepos` list. `workspace init` persists this
422
- migration atomically; other configuration writes also emit version 2. Legacy
423
- task lines remain readable without an eager rewrite of the JSONL history.
144
+ `doctor` is read-only. `workspace init` creates missing current-schema files
145
+ and refreshes managed instructions; it does not migrate unsupported
146
+ configuration or task records.
424
147
 
425
- ### Task history
148
+ If a new record has no thread ID, the executor is link-pending. Reopen that
149
+ executor so its first action can retry `link_task`. Do not guess an identity
150
+ or edit `tasks.jsonl`. If native task creation failed, the record is retained
151
+ as `failed` with null thread and turn IDs.
426
152
 
427
- `task record` reads one submitted delegation from standard input. The
428
- `project` value is the exact configured project path:
429
-
430
- ```sh
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}' |
432
- taskchef task record --json
433
- ```
153
+ If an unsupported workspace must be retained, keep it as a backup and create a
154
+ new current workspace. TaskChef provides no conversion or merge command.
434
155
 
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:
156
+ ## Boundaries
438
157
 
439
- ```sh
440
- taskchef task resolve c0f010ff-84f2-4838-a69d-0ff1f5d721d7 \
441
- --thread-id 019f9d46-f42c-7482-9707-3c107bf241ee
442
- ```
158
+ TaskChef dispatches; it is not a scheduler, supervisor, worker runtime, or
159
+ merge coordinator. Executor identity is a cooperative assertion inside a local
160
+ single-user trust boundary. The [specification](docs/spec.md) defines the
161
+ required contract; [workflows](docs/workflows.md) ties it to current code.
443
162
 
444
- Inspect the task history without querying Codex tasks:
163
+ ## Update
445
164
 
446
165
  ```sh
447
- taskchef task show c0f010ff
448
- taskchef task show c0f010ff --json
449
- taskchef task list
450
- taskchef task list --project payments
451
- taskchef task list --ascending
452
- taskchef task list --full-id
453
- taskchef task summary
454
- ```
455
-
456
- Human-readable task listings include both the task ID and Codex thread ID.
457
- UUID-shaped IDs use their first eight-character section by default; pass
458
- `--full-id` to show both IDs in full. Null thread IDs appear as `-`, consistent
459
- with other empty table cells. Tasks are newest-first by default; pass
460
- `--ascending` to list them from oldest to newest. ID formatting does not alter
461
- the complete values in `--json` output, and the selected order applies to its
462
- `tasks` array.
463
-
464
- `task show` accepts either the full task ID or the exact eight-character task
465
- ID printed by the default human-readable list. A short ID must identify exactly
466
- one recorded task; use `task list --full-id` when a short ID is missing or
467
- ambiguous. Its default output labels the title, project, latest result fields,
468
- creation and update times, task/thread/turn IDs, and instruction. A null thread ID appears as
469
- `-`. Line breaks in labeled values are escaped as `\\r` and `\\n`, while
470
- multiline instructions retain their original line breaks and indentation. Pass
471
- `--json` to receive the unchanged complete task object.
472
-
473
- ```text
474
- Title: Add retry logs
475
- Project: payments
476
- Status: completed
477
- Summary: Added structured retry logs and regression coverage.
478
- Project path: /workspace/payments
479
- Created: 2026-08-12T10:00:00.000Z
480
- Updated: 2026-08-12T10:08:00.000Z
481
- Updated by: mcp
482
- Task ID: c0f010ff-84f2-4838-a69d-0ff1f5d721d7
483
- Thread ID: 019f9d46-f42c-7482-9707-3c107bf241ee
484
- Turn ID: 019f9d47-f42c-7482-9707-3c107bf241ef
485
- Instruction:
486
- <!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->
487
-
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.
489
-
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.
493
-
494
- Add structured logs for failed payment retries and test them.
495
- ```
496
-
497
- The list remains a compact table:
498
-
499
- ```text
500
- TITLE PROJECT STATUS UPDATED ID THREAD ID
501
- Add retry logs payments completed 2026-08-12T10:08:00.000Z c0f010ff 019f9d46
166
+ codex plugin marketplace upgrade favoyang-plugins
167
+ codex plugin add taskchef@favoyang-plugins
502
168
  ```
503
169
 
504
- The complete data contract is in [SPEC.md](SPEC.md). The illustrated runtime
505
- workflow, writer boundaries, and freshness rules are in
506
- [Delegation design](docs/delegation-design.md). Deferred ideas are in
507
- [BACKLOG.md](BACKLOG.md).
508
-
509
- ## Development and release
510
-
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.
170
+ ## Development
517
171
 
518
172
  ```sh
173
+ npm ci
519
174
  npm test
520
175
  npm pack --dry-run
521
- npx -y -p semantic-release@25 -p @semantic-release/exec -p @semantic-release/git semantic-release --dry-run
522
- ```
523
-
524
- The `Release` GitHub Actions workflow runs semantic-release on `main`.
525
- Semantic Commit Messages determine the release type:
526
-
527
- ```text
528
- fix: correct task log validation
529
- feat: add a new CLI command
530
- feat!: change the workspace data contract
531
176
  ```
532
177
 
533
- The workflow tests the package and validates the npm tarball before publishing
534
- through npm trusted publishing. It synchronizes version files, creates the
535
- GitHub release, and pins the TaskChef entry in `favoyang/codex-plugins` to the
536
- published npm version. Marketplace updates use the `MARKETPLACE_DEPLOY_KEY`
537
- Actions secret, a write-enabled deploy key scoped to the catalog repository.
178
+ Merges to `main` run semantic-release and update the shared plugin
179
+ marketplace. Removing unsupported schemas is a major-version change.