Начиная с 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 в карту: