Hermes v0.21.1: la actualización que hizo a Hermes un tercio más pequeño — y todo lo que te importa, más rápido

La mayoría de las actualizaciones de Hermes te piden algo: un comando nuevo que aprender, una clave de configuración que valorar, un valor por defecto nuevo que cambia cómo se comporta tu instalación. v0.21.1 (tag v2026.9.7, publicado el 7 de septiembre de 2026) es la rara excepción — una actualización que instalas y apenas notas, porque todo lo que cambió está bajo el capó o en las partes del flujo de trabajo que antes más te molestaban. El proyecto lo llama un parche de consolidación: aproximadamente 5,139 commits, ~4,364 archivos modificados y ~632 PRs fusionados desde v0.21.0, con unas notas oficiales breves y la curación completa diferida a v0.22.0. Igualmente repasamos la ventana para que tú no tengas que hacerlo — esto es lo que de verdad importa.
Una actualización que dejó el codebase un tercio más pequeño
La historia más grande de esta ventana es invisible a menos que abras el repositorio: una simplificación de todo el codebase (PR #102117) llevó el código fuente de 1,063,826 a 698,363 líneas — un recorte del 34.4 % — con el comportamiento garantizado sin cambios. Treinta y siete archivos de más de 5,000 líneas se convirtieron en seis. Los monstruos famosos han desaparecido: gateway/run.py se encogió de 34,847 a 5,512 líneas, cli.py de 22,426 a 4,656, y el número de funciones de más de 300 líneas bajó de 192 a 2. Los archivos antiguos se quedaron como entry points delgados, y el equipo verificó contra el árbol previo al refactor schemas de herramientas byte-idénticos, valores por defecto de configuración y formatos de red antes de fusionar.
¿Y por qué debería importarte, si nada de lo que ves cambió? Porque un codebase que cabe en la cabeza de un modelo cuesta menos de navegar: las evaluaciones del propio PR midieron el éxito de las tareas de los agentes y el gasto de tokens en navegación de repositorio antes y después, y ahora cada subsistema es lo bastante pequeño para que un agente (o un humano) pueda retenerlo de verdad en contexto. Tu próxima sesión en un codebase grande carga más rápido y comete menos errores — el refactor es en la práctica un descuento permanente de tokens para el coding agéntico. La página de la versión complementaria en este sitio tiene todas las cifras si te gusta ese tipo de cosas: notas de la versión v0.21.1.
Los fan-outs informan en cuanto llegan
Si alguna vez enviaste cinco subagentes a investigar algo y luego te quedaste mirando un chat vacío durante una hora porque el más lento estaba atascado, esto es para ti. delegate_task antes devolvía un único resultado gigante después de que terminara el último hijo; ahora cada tarea devuelve su resultado en el momento en que se completa (PR #104299). Las tareas que van juntas pueden optar por un group, y los resultados agrupados siguen llegando como un solo mensaje:
{
"tasks": [
{ "goal": "check api latency", "group": "bench" },
{ "goal": "check db latency", "group": "bench" },
{ "goal": "scan the changelog" }
]
}
Las dos tareas de benchmark vuelven juntas; el escaneo del changelog aterriza solo en cuanto termina. Puedes empezar a actuar sobre los primeros resultados en lugar de esperar al rezagado — y toda la llamada sigue contando como una sola plaza contra delegation.max_concurrent_children, así que la aritmética de capacidad no cambia. Combínalo con la guía de orquestación en vivo de subagentes y un fan-out empieza a sentirse como un equipo al que puedes ver trabajar de verdad.
Los hijos te ceden el volante — procesos en segundo plano incluidos
La misma pasada de delegación arregló uno de los modos de fallo más desagradables del trabajo multiagente: un hijo que lanza un proceso largo en segundo plano y luego sale solía dejar ese proceso sin dueño — la limpieza del hijo lo mataba en silencio, o el padre esperaba un aviso de finalización que nunca podía llegar, porque el notify=true del hijo era una promesa que nada podía cumplir. Ahora un subagente puede entregarte un proceso en marcha antes de salir con process_manage(action="handoff", session_id=<id>, data="<purpose>") — la propiedad pasa al padre y, cuando el proceso termina, el aviso aterriza en tu chat con el propósito adjunto (PR #105125). Los restos se notifican con honestidad como terminados, y a los hijos se les dice de entrada que las notificaciones no están garantizadas. Misterio de procesos huérfanos resuelto.
Logins MCP sin navegador
Te conectas por SSH a una máquina headless, apuntas Hermes a un servidor MCP auto-alojado y te chocas con el muro: el servidor quiere un flujo OAuth de navegador, y el único navegador del edificio está en tu móvil. Los device codes de RFC 8628 son exactamente para esta situación, y v0.21.1 los integra de punta a punta (PR #104891). Un solo comando inicia el flujo:
hermes mcp login <server> --flow device
Hermes encuentra el device endpoint del servidor, imprime una URI de verificación y un código, y hace polling hasta que apruebas — desde cualquier dispositivo con navegador. Pon oauth.flow: device en la configuración del servidor y eso se convierte en el valor por defecto para el login y la re-autenticación. Las autorizaciones denegadas o caducadas nunca pisan tus credenciales existentes, y las reconexiones en segundo plano te apuntan a un login explícito en lugar de iniciar un device flow en silencio. Si ejecutas servidores MCP en hosts remotos, esto elimina toda una clase de dolor del tipo «no puedo autorizar aquí» — consulta nuestra guía de variables de contexto MCP para el resto de herramientas MCP amigas de headless.
Selecciones que siguen frescas, pines que se mantienen
Dos mejoras de selección de modelos aterrizaron en esta ventana y, juntas, arreglan el momento de «espera, ¿por qué usó ese provider?». Primero, el routing de OpenRouter ahora puede fijarse por modelo, no solo globalmente (PR #104159):
provider_routing:
sort: price
models:
"openai/gpt-6-astra": { only: [openai] }
"anthropic/claude-fable-5.1": { only: [anthropic] }
Con una configuración bloqueas ahora GPT-6 Astra a OpenAI y Claude Fable a Anthropic mientras todo lo demás sigue ordenándose por precio — y como la regla se aplica en el único punto de estrangulamiento que comparten todas las rutas de petición, los trabajos cron y los hijos delegados también la respetan. Si has seguido la guía de discovery-gating de Astra, esta es la perilla que hace deterministas las configuraciones Astra multi-provider.
Segundo, el selector /model dejó de quedarse obsoleto: los catálogos remotos se refrescan cada 20 minutos en lugar de con un TTL de 1 hora, y un bucle en segundo plano del gateway los mantiene calientes aunque nadie abra el selector (PR #101319) — un modelo que se lanza o se retira aparece (o desaparece) en veinte minutos en todas las superficies. El provider de Meta Model API también pasó a usar su respuesta en vivo /v1/models como catálogo autoritativo, así que los modelos Muse nuevos aparecen sin esperar a una actualización del cliente (PR #101503). Más mecánicas de catálogo y overrides viven en la guía de model overrides.
Más rápido bajo el capó: búsqueda, compactación y un cron más silencioso
search_filesahora ejecuta ripgrep nativo en máquinas POSIX locales (PR #104502) — las búsquedas de contenido pasan de ~85 ms a ~15 ms y las de nombres de archivo, de ~73 ms a ~12 ms. Mismos resultados, 5–6× menos latencia de herramienta, que se acumula rápido en los bucles de agente que buscan constantemente.HERMES_NATIVE_FILE_READ=0restaura la vieja vía del shell si aparece algo raro.- La compactación conserva su prefix cache en sesiones de coding (PR #104455): la snapshot del workspace de coding se fija por sesión en lugar de volver a sondear
git statusen cada límite de compactación, así que las sesiones largas dejan de pagar por reconstruir el prompt desde cero después de cada compact. - Los subagentes que terminan dejan de perder memoria (PR #102032): los transcriptos de los hijos se liberan del heap del padre y se excluyen del índice de texto completo — una ejecución de 1,320 hijos solía dejar un heap de 1.9 GB y ~1 GB de shadow tables detrás.
- Cron dice la verdad sobre los disparos omitidos (PR #100445, #104877):
hermes cron listahora muestra una líneaDispatch:por trabajo —⚠ catch-up after missed fireen lugar de un «ok» engañosamente limpio — y los ticks silenciosos de monitor ya no borran el contexto de continuidad que necesita la siguiente ejecución. Más higiene de cron en la guía de cron doctor.
La seguridad recibió un arreglo de verdad en la misma ventana: las reglas approvals.deny ahora se aplican dentro de los sandboxes aislados de Docker y cloud (PR #103649), cerrando una vía por la que una lista de denegaciones podía eludirse con un shell en sandbox incluso bajo --yolo. La versión Pantheon v0.21.0 fue la gran versión de funciones; v0.21.1 es la limpieza que mantiene la casa en pie. Si te saltaste los últimos parches, nuestro resumen de v0.20.6 cubre lo que llegó antes de esto.
hermes update
Actualiza, ejecuta hermes doctor, reinicia el gateway — y disfruta de una actualización que cambió un tercio del código sin pedirte que cambies ni un solo ajuste.