El estado se escribe en el disco y sobrevive a la compresión.
「State that survives compression — because it's outside the conversation.」
¿Cuál es la diferencia entre TodoWrite y Task?
ElTodoManager de s03 también puede enumerar tareas, pero se almacena en la memoria. Tan pronto como se activa auto_compact mencionado en s06, los mensajes [] se reemplazan por un resumen y el estado de TodoManager desaparece (porque está en la memoria).
LaTask de s07 es diferente: cada tarea es un archivo .tasks/task_42.json. Ya sea que se comprima el contexto, se reinicie el proceso o se reemplace el agente: mientras el archivo del disco aún exista, la tarea seguirá existiendo.
# .tasks/task_12.json { "id": 12, "subject": "Refactor middleware de autenticación", "descripción": "Extraer lógica JWT al módulo compartido", "estado": "pendiente", "blockedBy": [8, 11], # Debe completar #8 y #11 "propietario": "" }
Reglas de selección: Utilicetodopara tareas pendientes temporales (olvídelo una vez que lo termine); utilicetaskpara tareas persistentes (retenidas entre sesiones y dependientes).
bloqueadoPor · Temperamento del gráfico de dependencia
blockedBy es una lista de identificadores de tareas; estos deben completarse antes de que la tarea actual sea "ejecutable".
La implementación de s07 tiene un detalle interesante: Cuando se completa una tarea, se eliminará automáticamente de la lista de bloqueados por de todas las demás tareas.
def _clear_dependency(self, complete_id: int): # Escanea cada tarea, elimina el id_completado de su bloqueadoPor para f en self.dir.glob("task_*.json"): tarea = json.loads(f.read_text()) if complete_id en task.get("blockedBy", []): tarea["blockedBy"].remove(completed_id) self._save(tarea)
De esta manera, el agente no necesita mantener una tabla separada sobre "qué tareas están desbloqueadas"; simplemente recorra .tasks/ y busque status=="pending" y no bloqueadoBy, que ahora son ejecutables.
Interacción del gráfico de dependencia
El siguiente widget le ofrece un gráfico de dependencia de 5 tareas. Haga clic en "completar" para ver las tareas bloqueadas por actualizadas automáticamente y qué tareas se vuelven "ejecutables" (resaltadas en verde).
¿Podrá sobrevivir después de ser comprimido?
s06 mencionó que auto_compact reemplazará mensajes[] con un resumen. Pero la tarea no se ve afectada porque está en el disco. Pruébelo: deje que el agente realice 5 tareas. Después de comprimir el diálogo, escanea .tasks/ y puede continuar donde estaba.