Autoalojar el Agente Hermes con memoria persistente
+
Hermes Agent es el agente de IA de código abierto (MIT) de Nous Research — "el agente que crece contigo." Su característica destacada es memoria persistente: aprende sobre tus proyectos y no olvida entre reinicios. Esta guía lo despliega en la misma Instancia WEC que ya usas para OpenClaw, lo apunta a un modelo y prueba que la memoria sobrevive a un reinicio completo.
Funciona en la misma Instancia WEC de la serie OpenClaw — sin nueva VM. El instalador
descarga su propio Python (a través de uv), herramientas de navegador Node.js y un
Playwright Chromium automáticamente. El estado se guarda en ~/.hermes/. La puerta de enlace de mensajería se ejecuta como un servicio de usuario systemd, por lo que coexiste con la pila Docker de OpenClaw. Capturado en vivo en Ubuntu
22.04 con hermes v0.17.0.
Por qué la memoria persistente es importante
Un agente que olvida en cada reinicio es un juguete. Hermes mantiene un almacenamiento
duradero en disco bajo ~/.hermes/:
~/.hermes/memories/MEMORY.md— un archivo legible por humanos de hechos que el agente ha decidido recordar.~/.hermes/state.db— una base de datos SQLite que contiene cada sesión y mensaje, con índices de búsqueda de texto completo FTS5 superpuestos para que el agente pueda buscar su propia historia.
Un despliegue, un fallo o un reinicio no borran lo que aprendió. Esa es la diferencia entre una demostración de chat y un agente en el que puedes confiar día a día — y es exactamente lo que probamos al final.
Las piezas
Todo corre en una sola WEC Instance. Hermes habla con un modelo a través de la WEC Inference API, guarda su memoria en disco local y corre como servicio de usuario de systemd — así se reinicia solo tras un reinicio y su memoria sigue ahí:
Requisitos previos
- Una Instancia WEC existente con acceso a la terminal (la caja de OpenClaw funciona).
- Un modelo: ya sea un inicio de sesión en Nous Portal, o tu propia clave API de proveedor (usamos una
clave de OpenAI aquí; Modelos WEC con
glm-5.2también funcionan). - Nada que preinstalar — el instalador maneja Python, Node.js y el motor del navegador.
Paso 1 — Instalar Hermes
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

El instalador resuelve un entorno virtual de Python con uv, instala las herramientas de
navegador de Node.js, descarga un Playwright Chromium, sincroniza las habilidades empaquetadas y coloca un
lanzador hermes en ~/.local/bin:
✓ Paquete principal instalado (verificado por hash a través de uv.lock)
✓ Todas las dependencias instaladas
✓ Configuración del motor de navegador completa
✓ Lanzador hermes instalado → ~/.local/bin/hermes
✓ Directorio de configuración listo: ~/.hermes/
→ Iniciando el asistente de configuración...
Luego lanza automáticamente el asistente de configuración. Recarga tu terminal después para que el
comando hermes esté en tu PATH:
source ~/.bashrc
Paso 2 — Ejecutar el asistente de configuración
El asistente guía a través del tipo de configuración, backend de terminal y mensajería. En una caja que ya ejecutó OpenClaw, ofrece importar la configuración antigua primero — puedes previsualizar lo que se migraría antes de que cambie algo.
La primera elección es cómo configurar Hermes:
- Configuración rápida (Nous Portal) — un inicio de sesión OAuth, sin claves API. El Portal agrupa un modelo y una puerta de enlace de herramientas. Requiere una suscripción activa a Nous Portal.
- Configuración completa (trae tus propias claves) — configuras proveedores y pegas tus propias claves.

Elegimos Configuración rápida primero. El inicio de sesión en el Portal mostró un código de dispositivo y se quedó en "Esperando aprobación (sondeando)" — necesita una suscripción activa al Portal, que esta cuenta no tenía. Presionamos Ctrl+C para cancelar y en su lugar trajimos nuestro propio modelo en el Paso 3 (a continuación) con una clave de OpenAI. Si tienes un plan de Portal, completa el inicio de sesión aquí y puedes omitir el Paso 3.
Para el resto del asistente:
- Backend de terminal: Local — los comandos se ejecutan directamente en esta máquina.
- Mensajería: Omitir por ahora (puedes conectar Telegram/Discord más tarde con
hermes setup gateway).
El asistente aplica valores predeterminados sensatos para el agente (máximo de iteraciones, un umbral de compresión de contexto del 50%) y termina con un resumen de disponibilidad de herramientas.
Paso 3 — Conectar un modelo
Fuera de la caja, el modelo predeterminado se enruta a través del Nous Portal / OpenRouter y necesita una clave. Para usar tu propio proveedor en su lugar, ejecuta:
hermes setup model
Luego selecciona OpenAI ▸ OpenAI API, pega tu clave API cuando se te pida (se escribe en
~/.hermes/.env — nunca se muestra), acepta la URL base predeterminada
https://api.openai.com/v1, y elige un modelo — usamos gpt-5.5:
Clave API guardada.
URL base [https://api.openai.com/v1]:
Seleccionar modelo predeterminado:
→ (●) gpt-5.5

Para ejecutar inferencias en el propio endpoint de WiLine, elige Endpoint personalizado, establece la URL base
en https://inference.wiline.com/v1, pega tu clave API de WEC y usa un modelo como
glm-5.2. Mismo flujo compatible con OpenAI.
Confirma que el modelo y la clave están saludables:
hermes doctor
◆ Archivos de configuración
✓ El archivo ~/.hermes/.env existe
✓ Clave API o endpoint personalizado configurado
...
◆ Proveedor de memoria
✓ Memoria incorporada activa (no se configuró proveedor externo — esto está bien)
Las líneas restantes ⚠ en doctor son integraciones de herramientas opcionales (búsqueda web,
Discord, generación de imágenes) — no necesarias para esta guía.
Paso 4 — Chatear y guardar una memoria
Inicia una sesión interactiva:
hermes

Envíale un hecho y pídele que lo recuerde — observa cómo se activa la herramienta 🧠 memory:
● Por favor guarda en tu memoria a largo plazo: mi nombre en clave del proyecto WEC es
Bluefin-7, ejecutándose en la caja de OpenClaw.
┊ 🧠 memory ? 0.0s
╭─ ⚕ Hermes ─────────────────────────────────────────────────────────╮
Guardado en la memoria a largo plazo: tu nombre en clave del proyecto WEC es Bluefin-7,
ejecutándose en la caja de OpenClaw.
╰─────────────────────────────────────────────────────────────────────╯

Esa escritura crea ~/.hermes/memories/MEMORY.md. Sal con /exit o Ctrl+D.
El TUI envía al presionar enter, por lo que pegar texto de varias líneas puede enviar un mensaje medio escrito. Si un aviso solo captura un fragmento, escríbelo en una línea a mano.
Paso 5 — Probar que la memoria sobrevive a un reinicio
Este es el objetivo principal. La puerta de enlace de Hermes se instala como un servicio de usuario systemd con linger habilitado, por lo que vuelve automáticamente después de un reinicio — sin necesidad de iniciar sesión. Reinicia el servicio y luego reinicia toda la caja para hacer la prueba a prueba de fallos:
systemctl --user restart hermes-gateway # reinicia solo el servicio de puerta de enlace
sudo reboot # luego reinicia toda la caja

Reconéctate una vez que la caja esté activa y confirma que el servicio se reinició por sí mismo:
systemctl --user status hermes-gateway --no-pager
● hermes-gateway.service - Hermes Agent Gateway - Integración de Plataforma de Mensajería
Cargado: cargado (...; habilitado; ajuste de proveedor: habilitado)
Activo: activo (en ejecución) desde el jue 2026-06-25 21:21:54 UTC; hace 1min 36s

Ahora abre una sesión nueva y pregunta — sin contexto previo, ID de sesión completamente nuevo:
hermes
● ¿Cuál es mi nombre en clave del proyecto WEC, y en qué caja se ejecuta?
╭─ ⚕ Hermes ─────────────────────────────────────────────────────────╮
Tu nombre en clave del proyecto WEC es Bluefin-7, y se ejecuta en la
caja de OpenClaw.
╰─────────────────────────────────────────────────────────────────────╯

Recordó el hecho desde el disco después de un reinicio completo. Inspecciona dónde vive ese estado duradero:
cat ~/.hermes/memories/MEMORY.md
file ~/.hermes/state.db && du -h ~/.hermes/state.db
El nombre en clave del proyecto WEC del usuario es Bluefin-7, ejecutándose en la caja de OpenClaw.
/home/ubuntu/.hermes/state.db: base de datos SQLite 3.x, ...
176K /home/ubuntu/.hermes/state.db
Un MEMORY.md en texto plano que puedes leer y editar, respaldado por un state.db de SQLite para
sesiones. Esa es la memoria persistente — y acaba de sobrevivir a un reinicio.
Cuando le pides a Hermes que recuerde algo, escribe el hecho en
~/.hermes/memories/MEMORY.md — Markdown plano que puedes abrir, leer e incluso editar a
mano. Por separado, tu historial completo de conversación se mantiene en
~/.hermes/state.db, una base de datos SQLite. Ambos viven en disco, por lo que un
reinicio no los pierde.
La forma más sencilla de ver lo que sabe el agente es simplemente leer el Markdown:
cat ~/.hermes/memories/MEMORY.md
Para mirar dentro de la base de datos, ten en cuenta que el motor de SQLite está integrado en Python, por lo que Hermes
lo usa sin ninguna instalación adicional. La opcional herramienta de línea de comandos sqlite3 — para
navegar por la base de datos a mano — no está instalada por defecto. Si la quieres:
sudo apt install -y sqlite3
sqlite3 ~/.hermes/state.db '.tables'

Verás tablas sessions y messages que contienen la conversación, además de una familia de
tablas messages_fts*. Esos son índices de texto completo FTS5 de SQLite — incluyendo una
variante de trigramas para coincidencias difusas — que permiten a Hermes buscar sus propias conversaciones pasadas:
CREATE VIRTUAL TABLE messages_fts USING fts5(content);
CREATE VIRTUAL TABLE messages_fts_trigram USING fts5(content, tokenize='trigram');
Y cada sesión es una fila que puedes inspeccionar — aquí están las dos de esta guía, la segunda creada después del reinicio:
sqlite3 -header -column ~/.hermes/state.db \
"SELECT substr(id,1,15) AS id, model, message_count FROM sessions ORDER BY started_at;"
id model message_count
--------------- ------- -------------
20260625_211227 gpt-5.5 8
20260625_212333 gpt-5.5 2
Nunca necesitas la CLI para que Hermes funcione — es solo para inspeccionar la base de datos
tú mismo. Día a día, el MEMORY.md legible por humanos es todo lo que tienes que mirar.
Bonificación — leer la conversación que el agente almacenó
La tabla messages contiene el texto real de cada turno. Cada fila tiene un role —
user (lo que escribiste), assistant (la respuesta de Hermes), o tool (el resultado de una herramienta) — así que
puedes reproducir todo el intercambio:
sqlite3 -header -column ~/.hermes/state.db \
"SELECT substr(session_id,10,6) AS sess, role, substr(content,1,55) AS content
FROM messages ORDER BY timestamp;"
sess role content
------ --------- -------------------------------------------------------
211227 user hello, can you hear me?
211227 assistant Yes — I can hear you. How can I help?
211227 user Please save to your long-term memory: my WEC project...
211227 tool {"success": true, "done": true, "target": "memory", ...
211227 assistant Saved to long-term memory: your WEC project codename...
212333 user What's my WEC project codename, and which box does...
212333 assistant Your WEC project codename is Bluefin-7, and it runs...

La parte interesante es cómo se escribió la memoria. El asistente no editó un archivo
directamente — emitió una llamada a la herramienta memory, y esa herramienta es la que escribió
MEMORY.md. Puedes ver la llamada exacta registrada en el historial:
sqlite3 ~/.hermes/state.db \
"SELECT tool_calls FROM messages WHERE tool_calls LIKE '%memory%' LIMIT 1;"
{"function": {"name": "memory", "arguments":
"{\"target\":\"memory\",\"operations\":[
{\"action\":\"add\",
\"content\":\"El nombre en clave del proyecto WEC del usuario es Bluefin-7, ejecutándose en la caja de OpenClaw.\"}]}"}}

Así que la cadena completa es: tú escribes → el agente decide que vale la pena conservar → llama a la
herramienta memory con action: add → eso escribe el hecho en MEMORY.md, mientras que
toda la conversación permanece en state.db, completamente buscable a través de FTS5. Dos almacenes, una
memoria duradera.
¿Qué puedes hacer con ello?
Una memoria que sobrevive a los reinicios solo importa por lo que el agente hace con ella.
Con Hermes en funcionamiento, la misma instalación ofrece estas capacidades (las viste en la
lista de herramientas de hermes doctor) — aquí está lo que desbloquean día a día:
- Realiza trabajo real en la caja. Las herramientas
terminalycode_executionle permiten actuar, no solo chatear — por ejemplo, "clona este repositorio, instala dependencias y ejecuta las pruebas," o "verifica por qué se está llenando el disco." Lo hace en la Instancia WEC y reporta de vuelta. - Controla desde tu teléfono. Una puerta de enlace de mensajería (Telegram, Discord, Slack, y más) significa que puedes darle una tarea desde cualquier lugar — sin SSH. (Configuración en la Parte 2.)
- Ponlo en un horario. La herramienta
cronjobejecuta trabajos recurrentes: un informe matutino, un informe semanal de uso del disco, o vigila un servicio y avísame cuando falle — entregado a tu canal de mensajería. (Parte 3.) - Navega y busca en la web. Con las herramientas de navegador y búsqueda web puede obtener información en vivo y actuar en páginas reales. (Estas necesitan claves API de proveedor — consulta
hermes setup tools.) - Desarrolla habilidades reutilizables y delega. Puede construir habilidades a partir de lo que aprende y delegar subtareas a subagentes — la parte "agente que crece contigo".
- Recuerda a través de todo ello. Todo lo anterior está respaldado por la memoria persistente que acabas de configurar, por lo que el contexto se lleva de una tarea — y un día — al siguiente.
El resto de esta serie convierte cada una de estas en una guía práctica (consulta Qué sigue).
Solución de problemas (real)
-
La Configuración rápida (Nous Portal) se queda atascada en "Esperando aprobación (sondeando)". El inicio de sesión en el Portal necesita una suscripción/crédito activo. Si no tienes uno, presiona
Ctrl+Cy usa Configuración completa con tu propia clave en su lugar (Paso 3). -
doctormuestra "No se encontró clave API en ~/.hermes/.env". El modelo predeterminado apunta a Portal/OpenRouter. Ejecutahermes setup model, elige tu proveedor y pega la clave —doctorluego informa "Clave API o endpoint personalizado configurado." -
Advertencia de
.envobsoleta al iniciar la puerta de enlace (por ejemplo,MESSAGING_CWD). Inofensiva; sigue la sugerencia para mover la configuración aconfig.yamlcuando sea conveniente. -
Repetidos
WARNING [Telegram] …en los registros de la puerta de enlace. Si seguiste las partes anteriores de OpenClaw y agregaste un canal de Telegram, la configuración de Hermes detectó OpenClaw y importó esas configuraciones de mensajería en~/.hermes/.env. Como omitimos terminar la mensajería aquí, la puerta de enlace tiene un token pero no una configuración completa, por lo que sigue reintentando y registrando esta advertencia. (Una caja nueva sin configuración de Telegram de OpenClaw no lo verá.) Elimina las entradas sobrantes y reinicia:sed -i '/^TELEGRAM_ALLOWED_USERS=/d; /^TELEGRAM_BOT_TOKEN=/d' ~/.hermes/.envsystemctl --user restart hermes-gatewaySi ese token alguna vez fue expuesto, revócalo en @BotFather de Telegram y emite uno nuevo.
Qué sigue
Ahora que Hermes está funcionando con memoria duradera, el resto de la serie convierte cada capacidad anterior en una guía práctica:
- Parte 2 — Controla a Hermes desde Telegram. Termina de migrar el canal de Telegram que Hermes
ya importó de OpenClaw (
hermes setup gateway, listas de permitidos, verifica que el bot responda), para que puedas darle tareas desde tu teléfono. - Parte 3 — Ponlo en un horario. Usa la herramienta cron para un informe matutino, un informe semanal, y una alerta de salud del servicio entregada a tu canal.
- Parte 4 — Habilidades personalizadas y subagentes. Enséñale habilidades reutilizables y delega trabajo.
Los enlaces aparecerán aquí a medida que cada parte se publique.
