¿Hermes Agent para programar? Hasta Hermes le pasa el repo a Claude Code
Un equipo con el que trabajo programa a través de un Hermes compartido en Slack. El propio código de Hermes explica por qué eso duele: el modo de coding y el gate de verificación quedan apagados en el chat, y trae skills que le pasan el código a Claude Code, Codex y OpenCode.
¿Hermes Agent escribe código? Sí. ¿Tu equipo debería programar a través de él? No. Y el argumento más fuerte en contra ni siquiera es mío. Está en el código fuente del propio Hermes.
Hermes trae un modo de coding con instrucciones de ingeniero senior, y sus autores lo dejan apagado a propósito cuando el agente te habla por Slack, Telegram o WhatsApp. También trae skills, instaladas por defecto, cuya descripción de una línea dice “Delegate coding to Claude Code CLI”. Quienes construyeron el harness trazaron la línea. Un equipo con el que trabajo la cruzó igual, y lo que pasó después es una lección de harness que vale la pena dejar por escrito.
Un equipo que programa a través de un Hermes compartido
Un equipo con el que trabajo corría todo su flujo agéntico a través de Hermes. Una sola instancia, en la laptop de una persona, con la API key de esa persona, prendida las 24 horas. El squad le mandaba prompts en un canal compartido de Slack, y del otro lado salían borradores y diffs. Al poco tiempo nadie podía leer el hilo.
La culpa no es del equipo. Llegaron más lejos que la mayoría de los equipos con los que hablo: skills en el repositorio, un solo AGENTS.md, un juez que califica cada PRD con una rúbrica antes de que lo lea un humano, un tablero que los propios agentes van moviendo. Esa parte es buena ingeniería, y se va contigo a cualquier harness. El harness es la parte que les va a doler.
Ya están sacando la instancia de la laptop y llevándola a un pod en el cluster de Kubernetes de la empresa. Eso arregla la key y la laptop. No arregla la superficie.
¿Hermes Agent sabe programar? Su propio código dice dónde
Tres cosas en el código zanjan la discusión.
El modo de coding. En agent/coding_context.py, Hermes decide una vez por sesión si está programando. Cuando lo está, carga un brief que arranca con “You are a coding agent pairing with the user inside their codebase. Operate like a careful senior engineer.” El brief le pide al modelo leer antes de editar, cambiar archivos con las tools en lugar de pegar código en el chat, y correr los tests, el linter y el build y confirmar que pasan antes de decir que terminó. Es un buen brief. Se carga en el CLI, la TUI, la app de escritorio y los editores vía ACP, y solo cuando el directorio de trabajo parece un proyecto de código. El comentario arriba de esa lista de superficies lo dice sin rodeos: “messaging platforms are deliberately absent” (las plataformas de mensajería quedaron fuera a propósito). El valor por defecto, agent.coding_context: auto, sigue esa regla. Puedes forzarlo con on. Los autores eligieron no dejarlo así por defecto.
El gate de verificación. Hermes también puede obligar al agente a verificar después de editar código sin prueba reciente de que los tests pasan. La opción es agent.verify_on_stop, y viene apagada. Si la prendes, eliges entre true, que corre en todos lados, y auto, el modo que mira la superficie: prendido en el CLI, la TUI y el escritorio, apagado en Slack, Telegram, WhatsApp y cualquier otra plataforma de chat, “where the verification summary would reach a human as chat noise” (donde el resumen de la verificación le llegaría a un humano como ruido de chat). Lee esa frase pensando en el canal de tu equipo. En el chat, correr los tests es ruido. En una sesión de código, es justo lo que importa.
El traspaso. En skills/autonomous-ai-agents/, instaladas por defecto, Hermes trae skills para tres harnesses de código. Sus descripciones: “Delegate coding to Claude Code CLI (features, PRs).” “Delegate coding to OpenAI Codex CLI (features, PRs).” “Delegate coding to OpenCode CLI (features, PR review).” La skill de Claude Code prefiere el print mode, una sola ejecución de claude -p en el directorio del proyecto, con una lista de tools permitidas y un tope de turnos. Y dice que el modo sin confirmaciones solo es aceptable “only in a throwaway worktree or isolated container” (en un worktree desechable o un container aislado). Para modelos de OpenAI hay un runtime opcional que va más allá: Codex corre el loop de tools y la sandbox, y Hermes “becomes the shell around it”, queda como la cáscara alrededor.
El mismo Hermes, dos superficies
| En v0.21.5 | CLI, TUI, escritorio, editor vía ACP | Slack, Telegram, WhatsApp |
|---|---|---|
| Modo de coding (auto) | Prendido en un workspace de código | Apagado a propósito |
| Gate de verificación (opcional, modo auto) | Prendido | Apagado: el resumen sería ruido de chat |
| Directorio de trabajo | hermes -w le da a cada sesión su propio git worktree | Un solo directorio, el terminal.cwd del config |
| Quién lee la salida | La persona en el teclado | Un canal |
El harness es la descripción del puesto
Un harness es todo el código alrededor del modelo que lo convierte en agente, y todo harness tiene cuatro partes: el loop, las tools, el contexto y los controles. Un harness de código afina las cuatro para un trabajo: un repositorio, un diff, una corrida de tests, una persona aprobando el merge. Un harness de asistente las afina para otro trabajo: una agenda, un canal, una memoria que dura semanas. Hermes es sobre todo del segundo tipo. El modo de coding es a sus autores recortando un pedazo del primer tipo dentro de él y cercándolo para que no llegue al chat.
Entonces, cuando un squad programa por Slack, recibe el contexto y los controles del asistente aplicados a un trabajo de código. Sin brief de ingeniero senior. Sin gate de verificación. Un solo directorio de trabajo. La key de una persona. Nada de esa lista es un problema del modelo. Pon un modelo mejor y hereda cada punto. Ese es todo el argumento del harness engineering: el modelo es un commodity, y el harness decide qué trabajo puede hacer el agente de verdad.
El hilo ilegible era la spec
Cuando el hilo se volvió demasiado largo para leerlo, alguien del equipo propuso la solución obvia: hacer al agente menos verboso. Yo defendí lo contrario. El hilo era largo porque estaba guardando el contexto. Cada corrección, cada “no, el otro endpoint”, cada decisión sobre el PRD estaba ahí. Eso es spec, viviendo en el único lugar que nadie lee dos veces.
Ajustar al agente para que hable menos lo habría dejado más callado y más equivocado. El arreglo va antes. El contexto entra al PRD, al ticket y al repositorio antes de que arranque el agente. Cuando el agente se equivoca, la corrección va en el ticket, donde puede convertirse en aprendizaje dentro del repositorio, no en otra respuesta perdida en el canal. Ese es el trabajo que hace una spec, y el chat se lo quita sin que nadie lo note.
Lo dije en una revisión con el equipo: chatear con Hermes todo el día, por sí solo, no hace que nadie entregue más rápido ni mejor. Depende de qué está reemplazando esa conversación.
Kubernetes arregla la key, no la superficie
El setup en la laptop tiene los problemas de gobernanza que te imaginas, y los señalé uno por uno. La cuenta de tokens cae en una sola persona. El agente corre fuera del perímetro de la empresa, sin sandbox y sin aislamiento de red. Y cuando esa persona se va de vacaciones, el agente del squad se va con ella.
Llevar Hermes a un pod arregla las tres cosas. La empresa paga, el pod está aislado, el agente sobrevive a las vacaciones. Es el movimiento correcto, y no cambia nada en la tabla de arriba. Entra Slack, sale código, modo de coding apagado. El arreglo de gobernanza y el arreglo de harness son dos arreglos distintos, y solo uno está en marcha.
Hermes despacha, un harness de código construye
Quédate con Hermes. Dale el trabajo para el que fue hecho, el loop de afuera, y deja que un harness de código corra el loop de adentro.
Loop de afuera, loop de adentro
Entrada
Un mensaje en Slack, un audio en Telegram, un cron
- loop de afueraHermes
Lee el pedido, trae contexto vía MCP y deja la tarea escrita donde el equipo la ve: un ticket, un archivo de spec, un issue.
- loop de adentroHarness de código
Claude Code, Codex, OpenCode o pi, en un worktree nuevo o un container, leyendo el AGENTS.md del repositorio. Las skills que trae Hermes ya hacen este traspaso.
- gateChecks
Tests, lint y build corren en el CI, no como un resumen pegado en el chat.
- humanoReview
Una persona lee el diff en el merge request y decide.
Salida
El canal recibe el link del merge request, no el diff.
Mi propio esquema funciona así. Hermes corre en mi VPS. Le mando un audio por Telegram y abre un issue en mi tablero de agentes vía MCP. El código se escribe en Claude Code, OpenCode o pi, en un repositorio, conmigo leyendo el diff. No le entrego una feature branch a Hermes.
Haz que Hermes delegue en vez de editar
- 01
Pide una ejecución delegada en su propio worktree, y un link de vuelta.
Hermes se queda con la conversación y la memoria. El harness de código se queda con el repositorio, los tests y sus propios permisos. El canal recibe una línea en vez de un diff.
Escribe esto
Usa la skill claude-code: en un git worktree nuevo del repositorio de billing, córrela en print mode sobre el ticket BILL-142, corre los tests, abre un merge request y respóndeme aquí con el link.
Si tu equipo ya programa a través de Hermes
- Obligatorio:Conserva lo que es portátilSkills en el repositorio, un AGENTS.md, el repositorio como fuente de verdad, el juez sobre el PRD. Hermes, Claude Code, Codex y OpenCode leen AGENTS.md, así que nada de eso se pierde.
- Obligatorio:Saca la spec del hiloEl contexto va al PRD y al ticket antes de la ejecución. Las correcciones van en el ticket, no en el canal.
- Obligatorio:Pon el código en una superficie de códigoUn harness de código en un worktree o un container. No el gateway de mensajería.
- Obligatorio:Convierte a Hermes en el despachadorLas skills claude-code, codex y opencode que trae son el traspaso. Hermes vuelve con un link.
- Obligatorio:Key de la empresa, máquina aisladaEl pod arregla la cuenta, el perímetro y el problema de las vacaciones. Hazlo, y no lo confundas con el arreglo de harness.
- Obligatorio:Pon el gate en el merge, no en el chatTests en el CI y una persona en el merge request. El chat solo se entera del resultado.
Hermes Agent para programar, respuestas rápidas
¿Hermes Agent sabe programar?
Sí. Edita archivos, corre comandos de shell y carga un modo de coding con instrucciones de ingeniero senior en el CLI, la TUI, la app de escritorio y los editores vía ACP, además de un gate opcional que obliga al agente a verificar lo que editó. A propósito, ese modo queda apagado en superficies de mensajería como Slack, Telegram y WhatsApp.
¿Hermes Agent es un agente de código?
No principalmente. Hermes es un agente self-hosted que dejas corriendo, con cron, gateways de mensajería y memoria entre sesiones. Tiene un modo de coding para las superficies interactivas y trae skills que delegan el código en Claude Code, Codex y OpenCode.
¿Hermes Agent o Claude Code para programar?
Claude Code, u otro harness de código como Codex, OpenCode o pi. Usa Hermes para el trabajo alrededor del código: leer canales, dejar la tarea escrita, despachar la ejecución y avisar el resultado.
¿Qué es un harness en IA?
Es todo el código alrededor del modelo que lo convierte en agente: el loop que llama al modelo, las tools que usa, el contexto que ve en cada turno y los controles de lo que puede hacer sin pedir permiso. Claude Code, Codex, OpenCode, pi y Hermes son harnesses distintos para el mismo tipo de modelo.
¿Hermes Agent puede correr Claude Code?
Sí. La skill claude-code que trae controla el CLI de Claude Code y prefiere una sola ejecución en print mode (claude -p) en el directorio del proyecto. Hay skills equivalentes para Codex y OpenCode, además de un runtime opcional del Codex app-server para modelos de OpenAI.
¿Cómo hago a Hermes más seguro si toca código?
Córrelo en el CLI con hermes -w para que cada sesión tenga su propio git worktree, prende los checkpoints con --checkpoints, apunta la terminal a un backend de container en vez del local por defecto y agrega un shell hook pre_tool_call: el exit code 2 bloquea la llamada.
La newsletter
Don’t Code, Specify. Cada semana, agentes de IA en producción de verdad. Sin hype: lo que funcionó y lo que se rompió.
Suscríbete en Substack (se abre en una pestaña nueva)