How it works
Where items come from, how they close, and where they live.
How items get in
| Source | When |
|---|---|
tool | Claude calls park_item while it works. |
scan | The end-of-turn scan finds a deferral Claude did not record. |
todowrite | Claude writes a task list with TodoWrite. Entries are mirrored. If Claude removes an entry, its mirror is dropped. Subagent lists are ignored. |
manual | You use /todo add. |
The end-of-turn scan
After Claude finishes a reply, a short pass runs when both are true: the reply is 400 characters or longer, and Claude parked nothing that turn. Subagent turns are never scanned.
It asks Claude Haiku, through your own Claude Code session, two things about that reply, with your message and the current open items for context:
- Did Claude defer or propose anything it did not record? New items are added with a short description.
- Did the conversation settle any open item? An item can be marked approved, rejected, done or duplicate, each with a note saying so.
The scan will not bring back an item you closed in the last 30 days, whether the title matches exactly or closely. Seeing a known item again adds nothing: no new item and no note.
Cost. Each scan is one small Haiku request on your Claude usage. There is no setting to switch it off yet. To stop it, disable the plugin: /plugin disable todo-ledger@todo-ledger.
Duplicates
The same title in the same project is one item. When Claude parks something that may already exist, its instructions tell it to look first and update the existing item instead of adding a second.
Where the files live
One JSON file per item:
| System | Folder |
|---|---|
| macOS, Linux | ~/.claude/todo-ledger/items/ |
| Windows | %USERPROFILE%\.claude\todo-ledger\items\ |
{
"id": "20261012-0951-3c1f",
"title": "Retry failed webhook deliveries",
"body": "Failed webhook deliveries are dropped today…",
"kind": "deferred", // todo | deferred | proposal | discussion
"origin": "agent", // agent | human
"status": "open", // open | in_progress | done | dropped
"project": "billing-api",
"sessionId": "…",
"sessionName": "webhook-fix",
"source": "tool", // tool | todowrite | scan | manual
"createdAt": "2026-10-12T09:51:04.000Z",
"updatedAt": "2026-10-12T09:51:04.000Z",
"notes": [{ "by": "human", "text": "only retry on 5xx", "at": "…" }]
}
Every session on the machine shares the folder. Open sidebars pick up changes within about ten seconds, or at once with /todos refresh. To back up the list, copy the folder.
What leaves your machine
- Items: nothing. They stay in the folder above.
- The scan: the last reply, your message and the titles of open items go to Claude Haiku through your own Claude Code session, on your existing sign-in, like any other request in that session.
- Analytics, accounts, servers: none. This website loads no third-party scripts, fonts or trackers.