Ejecutar Hermes dentro de Codex: una extensión MCP de la comunidad

Tu día probablemente se parezca a esto: estás editando un módulo en Codex, a mitad de un razonamiento te preguntas si el cron job de Hermes se ejecutó hoy y qué leyó realmente esa sesión anoche, así que cambias a una terminal y ejecutas hermes --continue, o simplemente abres una segunda ventana. Dos agentes, dos interfaces, dos contextos, y lo que se pierde en ese cambio suele ser justo la frase que estabas a punto de preguntar.
Un proyecto de la comunidad, hermes-chatgpt-extension, ataca precisamente ese coste de cambio: incrusta Hermes como un panel dentro de Codex (y de la app de escritorio de Codex para ChatGPT), de modo que los chats, los profiles, la selección de modelo y los trabajos programados se ven desde la barra lateral de Codex.
Qué es y qué no es
Es un plugin MCP: un servidor MCP stdio local (el bridge) envuelve la API JSON-RPC/WebSocket de escritorio de Hermes y sus rutas REST de gestión en una superficie de plugin para Codex. Está escrito en TypeScript, tiene licencia MIT, se creó el 30 de septiembre y el 1 de octubre seguía recibiendo actualizaciones.
Conviene aclarar de entrada tres límites, para que no esperes algo que no es:
- No convierte a Hermes en una herramienta de Codex. La interfaz sigue las convenciones de chat y barra lateral de Codex, pero Hermes sigue ejecutando su propio agente, sus herramientas, su memoria y su planificador; la conversación de Codex que la rodea permanece aparte.
- No ofrece un endpoint MCP alojado. El servidor es stdio local, así que esto es «usar Hermes dentro de la app de escritorio de Codex», no «llegar a tu Hermes desde ChatGPT en la nube».
- No se hace cargo de tus credenciales. Las credenciales del proveedor upstream se quedan en el proceso bridge local; la interfaz integrada recibe etiquetas de conexión y datos de chat, no tokens ni claves de API.
Instalación: dos caminos, Node 22+ en ambos casos
Tres requisitos previos: Node.js 22 o superior (disponible para Codex como node), una versión de escritorio de Codex que admita plugins locales y MCP Apps, y un backend de Hermes instalado y configurado que exponga la API JSON-RPC/WebSocket de escritorio además de las rutas REST de gestión.
Desde el ZIP precompilado (sin npm install, sin build):
# descarga hermes-chatgpt-extension-VERSION.zip desde la página de releases y descomprímelo
cd <extracted-directory>
node scripts/verify-plugin.mjs
El ZIP incluye el servidor ya compilado y una interfaz autocontenida, y cada release también ofrece un -source.zip y un SHA256SUMS para que puedas verificar ambos. Ten en cuenta que la descarga de Source code que genera GitHub automáticamente es la compilación desde el código fuente, no este paquete.
Desde el código fuente:
git clone https://github.com/intellectronica/hermes-chatgpt-extension.git
cd hermes-chatgpt-extension
npm ci
npm run build
node scripts/verify-plugin.mjs
Luego regístralo en el marketplace local de Codex:
node scripts/install-plugin.mjs
El instalador copia el plugin en ~/.codex/plugins/hermes-chatgpt-extension y añade una entrada a ~/.agents/plugins/marketplace.json, conservando el nombre de marketplace existente y las entradas que no guardan relación. Abre el enlace de detalle del plugin que imprime y elige Enable en Codex: el script no activa el plugin ni reinicia la app por ti. Para actualizar, ejecuta primero --replace --dry-run y después --replace --apply.
Configuración: un único array connections, cuatro formas de conectar
Mantén la configuración fuera del directorio del plugin para que las actualizaciones no te la sobrescriban; la ruta por defecto es ~/.config/hermes-chatgpt-extension/hermes.config.json:
mkdir -p "$HOME/.config/hermes-chatgpt-extension"
cp examples/config.ssh.json "$HOME/.config/hermes-chatgpt-extension/hermes.config.json"
La configuración se carga en un orden fijo: el argumento --config, luego HERMES_EXTENSION_CONFIG, después hermes.config.json en el directorio de trabajo del bridge y, por último, $XDG_CONFIG_HOME/hermes-chatgpt-extension/hermes.config.json (o ~/.config/...). Una decisión de diseño merece reconocimiento: un archivo seleccionado explícitamente que falta o no es válido es un error, no algo que se ignora, así que nunca acabas creyendo que estás en un profile cuando en realidad estás en otro.
Un único array connections puede contener varias instancias de Hermes, conmutables desde un selector en el pie de página. Se admiten cuatro modos de conexión:
| Modo | Cuándo usarlo | Campos clave |
|---|---|---|
| SSH gestionado | Hermes vive en un host remoto; deja que la extensión arranque su propio backend temporal | ssh.mode: "managed", ssh.host |
| Attach sobre SSH | Ya hay un backend compatible en ejecución remota; conéctate sin más | ssh.mode: "attach", remotePort, tokenFile |
| HTTP | Un backend de escritorio hermes serve compatible |
baseUrl, tokenEnv |
| HTTPS | Un gateway detrás de un proxy inverso | Lo mismo, y las URL remotas deben ser HTTPS |
El SSH gestionado arranca un backend loopback protegido por token en un puerto asignado dinámicamente y se apropia de ese proceso y de su túnel, deteniendo el backend cuando el bridge se cierra. Usa tu instalación de Hermes existente: no instala software, no edita profiles, no reinicia servicios. Como genera su propia credencial, este modo prohíbe tokenEnv, tokenFile, remoteHost y remotePort.
Attach y HTTP/HTTPS exigen cada uno exactamente una fuente de credencial: tokenEnv (el nombre de una variable de entorno) o tokenFile (un pequeño archivo local). En POSIX ese archivo debe pertenecer al usuario actual y ser solo para el propietario:
chmod 600 /path/to/hermes.token
Aquí va un escollo que merece su propio párrafo: una app de escritorio puede no heredar las variables que exportaste en una shell interactiva. Cuando Codex lanza el plugin, puede que tokenEnv simplemente no tenga valor; un tokenFile con permisos estrictos es la opción más fiable. Las URL remotas deben usar HTTPS; el HTTP sin cifrar solo se acepta para hosts loopback como http://127.0.0.1:9119.
Qué puedes hacer una vez activada
Después de activarla, abre Explore → Hermes en Codex:
- Chat: respuestas en streaming, renderizado de Markdown y de código, actividad de las herramientas visible, además de Stop, aprobaciones y preguntas de aclaración;
- Agrupación por profile: conversaciones agrupadas bajo secciones de profile desplegables, y los borradores se quedan con la instancia y el profile a los que pertenecen;
- Modelos y esfuerzo: el catálogo real de modelos y los valores por defecto de cada profile, con un selector de modelo y un control Power para el esfuerzo de razonamiento;
- Trabajos programados: consulta los trabajos y las ejecuciones registradas de un profile o de todos, con el estado de programación, ejecución y entrega mostrado por separado, mucho más útil que un simple correcto/fallido;
- Archivado: el archivado pasa por Hermes, con un breve Undo, y conserva los mensajes almacenados.
Las conversaciones automáticas etiquetadas por Hermes están ocultas por defecto; añade "sidebar": { "showAutomatedChats": true } junto a connections para verlas. El propio ajuste de visibilidad de subagentes de Hermes sigue aplicándose.
Cuándo es la herramienta adecuada
Si tu flujo de trabajo es «Codex para el código, Hermes para la automatización», esta extensión elimina el cambio de ventana y la pérdida de contexto, a cambio de aceptar un plugin MCP de terceros instalado a través de un marketplace local. Trátalo como cualquier plugin local: lee el script de instalación, mantén tus archivos de configuración y de token fuera del control de versiones y fuera del paquete distribuible, y usa HTTPS o SSH para todo lo que sea remoto.
Si el OAuth remoto ha sido tu bloqueo, empieza por la guía de OAuth sobre SSH; para leer bien tus propios datos de sesión y de programación, la guía de seguimiento de costos y las notas sobre zonas horarias y horario de verano en cron son buenas compañeras. Para la parte mecánica del lado MCP, la referencia de comandos de MCP es la lectura sistemática.
La versión corta
Poner dos agentes en una sola ventana vale más que ahorrarte un cambio: significa que puedes ver el lado de la automatización mientras sigues en el código — si el trabajo se ejecutó, qué pasó en la sesión, qué modelo usa este profile. Esta extensión conecta las piezas en lugar de reinventarlas; no cambia cómo se comporta Hermes, solo saca a la superficie interfaces que ya existen. Para quienes usan varias instancias y varios profiles, además deja explícito «¿a cuál estoy conectado en realidad?»: una conexión por instancia, un grupo por profile. El aislamiento visible gana a una convención que tienes que recordar.