Daily harness signal

Pin the tool surface, not just the model

August 16, 2026 · JST One fresh finding Task state · models · SDK
Claude Code 2.1.233 makes task tracking model-dependent: newer models lose the checklist tools unless you opt in. Treat model changes as capability-surface changes, not merely intelligence upgrades.
01 · Fresh · source date 2026-08-14

Make progress tooling an explicit launch contract

Use when: a prompt, skill, SDK consumer, compaction-recovery procedure, or human progress view expects TodoWrite or TaskCreate/Get/Update/List. Starting with v2.1.233, interactive Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and later family versions omit all five by default; the visible task list stays empty. The old CLAUDE_CODE_ENABLE_TASKS switch only chooses Task tools versus TodoWrite after availability is granted, so it is not the opt-in.

Action: make v2.1.233 the minimum version, then launch every checklist-dependent interactive parent with CLAUDE_CODE_ENABLE_TODO_TOOLS=1 claude. Put the same key under env in SDK options; TypeScript must spread process.env because its environment object replaces inherited variables, while Python merges. Keep CLAUDE_CODE_ENABLE_TASKS unset for TaskCreate/Get/List/Update, or set it to 0 only if your consumer still parses legacy TodoWrite. Apply this at each separately launched worker process; do not rely on a model switch or prose instruction to recreate a missing tool.

Acceptance check: on Sonnet 5, start a fresh interactive negative control without the new variable and ask exactly, “Call TaskCreate once for sentinel TASK-SURFACE-233, then list it.” Confirm no TaskCreate tool call occurs and Ctrl+T remains empty. Relaunch with CLAUDE_CODE_ENABLE_TODO_TOOLS=1; repeat and require a successful TaskCreate receipt, TaskList containing the exact sentinel, and the item still present after /compact. For an SDK wrapper, additionally require TaskCreate and TaskUpdate tool_use blocks in the streamed trace. Fail deployment if the positive receipt is absent or if your progress UI silently accepts an empty event stream.

Evidence: Anthropic’s signed v2.1.233 release and current tools/SDK references name the affected models, exact opt-in, tool-list effect, and SDK version floors. Earlier issues #80487 and #78769 provide inspectable ToolSearch negatives across Linux, Windows, and macOS and show why the older flag was insufficient. The new release turns that previously remote-gated behavior into a documented contract with an explicit override.

Caveat: Anthropic says these models self-track and omitting schemas/reminders saves context, so do not enable the tools for short work that never consumes checklist events. Background/web sessions and separately hosted teammates can expose a different roster; a parent determines in-process subagent tools. Task persistence across compaction is useful but remains session state, not an independent completion oracle. Keep tests, external issue state, and final acceptance receipts authoritative.

Compact source notes

  1. Claude Code v2.1.233 (published 2026-08-14 22:20 UTC). Signed official release defining the model-gated removal and CLAUDE_CODE_ENABLE_TODO_TOOLS override.
  2. Tools reference and task-list reference (retrieved 2026-08-16). Current authoritative model, topology, persistence, flag, and CLI semantics.
  3. Agent SDK todo tracking (retrieved 2026-08-16). Official SDK floors, environment propagation rules, and observable stream shapes.
  4. Issue #80487 (2026-07-23) and issue #78769 (2026-07-18). Versioned pre-release field reproductions with exact negative controls and cross-platform corroboration; neither substitutes for the current official contract.
  5. Method: anchor lens—signed release, current docs, and observable tool-call receipts; unity lens—model choice and launch environment jointly define the workflow’s capability surface. A listed model exposing the tools without opt-in, or failing to expose them with the new flag, falsifies the gate. Confidence: Confirmed.