v0.20.5

Hermes Agent v0.20.5


Visão Geral

v0.20.5 — The Housekeeping Release. Lançada em 19 de agosto de 2026. ~323 PRs mesclados · ~746 commits · ~1.250 arquivos alterados (+111.500 / −20.701) desde a v0.20.4.

Esta janela não tem um único recurso de destaque — ela conclui uma pilha de coisas que estavam pendentes há muito tempo. A principal novidade é que os group chats do Bot Mode finalmente aceitam arquivos: PDFs, imagens e anexos diversos via drag & drop, vistos por todos os bots que respondem ao turno; conversas mais antigas são dobradas em resumos de uma linha para que as salas parem de rolar infinitamente; e os avatares se tornam rostos blob determinísticos, desenhados a partir do nome do agente, com quatro novas silhuetas. Para o desenvolvimento do dia a dia, hermes worktree list/prune dá aos fluxos multi-agente um canal seguro e supervisionado para recuperar worktrees acumulados e branches mesclados; hermes update --plan e recibos de atualização estruturados tornam “o que realmente aconteceu durante a atualização” auditável pela primeira vez; os cron jobs ganham memória persistente como qualquer outro agente e esforço de raciocínio por job; e opencode-free se torna um modelo gratuito genuinamente sem chave — sem variável de ambiente, sem conta, aparecendo direto em /model e no seletor do desktop.

Esta é uma patch release, então as notas oficiais são breves e a documentação curada completa chega com a v0.21.0. Esta página cobre as partes mais valiosas da janela.


Destaques

1. Group chats do Bot Mode: arquivos dentro, mensagens antigas dobradas

Os group chats costumavam ser apenas texto; agora arquivos são cidadãos de primeira classe: as salas aceitam PDFs, arquivos e drag & drop, e todo bot que responde ao turno vê os anexos (#97b41f8cf, #b359db72e). Salas longas param de rolar para sempre — 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).

Os avatares também ganharam cara nova: os avatares do Bot Mode 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).

2. hermes worktree list/prune — recuperação segura de worktrees acumulados

Fluxos multi-agente (hermes -w / /worktree new) acumulam dezenas de trees e centenas de branches mesclados em .worktrees/ com o tempo. O pruner silencioso de inicialização só toca em trees limpas e totalmente mescladas; todo o resto fica para sempre. Agora existe uma recuperação explícita, com dry-run primeiro:

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

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 (a equivalência de patch do git cherry decide o que é “único”), 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 (#f309f92d3).

3. hermes update --plan + recibos estruturados — atualizações auditáveis

O updater agora prova seu resultado em vez de presumi-lo (#0aecadc17, #1d74833d8):

  • hermes update --plan: somente leitura. Lista o 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 (a classe #88654) viram um relatório alto e acionável em vez de um estado latente.

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

Os cron jobs costumavam ser criados com skip_memory=True e uma negação dura do memory toolset, então MEMORY.md/USER.md nunca eram carregados e a ferramenta de memória era removida até dos enabled_toolsets por job. 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.

5. opencode-free: um modelo gratuito verdadeiramente 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 mortos (#624723130). Providers sem chave contam como autenticados em todo lugar: opencode-free aparece em /model e nos seletores do desktop sem configuração alguma (#2a2307e68).

hermes model    # pick opencode-free — no key required

6. Disciplina de execução e proteções contra travamentos em runtime

Um lote de endurecimento de “disciplina de execução” vindo dos achados da avaliação Composio: o cancelamento de background-review é sincronizado com a prioridade correta de foreground (#37da0d4d5, #b883756b7), o esforço de raciocínio Ox Alpha chega ao wire limitado entre os providers zen e free (#d4d04098a), e a decoração de cache-control do prompt-caching é idempotente (#0fc52b055). Nada chamativo para demonstrar — mas tarefas de longa duração travam menos e gastam tokens de forma mais previsível.

Melhorias

  • Performance do desktop: hidratação do Bot Mode paint-first, spinners do compositor, React Compiler nos dois renderers — o desktop fica mais rápido e mais responsivo.
  • Edição de mensagens em sessões antigas não falha mais (profile DB + ordinal relativo à janela, #02e270a47).
  • Rascunhos de DM no Telegram mantêm a formatação rica após o streaming (também para envios persistentes novos, #790c85014, #216c98aae).
  • O bootstrap do Docker stage2 API_SERVER_KEY não depende mais da existência de .env (#7a17a1b8a).
  • Bot Mode: turnos longos de membros em group chats não são mais perdidos (#88885 follow-ups), o roteamento de grupos entre máquinas sobrevive a trocas de conexão (#88921), e um bot pode ficar em vários group chats ao mesmo tempo (#88980).

Correções

  • A compactação nativa preserva as mensagens de resumo de compressão durante a poda pré-checkpoint (#fb27614ad).
  • Cron jobs agendados não enfiam mais MEMORY.md no prompt do job (semântica final: jobs podem ler/gravar a memória persistente, mas o lado do agendador não faz injeção extra; #fc9cbc872).
  • Sincronização de drift do catálogo: slugs gratuitos mortos removidos, modelos gratuitos do OpenRouter ativos puxados (#624723130).
  • Gateway: a exclusão do serviço orphan-reaper foi ampliada para toda a frota launchd; flags ps compatíveis com BSD + descoberta de pid launchd em todos os profiles (#42bd567a8, #d8047c303).
  • O adaptador OpenAI tolera objetos de resposta esparsos; o relay desenrola streams concluídos de forma lazy e usa nomes canônicos de operações gerenciadas (#85581, #85579, #85582).

Atualização

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: hermes update --plan.

← Hermes Agent Changelog