taskchef 8.5.0 → 8.5.2

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.
@@ -0,0 +1,506 @@
1
+ # TaskChef advanced guide
2
+
3
+ Detailed setup, operation, recovery, and development reference for TaskChef.
4
+
5
+ ## Install
6
+
7
+ TaskChef requires Node.js 18 or newer, Git, Codex desktop, and local access to
8
+ the projects that will receive work.
9
+
10
+ TaskChef pins [`ccusage`](https://github.com/ccusage/ccusage) as an optional
11
+ dependency for dashboard token and API-equivalent cost estimates. A normal npm
12
+ installation uses that package-local executable; plugin-only installations use
13
+ an npm-cache-friendly `npx` fallback to resolve the same exact version's native
14
+ executable. `npx` never launches the analyzer against Codex data. TaskChef then
15
+ requests ccusage's live-capable online pricing and falls back to its bundled
16
+ offline snapshot, while never parsing Codex rollout files itself. Lifecycle
17
+ reporting and the dashboard continue to work when ccusage, npm, or pricing is
18
+ unavailable.
19
+
20
+ ```sh
21
+ codex plugin marketplace add favoyang/codex-plugins
22
+ codex plugin add taskchef@favoyang-plugins
23
+ ```
24
+
25
+ The plugin provides five skills and a local MCP server. Its skills use the CLI
26
+ bundled with the plugin, so a global npm installation is not needed for the
27
+ dispatcher workflow. To run `taskchef` directly from a terminal, install the
28
+ CLI separately:
29
+
30
+ ```sh
31
+ npm install --global taskchef
32
+ ```
33
+
34
+ TaskChef installs no hooks, schedules, daemons, login items, system services,
35
+ or background identity search and needs no elevated permissions.
36
+
37
+ ## Bootstrap and index projects
38
+
39
+ For the first run, ask the bootstrap skill to create and verify the per-user
40
+ dispatcher and import saved local Codex projects:
41
+
42
+ ```text
43
+ $taskchef-bootstrap Set up TaskChef and index my local Codex projects.
44
+ ```
45
+
46
+ The canonical workspace is `~/.agents/taskchef`. TaskChef owns only:
47
+
48
+ ```text
49
+ AGENTS.md managed dispatcher instructions plus user additions
50
+ taskchef.json schema-2 Codex project index, dashboard preference, and delegation metadata
51
+ tasks.jsonl one task snapshot per line (schema 10; schema 4-9 migration supported)
52
+ .taskchef-usage.json optional mode-0600 ccusage snapshot and turn-boundary cache
53
+ ```
54
+
55
+ To inspect or manually adjust the project index later, use the bootstrap skill:
56
+
57
+ ```text
58
+ $taskchef-bootstrap List my indexed Codex projects.
59
+ $taskchef-bootstrap Index /workspace/payments as payments. It owns authorization, capture, refunds, and retries.
60
+ $taskchef-bootstrap Reindex after the Codex projects I added today.
61
+ ```
62
+
63
+ TaskChef indexes existing Codex projects for delegation. The index stores
64
+ canonical paths and routing metadata; it never indexes repository contents or
65
+ creates another kind of project. For a folder already saved as a local Codex
66
+ project, the bootstrap skill requires an exact canonical-path match before
67
+ writing and verifying its TaskChef index entry. For a new folder, or an existing
68
+ folder not yet saved by Codex, it creates the directory only when explicitly
69
+ requested, opens the canonical path with the validated Codex Desktop CLI's
70
+ `codex app <path>` mechanism, re-lists native projects, and requires the same
71
+ exact match before indexing it. An open request without a verified native
72
+ project is reported as partial setup, not delegation-ready.
73
+
74
+ Update one indexed project with taskchef project update; repeated
75
+ --github-repo values replace that entry's complete repository list while
76
+ leaving every other project untouched. project list --json returns stable
77
+ configuration and project-set hashes for postcondition checks.
78
+
79
+ Whole-index replacement, project removal, and restore are preview-bound. Run
80
+ them with --dry-run, inspect the exact diff, then apply with the returned
81
+ hashes, counts, plan hash, and exact removed-name confirmation after the user
82
+ approves every removed project. TaskChef creates private snapshots under
83
+ backups/ before mutations and actual dashboard startup. Use taskchef backup
84
+ list, create, verify, restore, and prune; restore never runs automatically and
85
+ creates a pre-restore safety snapshot. If the live configuration is missing or
86
+ malformed, preview an explicit config or state restore, then bind the apply to
87
+ the preview's raw-state hash and plan with --confirm-unreadable-current.
88
+
89
+ The dispatcher also reconciles saved Codex projects automatically before each
90
+ delegation batch. You do not need a separate reindex step when adding a native
91
+ Codex project. Manual reindexing compares exact same-host canonical paths from
92
+ one native schema-2 project snapshot.
93
+ Reconciliation adds eligible paths and identity bindings atomically, isolates
94
+ per-project failures, and preserves existing curated names, descriptions, and
95
+ complete repository lists. It does not delete missing projects. Duplicate
96
+ native IDs, duplicate canonical targets, and identity/path moves remain
97
+ diagnostics rather than guesses.
98
+
99
+ Configuration schema 2 accepts an optional strict `projectIndex` containing
100
+ local native identity bindings, explicit exclusions, and bounded routing hints.
101
+ Removing a project records an exclusion so reconciliation cannot silently
102
+ re-add it; `include_project` clears an exact exclusion before a later reconcile.
103
+ Aliases come only from explicit selection or correction. Repository ownership
104
+ requires an inspected exact origin, and report-derived responsibilities retain
105
+ their accepted task/thread/turn provenance. Forgetting keeps bounded suppression
106
+ so an old report retry cannot recreate a removed hint. Older TaskChef releases
107
+ reject this optional field; use a compatible backup before downgrading.
108
+
109
+ Codex CLI resolution follows the same contract as
110
+ `workspace init --register-codex`: an explicit `--codex-cli` path wins, then
111
+ `TASKCHEF_CODEX_CLI`; either must be executable and support `app --help`.
112
+ Without an override, TaskChef prefers a validated `codex` PATH candidate under
113
+ `Contents/Resources`; otherwise it validates only the first executable `codex`
114
+ in PATH order. It does not assume an arbitrary shell command or hard-code an
115
+ application bundle location.
116
+
117
+ Or use the CLI:
118
+
119
+ ```sh
120
+ taskchef project add /workspace/payments --name payments \
121
+ --description "Authorization, capture, refunds, and retries."
122
+ taskchef project list
123
+ ```
124
+
125
+ The CLI command writes TaskChef metadata only; it does not query Codex. Before
126
+ using it directly, verify that `/workspace/payments` exactly matches the
127
+ canonical path of an existing local Codex project. The bootstrap skill performs
128
+ that native-project check for you.
129
+
130
+ A project may advertise several GitHub repositories with repeated
131
+ `--github-repo`. Explicit values replace automatic origin detection and form
132
+ the complete advertised list, so include the origin when it should remain
133
+ routable. A managed `*-workspace` should advertise every relevant child or
134
+ subrepository canonical GitHub URL, plus the workspace repository itself when
135
+ applicable, so issue and pull-request links select the correct Codex project.
136
+ TaskChef accepts Git roots and ordinary local folders on the same execution
137
+ host. Unsupported configuration schemas are rejected and are never rewritten
138
+ automatically.
139
+
140
+ ## Dispatch
141
+
142
+ Open the TaskChef dispatcher project and ask for an outcome:
143
+
144
+ ```text
145
+ In payments, fix duplicate charges after a retry, add a regression test, and report what changed.
146
+ ```
147
+
148
+ From another project, invoke the delegation skill explicitly:
149
+
150
+ ```text
151
+ $taskchef-delegate In payments, add structured logs for failed retries and test them.
152
+ ```
153
+
154
+ The dispatcher lists native projects once per batch, reconciles that snapshot,
155
+ then prepares a UUID and marker for each outcome, persists the task before native creation,
156
+ creates the executor, and returns its task link. New executor instructions keep
157
+ the assignment visible from the first line, add a concise local reporting
158
+ authorization paragraph, leave one blank line, then place
159
+ an explicit `$taskchef-executor` invocation immediately before the final
160
+ correlation marker. That skill reads the executor's own `CODEX_THREAD_ID`, self-links, and
161
+ reports lifecycle state. Independent outcomes may become separate executors;
162
+ dependent work should stay together.
163
+
164
+ Activating the TaskChef MCP process best-effort ensures the dashboard by
165
+ default. The managed workspace instructions also retry it at the start of each
166
+ dispatcher turn. A startup failure never blocks MCP tools, an answer, report,
167
+ or delegation. Every dispatcher response ends with
168
+ the stable [TaskChef Dashboard](http://127.0.0.1:3210/) link; a created-task
169
+ directive remains on the preceding line so dispatch still returns immediately.
170
+
171
+ For example, TaskChef generates this shape:
172
+
173
+ ```text
174
+ Fix duplicate charges after a retry and add a regression test.
175
+
176
+ Report this task and its follow-ups to my local TaskChef dashboard. Relevant private-repository links and concise work, test, and deployment results are authorized; exclude secrets.
177
+
178
+ Use $taskchef-executor to execute and report this delegated TaskChef assignment.
179
+ <!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->
180
+ ```
181
+
182
+ ### Model roles
183
+
184
+ TaskChef can apply personal Orchestrator, Planner, Implementer, and Reviewer
185
+ model preferences from `~/.codex/agents/`. Every delegated task uses the
186
+ Orchestrator preference for its visible parent. For repository work, a combined
187
+ investigate-or-plan-and-implement request runs fresh Planner, Implementer, and
188
+ Reviewer subagents in that order. A direct implementation, or a later request
189
+ to implement prior investigation, skips the Planner and runs a fresh Implementer
190
+ and Reviewer in the same visible task. Explicit model choices take precedence
191
+ for the role they target.
192
+
193
+ ## Work with and report executors
194
+
195
+ Open an executor as an ordinary Codex task. Each executor reports `working`
196
+ when a turn starts and one semantic outcome before that same turn ends:
197
+
198
+ - `completed`: the requested outcome is complete;
199
+ - `needs_input`: a real user decision or missing fact blocks progress;
200
+ - `failed`: the executor or creation attempt ended unsuccessfully.
201
+
202
+ A native approval prompt is live Codex state, not `needs_input`.
203
+ When work starts, the executor reports a concise request summary. TaskChef
204
+ appends a `turns` entry that pairs that request with a null result while working,
205
+ then fills the same entry with the semantic outcome. A follow-up therefore shows
206
+ its own request with “In progress,” never the preceding turn's result. Returned
207
+ tasks still derive `results` and `lastResult` as compatibility projections.
208
+ Every entry has a required `turnRef`, which is the lifecycle identity. When
209
+ Codex exposes a native turn ID, both `turnRef` and `turnId` contain that value.
210
+ Otherwise the executor retains a fresh UUID in `turnRef` and stores
211
+ `turnId: null`; native turn lookup is never a prerequisite for work or reporting.
212
+ If Codex crashes, an MCP call is lost, or the app restarts before that terminal
213
+ report, the next newer `working` report atomically marks the unfinished turn
214
+ `interrupted` and appends the new active turn. `interrupted` is TaskChef-authored
215
+ timeline evidence, not semantic `failed`, and it never enters `results` or
216
+ `lastResult`. TaskChef stores only a fixed interruption summary; it does not
217
+ store transcripts, hidden reasoning, crash output, or other non-semantic events.
218
+
219
+ Delegated tasks created by earlier TaskChef versions remain compatible: their
220
+ inline executor protocol still parses, self-links, and may use the deprecated
221
+ `report_result` alias. The v7 inline-paragraph named exports remain as deprecated
222
+ historical snapshots, but new delegations use the executor skill and `report_state`.
223
+
224
+ ## View tasks and ask copilot
225
+
226
+ The dashboard is the primary monitoring and browsing UI. Ask copilot when you
227
+ want a concise explanation or recommendation:
228
+
229
+ ```text
230
+ $taskchef-copilot Summarize recent delegated work and tell me what needs attention.
231
+ ```
232
+
233
+ Copilot starts from TaskChef's normalized cached brief. It uses live Codex
234
+ metadata only when you explicitly request fresh/live verification or a focused
235
+ task presents a meaningful contradiction, and it never polls. It can identify
236
+ the exact executor, explain or draft a same-assignment follow-up, and—with your
237
+ explicit authorization—continue that existing task. It never automatically
238
+ retries failures, interrupts working tasks, or redelegates an executor. New
239
+ independent work still belongs to `$taskchef-delegate`. In the dispatcher, an
240
+ explicit instruction to answer, resume, or continue a named existing task
241
+ routes to copilot; it re-reads that exact task before sending.
242
+
243
+ The former `$taskchef-report` skill is not packaged as an alias because a
244
+ second discoverable skill would preserve ambiguous behavior. Explicit
245
+ historical invocations are understood as requests for `$taskchef-copilot` and
246
+ receive a brief rename notice.
247
+
248
+ File-backed inspection is also available:
249
+
250
+ ```sh
251
+ taskchef task brief
252
+ taskchef task brief c0f010ff
253
+ taskchef task brief --project payments
254
+ taskchef task list
255
+ taskchef task list --project payments
256
+ taskchef task show c0f010ff
257
+ taskchef task summary
258
+ ```
259
+
260
+ Add `--json` for structured output. `task brief` returns the stable schema-1
261
+ cached coordination model and omits terminal tasks older than seven days from
262
+ overviews unless `--all` is supplied. Focused task and project briefs retain
263
+ their full selected scope. Task IDs accept a full UUID or an unambiguous
264
+ eight-character prefix.
265
+
266
+ ## Dashboard
267
+
268
+ The dashboard normally starts when the TaskChef MCP activates, and the
269
+ dispatcher retries startup at the beginning of each turn. Its final response
270
+ includes the dashboard link even if startup fails. If the dashboard is
271
+ unavailable, use the packaged recovery skill to start or open it:
272
+
273
+ ```text
274
+ $taskchef-dashboard Ensure and open the TaskChef dashboard.
275
+ ```
276
+
277
+ MCP activation and `$taskchef-dashboard` call the input-free `ensure_dashboard`
278
+ MCP tool. It starts at most one loopback dashboard scoped to the running Codex
279
+ session on `127.0.0.1:3210`, or reuses a listener only when its bounded
280
+ `/api/health` identity reports the exact TaskChef/dashboard-server version,
281
+ canonical workspace, and recognized launcher. The response says `started` or
282
+ `reused` and includes the stable URL, canonical workspace, versions, and actual
283
+ launcher.
284
+
285
+ The dashboard is launched by MCP but is not hosted by one MCP transport. It
286
+ therefore survives an individual MCP close, stdin EOF, signal, or plugin reload.
287
+ Only a listener launched as `session` registers each same-version MCP's original
288
+ Codex parent PID in its in-memory lease. After every registered Codex session
289
+ PID disappears for a grace period, the dashboard closes and exits. Activating
290
+ an installed newer TaskChef MCP recognizes and
291
+ gracefully stops an older TaskChef dashboard for the same canonical workspace,
292
+ waits boundedly for the port, then starts the installed version in that ensure.
293
+ Lease state is not transferred across versions; the replacement initially knows
294
+ only the activating session. These are best-effort
295
+ local guards, not a claim that Codex supplies a restart guarantee. TaskChef adds
296
+ no daemon or OS-persistent component. See the complete
297
+ [dashboard lifecycle](dashboard-lifecycle.md).
298
+
299
+ TaskChef uses a trusted, single-user localhost model. Exact structured health is
300
+ sufficient service recognition; it is not cryptographic authentication. Simple
301
+ session and shutdown controls require exact Host and Origin, JSON content, a
302
+ non-simple request header, and an exact bounded body to block ordinary
303
+ cross-site browser requests. Each control names the exact health identity the
304
+ caller observed; the listener refuses a stale identity and the caller probes the
305
+ port again before deciding what to do. Unknown, malformed, different-workspace,
306
+ unrelated, and newer listeners remain untouched. A release using the former HMAC control
307
+ protocol refuses the new simple shutdown request, so the first upgrade across
308
+ that boundary may require stopping that verified legacy TaskChef listener once
309
+ before ensuring again.
310
+
311
+ Autostart is enabled when `dashboard` is absent and in new workspaces. To opt
312
+ out, add this optional exact object to `taskchef.json` while retaining its other
313
+ fields:
314
+
315
+ ```json
316
+ "dashboard": { "autostart": false }
317
+ ```
318
+
319
+ The manual `$taskchef-dashboard` recovery skill remains available when
320
+ autostart is disabled or fails. It reports whether the compatible dashboard was
321
+ started or reused and always returns its canonical clickable URL. It may open
322
+ the returned localhost URL in an available in-app browser, but browser failure
323
+ does not make dashboard recovery fail.
324
+
325
+ For manual development, run the foreground CLI:
326
+
327
+ ```sh
328
+ taskchef dashboard
329
+ taskchef dashboard --port 3211
330
+ ```
331
+
332
+ The loopback dashboard watches `tasks.jsonl`, groups current states, and opens
333
+ linked Codex tasks. List snapshots and SSE events carry only the latest
334
+ request/result pair; opening task details fetches the full newest-first activity
335
+ timeline, including clearly labeled interrupted turns.
336
+ Task details offer infrequent administrative actions without cluttering task
337
+ cards. Selecting **More task actions** (`…`) reveals the action list immediately
338
+ beside the disclosure and changes it to a back/hide control. The list contains
339
+ **Copy Task ID** and direct **Mark completed** and **Mark failed** actions.
340
+ Working and needs-input tasks offer either terminal outcome; completed tasks
341
+ offer **Mark failed**, and failed tasks offer **Mark completed**. The menu
342
+ disclosure is the deliberate first step; choosing an outcome submits it
343
+ immediately without a second confirmation. There is no
344
+ free-form reason: the audit turn records a fixed summary, timestamp, dashboard
345
+ provenance, optimistic preconditions, and a unique action ID while preserving
346
+ every executor turn. Same-state terminal rewrites remain invalid. Stale or
347
+ concurrent changes are rejected and the dialog refreshes to the current task. A stalled
348
+ local request is aborted after a bounded wait so the dialog cannot remain
349
+ permanently locked; retry keeps the same idempotency identity.
350
+
351
+ The archive implementation is retained behind a disabled capability gate, and
352
+ the **Archive chat** control is hidden. The bundled `codex archive` command can
353
+ reject a valid idle desktop-app thread even when the dashboard runs in the MCP
354
+ host environment, while Codex's native app archive operation succeeds. TaskChef
355
+ will keep the feature disabled until Codex exposes a reliable supported
356
+ app-callable archive interface or guarantees CLI compatibility. The dormant
357
+ server path also rejects requests before discovering or invoking the CLI.
358
+
359
+ Task details also show whole-task and per-turn token usage when `ccusage` can
360
+ map the linked Codex thread. A completed turn briefly shows “Calculating token
361
+ usage…” while TaskChef performs bounded deferred reconciliation, because
362
+ the terminal lifecycle callback precedes Codex's final output write. The
363
+ dashboard also preloads missing, interrupted, and retry-eligible usage in a
364
+ bounded background queue at startup, after task changes, and on a periodic
365
+ recovery pass; opening task details is not required to start collection. Historical
366
+ tasks may show a trustworthy task total while older turns remain “Token usage
367
+ unavailable” when no cumulative turn boundaries were recorded. Input, cached
368
+ input, output, reasoning, and total counts retain ccusage's categories. Dollar
369
+ figures are labeled API-equivalent estimates; provenance identifies the online
370
+ pricing request or offline fallback mode, and zero-priced unknown models show
371
+ cost unavailable rather than a misleading `$0.00`. Per-turn cost is also
372
+ unavailable when its cumulative boundaries used different ccusage versions or
373
+ pricing modes. TaskChef displays the cumulative estimate supplied by ccusage
374
+ without applying a separate model-family or cache-write coverage policy.
375
+ The same detail view reports lifecycle wall-clock elapsed time independently of
376
+ ccusage. Each terminal turn shows **Elapsed** from `startedAt` to
377
+ `result.updatedAt`; **Total reported work** sums only valid terminal-turn
378
+ durations, excluding idle gaps and unfinished work. A working turn shows live
379
+ **Elapsed so far** without contributing to the total. This is reported
380
+ wall-clock elapsed time, not model compute time, and malformed or reversed
381
+ timestamp ranges are shown as unavailable.
382
+ The header shows the running TaskChef package version reported by the same
383
+ bounded health identity used for compatible-listener checks.
384
+ The Settings page shows the ccusage version reported by the executable that
385
+ TaskChef resolves at runtime.
386
+ The canonical port is normally owned by a dashboard session process initialized
387
+ by the TaskChef MCP before its tool transport connects. MCP recovery reuses an
388
+ exact-compatible same-workspace dashboard and reports its actual launcher;
389
+ a foreground `taskchef dashboard` process is intentionally standalone so its
390
+ child commands cannot silently inherit an agent-shell sandbox.
391
+ Task and result times are relative through 29 days (with minute detail for the
392
+ first six hours), then use a locale-aware calendar date. Each time is a keyboard-
393
+ accessible toggle for its full locale-aware date and time, and one shared
394
+ 30-second timer keeps relative labels current without reloading the page.
395
+ The Updates panel captures immutable event-time lifecycle notices. It identifies
396
+ them by task, turn when available, and lifecycle event rather than dashboard
397
+ revision, so reconnects and non-semantic rewrites do not replay a notice and a
398
+ later task state cannot rewrite an older notice. A notice remains readable if
399
+ its task disappears; selecting it then explains that current details are no
400
+ longer available.
401
+ Apart from an explicit manual state selection from the task-detail menu, it does not mutate
402
+ TaskChef data and prints its local URL. A foreground dashboard identifies
403
+ itself as `standalone`. An exact-current, healthy same-workspace listener with a
404
+ recognized `standalone`, `mcp`, or `session` launcher may be reused on the
405
+ canonical MCP port; ensure reports its actual launcher, and only `session`
406
+ listeners register Codex PID leases. If an unknown, malformed, or
407
+ different-workspace process owns port 3210, TaskChef reports a concise conflict
408
+ and never kills that process. A recognized older same-workspace TaskChef
409
+ listener receives a simple guarded graceful shutdown request. If it lacks the
410
+ compatible callback or refuses the request, it remains running and ensure
411
+ reports a conflict. The foreground CLI similarly asks you to stop a conflicting
412
+ listener or choose another `--port`.
413
+
414
+ The health endpoint contains only a fixed service marker, health schema,
415
+ TaskChef version, dashboard-server version, canonical workspace, and launcher.
416
+ It exposes no task data, credentials, environment variables, process control,
417
+ or secrets.
418
+
419
+ ![TaskChef dashboard identity and version](images/dashboard-identity.jpg)
420
+
421
+ ![Immutable event-time dashboard notifications](images/notification-event-snapshots.jpg)
422
+
423
+ ![Task detail activity timeline](images/result-history-dashboard.jpg)
424
+
425
+ ![Deferred ccusage token consumption in task details](images/ccusage-token-consumption.png)
426
+
427
+ ![Interrupted turn followed by active recovery](images/interrupted-turn-recovery.jpg)
428
+
429
+ ## Common recovery
430
+
431
+ Check the managed workspace:
432
+
433
+ ```sh
434
+ taskchef doctor
435
+ taskchef workspace init
436
+ taskchef workspace migrate
437
+ taskchef doctor
438
+ ```
439
+
440
+ `doctor` is read-only. `workspace init` creates missing files and refreshes
441
+ managed instructions. `workspace migrate` explicitly upgrades supported schema
442
+ 4-9 task lines to schema 10 under the workspace lock. It validates task and turn
443
+ counts plus the complete source and converted log before writing, creates an
444
+ exclusive `tasks.jsonl.pre-v10-*.bak`
445
+ backup, atomically replaces the log, validates the result, and becomes an
446
+ idempotent no-op after migration. If replacement fails, the original remains
447
+ or the reported backup can be restored; unsupported or invalid input is rejected
448
+ before a backup or rewrite.
449
+
450
+ If a new record has no thread ID, the executor is link-pending. Reopen that
451
+ executor so its first action can retry `link_task`. Do not guess an identity
452
+ or edit `tasks.jsonl`. If native task creation failed, the record is retained
453
+ as `failed` with a retained fallback `turnRef` and null thread and Codex turn IDs.
454
+
455
+ Schemas other than 4, 5, 6, 7, 8, 9, and 10 remain unsupported. Retain such a workspace
456
+ unchanged and create a current workspace; the migration command deliberately
457
+ does not guess how to convert unknown formats.
458
+
459
+ ## Boundaries
460
+
461
+ TaskChef dispatches; it is not a scheduler, supervisor, worker runtime, or
462
+ merge coordinator. Executor identity is a cooperative assertion inside a local
463
+ single-user trust boundary. The [specification](spec.md) defines the
464
+ required contract; [workflows](workflows.md) ties it to current code.
465
+
466
+ ## Update
467
+
468
+ ```sh
469
+ codex plugin marketplace upgrade favoyang-plugins
470
+ codex plugin add taskchef@favoyang-plugins
471
+ ```
472
+
473
+ Replacing or installing plugin files cannot execute autostart by itself. After
474
+ installation, activate or reload the new TaskChef MCP process; installation
475
+ does not necessarily reload Codex. Then run `$taskchef-dashboard` (or call
476
+ `ensure_dashboard`) and verify the returned dashboard identity has all of:
477
+
478
+ - the expected released TaskChef version;
479
+ - the expected dashboard protocol `serverVersion`;
480
+ - the reported dashboard launcher (`session` for a newly started canonical dashboard);
481
+ - the canonical TaskChef workspace path;
482
+ - the canonical `http://127.0.0.1:3210/` URL.
483
+
484
+ The release-install sequence is therefore: install plugin, activate or reload
485
+ the new MCP process, ensure the dashboard, then verify TaskChef version,
486
+ protocol `serverVersion`, reported launcher, canonical workspace, and URL.
487
+ Exact-compatible same-workspace servers with a recognized launcher may be
488
+ reused; unknown listeners remain untouched.
489
+
490
+ If autostart reports a **verified older TaskChef** listener, the port occupant
491
+ passed the bounded TaskChef identity check but refused the simple graceful
492
+ shutdown request. Releases using the former HMAC control protocol form a
493
+ one-time compatibility boundary: stop that verified legacy TaskChef listener
494
+ through the application/session that launched it, then activate the installed
495
+ plugin and ensure again. Do not kill an arbitrary port owner.
496
+
497
+ ## Development
498
+
499
+ ```sh
500
+ npm ci
501
+ npm test
502
+ npm pack --dry-run
503
+ ```
504
+
505
+ Merges to `main` run semantic-release and update the shared plugin
506
+ marketplace. Removing unsupported schemas is a major-version change.
Binary file
Binary file
Binary file
Binary file
package/docs/spec.md CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  This is TaskChef's normative agent-facing contract. **MUST**, **MUST NOT**,
4
4
  **SHOULD**, and **MAY** are requirements in the RFC 2119 sense. The
5
- [README](../README.md) owns user setup and operation; [workflows](workflows.md)
6
- owns implementation walkthroughs; the [FirstMate comparison](firstmate-taskchef-comparison.md)
7
- is dated research, not contract.
5
+ [advanced guide](advanced-guide.md) owns detailed user setup and operation;
6
+ [workflows](workflows.md) owns implementation walkthroughs; the
7
+ [FirstMate comparison](firstmate-taskchef-comparison.md) is dated research,
8
+ not contract.
8
9
 
9
10
  ## Terminology
10
11
 
package/docs/workflows.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  This developer and advanced-agent guide explains how the current implementation
4
4
  moves data through TaskChef. The [specification](spec.md) is normative; the
5
- [README](../README.md) owns user operation. The
5
+ [advanced guide](advanced-guide.md) owns detailed user operation. The
6
6
  [FirstMate comparison](firstmate-taskchef-comparison.md) is non-normative
7
7
  research. The [dashboard lifecycle](dashboard-lifecycle.md) owns the focused
8
8
  start, upgrade, shutdown, and security rationale.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "8.5.0",
3
+ "version": "8.5.2",
4
4
  "description": "A non-blocking interactive dispatcher for visible Codex tasks.",
5
- "license": "MIT",
5
+ "license": "Apache-2.0",
6
6
  "author": "Favo Yang",
7
7
  "repository": {
8
8
  "type": "git",
@@ -23,6 +23,7 @@
23
23
  "assets",
24
24
  "BACKLOG.md",
25
25
  "bin",
26
+ "docs/advanced-guide.md",
26
27
  "docs/spec.md",
27
28
  "docs/workflows.md",
28
29
  "docs/dashboard-lifecycle.md",
@@ -36,6 +37,11 @@
36
37
  "docs/images/dashboard-token-pending.jpg",
37
38
  "docs/images/reported-work-duration-desktop.jpg",
38
39
  "docs/images/reported-work-duration-mobile.jpg",
40
+ "docs/images/readme-board.png",
41
+ "docs/images/readme-list.png",
42
+ "docs/images/readme-needs-input.png",
43
+ "docs/images/readme-completed.png",
44
+ "docs/images/readme-roles.png",
39
45
  "index.js",
40
46
  "mcp",
41
47
  "scripts/roles",