dashboard: persistent Plan/Todo panel — sticky pinned, diff successive TodoWrite/UpdateTodos calls #964
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Depends on
Reference
charles/claude-hooks#964
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As an operator I want the agent's current plan / todo list pinned at the top of the run view (not buried in chat scroll) and updated as a diff on each TodoWrite call, so I can see "+ added 'Run tests'" instead of the timeline duping the whole list ten times.
Context
Claude Code uses
TodoWrite(pending/in_progress/completed); cursor usesUpdateTodos+CreatePlan. Both providers update the full list each call. Without diffing, the timeline becomes 80% TodoWrite repaint.Acceptance criteria
<PlanPanel>component pinnedposition: sticky top-0inside the planner drawer / monitor detail view. Hidden when no plan/todos exist.todosorplan. The component reads only the latest full list (current state of truth) — the timeline event is a hint to refresh, not the data source.record.plan: PlanItem[]andrecord.todos: TodoItem[]onTaskRecord. Computed from the most recenttodos/plantool call event. Broadcast on changes.todosevents are not duplicated in the timeline — emit one collapsed "Updated todos" entry instead. Keep the full list inrecord.todos.Circlepending,Loader2in_progress,Checkcompleted), Tokyo Night row tint forin_progress.Out of scope
Dependencies
<ToolCard>ticket — uses the same primitives.todos/planToolKindmapping.References
UpdateTodosToolCall/CreatePlanToolCall:node_modules/.bun/@cursor+sdk@1.0.12/.../tool-call-types.d.ts🤖 Auto-assigned to dev (heuristic: area:dashboard + body 1970 bytes (≤ 2 KB) — code role). Reply
/unassignto reroute.