Claude Code 2.1.268(2026-09-10)の changelog に、こう書かれています。
Changed the task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) to be offered only on
Claude 3.x, Opus 4.0–4.7, Sonnet 4.0–4.6, Haiku 4.5; setCLAUDE_CODE_ENABLE_TODO_TOOLS=1elsewhere
列挙されたモデルに Opus 5 も Sonnet 5 も入っていません。 更新するとタスクリストが消えることになります。更新前(2.1.263)と更新後(2.1.268)で測りました。
モデルで分かれるのは本当だった
haiku 4.5 あり / opus 5 なし / sonnet 5 なし
ただし 2.1.263 でも、まったく同じだった
66回の有効な計測で、両版の差はゼロ
changelog が「変更した」と書いている挙動は、5バージョン前から起きていました。
検証環境: Windows 10 / Claude Code 2.1.263 と 2.1.268 /
claude -p/ 測定は 2026-09-11
測り方: ツール一覧は init イベントで取れる
--output-format stream-json --verbose を付けると、開始時にツール名の配列が流れてきます。
claude -p "hi" --model opus --output-format stream-json --verbose
{"type":"system","subtype":"init","model":"claude-opus-5","tools":["Task","Bash","Edit", ...]}
モデルに聞くのではなく、この配列を数えました。 聞くと答えがぶれます。
2つの版を並べるため、2.1.268 はグローバルに入れず別ディレクトリへ(npm install ...@2.1.268 --prefix <一時dir>)。
結果: モデルで分かれるのは本当。ただし両版で同じ
CLAUDE_CODE_ENABLE_TASKS と CLAUDE_CODE_ENABLE_TODO_TOOLS を明示的に消してから、各3回。
| モデル | 2.1.263 | 2.1.268 |
|---|---|---|
opus(claude-opus-5) |
ツール42個・なし | ツール42個・なし |
sonnet(claude-sonnet-5) |
ツール42個・なし | ツール42個・なし |
haiku(claude-haiku-4-5) |
46個・TaskCreate / TaskGet / TaskUpdate / TaskList | 46個・同じ |
changelog の切り分けは当たっています。 当たっていないのは、それが 2.1.268 の変更だという点だけです。
環境変数の組み合わせも6通り測りました(opus、各3回)。
| 条件 | 2.1.263 | 2.1.268 |
|---|---|---|
| 何も設定しない | なし | なし |
ENABLE_TASKS=1 |
なし | なし |
ENABLE_TODO_TOOLS=1 |
TaskCreate / Get / Update / List | 同じ |
ENABLE_TASKS=1 + TODO_TOOLS=1
|
同上 | 同上 |
ENABLE_TASKS=0 |
なし | なし |
ENABLE_TASKS=0 + TODO_TOOLS=1 |
TodoWrite | 同じ |
12セルすべて一致。 差は1つも出ませんでした。
なぜ更新前から同じなのか(推測)
確かめられたのは「2つの版で同じだった」ことだけです。 理由は特定できていません。
ただし、機能フラグがサーバーから来る仕組みは実在します。~/.claude.json に取得済みの実験データが入っています。
cachedExperimentData = {
'tengu_read_dedup_killswitch': {'experimentId': ..., 'value': True}, ...
}
cachedGrowthBookFeaturesAt = (取得時刻)
そして 2.1.261 の changelog に、こうあります。
Fixed feature flags gated to a newer version occasionally applying to an older Claude Code
version running on the same machine
「新しい版に向けたフラグが、同じマシンの古い版に適用されることがあった」——公式が認めて修正した項目です。
今回がこれに当たるという証拠はありません。 フラグ名も分かりません。サーバー側の判定である可能性も、両版のコードがそもそも同じである可能性も残ります。
言えるのは1つだけです。changelog の日付は「コードが入った日」であって、「挙動が変わった日」とは限りません。
測定が、親プロセスの環境変数に汚染されていた
最初の24回は捨てました。haiku が TodoWrite 1個になっていたからです。上の表では4個出ています。
[Environment]::GetEnvironmentVariable("CLAUDE_CODE_ENABLE_TASKS") # -> 0
[Environment]::GetEnvironmentVariable("CLAUDE_CODE_ENABLE_TASKS", "User") # -> (なし)
[Environment]::GetEnvironmentVariable("CLAUDE_CODE_ENABLE_TASKS", "Machine") # -> (なし)
ユーザー環境変数にもシステム環境変数にも settings.json にもありません。 それでもプロセスには 0 が入っています。動いている Claude Code セッションが、子プロセスに渡していました。
haiku の結果 |
ツール |
|---|---|
| 環境変数を消してから | TaskCreate / TaskGet / TaskUpdate / TaskList(46個) |
親から TASKS=0 を継いだまま |
TodoWrite(43個) |
同じコマンド、同じモデル、同じ版で、答えが変わります。 測る前に明示的に消す必要がありました。
Remove-Item Env:\CLAUDE_CODE_ENABLE_TASKS -ErrorAction SilentlyContinue
ENABLE_TASKS=0 は「無効化」ではなく「置き換え」だった
上の表をもう一度見ると、0 を入れたときの挙動が読み取れます。
haiku + 何も設定しない TaskCreate / TaskGet / TaskUpdate / TaskList (4個)
haiku + ENABLE_TASKS=0 TodoWrite (1個)
消えていません。4つが1つに入れ替わっています。 opus でも同じ形で、ENABLE_TODO_TOOLS=1 だけなら Task 系4つ、ENABLE_TASKS=0 を足すと TodoWrite 1つになります。
0 は「タスク管理をやめる」ではなく、「新しい4つではなく古い1つを使う」の意味でした。
言えないこと
- 測ったのは 2.1.263 と 2.1.268 の2点だけ。 いつ挙動が変わったかは特定していません。2.1.263 より前は未測定です
- フラグ経由だという直接の証拠はありません。 サーバー側の判定である可能性も、クライアント側のコードが両版で同じである可能性も残ります
-
claude -pで測っています。 対話セッションで同じとは確かめていません - モデルは
opus/sonnet/haikuのエイリアス3種のみ。Opus 4.x や Sonnet 4.x は手元で試していません - 親プロセスが
TASKS=0を渡すのが Claude Code 全般の挙動か、VS Code 拡張だけかは切り分けていません
まとめ
- 2.1.268 の changelog は「タスクツールを一部モデルに限定した」と書いている
- モデルの切り分けは当たっていた。 Haiku 4.5 は4つ、Opus 5 / Sonnet 5 は0
- ただし 2.1.263 でも同じ。66回の有効な計測で12セルすべて一致
- 機能フラグはサーバーから来る。2.1.261 の changelog に「新しい版向けのフラグが古い版に適用されることがある」とある
-
測定が親プロセスの環境変数に汚染された。
CLAUDE_CODE_ENABLE_TASKS=0が子に渡り、haikuの答えが4個→1個に変わった -
ENABLE_TASKS=0は無効化ではなく置き換え。 Task 系4つがTodoWrite1つになる
この項目に関しては、更新に身構える必要はありませんでした。 既に変わっていたからです。
「更新で変わったか」を測るなら、Claude Code の外から走らせてください。 中からだと、親が渡した環境変数が答えを書き換えます。
参考
- Claude Code changelog — 2.1.268 と 2.1.261 の該当項目
-
CLI reference —
--output-format stream-jsonと--verbose
関連記事
- Claude Code の設定10件を測り直したら、2件は挙動が変わっていた — 同じ2つの環境変数を測った回
- Claude Code の設定でハマる箇所まとめ — 設定まわりの詰まりどころ
JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
エンジニア採用も行っています。もしご興味あれば覗いてみてください。
▶ 採用サイト