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.
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.
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.