CONCEPT C — CONVERSATION-FIRST

Tasks have no dedicated page. They live where they were born — as chips in threads — and are retrieved through the composer, the command palette, and a lightweight floating index anchored to the thread you are already in. The conversation remains the only primary surface; the graphical layer is an overlay, not a destination. Chips are live references — a chip logged six weeks ago renders its current status today — so the timeline itself is the database.

Tested against — busy ×9 · empty · task detail #245 · capture mid-run · conversational retrieval · start → focused thread · blocked · done + evidence · mobile index · mobile capture
C1 · Conversation — capture in log mode · chips as live references
t3code/ v0.0.33 release prep
#CD
6 weeks ago
#212 Migrate diff renderer to @pierre/diffs v3 ✓ Donelogged 6w ago
Today
Run the release checks and prep the changelog for v0.0.33.
Version bump staged across 14 packages. Running the release test matrix now — I’ll draft the changelog from the merged PRs once it’s green.
Running release test matrix 4/7
#229 Composer stash lost when switching projects Loggedjust now
Working · release tests · 2m 14s
Logging a task — won’t interrupt the agent
#Focus outline invisible on amber buttons
claude · opus
1 2 3 4 5
  1. 1 Typing # first flips the composer to log mode: 2px indigo top hairline + hint. The agent never pauses — the Working pill stays sky and keeps pulsing.
  2. 2 The confirmation chip is the ONLY record surface. One quiet line in the timeline — never a card, never a toast, no sidebar entry. It stays here forever.
  3. 3 Chips are live references, not snapshots. #212 was logged six weeks ago; scrolled back today, the same chip renders its CURRENT status — emerald ✓ Done.
  4. 4 Plan chip = execution checklist (segment pips, step counter). Task chips carry the # sigil and no pips — the two never blur. Task ≠ checklist.
  5. 5 The system’s entire chrome: one # glyph in the topbar. No route, no tab, no badge count. Capture and retrieval both cost a single mark.
C2 · Retrieval overlay — the entire browse surface · busy (9 tasks)
t3code/ v0.0.33 release prep
#CD
Run the release checks and prep the changelog for v0.0.33.
Version bump staged across 14 packages. Running the release test matrix now — I’ll draft the changelog from the merged PRs once it’s green.
Running release test matrix 4/7
#229 Composer stash lost when switching projects Logged6m
Working · release tests · 8m 41s
#Tasks t3code · 9esc
Open — 6
#245 Focus ring lost after closing command palette with Esc 2d
#238 Thread list flickers on reconnect when >200 threads 5d
#241 Add test for snooze across DST boundary 1w
#229 Composer stash lost when switching projects 6m
#198 Focus outline invisible on amber buttons 3w
possible duplicate of #245
#249 Crash: renaming a thread while its agent is settling suggested — accept?
Blocked — 1
#231 Decide retention policy for settled threads 1w
Blocked — waiting on retention decision
Done — recent
#212 Migrate diff renderer to @pierre/diffs v3
#207 Empty-state copy for archived threads
↵ open in panel⌘↵ jump to originesc close
Message the agent — /task to log, #245 to reference
claude · opus
1 2 3 4 5
  1. 1 The panel opens from the # topbar button, or ⌘K then #. Anchored top-right, 380px glass (rgb 20 20 22 / 0.9, blur, radius 14). The thread stays live underneath — it dims, it never leaves.
  2. 2 Grouped Open / Blocked / Done tail. This popover is the ENTIRE browse surface — there is no page behind it.
  3. 3 Blocked row: 2px amber left border + amber reason line. Blocked is a flag on an open task, not a lifecycle status.
  4. 4 #249 was suggested by an agent; amber “suggested — accept?” until the user confirms. Nothing enters the list silently.
  5. 5 ↵ pushes the task detail INSIDE the panel (back arrow); ⌘↵ scroll-jumps to the chip in its origin thread. Neither navigates the app.
C4 · Conversational retrieval — “conversation-context wins”
t3code/ Reconnect flicker fix
#CD
What UI bugs are still outstanding?
Three open tasks look like UI bugs:
#245 Focus ring lost after closing command palette with Esc 2d
#238 Thread list flickers on reconnect when >200 threads 5d
#198 Focus outline invisible on amber buttons 3w
#198 may be a duplicate of #245 — same missing focus ring, different surface.
Let’s work on #245.
Working on #245 · Focus ring lost after closing command palette
Reproducing: open ⌘K, press Esc… confirmed — focus lands on <body> instead of the trigger. Patching the palette’s unmount to restore the previously focused element.
Working · 41s
Message the agent — /task to log, #245 to reference
claude · opus
The agent answers with real task chips inline — same component as capture chips, tappable.
“Let’s work on #245” continues the SAME thread — conversation context wins over any “start” ritual.
The hairline “Working on #245” marker links thread ↔ task both ways; #245 stays Open, gaining an attempt.
C3 · Panel — task detail #245 (pushed within panel)
#245task esc

Focus ring lost after closing command palette with Esc

Open logged 2d ago·last activity 18m
After dismissing ⌘K with Esc, focus returns to <body> instead of the previously focused element. Keyboard users lose their place; the ring disappears entirely until the next Tab.
Provenance
Logged in this thread — jump to origin
“…closing the palette with Esc drops the ring entirely — tab order restarts from the top of the document, which is brutal mid-review…”
Files
command-palette.tsx focus-ring.css
Attempts
Focus ring bug — #245 Working · 12m
Palette focus spike Failed · 3d
▸ History (7)
Provenance is a scroll-jump, not a page: “↑ jump to origin” scrolls the thread behind the panel to the chip.
Attempts are thread links, each wearing its own live thread-status pill (shared hue convention).
Back arrow pops within the panel — the app never navigates.
C5a · Start from panel — hover → popover · after: live attempt
#Tasks t3code · 9esc
Open — 6
#245 Focus ring lost after closing command palette… Start ▸
#238 Thread list flickers on reconnect when >200 threads 5d
#241 Add test for snooze across DST boundary 1w
Start #245
New focused thread
provider opencode · glm-5 ▾
Continue here
reuse this conversation’s context
after start — row state
#245 Focus ring lost after closing command palette… Open
Focus ring bug — #245 attempt · Working
“In progress” is not a status: the task stays Open; the attempt thread carries the sky pill.
C5b · The resulting focused thread — task stays a task
t3code/ Focus ring bug — #245
#CD
Working on #245 · started from the task panel · ↑ origin
#245 Focus ring lost after closing command palette with Esc Openattempt
Reading command-palette.tsx — the unmount handler clears the overlay but never restores document.activeElement. Writing a failing test first, then patching restore-on-dismiss.
Writing failing focus-restore test 2/4
Working · 1m 08s
Message the agent — /task to log, #245 to reference
opencode · glm-5
The focused thread opens with the task chip pinned at top as context — the chip, again, not a card.
The thread has its own plan chip (pips): the attempt’s checklist. The task itself never becomes one.
C6 · Panel — done with evidence + Reopen · blocked with reason
#212task esc

Migrate diff renderer to @pierre/diffs v3

✓ Done done 3d ago·logged 6w ago
Renderer swapped to @pierre/diffs v3; word-level diffs now stream during generation. No API changes for callers.
Verification
✓ pnpm test — 214 passed screenshot diff +38 −6
Provenance
Logged in “v0.0.33 release prep” — jump to origin
Reopen ▸ History (11)
#231task esc

Decide retention policy for settled threads

OpenBlocked logged 3w ago
Blocked — waiting on retention decision
Settled threads currently accumulate forever. Need a call on retention window (30d? 90d?) before the cleanup job can ship.
Provenance
Logged in “Pinned-thread drag ordering” — jump to origin
Unblock… ▸ History (4)
Done keeps its evidence chips forever; Reopen is one ghost tap — the chip in the origin thread flips back too.
Blocked = amber 2px left border + reason; the task remains in the Open group, flagged.
C7 · Desktop empty state — the panel before the first task
#Tasks t3code · 0esc
#
Nothing logged yet.
Type # while the agent works.
The empty state teaches the only gesture that matters. No setup, no “create your first task” wizard.
C8 · Mobile — form sheet index (from # in thread header)
9:41
Any progress on the flicker?
Repro’d with 240 threads — the virtualizer resets scroll on socket reconnect. Patching the anchor logic now.
Working · 3m
#Tasks t3code · 9
Open — 6
#245 Focus ring lost after closing command palette… 2d
#238 Thread list flickers on reconnect… 5d
#241 Add test for snooze across DST boundary 1w
#229 Composer stash lost when switching projects 6m
#249 Crash: renaming a thread while settling accept?
Blocked — 1
#231 Decide retention policy for settled… 1w
Done — recent
#212 Migrate diff renderer to @pierre/diffs v3
#207 Empty-state copy for archived threads
No new screens: the same panel becomes a form sheet — grabber, medium/large detents.
Row tap pushes detail inside the sheet, same back-arrow pattern as desktop.
C9 · Mobile — quick capture (# chip above the keyboard)
9:41
Run the release checks for v0.0.33.
Version bump staged across 14 packages. Running the release test matrix now.
#229 Composer stash lost when switching… Logged
Working · release tests · 2m
Logging a task — won’t interrupt the agent
#Focus outline invisible on amber butt
# Log task prefixes # for you — capture in one tap
QWERTYUIOP
ASDFGHJKL
ZXCVBNM
123spacereturn
The # chip in the keyboard accessory bar is mobile’s one-tap capture — it prefixes # and flips the composer to log mode.
The agent keeps working (sky pulse); the confirmation chip lands in the timeline exactly as on desktop.