Hermes v0.22.2: la versión que la 0.22.1 debía ser


Configuraste Hermes como servicio de systemd hace meses y desde entonces se ha reiniciado limpiamente en cada reinicio — hasta que una mañana el servicio está muerto, systemctl start dice que ya está activo en algún sitio y la única pista en el log es un PID que pertenece a algo completamente distinto. O estás en un portátil, ejecutando un modelo local, y un turno largo simplemente… se detiene: la línea de estado se queda ahí, cierras la tapa un rato y cuando vuelves el turno se ha rendido. Ambos problemas tienen solución en la v0.22.2, y también un problema más inusual: la versión anterior se compiló a partir del commit equivocado.

Qué pasó realmente con la v0.22.1

La v0.22.1 se publicó el 14 de octubre de 2026 y apuntaba al árbol equivocado. Dos consecuencias se veían desde fuera: el tag publicó trabajo del gateway que todavía no se había lanzado, y el paquete de Microsoft Store podía colgarse en “Connecting.” en lugar de terminar su primer arranque.

La v0.22.2 se publicó a la mañana siguiente, compilada a partir del commit que la etiqueta anterior debía usar, con la v0.22.1 publicada como padre. El texto oficial de la versión es tajante sobre la relación: “0.22.2 es la versión que la 0.22.1 debía ser.” De v0.22.1 a v0.22.2 el rango de comparación es de 11 commits — una recompilación, no un lanzamiento de funcionalidades.

Una advertencia honesta acompaña a la recompilación: las sesiones que se ejecutaron bajo el gateway 0.22.1 no se pueden eliminar en la 0.22.2. Se pueden leer y reanudar; eliminarlas falla. Si eso te importa, archiva o exporta la sesión en lugar de confiar en el borrado.

Primero, averigua en qué compilación estás

Las versiones de parche son donde “¿estoy realmente en la versión corregida?” deja de ser una pregunta retórica, así que compruébalo antes de hacer cualquier otra cosa:

hermes version

La app de escritorio lo muestra en Settings ▸ About (ahí también está el interruptor del canal de actualizaciones, si seguiste la guía del canal estable). Quienes usen Docker solo tienen que leer el tag que descargaron: nousresearch/hermes-agent:stable pasa al nuevo parche la próxima vez que hagas pull.

Si estás en la 0.22.1, actualiza. Si estás en la 0.22.0, el mismo hermes update te lleva directamente a la 0.22.2 y obtienes las dos correcciones de abajo.

hermes update

Corrección 1: un gateway supervisado vuelve a arrancar tras un reinicio

El gateway necesita saber si ya hay otro gateway en ejecución en esta máquina antes de tomar el control. Usaba el ID de proceso que había registrado, y ahí había un agujero: tras un reinicio, Linux puede asignar un PID muy temprano a un proceso no relacionado. Si el PID reciclado coincidía con el registrado, el gateway concluía que un gateway vivo ocupaba la máquina y se negaba a arrancar. Con systemd, launchd o Docker — donde algo está esperando para reiniciar el servicio — eso significa un servicio que nunca llega a levantarse.

La corrección consiste en dejar de confiar en un PID desnudo y registrar algo que un reinicio no puede falsificar:

  • Hermes registra en qué arranque se inició y lo compara con el arranque actual.
  • Cuando el registro no se puede comparar — un formato de registro más antiguo o una hora de arranque que no se puede leer — consulta el host lock. El host lock es un archivo que solo mantiene un gateway vivo, así que mantenerlo es una prueba de vida que un PID no ofrece.
  • La comprobación de actividad ya no crea el archivo de bloqueo como efecto secundario de mirar, y la identidad de argv se eliminó por completo de la comprobación, porque un PID reciclado puede coincidir con una hora de arranque y con una línea de comandos a la vez.

Si tu gateway se ha estado negando a arrancar después de los reinicios, actualizar lo soluciona sin tocar tu unit file. Verifícalo con el comando que usa tu supervisor:

systemctl status hermes-gateway

Corrección 2: los turnos largos con modelos locales sobreviven en un portátil

Ejecutar un modelo en local cambia los modos de fallo, porque ahora el modelo es lo más lento de la sala y la máquina en la que corre puede dormirse. Un solo pull request (#138560) cierra cuatro de ellos de golpe:

Síntoma Qué cambió
Un prompt largo parece un turno colgado Las peticiones locales siempre usan streaming, y la línea de estado muestra el progreso de lectura del prompt mientras el servidor ingiere
Un turno que estuvo dormido cuenta como tiempo de pensamiento Los temporizadores de bloqueo se saltan el tiempo que la máquina pasó suspendida
Todos los mensajes fallan tras un timeout, incluso después de que el servidor vuelva Un servidor local recuperado recibe otro intento en lugar de un cortacircuitos que se queda abierto
La compresión agota el tiempo mientras el modelo sigue leyendo La compresión ya no se rinde mientras el servidor ingiere una conversación larga

En las máquinas Windows con memoria unificada hay una quinta pieza: el lanzamiento del modelo y la caché de prompts se dimensionan según la memoria libre en lugar de la memoria total, de modo que una máquina que ya está ocupada no se sobreexcede.

Esto importa sobre todo justo donde los modelos locales resultan más atractivos: un portátil con unos pocos GB de margen, un turno de agente largo y un usuario que cierra la tapa. Si lo estás configurando por primera vez, la guía de modelos locales con llama.cpp repasa el runtime que instala Hermes.

Qué más hay en la línea 0.22 desde la v0.22.0

Como la 0.22.2 republica toda la línea 0.22, viajan con ella algunos cambios menores que conviene conocer:

  • Selector de modelos: una lista curada de modelos aparece en la parte superior del selector, NVIDIA NIM incorpora su lista de modelos predeterminados y Nemotron 3.5 Super VL llega con parámetros predeterminados.
  • Rutas de Mistral: los ids de herramientas compuestos se vuelven a emparejar antes de que los vea el proveedor — Mistral limita los ids de herramientas a nueve caracteres.
  • Perfiles: un nuevo perfil hereda el modelo de lanzamiento custom básico junto con su endpoint, incluidos los proveedores referenciados por variables de entorno.
  • Terminal y búsqueda: tus propias herramientas van antes que las de Hermes en PATH, y la búsqueda de archivos local usa el ripgrep fijado de Hermes en lugar del primer rg de la máquina.
  • Catálogo: llegan los paquetes de idioma de escritorio de coreano y portugués de Brasil, además de nuevas entradas de catálogo (author-feed, wait-ledger, openinvest, TeamoRouter, Hermes AAC, Agent Mixer).
  • Dependencias: httpx2/httpcore2 a 2.12.0 y los paquetes npm fijados actualizados para resolver hallazgos de auditoría.

Las notas curadas completas de la línea 0.22 están en la página de la versión v0.22.0 Threshold y en las notas de la versión v0.22.2.

La conclusión

Una versión de parche que reemplaza a otra versión de parche merece un minuto de tu atención: comprueba hermes version, ejecuta hermes update y, si estabas en la 0.22.1, trata las sesiones no eliminables como el único cabo suelto y archívalas en lugar de borrarlas. Si estás montando una instalación nueva, la guía de instalación tiene los one-liners actuales.


Fuentes: el cuerpo de la versión v0.22.2 y el rango de comparación v0.22.1...v0.22.2 en el repositorio de Hermes Agent; el trabajo de identidad de arranque del gateway es el PR #138594 (que corrige la incidencia #133744) y el trabajo de modelos locales es el PR #138560.