taskchef 8.7.1 → 9.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.
Files changed (149) hide show
  1. package/.codex-plugin/plugin.json +7 -10
  2. package/.mcp.json +3 -2
  3. package/README.md +31 -158
  4. package/docs/mcp-app.md +3 -3
  5. package/docs/spec.md +38 -746
  6. package/docs/taskchef-next-storage.md +2 -2
  7. package/index.js +2 -99
  8. package/package.json +12 -49
  9. package/skills/delegate/SKILL.md +44 -0
  10. package/skills/delegate/agents/openai.yaml +4 -0
  11. package/src/codex-app.js +3 -152
  12. package/src/codex-session-scanner.js +2 -2
  13. package/src/file-lock.js +25 -0
  14. package/src/mcp-app/react/NextTaskDetail.test.tsx +1 -1
  15. package/src/mcp-app/react/NextTaskDetail.tsx +8 -8
  16. package/src/mcp-app/react/main.test.tsx +3 -3
  17. package/src/mcp-app/react/main.tsx +7 -7
  18. package/src/mcp-app.js +2 -2
  19. package/src/mcp.js +4 -542
  20. package/src/next-cache.js +2 -2
  21. package/src/next-github.js +3 -3
  22. package/src/next-notifications.js +2 -2
  23. package/src/{dashboard/react → ui}/components/CardStatusIcons.tsx +1 -1
  24. package/src/{dashboard/react → ui}/components/GitHubLinks.tsx +1 -1
  25. package/src/{dashboard/react → ui}/components/LinkedText.tsx +1 -1
  26. package/src/{dashboard/react → ui}/components/RelativeTime.test.tsx +1 -1
  27. package/src/{dashboard/react → ui}/components/RelativeTime.tsx +1 -1
  28. package/src/{dashboard/react → ui}/components/ReplyImagePreview.test.tsx +1 -1
  29. package/src/{dashboard/react → ui}/components/TaskBoard.tsx +1 -1
  30. package/src/{dashboard/react → ui}/components/TaskCard.tsx +1 -1
  31. package/src/{dashboard/react → ui}/components/TurnContent.tsx +1 -1
  32. package/src/{dashboard/react → ui}/presentation.ts +1 -1
  33. package/src/version.js +0 -1
  34. package/BACKLOG.md +0 -48
  35. package/assets/e2e-benchmark-example.json +0 -50
  36. package/assets/taskchef-dispatcher-instructions.md +0 -44
  37. package/bin/taskchef.js +0 -20
  38. package/docs/advanced-guide.md +0 -497
  39. package/docs/dashboard-lifecycle.md +0 -149
  40. package/docs/dashboard-ui.md +0 -40
  41. package/docs/firstmate-taskchef-comparison.md +0 -283
  42. package/docs/images/ccusage-token-consumption.png +0 -0
  43. package/docs/images/dashboard-identity.jpg +0 -0
  44. package/docs/images/dashboard-token-pending.jpg +0 -0
  45. package/docs/images/interrupted-turn-recovery.jpg +0 -0
  46. package/docs/images/notification-event-snapshots.jpg +0 -0
  47. package/docs/images/readme-board.png +0 -0
  48. package/docs/images/readme-completed.png +0 -0
  49. package/docs/images/readme-list.png +0 -0
  50. package/docs/images/readme-needs-input.png +0 -0
  51. package/docs/images/readme-roles.png +0 -0
  52. package/docs/images/reported-work-duration-desktop.jpg +0 -0
  53. package/docs/images/reported-work-duration-mobile.jpg +0 -0
  54. package/docs/images/result-history-dashboard.jpg +0 -0
  55. package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
  56. package/docs/images/taskchef-unified-status-popup.jpg +0 -0
  57. package/docs/workflows.md +0 -476
  58. package/mcp/dashboard-session.js +0 -51
  59. package/scripts/benchmark-dispatch-prepare.js +0 -90
  60. package/scripts/e2e-benchmark.js +0 -206
  61. package/scripts/roles/resolve_roles.py +0 -293
  62. package/skills/taskchef-bootstrap/SKILL.md +0 -96
  63. package/skills/taskchef-bootstrap/agents/openai.yaml +0 -4
  64. package/skills/taskchef-bootstrap/references/project-index.md +0 -154
  65. package/skills/taskchef-copilot/SKILL.md +0 -75
  66. package/skills/taskchef-copilot/agents/openai.yaml +0 -4
  67. package/skills/taskchef-dashboard/SKILL.md +0 -24
  68. package/skills/taskchef-dashboard/agents/openai.yaml +0 -4
  69. package/skills/taskchef-delegate/SKILL.md +0 -102
  70. package/skills/taskchef-delegate/agents/openai.yaml +0 -4
  71. package/skills/taskchef-delegate/references/model-roles.md +0 -29
  72. package/skills/taskchef-executor/SKILL.md +0 -154
  73. package/skills/taskchef-executor/agents/openai.yaml +0 -4
  74. package/skills/taskchef-executor/references/compatibility.md +0 -22
  75. package/skills/taskchef-executor/references/ending-actions.md +0 -26
  76. package/src/backups.js +0 -359
  77. package/src/cli.js +0 -733
  78. package/src/config-audit.js +0 -99
  79. package/src/config-mutations.js +0 -106
  80. package/src/dashboard/actions.js +0 -136
  81. package/src/dashboard/app.js +0 -1172
  82. package/src/dashboard/dist/app.js +0 -269
  83. package/src/dashboard/dist/app.js.map +0 -1
  84. package/src/dashboard/dist/index.html +0 -16
  85. package/src/dashboard/dist/styles.css +0 -1
  86. package/src/dashboard/index.html +0 -148
  87. package/src/dashboard/react/App.test.tsx +0 -346
  88. package/src/dashboard/react/App.tsx +0 -515
  89. package/src/dashboard/react/api.test.ts +0 -40
  90. package/src/dashboard/react/api.ts +0 -103
  91. package/src/dashboard/react/components/ActivityTimeline.tsx +0 -118
  92. package/src/dashboard/react/components/ModelSettings.test.tsx +0 -180
  93. package/src/dashboard/react/components/ModelSettings.tsx +0 -106
  94. package/src/dashboard/react/components/NotificationCenter.test.tsx +0 -76
  95. package/src/dashboard/react/components/NotificationCenter.tsx +0 -111
  96. package/src/dashboard/react/components/PullRequestBadges.tsx +0 -18
  97. package/src/dashboard/react/components/TaskDetail.test.tsx +0 -255
  98. package/src/dashboard/react/components/TaskDetail.tsx +0 -271
  99. package/src/dashboard/react/components/UsagePanel.tsx +0 -96
  100. package/src/dashboard/react/index.html +0 -15
  101. package/src/dashboard/react/main.tsx +0 -12
  102. package/src/dashboard/react/overlay-state.test.ts +0 -110
  103. package/src/dashboard/react/overlay-state.ts +0 -60
  104. package/src/dashboard/react/presentation.test.tsx +0 -571
  105. package/src/dashboard/styles.css +0 -261
  106. package/src/dashboard-control.js +0 -34
  107. package/src/dashboard-manager.js +0 -339
  108. package/src/dashboard-session-process.js +0 -88
  109. package/src/dashboard-session.js +0 -86
  110. package/src/dashboard.js +0 -1303
  111. package/src/delegation.js +0 -277
  112. package/src/github.js +0 -107
  113. package/src/model-roles.js +0 -70
  114. package/src/recorded-usage-tracker.js +0 -92
  115. package/src/usage-tracker.js +0 -650
  116. package/src/usage.js +0 -367
  117. package/src/workspace-path.js +0 -48
  118. package/src/workspace.js +0 -3629
  119. /package/src/{dashboard/react → ui}/components/AnimatedUsage.test.tsx +0 -0
  120. /package/src/{dashboard/react → ui}/components/CardStatusIcons.test.tsx +0 -0
  121. /package/src/{dashboard/react → ui}/components/ImageGallery.tsx +0 -0
  122. /package/src/{dashboard/react → ui}/components/OpenChatButton.test.tsx +0 -0
  123. /package/src/{dashboard/react → ui}/components/OpenChatButton.tsx +0 -0
  124. /package/src/{dashboard/react → ui}/components/PrGlyph.tsx +0 -0
  125. /package/src/{dashboard/react → ui}/components/QueuedPrompts.test.tsx +0 -0
  126. /package/src/{dashboard/react → ui}/components/QueuedPrompts.tsx +0 -0
  127. /package/src/{dashboard/react → ui}/components/ReplyCover.test.tsx +0 -0
  128. /package/src/{dashboard/react → ui}/components/ReplyCover.tsx +0 -0
  129. /package/src/{dashboard/react → ui}/components/ReplyImagePreview.tsx +0 -0
  130. /package/src/{dashboard/react → ui}/components/ReplyMarkdown.test.tsx +0 -0
  131. /package/src/{dashboard/react → ui}/components/ReplyMarkdown.tsx +0 -0
  132. /package/src/{dashboard/react → ui}/components/SavedUsageFormat.test.tsx +0 -0
  133. /package/src/{dashboard/react → ui}/components/SavedUsageFormat.tsx +0 -0
  134. /package/src/{dashboard/react → ui}/components/ShimmerText.tsx +0 -0
  135. /package/src/{dashboard/react → ui}/components/StatsGrid.tsx +0 -0
  136. /package/src/{dashboard/react → ui}/components/StatusBadge.tsx +0 -0
  137. /package/src/{dashboard/react → ui}/components/TaskBoard.test.tsx +0 -0
  138. /package/src/{dashboard/react → ui}/components/TaskCardStats.test.tsx +0 -0
  139. /package/src/{dashboard/react → ui}/components/TaskCardStats.tsx +0 -0
  140. /package/src/{dashboard/react → ui}/components/TurnContent.test.tsx +0 -0
  141. /package/src/{dashboard/react → ui}/fixtures.ts +0 -0
  142. /package/src/{dashboard → ui}/github-links.js +0 -0
  143. /package/src/{dashboard/react → ui}/image-cache.test.ts +0 -0
  144. /package/src/{dashboard/react → ui}/image-cache.ts +0 -0
  145. /package/src/{dashboard → ui}/state.js +0 -0
  146. /package/src/{dashboard/react → ui}/styles.css +0 -0
  147. /package/src/{dashboard/react → ui}/test-setup.ts +0 -0
  148. /package/src/{dashboard → ui}/time.js +0 -0
  149. /package/src/{dashboard/react → ui}/types.ts +0 -0
@@ -1,40 +0,0 @@
1
- # Dashboard UI baseline
2
-
3
- Board and List are the visual baseline for dashboard pages. New pages should
4
- inherit the Mantine theme in `src/dashboard/react/App.tsx` and the shared CSS
5
- properties in `src/dashboard/react/styles.css` before adding page-specific
6
- rules.
7
-
8
- - Use `--taskchef-page-max-width`, `--taskchef-page-gutter`, and the
9
- `.taskchef-main` shell for the outer page. Use `.taskchef-content` for
10
- readable single-column content; Board may use the full shell width for its
11
- horizontal lanes.
12
- - Use Mantine `h5`, `sm`, and `xs` sizes for section headings, body text, and
13
- supporting text. Reserve larger headings for views that establish a distinct
14
- document hierarchy.
15
- - Selects inherit the compact `xs` dashboard size from the shared Mantine
16
- theme. New pages get the same 30 px control height and 12 px control text
17
- without page-specific selectors. Keep short, related selects in one compact
18
- row when they remain readable at narrow widths; give the field with longer
19
- values the larger share of the row.
20
- - Use `.taskchef-section`, `p="sm"`, and `gap="sm"` for bordered page sections.
21
- Keep intentional Board and List differences, such as lane width and card
22
- excerpts, in their existing component classes.
23
-
24
- Check a dashboard page at desktop and narrow widths. Confirm keyboard focus,
25
- control operation, reachable overflow, and a clean browser console.
26
-
27
- ### Latest-turn request and response
28
-
29
- Running local Codex cards show the current request. Other cards show the latest
30
- turn's response. Cards use a plain two-line preview without request bubbles.
31
- Details pairs the same turn's request and response, each initially capped at
32
- three lines with a Show more control. The request uses a right-aligned bubble.
33
- Actual scheduled requests show their recorded instructions with a clock;
34
- human follow-ups in scheduled chats use the normal request bubble.
35
- Quoted selections render as Markdown quotes. File and image references show
36
- attachment names, while generated request headings and context metadata are
37
- removed from the display. Recorded input remains unchanged.
38
-
39
- Earlier-turn PR fallbacks remain separate from this content: the status popup
40
- shows `(Earlier turn PR)` below the PR link, aligned with the other row text.
@@ -1,283 +0,0 @@
1
- # FirstMate and TaskChef: architecture and fit
2
-
3
- > **Research, not contract.** This document compares two version-scoped
4
- > implementations. It does not define TaskChef behavior; the normative source
5
- > is the [TaskChef specification](spec.md). Recheck the linked sources before relying on these
6
- > conclusions after the access date.
7
-
8
- For TaskChef installation and everyday use, start with the
9
- [README](../README.md). For its current implementation flow, see
10
- [TaskChef workflows](workflows.md).
11
-
12
- ## Scope and sources
13
-
14
- **Access date:** 2026-08-25
15
-
16
- **TaskChef scope:** the TaskChef 7 contract in this repository revision.
17
- Current behavior was verified against the [specification](spec.md),
18
- [workflows](workflows.md), packaged skills,
19
- [MCP implementation](https://github.com/favoyang/taskchef/blob/main/src/mcp.js),
20
- [workspace implementation](https://github.com/favoyang/taskchef/blob/main/src/workspace.js),
21
- CLI, dashboard, and tests.
22
-
23
- **FirstMate scope:**
24
- [`kunchenguid/firstmate`](https://github.com/kunchenguid/firstmate) at commit
25
- [`038d0f7`](https://github.com/kunchenguid/firstmate/tree/038d0f7ec6ba7238a151722931434dcf06ff37c4),
26
- the tip of its official `main` branch when accessed. Repository history already
27
- identified Kunchenguid's project as the intended FirstMate; no competing local
28
- reference pointed to another project.
29
-
30
- Primary FirstMate sources:
31
-
32
- - [README](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/README.md)
33
- for product goals, installation, features, and supported harnesses;
34
- - [AGENTS.md](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/AGENTS.md)
35
- for the coordinator's operating contract, authority, delegation, supervision,
36
- and delivery rules;
37
- - [Architecture](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/docs/architecture.md)
38
- for watcher, session backend, worktree, state, and recovery mechanics;
39
- - [Configuration](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/docs/configuration.md)
40
- for operational-home state, project modes, profiles, and extension settings;
41
- - [Codex App boundary](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/docs/codex-app-backend.md)
42
- for the current limit that Codex desktop is not a selectable FirstMate runtime
43
- backend;
44
- - [Vision](https://github.com/kunchenguid/firstmate/blob/038d0f7ec6ba7238a151722931434dcf06ff37c4/VISION.md)
45
- for the intended single-liaison, durable-fleet experience.
46
-
47
- Unless labeled **Inference** or **Recommendation**, statements below are facts
48
- supported by those version-scoped sources or the TaskChef 7 codebase.
49
-
50
- ## Executive comparison
51
-
52
- **Fact:** TaskChef is a Codex-native dispatch and task-index layer. It routes a
53
- request to visible Codex tasks, returns immediately, and lets the user work with
54
- each executor directly. It stores one latest task snapshot and offers read-only
55
- reports and a local dashboard.
56
-
57
- **Fact:** FirstMate is an agent distribution for running a supervised crew. The
58
- user talks to one primary coordinator, which dispatches workers into isolated
59
- worktrees and visible session backends, watches meaningful state, escalates
60
- decisions, follows configured delivery modes, and reconciles durable fleet state
61
- after restart.
62
-
63
- **Inference:** The products overlap at intake, project routing, parallel task
64
- creation, and observability. Their central responsibility boundary differs:
65
- TaskChef hands control to native Codex tasks; FirstMate retains coordination
66
- responsibility until an outcome is landed, transferred, or safely preserved.
67
-
68
- ## Architecture at a glance
69
-
70
- | Dimension | TaskChef 7 | FirstMate at `038d0f7` |
71
- | --- | --- | --- |
72
- | Primary goal | Put multi-project work into the right visible Codex task and make it findable later. | Let one person direct a supervised crew across projects through one liaison. |
73
- | Product form | Codex plugin: five skills, local MCP server, data CLI, and loopback dashboard. | Cloneable agent distribution: instructions, internal skills, scripts, policies, and private on-disk state. |
74
- | Runtime | Native Codex desktop tasks are the executors and live source of truth. | Harness-driven workers in tmux by default, with documented alternative session backends; Codex can be a harness, but Codex desktop is not a runtime backend. |
75
- | Coordinator lifetime | Dispatcher returns immediately and does not supervise. | First mate remains active and uses watcher/guard mechanisms to supervise meaningful events. |
76
- | Project isolation | Delegates to the configured Codex project; isolation follows native Codex/project behavior. | Ship and scout workers require separate Treehouse- or backend-managed worktrees. |
77
- | Durable state | `taskchef.json` plus latest snapshots in `tasks.jsonl`. | Backlog, briefs, reports, task metadata, status-event logs, decisions, endpoint records, and configuration under an operational home. |
78
-
79
- ## Goals and user experience
80
-
81
- ### TaskChef
82
-
83
- **Fact:** The user submits work in the dispatcher or explicitly invokes
84
- `$taskchef-delegate` elsewhere. TaskChef creates independently openable Codex
85
- tasks and returns links. The user opens those tasks for questions, approvals,
86
- follow-ups, and delivery.
87
-
88
- **Strength:** This preserves the familiar Codex task model and makes delegation
89
- transparent. There is little new runtime or policy to learn.
90
-
91
- **Limitation:** Several active executors still mean several conversations. A
92
- dispatcher report reduces search cost but does not own supervision or recovery.
93
-
94
- ### FirstMate
95
-
96
- **Fact:** The user talks to the first mate as the single liaison. Crewmates do
97
- project work; the first mate reads projects, supervises the fleet, reconciles
98
- direct user intervention, brings forward decisions, and reports outcomes.
99
-
100
- **Strength:** The user can look away while one coordinator retains context and
101
- responsibility across a larger fleet.
102
-
103
- **Limitation:** The experience requires more local tooling, state, policy, and
104
- operational machinery than a simple dispatcher. The coordinator's summaries
105
- also insert an interpretation layer between user and worker.
106
-
107
- ## Task identity and persistence
108
-
109
- ### TaskChef
110
-
111
- **Fact:** `prepare_dispatch` allocates a TaskChef UUID and exact correlation
112
- marker. `record_task` persists the marked instruction before native task
113
- creation. The executor then reads its own `CODEX_THREAD_ID` and calls
114
- `link_task`; the dispatcher neither searches recent tasks nor repairs identity.
115
- The task record keeps one immutable intent/project snapshot plus the latest
116
- identity and semantic result fields.
117
-
118
- **Fact:** Linking accepts one atomic null-to-canonical-Codex-UUIDv7 transition.
119
- Exact retries are idempotent, conflicts fail, and link interruption remains
120
- visibly pending. Schema 9 lifecycle callbacks use a required `turnRef`: the
121
- native Codex turn ID when available, or a retained UUID with `turnId: null`.
122
-
123
- ### FirstMate
124
-
125
- **Fact:** FirstMate assigns a task identity used across backlog entries, briefs,
126
- worker endpoint metadata, worktrees, status events, reports, and delivery
127
- artifacts. Durable disk records plus live backend state allow session-start and
128
- watcher reconciliation.
129
-
130
- **Inference:** TaskChef's identity model is narrower and easier to audit because
131
- it binds one record to one native executor. FirstMate's richer identity graph is
132
- necessary for supervision and recovery, but creates more reconciliation paths
133
- and invariants.
134
-
135
- ## Delegation and concurrency
136
-
137
- ### TaskChef
138
-
139
- **Fact:** The delegation skill splits only independently useful outcomes,
140
- routes each to exactly one configured project, records before one native
141
- creation call, and returns immediately. Multiple dispatchers and executors may
142
- share the workspace; locking and atomic JSONL replacement serialize mutations.
143
-
144
- **Fact:** TaskChef itself does not allocate worktrees, choose worker models,
145
- schedule dependencies, retry failed execution, or enforce a repository delivery
146
- mode. Those belong to Codex and each target project's instructions.
147
-
148
- ### FirstMate
149
-
150
- **Fact:** FirstMate distinguishes ship work from scout investigation, prepares
151
- durable task material, selects a configured harness/profile, and spawns workers
152
- in isolated worktrees. Independent work may run concurrently; dependencies and
153
- unsafe shared state can hold work back.
154
-
155
- **Fact:** Supported runtime backends and harness adapters are explicit
156
- extension surfaces. The reference path uses tmux, while other documented
157
- backends have different verification or experimental status.
158
-
159
- ## Status and results
160
-
161
- ### TaskChef
162
-
163
- **Fact:** Persisted statuses are `working`, `needs_input`, `completed`, and
164
- `failed`. Executors report
165
- `working` at turn start and a semantic state before ending. Schema 9 preserves
166
- the paired turn timeline and semantic-only compatibility results while a newer
167
- turn is working. If a terminal report is lost, the next valid working start
168
- closes the predecessor with a timeline-only `interrupted` outcome rather than
169
- semantic `failed`.
170
- `needs_input` is reserved for a real semantic decision, not a native approval
171
- prompt.
172
-
173
- **Fact:** The copilot skill explains normalized cached briefs by default and
174
- uses live Codex metadata only for an explicit fresh/live request or a focused
175
- meaningful contradiction. It recommends safe next actions, never polls, and
176
- never writes inferred state.
177
-
178
- ### FirstMate
179
-
180
- **Fact:** FirstMate combines durable task/backlog state, append-only status
181
- events, live backend evidence, validation/delivery artifacts, and watcher wake
182
- records. Its supervision path distinguishes historical event logs from current
183
- worker state and escalates meaningful decisions, failures, stalls, and delivery
184
- milestones.
185
-
186
- **Inference:** TaskChef optimizes for a small truthful cache and bounded reads;
187
- FirstMate optimizes for continuity and active coordination. Neither data model
188
- can be substituted for the other without changing product responsibility.
189
-
190
- ## UI and observability
191
-
192
- ### TaskChef
193
-
194
- **Fact:** The loopback dashboard watches `tasks.jsonl`, streams stable validated
195
- snapshots, filters and orders tasks, shows notifications and details, and opens
196
- a task directly in Codex when its stored thread ID has a supported UUID shape.
197
- This navigation check does not prove schema 4 or 5 self-link provenance. The
198
- dashboard does not refresh native task state, submit replies, or show
199
- transcripts or token usage.
200
-
201
- **Fact:** The user can also ask TaskChef copilot for a concise cached brief or
202
- focused live verification, or inspect the data CLI. Executor work remains
203
- visible in normal Codex desktop tasks.
204
-
205
- ### FirstMate
206
-
207
- **Fact:** Workers run in visible session backends that the user can inspect or
208
- intervene in, while the first mate remains the primary interface. Fleet views,
209
- durable status/decision records, and watcher-driven wakes provide the
210
- coordinator's operational observability.
211
-
212
- **Fact:** FirstMate currently documents Codex desktop as an integration
213
- boundary, not a selectable worker backend. Codex CLI can participate through a
214
- harness adapter.
215
-
216
- ## Integrations and extension model
217
-
218
- | Area | TaskChef | FirstMate |
219
- | --- | --- | --- |
220
- | Codex | Built around native Codex projects, tasks, thread reads, and desktop deep links. | Codex is one verified harness; desktop tasks are not its worker runtime. |
221
- | GitHub | Configured repository URLs aid routing; delivery remains the executor project's concern. | GitHub CLI, PR state, and configured delivery modes are part of supervised shipping workflows. |
222
- | Skills | Five plugin skills with narrow bootstrap, dashboard recovery, delegate, executor, and conversational coordination responsibilities. | Internal firstmate-only skills plus standalone public skills; AGENTS.md routes conditional procedures. |
223
- | MCP | Four primary local TaskChef tools plus one deprecated compatibility alias own deterministic identity and state writes. | FirstMate describes itself as an agent distribution rather than an MCP product; deterministic behavior lives largely in scripts. |
224
- | Runtime extensions | Extend plugin skills/MCP/CLI/dashboard or compose native Codex capabilities. | Add or verify harness adapters, session backends, dispatch profiles, operational scripts, and optional integrations. |
225
-
226
- ## Trust and security boundaries
227
-
228
- ### TaskChef
229
-
230
- **Fact:** The MCP server is local and does not receive transport-authenticated
231
- Codex caller identity. Executor thread and turn IDs are cooperative assertions.
232
- Validation prevents accidental parent/provisional identity capture, duplicate
233
- identity use, stale-turn replacement, and malformed record mutation; it does
234
- not resist a deliberately forged local MCP caller.
235
-
236
- **Fact:** The dashboard binds to loopback, has no browser authentication, and
237
- uses Host/Origin checks for open-in-Codex actions. It must not be exposed
238
- through a proxy or tunnel. Workspace mutation uses one lock and atomic writes.
239
-
240
- ### FirstMate
241
-
242
- **Fact:** The first mate is normally read-only over project clones; crewmates
243
- make project changes in isolated worktrees. Merge, destructive action, and
244
- standing autonomy are governed by explicit captain authority and per-project
245
- delivery modes. Scripts validate task endpoints, homes, worktrees, and state
246
- before sensitive lifecycle actions.
247
-
248
- **Inference:** TaskChef has a smaller local attack and failure surface but
249
- delegates repository safety to Codex and project policy. FirstMate explicitly
250
- owns more delivery and process safety, which improves centralized control while
251
- expanding the trusted script, state, backend, and credential surface.
252
-
253
- ## Strengths, limitations, and best fit
254
-
255
- | Product | Strongest when | Less suitable when |
256
- | --- | --- | --- |
257
- | TaskChef | You already use Codex desktop; want one multi-project inbox; prefer direct executor conversations; value a small inspectable history; want minimal runtime machinery. | You want one liaison to supervise, recover, coordinate decisions, enforce delivery modes, or return only consolidated outcomes. |
258
- | FirstMate | You want one coordinator to run many visible workers; need isolated worktrees, durable fleet recovery, proactive supervision, and consistent delivery policy across projects. | You want native Codex desktop tasks as the core UI; prefer minimal setup and state; or want to interact directly with every executor without a coordinator layer. |
259
-
260
- ## Recommendations
261
-
262
- **Recommendation:** Choose TaskChef when the problem is routing and task
263
- findability. Choose FirstMate when the problem is sustained supervisory
264
- attention and delivery coordination.
265
-
266
- **Recommendation:** Do not casually nest the systems. A FirstMate coordinator
267
- behind every TaskChef executor, or TaskChef dispatch inside every FirstMate
268
- worker, adds identity, authority, and recovery boundaries without a clear owner.
269
- If composition is necessary, define exactly one supervisory layer and treat the
270
- other as a leaf runtime or intake adapter.
271
-
272
- **Recommendation:** TaskChef can borrow outcome-oriented reporting ideas
273
- without becoming a supervisory runtime. Useful candidates are clearer
274
- completion summaries and an explicit user-approved result-to-follow-up handoff.
275
- They should preserve native Codex task ownership, bounded reads, and the absence
276
- of background supervision.
277
-
278
- **Inference:** Reproducing FirstMate's restart-proof crew management inside
279
- TaskChef would not be a small feature. It would require new durable state,
280
- worker liveness contracts, worktree ownership, decision queues, delivery
281
- authority, retry/recovery policy, and a continuously supervised runtime. That
282
- would change TaskChef's product category and should be evaluated as a separate
283
- architecture rather than an incremental dashboard enhancement.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file