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
Open
OR-252 feat: show the coding agent's task list and counted tool activity in chat#282myles332 wants to merge 3 commits into
myles332 wants to merge 3 commits into
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
todowrite, Codexupdate_plan). Only the newest state of a turn renders; a failed write stays an error row.Load-bearing details:
CLAUDE_CODE_ENABLE_TODO_TOOLSis set, and then exposes incremental TaskCreate/TaskUpdate rather than TodoWrite. Chat sessions now set the flag, andui/src/taskProgress.tsfolds 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.SYSTEM_PROMPT.md) asks every harness to write its task list first and keep it current.turn/plan/updated(the only wayupdate_planreaches the client) becomes a task-list part, for main and sub-agent turns.ui/tsconfig.jsongainsallowImportingTsExtensionsbecause runtime imports between tested modules need the extension under Node's test runner.ui/distis 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 buildupdate_plan: docked strip updates step by step through "All tasks done"todowrite🤖 Generated with Claude Code