Cómo funciona Hermes internamente: contexto, memoria, sesiones y orquestación
Si llevas un tiempo usando Hermes como tu agente personal, probablemente ya sabes qué hace: le escribes por Telegram, te responde, ejecuta comandos, te recuerda cosas. Pero entender cómo lo hace por dentro te va a ayudar a configurar mejor tu entorno, a gastar menos contexto y a sacarle mucho más provecho. En este artículo vamos a recorrer, guiándonos de la documentación oficial, todo el ciclo interno del agente: cómo procesa los prompts, cómo construye el contexto, cómo funciona su memoria, qué proveedores soporta y cómo puede incluso orquestar a otros agentes.
¿Qué es Hermes exactamente?
De forma sencilla, Hermes es un programa que se instala en Windows, Linux o Mac y que se mantiene ejecutándose todo el tiempo como un servicio del sistema operativo. Mientras tu computador esté encendido, el agente está escuchando, y eso significa que puedes enviarle un mensaje en cualquier momento del día.
Ese programa que corre en segundo plano es el agente en sí. Ahora, para comunicarte con él tienes varias puertas de entrada:
- CLI: al instalar Hermes obtienes un comando de consola. Es la forma más común y ligera de interactuar con el agente: abres la terminal, escribes
hermesy preguntas lo que quieras. - Gateway: una puerta de enlace que permite comunicarte con el agente desde afuera, es decir, desde aplicaciones externas como Telegram, WhatsApp, Discord, Slack, Google Chat, Signal y una lista enorme de plataformas más (incluyendo apps de proveedores chinos y clientes abiertos de la comunidad). No importa desde qué aplicación escribas: todo pasa por el gateway y este se comunica con el agente.
- Aplicación de escritorio y dashboard web: interfaces propias del proyecto. Lo interesante es que si empiezas una conversación en la terminal, puedes continuarla desde la app de escritorio o desde el dashboard: estás hablando con el mismo programa, solo cambia la interfaz.
- API HTTP: si quieres desarrollar tu propia interfaz (una app móvil, otra web, una integración con otro sistema), la API te permite acceder a las conversaciones —con autenticación de por medio— y también enviar tareas o mensajes al agente. De hecho, gracias a esto existen bastantes clientes no oficiales creados por la comunidad.
Tools, skills y MCPs: las capacidades del agente
La razón principal de usar Hermes no es solo que esté siempre escuchando, sino lo que puede hacer:
- Tools: programas que le permiten al agente realizar acciones, desde navegar en internet y transcribir textos hasta ejecutar comandos del sistema cuando le delegas una tarea.
- Skills: archivos de texto (Markdown) que le dan al agente información sobre cómo usar una herramienta específica. Pueden combinarse con herramientas de consola. Existe una especie de marketplace filtrado con skills ya comprobados: para conectarse a Notion, generar PDFs, integrarse con Shopify, hacer investigación, crear contenido para redes sociales y prácticamente cualquier cosa que imagines. Y, como en todos los agentes modernos, también puedes crear tus propios skills.
- MCPs: la forma genérica de conectar Hermes con proveedores externos que no tienen CLI ni skill disponible (piensa en Stripe, PayPal o Supabase). El agente envía peticiones vía HTTP y obtiene respuestas. Ojo: los MCPs consumen bastante contexto por la cantidad de información que cargan, así que no vale la pena tener conectadas herramientas que no vas a usar.
Un detalle importante: los skills solo son información. El skill le enseña al agente cómo usar una herramienta, pero la herramienta tiene que estar instalada. En el contexto solo se carga la descripción de qué hace cada tool; la ejecución ocurre después, cuando el LLM decide llamarla.
La memoria: archivos Markdown y perfiles
Una de las características centrales de este tipo de agentes es su memoria. A medida que conversas, Hermes puede recordar tu nombre, tus preferencias o los programas que usas típicamente. Por defecto, esa memoria vive en archivos Markdown dentro de la carpeta oculta de Hermes:
soul.md: la personalidad del agente.user.md: la información sobre ti.memory.md: información genérica y arbitraria que no encaja en las anteriores; por ejemplo, si siempre quieres que un comando se ejecute de cierta forma o que las respuestas se formateen con un estilo particular.
Los chats, por su parte, se guardan en una carpeta llamada sessions.
Aquí entra una función muy interesante: los perfiles (profiles). Dentro de una sola instancia de Hermes puedes crear distintos bots, cada uno con un tipo de trabajo diferente: uno enfocado en desarrollo, otro en investigación exhaustiva, etc. Cada perfil tiene su propia estructura de archivos —su propio soul.md, su propio user.md, su propia memoria—, así que cada bot va formando su historial y su personalidad de forma independiente.
Memoria externa
Si prefieres no depender de los archivos internos, también puedes conectar un sistema de memoria externo, con proyectos como Mem0 o Supermemory. ¿Para qué? Principalmente para compartir memoria entre agentes distintos: si tus preferencias viven en un sistema aparte, luego puedes conectar Claude Code, Codex o cualquier otro agente a ese mismo sistema y todos comparten el mismo conocimiento sobre ti. Estos proyectos se integran con Hermes instalando un comando adicional, y a partir de ahí todas tus conversaciones se van almacenando también en ese sistema externo, que inyecta contexto adicional cuando hace falta.
El ciclo de un mensaje: cómo se construye el contexto
Cuando escribes un mensaje en una sesión de Hermes, esto es lo que pasa por dentro:
- Se construye el contexto. El contexto puede estar conformado por muchas piezas: el system prompt interno de Hermes (que le explica al modelo qué es este programa, porque para un LLM Hermes es un software desconocido), los archivos de memoria (
soul.md,user.md,memory.md), los skills cargados, la información de las herramientas disponibles, los MCPs conectados, la memoria externa si la tienes, y por supuesto el historial de mensajes anteriores. - Todo eso baja al LLM. El modelo decide qué hacer: si le dijiste un simple "hola", responde directo. Pero si le pides "revisa mis correos", necesita ejecutar una acción: llama a un tool, el tool ejecuta el comando, lee el correo, y el resultado vuelve al LLM, que lo formatea y te devuelve la respuesta.
- Se actualiza la memoria. Al terminar el proceso, Hermes evalúa si en tu mensaje hay una preferencia nueva o un patrón que se repite, y actualiza sus archivos de memoria en consecuencia.
Este ciclo se repite con cada mensaje que envías.
Por qué el contexto se llena (y qué hacer al respecto)
Mucha gente piensa que la IA solo responde tu última pregunta, pero en realidad toda la conversación anterior se reenvía en cada turno. Ese acumulado es el contexto, y por eso se va llenando: llega un punto en que el modelo responde peor o directamente te pide compactar la conversación.
Como referencia, muchos modelos rondan los 200k tokens de contexto (un token equivale aproximadamente a 0.6–0.75 palabras, así que hablamos de unas 120,000 a 150,000 palabras en español), aunque modelos como Claude Opus ya ofrecen alrededor de 1 millón de tokens. Hermes te muestra una barra de uso por sesión, y cuando se llena puedes usar el comando compress para resumir la conversación y seguir chateando. Eso sí: comprimir también consume tokens de tu suscripción, así que no lo ejecutes por gusto.
Por cierto, nada de esto está oculto: Hermes está disponible en GitHub y cualquiera puede leer el código fuente. En la sección del core del agente (escrito en Python) puedes encontrar, por ejemplo, el context compressor que se ejecuta en cada mensaje. Ten en cuenta que es un proyecto muy activo y estos detalles pueden cambiar en cuestión de semanas.
Sesiones y la base de datos SQLite
Cada vez que usas el CLI, el dashboard, la app de escritorio o una aplicación de mensajería, estás creando sesiones. El componente encargado de esto es el session manager, que trabaja de la mano con el gateway.
Cada mensaje que envías se guarda como una copia con su message ID en una base de datos local SQLite (el archivo state.db dentro de tu instalación, que contiene bastantes tablas). Esta base de datos cumple doble función: guarda el historial de todos tus chats y sirve como una especie de memoria, porque cuando cargas una conversación anterior, Hermes consulta ese state.db y obtiene la transcripción de los mensajes previos.
Con el session manager puedes listar todas tus sesiones, exportarlas, eliminarlas, renombrarlas y reanudar conversaciones desde un mensaje específico.
ACP: Hermes como servidor y como cliente de otros agentes
Una característica poco mencionada pero muy útil para desarrolladores es el soporte del protocolo ACP (Agent Client Protocol). Funciona en dos direcciones:
- Hermes como servidor ACP: editores de código como VS Code, Zed o los de JetBrains (o cualquier editor compatible) pueden enviarle mensajes a Hermes directamente, y el agente ejecuta código o realiza tareas donde esté desplegado.
- Hermes como cliente ACP: la inversa. Hermes puede enviar instrucciones a otros agentes de código como Claude Code, Pi o Codex.
¿Por qué querrías lo segundo? Porque hay agentes mucho más especializados en escribir código, y porque las suscripciones no son intercambiables: no puedes usar tu suscripción de Claude Code dentro de Hermes, pero sí puedes hacer que Hermes delegue la tarea. Por ejemplo, dentro de Hermes escribes /claude y le pides "crea un landing básico de una veterinaria". Internamente, Hermes no escribe el código: usa el flag -p de Claude Code (que pasa el prompt directamente por consola, sin abrir el modo interactivo) en el servidor donde ambos están instalados y autenticados. Al rato obtienes la URL de un servidor local con el proyecto listo.
Esto convierte a Hermes en una especie de orquestador multiagente: una tarea la ejecuta Claude Code, otra Pi, otra Codex, y así con los agentes que tengas configurados. Eso sí, con límites: a los proveedores no les entusiasma que uses tu suscripción desde programas externos, así que úsalo con criterio.
Proveedores de IA y fallbacks
Nada de esto funciona sin un modelo detrás. Hermes soporta los proveedores más populares: la API de GPT, la API de Claude, proveedores open source y chinos, OpenRouter (que agrupa a casi todos) e incluso modelos locales: si tu servidor aguanta la ejecución de un modelo, Hermes puede consumirlo directamente.
¿Y qué pasa si se te acaba la suscripción a mitad de una tarea? Para eso existen los fallback providers, con tres modos:
- Credential pools: varias credenciales del mismo proveedor. Si se agota una cuenta de GPT, salta a otra cuenta de GPT.
- Primary model fallback: si se agota tu proveedor principal, salta a otro modelo distinto (por ejemplo, de GPT a un modelo chino) sin interrumpir la conversación.
- Auxiliary model fallback: el modelo principal delega tareas específicas a otros modelos. Por ejemplo, si usas Claude Opus (que no genera imágenes), Opus se encarga del planning y delega la generación de imágenes, video o audio a un modelo que sí pueda hacerlo.
Mixture of Agents (/moa)
Relacionado con esto, hace poco Hermes añadió el comando /moa (mixture of agents): dentro del loop del agente puedes definir un modelo principal de referencia, un fallback, y otros modelos para ir ejecutando las tareas delegadas una a una. Es orquestación, pero en lugar de subagentes, lo que cambia es el modelo en cada paso: puedes tener GPT como modelo principal y Claude Opus como agregador, combinando APIs de distintos proveedores (OpenRouter es ideal para esto). La técnica se popularizó cuando salió Fable 5 y muchos intentaron alcanzar su rendimiento combinando varios modelos; Hermes te permite hacer lo mismo con tus propias suscripciones.
Tareas programadas y cron jobs
Por último, Hermes también maneja tareas en el tiempo: puedes pedirle un recordatorio puntual (scheduled task) o una tarea recurrente (cron job). En la práctica, cuando le dices "recuérdame algo en tal fecha" o "todos los días a las 2", Hermes guarda la definición en archivos de configuración JSON: dentro de la carpeta cron encontrarás un jobs.json con las fechas de ejecución y los mensajes programados.
Conclusión
Como ves, Hermes no es simplemente un programa que instalas y se queda escuchando. Detrás de cada mensaje hay un ciclo completo: construcción de contexto, decisión del LLM, ejecución de herramientas y actualización de memoria, todo respaldado por una base SQLite, un gateway multicanal y un sistema de perfiles y proveedores bastante flexible. Y no importa dónde lo instales ni desde qué aplicación le hables: estos pasos se repiten una y otra vez.
Quedan temas fuera de este recorrido —el manejo de secrets, el aislamiento del agente, la administración profunda de sesiones o funciones recientes como el tablero de tareas con interfaz gráfica—, así que la documentación oficial sigue siendo el mejor punto de referencia, sobre todo porque el proyecto se actualiza constantemente.