CLAUDE_CODE_ENABLE_TASKS=0 does not restore TodoWrite on Opus 4.8 / Sonnet 5 / Fable 5 (no task/todo tool available at all)

Open 💬 2 comments Opened Jul 14, 2026 by urda

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

  1. Be on an account/model in the tengu_vellum_ash treatment (e.g., Opus 4.8).
  2. Set "CLAUDE_CODE_ENABLE_TASKS": "0" in ~/.claude/settings.json (or export the env var).
  3. Start a fresh session.
  4. Observe: neither TodoWrite nor 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 TodoWrite fallback from the experiment gate so CLAUDE_CODE_ENABLE_TASKS=0 restores it on gated models.
  • Have the experiment leave TodoWrite available when it disables the new Task tools.
  • Surface a one-line notice that todos/tasks are intentionally disabled for the current model.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗