While DataMind Oda works through a task with several steps, it keeps a task list: one item per concrete step, marked as the work moves. This page covers the tool behind the list: how an update works, the states an item can carry, who owns the list, and the messages an update can return. The visible side, the card and the plan in the chat, is on Oda's to-do list.
| State | Meaning |
|---|---|
pending | Not started. |
in_progress | Being worked on now. |
completed | Finished. |
Every item carries one of the three. The same states appear on the card in the chat, under Pending, In progress and Completed; Oda's to-do list covers how the card reads them.
Error: invalid todos: at most one task may be in_progress (got <n>), and nothing is recorded.Error: todo_write requires an owning agent session before anything is written.A recorded update answers with the counts of the whole list. A refusal arrives with an Error: prefix and leaves the list as it was.
| Message | What it means |
|---|---|
Updated todo list: <n> pending, <n> in progress, <n> completed. | The update was recorded, and the counts describe the whole list. |
Error: invalid todo: `content` must be a non-empty string | An item had no text left once its text was trimmed. |
Error: invalid todos: duplicate content "<content>" | The list named the same task text twice. |
Error: invalid todos: at most one task may be in_progress (got <n>) | The one-active rule is on, and the update marked more than one item as in progress. |
Error: todo_write requires an owning agent session | The update came from a run with no chat to record it. |
Yes. Each update sends the entire list and replaces the previous one: there are no partial updates and no per-item edits. To record one change, Oda sends the complete list again; to drop an item, it sends the list without it.
pending (not started), in_progress (being worked on now) and completed (finished). Every item carries one of them, and each update states the state of every item in the list.
The one-active rule is on in your setup: at most one item may be in progress at a time. An update that marks two is refused with Error: invalid todos: at most one task may be in_progress (got <n>), and nothing is recorded.
Oda trims each item's text first. When nothing is left, the item is refused with Error: invalid todo: `content` must be a non-empty string.
Every task text must be unique inside one list. A repeated text is refused with Error: invalid todos: duplicate content "<content>".
Yes. The list stays with the chat's record and survives across turns and reopened chats; the most recent update is the list that counts.
No. The list belongs to the chat that recorded it: a subagent keeps its own list, and nothing is shared between chats or agents.
They describe the whole list after the update: how many items are pending, how many are in progress and how many are completed, in the form Updated todo list: <n> pending, <n> in progress, <n> completed.
While the work runs, the chat shows the current plan. When the next turn starts, the standing plan clears; after a turn ends, the finished checklist stays visible.
No. An item is its text and its state, and an update replaces the whole list, so items carry no id, no priority and no other per-item field.