Last updated on

Hermes Agent v0.19.1: el "parche" que tocó 4.700 archivos y reconstruyó la pila de voz


Hermes Agent v0.19.1: el “parche” que tocó 4.700 archivos y reconstruyó la pila de voz

Un titular como “Hermes Agent: parche de emergencia expuesto, sistema de voz renace, 4.700 archivos transformados” suena a proyecto en crisis. Pero la página de v0.19.1 cuenta otra historia: se trata de una ola de salvamento de estabilidad de alta densidad, no de un arreglo de pánico. Este artículo ignora el clickbait y lee las notas de lanzamiento y los commits para que sepas qué cambió realmente.

1. Los números primero: 4.700 archivos es real, no marketing

Las notas oficiales son directas:

De v0.19.0 (2026.7.20) a v0.19.1 (2026.7.30): ~2.789 commits, ~4.748 archivos cambiados, ~442.000 inserciones, ~392.300 eliminaciones.

Así que, en diez días, se tocó aproximadamente un sexto de los archivos del repositorio. “4.700 archivos” es por tanto exacto: es el delta acumulado entre v0.19.0 y v0.19.1, no un commit gigante. El equipo lo publicó como patch release porque los consumidores downstream (imágenes Docker, despliegues gestionados e instalaciones nuevas) necesitaban un tag estable, no porque los cambios fueran pequeños.

Si eres nuevo en Hermes, la guía de instalación cubre los modos local, Docker y Desktop.

2. Por qué el subsistema de voz acaparó la atención

v0.19.0 fue la “Quicksilver Release” e incluyó muchas funciones nuevas y una remodelación de la interfaz. Las grandes versiones suelen ir seguidas de una ola de limpieza donde los casos límite de la nueva arquitectura aparecen rápidamente. v0.19.1 se centró en cuatro áreas:

  1. El gateway y el subsistema de voz.
  2. La aplicación Desktop: composer, pestañas y sincronización de estado.
  3. La fiabilidad del instalador y el auto-actualizador.
  4. Extensiones de plataforma: canales Buzz/Nostr, generación y entrega de video FLUX3, fiabilidad de medios en Telegram y regresiones del modo de voz.

Los cambios de voz son los más visibles para el usuario: el “barge-in” (interrupción) no funcionaba, las burbujas de voz TTS se reproducían en 0 segundos, decir “stop” no hacía nada y las palabras de activación se armaban sin un pipeline STT/TTS funcional. Todo eso se arregló de forma sistemática en v0.19.1.

3. Cuatro correcciones clave de voz

3.1 Escucha full-duplex durante el turno del agente: por fin puedes interrumpir

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

El modo de voz anterior era efectivamente half-duplex:

  • Durante la generación de respuesta del LLM, el micrófono no escuchaba, así que no podías interrumpir.
  • Durante la reproducción TTS, el listener sí corría, pero calibraba el umbral de ruido VAD mientras el altavoz reproducía TTS. La retroalimentación de audio se convertía en “piso de ruido”, elevando el umbral tanto que una voz normal raramente lo superaba.
  • El trigger usaba un contador estricto de energía consecutiva que se reiniciaba ante pequeños bajones dentro de una palabra, tragándose la primera sílaba.

v0.19.1 introduce tools/voice_mode.full_duplex_listen(): un solo listener cubre todo el turno del agente:

  • El piso de ruido se calibra en silencio al inicio del turno y se mantiene constante durante la generación y la reproducción.
  • Durante la generación, el trigger usa voice.barge_in_threshold_multiplier (por defecto 3.0).
  • Durante la reproducción, un mínimo de 1500 RMS y un máximo de 4000 RMS evitan que el eco dispare el detector pero permiten que la voz humana lo haga.
  • Una ventana de 300 ms con voto por mayoría (≥80%) reemplaza el contador consecutivo, por lo que los bajones momentáneos dentro de una palabra no reinician la detección.
  • El periodo de gracia se aplica solo al inicio de la reproducción (voice.barge_in_grace_seconds, por defecto bajado de 2.0 s a 0.5 s), en lugar de silenciar el micrófono durante toda la respuesta.

Para ver los diagnósticos:

HERMES_VOICE_DEBUG=1 hermes voice

3.2 VAD de ventana deslizante: rechazo adaptativo de eco

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

Antes del modelo full-duplex anterior, el equipo ya había introducido un VAD de ventana deslizante para mitigar el antiguo modelo half-duplex:

  • Una deque de ~3 segundos recalcula continuamente el percentil 90 del piso de ruido en lugar de calibrar una sola vez.
  • El multiplicador subió de 5x a 8x para absorber la variación de volumen del TTS.
  • Se mantiene el techo de 4000 RMS y un mínimo de SILENCE_RMS_THRESHOLD * 2.
  • Un periodo de gracia de 2.0 s al inicio de la reproducción evita interrupciones prematuras.
  • En modo streaming_enabled, se suprime la renderización duplicada del texto, para que no leas dos copias de la misma frase mientras la escuchas.
  • La misma lógica se refleja en el gateway TUI para que las rutas CLI y TUI se comporten igual.

3.3 Frases de parada: di o escribe “stop” para terminar la conversación de voz

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

Antes, solo el modo PTT clásico de la CLI obedecía una frase de parada hablada. v0.19.1 unifica el comportamiento en todas las superficies:

  • hermes_cli/voice.py ahora pasa un callback on_stop_phrase explícito a través de start_continuous/stop_continuous.
  • El gateway TUI emite voice.transcript {stop_phrase: true}, apaga HERMES_VOICE(_TTS) y detiene el streaming TTS.
  • El process_loop de la CLI trata un “stop” tecleado durante el modo de voz como salida del modo de voz, no como mensaje para el agente.
  • El composer Desktop intercepta un comando de parada tecleado y termina la conversación de voz por el mismo camino que el botón de finalizar.
  • tools/voice_mode.py hace que las frases de parada ganen al filtro de alucinaciones de Whisper, así que palabras como “bye” siguen funcionando si están configuradas como frases de parada.

La frase por defecto es voice.stop_phrases = ["stop"], pero puedes personalizarla:

voice:
  stop_phrases:
    - "stop"
    - "fin"
    - "adiós"

3.4 Reparación del contenedor TTS: no más burbujas de voz rotas de 0 segundos

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

Esta es la corrección raíz de la familia de bugs “la burbuja de voz se reproduce 0 segundos” en Telegram, Matrix, Feishu, WhatsApp y Signal:

  • Algunos backends devuelven bytes MP3 o WAV aunque la ruta de salida sea .ogg (Edge devuelve MP3, Piper devuelve WAV, xAI devuelve MP3, y algunos servidores OpenAI-compatibles ignoran response_format=opus).
  • v0.19.1 añade _sniff_audio_container y _repair_ogg_container dentro de text_to_speech_tool para detectar el contenedor real tras la síntesis y transcodificar con ffmpeg o renombrar el archivo a la extensión honesta.
  • Un nuevo conjunto OPUS_VOICE_PLATFORMS cubre todas las plataformas que necesitan burbujas de voz Opus reales, no solo Telegram.

Para el usuario final, esto significa que las respuestas automáticas de TTS entre gateways son mucho menos propensas a llegar como adjuntos rotos.

3.5 Wake word: solo se arma si STT y TTS están realmente listos

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

El bucle de wake es: palabra de activación → grabación → STT → agente → TTS. Armar el micrófono cuando falta alguna mitad produce una experiencia frustrante: “te escuché pero no pasó nada”. En v0.19.1, check_wake_word_requirements verifica ambas cosas antes de armar:

  • stt.enabled y un provider distinto de none.
  • Que check_tts_requirements pase.

Si falta alguna, el comando rechaza y dice exactamente qué mitad está rota. Por ejemplo, si STT está deshabilitado, /wake informa que speech-to-text no está listo. Esto evita el error común de activar la palabra de despertar sin haber configurado la pila de voz.

4. Configuración recomendada y lista de depuración

Juntando las correcciones, una configuración de voz para v0.19.1 podría verse así:

voice:
  barge_in_threshold_multiplier: 3.0   # sensibilidad de interrupción full-duplex
  barge_in_grace_seconds: 0.5            # gracia al inicio de la reproducción, bajado de 2.0
  stop_phrases:
    - "stop"

stt:
  enabled: true
  provider: whisper  # o tu backend real

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

Cuando la voz se comporte mal, sigue este orden:

  1. Ejecuta hermes tools para confirmar que las herramientas de voz están habilitadas.
  2. Ejecuta HERMES_VOICE_DEBUG=1 hermes voice para observar umbrales VAD y decisiones de interrupción.
  3. Verifica que voice.stop_phrases contenga la palabra que deseas.
  4. Confirma que stt.enabled y tts.provider estén configurados.
  5. En Desktop, abre la pestaña Capabilities y verifica el proveedor TTS y el modelo de voz (v0.19.1 añadió la configuración inline allí).

5. Otras correcciones notables del parche

Fuera de la voz, v0.19.1 incluye mejoras de estabilidad que afectan el uso diario:

  • Adjuntos en el composer: el TUI ahora inserta adjuntos inline en el cursor y los desvincula al borrar el token.
  • Cierre de pestañas: cerrar la última pestaña principal lleva a New session en lugar de una pantalla en blanco.
  • Enlaces en terminal: ⌥-click ya no inyecta secuencias de escape y los enlaces del terminal integrado se abren correctamente.
  • Seguridad de CI: el workflow principal ahora usa tokens de GitHub App de corta duración en lugar de un PAT de larga vida, mejorando la seguridad en forks.
  • Docker / Nix: se arreglaron rutas de módulos y problemas de lockfile.

Si quieres una comparación lado a lado con otros agentes de IA, visita la página de comparación.

6. Cómo actualizar

v0.19.1 está disponible a través del instalador oficial o con hermes update:

# Ya instalado
hermes update

# Instalación nueva
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Después de actualizar:

  1. Ejecuta hermes version para confirmar v0.19.1 o posterior.
  2. Ejecuta hermes config get voice para verificar que la configuración de voz migró bien.
  3. Inicia una conversación de voz continua y prueba interrumpir y usar frases de parada.
  4. Si usas Desktop, revisa la pestaña Capabilities para el proveedor TTS y el modelo de voz.

7. Conclusión: por qué este “parche” importa

Hermes Agent v0.19.1 demuestra que el número de patch no equivale al tamaño del cambio. En unos diez días, el equipo fusionó ~2.789 PRs, tocó ~4.748 archivos y salvó de forma sistemática los problemas de voz, escritorio, instalador y plataformas que surgieron tras la “Quicksilver” v0.19.0.

Para el usuario diario, las ganancias más claras son:

  • Un modo de voz que realmente puedes interrumpir.
  • “Stop” funciona tanto si lo dices como si lo escribes.
  • Las burbujas de voz entre plataformas son más fiables.
  • Las palabras de activación rechazan armarse si el pipeline de voz está a medio configurar.

El equipo también adelanta que v0.20.0 incluirá notas de lanzamiento completas y curadas que cubrirán todo desde v0.19.0 en adelante, con todas las funciones destacadas y créditos de contribuidores. Para no perdértelo, guarda la página de lanzamientos.


Referencias