taskchef 8.7.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +21 -4
  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 +4 -4
  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 +2 -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,7 +1,7 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "8.7.0",
4
- "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
3
+ "version": "9.0.0",
4
+ "description": "Native Codex dashboard with lightweight project delegation.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
7
7
  "url": "https://github.com/favoyang"
@@ -11,16 +11,16 @@
11
11
  "license": "Apache-2.0",
12
12
  "keywords": [
13
13
  "codex",
14
- "delegation",
15
- "dispatcher",
14
+ "dashboard",
15
+ "usage",
16
16
  "tasks"
17
17
  ],
18
18
  "skills": "./skills/",
19
19
  "mcpServers": "./.mcp.json",
20
20
  "interface": {
21
21
  "displayName": "TaskChef",
22
- "shortDescription": "Dispatch work to the right Codex project task.",
23
- "longDescription": "Route work to visible Codex project tasks, monitor them in the dashboard, and get concise cached-first coordination briefs.",
22
+ "shortDescription": "See your Codex chats, usage, and pull requests.",
23
+ "longDescription": "A native dashboard for local Codex chats with usage estimates, pull request status, queued prompts, and schedules. Delegate work through native Codex project tools.",
24
24
  "developerName": "Favo Yang",
25
25
  "category": "Productivity",
26
26
  "capabilities": [
@@ -29,10 +29,7 @@
29
29
  ],
30
30
  "websiteURL": "https://github.com/favoyang/taskchef",
31
31
  "defaultPrompt": [
32
- "$taskchef-bootstrap Set up TaskChef and index my local Codex projects.",
33
- "$taskchef-delegate Do X in Y project.",
34
- "$taskchef-dashboard Ensure and open the TaskChef dashboard.",
35
- "$taskchef-copilot Summarize recent delegated work and tell me what needs attention."
32
+ "$taskchef:delegate Do X in Y project."
36
33
  ],
37
34
  "brandColor": "#D97706",
38
35
  "composerIcon": "./assets/taskchef.svg",
package/.mcp.json CHANGED
@@ -2,9 +2,10 @@
2
2
  "mcpServers": {
3
3
  "taskchef": {
4
4
  "command": "node",
5
- "args": ["./mcp/server.js"],
5
+ "args": [
6
+ "./mcp/server.js"
7
+ ],
6
8
  "cwd": ".",
7
- "env_vars": ["TASKCHEF_WORKSPACE"],
8
9
  "tool_timeout_sec": 30
9
10
  }
10
11
  }
package/README.md CHANGED
@@ -1,173 +1,46 @@
1
1
  # TaskChef
2
2
 
3
- **Less time managing tasks. More time moving them forward.**
3
+ A native dashboard for your Codex chats. See running work, questions that need
4
+ answers, queued prompts, usage estimates, schedules, and pull request status.
5
+ Chats appear regardless of how they were started.
4
6
 
5
- When work spans several Codex projects, you have to choose the right project,
6
- find each conversation again, and check which tasks are waiting for you.
7
- TaskChef gives you one dispatcher conversation as a central place to talk to
8
- agents and delegate work across projects, plus a dashboard for seeing what
9
- needs your attention.
7
+ ## Install
10
8
 
11
- Give TaskChef a GitHub issue or a rough idea. It uses an explicit project name,
12
- the conversation's context, or saved repository mappings to choose a Codex
13
- project; if the destination is unclear, it asks you to choose. TaskChef creates
14
- separate, ordinary Codex tasks in those projects. Each has its own conversation
15
- and native tools, and tasks can run in parallel.
9
+ Install **TaskChef** from the `favoyang-plugins` Codex marketplace. TaskChef uses
10
+ a local Node.js MCP server; Node.js 22.18+, 23.2+, or 24+ is required. Open **TaskChef**
11
+ from the Codex sidebar. No dispatcher workspace or project indexing is needed.
16
12
 
17
- You can keep using Codex as you do today. Start by delegating work where the
18
- project choice or follow-up is cumbersome, then bring more work into TaskChef
19
- as you go.
13
+ Codex databases and logs stay on your computer and remain the source of truth.
14
+ TaskChef keeps its own settings, manual Done marks, notification state, and
15
+ rebuildable caches. Optional GitHub authentication provides live PR status;
16
+ usage prices are API-equivalent estimates, not subscription billing.
20
17
 
21
- ## What working with TaskChef looks like
18
+ ## Delegate
22
19
 
23
- Suppose you have indexed two Codex projects, **payments** and **recipe-book**,
24
- and saved a GitHub repository mapping for payments. In your TaskChef dispatcher
25
- conversation, paste a payments issue link and ask:
20
+ From Codex's floating chat, use `$taskchef:delegate Do X in Y project.` The skill finds
21
+ native projects and creates an ordinary Codex chat. It asks when the destination
22
+ is unclear and returns the chat link. There is no executor skill or separate
23
+ task database. Confirmed project aliases can be retained as small routing notes.
26
24
 
27
- ```text
28
- Investigate this issue, fix the cause, and run the relevant tests: https://github.com/example/payments/issues/42
29
- ```
30
-
31
- TaskChef uses the issue URL's repository to identify the mapped payments
32
- project. It then opens a separate Codex task there and returns its link. The
33
- task investigates the issue in its own conversation while other delegated
34
- tasks can work in recipe-book or other projects.
35
-
36
- In the same dispatcher conversation, start another task from a rough idea:
37
-
38
- ```text
39
- In recipe-book, explore an idea for weekly meal planning. Discuss the approach with me before coding.
40
- ```
41
-
42
- TaskChef selects recipe-book by name and opens a separate task there. Discuss
43
- the options in that task. If a written plan would help, ask it to save a
44
- Markdown plan, then ask it to implement the agreed approach in the same task.
45
- A plan file is created when you request one; it is not a required step for
46
- every task.
47
-
48
- The screenshots in this walkthrough use illustrative demo data. Open the
49
- dashboard beside TaskChef master to see both tasks across your projects.
50
- In Codex, call `open_taskchef_board` for the [TaskChef sidebar](docs/mcp-app.md).
51
- It reads local Codex data and groups chats as **Scheduled**, **Running**,
52
- **Waiting for input/review**, and **Done**. Interrupted chats stay in Waiting with an **Interrupted** tag. Empty board columns remain visible with a short message. Ambiguous records stay
53
- **Unverified**. Running follows the latest selected turn
54
- state; these labels do not prove task outcomes. Mark Done writes only TaskChef's separate local state. A new Codex turn
55
- resets that mark.
56
- The main dashboard's **Board** groups reported tasks by **Working**,
57
- **Needs input**, **Completed**, and **Failed** so you can see their status at a glance.
58
-
59
- ![TaskChef master beside the dashboard board with recipe-book working and payments needing input](docs/images/readme-board.png)
60
-
61
- *Board gives an overview of task status across projects.*
62
-
63
- If the payments task needs a decision, it might ask, for example, whether to
64
- show a failed refund beside the original payment or in a separate list. Switch
65
- to **List** to see each task's request, latest result, and status in rows. Filter
66
- by **Needs input** to focus on the payments task's question.
67
-
68
- ![TaskChef master beside the dashboard list filtered to Needs input, showing the payments request and result](docs/images/readme-list.png)
69
-
70
- *List shows the payments request and result in the Needs input queue.*
71
-
72
- Select the payments task and choose **Open chat** to answer in its original
73
- Codex conversation.
74
-
75
- ![Payments task detail showing Open chat and the question in its activity timeline](docs/images/readme-needs-input.png)
76
-
77
- *Payments task details show the question and the Open chat action.*
78
-
79
- In that conversation, answer the question and ask the task to finish:
80
-
81
- ```text
82
- Show failed refunds beside the original payment. Implement it and run the tests.
83
- ```
84
-
85
- When the work finishes, its result appears on the dashboard; TaskChef does
86
- not post each result back into the dispatcher chat.
25
+ ## Upgrade from the dispatcher
87
26
 
88
- ![Completed payments task detail showing the latest result and earlier question](docs/images/readme-completed.png)
27
+ The dispatcher CLI, five old skills, task tracking tools, and web server are
28
+ retired. Existing dispatcher workspaces and task logs are left untouched on
29
+ disk; they are no longer live state. Native settings remain in their existing
30
+ location. See the [native contract](docs/spec.md) and
31
+ [storage notes](docs/taskchef-next-storage.md).
89
32
 
90
- *The completed task shows its latest result above the earlier question.*
91
-
92
- Keep the dashboard beside your conversation in Codex's built-in browser. It
93
- shows each task's latest request and result. Open a task to see its total
94
- reported work duration, token usage, and estimated cost, with the same figures
95
- for each turn in its activity timeline. Duration is reported wall-clock time
96
- spent on turns; cost is an API-equivalent estimate, not a bill. Token and cost
97
- figures can be unavailable when usage cannot be mapped to the Codex task.
98
- Task states normally come from the task's own reports; TaskChef does not
99
- automatically supervise execution.
100
-
101
- ## Install and delegate your first task
102
-
103
- You need Node.js 18 or newer, Git, Codex desktop, and local access to the
104
- projects that will receive work. Install the plugin:
33
+ ## Development
105
34
 
106
35
  ```sh
107
- codex plugin marketplace add favoyang/codex-plugins
108
- codex plugin add taskchef@favoyang-plugins
109
- ```
110
-
111
- For the first run, set up the TaskChef dispatcher and import your saved local
112
- Codex projects:
113
-
114
- ```text
115
- $taskchef-bootstrap Set up TaskChef and index my local Codex projects.
116
- ```
117
-
118
- After bootstrap, choose **New chat** in Codex and select the TaskChef dispatcher
119
- project at `~/.agents/taskchef`. We suggest renaming the new conversation
120
- **TaskChef master**, then pinning it for easy return. Bootstrap registers and
121
- opens the project; you create, rename, and pin the conversation yourself.
122
- Replace `<your-project>` with one of your indexed
123
- Codex project names and try a read-only first request:
124
-
125
- ```text
126
- In <your-project>, explain how to run the app and tests. Do not change files.
36
+ npm ci
37
+ npm test
38
+ npm run check:mcp-app
39
+ npm run build:mcp-app
127
40
  ```
128
41
 
129
- TaskChef returns a link to the new Codex task. From then on, the dispatcher
130
- checks your saved Codex projects when you delegate, so you do not need to
131
- reindex after adding one. The local dashboard normally starts when the TaskChef
132
- plugin activates. Open the [dashboard link](http://127.0.0.1:3210/) from the
133
- end of each dispatcher response in Codex's side browser, beside your
134
- conversation. If the dashboard is unavailable, ask `$taskchef-dashboard` to
135
- ensure and open it. Use `$taskchef-bootstrap` to add repository mappings or
136
- refine project descriptions when routing needs more context. If the installed
137
- skills do not appear, activate or reload the TaskChef plugin in Codex and try
138
- again.
139
-
140
- ## Choose models for each role
141
-
142
- In the dashboard's **Settings** page, choose a model and reasoning effort for
143
- the **Orchestrator**, **Planner**, **Implementer**, and **Reviewer** roles.
144
- TaskChef saves these preferences in native Codex agent files under
145
- `~/.codex/agents/` and applies them when it dispatches the corresponding work.
146
- Set them once for future tasks; a model choice you make explicitly for a task
147
- takes precedence over its role preference.
148
-
149
- ![TaskChef Settings page with model and reasoning effort for four roles](docs/images/readme-roles.png)
150
-
151
- *Settings shows the model and reasoning effort selected for each role.*
152
-
153
- ## More detail
154
-
155
- Read the [frequently asked questions](https://favoyang.com/taskchef/#faq) for
156
- answers about delegation, the dashboard, model roles, and local data.
157
-
158
- The [advanced guide](docs/advanced-guide.md) covers project indexing, routing,
159
- task reporting, dashboard behavior, recovery, updates, and development. The
160
- [specification](docs/spec.md) and [workflows](docs/workflows.md) describe the
161
- implementation contracts. TaskChef was inspired by
162
- [FirstMate](https://github.com/kunchenguid/firstmate); the
163
- [comparison](docs/firstmate-taskchef-comparison.md) explains their different
164
- approaches.
165
-
166
- ## License
167
-
168
- Copyright 2026 Favo Yang. TaskChef is licensed under the
169
- [Apache License 2.0](LICENSE).
42
+ Keep the release plugin named **TaskChef** and the separately packaged
43
+ `taskchef-next` plugin named **TaskChef Dev**. See
44
+ [development packaging](docs/mcp-app.md#development-plugin-identity).
170
45
 
171
- Third-party dependencies retain their own licenses. The OpenAI Codex icons
172
- are excluded from TaskChef's license; see the
173
- [Codex asset notice](assets/CODEX_ASSET_NOTICE.md).
46
+ [Native app guide](docs/mcp-app.md) · [GitHub setup](docs/taskchef-next-github.md)
package/docs/mcp-app.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  The public app name is **TaskChef**. “TaskChef Next” remains the internal project name.
4
4
 
5
- TaskChef requires Node.js 22.18+, 23.2+, or 24+ for read-only SQLite connections. The rest of TaskChef continues to support the package's Node.js 18 minimum. An unsupported Node runtime produces a fatal version error before TaskChef opens a database.
5
+ The native dashboard requires Node.js 22.18+, 23.2+, or 24+ for local Codex SQLite access.
6
6
 
7
- Call `open_taskchef_board` in Codex to open **TaskChef**. In a sidebar or fullscreen host view, it shows the read-only board, filters, and chat details. In an inline chat view, it shows a short recent-chat list with direct **Open chat** actions. The app uses local Codex metadata and does not modify the TaskChef dispatcher workspace.
7
+ Call `open_taskchef_board` in Codex to open **TaskChef**. In a sidebar or fullscreen host view, it shows the read-only board, filters, and chat details. In an inline chat view, it shows a short recent-chat list with direct **Open chat** actions. The app uses local Codex metadata and does not require a dispatcher workspace.
8
8
 
9
9
  The server reads all eligible top-level chats from `~/.codex/state_5.sqlite` and their latest turn from `~/.codex/thread_history_1.sqlite`. Both SQLite connections are read-only. It excludes typed subagents and Guardian reviews, JSON subagent sources, known `thread_spawn_edges` children, chats with no turn record. Standalone `source=exec` and regular `source=cli` chats remain eligible in the collector, but the view hides them by default. The plugin details page has native switches for Show exec sessions, Show CLI sessions, and Show archived chats. The MCP server stores these choices in `~/.agents/taskchef-next/settings.json`, shared by all TaskChef views. Each visible poll reads the current settings, even when the database snapshot is unchanged. These choices apply to the board, counts, project choices, Details eligibility, and the compact inline view. Archived chats are hidden by default and use their own Archived column when shown. Details shows the recorded lifetime direct child count. Names and titles can contain user text; the app prefers name, then title, then a chat ID fallback.
10
10
 
@@ -49,7 +49,7 @@ Cards show the chat title, project, a plain two-line preview, activity time, and
49
49
 
50
50
  Details pairs the full recorded latest-turn request and response, each initially capped at three lines with independent Show more/Show less controls. Selected quotes render as Markdown quotes and file/image references as named attachments. Generated request headings and context metadata are hidden in the display. Recorded input remains unchanged. Raw HTML is ignored and relative file links appear as text.
51
51
 
52
- Time labels use compact relative dates by default, with calendar dates available in settings. Schedule and PR icons appear in the status line. Queue reasons and lifetime subagent counts remain in Details. See [dashboard UI](dashboard-ui.md) for the presentation contract.
52
+ Time labels use compact relative dates by default, with calendar dates available in settings. Schedule and PR icons appear in the status line. Queue reasons and lifetime subagent counts remain in Details. See [the native contract](spec.md) for the product boundary.
53
53
 
54
54
 
55
55
 
@@ -178,6 +178,23 @@ this feature does not send OS notifications. A damaged notification file fails
178
178
  visibly and is preserved for repair.
179
179
 
180
180
 
181
+ ## Development plugin identity
182
+
183
+ Keep the released **TaskChef** plugin and a separate **TaskChef Dev** plugin.
184
+ The development copy must already use the plugin ID `taskchef-next`.
185
+ Before installing it through a local marketplace, run:
186
+
187
+ ```sh
188
+ node scripts/prepare-mcp-app-preview.js /path/to/staging/plugin
189
+ ```
190
+
191
+ The script sets the copied plugin’s display name to **TaskChef Dev** and
192
+ normalizes its MCP server key to `taskchef-next`. It refuses release manifests. The sidebar tool reads its
193
+ name from that manifest. The release checkout and release package keep
194
+ **TaskChef**. Run this step again whenever rebuilding the development package.
195
+ Do not register a standalone preview MCP server alongside these two plugins.
196
+ Restart Codex after changes to plugin identity or backend code.
197
+
181
198
  ## Local UI review without restarting Codex
182
199
 
183
200
  For UI-only changes, update the HTML in the installation that the running MCP
@@ -195,7 +212,7 @@ npm run update:mcp-app-preview -- /path/to/the/running/taskchef-next/version
195
212
  The helper builds the UI, checks the target is TaskChef, and replaces only
196
213
  `src/mcp-app/dist/index.html` atomically. It preserves the plugin version, server
197
214
  code, dependencies, and local data. It refuses missing or redirected HTML paths.
198
- Then right-click **TaskChef** in the Codex sidebar and choose **Refresh**.
215
+ Then right-click **TaskChef Dev** in the Codex sidebar and choose **Refresh**.
199
216
  Switching sidebar apps only hides the loaded view; it does not reload its HTML.
200
217
 
201
218
  Use the current installation’s version folder. If Refresh reports a missing