v0.20.4

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_TIMEOUTcron.media_send_timeout_secondspadrã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 em warnings, 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_error exibido em cronjob list, hermes cron list e 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 / -q agora 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.ai roteia 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.db do 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.

← Hermes Agent Changelog