Listas de tarefas agora aninham: o todo do Hermes ganha subtarefas

Você já reparou que, quando pede algo genuinamente complexo ao Hermes — “refatore este módulo e adicione testes” — ele mantém uma todo list na sessão, marcando os itens conforme avança, e ainda lembra onde estava mesmo depois da compressão de contexto? Essa lista tinha um teto duro: ela era plana. Cada tarefa ficava em uma única coluna, e a ordem significava prioridade. Expressar “primeiro faça A, e dentro de A há os passos 1, 2, 3” exigia uma prosa estranha, era mais difícil para o agente ler e mais difícil para você escanear. A PR #97921 (mesclada em 29 de agosto) remove esse teto: os itens de todo agora podem se aninhar — as subtarefas penduram num item pai por meio de um campo parent opcional, e toda superfície renderiza a árvore com indentação.
O que é a tool todo
Primeiro, o contexto. todo é uma tool nativa do Hermes: o agente a usa automaticamente para montar uma lista de acompanhamento para tarefas complexas (a documentação oficial da tool sugere 3+ passos) ou quando você entrega várias coisas de uma vez. O design é deliberadamente enxuto:
- Uma única tool
todo— passe um parâmetrotodospara escrever, omita para ler a lista atual; - Toda chamada retorna a lista completa atual, para o agente sempre saber onde está;
- Apenas quatro status:
pending,in_progress,completed,cancelled; - Após a compressão de contexto, a lista é reinjetada com um cabeçalho estável (“[Your active task list was preserved across context compression]”), para tarefas longas não perderem memória.
O agente mantém a lista sozinho — você não precisa decorar nenhum comando. Basta pedir “faça um plano primeiro” ou “quebre isso em uma lista de tarefas” no seu prompt e ele segue a partir daí.
Como as subtarefas ficam
A mudança é uma coisa só: cada item de todo ganha um campo parent opcional apontando para o id de outro item.
1. Refactor parser module (id: t1)
├─ Split parse_line function (id: t2, parent: t1)
└─ Add unit tests (id: t3, parent: t1)
2. Update docs (id: t4)
O efeito: toda superfície — texto da CLI, painel de tarefas do app desktop, o adaptador ACP — renderiza as subárvores indentadas. A referência oficial da tool diz de forma direta: o campo parent opcional de um item aponta para o id de outro item, tornando-o uma subtarefa, e as superfícies renderizam a árvore indentada.
A implementação também se defende contra o agente se enrolando sozinho:
- Autorreferências são descartadas — um
parentapontando para si mesmo é ignorado; - Referências soltas e cíclicas são sanitizadas — um
parentque não existe, ou um loop A→B→A, é limpo após a escrita; - Um pai concluído permanece visível enquanto algum descendente estiver ativo — após a reinjeção da compressão, um pai cujos filhos ainda estão em andamento não é escondido;
- A reordenação pula listas aninhadas — mover uma posição plana arrancaria uma subtarefa dos seus irmãos, então a árvore fica intacta;
- O adaptador ACP indenta até no máximo 4 níveis — para a árvore nunca ficar ilegível.
O controle de custo também merece nota: o recurso inteiro adiciona uma propriedade de string e uma frase de comportamento ao schema de tool em cache — cerca de 45 tokens. Nenhuma tool nova, nenhum parâmetro novo além de parent, nenhuma mudança no system prompt.
Como usar: linguagem simples basta
Você nunca toca em JSON — o todo é a tool do agente, e você só precisa expressar a intenção “quero camadas”:
"Break this release down into a task list: code freeze first, then tests, build, and packaging as subtasks under it"
O agente faz o resto, produzindo uma lista aninhada com links parent; você pode perguntar “onde estamos agora?” a qualquer momento e ele lê a lista para te contar. Para estruturas que naturalmente rodam em paralelo — como uma “fase de pesquisa” com “comparar opção A” e “comparar opção B” penduradas embaixo — o aninhamento lê muito mais claro que uma lista plana.
Quando mais ajuda
- Tarefas de múltiplas etapas: releases, migrações, refatorações — naturalmente hierárquicas (“fase grande → passos pequenos”), e o aninhamento torna o progresso visível de relance.
- Sessões longas: após a compressão, a árvore é reinjetada intacta, então o agente nunca confunde subtarefas com pais.
- Múltiplas superfícies: o painel de tarefas do app desktop renderiza uma árvore de verdade, e as mensagens no gateway mostram a estrutura indentada também.
Essa mudança chegou em 29 de agosto (PR #97921) e está atualmente apenas na main — nenhuma release tag a inclui ainda (a v0.20.6 foi marcada em 27 de agosto). Para testar agora, rode hermes update para o código mais recente.
Resumo
Sair de uma lista plana para uma árvore de tarefas aninhável é um campo pequeno, mas melhora de verdade a experiência de tarefas longas: a estrutura fica certa, o acompanhamento de progresso do agente e a sua leitura ficam mais fáceis — tudo por 45 tokens. Da próxima vez que você entregar algo complexo ao Hermes, diga a ele para “quebrar a tarefa em uma lista com subtarefas” e veja a diferença.
Para mais mecânicas de tarefas longas (limites de turnos, orçamentos de execução, interromper sem parar), veja nosso guia de turnos ilimitados e guia de otimização de tokens de contexto.