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,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,4 +0,0 @@
1
- interface:
2
- display_name: "TaskChef Copilot"
3
- short_description: "Explain outcomes and recommend next actions"
4
- default_prompt: "Use $taskchef-copilot to give a concise cached brief of TaskChef work and recommend the safest next action."
@@ -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,4 +0,0 @@
1
- interface:
2
- display_name: "TaskChef Dashboard"
3
- short_description: "Start or recover the TaskChef dashboard"
4
- default_prompt: "Use $taskchef-dashboard to ensure the TaskChef dashboard is available and give me its link."
@@ -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,4 +0,0 @@
1
- interface:
2
- display_name: "TaskChef Delegate"
3
- short_description: "Dispatch work into visible Codex tasks"
4
- default_prompt: "Use $taskchef-delegate to route this request into independently openable Codex tasks."
@@ -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,4 +0,0 @@
1
- interface:
2
- display_name: "TaskChef Executor"
3
- short_description: "Run and report a delegated TaskChef assignment."
4
- default_prompt: "Use $taskchef-executor to execute and report this delegated TaskChef assignment."
@@ -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.