La v0.21.5 vuelve a salir sin notas de versión: cómo auditar lo que realmente recibió tu instalación


Ves «Hermes Agent v0.21.5 released» en un feed, haces clic, y el cuerpo es un solo párrafo corto: este es un tag de patch que consolida la ventana en un release estable para las imágenes Docker y los despliegues alojados, y el texto completo y curado se aplaza a la v0.22.0. Ejecutas hermes update, el terminal dice que la actualización fue bien. Y entonces, ¿qué has recibido realmente? No puedes saberlo con nada de lo que has leído, y tampoco tienes claro si actualizar hoy era siquiera la decisión correcta. No es paranoia: es lo que los tags de patch le hacen a la gente. Así que este artículo va de una sola cosa, concreta y práctica: cómo responder a esa pregunta sin esperar a las notas de versión.

Por qué los tags de patch suelen salir sin notas

Aclara esto una vez y dejarás de darle vueltas cada pocas semanas.

Hermes publica dos clases de tag. Un release semántico —v0.20.0, v0.21.0— llega con un texto largo: destacados, áreas funcionales, créditos de contribuidores. Un tag basado en fecha como este, v2026.9.24, existe para otra tarea: sellar todo lo que hay entre el tag anterior y el momento actual en una única versión estable y descargable.

¿Por qué hace falta que exista? Porque las imágenes Docker, Hermes Cloud y los despliegues alojados se construyen desde el tag de release más reciente, no desde main. Una corrección que aterriza en main no llega a los usuarios de la nube hasta que está dentro de un tag. Así que, cuando se ha acumulado bastante, un tag de patch cierra la ventana.

El precio es que nada de esa ventana recibe un texto propio ni un nombre. Esta ventana son 460 PR fusionados, 1.610 commits sin merge, 4.828 archivos modificados (+164.132 / −149.440) y 475 incidencias cerradas desde la v0.21.4, medido en el commit f97608f178d1ffeca59860195ab7da295f7c8e5f. El cuerpo del release dice explícitamente que no se omite nada: todo se escribe junto en la v0.22.0, que documenta todo desde la v0.21.0 en adelante.

Dicho de otro modo: «sin notas de versión» no significa «sin nada dentro». Tu actualización es real. La lista simplemente aún no se ha escrito.

Paso uno: averigua en qué versión estás

No te fíes de la intuición. Un solo comando:

hermes --version

Obtendrás algo como Hermes Agent v0.21.5 (2026.9.24) · upstream <commit>. Fíjate en la relación entre los dos números:

Lo que ves Lo que significa
v2026.9.24 El tag basado en fecha: el nombre que aparece en la página del release en GitHub
v0.21.5 La versión semántica: la que se usa en artefactos, nombres de imagen y tu config.yaml

Son el mismo release, no dos. Ver v2026.9.24 en GitHub mientras tu máquina dice v0.21.5 es normal: no intentes «arreglarlo».

En una instalación por git también puedes ver sobre qué commit estás:

cd ~/path/to/hermes-agent && git log --oneline -1

En Docker, lee el tag de la imagen: nousresearch/hermes-agent:v2026.9.24 es este release. Este además añadió un eje de variantes: :latest-desktop / :main-desktop / :v*-desktop llevan Xvnc/Xfce y el Chromium con interfaz de Playwright, que es lo que entrega Bot Screen en los despliegues alojados. Esos paquetes no se pueden instalar en tiempo de ejecución sobre la imagen publicada (usuario sin privilegios, sin sudo, /opt/hermes sellado), así que la capa de la imagen es la única vía.

Paso dos: sáltate los 460 PR y lee la comparación

El enlace de comparación del «changelog completo» es el punto de entrada de referencia:

https://github.com/NousResearch/hermes-agent/compare/v2026.9.21...v2026.9.24

Es enorme, pero solo necesitas tres trozos: los archivos nuevos (sobre todo páginas nuevas bajo website/docs/, que indican que ha llegado una función), el diff de config_defaults.py (que indica claves de configuración nuevas) y el diff de hermes_cli/ (que indica comandos o flags nuevos). Revisar esos tres es más rentable que leer los títulos de los PR de arriba abajo.

Paso tres: ocho cosas que ya puedes usar en esta ventana

Todo lo que sigue forma parte de este tag. Cada punto viene con lo que escribes de verdad.

1. El escritorio gana catálogos completos en francés, alemán y español

El escritorio ya incluye catálogos de interfaz completos para los tres idiomas, que se eligen en Ajustes → Apariencia → Idioma. display.language: fr|de|es, junto con alias regionales como fr-CA, de-AT y es-419, resuelven al catálogo correspondiente en lugar de caer al inglés. Los nombres de producto y los identificadores (Hermes, MCP, API, OAuth, IDs de modelo) se quedan sin traducir.

2. Un ajuste de dirección del texto: Automática / RTL / LTR

Más abajo en la misma página está Visualización del chat → Dirección del texto. Antes, cada bloque de prosa del chat deducía su dirección a partir de su primer carácter fuerte, lo que tiene todas las papeletas de equivocarse con un párrafo en árabe que abre con un nombre en latín. Ahora puedes decirlo directamente: Automática mantiene el comportamiento anterior, y RTL/LTR aplica un único dir a la prosa y a los dos compositores. El código se queda en LTR, el cromo de la aplicación no se voltea y no se añade ningún carácter de control bidi a tu texto. Es una preferencia de lectura de la interfaz, no una clave de config.yaml.

3. Las entregas de webhook pueden espejarse en la session del chat de destino

Antes, una entrega era fire-and-forget, así que responder «¿qué build?» en ese chat te devolvía «¿a quién te refieres?». Ahora una ruta puede activarlo:

hermes webhook subscribe ci-alerts \
  --prompt "build {route} failed: {payload}" \
  --deliver telegram \
  --mirror-to-session

Una suscripción correcta imprime una línea extra que te avisa de que cada entrega se espeja en la session del chat de destino. Desactivado por defecto; solo un booleano true real lo activa. Los límites se explican en la guía específica enlazada más abajo.

4. Añade un modelo por slug desde cualquier selector de modelos

Una nueva fila al pie, Añadir modelo personalizado…, convierte el cuadro de búsqueda del menú de modelos en un campo de slug, ofrece una fila por cada provider configurado mientras escribes, y el slug recordado se queda en la lista como una fila normal con su × para quitarlo. Funciona en el menú del compositor, en el diálogo de cambio de modelo, en Ajustes → Modelo y en la lista de edición de modelos.

5. Las voces locales dejan de recargarse en cada activación

Una clave de configuración nueva, tts.keep_warm_seconds, por defecto 60:

hermes config get tts.keep_warm_seconds    # 60
hermes config set tts.keep_warm_seconds 0  # descarga inmediata

Después de liberar el último lease, la descarga espera ese tiempo; volver a encender la voz dentro de la ventana lo cancela y reutiliza el modelo ya cargado. Esto importa sobre todo en las conversaciones de voz que solo usan la palabra de activación, que terminan justo después del calentamiento de ~2 s y antes perdían la voz cargada milisegundos más tarde.

6. El bucle de voz del escritorio empieza a leer tu configuración

Leer en voz alta ya no pronuncia marcadores en inglés como code block omitted o link, ni se salta tablas en silencio: los bloques de código y las URL se quedan callados, y las tablas leen su fila de cabecera. La parada hablada ahora lee voice.stop_phrases (por defecto ["stop"]); antes comparaba contra una lista fija en inglés, así que un usuario ruso que decía отбой como indicaba el aviso lo enviaba al agent como prompt. El disparador de reproducción con barge-in ahora usa voice.barge_in_threshold_multiplier (por defecto 3.0) en lugar de un 0.14 fijo que quedaba por encima del nivel de voz de unos auriculares Bluetooth HFP, y por eso hablar encima de una respuesta nunca la interrumpía.

7. Los atajos de voz con teclas de función se pueden reasignar

El dictado puntual es ahora una acción de teclado composer.dictate sin asignar, separada de la conversación de voz, que reutiliza la ruta de captura canónica del escritorio para teclas F, Bloq Mayús, Suprimir, Espacio y combinaciones con modificadores; una F12 asignada llega al renderer mientras que una F12 sin asignar conserva el comportamiento de DevTools. En la misma ventana también se arreglaron las teclas de función en macOS: el parser de la TUI mantiene intactas las secuencias de terminal F1–F12, y el dock de trabajo en vivo ganó Ctrl+R como alternativa portátil a F7.

8. Una tanda de fallos que solo aparecen en Windows localizado

  • En Windows en francés, español o alemán, %Z lanzaba UnicodeEncodeError dentro de strftime, porque los nombres de zona llegan como bytes de la página de códigos ANSI que se decodifican en surrogates sueltos. Ahora lo maneja hermes_time.safe_strftime(), y en locales sanos su salida es idéntica byte a byte a la de antes, así que el invariante de la caché de prompt se mantiene.
  • El [gateway-crash] ... UnicodeDecodeError: 'gbk' codec can't decode que no paraba de aparecer en Windows en chino está arreglado: ahora la salida de los procesos hijos se fija a UTF-8.
  • C:\...\report.html y las rutas UNC \\server\share\... se reconocen como rutas y se previsualizan bien, en lugar de unirse al directorio de trabajo y quedar como /repo/C:\....
  • En un arranque en frío de Windows, el bucle de eventos del backend local se bloquea entre 12 y 28 s mientras se importan los módulos del gateway, y una sonda de arranque con 10 s fijos lo marcaba como fallo de arranque. Un backend lanzado por esta aplicación ahora sigue esperando mientras el proceso hijo esté vivo, hasta un tope de 90 s.

Una autocomprobación de cinco minutos

Después de actualizar, esto confirma que tienes la superficie nueva (en la v0.21.5 o superior):

hermes --version                                        # esperado v0.21.5 (2026.9.24)
hermes config get tts.keep_warm_seconds                 # 60
hermes config get voice.stop_phrases                    # - stop
hermes config get voice.barge_in_threshold_multiplier   # 3.0
hermes webhook list                                     # muestra qué rutas hacen espejo

Cuándo deberías esperar de verdad a la v0.22.0

En ningún caso. Todo lo que hay en un tag de patch ya es el código que corre en tu máquina: ningún documento bloquea tu actualización. Dos grupos sí tienen motivos para esperar: los distribuidores posteriores (quien empaqueta imágenes o genera builds internos para un equipo) y cualquiera que escriba un tutorial sobre esta ventana, porque su lista se leerá mejor.

Si Hermes es simplemente algo que usas, la única prueba que importa es: ¿está aquí arreglado algún problema concreto con el que te topas? Esta ventana tiene candidatos de sobra: coge cualquiera de los ocho grupos de arriba y pruébalo.

La versión corta

  • Un tag de patch sin notas es un mecanismo, no un encogimiento de hombros: existe para que las imágenes Docker y los despliegues alojados puedan recoger correcciones que viven en main.
  • La versión tiene dos formas; v2026.9.24 y v0.21.5 son un mismo release.
  • Para la lista, revisa tres trozos de la comparación: documentos nuevos, el diff de config_defaults.py y el diff de hermes_cli/.
  • Ocho grupos de cambios de esta ventana ya se pueden usar, desde los nuevos catálogos del escritorio hasta cuatro arreglos de crashes por localización en Windows.

Para el registro más completo de esta ventana, nuestra página del release v0.21.5 la agrupa por área funcional; para la ventana de patch anterior, consulta el recorrido de la ventana v0.21.4. El espejo de webhooks tiene su propia guía, y los cambios de voz se cubren en keep-warm y streaming por frases. ¿Empiezas desde una máquina nueva? La guía de instalación tiene el camino completo.