有料プラン(3カ月分)を無料プレゼント中!詳しく見る
App IconMemolith
2026年08月20日 19:30

Claude Codeの「TodoWrite」、新モデルでは既定オフに

執筆: Takumi(Memolith開発者)
メモリスメモリスによる要約
  • Claude Codeのタスク管理ツールが、単一のTodoWriteから粒度の細かいTask系4ツールへ既定で切り替わった
  • Opus 4.8・Sonnet 5などの新モデルが対象で、旧来のTodoWriteは環境変数を設定すれば引き続き使える
  • 実際に確認したところ、この記事を書いているセッション自身にもTodoWrite・Task系ツールのいずれも見当たらない

「Claude CodeのTodoWrite、なくなるの?」——Claude Agent SDKの公式ドキュメント「Todo Lists」を読んで、そう思った人は少なくないはずだ。ページの冒頭に、こんな注記がある。

TypeScript Agent SDK 0.3.233以降、またはPython Agent SDK 0.2.139以降では、Opus 4.8・Sonnet 5・Fable 5・Mythos 5、およびそれ以降のモデルで、次のツールは既定でオプトインしない限り使えなくなる:TodoWriteTaskCreateTaskGetTaskUpdateTaskList

一見、タスク管理そのものが丸ごと使えなくなるように読める。だが実際に何が起きているかというと、少し違う。「単一のTodoWriteという道具」から「粒度の細かい4つの道具」へ、既定の仕組みが切り替わった、というのが正確なところだ。

何が変わったのか

これまでのClaude Code(正確にはその内部で使われているClaude Agent SDK)は、TodoWriteという1つのツールでタスク一覧を管理していた。やることが増えれば、todo配列全体をまるごと書き直して送り直す。シンプルな分、リストが長くなるほど毎回の書き直しコストは増える。

新しい仕組みでは、この1つのツールが4つに分かれた。

  • TaskCreate:新しいタスクを1件追加する
  • TaskUpdate:既存のタスクを1件だけ更新する(状態変更・削除も含む)
  • TaskList:現在のタスク一覧を読み出す
  • TaskGet:特定の1件を読み出す

配列をまるごと書き直す方式から、1件ずつIDで指定して操作する方式への移行だ。各タスクにはtaskIdが振られ、依存関係(このタスクは別のタスクの完了待ち、といった関係)や担当も持てるようになっている。公式ドキュメントには、両者の対応関係を示す移行表まで用意されている。

対象になるのはOpus 4.8・Sonnet 5・Fable 5・Mythos 5、およびそれ以降のモデルだ。これらのモデルでは、TodoWriteはもちろん新しいTask系4ツールも、何も設定しなければ一切使えない。使いたい場合は環境変数CLAUDE_CODE_ENABLE_TODO_TOOLS=1を設定してオプトインする必要がある。逆に、それ以外の(旧世代の)モデルでは、Claude CodeはTask系ツールを既定で提供し、CLAUDE_CODE_ENABLE_TASKS=0を設定した場合だけ従来のTodoWriteに戻る。

実際に確認してみた

この記事を書いているのは、私が普段の記事執筆やサイト運用で使っているClaude Code(Sonnet 5)のセッションだ。実際に使えるツールの一覧を確認してみたところ、TodoWriteはもちろん、TaskCreateをはじめとするTask系ツールも一つも見当たらなかった。ドキュメントに書かれている「対象モデルでは既定で両方とも使えない」という説明どおりの状態だった。

つまり、いま何もタスク管理をしていないのかというと、そうでもない。手元での作業を振り返ると、複数の作業を並行して進めるときは、会話の中で「今どこまで終わったか」を都度、文章で棚卸しし直す形で進んでいる。専用のツールで一覧を保持・更新するのではなく、そのつど言葉で状態を確認し直す、という形に自然と寄っている印象だ。

この変更が意味すること

論点は大きく2つある。

まず、なぜ既定オフにしたのかという点。単一ツールでの配列丸ごと書き直しは、シンプルだが、タスクが増えたり依存関係が絡んだりするほど非効率になる。1件ずつIDで操作できるTask系ツールは、複数のタスクが並行して動くような複雑な自動化ワークフローに向いた設計だ。一方で、そうした複雑さを必要としない小さな作業まで細かいツール呼び出しに置き換えると、むしろオーバーヘッドになりかねない。だからこそ「新しいモデルでは両方とも既定オフ」という、一見中途半端に見える設定が選ばれたのだと考えられる——複雑なタスク管理が要る場面は開発者が明示的にオプトインし、要らない場面はモデル自身の会話能力で状態管理を担わせる、という役割分担だ。

もう一つは、この変更にどう備えるかという点。Claude Agent SDKを使ってツールやワークフローを組んでいる開発者は、TodoWritetool_useブロックを監視するコードを書いていた場合、対象モデルに切り替えた瞬間にその監視が丸ごと無反応になる。単なるツール名の変更ではなく、入力の形自体も変わる(TaskCreatesubjectdescriptionTaskUpdatetaskIdと更新したいフィールドだけを送る)ため、監視コード側の書き換えが要る。公式ドキュメントの移行表を見ながら、TaskCreateTaskUpdateの両方を拾うように直すのが確実だ。既存の挙動をそのまま保ちたいだけなら、CLAUDE_CODE_ENABLE_TODO_TOOLS=1を設定して、当面は旧来のTodoWriteに留まるという選択肢も残っている。

「todoが消える」という受け止め方は、半分正しく半分違う。todoという概念、進捗を追うという機能自体は残っている。変わったのは、それを実現する道具の粒度と、既定でどちらの道具が渡されるか、という部分だ。

まとめ

  • Claude Agent SDKの新しいモデル(Opus 4.8・Sonnet 5・Fable 5・Mythos 5等)では、タスク管理ツールが単一のTodoWriteから、TaskCreateTaskUpdateTaskListTaskGetという粒度の細かい4ツールへ既定で切り替わった
  • todoの概念自体が無くなったわけではなく、旧来のTodoWriteも環境変数CLAUDE_CODE_ENABLE_TODO_TOOLS=1で引き続き使える
  • 実際にこの記事を書いているセッションでも両方のツール群が確認できず、複数作業の進捗は会話の中で都度言葉にして管理する形に寄っていた
  • SDKでTodoWritetool_useを監視するコードを書いている場合、対象モデルへ切り替えると監視が反応しなくなるため、TaskCreate/TaskUpdateの両方を拾うよう書き換えが必要になる

あわせて読みたい:

Memolith — AIボイスメモ4.8🎁 有料プラン3カ月分を無料プレゼント中詳しく見る