A v0.21.4 saiu sem release notes — eis dez mudanças que já estão rodando na sua máquina

Sábado de manhã você roda hermes update e a versão salta da v0.21.3 para a v0.21.4. Você abre as release notes para descobrir o que de fato mudou e encontra uma página de poucos parágrafos, com uma linha no final dizendo que a análise completa chega com a v0.22.0. Isso não é preguiça: os tags de patch do ciclo v0.21 existem para dar às imagens Docker, ao Hermes Cloud e às implantações hospedadas uma âncora estável, e a documentação curada chega com a próxima minor. O detalhe incômodo é que o comportamento já entregue na sua máquina não vai esperar pela v0.22.0.
Este post separa dez coisas dessa janela que estão mescladas na main e presentes neste tag, cada uma com um comando que você pode rodar ou um bloco de configuração que você pode colar. Nenhuma delas é refatoração interna: três mudam a topologia do seu gateway, duas mudam o seu formato de saída ou a sua conta, e o resto devolve tempo imediatamente.
Primeiro, as contas: por que este tag existe
O corpo da release é incomumente direto sobre isso. Este é um tag de patch que agrupa tudo o que foi mesclado desde a v0.21.3 numa versão estável para consumidores downstream (imagens Docker, Hermes Cloud, implantações hospedadas), com as notas curadas completas adiadas para a v0.22.0. Medido no commit 4b8a8134009a8727a289bcabeb0019fedd353128:
| Métrica | Valor (desde a v0.21.3) |
|---|---|
| Commits não-mesclados | 5.071 |
| Arquivos alterados | 5.169 (+312.961 / −62.855) |
| PRs mesclados | 1.812 |
| Issues fechadas | 2.116 |
Quem usa Docker pode baixar o tag diretamente como nousresearch/hermes-agent:v2026.9.21; instalações via git continuam atualizando com hermes update. Tudo abaixo está ordenado pelo quanto muda o seu dia.
Dez coisas que já foram entregues
1. Um processo de gateway por host, não um por profile
Esta é a maior convergência arquitetural da janela: exatamente um processo hermes gateway run por host, por usuário do SO, servindo todos os profiles. Os verbos de ciclo de vida mudaram de sentido junto. hermes -p X gateway run não inicia mais um segundo processo enquanto o gateway do host está vivo — ele se anexa: imprime o PID do gateway do host e o conjunto servido, e sai com 0. hermes gateway start --all e restart --all agora significam aquele único multiplexador de host, e nunca varrem um gateway que outro profile esteja rodando.
A chave antiga gateway.multiplex_profiles: false está aposentada: ela ainda é analisada, mas não consegue mais fixar um segundo processo de gateway — resolve exatamente como uma chave não definida, registra um aviso e aponta para o comando de migração. Se você está atualizando de uma topologia por profile, olhe o plano antes de tocar em qualquer coisa:
hermes gateway migrate --multiplex --dry-run # imprime o plano, os bloqueadores e os reinícios que ele implica
hermes gateway migrate --multiplex # converge de verdade (adicione --yes em shells não interativos)
O caminho de migração passo a passo, os três incidentes reais por trás dele (incluindo um P1 que podia apagar o MEMORY.md do profile errado) e uma checklist pós-atualização estão num post separado: Um gateway por host: a migração multiplex-only. O guia anterior, multiplex por padrão, cobre como o recurso chegou pela primeira vez.
2. Conectores: conecte um app de dentro da conversa
Conectar um app costumava significar editar configuração, abrir o navegador e colar chaves. Agora o usuário pede no chat para conectar o Notion e o backend faz toda a conexão: coleta os valores, mostra o link de login e o agent pode chamar a nova ferramenta no mesmo turno. Os três clientes interativos desenham o mesmo passo de configuração — um diálogo no app de desktop, um callout no hermes --tui, um painel no CLI clássico. O repositório traz um catálogo de 65 servidores MCP revisados, 55 dos quais declaram auth.type: oauth.
3. --format stream-json para execuções legíveis por máquina
Execuções one-shot agora podem emitir JSONL:
hermes chat -q "Summarize this repository" --format stream-json
Cada linha do stdout é um objeto JSON (system, text, tool_use, tool_result, result), diagnósticos e a linha session_id: ficam no stderr, e o registro final result carrega exit_code, estatísticas de token e duração. Ele exige -q (ou --query-file), implica modo quiet e rejeita --tui. A tabela completa de campos de evento, a semântica de exit code (0 / 1 / 130, mais 75 para um worker de Kanban) e como consumi-lo num pipeline estão aqui: Ensinando o CI a ler o Hermes: o fluxo de eventos stream-json.
4. skills.auto_load fixa skills em cada nova sessão
Três linhas no config.yaml fazem essas skills serem totalmente carregadas no início de cada nova sessão, e não apenas listadas no catálogo:
skills:
auto_load:
- release-notes
- qa-multilingual
Ele vale para agentes de CLI, TUI, gateway, cron e API, e tem escopo de profile. A injeção resolve uma vez por agent — trocas de modelo, compressão e restauração de prefixo estático reutilizam os mesmos bytes renderizados — então o seu cache de prompt permanece intacto. Quando evitá-lo e como ele deduplica contra --skills: Fixando skills em cada sessão.
5. mcp.discovery_concurrency acaba com a tempestade de spawn no boot
A descoberta de MCP antes fazia fan-out com um asyncio.gather sem limite: oito servidores stdio significavam oito árvores de processos nascendo no mesmo instante, e numa frota multi-profile cada profile servido rodava a sua própria passada. As conexões agora são limitadas por mcp.discovery_concurrency, padrão 4, com 0 significando ilimitado:
hermes config set mcp.discovery_concurrency 2 # máquinas mais lentas, memória mais apertada
As medições no PR (8 servidores stdio): a concorrência de pico caiu de 8 para 4 no valor padrão, com a passada levando 4,0 s → 5,6 s; definido como 2, o pico virou 2 e 13,2 s; 0 restaurou o pico 8 e 3,5 s. Você troca um boot um pouco mais lento por nenhuma tempestade de processos.
6. hermes sessions set-journal-mode converte o store offline
Se você configura database.journal_mode: delete enquanto o state.db já está em modo WAL, o Hermes nunca vai fazer downgrade ao vivo — o gateway, o dashboard ou o cron podem segurar commits não checkpointados, e fazer downgrade por baixo deles destrói esses commits. A única saída antes era rodar um PRAGMA na mão. Agora existe um comando:
hermes sessions set-journal-mode delete # WAL -> rollback journal
hermes sessions set-journal-mode wal # de volta para WAL
hermes sessions set-journal-mode delete --db ~/.hermes/kanban.db # outro store do Hermes
Ele varre os detentores primeiro, recusa enquanto qualquer processo (ou seus sidecars -wal/-shm) ainda tiver o arquivo aberto, nomeia cada pid — comando: caminho e relê os bytes do cabeçalho para verificar o novo modo. Ele também recusa de saída no Windows, onde a varredura de detentores não está disponível, e recusa habilitar WAL num sistema de arquivos entre VMs (virtiofs/9p). Contexto: doctor e escritores WAL ao vivo e state.db WAL dentro do Docker.
7. DMs não autorizadas podem ser recusadas com educação
O gateway tinha duas respostas para uma DM não autorizada: pair (mandar para a pareação) ou ignore (descartar). Agora existe uma terceira, com texto personalizável:
gateway:
unauthorized_dm_behavior: decline
unauthorized_dm_decline_message: "This bot is private. Ask the owner for an invite."
Você também pode sobrescrevê-la por plataforma no bloco extra daquela plataforma. Para um assistente pessoal acessível num canal público, isso é mais profissional do que silêncio: o remetente descobre que a mensagem chegou e por que não foi respondida.
8. session_search ganhou uma janela temporal e um retry relaxado
A recuperação entre sessões agora aceita limites after / before, tanto datas ISO quanto durações relativas (7d, 24h, 2w):
after="7d"— apenas sessões iniciadas na última semana;before="2026-09-01"— apenas o histórico até 1 de setembro (um valor só de data significa meia-noite UTC daquele dia);- a forma relativa
before="7d"significa mais antigo que uma semana, não a última semana — fácil de inverter.
A recuperação também tenta de novo uma vez com correspondência OR relaxada quando a correspondência estrita não encontra nada, então um vago “acho que mencionei a coisa do deploy” acerta com mais frequência. O índice em si foi reconstruído como um caminho rápido sem LLM antes (veja limites de sessão); isto preenche a dimensão temporal.
9. Uma pilha de pequenas vitórias no desktop
- Seletor de fonte do chat/interface — escolha uma fonte para a transcrição e outra para a interface, separadamente, incluindo faces de legibilidade como a OpenDyslexic.
- Minimizar para a bandeja — opt-in: minimizar esconde as janelas sem destruir renderers nem parar o trabalho; Close, Alt+F4 e Cmd+Q mantêm o comportamento atual, e a bandeja oferece Show Hermes / Quit Hermes.
- Toque para invocar o HUD — toque e solte Cmd+Option no macOS, Ctrl+Alt no Windows/Linux X11, para trazer o HUD à frente a partir de outro app (desligado por padrão, salvo por dispositivo, as duas teclas precisam ser soltas em até 500 ms).
- Gaveta de status por chat — uma crista acima do composer esconde a pilha de status e a linha do git juntas; cada conversa lembra a sua escolha.
- Desinstalação de plugin pelo hub de Plugins, além de atualizações do motor local com um clique.
10. Atualizações de catálogo: modelos de vídeo e páginas de plugin
A família de vídeo da FAL ganhou LTX 2.5 (o modelo aberto de áudio e vídeo da Lightricks: áudio nativo, até 20 s / 4K para image-to-video, presets de movimento de câmera) e Kling O3 Standard (Kuaishou: narrativa nativa multi-shot, áudio opcional, 3–15 s). O catálogo de plugins ganhou uma dúzia de plugins da comunidade (tailscale, ssh, shodan, terminal, rss, resetwatch, done-bell, kiwi, cognee e outros), e todo plugin e autor do catálogo agora tem a sua própria página, com o README fixado num commit revisado.
Vale a pena saber, sem ação necessária
A mesma janela também estreitou uma série de arestas: hermes -p X update agora reinicia o gateway do host uma vez para a máquina inteira, com o aviso chegando a todos os profiles servidos (#118108); o Desktop se anexa ao backend do host em execução em vez de gerar um por profile (#118246); profiles nomeados leem de novo o auth.json do profile raiz, corrigindo as falhas No Codex credentials stored pós-atualização (#118373); um aviso pós-atualização endereçado a uma plataforma que nunca se conecta para de tentar novamente, em vez de registrar a cada 2 segundos para sempre (#118312); um 429 de gateway gerenciado em image_generate ou em vídeo FAL é reportado como rate limit e repetido uma vez, em vez de te mandar trocar de modelo ou definir FAL_KEY (#118311); e a chamada de auto-título não corre mais com a resposta num servidor de modelo self-hosted de slot único (#117494).
Cinco minutos de verificação após atualizar
hermes version # esperado v0.21.4 (tag v2026.9.21)
hermes doctor # avisos de storage / topologia de gateway primeiro
hermes gateway status # quem serve quais profiles
hermes gateway migrate --multiplex --dry-run # atualizações de uma topologia por profile: leia o plano
Se você roda mais de um profile na máquina, o item 1 é o que vale o seu tempo: ele é ao mesmo tempo uma fronteira de segurança (profiles param de ler as credenciais uns dos outros) e uma de disponibilidade (um reinício de gateway por atualização, em vez de um por profile).
A versão curta
Um tag de patch sem notas curadas é normal; “sem release notes” não é o mesmo que “nada mudou”. As partes desta janela que merecem a sua atenção são a convergência da topologia de gateway e as correções de isolamento de profile — a primeira decide quantos processos rodam na sua máquina, a segunda decide se um profile pode ler as chaves e a memória de outro. O resto (saída estruturada, skills fixadas, concorrência de boot do MCP, conversão de journal mode) é o tipo de mudança que você adota no momento em que sabe que ela existe. A análise curada completa sai com a v0.22.0 e cobre tudo desde a v0.21.0; para o tag em si, veja a nossa página de release da v0.21.4.