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.
- package/.codex-plugin/plugin.json +7 -10
- package/.mcp.json +3 -2
- package/README.md +31 -158
- package/docs/mcp-app.md +3 -3
- 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 +2 -2
- 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 +0 -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
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# Project index operations
|
|
2
|
-
|
|
3
|
-
Resolve the plugin root and use its CLI as described in SKILL.md.
|
|
4
|
-
|
|
5
|
-
## Index Codex projects
|
|
6
|
-
|
|
7
|
-
TaskChef's project index is the local list of Codex projects available for
|
|
8
|
-
delegation. It stores canonical paths and routing metadata such as curated
|
|
9
|
-
names, descriptions, Git status, and GitHub repositories. It does not index
|
|
10
|
-
repository contents or create a second kind of project.
|
|
11
|
-
|
|
12
|
-
For a whole-project refresh, pass the agent's single native schema-2
|
|
13
|
-
`list_projects` snapshot to `reconcile_projects`. TaskChef validates local
|
|
14
|
-
`hostId: local` entries, canonicalizes each path, isolates per-project failures,
|
|
15
|
-
adds new eligible paths, and binds native project IDs only by exact same-host
|
|
16
|
-
canonical path. It preserves curated names, descriptions, and complete
|
|
17
|
-
repository lists. Missing native entries are retained; duplicate identities,
|
|
18
|
-
duplicate canonical targets, and identity/path moves return diagnostics.
|
|
19
|
-
|
|
20
|
-
Index only Codex projects local to the TaskChef workspace's execution host.
|
|
21
|
-
Remote connection projects are outside the v1 contract. Never index the
|
|
22
|
-
TaskChef dispatcher workspace or a directory containing it; the dispatcher is
|
|
23
|
-
the inbox, while indexed Codex projects own delegated work.
|
|
24
|
-
|
|
25
|
-
### Existing Codex project
|
|
26
|
-
|
|
27
|
-
1. List native local Codex projects once. Resolve the requested existing folder
|
|
28
|
-
with `realpath` and require an exact canonical-path match in that list. A
|
|
29
|
-
similar name, a parent or child directory, and a remote connection project
|
|
30
|
-
are not matches.
|
|
31
|
-
2. Index the exact path with the existing `project add <canonical-path> --name
|
|
32
|
-
<curated-name> --description <curated-description> --json` CLI workflow.
|
|
33
|
-
Despite the command's historical `add` name, this writes one TaskChef index
|
|
34
|
-
entry for an existing Codex project. The CLI detects Git status, the exact
|
|
35
|
-
Git root, and a canonical GitHub `origin` when no repository option is
|
|
36
|
-
supplied. Repeated `--github-repo <canonical-url>` arguments replace that
|
|
37
|
-
detection and form the complete advertised repository list, so repeat the
|
|
38
|
-
origin explicitly when it should remain routable. Use `--no-github` when the
|
|
39
|
-
user intentionally wants an empty list.
|
|
40
|
-
3. Run `project list --json` and require one indexed entry with the exact
|
|
41
|
-
canonical path and intended routing metadata. Only then report that the
|
|
42
|
-
Codex project is ready for delegation through TaskChef.
|
|
43
|
-
|
|
44
|
-
### New or not-yet-saved Codex folder
|
|
45
|
-
|
|
46
|
-
1. Create the folder only when the user explicitly asked to create it. Preserve
|
|
47
|
-
unrelated existing contents. Do not initialize Git unless requested or
|
|
48
|
-
clearly required by the user's broader task. Resolve the resulting existing
|
|
49
|
-
folder with `realpath`.
|
|
50
|
-
2. Register or open that exact canonical folder with the supported
|
|
51
|
-
`<validated-codex-cli> app <canonical-path>` mechanism. Reuse a validated CLI
|
|
52
|
-
path supplied by the current Codex Desktop environment when available. Use
|
|
53
|
-
the same resolver contract as `workspace init --register-codex` otherwise:
|
|
54
|
-
an explicit `--codex-cli` path takes precedence over `TASKCHEF_CODEX_CLI`;
|
|
55
|
-
each must resolve to an executable that passes `app --help`. Without an
|
|
56
|
-
override, inspect `codex` executables from `PATH`, prefer a validated
|
|
57
|
-
candidate whose path contains `Contents/Resources`, and otherwise validate
|
|
58
|
-
only the first executable `codex` in PATH order. Never assume an arbitrary
|
|
59
|
-
shell `codex`, invoke `codex add`, or hard-code an application bundle path.
|
|
60
|
-
3. Re-list native local Codex projects and require an exact canonical-path
|
|
61
|
-
match. Opening is a request, not proof that Codex saved the project. If the
|
|
62
|
-
exact match is absent, report that the folder was opened or registration was
|
|
63
|
-
requested but Codex registration remains unverified; do not index it in
|
|
64
|
-
TaskChef or call it delegation-ready.
|
|
65
|
-
4. After Codex verification, index the project as in the existing-project path.
|
|
66
|
-
Run `project list --json` and verify the exact TaskChef index entry. Report
|
|
67
|
-
delegation readiness only after both the native Codex match and TaskChef
|
|
68
|
-
indexing are verified.
|
|
69
|
-
|
|
70
|
-
For a managed `*-workspace` Codex project, advertise every relevant child or
|
|
71
|
-
subrepository with repeated `--github-repo <canonical-github-url>` arguments,
|
|
72
|
-
including the workspace repository itself when it can own issue or pull-request
|
|
73
|
-
links. These explicit values are the complete list; automatic origin detection
|
|
74
|
-
does not supplement them. This lets TaskChef route each canonical GitHub URL to
|
|
75
|
-
the correct workspace rather than guessing from the folder name.
|
|
76
|
-
|
|
77
|
-
### Reindex after Codex changes
|
|
78
|
-
|
|
79
|
-
When the user asks TaskChef to reindex or catch up after saving more projects in
|
|
80
|
-
Codex, list native projects once and call `reconcile_projects` once with that
|
|
81
|
-
exact snapshot. After reconciliation, run `project list --json` once and
|
|
82
|
-
verify every intended canonical path and its routing metadata before reporting
|
|
83
|
-
the index as current.
|
|
84
|
-
|
|
85
|
-
Do not call `project add` for a path already in the TaskChef index; it rejects
|
|
86
|
-
duplicate paths and must not be presented as a metadata refresh. Preserve
|
|
87
|
-
existing curated entries, and do not remove entries merely because they are
|
|
88
|
-
absent from the current Codex list. Refreshing or removing an existing entry
|
|
89
|
-
requires an explicit user request and the project-management workflows below.
|
|
90
|
-
|
|
91
|
-
## Manage the project index
|
|
92
|
-
|
|
93
|
-
Before every mutation, run project list --json and retain the complete
|
|
94
|
-
normalized project set, count, and configHash. Use project update for changes
|
|
95
|
-
to one existing entry, including replacing its complete githubRepos list.
|
|
96
|
-
Never use whole-index replacement to edit one entry.
|
|
97
|
-
|
|
98
|
-
Run destructive replacement or removal first with --dry-run. Present the
|
|
99
|
-
complete diff and exact removed project names to the user and obtain explicit
|
|
100
|
-
permission for those removals. Apply only with the preview's config hash,
|
|
101
|
-
before/after counts, plan hash, exact removed-name JSON file, and count-collapse
|
|
102
|
-
confirmation when requested. A request to remove a repository URL is not
|
|
103
|
-
permission to remove a project entry. Do not use a generic force or yes flag.
|
|
104
|
-
|
|
105
|
-
1. Bulk import with `project import <file|-> --json`. Input is a JSON array of
|
|
106
|
-
objects containing `path` plus optional `name`, `description`, and
|
|
107
|
-
`githubRepos`, which is always a JSON array of GitHub repository URLs. Before
|
|
108
|
-
importing, list native local Codex projects once, canonicalize every input
|
|
109
|
-
path, and require an exact local-project match for every entry. Reject or
|
|
110
|
-
report every unmatched path instead of indexing it. Import merges by
|
|
111
|
-
canonical path, preserves an existing name or description when omitted, and
|
|
112
|
-
unions existing and imported repository lists without duplicates. Use
|
|
113
|
-
`--replace` only when the user explicitly requests replacement. Run
|
|
114
|
-
`project list --json` afterward and compare the complete project set with the
|
|
115
|
-
expected post-state. Verify every imported entry and prove all unrelated
|
|
116
|
-
entries are unchanged; matching counts alone are insufficient.
|
|
117
|
-
2. Inspect indexed projects with project list --json. Update one entry with
|
|
118
|
-
project update; explicit repository arguments are the complete replacement
|
|
119
|
-
list. Remove by name only through the preview-bound workflow. Existing task
|
|
120
|
-
entries keep their project snapshots.
|
|
121
|
-
3. On any postcondition mismatch, stop, report the failure, and offer backup
|
|
122
|
-
list plus a restore dry-run. Never restore automatically.
|
|
123
|
-
|
|
124
|
-
Example managed-workspace import entry:
|
|
125
|
-
|
|
126
|
-
```json
|
|
127
|
-
{
|
|
128
|
-
"name": "skills-workspace",
|
|
129
|
-
"path": "/workspace/skills-workspace",
|
|
130
|
-
"githubRepos": [
|
|
131
|
-
"https://github.com/example/skill-one",
|
|
132
|
-
"https://github.com/example/skill-two"
|
|
133
|
-
],
|
|
134
|
-
"description": "Manages the listed child skill repositories."
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
TaskChef accepts configuration schema version 2 only. Its optional exact
|
|
139
|
-
`dashboard` object contains boolean `autostart`; absence means enabled and
|
|
140
|
-
`false` opts out of MCP-lifecycle dashboard startup without disabling manual
|
|
141
|
-
`$taskchef-dashboard` recovery. `githubRepos` is always an array; unsupported
|
|
142
|
-
configuration is rejected without being rewritten.
|
|
143
|
-
|
|
144
|
-
Schema 2 also accepts an optional strict `projectIndex` object holding local
|
|
145
|
-
native identity bindings, explicit exclusions, and bounded routing hints.
|
|
146
|
-
Absence means empty state. Removing a project records an exclusion so later
|
|
147
|
-
reconciliation cannot silently re-add it; an explicit `include_project` clears
|
|
148
|
-
that exclusion. Aliases require explicit user selection. Repository facts
|
|
149
|
-
require an inspected exact origin, including a contained Git root when a
|
|
150
|
-
workspace owns child repositories. Report-derived responsibilities retain the
|
|
151
|
-
accepted task, thread, and turn as compact provenance. Forgetting retains a
|
|
152
|
-
bounded suppression entry so an old report retry cannot recreate the fact.
|
|
153
|
-
Older TaskChef releases reject configurations containing `projectIndex`;
|
|
154
|
-
downgrade by restoring a compatible backup rather than editing live state.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: taskchef-copilot
|
|
3
|
-
description: "Explain TaskChef outcomes from cached briefs or continue an explicitly selected assignment in its existing task. Handles historical $taskchef-report requests; dashboard monitoring is separate."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TaskChef Copilot
|
|
7
|
-
|
|
8
|
-
Act as TaskChef's conversational coordination assistant. Give a concise brief
|
|
9
|
-
about finished work, attention, cause, and the safest next action. The dashboard
|
|
10
|
-
is the primary place to browse and monitor the task history.
|
|
11
|
-
|
|
12
|
-
Resolve this skill directory with `realpath`. The TaskChef plugin root is two
|
|
13
|
-
parents above it. Invoke `<plugin-root>/bin/taskchef.js` for deterministic
|
|
14
|
-
TaskChef data reads.
|
|
15
|
-
|
|
16
|
-
## Cached brief first
|
|
17
|
-
|
|
18
|
-
1. Select the smallest scope that answers the request:
|
|
19
|
-
- exact task: `task brief <task-id> --json`;
|
|
20
|
-
- configured project: `task brief --project <name-or-path> --json`;
|
|
21
|
-
- overview: `task brief --json`.
|
|
22
|
-
Use `task list --json` once only when a title or description must first be
|
|
23
|
-
matched. Ask when multiple tasks plausibly match.
|
|
24
|
-
2. Treat the returned schema-1 brief as the stable model. Do not interpret raw
|
|
25
|
-
task-log schema versions or read `tasks.jsonl` directly. The brief already
|
|
26
|
-
normalizes state, current summary, explicitly historical `lastOutcome`,
|
|
27
|
-
attention, next action, interrupted-turn count, link-pending identity, and
|
|
28
|
-
the default seven-day overview window. Never present `lastOutcome` as the
|
|
29
|
-
result of a newer working request.
|
|
30
|
-
3. Lead with the useful answer: what finished, what needs attention, why, and
|
|
31
|
-
what action should happen next. Keep overviews short and mention the omitted
|
|
32
|
-
old-terminal count when nonzero. Link or identify the exact existing
|
|
33
|
-
executor task when its durable thread ID is available.
|
|
34
|
-
|
|
35
|
-
## Live verification is exceptional
|
|
36
|
-
|
|
37
|
-
Use native Codex metadata only when the user explicitly asks for a fresh,
|
|
38
|
-
current, or live verification, or when a focused task has a meaningful
|
|
39
|
-
contradiction such as the user observing activity that conflicts with the
|
|
40
|
-
cached brief.
|
|
41
|
-
|
|
42
|
-
- Take one bounded metadata snapshot and match only the exact stored thread ID.
|
|
43
|
-
- For one focused task, read that exact existing task once when the user
|
|
44
|
-
explicitly requests live verification or when needed to resolve a meaningful
|
|
45
|
-
contradiction. Do not read transcripts or classify assistant prose.
|
|
46
|
-
- Active or native-approval state may override the cached presentation. An
|
|
47
|
-
inactive task does not prove semantic completion. If verification fails,
|
|
48
|
-
present the cached brief with a freshness warning.
|
|
49
|
-
- Never poll, wait, repeatedly refresh, or perform a broad exhaustive live
|
|
50
|
-
audit.
|
|
51
|
-
|
|
52
|
-
## Coordination and continuation
|
|
53
|
-
|
|
54
|
-
- Explain or draft a focused follow-up for the exact existing executor task.
|
|
55
|
-
- Continue that task only after the user explicitly authorizes sending the
|
|
56
|
-
follow-up. A direct imperative naming the exact existing task is explicit
|
|
57
|
-
send authorization. Re-read the exact target immediately before sending and
|
|
58
|
-
preserve its durable identity.
|
|
59
|
-
- Never automatically retry a failure, interrupt a working task, or redelegate
|
|
60
|
-
an existing executor as a new task.
|
|
61
|
-
- Explain project-index warnings and suggest read-only backup list, verify, or
|
|
62
|
-
restore-preview commands. Never restore state without explicit user approval.
|
|
63
|
-
- A missing executor link calls for passive waiting or identity inspection,
|
|
64
|
-
not a retry, continuation, or reason to create another executor.
|
|
65
|
-
- Keep same-assignment follow-up in the existing executor task. Independent new
|
|
66
|
-
work with its own outcome belongs to `$taskchef-delegate`.
|
|
67
|
-
- If scope is mixed, separate the proposed existing-task follow-up from the new
|
|
68
|
-
work and ask for authorization before either mutation.
|
|
69
|
-
|
|
70
|
-
## Historical invocation
|
|
71
|
-
|
|
72
|
-
`taskchef-report` was renamed rather than retained as a packaged alias because
|
|
73
|
-
a second discoverable skill would preserve ambiguous reporting behavior. If a
|
|
74
|
-
user explicitly writes `$taskchef-report`, briefly note the rename and fulfill
|
|
75
|
-
the request through this cached-first copilot workflow.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: taskchef-dashboard
|
|
3
|
-
description: "Ensure and recover the canonical TaskChef dashboard. Use when the user asks to start, restore, open, or get the link for the TaskChef dashboard. Do not use to dispatch work or inspect task outcomes."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TaskChef Dashboard
|
|
7
|
-
|
|
8
|
-
Maintain only the canonical TaskChef dashboard.
|
|
9
|
-
|
|
10
|
-
1. Call the TaskChef `ensure_dashboard` MCP tool with its empty input. Do not
|
|
11
|
-
supply a workspace, host, or port.
|
|
12
|
-
2. Report whether the returned `action` is `started` or `reused` and provide
|
|
13
|
-
the returned canonical URL as a clickable link.
|
|
14
|
-
3. If the user asked to open the dashboard and an in-app browser navigation
|
|
15
|
-
capability is available and permits the returned localhost URL, open or
|
|
16
|
-
navigate to it. Browser absence, refusal, or blocked localhost navigation is
|
|
17
|
-
non-fatal: still return the clickable URL and the ensure result.
|
|
18
|
-
|
|
19
|
-
“Recover the dashboard” means restore server availability. Data recovery uses
|
|
20
|
-
the explicit taskchef backup restore --dry-run workflow, shows a diff, requires
|
|
21
|
-
user approval, and never runs automatically.
|
|
22
|
-
|
|
23
|
-
Do not dispatch project work, read task briefs, inspect executor outcomes, poll,
|
|
24
|
-
start a separate foreground CLI server, or modify TaskChef workspace files.
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: taskchef-delegate
|
|
3
|
-
description: "Dispatch work received in the canonical TaskChef workspace into Codex tasks. Elsewhere, use only for explicit delegation of separate work; an existing executor keeps its assignment."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TaskChef Delegate
|
|
7
|
-
|
|
8
|
-
Create stable visible TaskChef parent tasks through the canonical per-user
|
|
9
|
-
TaskChef data workspace and return immediately.
|
|
10
|
-
|
|
11
|
-
## Invocation boundary
|
|
12
|
-
|
|
13
|
-
A task whose initial structured `codexDelegation.input` contains either the
|
|
14
|
-
exact new trailing `$taskchef-executor` invocation plus final TaskChef marker,
|
|
15
|
-
an accepted former trailing marker-plus-invocation scaffold, an exact
|
|
16
|
-
first-line HTML marker, or the historical first-line
|
|
17
|
-
`# taskchef_id=<full UUID>` heading already owns that delegated assignment.
|
|
18
|
-
This includes former inline-protocol tasks that lack the skill invocation.
|
|
19
|
-
An owned instruction must have exactly one accepted marker and a non-whitespace
|
|
20
|
-
task-specific assignment. If it contains an executor-skill invocation, require
|
|
21
|
-
exactly one adjacent to the marker in an accepted order. Marker-only,
|
|
22
|
-
duplicate-marker, scaffold-only, or misplaced-invocation inputs are not valid
|
|
23
|
-
delegated tasks. Execute a valid one in the current task. Do not re-dispatch it
|
|
24
|
-
merely because it concerns TaskChef or a configured project. Explicit requests
|
|
25
|
-
to delegate separate work remain valid.
|
|
26
|
-
|
|
27
|
-
Use the bundled `reconcile_projects`, `prepare_dispatch`, `record_task`, and
|
|
28
|
-
`report_state` MCP tools directly. Never fall back to shell writes. If a
|
|
29
|
-
required tool is unavailable, stop and report that the TaskChef plugin must be
|
|
30
|
-
reloaded or installed.
|
|
31
|
-
|
|
32
|
-
## Boundaries
|
|
33
|
-
|
|
34
|
-
- Treat only AGENTS.md, taskchef.json, tasks.jsonl, config-audit.jsonl, and
|
|
35
|
-
TaskChef's private backups and maintenance artifacts as managed dispatcher
|
|
36
|
-
state. Preserve unrelated user-owned paths.
|
|
37
|
-
- Use real Codex tasks for visible delegated work. The dispatcher never uses
|
|
38
|
-
collaboration or subagent tools; the created executor may use them internally.
|
|
39
|
-
- Never use hooks, schedules, daemons, background monitors, recent-task
|
|
40
|
-
searches, transcripts, hidden reasoning, or polling for identity.
|
|
41
|
-
- Never wait for delegated work after native creation.
|
|
42
|
-
- Treat executor-supplied identity as a cooperative assertion in TaskChef's
|
|
43
|
-
local single-user trust boundary, not transport-authenticated proof.
|
|
44
|
-
|
|
45
|
-
## Dispatch
|
|
46
|
-
|
|
47
|
-
1. Split the request into the smallest independently useful outcomes. Include
|
|
48
|
-
constraints, expected testing, and reporting in every instruction.
|
|
49
|
-
2. List native Codex projects once. Pass that exact schema-2 snapshot to
|
|
50
|
-
`reconcile_projects` once for the complete batch, then call
|
|
51
|
-
`prepare_dispatch` exactly once per outcome. Never reuse a task ID or marker.
|
|
52
|
-
Do not take a pre-creation thread snapshot.
|
|
53
|
-
3. Route against configured project `name`, `description`, canonical
|
|
54
|
-
`githubRepos`, and the preparation's bounded aliases, repository ownership,
|
|
55
|
-
and responsibilities. Use `path` only as checkout identity. Before
|
|
56
|
-
`record_task` or native creation, require exactly one entry in the
|
|
57
|
-
reconciliation's `available` array whose `hostId`, `projectId`, and canonical
|
|
58
|
-
`path` exactly match the selected native project. A matching snapshot path or
|
|
59
|
-
configured preparation alone does not establish eligibility. Treat a missing
|
|
60
|
-
entry or duplicate learned matches as ambiguous and ask instead of guessing.
|
|
61
|
-
Select the `orchestrator` preference from preparation for every visible
|
|
62
|
-
parent. Resolve explicit choices and follow
|
|
63
|
-
[model roles](references/model-roles.md). Missing configuration means omit
|
|
64
|
-
model overrides; surface invalid or unavailable configuration before
|
|
65
|
-
recording the task.
|
|
66
|
-
4. Build each executor instruction in this exact shape:
|
|
67
|
-
|
|
68
|
-
- Begin with the actual assignment on the first line and keep its complete
|
|
69
|
-
body uninterrupted.
|
|
70
|
-
- After the assignment, add one blank line and this authorization paragraph:
|
|
71
|
-
`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.`
|
|
72
|
-
- After that paragraph, add exactly two newline characters
|
|
73
|
-
so there is one blank line before this invocation on its own line:
|
|
74
|
-
`Use $taskchef-executor to execute and report this delegated TaskChef assignment.`
|
|
75
|
-
- Immediately after the invocation, end the instruction with one newline
|
|
76
|
-
and the preparation's exact marker on its own final line. Do not add a
|
|
77
|
-
blank line between the invocation and marker.
|
|
78
|
-
- Include exactly one marker and exactly one executor-skill invocation.
|
|
79
|
-
- Do not inline executor ownership, identity, linking, or result-reporting
|
|
80
|
-
protocol. The explicitly invoked executor skill owns those mechanics.
|
|
81
|
-
|
|
82
|
-
5. Before creating each executor, call `record_task` exactly once with `id`,
|
|
83
|
-
`project`, `title`, the exact marked `instruction`, and `threadId: null`.
|
|
84
|
-
Pass the selected configured project's canonical `path` as `project`, not
|
|
85
|
-
its name, label, or native project ID. Require a successful tool result
|
|
86
|
-
whose returned `task.id` equals the prepared task ID before native creation.
|
|
87
|
-
If recording fails or cannot be confirmed, report the failure and stop;
|
|
88
|
-
do not create an executor with an unrecorded task marker.
|
|
89
|
-
6. Create one real Codex task using the exact configured project, an appropriate
|
|
90
|
-
native environment, the marked instruction, a short title, and the resolved
|
|
91
|
-
orchestrator model and effort overrides when present.
|
|
92
|
-
7. Return immediately. Preserve a returned provisional client ID only for the
|
|
93
|
-
created-thread directive. Do not call `link_task` from the dispatcher even
|
|
94
|
-
when creation returns a durable ID; the child must self-link.
|
|
95
|
-
8. If creation fails after recording, generate a fresh UUID and call
|
|
96
|
-
`report_state` with it as `turnRef`, `failed`, null thread and Codex turn IDs,
|
|
97
|
-
and a bounded summary before returning the failure. Retain that UUID for an
|
|
98
|
-
exact retry.
|
|
99
|
-
|
|
100
|
-
When the user explicitly selects or corrects a project name or alias, call
|
|
101
|
-
`update_project_hint` with explicit-user evidence after routing. A guessed
|
|
102
|
-
route, generic keywords, or ordinary task wording is never learning evidence.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Model roles
|
|
2
|
-
|
|
3
|
-
TaskChef reads optional personal role preferences from native Codex agent TOML
|
|
4
|
-
in `$CODEX_HOME/agents/` (default `~/.codex/agents/`). Only model and reasoning
|
|
5
|
-
effort are adapted; TaskChef does not load the files' instructions, tools, or
|
|
6
|
-
permissions.
|
|
7
|
-
|
|
8
|
-
For a new visible task, select `orchestrator` from the `modelRoles` returned by
|
|
9
|
-
`prepare_dispatch`. Pass its `taskOverrides` as the native task's `model` and
|
|
10
|
-
`thinking` only after checking that the current creation interface supports
|
|
11
|
-
them. Missing configuration means omit both overrides. Invalid or unavailable
|
|
12
|
-
configuration must be reported rather than silently ignored.
|
|
13
|
-
|
|
14
|
-
Explicit user choices take precedence. An explicit model without an explicit
|
|
15
|
-
effort omits effort; do not combine it with a configured effort from another
|
|
16
|
-
model. To resolve an explicit choice, run the packaged resolver before creating
|
|
17
|
-
the task:
|
|
18
|
-
|
|
19
|
-
```sh
|
|
20
|
-
python3 <plugin-root>/scripts/roles/resolve_roles.py --role orchestrator --model <model> [--effort <effort>]
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Resolve `<plugin-root>` from this skill's installed path. Omit flags the user
|
|
24
|
-
did not specify. The local model catalog is advisory; the current native tool
|
|
25
|
-
is authoritative about supported model and effort values.
|
|
26
|
-
|
|
27
|
-
The visible executor resolves Planner, Implementer, and Reviewer preferences
|
|
28
|
-
itself when it starts those subagents. The dispatcher does not create or wait
|
|
29
|
-
for those children.
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: taskchef-executor
|
|
3
|
-
description: "Execute and report a TaskChef assignment or follow-up when explicitly invoked or carrying an accepted TaskChef marker. Owns executor identity and per-turn lifecycle; not dispatch or reporting on other tasks."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TaskChef Executor
|
|
7
|
-
|
|
8
|
-
Own and execute the delegated assignment in the current Codex task. Do not
|
|
9
|
-
re-dispatch it merely because it concerns TaskChef or a configured project.
|
|
10
|
-
Explicit requests to delegate separate work remain valid.
|
|
11
|
-
|
|
12
|
-
New instructions present the complete assignment first, then the reporting
|
|
13
|
-
authorization paragraph, followed by exactly two newline characters (one blank
|
|
14
|
-
line), the explicit skill invocation, one newline, and the exact
|
|
15
|
-
`<!-- taskchef_id=<full UUID> -->` marker on the final line.
|
|
16
|
-
There is no blank line between the invocation and marker.
|
|
17
|
-
Treat that UUID as the TaskChef task ID.
|
|
18
|
-
The authorization, invocation, and marker are lifecycle scaffolding, not part
|
|
19
|
-
of the deliverable. Require non-whitespace task-specific content beyond them.
|
|
20
|
-
For historical first-line markers, marker-before-invocation forms, compact or
|
|
21
|
-
pre-authorization prompts, former inline protocol, or an installation exposing only `report_result`, read
|
|
22
|
-
[compatibility](references/compatibility.md) before interpreting the assignment.
|
|
23
|
-
Require exactly one marker and do not infer an ID from similar prose.
|
|
24
|
-
|
|
25
|
-
## Start every execution turn
|
|
26
|
-
|
|
27
|
-
Complete this lifecycle setup before substantive assignment work:
|
|
28
|
-
|
|
29
|
-
1. Read this task's own durable Codex thread ID from `CODEX_THREAD_ID`. Never
|
|
30
|
-
use `CODEX_SESSION_ID`, `sourceThreadId`, a parent or delegator ID,
|
|
31
|
-
inherited metadata, title matching, recent-task search, transcripts, or a
|
|
32
|
-
provisional client ID.
|
|
33
|
-
2. On the initial turn, call TaskChef `link_task` with the marked task ID and
|
|
34
|
-
that exact thread ID as the first TaskChef action. An identical retry is
|
|
35
|
-
idempotent. On a follow-up, retry the same link only when the prior link
|
|
36
|
-
cannot be established from the task context.
|
|
37
|
-
3. Establish this prompt's lifecycle identity before reporting. If this exact
|
|
38
|
-
Codex thread can be read natively and exposes the current turn ID, use that
|
|
39
|
-
exact value for both `turnRef` and `turnId`. Otherwise generate one fresh
|
|
40
|
-
UUID locally, retain it for this entire prompt, use it as `turnRef`, and use
|
|
41
|
-
`turnId: null`. Do not infer a native ID, reuse an earlier prompt's
|
|
42
|
-
`turnRef`, or let a retry generate a replacement UUID.
|
|
43
|
-
4. Call TaskChef `report_state` with the marked task ID, self-linked thread ID,
|
|
44
|
-
this prompt's `turnRef` and optional Codex `turnId`, `status: working`, an
|
|
45
|
-
omitted or null result summary, and a concise `requestSummary` describing this turn's assignment or follow-up.
|
|
46
|
-
When the turn targets a known GitHub repository, include its canonical
|
|
47
|
-
`https://github.com/<owner>/<repository>` URL so multi-repository projects
|
|
48
|
-
retain the selected repository instead of leaving TaskChef to guess.
|
|
49
|
-
|
|
50
|
-
If the preceding TaskChef turn is still unfinished because its terminal report
|
|
51
|
-
was lost, this newer valid working report atomically records that predecessor
|
|
52
|
-
as interrupted and starts the current turn. Continue the real assignment from
|
|
53
|
-
the current request. Do not manufacture a semantic `failed` result for the old
|
|
54
|
-
turn and do not retry an old terminal report.
|
|
55
|
-
|
|
56
|
-
If `CODEX_THREAD_ID` or a required TaskChef tool is unavailable, or if linking
|
|
57
|
-
or the working-state report fails, report the failure visibly and stop before
|
|
58
|
-
substantive work. Native turn reading is optional because the retained fallback
|
|
59
|
-
UUID is the lifecycle identity. Retry a possibly lost working callback with the
|
|
60
|
-
same `turnRef`; never generate a replacement for the same prompt or bypass a
|
|
61
|
-
link-pending state.
|
|
62
|
-
|
|
63
|
-
## Coordinate the assignment
|
|
64
|
-
|
|
65
|
-
Keep this visible task as the stable owner of the assignment and its follow-ups.
|
|
66
|
-
For repository work, use these tight routes:
|
|
67
|
-
|
|
68
|
-
- An explicit investigate-or-plan-and-implement request starts a fresh Planner,
|
|
69
|
-
then a fresh Implementer, then a fresh Reviewer.
|
|
70
|
-
- A direct implementation request starts a fresh Implementer, then a fresh
|
|
71
|
-
Reviewer; skip the Planner.
|
|
72
|
-
- A later request to implement prior investigation or planning stays in this
|
|
73
|
-
visible task and starts a fresh Implementer, then a fresh Reviewer.
|
|
74
|
-
|
|
75
|
-
Make the Reviewer read-only and cover the complete change. Use the installed
|
|
76
|
-
`$branch-review-subagent-loop` when available or required by repository policy.
|
|
77
|
-
TaskChef tracks only this parent task's lifecycle; do not report child phases or
|
|
78
|
-
identities to TaskChef.
|
|
79
|
-
|
|
80
|
-
Immediately before starting a child, check the Codex agents directory. If it
|
|
81
|
-
contains no TOML files, inherit the parent's model settings without invoking
|
|
82
|
-
Python. Otherwise resolve that role with the packaged resolver and use its
|
|
83
|
-
`subagentOverrides` when valid:
|
|
84
|
-
|
|
85
|
-
```sh
|
|
86
|
-
python3 <plugin-root>/scripts/roles/resolve_roles.py --role <planner|implementer|reviewer>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Resolve `<plugin-root>` from this skill's installed path. Missing configuration
|
|
90
|
-
means inherit the parent's model settings. Surface invalid or unavailable
|
|
91
|
-
configuration instead of silently ignoring it. Give each child only the goal,
|
|
92
|
-
scope, repository or worktree, relevant instructions, and validation expected;
|
|
93
|
-
ask it to return changed files, tests, and blockers. Keep at most one writing
|
|
94
|
-
agent active, verify its result, and use a fresh writer before another review
|
|
95
|
-
when review finds a valid issue.
|
|
96
|
-
|
|
97
|
-
## Finish every execution turn
|
|
98
|
-
|
|
99
|
-
Before ending, call `report_state` with the same `turnRef` and `turnId` values
|
|
100
|
-
used by this prompt's working report, one semantic status, and a concise summary:
|
|
101
|
-
|
|
102
|
-
- `completed` only when the assignment is genuinely complete.
|
|
103
|
-
- `needs_input` only when a semantic decision or missing information must come
|
|
104
|
-
from the user.
|
|
105
|
-
- `failed` when the requested outcome cannot be completed or safely resumed.
|
|
106
|
-
|
|
107
|
-
A live native approval prompt is Codex state, not semantic `needs_input`; leave
|
|
108
|
-
the approval live instead of storing it as a TaskChef result. Never invent or
|
|
109
|
-
reuse a `turnRef` after a follow-up. If a final-report response is lost, an
|
|
110
|
-
identical terminal retry is safe only while the same turn remains current. On
|
|
111
|
-
a later prompt, run the start lifecycle with a new `turnRef`; TaskChef
|
|
112
|
-
will preserve the predecessor as interrupted, and only the new turn may receive
|
|
113
|
-
a semantic result.
|
|
114
|
-
|
|
115
|
-
Claim TaskChef was updated only after verifying the terminal response accepted
|
|
116
|
-
this task, turn, status, and summary. Report failures visibly. If the platform
|
|
117
|
-
rejects an authorized report, describe it as a platform rejection of that
|
|
118
|
-
report; quote only a rationale actually returned. Do not infer the reason,
|
|
119
|
-
promise approval, retry around an explicit denial, or change approval settings.
|
|
120
|
-
Ask the user once and wait for new authorization before retrying a denial.
|
|
121
|
-
|
|
122
|
-
Request and result summaries must omit secrets, transcripts, raw command output, hidden reasoning,
|
|
123
|
-
and unnecessary personal data. Identical lifecycle retries are safe; never
|
|
124
|
-
replace a same-`turnRef` report with different content or let an older turn
|
|
125
|
-
overwrite newer state.
|
|
126
|
-
|
|
127
|
-
After an accepted terminal report, `update_project_hint` may optionally retain
|
|
128
|
-
one concise responsibility when that report coherently establishes it. Supply
|
|
129
|
-
the same task ID, self-linked thread ID, and current turn ref as provenance.
|
|
130
|
-
Repository ownership may be retained only after inspecting the exact selected
|
|
131
|
-
repository or a contained Git root and verifying that exact canonical origin;
|
|
132
|
-
include that repository path with the same accepted task/turn provenance.
|
|
133
|
-
Never learn aliases, scan the transcript, or derive generic keywords here. A
|
|
134
|
-
learning failure is nonfatal to the accepted task result: report it separately
|
|
135
|
-
and do not retry with weaker evidence.
|
|
136
|
-
|
|
137
|
-
## Preserve delivery context
|
|
138
|
-
|
|
139
|
-
Summaries are the durable TaskChef timeline; the dashboard does not scan the
|
|
140
|
-
full Codex transcript later. Include the known repository's canonical
|
|
141
|
-
`https://github.com/<owner>/<repository>` URL in the working `requestSummary`.
|
|
142
|
-
Use full canonical issue or pull-request URLs and include every delivered PR
|
|
143
|
-
in the terminal summary, including both child and workspace PRs when relevant.
|
|
144
|
-
Derive links from established project or remote evidence; never invent links
|
|
145
|
-
or copy unrelated links from earlier turns.
|
|
146
|
-
|
|
147
|
-
## Ending actions
|
|
148
|
-
|
|
149
|
-
Normal completion returns normally after accepted terminal reporting. Never
|
|
150
|
-
archive, hand off, close, navigate away from, or terminate the executor merely
|
|
151
|
-
because work completed. `finish`, `complete`, `done`, `ship`, and ordinary
|
|
152
|
-
cleanup do not authorize archive. Only when the user explicitly requests
|
|
153
|
-
archiving this exact task or another action that can make the executor
|
|
154
|
-
unavailable, read [ending actions](references/ending-actions.md) first.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Compatibility
|
|
2
|
-
|
|
3
|
-
Pre-authorization prompts with the invocation before the final marker use the
|
|
4
|
-
entrypoint lifecycle without requiring a new authorization paragraph.
|
|
5
|
-
|
|
6
|
-
Existing delegated tasks may include the former inline ownership, linking, and
|
|
7
|
-
`report_result` paragraphs. Continue executing those tasks here without
|
|
8
|
-
re-dispatching. Prefer `report_state` when available. If an older installed
|
|
9
|
-
TaskChef exposes only `report_result`, follow its inline protocol; after an
|
|
10
|
-
upgrade, the deprecated `report_result` alias remains available for exact
|
|
11
|
-
legacy retries. Also accept historical trailing instructions that place the
|
|
12
|
-
marker before the invocation, with or without the former blank line before the
|
|
13
|
-
marker; the former compact assignment-to-invocation boundary with the marker
|
|
14
|
-
last; an exact HTML marker on the first line with or without the former blank
|
|
15
|
-
line; or the older exact
|
|
16
|
-
first-line `# taskchef_id=<full UUID>` heading. These compatibility forms do not
|
|
17
|
-
change the identity or lifecycle rules in `SKILL.md`. For either first-line form, the
|
|
18
|
-
assignment follows the marker. Ignore the final executor invocation and any
|
|
19
|
-
recognizable former inline ownership, linking, working-state, or
|
|
20
|
-
result-reporting paragraphs as lifecycle scaffolding; execute the remaining
|
|
21
|
-
task-specific body. Require non-whitespace task-specific content and never
|
|
22
|
-
treat an invocation by itself as an assignment.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Keep terminal reporting ahead of executor-ending actions
|
|
2
|
-
|
|
3
|
-
Normal completion ends with the semantic terminal `report_state` callback and
|
|
4
|
-
then returns normally. Never archive, hand off, close, navigate away from, or
|
|
5
|
-
otherwise terminate the Codex task merely because the work or turn completed.
|
|
6
|
-
An archive is authorized only when the current assignment or follow-up
|
|
7
|
-
explicitly requests archiving this exact Codex task. Words such as `finish`,
|
|
8
|
-
`complete`, `done`, `ship`, and ordinary cleanup do not authorize archive.
|
|
9
|
-
|
|
10
|
-
When archive is explicitly authorized, finish and verify the requested work,
|
|
11
|
-
read the exact task identity required by this protocol, submit the terminal
|
|
12
|
-
`report_state` callback for the current `turnRef`, and verify that TaskChef
|
|
13
|
-
accepted the terminal state. Only then call the native Codex archive operation.
|
|
14
|
-
Archive must be the final state-changing action, and native confirmation is
|
|
15
|
-
required before claiming it succeeded.
|
|
16
|
-
|
|
17
|
-
Apply the same terminal-callback-first rule when the user explicitly requests
|
|
18
|
-
another action that can make this executor unavailable before it reports, such
|
|
19
|
-
as handing off the task or terminating or restarting the process that owns the
|
|
20
|
-
TaskChef MCP transport. This ordering rule does not authorize any such action.
|
|
21
|
-
If terminal reporting fails, do not archive or perform the requested
|
|
22
|
-
executor-ending action; leave the executor accessible and report the lifecycle
|
|
23
|
-
failure visibly. If terminal reporting succeeds but the later action fails,
|
|
24
|
-
preserve the accepted `completed`, `failed`, or `needs_input` state, report only
|
|
25
|
-
the later action's failure, and do not reopen the lifecycle or report `working`
|
|
26
|
-
again.
|