Hermes v0.21.1: a atualização que deixou o Hermes um terço menor — e tudo o que importa para você, mais rápido

A maioria das atualizações do Hermes exige algo de você: um comando novo para aprender, uma chave de config para ponderar, um default novo que muda o comportamento da sua configuração. A v0.21.1 (tag v2026.9.7, lançada em 7 de setembro de 2026) é o raro oposto — uma atualização que você instala e mal percebe, porque tudo o que mudou está sob o capô ou nas partes do fluxo de trabalho que costumavam te irritar mais. O projeto chama isso de patch de consolidação: cerca de 5.139 commits, ~4.364 arquivos alterados e ~632 PRs mesclados desde a v0.21.0, com as notas oficiais mantidas breves e a curadoria completa adiada para a v0.22.0. Mesmo assim, percorremos a janela para que você não precise — aqui está o que realmente importa.
Uma atualização que deixou o codebase um terço menor
A maior história desta janela é invisível a menos que você abra o repositório: uma simplificação de todo o codebase (PR #102117) levou o código-fonte de 1.063.826 para 698.363 linhas — um corte de 34,4% — com o comportamento garantidamente inalterado. Trinta e sete arquivos acima de 5.000 linhas viraram seis. Os monstros famosos se foram: o gateway/run.py encolheu de 34.847 para 5.512 linhas, o cli.py de 22.426 para 4.656, e o número de funções acima de 300 linhas caiu de 192 para 2. Os arquivos antigos ficaram para trás como entry points enxutos, e o time verificou schemas JSON de tools, defaults de config e wire formats byte-idênticos contra a árvore pré-refactor antes de mesclar.
Por que você deveria se importar, se nada do que você vê mudou? Porque um codebase que cabe na cabeça de um modelo custa menos para navegar: as evals do próprio PR mediram o sucesso de tarefas de agente e o gasto de tokens na navegação de repositório antes e depois, e hoje cada subsistema é pequeno o bastante para um agente (ou um humano) realmente segurá-lo em contexto. Sua próxima sessão num codebase grande carrega mais rápido e comete menos deslizes — o refactor é, na prática, um desconto permanente de tokens para a codificação agêntica. A página de notas da release v0.21.1 deste site tem os números completos, se você gosta desse tipo de coisa.
Fan-outs que avisam assim que chegam
Se você já despachou cinco subagents para pesquisar algo e depois ficou encarando um chat vazio por uma hora porque o mais lento estava travado, esta é para você. O delegate_task antes retornava um único resultado gigante depois que o último filho terminava; agora cada tarefa retorna no momento em que é concluída (PR #104299). Tarefas que pertencem ao mesmo grupo podem aderir a um group, e os resultados agrupados ainda chegam numa única mensagem:
{
"tasks": [
{ "goal": "check api latency", "group": "bench" },
{ "goal": "check db latency", "group": "bench" },
{ "goal": "scan the changelog" }
]
}
As duas tarefas de benchmark voltam juntas; a varredura do changelog chega sozinha no segundo em que termina. Você pode começar a agir sobre os primeiros resultados em vez de esperar o retardatário — e a chamada inteira continua contando como uma única slot contra delegation.max_concurrent_children, então a matemática de capacidade não muda. Combine isso com o guia de orquestração ao vivo de subagents e um fan-out começa a parecer um time que você pode de fato ver trabalhar.
Filhos entregam o volante — inclusive processos em segundo plano
A mesma passada de delegação corrigiu um dos modos de falha mais desagradáveis do trabalho multi-agente: um filho que dispara um processo longo em segundo plano e depois sai costumava deixar esse processo sem dono — a limpeza do filho o matava silenciosamente, ou o pai esperava um aviso de conclusão que nunca chegaria, porque o notify=true do filho era uma promessa que ninguém podia cumprir. Agora um subagent pode entregar um processo em execução para você antes de sair, com process_manage(action="handoff", session_id=<id>, data="<purpose>") — a posse passa ao pai e, quando o processo termina, o aviso cai na sua conversa, com o propósito anexado (PR #105125). Sobras são reportadas honestamente como encerradas, e os filhos são avisados de antemão que notificações não são garantidas. Mistério do processo órfão resolvido.
Logins MCP sem browser
Você faz SSH numa máquina headless, aponta o Hermes para um servidor MCP self-hosted e bate na parede: o servidor quer um fluxo OAuth de browser, e o único browser do prédio está no seu celular. Os device codes da RFC 8628 existem exatamente para essa situação, e a v0.21.1 os conecta de ponta a ponta (PR #104891). Um único comando inicia o fluxo:
hermes mcp login <server> --flow device
O Hermes encontra o device endpoint do servidor, imprime uma URI de verificação e um código, e faz polling até você aprovar — de qualquer device com browser. Defina oauth.flow: device na config do servidor e isso vira o default para login e reauth. Grants negados ou expirados nunca sobrescrevem suas credenciais existentes, e reconexões em segundo plano apontam para um login explícito em vez de iniciar silenciosamente um device flow. Se você roda servidores MCP em hosts remotos, isso elimina toda uma classe de dor do tipo “não consigo autorizar aqui” — veja o nosso guia de variáveis de contexto do MCP para o resto do ferramental MCP amigável a headless.
Seletores sempre frescos, pins que se mantêm
Duas melhorias de seleção de modelo chegaram nesta janela e, juntas, resolvem o momento “espera, por que ele usou aquele provider?”. Primeiro, o roteamento do OpenRouter agora pode ser fixado por modelo, não só globalmente (PR #104159):
provider_routing:
sort: price
models:
"openai/gpt-6-astra": { only: [openai] }
"anthropic/claude-fable-5.1": { only: [anthropic] }
Uma config agora trava o GPT-6 Astra na OpenAI e o Claude Fable na Anthropic enquanto todo o resto continua ordenando por preço — e, como a regra se aplica no único ponto de estrangulamento que todo caminho de requisição compartilha, cron jobs e filhos delegados também a respeitam. Se você tem acompanhado o guia de discovery gating do Astra, este é o botão que torna setups Astra multi-provider determinísticos.
Segundo, o seletor /model deixou de ficar obsoleto: os catálogos remotos agora atualizam a cada 20 minutos em vez de num TTL de 1 hora, e um background loop do gateway os mantém aquecidos mesmo se ninguém abrir o seletor (PR #101319) — um modelo recém-lançado ou removido do catálogo aparece (ou desaparece) em vinte minutos em todas as superfícies. O provider Meta Model API também passou a usar a resposta ao vivo de /v1/models como catálogo autoritativo, então novos modelos Muse aparecem sem esperar uma atualização do cliente (PR #101503). Mais mecânicas de catálogo e de override vivem no guia de overrides de modelo.
Mais rápido por baixo do capô: busca, compaction e um cron mais silencioso
- O
search_filesagora roda ripgrep nativo em máquinas POSIX locais (PR #104502) — buscas de conteúdo vão de ~85 ms para ~15 ms e buscas por nome de arquivo, de ~73 ms para ~12 ms. Mesmos resultados, latência de tool 5–6× menor, o que soma rápido em loops de agente que buscam o tempo todo.HERMES_NATIVE_FILE_READ=0restaura o caminho antigo via shell se algo estranho aparecer. - A compaction mantém o cache de prefixo em sessões de codificação (PR #104455): o snapshot do workspace de codificação fica fixado por sessão em vez de re-sondar o
git statusa cada fronteira de compaction, então sessões longas param de pagar para reconstruir o prompt do zero após cada compact. - Subagents concluídos pararam de vazar memória (PR #102032): transcripts de filhos são liberados do heap do pai e excluídos do índice de texto completo — uma execução com 1.320 filhos costumava deixar um heap de 1,9 GB e ~1 GB de shadow tables para trás.
- O cron diz a verdade sobre missed fires (PR #100445, #104877): o
hermes cron listagora mostra uma linhaDispatch:por job —⚠ catch-up after missed fireem vez de um “ok” enganosamente limpo — e ticks silenciosos de monitor não apagam mais o contexto de continuity de que a próxima execução precisa. Mais higiene de cron no guia do cron doctor.
A segurança recebeu uma correção de verdade na mesma janela: as regras de approvals.deny agora são aplicadas dentro de sandboxes Docker e cloud isoladas (PR #103649), fechando um caminho em que uma lista de negação podia ser contornada com um shell em sandbox até sob --yolo. A release v0.21.0 Pantheon foi o grande release de recursos; a v0.21.1 é a limpeza que mantém a casa de pé. Se você pulou os últimos patches, o nosso resumo da v0.20.6 cobre o que chegou antes disso.
hermes update
Atualize, rode o hermes doctor, reinicie o gateway — e aproveite uma atualização que mudou um terço do código sem pedir que você mude uma única configuração.