Hermes Agent v0.20.4
Visão Geral
v0.20.4 — A Glass Release. Lançada em 18 de agosto de 2026. ~74 PRs mesclados · ~146 commits · ~265 arquivos alterados (+21.697 / −2.217) desde a v0.20.3.
Um dia depois do Patch da Resiliência, chegou a janela que ninguém pediu e todo mundo queria: o desktop finalmente para de lutar contra você. O destaque é o Glass — um modo de translucidez do macOS que desfoca a janela sem desbotar o texto — e ao redor dele chegam uma sidebar SESSIONS|BOTS permanentemente em abas, um roster de bots que você finalmente pode arrumar (ocultar, re-exibir, dissolver), grupos de chat do Bot Mode que não perdem mais turnos de longa duração, uma varredura consultiva do NVIDIA SkillEvaluator em cada instalação de skill, o endurecimento do envio de mídia do cron (timeout configurável, anexos de execuções manuais que sobrevivem), correções de contenção do SessionDB que destravam gateways travados, um hermes update que diz a verdade sobre branches estacionadas e notificações nativas de Kanban.
Esta é uma release de patch, então as notas oficiais são breves e a documentação completa e curada acompanha a v0.21.0. Esta página cobre as partes mais valiosas desta janela.
Destaques
1. Glass no desktop — translucidez que dá para ler (macOS)
A translucidez de janela costumava mapear para a opacidade nativa da janela, que desbotava a janela inteira — texto incluído — então qualquer pessoa com um wallpaper movimentado efetivamente tinha que deixá-la em 0. O Glass dá uma segunda interpretação ao controle no macOS: a janela permanece opaca no nível nativo e, em vez disso, as superfícies de campo do renderer se tornam finas sobre o material de vibrancy que cada janela de chat já carrega. Você ganha um desfoque fosco enquanto texto, cards, popovers e o composer mantêm contraste total (#88744).
Com o Glass ativado, três controles o moldam:
- Intensity — o mesmo controle, percorrendo toda a faixa. No topo, o tint desaparece por completo: desfoque puro, sem tint, com texto e cards ainda opacos.
- Frost — Deep / Soft / Bright / Glare. O macOS não expõe um knob de raio de desfoque, então o material de vibrancy é o controle de frost.
- Area — a janela inteira, ou apenas a sidebar (o formato do Finder: trilho de vidro, coluna de conteúdo opaca).
Ajustar qualquer um deles faz peek: o overlay de configurações cobre exatamente o efeito que o seu slider controla, então segurar o slider esconde o overlay e a janela ao vivo vira a prévia. Perfis novos do macOS agora começam com o Glass pré-selecionado — a intensity ainda tem como padrão 0, então nada muda visivelmente até você mexer no controle, e perfis que foram deliberadamente ajustados para transparente continuam transparentes. Windows e Linux veem exatamente a linha que veem hoje (#88956).
2. A sidebar SESSIONS | BOTS é uma faixa de abas — e bots podem ser ocultados
A sidebar esquerda do desktop agora sempre inicia com SESSIONS | BOTS como abas lado a lado em uma única zona. O painel de Bots carrega um invariante de dock forçado: na primeira passada de adoção de cada boot, qualquer layout empilhado de Sessions-sobre-Bots é recolocado como uma aba central — esse layout nunca mais deve sobreviver a uma atualização (#88872).
O roster também ficou mais arrumado: clique com o botão direito em uma linha de bot → Hide Bot o remove do roster e da faixa Active-now (sem tocar em @mentions, associações de grupo ou chats abertos), e um eye toggle no cabeçalho — renderizado apenas enquanto pelo menos um bot estiver oculto — revela os bots ocultos esmaecidos, com clique direito → Unhide Bot. O estado oculto sincroniza entre máquinas através do ui_meta do profile.yaml (#88800).
3. Grupos de chat do Bot Mode param de perder turnos de longa duração
Um turno de membro de grupo de chat costumava carregar um prazo fixo de 3 minutos; um turno que o ultrapassasse retornava null, o que o loop round-robin trata como uma passada — então uma resposta que terminava no minuto 7 não tinha para onde ir. Agora o prazo se estende enquanto a sessão do membro reporta visivelmente inflight/running, limitado por um teto rígido de 20 minutos, e um turno que mesmo assim estoura o tempo registra uma baseline stranded que é colhida de volta na sala no próximo limite de turno — atrasado, nunca perdido, sobrevivendo a recargas de janela (#88885). Ao redor disso: mensagens de grupos de chat renderizam Markdown (#88553), o roteamento de grupos entre máquinas sobrevive a trocas de conexão (#88921), um bot pode sentar em vários grupos de chat ao mesmo tempo (#88980), grupos de chat são linhas de primeira classe no estilo Discord que abrem na janela principal (#88738), e finalmente podem ser dissolvidos pela GUI (#88659).
4. NVIDIA SkillEvaluator: uma segunda opinião consultiva na instalação de skills
hermes skills install agora executa o NVIDIA SkillEvaluator Tier 1 (PII, contrabando de unicode, lint de scripts) como uma varredura consultiva em cada instalação do hub — os achados são mostrados com file:line antes da confirmação da instalação, e a instalação sempre continua. É deliberadamente apenas aviso: o scanner de PII upstream tem classes conhecidas de falsos positivos (sintaxe SSH como [email protected], e-mails de exemplo em documentação, referências op:// a gerenciadores de segredos), então os achados informam sua decisão em vez de bloqueá-la. Achados da classe de segredos (chaves privadas, chaves de nuvem, tokens, strings de conexão com credenciais) são renderizados em vermelho com um aviso explícito de revisão. A varredura é opcional — sem o binário skillevaluator ela degrada para um no-op silencioso — e pode ser desativada com skills.tier1_advisory: false (#88573).
5. Endurecimento do envio de mídia do cron
Três lacunas de entrega do cron foram fechadas nesta janela:
- Timeout configurável: o envio de anexos de mídia tinha uma janela fixa de 30 segundos que exportações grandes (áudio TTS longo, PDFs grandes) estouravam, registrando uma falha sem nada depois dos dois pontos. O timeout agora é
HERMES_CRON_MEDIA_SEND_TIMEOUT→cron.media_send_timeout_seconds→ padrão de 300s, e timeouts sempre registram um motivo de falha não vazio (#88787). - Execuções manuais não derrubam mais anexos:
hermes cron run <job-id>podia entregar o texto de um job enquanto descartava silenciosamente seus anexos de PDF/imagem e ainda reportar sucesso — o sender autônomo registrava falhas de upload apenas emwarnings, que ninguém lia. Falhas de anexo agora são visíveis no status da execução em ambas as pistas de entrega (#88631). - Disparos perdidos ficam visíveis: quando o caminho de disparo hospedado não alcança o gateway, o job recebe um carimbo durável
last_fire_errorexibido emcronjob list,hermes cron liste no dashboard — limpo na próxima execução bem-sucedida (#88555).
6. O SessionDB para de bloquear o event loop
Uma frota empresarial encontrou um gateway que não voltava a subir: um desligamento sujo competindo com uma segunda instância fazia todo reinício bloquear dentro da migração de schema v25 na thread do event loop, o watchdog de liveness do loop disparava o exit 75 e o supervisor reiniciava direto no mesmo estado. O SessionDB (init de schema + migração contra um state.db contendido) nunca mais é construído na thread do event loop: em um cache miss, ele inicia um bootstrap em background de uso único e espera até 250ms — um init saudável termina dentro da janela, um contendido degrada para None (todo caller já lida com isso) com o loop travado muito abaixo do timeout de sonda do watchdog (#88753).
7. hermes update diz a verdade sobre branches estacionadas
Em um checkout de source estacionado em uma feature branch, hermes update costumava fazer stash, sync, imprimir ✓ Code updated! — e deixar o checkout na branch desatualizada sem nenhum dos códigos novos do main. Agora ele volta automaticamente para main quando a branch estacionada é comprovadamente segura de deixar (árvore limpa + totalmente mesclada), avisa alto e marca a atualização de código como SKIPPED quando não é, e as linhas de resumo carregam a branch real + o short-sha do HEAD para que o drift fique visível de relance:
✓ Update complete! [main @ 30fcf9580]
(#88928)
8. Tarefas de Kanban avisam você nativamente
O desktop agora levanta uma notificação nativa do SO quando uma tarefa de Kanban conclui, encontra um blocker ou falha — o conjunto completo de eventos do terminal (completed, blocked, gave_up, crashed, timed_out, block_loop_detected) com severidade por tipo, então um worker travado em um blocker enquanto você está em outro app não morre mais em silêncio. Controlado por Settings ▸ Notifications ▸ Plugin notifications (#88765).
Melhorias
- Quarentena da varredura de project-skills + herança de confiança não interativa (segurança): project skills agora são colocadas em quarentena de varredura contra injeção no momento do load, e superfícies não interativas (cron/API/ACP) herdam a decisão de confiança por repositório do humano em vez de perguntar ou confiar automaticamente — completando os itens de skill restantes do épico de skills locais do projeto (#88643).
- Turnos one-shot persistem: turnos one-shot de
hermes chat -Q/-qagora persistem na sessão retomada — incluindo mensagens Bot Chat de bot para bot (#88763). - Salas de grupo do Bot Mode mostram fotos de perfil (#88746); sessões de Bot Mode ocultas nascidas no CLI ficam fora da sidebar global de Sessões (#88677).
- Página de configurações de Gateways do desktop: Gateway + Connections se unificam em uma única página no nível da máquina (#88735, #88812); uma linha de roster por bot mesmo quando um backend se registra sob dois endereços (#88828).
- Providers: Muse Spark 1.2 adicionado ao seletor curado do OpenRouter (#88600), e
api.meta.airoteia pela Responses API para prompt caching (#88601).
Correções
- Trava do SessionDB na thread do event loop (veja o Destaque 6); vazamento de alias de modelo virtual fechado na escrita, na leitura e no cache de recuperação (#88761); sessões multiplex agora são armazenadas no
state.dbdo perfil dono, não na raiz (#88734). - A exclusão de bot/perfil no Windows não falha mais com WinError 32 — a memória é liberada antes da remoção do diretório (#88727).
- O adaptador OpenAI tolera objetos de resposta esparsos; o relay desembrulha streams concluídos de forma preguiçosa (lazy) e usa nomes canônicos de operações gerenciadas (#85581, #85579, #85582).
- Desktop: sem default local fantasma em desktops de gateway remoto (#88554); perfis excluídos param de reconectar e 404s no meio de uma troca não são mais tratados como exclusão de sessão (#88638, #88699); o painel de Bots sempre abre o Bot Chat canônico fixado (#88690).
Atualização
hermes update
Após atualizar, execute hermes doctor para verificar a instalação e reinicie o gateway (hermes gateway) para que as mudanças de plataforma entrem em vigor. Usuários de macOS: o modo Glass aparece em Appearance ▸ Window Translucency assim que o app do desktop atualizar.