截至 TypeScript Agent SDK 0.3.142 和 Claude Code v2.1.142,会话使用结构化的 Task 工具
TaskCreate、TaskUpdate、TaskGet 和 TaskList,而不是 TodoWrite。请参阅迁移到 Task 工具了解监控代码如何变化。本页面上的示例设置 CLAUDE_CODE_ENABLE_TASKS=0 以继续为尚未迁移的会话显示 TodoWrite。待办事项生命周期
待办事项遵循可预测的生命周期:- 创建为
pending状态,当任务被识别时 - 激活为
in_progress状态,当工作开始时 - 完成当任务成功完成时
- 移除当组中的所有任务都完成时
何时使用待办事项
SDK 会自动为以下情况创建待办事项:- 复杂的多步骤任务需要 3 个或更多不同的操作
- 用户提供的任务列表当提到多个项目时
- 非平凡的操作受益于进度跟踪
- 明确的请求当用户要求组织待办事项时
示例
监控待办事项变化
实时进度显示
迁移到 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 工具 |
|---|---|
一个工具调用重写完整的 todos 数组 | TaskCreate 添加一个项目,TaskUpdate 按 taskId 修补一个项目 |
匹配 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 } },因此从结果块捕获它以键入您的映射。以下示例显示了对监控待办事项变化循环的最小更改。要渲染完整列表,请在流中监视 TaskList 工具结果或将 TaskCreate 结果和 TaskUpdate 输入累积到映射中: