Deje que el agente administre su propio progreso
"El agente puede seguir su propio progreso y yo puedo verlo". Deje que el modelo haga su propia lista y luego use un pequeño mecanismo para permitirle recordar actualizar la lista.
autoplanificación estructurada
Claude Code a menudo tiene que seguir varios pasos cuando trabaja: grep para buscar referencias → leer algunos archivos → cambiar el código → ejecutar pruebas. Si dejas que el modelo "avance por sensación", verás que lo hace bien en los primeros pasos, luego comienza a olvidarse en el medio y finalmente se rinde a la mitad.
La solución a s03 es darle una herramienta de manifiesto: el modelo ajusta su propia herramienta todo para incluir elementos de tareas en él, y TodoManager verifica la estructura, persiste y devuelve la vista actual. Esto tiene dos ventajas:
- El modelo se ve obligado a explícita "qué hacer"; simplemente escribirlo ayuda a aclarar su pensamiento.
- Los humanos pueden ver lo que están pensando. La experiencia de depuración es diez veces mejor.
# Vista TODO, cada elemento está estructurado [] #1: grep "TODO" en src/ [>] #2: lee src/app.py y enumera los comentarios # en progreso [] #3: generar rebaja resumida [] #4: escribir en TODO_LIST.md (0/4 completado)
Una regla estricta: solo hay uno en progreso a la vez
TodoManager.update() Hay una verificación:
if in_progress_count > 1: raise ValueError("Sólo una tarea puede estar en progreso a la vez")
Puede parecer duro, pero en realidad está ayudando al modelo. Si permites 3 "haceres" al mismo tiempo, comenzará a pelear por todas partes y nunca terminará ninguna de ellas. Avance de misión única forzado, se obliga a completar cada una antes de abrir la siguiente.
El siguiente widget le permite actuar como modelo, enviar varias tareas pendientes y ver cuáles pasan la verificación y cuáles se rechazan.
Recordatorio molesto: ¿No hay actualizaciones durante 3 rondas consecutivas? pincharlo
Incluso si se proporciona la herramienta de tareas pendientes, el modelo ocasionalmente se "olvidará" de actualizar la lista; ha hecho muchas cosas, pero in_progress todavía está atascado en el elemento 2. El movimiento en s03 es un contador muy simple:
rounds_since_todo = 0 mientras Verdadero: respuesta = LLM(mensajes, herramientas) ... used_todo = cualquier(b.name == "todo" para b en usos_herramientas) rounds_since_todo = 0 si used_todo else rounds_since_todo + 1 if rounds_since_todo >= 3: results.append({"type":"text", "text":"<reminder>Actualiza tus todos.</reminder>"})
Cuando el recuento llegue a 3, incluya un recordatorio en la siguiente ronda de mensajes de usuario. Cuando el modelo lo vea, instintivamente ajustará la tarea. Se trata de utilizar medios de ingeniería para convertir una restricción suave ("Manténgala actualizada") en un estímulo forzado.
¿Cómo se llama esta rutina?
En los círculos de diseño de agentes, esto se denomina autoplanificación estructurada con suaves empujones: le da al modelo un estado estructurado en el que debe escribir, complementado con recordatorios oportunistas. Claude Code utiliza un patrón similar en el código real, pero más restringido (baja frecuencia, redacción neutral).
¿Por qué no simplemente escribir "actualizar todo en cada paso" en el indicador del sistema? Es posible escribir, pero la obediencia del modelo a las instrucciones generales en el mensaje del sistema disminuirá a medida que la conversación se alargue. Dividir las instrucciones en "recordatorios que se reinyectan constantemente" es mucho más estable.