[BUG] Task Tools Do Not Load

Status Open
Reported on v2.1.217
Maintainer reply None cached
Activity 4 comments · opened Jul 23, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Bug report: Task tools (TaskCreate/TaskGet/TaskList/TaskUpdate + TodoWrite) silently removed from all interactive sessions by an undocumented server-side feature flag

Reporter: Claude Code Max subscriber (2 machines: Windows 11 native install, Ubuntu EC2)
Date of report: 2026-07-22
Onset: 2026-07-21T13:50:45Z (exact, from transcript deferred_tools_delta events)
Status at time of writing: flag observed actively flapping on Anthropic's side (values below); no changelog entry, no GitHub acknowledgment, no documentation

Impact — why I am filing this angrily

  • Task/todo tooling vanished from every interactive session on every model I use (Opus 4.8, Sonnet 5, Fable 5), on two machines, with zero announcement, zero changelog entry, zero client-side indication of why. The tools are simply absent from the registry; ToolSearch returns "No matching deferred tools found."
  • Because the removal was silent and looked exactly like local corruption (the surviving TaskOutput/TaskStop pair mimics the subagent tool profile), I spent two full days debugging my own machines, config, and sync tooling — including a six-hour investigation that produced five wrong hypotheses — before binary reverse-engineering proved the cause was a remote kill switch.
  • I burned approximately 84% of my weekly usage limit debugging a problem Anthropic created and never disclosed. That usage is gone, on a paid Max plan, chasing a phantom local bug.
  • Sessions running when the flag flipped lost the tools mid-flight (deferred_tools_delta with removedNames: ["TaskCreate","TaskGet","TaskList","TaskUpdate"]), breaking in-progress multi-agent work.

Root cause (verified, not inferred)

Claude Code gates the task-tool family on a remote GrowthBook feature flag tengu_vellum_ash — a per-model kill list. Each of the four Task tools carries (verbatim from the 2.1.217 binary; identical logic verified in 2.1.206 and 2.1.218):

isEnabled(){return wD()&&!xZ()}
function wD(){if(Z.CLAUDE_CODE_ENABLE_TASKS===!1)return!1;return!0}
function xZ(){try{let e=Ke("tengu_vellum_ash",[]);if(!Array.isArray(e)||e.length===0)return!1;
  let t=Ii();return e.some((r)=>r.length>0&&t.includes(r))}catch{return!1}}

On 2026-07-21, shortly before 13:50:45Z, the served value of tengu_vellum_ash changed from [] to ["claude-opus-4-8","claude-sonnet-5","claude-fable-5"] — i.e., every current default model. Local flag-cache history (restic snapshots of ~/.claude.json): cache refreshed 2026-07-20T05:08Z → []; cache refreshed 2026-07-21T15:17Z → the 3-model list. TodoWrite is disabled by the same feature gate (observed runtime error: "TodoWrite exists but is not enabled in this context"). TaskOutput/TaskStop survive only because they are renamed KillShell/AgentOutput tools outside the gated feature — which is what made this look like a session-classification bug and cost days of misdirected debugging.

Evidence

  1. Exact onset, cross-project: exactly 4 removal events exist in 8,492 deferred_tools_delta events across 7,968 local transcripts (2026-05-10 → 2026-07-22): 13:50:45Z, 13:52:36Z, 14:09:37Z, 14:17:25Z on 2026-07-21, in three unrelated sessions/projects, each at its next turn. Zero removal events before that window; the tools never returned to affected sessions.
  2. Version-independent: reproduced on 2.1.206, 2.1.214, 2.1.215, 2.1.216, 2.1.217; the identical gate is present in the 2.1.218 binary (function qee()).
  3. Model-dependence proven by controlled A/B: two fresh interactive sessions on the same EC2 box, same binary (2.1.217), same config, one minute apart: --model haiku (not on the list) received all four tools (raw transcript tool_reference results); --model sonnet received none. Session IDs 94962d89 / 3714b3c2, 2026-07-22.
  4. Headless inconsistency: claude -p --model claude-sonnet-5 retains all task tools. Cause (also verbatim in the binary): the flag reader Ke() is fully synchronous and silently falls back to the safe default [] when neither the GrowthBook fetch nor the config bootstrap has completed — an unsynchronized hydration race, meaning tool availability depends on startup timing, not policy.
  5. Not local: independent users report the same regression in the same window: anthropics/claude-code #80151, #79949, #78769, among others opened 2026-07-21/22. All local hypotheses (config, sync tooling, env vars, teams flags, task-store state) were exhaustively eliminated; three adversarial review passes and 7 falsified alternative explanations are documented.
  6. The flag is flapping right now (all 2026-07-22, same machine/account): 21:07Z → []; 21:37Z → the 3-model list; ~22:05Z → [] again (a long-running session's registry re-added the four tools mid-conversation). Whatever is being done server-side is being done live, silently, against paying users.

Workaround currently deployed locally

"DISABLE_GROWTHBOOK": "1" in ~/.claude/settings.json env block (both machines). Verified restoring all four tools in fresh interactive sessions on listed models. Known cost: Remote Control refuses to start while set. Will be removed once the server flag is stably rolled back.

What Should Happen?

Claude should load the built in task tools.

Error Messages/Logs

Steps to Reproduce

Open a claude code session in the CLI, try to use any task tool.

Claude Model

Not sure / Multiple models

Is this a regression?

Yes, this worked in a previous version

Last Working Version

NA: I've reinstalled past 20+ versions trying to fix

Claude Code Version

v2.1.218

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

_No response_

View original on GitHub ↗

3 Comments

rubrical-worker · 1 month ago

Broken for 2 days now!

TaskCreate is not available in this session. The search loaded some similarly named tools, but none of them is it:

  • TaskOutput — retrieves output from a running/completed background task (shell, agent, remote session)
  • TaskStop — stops a running background task by ID

These are for managing background processes, not task lists. TaskCreate, TaskUpdate, and TaskList — the task-list tools that the framework rules reference (e.g., the /work execution rule's two-phase task creation and compaction-recovery pattern) — don't exist in this harness build, and no equivalent todo-list tool (like TodoWrite) is present either.

davidfpython · 10 days ago

EDIT / RESOLVED for my case. This turned out to be my own misconfiguration, not the bug tracked in this issue. I am leaving the original report below because the failure mode looks identical from the inside, and the diagnostic step that actually found it may help others.

Root cause

My Desktop session was running as a custom agent that came from a plugin I had uploaded to the app. An agent definition carries a tools: frontmatter field, and that field acts as an allowlist for the entire main thread:

---
name: newsletter-coach
tools: Skill, Read, Write, Bash, Grep, Glob
model: inherit
---

Agent (and Task) are not in that list, so the session genuinely had no subagent tool and correctly said so. Disabling the plugin fixed it immediately: asking "can you create subagents in this session?" now answers "yes, via the Agent tool."

Corrections to my report below

  • My claim that "the tool is being withheld inside the harness or server-side, not by local configuration" was wrong. It was local configuration. I inspected the spawned CLI's flags but never checked the active agent definition, which is where the restriction lived.
  • DISABLE_GROWTHBOOK=1, CLAUDE_CODE_ENABLE_TASKS and CLAUDE_CODE_ENABLE_TODO_TOOLS were all irrelevant to my problem. Two notes on those anyway, since they came up in this thread: CLAUDE_CODE_ENABLE_TASKS is only ever tested against false, so setting it to true is a no-op, and DISABLE_GROWTHBOOK silently disables Remote Control.

Tip for anyone on macOS Desktop who "cannot use subagents"

Before chasing feature flags or env vars, check whether your session is running as an agent with a restricted tool list.

  1. Ask the session to list its available tools. If you get back a short set such as Skill, Read, Write, Bash and little else, that is an agent tools: allowlist, not a feature flag. A normal session exposes Agent, ToolSearch, Workflow, Artifact and many more.
  2. Disable or uninstall your uploaded plugins, one at a time, and start a fresh session after each.
  3. To keep the plugin, delete the tools: line from its agent definition so the agent inherits all tools, then re-upload it.

Note that the app's copies of the plugin under ~/Library/Application Support/Claude/local-agent-mode-sessions/... are per-session and get regenerated, so edit the plugin you uploaded rather than those caches.

---

<details>
<summary>Original report, kept for context</summary>

Still reproducible, and also affects the Claude Desktop app (macOS, bundled Claude Code 2.1.234, Code tab).

Symptoms

  • In desktop Code-tab sessions, the model's tool list contains no Task/Agent tool at all. ToolSearch is also absent, so the "tool is deferred, load it via ToolSearch" explanation does not apply: there is nothing to load it with.
  • Asking Claude to spawn any subagent fails; it correctly reports the tool is not available.

What I ruled out

  • DISABLE_GROWTHBOOK=1 (the workaround reported earlier in this thread) does not fix it in the desktop app. I set it via the env block in ~/.claude/settings.json, restarted the app, and verified inside the session that the variable was active (echo $DISABLE_GROWTHBOOK -> 1). The Task tool was still missing.
  • The desktop app's spawned CLI process (.../Application Support/Claude/claude-code/2.1.234/claude.app/Contents/MacOS/claude --output-format stream-json --input-format stream-json ...) has no --disallowedTools and no tool-restricting flags, so the tool is being withheld inside the harness or server-side, not by local configuration.
  • Settings file is valid JSON; no managed settings in play.

Side note for others trying the workaround: the CLI binary contains the string "Remote Control requires feature-flag evaluation, which is disabled because DISABLE_GROWTHBOOK is set", so this env var silently breaks Remote Control. Not a safe workaround if you rely on remote triggers.

Would appreciate a status update. If subagents are intentionally unavailable in the desktop app for now, it would help to have that stated in the desktop docs.

</details>

rubrical-worker · 9 days ago
Still reproducible, and also affects the Claude Desktop app (macOS, bundled Claude Code 2.1.234, Code tab). Symptoms In desktop Code-tab sessions, the model's tool list contains no Task/Agent tool at all. ToolSearch is also absent, so the "tool is deferred, load it via ToolSearch" explanation does not apply: there is nothing to load it with. Asking Claude to spawn any subagent fails; it correctly reports the tool is not available. What I ruled out DISABLE_GROWTHBOOK=1 (the workaround reported earlier in this thread) does not fix it in the desktop app. I set it via the env block in ~/.claude/settings.json, restarted the app, and verified inside the session that the variable was active (echo $DISABLE_GROWTHBOOK -> 1). The Task tool was still missing. The desktop app's spawned CLI process (.../Application Support/Claude/claude-code/2.1.234/claude.app/Contents/MacOS/claude --output-format stream-json --input-format stream-json ...) has no --disallowedTools and no tool-restricting flags, so the tool is being withheld inside the harness or server-side, not by local configuration. * Settings file is valid JSON; no managed settings in play. Side note for others trying the workaround: the CLI binary contains the string "Remote Control requires feature-flag evaluation, which is disabled because DISABLE_GROWTHBOOK is set", so this env var silently breaks Remote Control. Not a safe workaround if you rely on remote triggers. Would appreciate a status update. If subagents are intentionally unavailable in the desktop app for now, it would help to have that stated in the desktop docs.

These work for me. You need these (the 2nd setting likely being the most important):

"env": {
"CLAUDE_CODE_ENABLE_TASKS": "true",
"CLAUDE_CODE_ENABLE_TODO_TOOLS": "true"
},

From Claude desktop:

TaskList

Task list: empty — no tasks currently tracked.

ToolSearch

ToolSearch needs a query — what should I look for? (e.g. select:TaskCreate,TaskUpdate to load specific tools by name, or keywords like "web fetch" to search.)

If you're probing which deferred tools actually work in this session, say so and I'll load and smoke-test a set.

> list tools

Loaded now (callable immediately)

Tool Purpose
Bash Run shell commands (Git Bash)
Read / Write / Edit File I/O
Glob / Grep File and content search
Agent Spawn subagents
Skill Invoke a skill / slash command
Workflow Multi-agent orchestration (opt-in only)
Artifact Publish HTML/MD to claude.ai
SendUserFile Surface a file to you
AskUserQuestion Structured clarifying question
ReportFindings Code-review finding output
ScheduleWakeup /loop dynamic pacing
SuggestSkills Recommend uninstalled skills
ToolSearch Load deferred tool schemas
TaskList Loaded this session — returned empty

MCP servers (loaded)

mcp__ccd_session__* — mark_chapter, spawn_task, dismiss_task, read_widget_context
mcp__Claude_Browser__ — in-app browser: navigate, computer, read_page, find, form_input, get_page_text, javascript_tool, read_console_messages, read_network_requests, resize_window, tabs_, preview_start/stop/list/logs
mcp__visualize__* — read_me, show_widget

Deferred (name only — need ToolSearch to load)

Tasks: TaskCreate, TaskGet, TaskUpdate, TaskOutput, TaskStop
Planning: EnterPlanMode, ExitPlanMode, EnterWorktree, ExitWorktree
Scheduling: CronCreate, CronList, CronDelete, Monitor, PushNotification, RemoteTrigger
Web: WebFetch, WebSearch
Skills/plugins: ListSkills, SearchSkills, ListPlugins, SearchPlugins, SuggestPluginInstall
Misc: NotebookEdit, SendMessage, DesignSync
MCP (deferred): claude-in-chrome__ (real Chrome), ccd_session_mgmt__, ccd_directory__, mcp-registry__, scheduled-tasks__*, terminal__read_terminal

Note on the task tools: per your memory notes, TaskCreate/TaskGet/TaskUpdate are gated by remote flag tengu_rosy_wren with local override CLAUDE_CODE_ENABLE_TODO_TOOLS=true. TaskList loaded and ran fine here, so the gate is open this session.

Showing cached comments. Read the full discussion on GitHub ↗