taskchef 8.7.0 → 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.
- package/.codex-plugin/plugin.json +7 -10
- package/.mcp.json +3 -2
- package/README.md +31 -158
- package/docs/mcp-app.md +21 -4
- package/docs/spec.md +38 -746
- package/docs/taskchef-next-storage.md +2 -2
- package/index.js +2 -99
- package/package.json +12 -49
- package/skills/delegate/SKILL.md +44 -0
- package/skills/delegate/agents/openai.yaml +4 -0
- package/src/codex-app.js +3 -152
- package/src/codex-session-scanner.js +2 -2
- package/src/file-lock.js +25 -0
- package/src/mcp-app/react/NextTaskDetail.test.tsx +1 -1
- package/src/mcp-app/react/NextTaskDetail.tsx +8 -8
- package/src/mcp-app/react/main.test.tsx +3 -3
- package/src/mcp-app/react/main.tsx +7 -7
- package/src/mcp-app.js +4 -4
- package/src/mcp.js +4 -542
- package/src/next-cache.js +2 -2
- package/src/next-github.js +3 -3
- package/src/next-notifications.js +2 -2
- package/src/{dashboard/react → ui}/components/CardStatusIcons.tsx +1 -1
- package/src/{dashboard/react → ui}/components/GitHubLinks.tsx +1 -1
- package/src/{dashboard/react → ui}/components/LinkedText.tsx +1 -1
- package/src/{dashboard/react → ui}/components/RelativeTime.test.tsx +1 -1
- package/src/{dashboard/react → ui}/components/RelativeTime.tsx +1 -1
- package/src/{dashboard/react → ui}/components/ReplyImagePreview.test.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TaskBoard.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TaskCard.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TurnContent.tsx +1 -1
- package/src/{dashboard/react → ui}/presentation.ts +1 -1
- package/src/version.js +2 -1
- package/BACKLOG.md +0 -48
- package/assets/e2e-benchmark-example.json +0 -50
- package/assets/taskchef-dispatcher-instructions.md +0 -44
- package/bin/taskchef.js +0 -20
- package/docs/advanced-guide.md +0 -497
- package/docs/dashboard-lifecycle.md +0 -149
- package/docs/dashboard-ui.md +0 -40
- package/docs/firstmate-taskchef-comparison.md +0 -283
- package/docs/images/ccusage-token-consumption.png +0 -0
- package/docs/images/dashboard-identity.jpg +0 -0
- package/docs/images/dashboard-token-pending.jpg +0 -0
- package/docs/images/interrupted-turn-recovery.jpg +0 -0
- package/docs/images/notification-event-snapshots.jpg +0 -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/images/reported-work-duration-desktop.jpg +0 -0
- package/docs/images/reported-work-duration-mobile.jpg +0 -0
- package/docs/images/result-history-dashboard.jpg +0 -0
- package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
- package/docs/images/taskchef-unified-status-popup.jpg +0 -0
- package/docs/workflows.md +0 -476
- package/mcp/dashboard-session.js +0 -51
- package/scripts/benchmark-dispatch-prepare.js +0 -90
- package/scripts/e2e-benchmark.js +0 -206
- package/scripts/roles/resolve_roles.py +0 -293
- package/skills/taskchef-bootstrap/SKILL.md +0 -96
- package/skills/taskchef-bootstrap/agents/openai.yaml +0 -4
- package/skills/taskchef-bootstrap/references/project-index.md +0 -154
- package/skills/taskchef-copilot/SKILL.md +0 -75
- package/skills/taskchef-copilot/agents/openai.yaml +0 -4
- package/skills/taskchef-dashboard/SKILL.md +0 -24
- package/skills/taskchef-dashboard/agents/openai.yaml +0 -4
- package/skills/taskchef-delegate/SKILL.md +0 -102
- package/skills/taskchef-delegate/agents/openai.yaml +0 -4
- package/skills/taskchef-delegate/references/model-roles.md +0 -29
- package/skills/taskchef-executor/SKILL.md +0 -154
- package/skills/taskchef-executor/agents/openai.yaml +0 -4
- package/skills/taskchef-executor/references/compatibility.md +0 -22
- package/skills/taskchef-executor/references/ending-actions.md +0 -26
- package/src/backups.js +0 -359
- package/src/cli.js +0 -733
- package/src/config-audit.js +0 -99
- package/src/config-mutations.js +0 -106
- package/src/dashboard/actions.js +0 -136
- package/src/dashboard/app.js +0 -1172
- package/src/dashboard/dist/app.js +0 -269
- package/src/dashboard/dist/app.js.map +0 -1
- package/src/dashboard/dist/index.html +0 -16
- package/src/dashboard/dist/styles.css +0 -1
- package/src/dashboard/index.html +0 -148
- package/src/dashboard/react/App.test.tsx +0 -346
- package/src/dashboard/react/App.tsx +0 -515
- package/src/dashboard/react/api.test.ts +0 -40
- package/src/dashboard/react/api.ts +0 -103
- package/src/dashboard/react/components/ActivityTimeline.tsx +0 -118
- package/src/dashboard/react/components/ModelSettings.test.tsx +0 -180
- package/src/dashboard/react/components/ModelSettings.tsx +0 -106
- package/src/dashboard/react/components/NotificationCenter.test.tsx +0 -76
- package/src/dashboard/react/components/NotificationCenter.tsx +0 -111
- package/src/dashboard/react/components/PullRequestBadges.tsx +0 -18
- package/src/dashboard/react/components/TaskDetail.test.tsx +0 -255
- package/src/dashboard/react/components/TaskDetail.tsx +0 -271
- package/src/dashboard/react/components/UsagePanel.tsx +0 -96
- package/src/dashboard/react/index.html +0 -15
- package/src/dashboard/react/main.tsx +0 -12
- package/src/dashboard/react/overlay-state.test.ts +0 -110
- package/src/dashboard/react/overlay-state.ts +0 -60
- package/src/dashboard/react/presentation.test.tsx +0 -571
- package/src/dashboard/styles.css +0 -261
- package/src/dashboard-control.js +0 -34
- package/src/dashboard-manager.js +0 -339
- package/src/dashboard-session-process.js +0 -88
- package/src/dashboard-session.js +0 -86
- package/src/dashboard.js +0 -1303
- package/src/delegation.js +0 -277
- package/src/github.js +0 -107
- package/src/model-roles.js +0 -70
- package/src/recorded-usage-tracker.js +0 -92
- package/src/usage-tracker.js +0 -650
- package/src/usage.js +0 -367
- package/src/workspace-path.js +0 -48
- package/src/workspace.js +0 -3629
- /package/src/{dashboard/react → ui}/components/AnimatedUsage.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/CardStatusIcons.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ImageGallery.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/OpenChatButton.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/OpenChatButton.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/PrGlyph.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/QueuedPrompts.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/QueuedPrompts.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyCover.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyCover.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyImagePreview.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyMarkdown.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyMarkdown.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/SavedUsageFormat.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/SavedUsageFormat.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ShimmerText.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/StatsGrid.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/StatusBadge.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskBoard.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskCardStats.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskCardStats.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TurnContent.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/fixtures.ts +0 -0
- /package/src/{dashboard → ui}/github-links.js +0 -0
- /package/src/{dashboard/react → ui}/image-cache.test.ts +0 -0
- /package/src/{dashboard/react → ui}/image-cache.ts +0 -0
- /package/src/{dashboard → ui}/state.js +0 -0
- /package/src/{dashboard/react → ui}/styles.css +0 -0
- /package/src/{dashboard/react → ui}/test-setup.ts +0 -0
- /package/src/{dashboard → ui}/time.js +0 -0
- /package/src/{dashboard/react → ui}/types.ts +0 -0
package/docs/dashboard-ui.md
DELETED
|
@@ -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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|