Skip to content

Task tools AND TodoWrite both hidden in interactive sessions by live tengu_vellum_ash experiment (newest models); env override ineffective #78769

Description

@GerbenCdg

Summary

On Claude Code 2.1.214 (native install, Windows 11, interactive CLI in Windows Terminal), the task tools (TaskCreate/TaskUpdate/TaskList/TaskGet) AND the TodoWrite fallback are both unavailable in interactive sessions when running on the newest models (observed on claude-fable-5). Neither appears in the main tool list, the deferred-tools list, nor via ToolSearch. The same binary in headless mode (claude -p) exposes TaskCreate normally.

Root cause appears to be the server-side experiment tengu_vellum_ash, evaluated live from Statsig at session startup, which hides both task-tracking tool families simultaneously.

Environment

  • Claude Code 2.1.214 (also observed on 2.1.211/2.1.212), native install (~/.local/bin/claude.exe)
  • Windows 11 Pro 10.0.26200, Windows Terminal (interactive TTY, not VSCode)
  • Model: claude-fable-5
  • CLAUDE_CODE_ENABLE_TASKS unset, todoFeatureEnabled: true

Analysis (from the 2.1.214 binary)

The gating functions:

// task tools enabled-check
function VR(){if(Z.CLAUDE_CODE_ENABLE_TASKS===!1)return!1;return!0}

// experiment gate
function XJ(){try{let e=et("tengu_vellum_ash",[]);if(!Array.isArray(e)||e.length===0)return!1;
let t=_i();return e.some((r)=>r.length>0&&t.includes(r))}catch{return!1}}

Tool registrations:

  • TaskCreate (and siblings): isEnabled(){return VR()&&!XJ()}
  • TodoWrite: isEnabled(){return !VR()&&!XJ()}

When XJ() returns true (current model matches an entry in the experiment value), both families are disabled, leaving the session with no task/todo tracking tool at all. This seems unintended: whatever the experiment is meant to A/B, the fallback should presumably survive.

Evidence

  1. Interactive session on claude-fable-5: no TaskCreate family, no TodoWrite, not even deferred (ToolSearch returns no match).
  2. Headless probe from the same machine/binary/model: claude -p "list your Task/Todo tools" returns TaskCreate, TaskGet, TaskList, TaskOutput, TaskStop, TaskUpdate. Headless does not perform the live Statsig fetch, so it falls back to the local cache.
  3. Clearing the cached experiment values in ~/.claude.json (cachedGrowthBookFeatures.tengu_vellum_ash and cachedExperimentData.tengu_vellum_ash.value set to []) does NOT restore the tools in interactive sessions: the live fetch at startup overrides the cache.
  4. Setting CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 (with the cache cleared) restores the task tools immediately, config hot-reload included, no restart needed.

Workaround

// ~/.claude/settings.json
{ "env": { "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" } }

plus clearing the cached tengu_vellum_ash values in ~/.claude.json. Downside: this also disables update checks and telemetry, which is a heavy hammer for getting a documented core feature back.

Expected behavior

Either of:

  • The experiment should never disable both TaskCreate family and TodoWrite at once (keep the fallback), or
  • CLAUDE_CODE_ENABLE_TASKS=1 should override the experiment gate (currently XJ() wins regardless of the env var).

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions