Skip to content

OR-252 feat: show the coding agent's task list and counted tool activity in chat - #282

Open
myles332 wants to merge 3 commits into
mainfrom
myles/coding-progress-indicators
Open

OR-252 feat: show the coding agent's task list and counted tool activity in chat#282
myles332 wants to merge 3 commits into
mainfrom
myles/coding-progress-indicators

Conversation

@myles332

@myles332 myles332 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Users could not tell which step the coding agent was on, or what it had already done, because progress lived only in a collapsed "Used tools" row. This PR surfaces it three ways:

  • Checklist card in the transcript for the agent's own task list (Claude Code TaskCreate/TaskUpdate/TaskList or legacy TodoWrite, OpenCode todowrite, Codex update_plan). Only the newest state of a turn renders; a failed write stays an error row.
  • Docked strip above the composer while the turn runs. With a task list it shows the current step, done/total and a progress bar. Without one it shows a progress outline read off the turn itself: each narration paragraph is a phase, annotated with the tool activity it produced, and expands to the full list of phases.
  • Counted tool-group headlines ("Read 3 files · Edited 2 files · Ran 4 commands") replace the generic "Used tools" label.

Load-bearing details:

  • Claude Code 2.1 exposes no task-list tool to newer models (Sonnet 5, Opus 4.8, …) unless CLAUDE_CODE_ENABLE_TODO_TOOLS is set, and then exposes incremental TaskCreate/TaskUpdate rather than TodoWrite. Chat sessions now set the flag, and ui/src/taskProgress.ts folds those calls across turns. Even so, Sonnet 5 usually skipped the tools in testing, which is why the narration-derived outline exists as the fallback.
  • The shared playbook (SYSTEM_PROMPT.md) asks every harness to write its task list first and keep it current.
  • Codex: turn/plan/updated (the only way update_plan reaches the client) becomes a task-list part, for main and sub-agent turns.
  • A task-list write is excluded from the streaming tool tail so the Thinking status still shows; prior task lists are threaded only to messages that touch the list so memoized messages stay stable while streaming.
  • ui/tsconfig.json gains allowImportingTsExtensions because runtime imports between tested modules need the extension under Node's test runner. ui/dist is rebuilt.

Test plan

  • cargo fmt --all --check, cargo clippy --all-targets -- -D warnings, cargo build --locked, cargo test --locked (700 passed)
  • ui: i18n lint, style lint, paraglide compile, tsc --noEmit, node --test (78 passed), vite build
  • Isolated dev slot, injected Claude Code TodoWrite transcript: checklist card and counted headline render
  • Isolated dev slot, live Codex turn with update_plan: docked strip updates step by step through "All tasks done"
  • Isolated dev slot, live Claude Code (Sonnet 5) implementation turn without a task list: the outline strip shows six narrated phases with their tool activity
  • Live Claude Code turn that actually calls TaskCreate/TaskUpdate (covered by unit tests against the CLI's real output formats; not observed live because Sonnet 5 skipped the tools)
  • Live OpenCode turn with todowrite
  • zh-CN and fa rendering of the new strings

🤖 Generated with Claude Code

myles332 and others added 3 commits September 3, 2026 12:59
…chat

Coding agents' own task lists (Claude Code TodoWrite, OpenCode todowrite,
Codex update_plan) were dropped into a collapsed "Used tools" row, so the
transcript never showed which step the agent was on or what it had finished.

- Render the newest task-list update in a turn as a checklist card; earlier
  updates are superseded and paint nothing, failed writes stay error rows.
- Dock a progress strip above the composer while the turn runs: current
  step, done/total count, progress bar, expandable full list.
- Collapsed tool groups now summarize what was done per activity kind
  ("Read 3 files · Edited 2 files · Ran 4 commands") instead of "Used tools".
- Codex: map the `turn/plan/updated` notification (the only way its
  update_plan tool reaches the client) to a task-list tool part, including
  sub-agent turns.
- Demo transcripts emit each harness's native task-list call.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The checklist only renders when the agent writes a task list, and Claude Code
skips TodoWrite on many coding turns. The shared playbook now tells every
harness to write the list up front and mark steps as it goes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude Code 2.1 exposes no task-list tool to newer models unless
CLAUDE_CODE_ENABLE_TODO_TOOLS is set, and then exposes incremental
TaskCreate/TaskUpdate/TaskList calls rather than TodoWrite. Set the flag for
chat sessions and fold those calls (across turns) into the checklist.

Sonnet 5 still often skips the tools, so while a turn runs without a task
list the composer docks a progress outline read off the turn itself: each
narration paragraph is a phase, with the tool activity it produced.

Also: the shared playbook asks every harness to keep its task list current,
and prior task lists are only threaded to messages that touch the list so
memoized messages stay stable while streaming.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@myles332 myles332 changed the title feat: show the coding agent's task list and counted tool activity in chat OR-252 feat: show the coding agent's task list and counted tool activity in chat Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant