El seguimiento de tareas pendientes proporciona una forma estructurada de gestionar tareas y mostrar el progreso a los usuarios. El SDK de Claude Code incluye funcionalidad de tareas pendientes integrada que ayuda a organizar flujos de trabajo complejos y mantener a los usuarios informados sobre la progresión de las tareas.

Ciclo de Vida de las Tareas Pendientes

Las tareas pendientes siguen un ciclo de vida predecible:
  1. Creadas como pending cuando se identifican las tareas
  2. Activadas a in_progress cuando comienza el trabajo
  3. Completadas cuando la tarea termina exitosamente
  4. Eliminadas cuando todas las tareas en un grupo están completadas

Cuándo se Usan las Tareas Pendientes

El SDK crea automáticamente tareas pendientes para:
  • Tareas complejas de múltiples pasos que requieren 3 o más acciones distintas
  • Listas de tareas proporcionadas por el usuario cuando se mencionan múltiples elementos
  • Operaciones no triviales que se benefician del seguimiento del progreso
  • Solicitudes explícitas cuando los usuarios piden organización de tareas pendientes

Ejemplos

Monitoreo de Cambios en Tareas Pendientes

import { query } from "@anthropic-ai/claude-code";

for await (const message of query({
  prompt: "Optimiza el rendimiento de mi aplicación React y rastrea el progreso con tareas pendientes",
  options: { maxTurns: 15 }
})) {
  // Las actualizaciones de tareas pendientes se reflejan en el flujo de mensajes
  if (message.type === "tool_use" && message.name === "TodoWrite") {
    const todos = message.input.todos;
    
    console.log("Actualización del Estado de Tareas Pendientes:");
    todos.forEach((todo, index) => {
      const status = todo.status === "completed" ? "✅" : 
                    todo.status === "in_progress" ? "🔧" : "❌";
      console.log(`${index + 1}. ${status} ${todo.content}`);
    });
  }
}

Visualización del Progreso en Tiempo Real

import { query } from "@anthropic-ai/claude-code";

class TodoTracker {
  private todos: any[] = [];
  
  displayProgress() {
    if (this.todos.length === 0) return;
    
    const completed = this.todos.filter(t => t.status === "completed").length;
    const inProgress = this.todos.filter(t => t.status === "in_progress").length;
    const total = this.todos.length;
    
    console.log(`\nProgreso: ${completed}/${total} completadas`);
    console.log(`Trabajando actualmente en: ${inProgress} tarea(s)\n`);
    
    this.todos.forEach((todo, index) => {
      const icon = todo.status === "completed" ? "✅" : 
                  todo.status === "in_progress" ? "🔧" : "❌";
      const text = todo.status === "in_progress" ? todo.activeForm : todo.content;
      console.log(`${index + 1}. ${icon} ${text}`);
    });
  }
  
  async trackQuery(prompt: string) {
    for await (const message of query({
      prompt,
      options: { maxTurns: 20 }
    })) {
      if (message.type === "tool_use" && message.name === "TodoWrite") {
        this.todos = message.input.todos;
        this.displayProgress();
      }
    }
  }
}

// Uso
const tracker = new TodoTracker();
await tracker.trackQuery("Construye un sistema de autenticación completo con tareas pendientes");

Documentación Relacionada