CLAUDE_CODE_ENABLE_TASKS=0 does not restore TodoWrite on Opus 4.8 / Sonnet 5 / Fable 5 (no task/todo tool available at all)
Environment
- Claude Code: 2.1.209 (experiment also observed under 2.1.207)
- Platform: macOS (Darwin 25.5.0), arm64
- Install: native build at
~/.local/share/claude/versions/2.1.209
Summary
On models covered by the tengu_vellum_ash GrowthBook experiment, no task/todo tool is exposed at all: neither the new Task tools (TaskCreate/TaskList/...) nor the legacy TodoWrite. Setting CLAUDE_CODE_ENABLE_TASKS=0, which is expected to fall back to TodoWrite, has no effect, because the same experiment kill-switch that disables the new Task tools also gates TodoWrite. There is no user-facing indication that todos are intentionally disabled, so the setting looks broken.
For an account bucketed into variation 1 of the experiment, the affected model list is:["claude-opus-4-8", "claude-sonnet-5", "claude-fable-5"]
Steps to reproduce
- Be on an account/model in the
tengu_vellum_ashtreatment (e.g., Opus 4.8). - Set
"CLAUDE_CODE_ENABLE_TASKS": "0"in~/.claude/settings.json(or export the env var). - Start a fresh session.
- Observe: neither
TodoWritenor any Task tool is available to the model.
Expected
Disabling the new task system with CLAUDE_CODE_ENABLE_TASKS=0 restores the legacy TodoWrite tool, as it does on models not covered by the experiment. At minimum, todos should not silently disappear with no fallback and no notice.
Actual
Neither system is available. The env flag is parsed correctly, but it is overridden by the experiment gate, so there is no way to get a todo/checklist tool on these models and no message explaining why.
Root cause (observed by inspecting the 2.1.209 build)
Tool enablement reduces to:
NH() = "tasks enabled?" -> false when CLAUDE_CODE_ENABLE_TASKS is 0/false/no/off
CX() = "current model id matches the tengu_vellum_ash experiment list"
TodoWrite.isEnabled = !NH() && !CX() // wants tasks OFF
TaskCreate.isEnabled = NH() && !CX() // wants tasks ON
Both tool families share the !CX() term. When CX() is true, the experiment removes the new Task tools and the legacy TodoWrite fallback at the same time. CLAUDE_CODE_ENABLE_TASKS=0 correctly makes !NH() true, but it cannot overcome !CX() being false, so nothing turns on.
Experiment payload observed in ~/.claude.json:
"cachedExperimentData": {
"tengu_vellum_ash": {
"experimentId": "tengu_vellum_ash_experiment",
"variationId": 1,
"value": ["claude-opus-4-8", "claude-sonnet-5", "claude-fable-5"]
}
}
(These are internal identifiers read from the local build/config on 2026-07-14; they may differ across versions and experiment rollouts.)
Impact
Users on flagship models who rely on the todo/checklist have no working tool and no escape hatch. CLAUDE_CODE_ENABLE_TASKS=0 behaves like a no-op for them, which is confusing and reads as a broken setting.
Suggested fix (any one)
- Decouple the legacy
TodoWritefallback from the experiment gate soCLAUDE_CODE_ENABLE_TASKS=0restores it on gated models. - Have the experiment leave
TodoWriteavailable when it disables the new Task tools. - Surface a one-line notice that todos/tasks are intentionally disabled for the current model.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗