Perfiles de Agente en Hermes: Aislamiento en la Práctica
El otro día estaba configurando un par de agentes Hermes y algo obvio terminó de encajar. No estaba creando dos copias del mismo asistente. Estaba creando dos trabajadores con trabajos muy distintos.
Uno de los agentes estaba centrado en AnkiVocab, mi plataforma para generar flashcards de Anki con IA. Necesita contexto de producto, issues de GitHub, detalles de la extensión de navegador, notas de despliegue en Lambda y el tipo de memoria que ayuda a avanzar un SaaS. El otro agente era para mis módulos de Terraform. Ese necesita documentación de providers, convenciones de infraestructura, contexto de AWS y mucha menos tolerancia a la improvisación creativa.
Esos agentes no deberían compartir el mismo cerebro.
Si ambos agentes corren contra el mismo directorio ~/.hermes, leen el mismo config.yaml, el mismo .env, y acumulan memorias y sesiones en las mismas carpetas. El agente de AnkiVocab empieza a cargar supuestos de infraestructura que no necesita. El agente de Terraform puede ver memorias de producto, credenciales de producto o estado de gateway que nunca debería afectar el trabajo de infraestructura. Si ambos procesos de gateway apuntan al mismo token de bot, uno de ellos falla de una forma que toma tiempo diagnosticar.
Los perfiles de Hermes resuelven esto con un modelo simple: un directorio por agente, una variable de entorno para cambiar entre ellos.
Por qué el Aislamiento Mejora los Agentes
Ejecutar agentes en aislamiento no es simplemente una cuestión de orden. Tiene efectos directos en el foco, la seguridad y la fiabilidad operativa.
Contaminación de contexto. Sin perfiles, cada línea de trabajo escribe en el mismo estado persistente del agente: las mismas memorias, la misma base de sesiones, las mismas habilidades y el mismo archivo de identidad. Un agente encargado de revisar un pull request puede verse influido por memorias de un agente anterior que resumía mensajes personales. Ese contexto irrelevante consume tokens y empuja al modelo hacia asociaciones incorrectas. Un perfil separado mantiene el contexto duradero alineado con el trabajo.
Alcance de credenciales. Un archivo .env compartido es un almacén de secretos de todo o nada. Cada agente en la máquina puede leer cada clave de API y token de bot que contiene. Con perfiles, el .env de cada agente contiene únicamente las credenciales que realmente necesita. Si un agente se ve comprometido o se comporta mal, el radio de daño se limita a los secretos de su propio directorio de perfil, no a todas las claves de la máquina.
Reproducibilidad. Cuando un agente produce un resultado inesperado, necesitas poder reproducir la ejecución. Un perfil que parte de una línea base conocida – config.yaml específico, SOUL.md específico, sin memorias previas a menos que las clones explícitamente – ofrece un estado de inicio determinista. Depurar se convierte en reproducir una ejecución contra un perfil conocido, en lugar de desenredar estado mutable compartido.
Paralelismo. Los perfiles independientes permiten ejecutar múltiples agentes de forma concurrente sin convertir el perfil en un punto de coordinación. Dos agentes usando el mismo perfil pueden interferirse a través de memoria, estado de cron, estado de gateway y logs compartidos. Dos agentes corriendo en perfiles separados escriben en directorios distintos, así que puedes ejecutarlos en paralelo sin bloqueos ni secuenciación.
Dos Perfiles en la Práctica
A continuación un ejemplo mínimo que contrasta un agente ankivocab (producto, GitHub, contexto de extensión, operación SaaS) y un agente terraform (AWS, providers de Terraform, módulos, monitoreo). La separación reside en el .env, el config.yaml, el SOUL.md y el directorio skills/ de cada perfil.
# ~/.hermes/profiles/ankivocab/.env
GITHUB_TOKEN=<token_repo_ankivocab>
STRIPE_API_KEY=<token_billing_ankivocab>
ANTHROPIC_API_KEY=<token_llm_ankivocab>
CLOUDFLARE_API_TOKEN=<token_dns_ankivocab>
# Sin credenciales amplias de Terraform -- este agente debe mantenerse centrado en el producto
# ~/.hermes/profiles/terraform/.env
AWS_ACCESS_KEY_ID=<id_clave_infra>
AWS_SECRET_ACCESS_KEY=<clave_secreta_infra>
AWS_DEFAULT_REGION=us-east-1
TF_VAR_environment=production
GRAFANA_API_KEY=<token_grafana_readonly>
# Sin tokens de producto de AnkiVocab -- este agente está para trabajar en módulos de infraestructura
El agente ankivocab se ejecuta con hermes -p ankivocab chat (o simplemente ankivocab chat mediante el alias) y carga las credenciales, memoria, habilidades e identidad de la línea de producto. El agente terraform corre de forma independiente con su propio proceso de gateway y sus propias reglas operativas. Ninguno usa accidentalmente el estado duradero del otro, y ambos pueden ejecutarse al mismo tiempo sin compartir un perfil.
Qué es un Perfil
Un perfil es un directorio home separado de Hermes en ~/.hermes/profiles/<nombre>/. Cada perfil es un entorno completo y autocontenido con su propia configuración, estado y tiempo de ejecución.
El mecanismo detrás de esto es la variable de entorno HERMES_HOME. Más de 119 archivos en el código de Hermes resuelven sus rutas a través de get_hermes_home(). Cuando ejecutas un agente bajo un perfil específico, cada lectura y escritura de archivos ocurre dentro del directorio de ese perfil – configuración, memorias, sesiones, habilidades, tareas cron y estado del gateway.
El perfil por defecto es ~/.hermes en sí mismo. No necesitas migrar nada para empezar a usar perfiles; el perfil por defecto sigue funcionando como antes.
Cuando creas un perfil llamado coder, Hermes también crea un alias de shell en ~/.local/bin/coder. Ese alias es hermes -p coder por debajo, por lo que escribir coder chat es equivalente a hermes -p coder chat.
Crear un Perfil
Hay cuatro modos de creación:
hermes profile create coder # perfil en blanco, crea el alias "coder"
hermes profile create work --clone # copia config.yaml, .env y SOUL.md solamente
hermes profile create backup --clone-all # copia todo, incluyendo memorias y sesiones
hermes profile create work --clone --clone-from coder # clonar desde un perfil específico
La creación en blanco da un punto de partida limpio. El flag --clone es útil cuando quieres que un nuevo agente empiece con las mismas claves y modelo pero sin contexto previo. El flag --clone-all es útil para respaldos o para crear una variante de un agente que ya tiene memorias útiles.
Estado Aislado vs. Compartido
Sin perfiles, todos los agentes convergen en el mismo estado. Con perfiles, cada agente opera en su propio carril.
Qué Contiene Cada Perfil
Cada directorio de perfil contiene:
config.yaml– modelo, proveedor y toda la configuración de Hermes.env– claves de API, tokens de bot y secretos específicos del entornoSOUL.md– el prompt de sistema que define la personalidad del agentememories/– hechos persistentes que el agente ha almacenadosessions/– historial de conversacionesskills/– procedimientos y capacidades específicos del perfilcron/– tareas programadas- estado del gateway – archivo PID y base de datos SQLite del proceso gateway en ejecución
Los Perfiles No Son Sandboxes
Vale la pena decirlo claramente: los perfiles aislan el estado de Hermes, no el acceso al sistema de archivos.
En el backend de terminal local, el agente sigue corriendo como tu usuario y tiene acceso completo a tu directorio home y a todos los archivos que tu usuario puede leer o escribir. Crear un perfil coder no impide que ese agente toque archivos fuera de ~/.hermes/profiles/coder/.
El SOUL.md de un perfil orienta al modelo hacia un comportamiento determinado, pero no aplica ningún límite a nivel del sistema operativo.
Si quieres un directorio de trabajo predecible por agente – para que los comandos de terminal empiecen en la carpeta de proyecto correcta – configura terminal.cwd explícitamente en el config.yaml de ese perfil. Eso controla dónde empieza la shell del agente, lo cual es una preocupación separada de HERMES_HOME.
Aislamiento del Gateway
Cada perfil corre su propio proceso de gateway con su propio token de bot definido en su archivo .env. Telegram, Discord, Slack, WhatsApp y Signal están todos soportados.
Cuando inicias un gateway para un perfil, lee su token del .env de ese perfil. Si dos perfiles comparten accidentalmente el mismo token de bot, Hermes detecta el conflicto a través de un mecanismo de bloqueo de token. El segundo gateway se bloquea inmediatamente con un mensaje de error claro que nombra el perfil en conflicto, para que puedas corregir el .env antes de que ocurra algo inesperado.
Puedes instalar cada gateway como un servicio del sistema separado:
coder gateway install # instala el gateway del perfil coder como servicio systemd/launchd
assistant gateway install # instala el gateway del perfil assistant como servicio systemd/launchd
Dentro de Docker, s6-overlay supervisa los gateways por perfil y los reinicia automáticamente ante una caída.
Uso Diario
Una vez que tienes los perfiles configurados, interactúas con ellos mediante el alias, el flag -p o el perfil predeterminado fijo:
coder chat # el alias apunta directamente al perfil coder
coder gateway start # iniciar el gateway del perfil coder
hermes -p coder chat # flag explícito, mismo resultado
hermes profile use coder # establece coder como predeterminado fijo (como kubectl use-context)
hermes profile use default # volver al perfil por defecto
Para inspeccionar el estado de un perfil en cualquier momento:
hermes profile show coder
Eso produce una salida como esta:
Profile: coder
Path: ~/.hermes/profiles/coder
Model: anthropic/claude-sonnet-4 (anthropic)
Gateway: stopped
Skills: 12
.env: exists
SOUL.md: exists
Alias: ~/.local/bin/coder
Los demás comandos de gestión son directos:
hermes profile list
hermes profile rename coder dev-bot
hermes profile export coder # produce coder.tar.gz
hermes profile import coder.tar.gz
hermes profile delete coder # detiene el gateway, elimina el alias y borra todos los datos
El comando delete maneja la limpieza de forma atómica – detiene el gateway, elimina el alias de shell de ~/.local/bin/ y elimina el directorio del perfil.
Conclusiones
Los perfiles ofrecen una separación limpia del estado de cada agente sin requerir cambios en la infraestructura. El mecanismo es lo suficientemente simple como para entender qué posee cada agente con solo mirar su directorio. Si estás corriendo más de un agente Hermes en la misma máquina, el momento de crear los perfiles es antes de que las memorias empiecen a acumularse en el lugar equivocado.
