Estado em disco — sobrevive à compressão
"State that survives compression — because it's outside the conversation."
Qual a diferença entre TodoWrite e Task?
O TodoManager do s03 também lista tarefas — mas armazena tudo em memória. Quando o auto_compact do s06 é acionado e o messages[] é substituído por um summary, o estado do TodoManager some junto (por estar em memória).
O Task do s07 funciona diferente: cada task é um arquivo .tasks/task_42.json. Seja compressão de contexto, reinício do processo ou troca de agent — enquanto os arquivos em disco existirem, as tasks existem.
# .tasks/task_12.json { "id": 12, "subject": "Refactor auth middleware", "description": "Extract JWT logic to shared module", "status": "pending", "blockedBy": [8, 11], # precisa que #8 e #11 estejam concluídos "owner": "" }
Regra de escolha: tarefas temporárias (esqueça quando acabar) usamtodo; tarefas persistentes (que precisam sobreviver entre sessões ou têm dependências) usamtask.
blockedBy · como o grafo de dependências funciona
blockedBy é uma lista de IDs de tasks — todas precisam estar completed para que a task atual seja "executável".
O s07 tem um detalhe elegante: ao concluir uma task, ela automaticamente se remove da lista blockedBy de todas as outras tasks.
def _clear_dependency(self, completed_id: int): # Scan every task, remove completed_id from their blockedBy for f in self.dir.glob("task_*.json"): task = json.loads(f.read_text()) if completed_id in task.get("blockedBy", []): task["blockedBy"].remove(completed_id) self._save(task)
Assim o agent não precisa manter uma tabela separada de "o que foi desbloqueado" — basta varrer .tasks/ e buscar as que tenham status=="pending" and not blockedBy. Esse é o conjunto executável agora.
Interaja com o grafo de dependências
O widget abaixo tem 5 tasks com dependências. Clique em "complete" e veja o blockedBy atualizar automaticamente, revelando quais tasks ficam disponíveis (destaque verde).
Sobrevive à compressão?
O s06 mostrou que o auto_compact substitui o messages[] por um único summary. Mas as tasks não são afetadas, pois estão no disco. Teste: crie 5 tasks, comprima o contexto, depois varra o .tasks/ — o agent pode continuar de onde parou.