TypeScript Agent SDK 0.3.142 および Claude Code v2.1.142 以降、セッションは
TodoWrite の代わりに構造化された Task ツール TaskCreate、TaskUpdate、TaskGet、および TaskList を使用します。監視コードの変更方法については、Task ツールへの移行を参照してください。このページの例では、まだ移行していないセッションの TodoWrite を引き続き表示するために CLAUDE_CODE_ENABLE_TASKS=0 を設定しています。Todo ライフサイクル
Todo は予測可能なライフサイクルに従います:- 作成 - タスクが識別されたときに
pendingとして作成される - アクティベート - 作業が開始されたときに
in_progressに変更される - 完了 - タスクが正常に完了したときに完了する
- 削除 - グループ内のすべてのタスクが完了したときに削除される
Todo が使用される場合
SDK は以下の場合に自動的に todo を作成します:- 複雑なマルチステップタスク - 3 つ以上の異なるアクションが必要な場合
- ユーザー提供のタスクリスト - 複数のアイテムが言及されている場合
- 非自明な操作 - 進捗追跡の恩恵を受ける場合
- 明示的なリクエスト - ユーザーが todo 整理を要求した場合
例
Todo 変更の監視
リアルタイム進捗表示
Task ツールへの移行
Task ツールは、単一のTodoWrite 呼び出しを、各新規アイテムの TaskCreate と各ステータス変更の TaskUpdate に分割し、TaskList と TaskGet はモデルが現在のリストを読み戻すために利用可能です。監視コードは引き続きアシスタントストリーム内の tool_use ブロックを検査しますが、すべての呼び出しでリスト全体を置き換える代わりに、タスク ID でキー付けされたマップを保持します。Task ツールは TypeScript Agent SDK 0.3.142 および Claude Code v2.1.142 以降のデフォルトであるため、options.env の変更は不要です。
TodoWrite を使用 | Task ツールを使用 |
|---|---|
1 つのツール呼び出しで完全な todos 配列を書き直す | TaskCreate は 1 つのアイテムを追加し、TaskUpdate は taskId で 1 つのアイテムをパッチする |
block.name === "TodoWrite" に一致 | block.name === "TaskCreate" または "TaskUpdate" に一致 |
アイテム形状:{ content, status, activeForm } | TaskCreate 入力:{ subject, description, activeForm?, metadata? }。TaskUpdate 入力:{ taskId, status?, subject?, description?, activeForm?, addBlocks?, addBlockedBy?, owner?, metadata? }。status は "pending"、"in_progress"、または "completed";削除するには status: "deleted" を設定 |
block.input.todos を直接レンダリング | 呼び出し全体でアイテムを蓄積するか、ストリームから TaskList ツール結果のスナップショットを読み取る |
TaskCreate 入力にはありません。マッチング tool_result で { task: { id, subject } } として返されるため、マップをキー付けするために結果ブロックからそれをキャプチャします。次の例は、Todo 変更の監視ループへの最小限の変更を示しています。完全なリストをレンダリングするには、ストリーム内の TaskList ツール結果を監視するか、TaskCreate 結果と TaskUpdate 入力をマップに蓄積します: