TODO_UPDATED to render a live checklist that updates as the agent adds and ticks off items.
The agent adds and updates todos with the built-in todo tool; each change emits a TODO_UPDATED event carrying the full ordered list, so any subscriber renders the current state without tracking deltas.
Quick Start
1
Enable the todo tool
2
Subscribe to live updates
Works for a solo
Agent — no AgentTeam(planning=True) required. Any frontend (CLI, TUI, web, Python) can subscribe and render a live checklist.How It Works
Everytodo_add and todo_update emits a TODO_UPDATED event with the complete, ordered list.
The event carries the full ordered list, so subscribers never track deltas — each event is a complete snapshot.
What’s in the event
TheTODO_UPDATED event carries the current list in metadata.
Each todo dict looks like:
pending | in_progress | completed | cancelled.
The single-in_progress rule
Setting a todo to in_progress demotes any other in_progress item back to pending, so exactly one item is active at a time.
coding toolset.
Choosing a Renderer
Pick a renderer based on where the checklist appears.
Rich
Live re-renders the same block on every event:
TODO_UPDATED events propagate through the async tool path too — async tools that mutate todos stream live in the same way. No extra wiring is required.Best Practices
Keep exactly one item in_progress
Keep exactly one item in_progress
Instruct the agent to mark exactly one item
in_progress and complete it before moving on. The runtime enforces the single-in_progress rule, but a clear instruction produces cleaner checklists.Render the full list, not deltas
Render the full list, not deltas
Each
TODO_UPDATED event is a complete snapshot in metadata["todos"]. Re-render the whole list every time — the event is idempotent, so you never need to reconcile partial updates.Cheap when nothing is listening
Cheap when nothing is listening
The emit is a no-op with no active subscriber, so leaving the todo tool enabled costs nothing until a callback is attached.
Combine with TOOL_PROGRESS for a two-tier view
Combine with TOOL_PROGRESS for a two-tier view
Render the checklist from
TODO_UPDATED and the current tool’s live output from TOOL_PROGRESS for a list-plus-detail view. See Tool Progress Streaming.Related
Todo Planning
Add, list, and update todos with the built-in todo tool
Streaming
Subscribe to streaming responses and events
Tool Progress Streaming
Stream incremental output from inside running tools
Streaming Progress Compositor
Fold typed StreamEvents into a bounded status view

