taskchef 8.5.1 → 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.
- package/.codex-plugin/plugin.json +2 -2
- package/LICENSE +202 -21
- package/README.md +111 -461
- package/assets/CODEX_ASSET_NOTICE.md +1 -1
- package/docs/advanced-guide.md +506 -0
- package/docs/images/readme-board.png +0 -0
- package/docs/images/readme-completed.png +0 -0
- package/docs/images/readme-list.png +0 -0
- package/docs/images/readme-needs-input.png +0 -0
- package/docs/images/readme-roles.png +0 -0
- package/docs/spec.md +4 -3
- package/docs/workflows.md +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -1,514 +1,164 @@
|
|
|
1
1
|
# TaskChef
|
|
2
2
|
|
|
3
|
-
|
|
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 pairs each turn's request with
|
|
7
|
-
its semantic result while projecting the latest pair for compact navigation.
|
|
3
|
+
**Less time managing tasks. More time moving them forward.**
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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 dashboard start, upgrade, and shutdown | [Dashboard lifecycle](docs/dashboard-lifecycle.md) |
|
|
20
|
-
| Build or change dashboard pages consistently | [Dashboard UI baseline](docs/dashboard-ui.md) |
|
|
21
|
-
| Understand implementation flows and trust boundaries | [Workflows](docs/workflows.md) |
|
|
22
|
-
| Compare TaskChef with FirstMate | [FirstMate comparison research](docs/firstmate-taskchef-comparison.md) |
|
|
23
|
-
| Review deferred ideas | [Backlog](BACKLOG.md) |
|
|
24
|
-
|
|
25
|
-
## Install
|
|
26
|
-
|
|
27
|
-
TaskChef requires Node.js 18 or newer, Git, Codex desktop, and local access to
|
|
28
|
-
the projects that will receive work.
|
|
29
|
-
|
|
30
|
-
TaskChef pins [`ccusage`](https://github.com/ccusage/ccusage) as an optional
|
|
31
|
-
dependency for dashboard token and API-equivalent cost estimates. A normal npm
|
|
32
|
-
installation uses that package-local executable; plugin-only installations use
|
|
33
|
-
an npm-cache-friendly `npx` fallback to resolve the same exact version's native
|
|
34
|
-
executable. `npx` never launches the analyzer against Codex data. TaskChef then
|
|
35
|
-
requests ccusage's live-capable online pricing and falls back to its bundled
|
|
36
|
-
offline snapshot, while never parsing Codex rollout files itself. Lifecycle
|
|
37
|
-
reporting and the dashboard continue to work when ccusage, npm, or pricing is
|
|
38
|
-
unavailable.
|
|
5
|
+
When work spans several Codex projects, you have to choose the right project,
|
|
6
|
+
find each conversation again, and check which tasks are waiting for you.
|
|
7
|
+
TaskChef gives you one dispatcher conversation as a central place to talk to
|
|
8
|
+
agents and delegate work across projects, plus a dashboard for seeing what
|
|
9
|
+
needs your attention.
|
|
39
10
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
11
|
+
Give TaskChef a GitHub issue or a rough idea. It uses an explicit project name,
|
|
12
|
+
the conversation's context, or saved repository mappings to choose a Codex
|
|
13
|
+
project; if the destination is unclear, it asks you to choose. TaskChef creates
|
|
14
|
+
separate, ordinary Codex tasks in those projects. Each has its own conversation
|
|
15
|
+
and native tools, and tasks can run in parallel.
|
|
45
16
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
no elevated permissions.
|
|
17
|
+
You can keep using Codex as you do today. Start by delegating work where the
|
|
18
|
+
project choice or follow-up is cumbersome, then bring more work into TaskChef
|
|
19
|
+
as you go.
|
|
50
20
|
|
|
51
|
-
##
|
|
21
|
+
## What working with TaskChef looks like
|
|
52
22
|
|
|
53
|
-
|
|
23
|
+
Suppose you have indexed two Codex projects, **payments** and **recipe-book**,
|
|
24
|
+
and saved a GitHub repository mapping for payments. In your TaskChef dispatcher
|
|
25
|
+
conversation, paste a payments issue link and ask:
|
|
54
26
|
|
|
55
27
|
```text
|
|
56
|
-
|
|
28
|
+
Investigate this issue, fix the cause, and run the relevant tests: https://github.com/example/payments/issues/42
|
|
57
29
|
```
|
|
58
30
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
taskchef.json schema-2 Codex project index, dashboard preference, and delegation metadata
|
|
64
|
-
tasks.jsonl one task snapshot per line (schema 10; schema 4-9 migration supported)
|
|
65
|
-
.taskchef-usage.json optional mode-0600 ccusage snapshot and turn-boundary cache
|
|
66
|
-
```
|
|
31
|
+
TaskChef uses the issue URL's repository to identify the mapped payments
|
|
32
|
+
project. It then opens a separate Codex task there and returns its link. The
|
|
33
|
+
task investigates the issue in its own conversation while other delegated
|
|
34
|
+
tasks can work in recipe-book or other projects.
|
|
67
35
|
|
|
68
|
-
|
|
36
|
+
In the same dispatcher conversation, start another task from a rough idea:
|
|
69
37
|
|
|
70
38
|
```text
|
|
71
|
-
|
|
72
|
-
$taskchef-bootstrap Index /workspace/payments as payments. It owns authorization, capture, refunds, and retries.
|
|
73
|
-
$taskchef-bootstrap Reindex after the Codex projects I added today.
|
|
39
|
+
In recipe-book, explore an idea for weekly meal planning. Discuss the approach with me before coding.
|
|
74
40
|
```
|
|
75
41
|
|
|
76
|
-
TaskChef
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
folder not yet saved by Codex, it creates the directory only when explicitly
|
|
82
|
-
requested, opens the canonical path with the validated Codex Desktop CLI's
|
|
83
|
-
`codex app <path>` mechanism, re-lists native projects, and requires the same
|
|
84
|
-
exact match before indexing it. An open request without a verified native
|
|
85
|
-
project is reported as partial setup, not delegation-ready.
|
|
86
|
-
|
|
87
|
-
Update one indexed project with taskchef project update; repeated
|
|
88
|
-
--github-repo values replace that entry's complete repository list while
|
|
89
|
-
leaving every other project untouched. project list --json returns stable
|
|
90
|
-
configuration and project-set hashes for postcondition checks.
|
|
91
|
-
|
|
92
|
-
Whole-index replacement, project removal, and restore are preview-bound. Run
|
|
93
|
-
them with --dry-run, inspect the exact diff, then apply with the returned
|
|
94
|
-
hashes, counts, plan hash, and exact removed-name confirmation after the user
|
|
95
|
-
approves every removed project. TaskChef creates private snapshots under
|
|
96
|
-
backups/ before mutations and actual dashboard startup. Use taskchef backup
|
|
97
|
-
list, create, verify, restore, and prune; restore never runs automatically and
|
|
98
|
-
creates a pre-restore safety snapshot. If the live configuration is missing or
|
|
99
|
-
malformed, preview an explicit config or state restore, then bind the apply to
|
|
100
|
-
the preview's raw-state hash and plan with --confirm-unreadable-current.
|
|
101
|
-
|
|
102
|
-
Reindexing catches TaskChef up with newly saved Codex projects by comparing
|
|
103
|
-
exact same-host canonical paths from one native schema-2 project snapshot.
|
|
104
|
-
Reconciliation adds eligible paths and identity bindings atomically, isolates
|
|
105
|
-
per-project failures, and preserves existing curated names, descriptions, and
|
|
106
|
-
complete repository lists. It does not delete missing projects. Duplicate
|
|
107
|
-
native IDs, duplicate canonical targets, and identity/path moves remain
|
|
108
|
-
diagnostics rather than guesses.
|
|
109
|
-
|
|
110
|
-
Configuration schema 2 accepts an optional strict `projectIndex` containing
|
|
111
|
-
local native identity bindings, explicit exclusions, and bounded routing hints.
|
|
112
|
-
Removing a project records an exclusion so reconciliation cannot silently
|
|
113
|
-
re-add it; `include_project` clears an exact exclusion before a later reconcile.
|
|
114
|
-
Aliases come only from explicit selection or correction. Repository ownership
|
|
115
|
-
requires an inspected exact origin, and report-derived responsibilities retain
|
|
116
|
-
their accepted task/thread/turn provenance. Forgetting keeps bounded suppression
|
|
117
|
-
so an old report retry cannot recreate a removed hint. Older TaskChef releases
|
|
118
|
-
reject this optional field; use a compatible backup before downgrading.
|
|
119
|
-
|
|
120
|
-
Codex CLI resolution follows the same contract as
|
|
121
|
-
`workspace init --register-codex`: an explicit `--codex-cli` path wins, then
|
|
122
|
-
`TASKCHEF_CODEX_CLI`; either must be executable and support `app --help`.
|
|
123
|
-
Without an override, TaskChef prefers a validated `codex` PATH candidate under
|
|
124
|
-
`Contents/Resources`; otherwise it validates only the first executable `codex`
|
|
125
|
-
in PATH order. It does not assume an arbitrary shell command or hard-code an
|
|
126
|
-
application bundle location.
|
|
127
|
-
|
|
128
|
-
Or use the CLI:
|
|
42
|
+
TaskChef selects recipe-book by name and opens a separate task there. Discuss
|
|
43
|
+
the options in that task. If a written plan would help, ask it to save a
|
|
44
|
+
Markdown plan, then ask it to implement the agreed approach in the same task.
|
|
45
|
+
A plan file is created when you request one; it is not a required step for
|
|
46
|
+
every task.
|
|
129
47
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
```
|
|
48
|
+
The screenshots in this walkthrough use illustrative demo data. Open the
|
|
49
|
+
dashboard beside TaskChef master to see both tasks across your projects.
|
|
50
|
+
**Board** groups tasks by **Working**, **Needs input**, **Completed**, and
|
|
51
|
+
**Failed** so you can see their status at a glance.
|
|
135
52
|
|
|
136
|
-
|
|
137
|
-
using it directly, verify that `/workspace/payments` exactly matches the
|
|
138
|
-
canonical path of an existing local Codex project. The bootstrap skill performs
|
|
139
|
-
that native-project check for you.
|
|
53
|
+

|
|
140
54
|
|
|
141
|
-
|
|
142
|
-
`--github-repo`. Explicit values replace automatic origin detection and form
|
|
143
|
-
the complete advertised list, so include the origin when it should remain
|
|
144
|
-
routable. A managed `*-workspace` should advertise every relevant child or
|
|
145
|
-
subrepository canonical GitHub URL, plus the workspace repository itself when
|
|
146
|
-
applicable, so issue and pull-request links select the correct Codex project.
|
|
147
|
-
TaskChef accepts Git roots and ordinary local folders on the same execution
|
|
148
|
-
host. Unsupported configuration schemas are rejected and are never rewritten
|
|
149
|
-
automatically.
|
|
55
|
+
*Board gives an overview of task status across projects.*
|
|
150
56
|
|
|
151
|
-
|
|
57
|
+
If the payments task needs a decision, it might ask, for example, whether to
|
|
58
|
+
show a failed refund beside the original payment or in a separate list. Switch
|
|
59
|
+
to **List** to see each task's request, latest result, and status in rows. Filter
|
|
60
|
+
by **Needs input** to focus on the payments task's question.
|
|
152
61
|
|
|
153
|
-
|
|
62
|
+

|
|
154
63
|
|
|
155
|
-
|
|
156
|
-
In payments, fix duplicate charges after a retry, add a regression test, and report what changed.
|
|
157
|
-
```
|
|
64
|
+
*List shows the payments request and result in the Needs input queue.*
|
|
158
65
|
|
|
159
|
-
|
|
66
|
+
Select the payments task and choose **Open chat** to answer in its original
|
|
67
|
+
Codex conversation.
|
|
160
68
|
|
|
161
|
-
|
|
162
|
-
$taskchef-delegate In payments, add structured logs for failed retries and test them.
|
|
163
|
-
```
|
|
69
|
+

|
|
164
70
|
|
|
165
|
-
|
|
166
|
-
then prepares a UUID and marker for each outcome, persists the task before native creation,
|
|
167
|
-
creates the executor, and returns its task link. New executor instructions keep
|
|
168
|
-
the assignment visible from the first line, add a concise local reporting
|
|
169
|
-
authorization paragraph, leave one blank line, then place
|
|
170
|
-
an explicit `$taskchef-executor` invocation immediately before the final
|
|
171
|
-
correlation marker. That skill reads the executor's own `CODEX_THREAD_ID`, self-links, and
|
|
172
|
-
reports lifecycle state. Independent outcomes may become separate executors;
|
|
173
|
-
dependent work should stay together.
|
|
174
|
-
|
|
175
|
-
Activating the TaskChef MCP process best-effort ensures the dashboard by
|
|
176
|
-
default. The managed workspace instructions also retry it at the start of each
|
|
177
|
-
dispatcher turn. A startup failure never blocks MCP tools, an answer, report,
|
|
178
|
-
or delegation. Every dispatcher response ends with
|
|
179
|
-
the stable [TaskChef Dashboard](http://127.0.0.1:3210/) link; a created-task
|
|
180
|
-
directive remains on the preceding line so dispatch still returns immediately.
|
|
181
|
-
|
|
182
|
-
For example, TaskChef generates this shape:
|
|
71
|
+
*Payments task details show the question and the Open chat action.*
|
|
183
72
|
|
|
184
|
-
|
|
185
|
-
Fix duplicate charges after a retry and add a regression test.
|
|
186
|
-
|
|
187
|
-
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.
|
|
188
|
-
|
|
189
|
-
Use $taskchef-executor to execute and report this delegated TaskChef assignment.
|
|
190
|
-
<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Model roles
|
|
194
|
-
|
|
195
|
-
TaskChef can apply personal Orchestrator, Planner, Implementer, and Reviewer
|
|
196
|
-
model preferences from `~/.codex/agents/`. Every delegated task uses the
|
|
197
|
-
Orchestrator preference for its visible parent. For repository work, a combined
|
|
198
|
-
investigate-or-plan-and-implement request runs fresh Planner, Implementer, and
|
|
199
|
-
Reviewer subagents in that order. A direct implementation, or a later request
|
|
200
|
-
to implement prior investigation, skips the Planner and runs a fresh Implementer
|
|
201
|
-
and Reviewer in the same visible task. Explicit model choices take precedence
|
|
202
|
-
for the role they target.
|
|
203
|
-
|
|
204
|
-
## Work with and report executors
|
|
205
|
-
|
|
206
|
-
Open an executor as an ordinary Codex task. Each executor reports `working`
|
|
207
|
-
when a turn starts and one semantic outcome before that same turn ends:
|
|
208
|
-
|
|
209
|
-
- `completed`: the requested outcome is complete;
|
|
210
|
-
- `needs_input`: a real user decision or missing fact blocks progress;
|
|
211
|
-
- `failed`: the executor or creation attempt ended unsuccessfully.
|
|
212
|
-
|
|
213
|
-
A native approval prompt is live Codex state, not `needs_input`.
|
|
214
|
-
When work starts, the executor reports a concise request summary. TaskChef
|
|
215
|
-
appends a `turns` entry that pairs that request with a null result while working,
|
|
216
|
-
then fills the same entry with the semantic outcome. A follow-up therefore shows
|
|
217
|
-
its own request with “In progress,” never the preceding turn's result. Returned
|
|
218
|
-
tasks still derive `results` and `lastResult` as compatibility projections.
|
|
219
|
-
Every entry has a required `turnRef`, which is the lifecycle identity. When
|
|
220
|
-
Codex exposes a native turn ID, both `turnRef` and `turnId` contain that value.
|
|
221
|
-
Otherwise the executor retains a fresh UUID in `turnRef` and stores
|
|
222
|
-
`turnId: null`; native turn lookup is never a prerequisite for work or reporting.
|
|
223
|
-
If Codex crashes, an MCP call is lost, or the app restarts before that terminal
|
|
224
|
-
report, the next newer `working` report atomically marks the unfinished turn
|
|
225
|
-
`interrupted` and appends the new active turn. `interrupted` is TaskChef-authored
|
|
226
|
-
timeline evidence, not semantic `failed`, and it never enters `results` or
|
|
227
|
-
`lastResult`. TaskChef stores only a fixed interruption summary; it does not
|
|
228
|
-
store transcripts, hidden reasoning, crash output, or other non-semantic events.
|
|
229
|
-
|
|
230
|
-
Delegated tasks created by earlier TaskChef versions remain compatible: their
|
|
231
|
-
inline executor protocol still parses, self-links, and may use the deprecated
|
|
232
|
-
`report_result` alias. The v7 inline-paragraph named exports remain as deprecated
|
|
233
|
-
historical snapshots, but new delegations use the executor skill and `report_state`.
|
|
234
|
-
|
|
235
|
-
## View tasks and ask copilot
|
|
236
|
-
|
|
237
|
-
The dashboard is the primary monitoring and browsing UI. Ask copilot when you
|
|
238
|
-
want a concise explanation or recommendation:
|
|
73
|
+
In that conversation, answer the question and ask the task to finish:
|
|
239
74
|
|
|
240
75
|
```text
|
|
241
|
-
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
Copilot starts from TaskChef's normalized cached brief. It uses live Codex
|
|
245
|
-
metadata only when you explicitly request fresh/live verification or a focused
|
|
246
|
-
task presents a meaningful contradiction, and it never polls. It can identify
|
|
247
|
-
the exact executor, explain or draft a same-assignment follow-up, and—with your
|
|
248
|
-
explicit authorization—continue that existing task. It never automatically
|
|
249
|
-
retries failures, interrupts working tasks, or redelegates an executor. New
|
|
250
|
-
independent work still belongs to `$taskchef-delegate`. In the dispatcher, an
|
|
251
|
-
explicit instruction to answer, resume, or continue a named existing task
|
|
252
|
-
routes to copilot; it re-reads that exact task before sending.
|
|
253
|
-
|
|
254
|
-
The former `$taskchef-report` skill is not packaged as an alias because a
|
|
255
|
-
second discoverable skill would preserve ambiguous behavior. Explicit
|
|
256
|
-
historical invocations are understood as requests for `$taskchef-copilot` and
|
|
257
|
-
receive a brief rename notice.
|
|
258
|
-
|
|
259
|
-
File-backed inspection is also available:
|
|
260
|
-
|
|
261
|
-
```sh
|
|
262
|
-
taskchef task brief
|
|
263
|
-
taskchef task brief c0f010ff
|
|
264
|
-
taskchef task brief --project payments
|
|
265
|
-
taskchef task list
|
|
266
|
-
taskchef task list --project payments
|
|
267
|
-
taskchef task show c0f010ff
|
|
268
|
-
taskchef task summary
|
|
76
|
+
Show failed refunds beside the original payment. Implement it and run the tests.
|
|
269
77
|
```
|
|
270
78
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
overviews unless `--all` is supplied. Focused task and project briefs retain
|
|
274
|
-
their full selected scope. Task IDs accept a full UUID or an unambiguous
|
|
275
|
-
eight-character prefix.
|
|
276
|
-
|
|
277
|
-
## Dashboard
|
|
79
|
+
When the work finishes, its result appears on the dashboard; TaskChef does
|
|
80
|
+
not post each result back into the dispatcher chat.
|
|
278
81
|
|
|
279
|
-
|
|
82
|
+

|
|
280
83
|
|
|
281
|
-
|
|
282
|
-
$taskchef-dashboard Ensure and open the TaskChef dashboard.
|
|
283
|
-
```
|
|
84
|
+
*The completed task shows its latest result above the earlier question.*
|
|
284
85
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
The dashboard is launched by MCP but is not hosted by one MCP transport. It
|
|
294
|
-
therefore survives an individual MCP close, stdin EOF, signal, or plugin reload.
|
|
295
|
-
Only a listener launched as `session` registers each same-version MCP's original
|
|
296
|
-
Codex parent PID in its in-memory lease. After every registered Codex session
|
|
297
|
-
PID disappears for a grace period, the dashboard closes and exits. Activating
|
|
298
|
-
an installed newer TaskChef MCP recognizes and
|
|
299
|
-
gracefully stops an older TaskChef dashboard for the same canonical workspace,
|
|
300
|
-
waits boundedly for the port, then starts the installed version in that ensure.
|
|
301
|
-
Lease state is not transferred across versions; the replacement initially knows
|
|
302
|
-
only the activating session. These are best-effort
|
|
303
|
-
local guards, not a claim that Codex supplies a restart guarantee. TaskChef adds
|
|
304
|
-
no daemon or OS-persistent component. See the complete
|
|
305
|
-
[dashboard lifecycle](docs/dashboard-lifecycle.md).
|
|
306
|
-
|
|
307
|
-
TaskChef uses a trusted, single-user localhost model. Exact structured health is
|
|
308
|
-
sufficient service recognition; it is not cryptographic authentication. Simple
|
|
309
|
-
session and shutdown controls require exact Host and Origin, JSON content, a
|
|
310
|
-
non-simple request header, and an exact bounded body to block ordinary
|
|
311
|
-
cross-site browser requests. Each control names the exact health identity the
|
|
312
|
-
caller observed; the listener refuses a stale identity and the caller probes the
|
|
313
|
-
port again before deciding what to do. Unknown, malformed, different-workspace,
|
|
314
|
-
unrelated, and newer listeners remain untouched. A release using the former HMAC control
|
|
315
|
-
protocol refuses the new simple shutdown request, so the first upgrade across
|
|
316
|
-
that boundary may require stopping that verified legacy TaskChef listener once
|
|
317
|
-
before ensuring again.
|
|
318
|
-
|
|
319
|
-
Autostart is enabled when `dashboard` is absent and in new workspaces. To opt
|
|
320
|
-
out, add this optional exact object to `taskchef.json` while retaining its other
|
|
321
|
-
fields:
|
|
322
|
-
|
|
323
|
-
```json
|
|
324
|
-
"dashboard": { "autostart": false }
|
|
325
|
-
```
|
|
86
|
+
Keep the dashboard beside your conversation in Codex's built-in browser. It
|
|
87
|
+
shows each task's latest request and result. Open a task to see its total
|
|
88
|
+
reported work duration, token usage, and estimated cost, with the same figures
|
|
89
|
+
for each turn in its activity timeline. Duration is reported wall-clock time
|
|
90
|
+
spent on turns; cost is an API-equivalent estimate, not a bill. Token and cost
|
|
91
|
+
figures can be unavailable when usage cannot be mapped to the Codex task.
|
|
92
|
+
Task states normally come from the task's own reports; TaskChef does not
|
|
93
|
+
automatically supervise execution.
|
|
326
94
|
|
|
327
|
-
|
|
328
|
-
autostart is disabled or fails. It reports whether the compatible dashboard was
|
|
329
|
-
started or reused and always returns its canonical clickable URL. It may open
|
|
330
|
-
the returned localhost URL in an available in-app browser, but browser failure
|
|
331
|
-
does not make dashboard recovery fail.
|
|
95
|
+
## Install and delegate your first task
|
|
332
96
|
|
|
333
|
-
|
|
97
|
+
You need Node.js 18 or newer, Git, Codex desktop, and local access to the
|
|
98
|
+
projects that will receive work. Install the plugin:
|
|
334
99
|
|
|
335
100
|
```sh
|
|
336
|
-
|
|
337
|
-
|
|
101
|
+
codex plugin marketplace add favoyang/codex-plugins
|
|
102
|
+
codex plugin add taskchef@favoyang-plugins
|
|
338
103
|
```
|
|
339
104
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
request/result pair; opening task details fetches the full newest-first activity
|
|
343
|
-
timeline, including clearly labeled interrupted turns.
|
|
344
|
-
Task details offer infrequent administrative actions without cluttering task
|
|
345
|
-
cards. Selecting **More task actions** (`…`) reveals the action list immediately
|
|
346
|
-
beside the disclosure and changes it to a back/hide control. The list contains
|
|
347
|
-
**Copy Task ID** and direct **Mark completed** and **Mark failed** actions.
|
|
348
|
-
Working and needs-input tasks offer either terminal outcome; completed tasks
|
|
349
|
-
offer **Mark failed**, and failed tasks offer **Mark completed**. The menu
|
|
350
|
-
disclosure is the deliberate first step; choosing an outcome submits it
|
|
351
|
-
immediately without a second confirmation. There is no
|
|
352
|
-
free-form reason: the audit turn records a fixed summary, timestamp, dashboard
|
|
353
|
-
provenance, optimistic preconditions, and a unique action ID while preserving
|
|
354
|
-
every executor turn. Same-state terminal rewrites remain invalid. Stale or
|
|
355
|
-
concurrent changes are rejected and the dialog refreshes to the current task. A stalled
|
|
356
|
-
local request is aborted after a bounded wait so the dialog cannot remain
|
|
357
|
-
permanently locked; retry keeps the same idempotency identity.
|
|
358
|
-
|
|
359
|
-
The archive implementation is retained behind a disabled capability gate, and
|
|
360
|
-
the **Archive chat** control is hidden. The bundled `codex archive` command can
|
|
361
|
-
reject a valid idle desktop-app thread even when the dashboard runs in the MCP
|
|
362
|
-
host environment, while Codex's native app archive operation succeeds. TaskChef
|
|
363
|
-
will keep the feature disabled until Codex exposes a reliable supported
|
|
364
|
-
app-callable archive interface or guarantees CLI compatibility. The dormant
|
|
365
|
-
server path also rejects requests before discovering or invoking the CLI.
|
|
366
|
-
|
|
367
|
-
Task details also show whole-task and per-turn token usage when `ccusage` can
|
|
368
|
-
map the linked Codex thread. A completed turn briefly shows “Calculating token
|
|
369
|
-
usage…” while TaskChef performs bounded deferred reconciliation, because
|
|
370
|
-
the terminal lifecycle callback precedes Codex's final output write. The
|
|
371
|
-
dashboard also preloads missing, interrupted, and retry-eligible usage in a
|
|
372
|
-
bounded background queue at startup, after task changes, and on a periodic
|
|
373
|
-
recovery pass; opening task details is not required to start collection. Historical
|
|
374
|
-
tasks may show a trustworthy task total while older turns remain “Token usage
|
|
375
|
-
unavailable” when no cumulative turn boundaries were recorded. Input, cached
|
|
376
|
-
input, output, reasoning, and total counts retain ccusage's categories. Dollar
|
|
377
|
-
figures are labeled API-equivalent estimates; provenance identifies the online
|
|
378
|
-
pricing request or offline fallback mode, and zero-priced unknown models show
|
|
379
|
-
cost unavailable rather than a misleading `$0.00`. Per-turn cost is also
|
|
380
|
-
unavailable when its cumulative boundaries used different ccusage versions or
|
|
381
|
-
pricing modes. TaskChef displays the cumulative estimate supplied by ccusage
|
|
382
|
-
without applying a separate model-family or cache-write coverage policy.
|
|
383
|
-
The same detail view reports lifecycle wall-clock elapsed time independently of
|
|
384
|
-
ccusage. Each terminal turn shows **Elapsed** from `startedAt` to
|
|
385
|
-
`result.updatedAt`; **Total reported work** sums only valid terminal-turn
|
|
386
|
-
durations, excluding idle gaps and unfinished work. A working turn shows live
|
|
387
|
-
**Elapsed so far** without contributing to the total. This is reported
|
|
388
|
-
wall-clock elapsed time, not model compute time, and malformed or reversed
|
|
389
|
-
timestamp ranges are shown as unavailable.
|
|
390
|
-
The header shows the running TaskChef package version reported by the same
|
|
391
|
-
bounded health identity used for compatible-listener checks.
|
|
392
|
-
The Settings page shows the ccusage version reported by the executable that
|
|
393
|
-
TaskChef resolves at runtime.
|
|
394
|
-
The canonical port is normally owned by a dashboard session process initialized
|
|
395
|
-
by the TaskChef MCP before its tool transport connects. MCP recovery reuses an
|
|
396
|
-
exact-compatible same-workspace dashboard and reports its actual launcher;
|
|
397
|
-
a foreground `taskchef dashboard` process is intentionally standalone so its
|
|
398
|
-
child commands cannot silently inherit an agent-shell sandbox.
|
|
399
|
-
Task and result times are relative through 29 days (with minute detail for the
|
|
400
|
-
first six hours), then use a locale-aware calendar date. Each time is a keyboard-
|
|
401
|
-
accessible toggle for its full locale-aware date and time, and one shared
|
|
402
|
-
30-second timer keeps relative labels current without reloading the page.
|
|
403
|
-
The Updates panel captures immutable event-time lifecycle notices. It identifies
|
|
404
|
-
them by task, turn when available, and lifecycle event rather than dashboard
|
|
405
|
-
revision, so reconnects and non-semantic rewrites do not replay a notice and a
|
|
406
|
-
later task state cannot rewrite an older notice. A notice remains readable if
|
|
407
|
-
its task disappears; selecting it then explains that current details are no
|
|
408
|
-
longer available.
|
|
409
|
-
Apart from an explicit manual state selection from the task-detail menu, it does not mutate
|
|
410
|
-
TaskChef data and prints its local URL. A foreground dashboard identifies
|
|
411
|
-
itself as `standalone`. An exact-current, healthy same-workspace listener with a
|
|
412
|
-
recognized `standalone`, `mcp`, or `session` launcher may be reused on the
|
|
413
|
-
canonical MCP port; ensure reports its actual launcher, and only `session`
|
|
414
|
-
listeners register Codex PID leases. If an unknown, malformed, or
|
|
415
|
-
different-workspace process owns port 3210, TaskChef reports a concise conflict
|
|
416
|
-
and never kills that process. A recognized older same-workspace TaskChef
|
|
417
|
-
listener receives a simple guarded graceful shutdown request. If it lacks the
|
|
418
|
-
compatible callback or refuses the request, it remains running and ensure
|
|
419
|
-
reports a conflict. The foreground CLI similarly asks you to stop a conflicting
|
|
420
|
-
listener or choose another `--port`.
|
|
421
|
-
|
|
422
|
-
The health endpoint contains only a fixed service marker, health schema,
|
|
423
|
-
TaskChef version, dashboard-server version, canonical workspace, and launcher.
|
|
424
|
-
It exposes no task data, credentials, environment variables, process control,
|
|
425
|
-
or secrets.
|
|
426
|
-
|
|
427
|
-

|
|
428
|
-
|
|
429
|
-

|
|
430
|
-
|
|
431
|
-

|
|
432
|
-
|
|
433
|
-

|
|
434
|
-
|
|
435
|
-

|
|
436
|
-
|
|
437
|
-
## Common recovery
|
|
438
|
-
|
|
439
|
-
Check the managed workspace:
|
|
105
|
+
For the first run, set up the TaskChef dispatcher and import your saved local
|
|
106
|
+
Codex projects:
|
|
440
107
|
|
|
441
|
-
```
|
|
442
|
-
taskchef
|
|
443
|
-
taskchef workspace init
|
|
444
|
-
taskchef workspace migrate
|
|
445
|
-
taskchef doctor
|
|
108
|
+
```text
|
|
109
|
+
$taskchef-bootstrap Set up TaskChef and index my local Codex projects.
|
|
446
110
|
```
|
|
447
111
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
idempotent no-op after migration. If replacement fails, the original remains
|
|
455
|
-
or the reported backup can be restored; unsupported or invalid input is rejected
|
|
456
|
-
before a backup or rewrite.
|
|
112
|
+
After bootstrap, choose **New chat** in Codex and select the TaskChef dispatcher
|
|
113
|
+
project at `~/.agents/taskchef`. We suggest renaming the new conversation
|
|
114
|
+
**TaskChef master**, then pinning it for easy return. Bootstrap registers and
|
|
115
|
+
opens the project; you create, rename, and pin the conversation yourself.
|
|
116
|
+
Replace `<your-project>` with one of your indexed
|
|
117
|
+
Codex project names and try a read-only first request:
|
|
457
118
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
as `failed` with a retained fallback `turnRef` and null thread and Codex turn IDs.
|
|
119
|
+
```text
|
|
120
|
+
In <your-project>, explain how to run the app and tests. Do not change files.
|
|
121
|
+
```
|
|
462
122
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
123
|
+
TaskChef returns a link to the new Codex task. From then on, the dispatcher
|
|
124
|
+
checks your saved Codex projects when you delegate, so you do not need to
|
|
125
|
+
reindex after adding one. The local dashboard normally starts when the TaskChef
|
|
126
|
+
plugin activates. Open the [dashboard link](http://127.0.0.1:3210/) from the
|
|
127
|
+
end of each dispatcher response in Codex's side browser, beside your
|
|
128
|
+
conversation. If the dashboard is unavailable, ask `$taskchef-dashboard` to
|
|
129
|
+
ensure and open it. Use `$taskchef-bootstrap` to add repository mappings or
|
|
130
|
+
refine project descriptions when routing needs more context. If the installed
|
|
131
|
+
skills do not appear, activate or reload the TaskChef plugin in Codex and try
|
|
132
|
+
again.
|
|
466
133
|
|
|
467
|
-
##
|
|
134
|
+
## Choose models for each role
|
|
468
135
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
136
|
+
In the dashboard's **Settings** page, choose a model and reasoning effort for
|
|
137
|
+
the **Orchestrator**, **Planner**, **Implementer**, and **Reviewer** roles.
|
|
138
|
+
TaskChef saves these preferences in native Codex agent files under
|
|
139
|
+
`~/.codex/agents/` and applies them when it dispatches the corresponding work.
|
|
140
|
+
Set them once for future tasks; a model choice you make explicitly for a task
|
|
141
|
+
takes precedence over its role preference.
|
|
473
142
|
|
|
474
|
-
|
|
143
|
+

|
|
475
144
|
|
|
476
|
-
|
|
477
|
-
codex plugin marketplace upgrade favoyang-plugins
|
|
478
|
-
codex plugin add taskchef@favoyang-plugins
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
Replacing or installing plugin files cannot execute autostart by itself. After
|
|
482
|
-
installation, activate or reload the new TaskChef MCP process; installation
|
|
483
|
-
does not necessarily reload Codex. Then run `$taskchef-dashboard` (or call
|
|
484
|
-
`ensure_dashboard`) and verify the returned dashboard identity has all of:
|
|
485
|
-
|
|
486
|
-
- the expected released TaskChef version;
|
|
487
|
-
- the expected dashboard protocol `serverVersion`;
|
|
488
|
-
- the reported dashboard launcher (`session` for a newly started canonical dashboard);
|
|
489
|
-
- the canonical TaskChef workspace path;
|
|
490
|
-
- the canonical `http://127.0.0.1:3210/` URL.
|
|
145
|
+
*Settings shows the model and reasoning effort selected for each role.*
|
|
491
146
|
|
|
492
|
-
|
|
493
|
-
the new MCP process, ensure the dashboard, then verify TaskChef version,
|
|
494
|
-
protocol `serverVersion`, reported launcher, canonical workspace, and URL.
|
|
495
|
-
Exact-compatible same-workspace servers with a recognized launcher may be
|
|
496
|
-
reused; unknown listeners remain untouched.
|
|
147
|
+
## More detail
|
|
497
148
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
149
|
+
The [advanced guide](docs/advanced-guide.md) covers project indexing, routing,
|
|
150
|
+
task reporting, dashboard behavior, recovery, updates, and development. The
|
|
151
|
+
[specification](docs/spec.md) and [workflows](docs/workflows.md) describe the
|
|
152
|
+
implementation contracts. TaskChef was inspired by
|
|
153
|
+
[FirstMate](https://github.com/kunchenguid/firstmate); the
|
|
154
|
+
[comparison](docs/firstmate-taskchef-comparison.md) explains their different
|
|
155
|
+
approaches.
|
|
504
156
|
|
|
505
|
-
##
|
|
157
|
+
## License
|
|
506
158
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
npm test
|
|
510
|
-
npm pack --dry-run
|
|
511
|
-
```
|
|
159
|
+
Copyright 2026 Favo Yang. TaskChef is licensed under the
|
|
160
|
+
[Apache License 2.0](LICENSE).
|
|
512
161
|
|
|
513
|
-
|
|
514
|
-
|
|
162
|
+
Third-party dependencies retain their own licenses. The OpenAI Codex icons
|
|
163
|
+
are excluded from TaskChef's license; see the
|
|
164
|
+
[Codex asset notice](assets/CODEX_ASSET_NOTICE.md).
|
|
@@ -16,7 +16,7 @@ icon previews. Their SHA-256 digests are:
|
|
|
16
16
|
- `codex-app-light.png`: `de7d43f3386105ab20952958c2c25beb0d903e2aeb6e1aef57c49a648c0d1c07`
|
|
17
17
|
|
|
18
18
|
The Codex icon is an OpenAI trademark and copyrighted asset. It is not covered
|
|
19
|
-
by TaskChef's
|
|
19
|
+
by TaskChef's Apache-2.0 license. TaskChef uses it unchanged and only beside the
|
|
20
20
|
visible **Open task** label to identify an action that opens the corresponding
|
|
21
21
|
task in OpenAI Codex. Use remains subject to the [OpenAI Design
|
|
22
22
|
Guidelines](https://openai.com/brand/), including OpenAI's Marks usage terms.
|