Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
ced9fef
feat: add TaskChef Next passive sidebar demo
favoyang Oct 5, 2026
ea49d4f
fix: refresh TaskChef Next sidebar bundle
favoyang Oct 5, 2026
f8179c8
feat: read Codex database in TaskChef Next
favoyang Oct 5, 2026
5c535d1
fix: make TaskChef Next database authoritative
favoyang Oct 5, 2026
8ae8fef
fix: expose TaskChef Next lifecycle diagnostics
favoyang Oct 6, 2026
20ec085
fix: show Codex chat names and readable lifecycle logs
favoyang Oct 6, 2026
67f3fe2
fix: group Codex child sessions in TaskChef Next
favoyang Oct 6, 2026
3cc9586
docs: record TaskChef Next status research
favoyang Oct 6, 2026
8b2b1aa
feat: add TaskChef Next queue labels and local Done marks
favoyang Oct 6, 2026
3676a3e
fix: reject stale Codex turn projections in TaskChef Next
favoyang Oct 7, 2026
8ce2ebf
fix: read current rollout history for reverted chats
favoyang Oct 7, 2026
2412206
perf: query indexed Codex history without a chat cap
favoyang Oct 7, 2026
1a41e49
feat: show saved replies on TaskChef Next cards
favoyang Oct 7, 2026
99cdd79
perf: reuse unchanged Codex database records
favoyang Oct 8, 2026
f04df47
fix: follow selected turn status for Running
favoyang Oct 8, 2026
029d47b
perf: cache unchanged local Done marks
favoyang Oct 8, 2026
e9a659c
feat: render saved replies as Markdown
favoyang Oct 8, 2026
76a4a78
fix: simplify Next board status display
favoyang Oct 8, 2026
c1ccc56
fix: hide exec sessions from Next board
favoyang Oct 8, 2026
5afcba2
feat: simplify Next card dates
favoyang Oct 8, 2026
9c7e63d
feat: add Next CLI and archive visibility settings
favoyang Oct 8, 2026
c69ae35
feat: add Next exec session visibility setting
favoyang Oct 8, 2026
8f08b13
feat: use native structured settings for Next visibility
favoyang Oct 8, 2026
05d3a82
feat: simplify Next board and restore settings link
favoyang Oct 8, 2026
f12d85d
feat: keep empty Next board columns visible
favoyang Oct 8, 2026
c9e6b7c
feat: show latest reply images as Next card covers
favoyang Oct 8, 2026
a843432
fix: hide unavailable Next card covers
favoyang Oct 9, 2026
e0f7c73
feat: unify Next notifications
favoyang Oct 9, 2026
b00f4b7
fix: open Next settings through desktop navigation
favoyang Oct 9, 2026
d4a7c44
feat: group Next chats by saved Codex projects
favoyang Oct 9, 2026
130312b
feat: add project picker sorting
favoyang Oct 9, 2026
273c138
fix: use an unread dot on the Next notification bell
favoyang Oct 9, 2026
6820bba
fix: shorten the project sort tooltip
favoyang Oct 9, 2026
6572506
fix: advertise the TaskChef sidebar icon
favoyang Oct 9, 2026
f6ba12b
fix: resolve settings through the marketplace catalog
favoyang Oct 9, 2026
f2d4605
fix: align Next board with the Codex dark theme
favoyang Oct 9, 2026
159aafe
fix: update sidebar previews without replacing the plugin
favoyang Oct 9, 2026
876b2b9
fix: balance board column heading spacing
favoyang Oct 9, 2026
f2d2166
feat: show elapsed minutes on running board cards
favoyang Oct 9, 2026
711e097
fix: hide zero counts on empty board columns
favoyang Oct 9, 2026
9665422
fix: collapse repeated chat notifications to the latest
favoyang Oct 9, 2026
6e6ccd6
feat: search board card titles and reply text
favoyang Oct 9, 2026
439f1ca
feat: show saved turn duration in card date tooltips
favoyang Oct 9, 2026
e5906d6
feat: add authenticated GitHub PR status to TaskChef Next
favoyang Oct 9, 2026
8bb2768
fix: keep actively scheduled chats out of Done
favoyang Oct 9, 2026
7f53e53
fix: use TaskChef as the public app name
favoyang Oct 9, 2026
cec09f2
chore: add clean TaskChef icon variants
favoyang Oct 9, 2026
fd4399f
fix: enlarge avatar and export sidebar theme icons
favoyang Oct 9, 2026
30c7920
fix: simplify scheduled chat status rules
favoyang Oct 9, 2026
8333d1a
feat: add GitHub connection settings and scoped PR checks
favoyang Oct 9, 2026
5802d35
docs: correct GitHub settings preview screenshot
favoyang Oct 9, 2026
6e20653
feat: simplify GitHub settings and query visible cards
favoyang Oct 9, 2026
2ca4eb4
feat: add card status icons and persistent PR cache
favoyang Oct 9, 2026
b4d9ffa
fix: read private PR checks without Contents access
favoyang Oct 9, 2026
5c80bae
feat: unify card status details in one popup
favoyang Oct 9, 2026
d7b92cc
test: avoid jsdom layout work in status popup checks
favoyang Oct 9, 2026
93606be
feat: add compact status rows and repository access warnings
favoyang Oct 10, 2026
aedc388
feat: match Codex pull request icon shapes
favoyang Oct 10, 2026
e56f9b5
fix: mirror schedule clock to match Codex
favoyang Oct 10, 2026
5357c3f
fix: center running duration hourglass
favoyang Oct 10, 2026
8689fa1
feat: add compact card timestamps and calendar setting
favoyang Oct 10, 2026
faafa45
fix: simplify repository access warning popup
favoyang Oct 10, 2026
6414dd0
feat: search chat projects and pull request metadata
favoyang Oct 10, 2026
2ae0cdf
fix: refine settings copy and popup text alignment
favoyang Oct 10, 2026
6c59ca9
feat: show Codex spinner beside active Running column
favoyang Oct 10, 2026
5fbf704
feat: add guarded board queue drops and archive guidance
favoyang Oct 10, 2026
b1c59cb
test: update MCP inventory for Scheduled queue action
favoyang Oct 10, 2026
748a967
feat: highlight valid board drag destinations
favoyang Oct 10, 2026
de7ad7f
feat: polish board loading and card transitions
favoyang Oct 10, 2026
589c4f1
feat: open notifications on hover and propose chat details
favoyang Oct 10, 2026
d67b292
feat: add a saved theme selector to TaskChef
favoyang Oct 10, 2026
3e97aed
fix: honor appearance choice in the Codex host
favoyang Oct 10, 2026
19aec69
feat: add an appearance panel with separate theme selection
favoyang Oct 10, 2026
f02a794
feat: simplify sidebar chat details and order history PRs
favoyang Oct 10, 2026
b3a58dd
fix: retain detail PR cache and polish light appearance
favoyang Oct 10, 2026
a6acaa1
fix: distinguish running and finished work duration labels
favoyang Oct 10, 2026
f07ab70
feat: read saved chat usage and historical work time
favoyang Oct 10, 2026
c5e07ee
fix: simplify chat details and status popups
favoyang Oct 10, 2026
738442d
feat: show latest turn usage on board cards
favoyang Oct 10, 2026
9983646
fix: persist usage estimates and explain incomplete records
favoyang Oct 10, 2026
dac7b4a
feat: show unread chat dots and numbered usage notes
favoyang Oct 11, 2026
01a87e1
feat: unify usage accounting and cache storage
favoyang Oct 11, 2026
1e6ce29
fix: keep detail usage visible while loading
favoyang Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,14 @@ every task.

The screenshots in this walkthrough use illustrative demo data. Open the
dashboard beside TaskChef master to see both tasks across your projects.
In Codex, you can also call `open_taskchef_board` for a compact [sidebar app](docs/mcp-app.md)
with a task board, task details, chat links, and confirmed manual status changes.
**Board** groups tasks by **Working**, **Needs input**, **Completed**, and
**Failed** so you can see their status at a glance.
In Codex, call `open_taskchef_board` for the [TaskChef sidebar](docs/mcp-app.md).
It reads local Codex data and groups chats as **Scheduled**, **Running**,
**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
**Unverified**. Running follows the latest selected turn
state; these labels do not prove task outcomes. Mark Done writes only TaskChef's separate local state. A new Codex turn
resets that mark.
The main dashboard's **Board** groups reported tasks by **Working**,
**Needs input**, **Completed**, and **Failed** so you can see their status at a glance.

![TaskChef master beside the dashboard board with recipe-book working and payments needing input](docs/images/readme-board.png)

Expand Down
19 changes: 19 additions & 0 deletions assets/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# TaskChef icons

All icons use the same chef hat and T artwork. The SVG files are the editable sources.

| Use | File | Background |
| --- | --- | --- |
| App and navbar, light theme | `taskchef.svg` | Rounded orange square; transparent outside |
| App and navbar, dark theme | `taskchef-dark.svg` | Rounded orange square; transparent outside |
| App icon PNG export, dark theme | `taskchef-app-rounded.png` | Rounded orange square; transparent outside |
| Sidebar preview, light theme | `taskchef-sidebar-light.svg` | Dark strokes; transparent |
| Sidebar preview, dark theme | `taskchef-sidebar-dark.svg` | Light strokes; transparent |
| Codex sidebar | `taskchef-sidebar.svg` | Monochrome `currentColor`; transparent |
| GitHub and other services that apply a circle crop | `taskchef-avatar-square.svg`, `taskchef-avatar-square.png` | Solid orange to all four edges |

The app and sidebar SVGs are unchanged. The square avatar uses the current dark-theme navbar artwork and colors. Its hat is enlarged by 30% and centered for circle crops. The two sidebar preview files show the same light/dark colors that the MCP server already provides; the runtime continues to use the theme-neutral template. Both PNG exports are 512 × 512 pixels.

For GitHub, upload `taskchef-avatar-square.png` and set the badge background color to `#F59E0B`. Keep the full image when GitHub asks for a crop.

Export PNGs directly from the SVG sources. Do not use an image generator: these are flat vector icons, with no gradients, shadows, or texture.
Binary file added assets/taskchef-app-rounded.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/taskchef-avatar-square.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions assets/taskchef-avatar-square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions assets/taskchef-sidebar-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions assets/taskchef-sidebar-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions assets/taskchef-sidebar.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 20 additions & 29 deletions docs/advanced-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,10 @@ Detailed setup, operation, recovery, and development reference for TaskChef.
TaskChef requires Node.js 18 or newer, Git, Codex desktop, and local access to
the projects that will receive work.

TaskChef pins [`ccusage`](https://github.com/ccusage/ccusage) as an optional
dependency for dashboard token and API-equivalent cost estimates. A normal npm
installation uses that package-local executable; plugin-only installations use
an npm-cache-friendly `npx` fallback to resolve the same exact version's native
executable. `npx` never launches the analyzer against Codex data. TaskChef then
requests ccusage's live-capable online pricing and falls back to its bundled
offline snapshot, while never parsing Codex rollout files itself. Lifecycle
reporting and the dashboard continue to work when ccusage, npm, or pricing is
unavailable.
TaskChef uses its own accounting engine for token usage and API-equivalent cost
estimates. Usage requires Node.js 22.18+ and readable local Codex records.
It includes linked subagents and uses the same pricing data as the board.
Lifecycle reporting and the dashboard continue to work when usage is unavailable.

```sh
codex plugin marketplace add favoyang/codex-plugins
Expand Down Expand Up @@ -49,7 +44,7 @@ The canonical workspace is `~/.agents/taskchef`. TaskChef owns only:
AGENTS.md managed dispatcher instructions plus user additions
taskchef.json schema-2 Codex project index, dashboard preference, and delegation metadata
tasks.jsonl one task snapshot per line (schema 10; schema 4-9 migration supported)
.taskchef-usage.json optional mode-0600 ccusage snapshot and turn-boundary cache
.taskchef-usage.json optional mode-0600 normalized usage cache
```

To inspect or manually adjust the project index later, use the bootstrap skill:
Expand Down Expand Up @@ -356,33 +351,29 @@ will keep the feature disabled until Codex exposes a reliable supported
app-callable archive interface or guarantees CLI compatibility. The dormant
server path also rejects requests before discovering or invoking the CLI.

Task details also show whole-task and per-turn token usage when `ccusage` can
map the linked Codex thread. A completed turn briefly shows “Calculating token
usage…” while TaskChef performs bounded deferred reconciliation, because
the terminal lifecycle callback precedes Codex's final output write. The
dashboard also preloads missing, interrupted, and retry-eligible usage in a
bounded background queue at startup, after task changes, and on a periodic
recovery pass; opening task details is not required to start collection. Historical
tasks may show a trustworthy task total while older turns remain “Token usage
unavailable” when no cumulative turn boundaries were recorded. Input, cached
input, output, reasoning, and total counts retain ccusage's categories. Dollar
figures are labeled API-equivalent estimates; provenance identifies the online
pricing request or offline fallback mode, and zero-priced unknown models show
cost unavailable rather than a misleading `$0.00`. Per-turn cost is also
unavailable when its cumulative boundaries used different ccusage versions or
pricing modes. TaskChef displays the cumulative estimate supplied by ccusage
without applying a separate model-family or cache-write coverage policy.
Task details show chat totals and native per-turn usage from saved Codex records.
Historical tasks are read when needed, rather than scanned at startup. A turn
without a matching native Codex turn ID shows usage unavailable; its chat total
can still be shown. Missing logs and parent links make the known subtotal
incomplete. Input, cached input, output, reasoning, and total counts use Codex's
categories. Cached input and reasoning are subsets, not additional tokens.
Dollar figures are API-equivalent estimates, using the board's pricing table.
Unknown prices show cost unavailable or a known priced subtotal. Existing saved
usage projections remain readable. A partial scan cannot replace a larger known
historical subtotal; missing model prices cannot erase a saved priced subtotal.
`.taskchef-usage.json` holds the web view's
normalized projections; the underlying engine reuses the board disk caches.

The same detail view reports lifecycle wall-clock elapsed time independently of
ccusage. Each terminal turn shows **Elapsed** from `startedAt` to
token accounting. Each terminal turn shows **Elapsed** from `startedAt` to
`result.updatedAt`; **Total reported work** sums only valid terminal-turn
durations, excluding idle gaps and unfinished work. A working turn shows live
**Elapsed so far** without contributing to the total. This is reported
wall-clock elapsed time, not model compute time, and malformed or reversed
timestamp ranges are shown as unavailable.
The header shows the running TaskChef package version reported by the same
bounded health identity used for compatible-listener checks.
The Settings page shows the ccusage version reported by the executable that
TaskChef resolves at runtime.
The Settings page identifies TaskChef as the usage provider.
The canonical port is normally owned by a dashboard session process initialized
by the TaskChef MCP before its tool transport connects. MCP recovery reuses an
exact-compatible same-workspace dashboard and reports its actual launcher;
Expand Down
2 changes: 2 additions & 0 deletions docs/diagrams/taskchef-appearance-wireframe.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version='1.0' encoding='utf-8'?>
<mxfile host="app.diagrams.net"><diagram id="Appearance panel" name="Appearance panel"><mxGraphModel grid="1" page="1" pageWidth="590" pageHeight="420" background="#171717"><root><mxCell id="0" /><mxCell id="1" parent="0" /><mxCell id="2" value="TaskChef · Appearance panel proposal" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=22;fontStyle=1;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="14" y="6" width="560" height="40" /></mxCell><mxCell id="3" value="" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#242424;strokeColor=#454545;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=14;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="20" y="62" width="548" height="50" /></mxCell><mxCell id="4" value="TaskChef" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=16;fontStyle=1;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="42" y="66" width="230" height="32" /></mxCell><mxCell id="5" value="○ ⚙ ↻ ◐" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=18;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="365" y="66" width="180" height="32" /></mxCell><mxCell id="6" value="" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#242424;strokeColor=#454545;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=14;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="238" y="126" width="330" height="264" /></mxCell><mxCell id="7" value="Appearance" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=16;fontStyle=1;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="250" y="134" width="300" height="32" /></mxCell><mxCell id="8" value="" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#333333;strokeColor=#555555;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=14;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="254" y="182" width="296" height="44" /></mxCell><mxCell id="9" value="DAY" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=13;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="259" y="188" width="84" height="32" /></mxCell><mxCell id="10" value="NIGHT" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#525252;strokeColor=#777777;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="350" y="187" width="90" height="34" /></mxCell><mxCell id="11" value="SYSTEM" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=13;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="443" y="188" width="104" height="32" /></mxCell><mxCell id="12" value="Theme" style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=14;fontStyle=1;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="250" y="238" width="290" height="32" /></mxCell><mxCell id="13" value="[preview] Default ✓&lt;br&gt;&lt;br&gt;Neutral colors and standard card layout." style="rounded=1;absoluteArcSize=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#292929;strokeColor=#555555;fontColor=#eeeeee;fontFamily=Helvetica;fontSize=14;fontStyle=0;align=left;verticalAlign=top;spacing=12;" vertex="1" parent="1"><mxGeometry as="geometry" x="254" y="280" width="296" height="82" /></mxCell></root></mxGraphModel></diagram></mxfile>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading