Skip to main content
Subscribe to 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

Every todo_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

The TODO_UPDATED event carries the current list in metadata. Each todo dict looks like:
Status is one of 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.
This keeps rendered checklists unambiguous — “what is the agent working on right now?” always has one answer. It matches the prompt policy recommended for the 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

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.
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.
The emit is a no-op with no active subscriber, so leaving the todo tool enabled costs nothing until a callback is attached.
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.

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