CLAUDE LABJP
2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one
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 Code253hooks19task trackingsubagents9operations29

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 $15 for lifetime access
View Membership →

Related Articles

Claude Code2026-09-02
Two hooks that record every model switch and stop the ones you never agreed to
Build a PostModelSwitch hook that logs every model change and a PreModelSwitch hook that blocks unapproved switches during unattended runs. Complete scripts, measured timings, and the reason the two jobs must stay separate.
Claude Code2026-09-01
Once I passed a dozen MCP servers, I stopped trusting the startup list
Only some of the servers that say connection failed at startup are ones you can actually fix. Here is a probe that separates no-response, launch failure, and protocol rejection, measured across a 14-server fleet where sequential 22.03s became parallel 5.09s, and where trimming the deadline quietly turned healthy servers into failures.
Claude Code2026-08-31
Half of My Scheduled Runs Vanished Without a Single Error
A batch job set to run twice a day was only firing once. No errors, no failure alerts. Here is how to expand your own schedule, count expected runs, and reconcile them against execution records to catch silent misses.
📚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