Last updated on

Hermes Agent v0.19.1: o "patch" que tocou 4.700 arquivos e reconstruiu a pilha de voz


Hermes Agent v0.19.1: o “patch” que tocou 4.700 arquivos e reconstruiu a pilha de voz

Uma manchete como “Hermes Agent: patch de emergência exposto, sistema de voz renascido, 4.700 arquivos transformados” soa como um projeto em crise. Mas a página de v0.19.1 conta uma história diferente: trata-se de uma onda de resgate de estabilidade de alta densidade, não de um conserto de pânico. Este artigo ignora o clickbait e lê as notas de lançamento e os commits para que você saiba o que realmente mudou.

1. Os números primeiro: 4.700 arquivos é real, não marketing

As notas oficiais de lançamento são diretas:

De v0.19.0 (2026.7.20) para v0.19.1 (2026.7.30): ~2.789 commits, ~4.748 arquivos alterados, ~442.000 inserções, ~392.300 exclusões.

Em dez dias, cerca de um sexto dos arquivos do repositório Hermes foram tocados. “4.700 arquivos” é, portanto, correto: é o delta acumulado entre v0.19.0 e v0.19.1, não um único commit gigante. A equipe o publicou como patch release porque consumidores downstream (imagens Docker, deployments hospedados e instalações novas) precisavam de uma tag estável, e não porque as mudanças fossem pequenas.

Se você é novo no Hermes, o guia de instalação cobre os modos local, Docker e Desktop.

2. Por que o subsistema de voz ganhou destaque

v0.19.0 foi a “Quicksilver Release” e trouxe muitos recursos novos e uma reformulação da interface. Grandes releases geralmente são seguidas por uma onda de limpeza onde os casos de borda da nova arquitetura aparecem rapidamente. v0.19.1 focou em quatro áreas:

  1. O gateway e o subsistema de voz.
  2. O aplicativo Desktop: composer, abas e sincronização de estado.
  3. A confiabilidade do instalador e do auto-atualizador.
  4. Extensões de plataforma: canais Buzz/Nostr, geração e entrega de vídeo FLUX3, confiabilidade de mídia no Telegram e regressões do modo de voz.

As mudanças de voz são as mais visíveis para o usuário: a interrupção por voz não funcionava, as bolhas de voz TTS reproduziam em 0 segundos, dizer “stop” não tinha efeito e as wake words eram ativadas sem uma pipeline STT/TTS funcional. Tudo isso foi corrigido sistematicamente em v0.19.1.

3. Quatro correções-chave de voz

3.1 Listener full-duplex durante o turno do agente: finalmente dá para interromper

commit: 5081551fix(voice): full-duplex agent-turn listener

O antigo modo de voz era efetivamente half-duplex:

  • Durante a geração de resposta do LLM, o listener do microfone nem sequer executava, então não era possível interromper.
  • Durante a reprodução TTS, o listener executava, mas calibrava o piso de ruído VAD enquanto o alto-falante reproduzia TTS. O retorno do alto-falante era incorporado ao piso, elevando o limiar tanto que a fala normal raramente o ultrapassava.
  • O gatilho usava um contador de energia consecutivo estrito que reiniciava ao menor declínio dentro de uma palavra, engolindo a primeira sílaba.

v0.19.1 introduz tools/voice_mode.full_duplex_listen(): um único listener cobre todo o turno do agente:

  • O piso de ruído é calibrado em silêncio no início do turno e mantido constante durante geração e reprodução.
  • Durante a geração, o gatilho usa voice.barge_in_threshold_multiplier (padrão 3,0).
  • Durante a reprodução, um mínimo de 1500 RMS e um máximo de 4000 RMS impedem que o eco dispare o detector, mas mantêm a fala humana alcançável.
  • Uma janela de 300 ms com voto majoritário (≥80%) substitui o contador consecutivo, de modo que pequenas quedas de energia dentro de uma palavra não reiniciam a detecção.
  • O período de carência se aplica apenas no início da reprodução (voice.barge_in_grace_seconds, padrão reduzido de 2,0 s para 0,5 s), em vez de silenciar o microfone durante toda a resposta.

Para ver os diagnósticos:

HERMES_VOICE_DEBUG=1 hermes voice

3.2 VAD de janela deslizante: rejeição adaptativa de eco

commit: be42470fix(voice): rolling-window VAD, duplicate render suppression, TUI gateway mirror

Antes do modelo full-duplex, a equipe já havia introduzido um VAD de janela deslizante para atenuar o antigo modelo half-duplex:

  • Uma deque de ~3 segundos recalcula continuamente o percentil 90 do piso de ruído, em vez de calibrá-lo uma única vez.
  • O multiplicador foi elevado de 5x para 8x, absorvendo as variações de volume do TTS.
  • O máximo de 4000 RMS e um mínimo de SILENCE_RMS_THRESHOLD * 2 são mantidos.
  • Um período de carência de 2,0 s no início da reprodução evita interrupções prematuras.
  • No modo streaming_enabled, a renderização duplicada de texto é suprimida, para que você não leia duas cópias da mesma frase enquanto a ouve.
  • A mesma lógica é espelhada no gateway TUI para que os caminhos CLI e TUI se comportem de forma idêntica.

3.3 Frases de parada: dizer ou digitar “stop” encerra o chat de voz

commit: ba13132fix(voice): bare stop phrase ends the voice chat on every surface

Antes, apenas o modo PTT clássico da CLI obedecia uma frase de parada falada. v0.19.1 unifica o comportamento em todas as superfícies:

  • hermes_cli/voice.py agora passa um callback on_stop_phrase explícito por meio de start_continuous/stop_continuous.
  • O gateway TUI emite voice.transcript {stop_phrase: true}, desliga HERMES_VOICE(_TTS) e interrompe o streaming TTS.
  • O process_loop da CLI trata um “stop” digitado no modo de voz como saída do modo de voz, e não como mensagem para o agente.
  • O composer Desktop intercepta um comando de parada digitado e encerra a conversa de voz ao vivo pelo mesmo caminho do botão de encerrar.
  • tools/voice_mode.py faz com que frases de parada vençam o filtro de alucinação do Whisper, então palavras como “bye” funcionam se estiverem configuradas como frases de parada.

A frase de parada padrão é voice.stop_phrases = ["stop"], mas você pode personalizá-la:

voice:
  stop_phrases:
    - "stop"
    - "fim"
    - "tchau"

3.4 Reparo de contêiner TTS: chega de bolhas de voz quebradas de 0 segundos

commit: fae29c8fix(tts): class-level .ogg container repair + multi-platform opus voice detection

Esta é a correção raiz da família de bugs “a bolha de voz está quebrada / toca 0 segundos” no Telegram, Matrix, Feishu, WhatsApp e Signal:

  • Alguns backends retornam bytes MP3 ou WAV mesmo quando o caminho de saída é .ogg (Edge retorna MP3, Piper retorna WAV, xAI retorna MP3, e alguns servidores OpenAI-compatíveis ignoram response_format=opus).
  • v0.19.1 adiciona _sniff_audio_container e _repair_ogg_container dentro de text_to_speech_tool para detectar o contêiner real após a síntese e transcodificar com ffmpeg ou renomear o arquivo para a extensão honesta.
  • Um novo conjunto OPUS_VOICE_PLATFORMS cobre todas as plataformas que precisam de bolhas de voz Opus reais, não apenas o Telegram.

Para o usuário final, isso significa que as respostas automáticas de TTS entre gateways são muito menos propensas a chegar como anexos quebrados.

3.5 Wake word: só ativa quando STT e TTS estão realmente prontos

commit: f03bb2bfeat(wake): gate arming on STT + TTS readiness

O loop de wake word é: palavra de ativação → gravação → STT → agente → TTS. Ativar o microfone quando falta uma das metades cria uma experiência frustrante: “eu te ouvi, mas nada aconteceu”. Em v0.19.1, check_wake_word_requirements verifica ambos antes de ativar:

  • stt.enabled e um provider diferente de none.
  • check_tts_requirements aprovado.

Se faltar uma das metades, o comando recusa e informa exatamente qual está quebrada. Por exemplo, se STT estiver desativado, /wake informa que speech-to-text não está pronto. Isso evita um erro comum de iniciantes: ativar a wake word sem configurar a pilha de voz.

4. Configuração recomendada e lista de depuração

Juntando as correções, uma configuração de voz para v0.19.1 pode parecer assim:

voice:
  barge_in_threshold_multiplier: 3.0   # sensibilidade de interrupção full-duplex
  barge_in_grace_seconds: 0.5        # carência no início da reprodução, reduzida de 2.0
  stop_phrases:
    - "stop"

stt:
  enabled: true
  provider: whisper  # ou seu backend real

tts:
  provider: edge    # ou openai / elevenlabs / piper / etc.

Quando a voz se comportar mal, siga esta ordem:

  1. Execute hermes tools para confirmar que as ferramentas de voz estão habilitadas.
  2. Execute HERMES_VOICE_DEBUG=1 hermes voice para observar limiares VAD e decisões de interrupção.
  3. Verifique se voice.stop_phrases contém a palavra desejada.
  4. Confirme que stt.enabled e tts.provider estão configurados.
  5. No Desktop, abra a aba Capabilities e verifique o provedor TTS e o modelo de voz (v0.19.1 adicionou as configurações inline lá).

5. Outras correções notáveis do patch

Fora da voz, v0.19.1 inclui melhorias de estabilidade que afetam o dia a dia:

  • Anexos no composer: o TUI agora insere anexos inline no cursor e os desanexa ao excluir o token.
  • Comportamento de fechar aba: fechar a última aba principal leva a New Session em vez de uma tela em branco.
  • Links no terminal: ⌥-click não injeta mais sequências de escape, e links no terminal integrado realmente abrem.
  • Segurança de CI: o workflow principal agora usa tokens GitHub App de curta duração em vez de um PAT de longa duração, melhorando a segurança em forks.
  • Docker / Nix: caminhos de módulos e problemas de lockfile foram corrigidos.

Para uma comparação lado a lado com outros agentes de IA, consulte a página de comparação.

6. Como atualizar

v0.19.1 está disponível pelo instalador oficial ou via hermes update:

# Já instalado
hermes update

# Nova instalação
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Após atualizar:

  1. Execute hermes version para confirmar v0.19.1 ou posterior.
  2. Execute hermes config get voice para verificar se as configurações antigas de voz migraram corretamente.
  3. Inicie uma conversa de voz contínua e teste a interrupção e as frases de parada.
  4. No Desktop, verifique a aba Capabilities para o provedor TTS e o modelo de voz.

7. Conclusão: por que este “patch” importa

Hermes Agent v0.19.1 prova que um número de patch não equivale ao tamanho da mudança. Em cerca de dez dias, a equipe mesclou ~2.789 PRs, tocou ~4.748 arquivos e corrigiu sistematicamente os problemas de voz, desktop, instalador e plataformas que surgiram após a versão “Quicksilver” v0.19.0.

Para o usuário do dia a dia, os ganhos mais claros são:

  • Um modo de voz que você pode realmente interromper.
  • “Stop” funciona, seja dito ou digitado.
  • Bolhas de voz multiplataforma são mais confiáveis.
  • Wake words recusam ativar quando a pipeline de voz está meio configurada.

A equipe também anuncia que v0.20.0 trará notas de lançamento completas e curadas cobrindo tudo desde v0.19.0, incluindo todos os destaques e créditos dos contribuidores. Para acompanhar, salve a página de lançamentos.


Referências