CLAUDE LABJP
SUNSET — The legacy Workbench and experimental prompt tool APIs retire tomorrow, August 17, one day outLATEST — Version 2.1.233, released August 15, is current: GitLab merge request URLs now work with --worktree and the claude agents view, where MRs appear as !NSECURITY — Windows paths written with the NT \??\ device prefix no longer bypass UNC validation, closing an NTLM credential-leak vectorTODO — Todo and task tracking tools are off by default on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set CLAUDE_CODE_ENABLE_TODO_TOOLS=1 to bring them backFORK — Version 2.1.232, released August 14, makes subagent_type: 'fork' the default, so a forked subagent inherits the full conversation and prompt cacheMENTION — Typing @ in the prompt now mentions another Claude session by name, and SendMessage reaches that session directlySUNSET — The legacy Workbench and experimental prompt tool APIs retire tomorrow, August 17, one day outLATEST — Version 2.1.233, released August 15, is current: GitLab merge request URLs now work with --worktree and the claude agents view, where MRs appear as !NSECURITY — Windows paths written with the NT \??\ device prefix no longer bypass UNC validation, closing an NTLM credential-leak vectorTODO — Todo and task tracking tools are off by default on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set CLAUDE_CODE_ENABLE_TODO_TOOLS=1 to bring them backFORK — Version 2.1.232, released August 14, makes subagent_type: 'fork' the default, so a forked subagent inherits the full conversation and prompt cacheMENTION — Typing @ in the prompt now mentions another Claude session by name, and SendMessage reaches that session directly
Articles/Claude Code
Claude Code/2026-08-16Intermediate

Tracking Multi-Step Work in Claude Code Now That the Todo Tools Are Off by Default

Since Claude Code v2.1.233, TodoWrite and the Task tools are left out on the newer models. Here are the three branches to check before you set the opt-in variable, the PostToolUse ledger I put in their place, and the measured point where that ledger quietly corrupts under parallel agents.

Claude Code220hooks16task trackingsubagents8operations19

Premium Article

I handed Claude Code my usual morning routine. As an indie developer running several apps and sites on my own, the pre-release checks and the recurring site maintenance all go out as fixed multi-step sequences.

That morning the screen looked different. The work was moving along, but the progress checklist that normally stacks up on the left stayed empty the whole way through.

What made it strange was that the same sequence, running on a schedule, still showed its tasks exactly as before. If something had broken, it should have broken in both places. When only one side goes quiet, the cause is usually a changed assumption rather than a changed setting.

What v2.1.233 changed was whether the tools get loaded at all

The cause was not on my side. As of Claude Code v2.1.233, five tools — TodoWrite, TaskCreate, TaskGet, TaskUpdate, and TaskList — are not loaded on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, or later members of those families unless you opt in.

The reasoning is spelled out in the tools reference: those models keep track of multi-step work without a written checklist, and the tool definitions plus their reminders take up context, so Claude Code leaves them out. With the tools absent, nothing gets added to the task list while the work runs.

So it was never a case of tasks failing to appear. The instrument for adding them simply was not in the room. Miss that distinction and you will spend the morning suspecting your prompt or the model's reasoning.

The confusing part is that the same goal — "I want the checklist back" — points at opposite settings depending on the model.

Session modelLoaded by defaultVariable to change it
Opus 4.8 / Sonnet 5 / Fable 5 / Mythos 5 and laterNone of the fiveCLAUDE_CODE_ENABLE_TODO_TOOLS=1 to add them
Anything else, such as Opus 4.7The four Task toolsCLAUDE_CODE_ENABLE_TASKS=0 to fall back to TodoWrite

One is addition, the other is subtraction. Carry a config file over from an older setup and the two will not line up.

Three branches to check before you set the variable

Setting CLAUDE_CODE_ENABLE_TODO_TOOLS=1 brings all five back on every model and every provider. But if you set it before isolating the cause, you can end up either fixing nothing or papering over a mismatch that resurfaces somewhere else. Here is the order I worked through.

1. Is the model even in scope? If you see the same symptom on a model outside that list, this change is not your cause. Checking /model first takes seconds.

2. Which surface are you looking at? This is where I lost the most time. Background sessions and Claude Code on the web provide all five regardless of model. That is exactly why my interactive session had gone quiet while the scheduled run kept listing tasks. Trying to reproduce the behavior in a local terminal will never match what the web surface does.

3. Are you looking from inside a subagent? Whether a subagent gets these tools depends not on the subagent's own model but on whether your session has them. Point a child at Opus 4.7 and it still comes up empty if the parent runs Sonnet 5 without the tools loaded.

That third point has a tail. With agent teams, an in-process teammate follows your session, but a teammate in its own split pane runs as a separate Claude Code process, so its own model decides. Which means one team can contain members who see the shared task list and members who do not. Agents without the Task tools coordinate through messages instead.

If one member of a team keeps failing to pick up work, look at this boundary before you rewrite the instructions. I spent the better part of an hour on the instructions first.

There is a cheaper way to settle all three questions than reasoning about them: ask the session what it is holding. Typing "what tools do you have access to?" gets you a plain answer about the current set, which is faster than inferring the answer from the model name and the surface. I now do this first and reason second, because the three branches interact — a background run of the same subagent on the same model behaves differently from the interactive one, and no amount of reading the config tells you which case you are in.

One caveat on that check: --tools restricts a session to exactly the built-in tools you name. If you reach for it to bring back TaskCreate and forget to list Edit and Bash alongside it, you get the checklist and lose the ability to do the work. --allowedTools is the safer of the two when all you want is one tool back.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You will be able to narrow a missing task list down to configuration, surface, or subagent scope within a few minutes of noticing it
You will be able to close the gap where a shared append-only log silently corrupts before parallel agents ever hit it
You will be able to decide, from the shape of your own work, whether to restore the checklist or move to an external ledger
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Claude Code2026-08-07
The Write Your Permission Mode Never Stops — Auditing an Agent-Scoped PreToolUse Gate Across 150 Payloads
Workflow subagents auto-approve file edits regardless of your session permission mode. I measured the remaining boundary — an agent_id-scoped PreToolUse hook — across 150 payloads, found 54 silent pass-throughs, and rebuilt it to fail closed.
Claude Code2026-08-04
Tightening Filesystem Isolation Separately from the Network — Collect the Paths, Then Squeeze the Write Surface
Claude Code v2.1.216 lets you control filesystem isolation independently from network isolation. Before tightening anything, I traced what a real job actually touches, split reads from writes, and measured how stable the path set is across repeated runs. The numbers changed how I wrote the allowlist.
Claude Code2026-07-30
You Added a Second Working Root — Now Ask How Far Your Ignore Rules and Deny Patterns Actually Reach
Adding a working root mid-session does not carry your ignore rules or deny patterns with it. Measured evidence from git check-ignore and a three-way matcher comparison, plus the scope-delta audit script I now run from the DirectoryAdded hook.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →