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:
- O gateway e o subsistema de voz.
- O aplicativo Desktop: composer, abas e sincronização de estado.
- A confiabilidade do instalador e do auto-atualizador.
- 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: 5081551 — fix(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: be42470 — fix(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 * 2sã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: ba13132 — fix(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.pyagora passa um callbackon_stop_phraseexplícito por meio destart_continuous/stop_continuous.- O gateway TUI emite
voice.transcript {stop_phrase: true}, desligaHERMES_VOICE(_TTS)e interrompe o streaming TTS. - O
process_loopda 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.pyfaz 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: fae29c8 — fix(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 ignoramresponse_format=opus). - v0.19.1 adiciona
_sniff_audio_containere_repair_ogg_containerdentro detext_to_speech_toolpara 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_PLATFORMScobre 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: f03bb2b — feat(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.enablede um provider diferente denone.check_tts_requirementsaprovado.
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:
- Execute
hermes toolspara confirmar que as ferramentas de voz estão habilitadas. - Execute
HERMES_VOICE_DEBUG=1 hermes voicepara observar limiares VAD e decisões de interrupção. - Verifique se
voice.stop_phrasescontém a palavra desejada. - Confirme que
stt.enabledetts.providerestão configurados. - 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:
- Execute
hermes versionpara confirmar v0.19.1 ou posterior. - Execute
hermes config get voicepara verificar se as configurações antigas de voz migraram corretamente. - Inicie uma conversa de voz contínua e teste a interrupção e as frases de parada.
- 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