Hermes v0.22.2: a release que a 0.22.1 deveria ter sido

Você configurou o Hermes como serviço systemd meses atrás e ele reiniciou limpo a cada reboot desde então — até que, numa manhã, o serviço está morto, o systemctl start diz que ele já está ativo em algum lugar, e a única pista no log é um PID que pertence a outra coisa completamente diferente. Ou você está num notebook, rodando um modelo local, e um turno longo simplesmente… para: a linha de status fica parada, você fecha a tampa por um tempo e, quando volta, o turno já desistiu. Os dois casos têm correção na v0.22.2, e um problema mais incomum também: a release anterior foi compilada a partir do commit errado.
O que realmente aconteceu com a v0.22.1
A v0.22.1 foi publicada em 14 de outubro de 2026 e apontava para a árvore errada. Duas consequências eram visíveis de fora: a tag entregou trabalho de gateway que ainda não havia sido lançado, e o pacote da Microsoft Store podia travar em “Connecting.” em vez de concluir sua primeira inicialização.
A v0.22.2 foi publicada na manhã seguinte, compilada a partir do commit que a tag anterior deveria usar, tendo a v0.22.1 publicada como parent. O texto oficial da release é direto sobre a relação: “0.22.2 é a release que a 0.22.1 deveria ter sido.” De v0.22.1 para v0.22.2 o intervalo de comparação tem 11 commits — uma recompilação, não um pacote de features.
Uma ressalva honesta acompanha a recompilação: sessions que rodaram sob o gateway 0.22.1 não podem ser excluídas na 0.22.2. Elas são legíveis e retomáveis; excluí-las falha. Se isso importa para você, arquive ou exporte a session em vez de contar com a exclusão.
Primeiro, descubra em qual build você está
Releases de correção são o momento em que a pergunta “estou mesmo na versão corrigida?” deixa de ser retórica, então confira antes de fazer qualquer outra coisa:
hermes version
O app desktop mostra isso em Settings ▸ About (é também onde fica o seletor de canal de atualização, se você seguiu o guia do canal estável). Usuários de Docker leem a tag que baixaram: nousresearch/hermes-agent:stable passa para o novo patch na próxima vez que você fizer pull.
Se você está na 0.22.1, atualize. Se está na 0.22.0, o mesmo hermes update leva você direto para a 0.22.2 e você recebe as duas correções abaixo.
hermes update
Correção 1: um gateway supervisionado volta a iniciar depois de um reboot
O gateway precisa saber se outro gateway já está rodando nesta máquina antes de assumir o controle. Ele usava o process ID que havia registrado, e havia um furo nisso: depois de um reboot, o Linux pode entregar um PID muito inicial a um processo sem relação. Se o PID reciclado por acaso coincidisse com o registrado, o gateway concluía que um gateway ativo estava ocupando a máquina e se recusava a iniciar. Sob systemd, launchd ou Docker — onde algo está esperando para reiniciar o serviço — isso significa um serviço que nunca sobe.
A correção é parar de confiar em um PID isolado e registrar algo que um reboot não consegue falsificar:
- O Hermes registra em qual boot ele iniciou e compara isso com o boot atual.
- Quando o registro não pode ser comparado — formato de registro mais antigo, ou um horário de boot que não pode ser lido — ele consulta o host lock. O host lock é um arquivo que só um gateway ativo mantém, então mantê-lo é prova de vida de um jeito que um PID não é.
- A checagem de liveness não cria mais o arquivo de lock como efeito colateral de olhar, e a identidade por argv foi removida da verificação por completo, porque um PID reciclado pode coincidir com um horário de início e uma linha de comando ao mesmo tempo.
Se o seu gateway vem se recusando a iniciar depois de reboots, atualizar resolve, sem mexer no seu unit file. Verifique com o comando que o seu supervisor usa:
systemctl status hermes-gateway
Correção 2: turnos longos de modelo local sobrevivem em um notebook
Rodar um modelo localmente muda os modos de falha, porque o modelo passa a ser a coisa mais lenta do ambiente e a máquina onde ele roda pode dormir. Um pull request (#138560) fecha quatro deles de uma vez:
| Sintoma | O que mudou |
|---|---|
| Um prompt longo parece um turno travado | Requisições locais sempre usam streaming, e a linha de status mostra o progresso da leitura do prompt enquanto o servidor ingere |
| Um turno que dormiu conta como tempo de raciocínio | Temporizadores de stall ignoram o tempo em que a máquina ficou suspensa |
| Toda mensagem falha depois de um timeout, mesmo com o servidor de volta | Um servidor local recuperado ganha outra tentativa em vez de um circuit breaker que fica aberto |
| A compressão dá timeout enquanto o modelo ainda está lendo | A compressão não desiste mais enquanto o servidor está ingerindo uma conversa longa |
Em máquinas Windows com memória unificada há uma quinta peça: a inicialização do modelo e o cache de prompt são dimensionados com base na memória livre, e não na memória total, de modo que uma máquina já ocupada não se sobrecarrega.
Isso importa mais justamente onde modelos locais são mais atraentes — um notebook com alguns GB de folga, um turno longo de agent e um usuário que fecha a tampa. Se você está montando isso pela primeira vez, o guia de modelos locais com llama.cpp percorre o runtime que o Hermes instala.
O que mais há na linha 0.22 desde a v0.22.0
Como a 0.22.2 republica toda a linha 0.22, algumas mudanças menores vêm junto e vale a pena conhecê-las:
- Model picker: uma lista curada de modelos fica no topo do seletor, o NVIDIA NIM ganha sua lista padrão de modelos, e o Nemotron 3.5 Super VL chega com parâmetros padrão.
- Rotas da Mistral: ids de tool compostos são reunidos em par antes que o provider os veja — a Mistral limita ids de tool a nove caracteres.
- Profiles: um novo profile herda o modelo de lançamento
custompuro junto com seu endpoint, incluindo providers referenciados por env. - Terminal e busca: suas próprias ferramentas vêm antes das do Hermes no
PATH, e a busca local de arquivos usa o ripgrep fixado pelo Hermes em vez do primeirorgda máquina. - Catalog: chegam os pacotes de idioma para desktop em coreano e português do Brasil, além de novas entradas de catálogo (author-feed, wait-ledger, openinvest, TeamoRouter, Hermes AAC, Agent Mixer).
- Dependências: httpx2/httpcore2 para 2.12.0 e os pacotes npm fixados atualizados para zerar achados de auditoria.
As notas curadas completas da linha 0.22 estão na página da release v0.22.0 Threshold e nas notas da release v0.22.2.
A conclusão
Uma release de correção que substitui outra release de correção merece um minuto da sua atenção: rode hermes version, rode hermes update e, se você estava na 0.22.1, trate as sessions não excluíveis como a única ponta solta e arquive em vez de excluir. Se você está fazendo uma instalação nova, o guia de instalação tem os one-liners atuais.
Fontes: o texto da release v0.22.2 e o intervalo de comparação v0.22.1...v0.22.2 no repositório do Hermes Agent; o trabalho de boot-identity do gateway é o PR #138594 (corrigindo a issue #133744) e o trabalho de modelo local é o PR #138560.