À partir du TypeScript Agent SDK 0.3.142 et Claude Code v2.1.142, les sessions utilisent les outils Task structurés
TaskCreate, TaskUpdate, TaskGet et TaskList à la place de TodoWrite. Consultez Migrer vers les outils Task pour savoir comment le code de surveillance change. Les exemples de cette page définissent CLAUDE_CODE_ENABLE_TASKS=0 pour continuer à afficher TodoWrite pour les sessions qui n’ont pas encore migré.Cycle de vie des tâches
Les tâches suivent un cycle de vie prévisible :- Créées en tant que
pendinglorsque les tâches sont identifiées - Activées en tant que
in_progresslorsque le travail commence - Complétées lorsque la tâche se termine avec succès
- Supprimées lorsque toutes les tâches d’un groupe sont complétées
Quand les tâches sont utilisées
Le SDK crée automatiquement des tâches pour :- Les tâches complexes multi-étapes nécessitant 3 actions distinctes ou plus
- Les listes de tâches fournies par l’utilisateur lorsque plusieurs éléments sont mentionnés
- Les opérations non triviales qui bénéficient du suivi de la progression
- Les demandes explicites lorsque les utilisateurs demandent une organisation des tâches
Exemples
Surveillance des modifications des tâches
Affichage de la progression en temps réel
Migrer vers les outils Task
Les outils Task divisent l’appel uniqueTodoWrite en TaskCreate pour chaque nouvel élément et TaskUpdate pour chaque changement de statut, avec TaskList et TaskGet disponibles pour que le modèle relise la liste actuelle. Votre code de surveillance inspecte toujours les blocs tool_use dans le flux assistant, mais maintient une carte indexée par ID de tâche au lieu de remplacer la liste entière à chaque appel. Les outils Task sont le défaut à partir du TypeScript Agent SDK 0.3.142 et Claude Code v2.1.142, donc aucun changement options.env n’est nécessaire.
Avec TodoWrite | Avec les outils Task |
|---|---|
Un appel d’outil réécrit le tableau todos complet | TaskCreate ajoute un élément, TaskUpdate corrige un élément par taskId |
Correspond à block.name === "TodoWrite" | Correspond à block.name === "TaskCreate" ou "TaskUpdate" |
Forme d’élément : { content, status, activeForm } | Entrée TaskCreate : { subject, description, activeForm?, metadata? }. Entrée TaskUpdate : { taskId, status?, subject?, description?, activeForm?, addBlocks?, addBlockedBy?, owner?, metadata? }. status est "pending", "in_progress" ou "completed" ; définissez status: "deleted" pour supprimer |
Rendre block.input.todos directement | Accumuler les éléments entre les appels, ou lire un instantané à partir d’un résultat d’outil TaskList |
TaskCreate. Il revient dans le bloc tool_result correspondant sous la forme { task: { id, subject } }, donc capturez-le à partir du bloc de résultat pour indexer votre carte. L’exemple suivant montre le changement minimal à la boucle Surveillance des modifications des tâches. Pour rendre une liste complète, regardez un résultat d’outil TaskList dans le flux ou accumulez les résultats TaskCreate et les entrées TaskUpdate dans une carte :