Hermes v0.20.5: Group chats finalmente aceitam arquivos, faxina de worktrees e recibos para atualizações


Você roda uma máquina com vários fluxos Hermes em paralelo e, um dia, decide fazer uma faxina: ls .worktrees/ mostra duas dúzias de trees, e a lista de branches rola por três telas — mas você não ousa apagar nada, porque não consegue dizer qual tree ainda guarda trabalho não enviado. Enquanto isso, você monta um group chat no Bot Mode com três bots acompanhando um projeto e, ao tentar compartilhar um PDF de design, descobre que a sala simplesmente não aceita arquivos. Essas são as tarefas que ninguém pediu explicitamente, mas todo mundo já esbarrou — e é exatamente disso que trata a v0.20.5 (tag v2026.8.19, lançada em 19 de agosto de 2026).

A janela mesclou cerca de 323 PRs e ~746 commits em ~1.250 arquivos desde a v0.20.4. Não há um único recurso de destaque: a história é que os group chats do Bot Mode finalmente aceitam arquivos, os worktrees finalmente ganham um comando seguro de faxina, as atualizações finalmente produzem recibos auditáveis, e os cron jobs finalmente têm memória. Vamos ver cada um.

Group chats aceitam arquivos — e mensagens antigas são dobradas automaticamente

Os group chats do Bot Mode costumavam ser só texto: para mostrar um PDF aos bots de uma sala, você precisava colocar o arquivo em algum lugar e referenciar o caminho no prompt. Agora arquivos são cidadãos de primeira classe — as salas aceitam PDFs, arquivos diversos e drag & drop, e todo bot que responde ao turno vê os anexos (PRs #97b41f8cf, #b359db72e). O cenário de acompanhamento de projeto com vários bots finalmente funciona sem atalhos.

Salas longas também têm resposta: conversas mais antigas são dobradas automaticamente em resumos de uma linha (“▸ API design … 14 respostas · há 2h”) enquanto a conversa mais recente permanece totalmente aberta (#8505559fa) — as salas param de crescer sem limite e o histórico continua escaneável. Os avatares também ganharam cara nova: eles agora usam por padrão rostos blob desenhados deterministicamente a partir do nome do agente (mesmo nome, mesmo rosto, sempre), com quatro novas silhuetas do blobatar 2.0.0 (#a77ee88ce, #cb0fd836a). Para um tour sistemático dos recursos de group chat, veja nosso guia de group chats do Bot Mode.

hermes worktree list/prune: faxina segura para worktrees

De volta à cena de abertura. Fluxos multi-agente (hermes -w ou /worktree new) acumulam dezenas de trees e centenas de branches mesclados em .worktrees/. O pruner silencioso de inicialização só toca em trees limpas e totalmente mescladas; todo o resto fica para sempre — conservador por design, mas significa que sobra para você auditar na mão.

A v0.20.5 adiciona um comando explícito de recuperação, com dry-run primeiro (#f309f92d3):

hermes worktree list              # audit: one row per tree — age, size, verdict, reason
hermes worktree prune --dry-run   # show the plan, change nothing
hermes worktree prune             # reclaim safe trees + merged branches

list imprime uma tabela: nome da tree, idade, tamanho, veredito (eliminar/manter) e motivo, com um rodapé resumindo “N trees, X no total, Y recuperáveis agora”. As invariantes de segurança são idênticas às do pruner de inicialização: modificações rastreadas nunca são excluídas, em qualquer idade, commits únicos não enviados nunca são excluídos (git cherry decide o que é “único”; repositórios rasos são aprofundados sem blob primeiro), trees com lock ativo ficam intocadas, um branch só é excluído depois que a remoção do worktree teve sucesso, e rascunhos apenas não-rastreados são arquivados em ~/.hermes/archive/worktree-prune/ antes que a tree seja eliminada — lixo sai, trabalho vivo fica.

Atualizações agora vêm com recibos: hermes update --plan

“O que realmente aconteceu durante a atualização” costumava ser uma caixa-preta: imprimir ✓ Code updated! e dar o serviço por encerrado — o helper morre depois de imprimir, o restart é pulado silenciosamente, o desktop mostra falha para uma atualização bem-sucedida — as classes de falha silenciosa (#88848, #74973, #85753, #81193) eram todas adivinhação depois do fato. A v0.20.5 faz o updater provar seu resultado (#0aecadc17, #1d74833d8):

  • hermes update --plan: somente leitura. Lista o que a atualização vai tocar — tipo de instalação (git/docker/nix), cada serviço Hermes em execução em todos os profiles com seu supervisor e a versão do código em execução, e como cada um será reiniciado. Seguro de rodar em uma frota ativa.
  • Recibos estruturados: todo hermes update grava um registro JSON legível por máquina — o que descobriu, fez, pulou (e por quê) — em <HERMES_HOME>/logs/update_receipts/. Após a fase de reinício, ele lê o gateway_state.json de cada profile, compara o code_sha de cada gateway ativo com o HEAD do checkout recém-atualizado e imprime uma matriz de versões da frota — frotas com versões mistas viram um relatório alto e acionável em vez de um estado latente.

Rode hermes update --plan antes de atualizar para ver o que vai mudar e confira o recibo depois — quem está em qual versão fica visível de relance. Isso dá continuidade ao arco do honesto hermes update da v0.20.4: atualizar está saindo do “confia em mim” para o “verificável”.

Cron jobs têm memória — e esforço de raciocínio por job

Os cron jobs costumavam ser tratados de forma diferente: skip_memory=True, MEMORY.md/USER.md nunca carregados e a ferramenta de memória duramente removida — mesmo se você a nomeasse nos enabled_toolsets do job. Usuários recorriam a gambiarras. Os agentes de cron agora rodam com memória persistente habilitada como qualquer outro agente (#ef04d846e): os jobs podem ler — e atualizar — sua memória persistente.

Cada job também pode fixar seu próprio esforço de raciocínio, independente do agent.reasoning_effort global e dos reasoning_overrides por modelo (#4e1dd1a74):

# heavy scheduled analysis at high, cheap recurring job at minimal — global default untouched
hermes cron create "0 7 * * *" --reasoning-effort high --prompt "Deep weekly repo-trend analysis"
hermes cron create "every 5m"  --reasoning-effort minimal --prompt "Health check and report"

Níveis: none/minimal/low/medium/high/xhigh/max/ultra; níveis que um modelo não suporta são limitados pelo provider no momento da requisição (fixar xhigh em um modelo que limita em high roda em high). Passe uma string vazia ao editar para limpar a fixação. Para mais padrões de cron, veja nosso guia completo de automação com cron.

opencode-free: um modelo gratuito genuinamente sem chave

opencode-free agora é totalmente sem chave — sem variável de ambiente, sem conta, wire anônimo (#ca06b8768) — e a sincronização de drift do catálogo puxa os modelos gratuitos ao vivo do OpenRouter para a lista enquanto remove slugs gratuitos mortos (#624723130). Providers sem chave contam como autenticados em todo lugar: opencode-free aparece direto em /model e nos seletores do desktop com zero configuração (#2a2307e68):

hermes model    # pick opencode-free — no key required

Se você ainda não configurou um modelo gratuito, isso te dá uma opção que funciona de fábrica. Combinado com nossos cinco canais de busca gratuitos, uma instalação nova do Hermes pode rodar completamente sem chaves.

Outras melhorias de “ninguém pediu, mas todo mundo precisa”

  • Disciplina de execução e proteções contra travamentos (dos achados da avaliação Composio): cancelamento de background-review sincronizado com a prioridade correta de foreground (#37da0d4d5, #b883756b7), esforço de raciocínio Ox Alpha limitado de forma confiável entre os providers zen e free (#d4d04098a), decoração de cache-control do prompt-caching idempotente (#0fc52b055) — tarefas de longa duração travam menos e gastam tokens de forma mais previsível.
  • Performance do desktop: hidratação do Bot Mode paint-first, spinners do compositor, React Compiler nos dois renderers.
  • Editar mensagens em sessões antigas não falha mais (#02e270a47); rascunhos de DM no Telegram mantêm a formatação rica após o streaming (#790c85014); o bootstrap do Docker stage2 API_SERVER_KEY não depende mais da existência de .env (#7a17a1b8a).

Para o detalhamento completo destaque por destaque (incluindo as listas de Melhorias e Correções), veja nossas notas da release v0.20.5. Atualizar é simples:

hermes update

Após atualizar, rode hermes doctor para verificar a instalação e reinicie o gateway (hermes gateway) para que as mudanças de plataforma entrem em vigor. Para ver o que a próxima atualização vai tocar antes de rodá-la, comece com hermes update --plan. Esta release não tem um título chamativo — mas ela limpa uma pilha de tarefas com as quais todo mundo já esbarrou, e uma boa faxina deixa tudo mais leve quando termina.