A partir do TypeScript Agent SDK 0.3.142 e Claude Code v2.1.142, as sessões usam as ferramentas Task estruturadas
TaskCreate, TaskUpdate, TaskGet e TaskList em vez de TodoWrite. Consulte Migrar para ferramentas Task para saber como o código de monitoramento muda. Os exemplos nesta página definem CLAUDE_CODE_ENABLE_TASKS=0 para continuar mostrando TodoWrite para sessões que ainda não foram migradas.Ciclo de Vida das Tarefas
As tarefas seguem um ciclo de vida previsível:- Criadas como
pendingquando as tarefas são identificadas - Ativadas para
in_progressquando o trabalho começa - Concluídas quando a tarefa termina com sucesso
- Removidas quando todas as tarefas em um grupo são concluídas
Quando as Tarefas São Usadas
O SDK cria automaticamente tarefas para:- Tarefas complexas com múltiplas etapas que exigem 3 ou mais ações distintas
- Listas de tarefas fornecidas pelo usuário quando vários itens são mencionados
- Operações não triviais que se beneficiam do rastreamento de progresso
- Solicitações explícitas quando os usuários pedem organização de tarefas
Exemplos
Monitorando Mudanças de Tarefas
Exibição de Progresso em Tempo Real
Migrar para ferramentas Task
As ferramentas Task dividem a única chamadaTodoWrite em TaskCreate para cada novo item e TaskUpdate para cada mudança de status, com TaskList e TaskGet disponíveis para o modelo ler de volta a lista atual. Seu código de monitoramento ainda inspeciona blocos tool_use no fluxo do assistente, mas mantém um mapa codificado por ID de tarefa em vez de substituir a lista inteira a cada chamada. As ferramentas Task são o padrão a partir do TypeScript Agent SDK 0.3.142 e Claude Code v2.1.142, portanto nenhuma mudança em options.env é necessária.
Com TodoWrite | Com ferramentas Task |
|---|---|
Uma chamada de ferramenta reescreve o array todos completo | TaskCreate adiciona um item, TaskUpdate corrige um item por taskId |
Corresponder block.name === "TodoWrite" | Corresponder block.name === "TaskCreate" ou "TaskUpdate" |
Forma do item: { content, status, activeForm } | Entrada de TaskCreate: { subject, description, activeForm?, metadata? }. Entrada de TaskUpdate: { taskId, status?, subject?, description?, activeForm?, addBlocks?, addBlockedBy?, owner?, metadata? }. status é "pending", "in_progress" ou "completed"; defina status: "deleted" para deletar |
Renderizar block.input.todos diretamente | Acumular itens entre chamadas, ou ler um snapshot de um resultado de ferramenta TaskList |
TaskCreate. Ele volta no tool_result correspondente como { task: { id, subject } }, então capture-o do bloco de resultado para codificar seu mapa. O exemplo a seguir mostra a mudança mínima para o loop Monitorando Mudanças de Tarefas. Para renderizar uma lista completa, observe um resultado de ferramenta TaskList no fluxo ou acumule resultados de TaskCreate e entradas de TaskUpdate em um mapa: