Conectar con tu bot
Deja que tu bot (OpenClaw, Hermes, Grok Bot, dot de OpenAI, OpenBot, MausBot, nanobot y otros) controle Elyra, y haz que Elyra le avise cuando un agente termine.
Un bot es un asistente que está siempre en pie y habla contigo por el chat, por el móvil o por un mensajero: OpenClaw, Hermes, Grok Bot, dot de OpenAI, OpenBot, MausBot, nanobot y otros. Esta página muestra cómo conectarlo a Elyra en dos direcciones:
- El bot controla Elyra: abre tarjetas, envía tareas a los agentes, lee terminales y archivos.
- Elyra avisa al bot: cuando un agente termina, Elyra llama a una dirección del bot, y él te lo cuenta.
En cada sección hay un prompt listo. Cópialo, pégalo en tu bot y él hace la configuración por ti. Donde la configuración depende del bot, el prompt le pide que siga su propia documentación.
Qué puede hacer el bot en Elyra
Conectado, el bot usa las mismas herramientas del conector del Cloud, que actúan con tus permisos en el ordenador donde corre Elyra:
elyra: ejecuta la CLI de Elyra: proyectos, workspaces, tarjetas del Canvas, terminales, agentes, el navegador integrado y las automatizaciones;shell,read_file,write_file,edit_file,list_dirysearch: comandos y archivos;screenshotybrowser_screenshot: muestran lo que Elyra o una página exhibe (en el Cloud, con un enlace a la imagen);list_skillsyread_skill: los manuales de las skills de Elyra.
La tabla completa está en Conectar agentes externos mediante MCP.
Seguridad. El bot actúa como tú, sin pedir confirmación en cada paso. Conecta solo bots en los que confíes y revoca el acceso cuando ya no lo necesites (consulta Seguridad).
Elige el camino
| Dónde corre el bot | Camino | Necesita |
|---|---|---|
| En el mismo ordenador que Elyra | elyra mcp, por stdio |
Elyra abierto |
| En otra máquina (servidor, nube, móvil) | MCP del Cloud con OAuth | Elyra Cloud activado |
Bot en el mismo ordenador: elyra mcp
elyra mcp es un servidor MCP por stdio: el bot lo inicia como un subproceso y habla con él por líneas de
JSON. Reenvía cada petición al Elyra abierto en este ordenador, con las mismas herramientas del
conector del Cloud. Sin túnel, sin Cloud y sin inicio de sesión.
La configuración, en cualquier cliente MCP que acepte un servidor iniciado por un comando, es esta:
{ "mcpServers": { "elyra": { "command": "elyra", "args": ["mcp"] } }}El nombre de las claves y el archivo donde va cambian de un bot a otro: usa el formato que pida su
documentación y mantén el comando elyra con el argumento mcp.
Puntos de atención:
- Elyra tiene que estar abierto. Con la app cerrada, cada petición vuelve con un error que dice que abras
Elyra, y
elyra mcpsigue en pie para la siguiente petición. - El bot tiene que encontrar el ejecutable. Si no encuentra
elyra, pon la ruta completa encommand. Para descubrirla, ejecutacommand -v elyra(macOS y Linux) oGet-Command elyra(PowerShell). - El bot y Elyra tienen que estar en el mismo ordenador y con el mismo usuario del sistema. Un bot dentro de un contenedor o de un servidor no alcanza el Elyra de tu ordenador: para ese caso, usa el camino del Cloud.
- Lo que
elyra mcpescribe en la salida estándar es solo el protocolo MCP; avisos y errores van astderr.
MausBot: MausBot trabaja con el Claude Code y el Codex de tu
ordenador. Registra elyra mcp en ellos, y MausBot pasa a controlar Elyra:
claude mcp add --scope user elyra -- elyra mcpcodex mcp add elyra -- elyra mcpPrompt para tu bot:
Configura un servidor MCP llamado "elyra" con el comando `elyra mcp` (transporte stdio). Si el comando`elyra` no se encuentra, usa la ruta completa del ejecutable. Después lista las herramientas del servidor yllama a la herramienta `elyra` con los argumentos `workspace list` para confirmar que funcionó. Usa ladocumentación de tu propio MCP para saber dónde registrar el servidor; no inventes comandos.Bot en otra máquina: el MCP del Cloud
Cuando el bot no corre en tu ordenador, alcanza Elyra mediante el conector del Cloud: una dirección
https://<tu-usuario>-cloud.elyra.sh/mcp, con inicio de sesión OAuth. Apruebas la conexión una vez y el
acceso se renueva solo; sin clave fija que copiar. El paso a paso, la pantalla de consentimiento y la
revocación están en Conectar agentes externos mediante MCP; no se repiten aquí.
El conector responde con JSON sobre HTTP (POST), sin SSE. Un bot que solo hable el transporte SSE
antiguo no se conecta.
Dónde registrar el servidor en cada bot:
| Bot | Dónde registrar el servidor remoto |
|---|---|
| Grok Bot | Setup → Plugins, servidor Remote HTTPS con OAuth (fuente) |
| dot, de OpenAI | Plugins → + → Add custom MCP server, para uso personal, sin revisión (fuente) |
| OpenClaw | Settings → MCP, en el panel de control (Control UI), con transporte HTTP e inicio de sesión OAuth (fuente) |
| Hermes | hermes mcp add --url <dirección> --auth oauth elyra y después hermes mcp test elyra (fuente) |
| nanobot | Apps → MCP → Connect, con auth en oauth (fuente) |
Cada flujo termina en una página de tu Cloud, donde entras con la cuenta de Elyra y tocas Permitir. Si el bot corre en un servidor sin navegador, el inicio de sesión tiene que volver a la máquina del bot (por reenvío de puerto, por ejemplo); la documentación del bot explica cómo.
Prompt para tu bot:
Añade el servidor MCP remoto https://<mi-usuario>-cloud.elyra.sh/mcp con autenticación OAuth y envíame elenlace de inicio de sesión para que yo lo autorice. Sigue la documentación de tu propio MCP para hacerlo; noinventes comandos. Cuando yo lo haya autorizado, lista las herramientas del servidor y llama a la herramienta`elyra` con los argumentos `workspace list` para confirmar.Avisar al bot: la acción “Llamar a una URL”
Para que el bot sepa que un agente terminó (o quedó esperándote, o falló el CI), Elyra hace una llamada HTTP a la dirección que el bot publica. Es la acción Llamar a una URL de las automatizaciones.
Crearla en la pantalla
- Abre Automatizaciones y usa Crear automatización.
- En cuando, elige el evento, por ejemplo un agente termine.
- En haz esto, elige Llamar a una URL y rellena:
- Método:
GET,POST,PUT,PATCHoDELETE; - Dirección (URL): la dirección del bot, con la query si la hay;
- Cabeceras: pares nombre/valor;
- Cuerpo: solo en los métodos que llevan cuerpo. Por defecto es un JSON con el evento;
- Firmar con un secreto: activa la firma (ver abajo).
- Método:
- Crear automatización.
Variables del evento
La URL y el cuerpo aceptan estas variables, escritas entre llaves dobles:
| Variable | Qué trae |
|---|---|
{{trigger}} |
El evento que disparó, como agent-finished, agent-waiting o card-message; manual cuando ejecutas la automatización a mano; en los demás casos, el tipo del disparador |
{{agent}} |
En un evento de Elyra que viene de una tarjeta (agente terminó, agente esperando, mensaje de tarjeta), el agente de esa tarjeta, cuando Elyra lo conoce; en los demás casos, el agente de la automatización |
{{card}} |
En esos eventos, el título de la tarjeta que disparó; en los demás casos, el título de la ejecución |
{{project}} |
El nombre del proyecto |
{{time}} |
La hora, en ISO 8601 |
{{summary}} |
Evento de GitHub, GitLab o webhook: evento, repositorio, título y dirección, lo que venga. Evento de Elyra con tarjeta: el evento y el título de la tarjeta (agent-finished · Revisor del PR). En los demás casos, vacío |
En la URL los valores entran codificados; en el cuerpo entran escapados para JSON. El cuerpo por defecto es:
{ "trigger": "{{trigger}}", "agent": "{{agent}}", "card": "{{card}}", "project": "{{project}}", "time": "{{time}}", "summary": "{{summary}}"}Y el bot recibe, por ejemplo:
{ "trigger": "agent-finished", "agent": "claude", "card": "Revisor del PR", "project": "mi-app", "time": "2026-10-18T14:03:00.000Z", "summary": "agent-finished · Revisor del PR"}Firma
Con Firmar con un secreto activado, cada llamada lleva la cabecera:
X-Elyra-Signature-256: sha256=<HMAC-SHA256, en hexadecimal, del cuerpo exacto, con el secreto como clave>Es el mismo formato del webhook de entrada. El secreto lo genera Elyra y se guarda cifrado en el almacén del sistema, como el del webhook:
- Guarda la automatización y abre su detalle.
- En la sección Firma de Llamar a una URL, toca Generar secreto y cópialo al instante: se muestra una sola vez. Si lo pierdes, usa Cambiar secreto.
- Entrega el secreto al bot.
Quien recibe comprueba la firma sobre los bytes exactos del cuerpo. En Node.js:
import { createHmac, timingSafeEqual } from 'node:crypto'
function firmaCoincide(cuerpoBruto, cabecera, secreto) { const esperado = createHmac('sha256', secreto).update(cuerpoBruto).digest() if (!/^sha256=[0-9a-f]{64}$/i.test(cabecera ?? '')) return false const recibido = Buffer.from(cabecera.slice(7), 'hex') return recibido.length === esperado.length && timingSafeEqual(recibido, esperado)}Sin la firma activada, Elyra no prueba quién llamó: úsala solo en una dirección que controlas y que no acepta nada de desconocidos.
Qué pasa en la llamada
- Plazo de 10 segundos y ningún reenvío. Si el bot está caído, Elyra no guarda cola.
- La llamada sale de tu ordenador, y se aceptan direcciones locales (
localhost) y de la red interna. Así se avisa a un bot en la misma máquina, como el gateway de OpenClaw. Usa solo URLs en las que confíes. - Solo una respuesta 2xx cuenta como éxito. El historial de la ejecución muestra
HTTP 200 · 120 ms. Cualquier otra respuesta, un error de conexión o el plazo agotado hacen fallar la acción y detienen la cadena, con el motivo en el historial; en la pantalla, el fallo también aparece en un aviso. - Elyra no sigue redirecciones: un
3xxcuenta como fallo, para que el cuerpo firmado nunca se reenvíe a otra dirección. - El secreto y las cabeceras no van a los logs, y el resumen de la acción muestra solo el servidor, nunca la query.
- Los valores de las cabeceras se guardan con la automatización. Prefiere la firma a un token fijo en una cabecera.
Ejemplo: avisar a OpenBot
OpenBot ejecuta un servidor local en el puerto 4132 y recibe
eventos en POST /api/publish. Una automatización un agente termina → Llamar a una URL con estos campos le
envía el aviso directamente:
- Método:
POST; - Dirección (URL):
http://localhost:4132/api/publish; - Encabezados:
content-type=application/json; - Cuerpo:
{ "type": "agent:invoke", "data": { "role": "user", "content": "El agente {{agent}} terminó en la tarjeta {{card}} del proyecto {{project}}. Avísame." }}Crearla por la línea de comandos
El bot también puede crear la automatización, con la herramienta elyra, usando --actions. El secreto de
firma, sin embargo, solo se genera en la app, en el detalle de la automatización:
elyra automations create --name "Avisar al bot" \ --trigger-json '{"kind":"elyra-event","events":["agent-finished"]}' \ --actions '[{"kind":"http-call","method":"POST","url":"https://bot.ejemplo.com/elyra","headers":[],"body":"{\"card\":\"{{card}}\"}","sign":true}]' \ --trigger daily --prompt "Aviso de evento" --provider codex --repo <proyecto>Prompt para tu bot:
Quiero que recibas avisos de Elyra. Publica una dirección HTTP POST (o dime cuál de tus direcciones debousar) y, cuando llegue un aviso, comprueba la cabecera X-Elyra-Signature-256: vale "sha256=" más elHMAC-SHA256 en hexadecimal del cuerpo exacto, usando como clave el secreto que te voy a pasar. Si la firma nocoincide, ignora el aviso. Si coincide, el cuerpo es un JSON con trigger, agent, card, project, time ysummary: cuéntame en el chat qué pasó. Responde 200 a Elyra en menos de 10 segundos. Cuando la direcciónexista, crea en Elyra, con la herramienta `elyra`, la automatización "un agente termine → Llamar a una URL"(método POST, esa dirección, firma activada) y avísame para que yo genere el secreto en el detalle de laautomatización.Skills en las carpetas de los bots
Las skills de Elyra son manuales cortos que enseñan al agente a usar la CLI. Elyra las instala solo en las carpetas de skills de los asistentes que ya están en tu ordenador, y eso ahora incluye OpenClaw:
| Bot | Carpeta |
|---|---|
| OpenClaw | ~/.openclaw/skills (o <OPENCLAW_STATE_DIR>/skills, si cambiaste la carpeta de estado) |
| Hermes | la carpeta de skills de Hermes (~/.hermes/skills, %LOCALAPPDATA%\hermes\skills en Windows o HERMES_HOME) |
| Otros asistentes | ~/.agents/skills y las carpetas de Claude, Codex, Grok CLI, Cursor y demás |
Las reglas son siempre las mismas:
- Elyra nunca crea la carpeta de un bot. Sin OpenClaw instalado, no se escribe nada.
- Cada skill instalada lleva el marcador
.elyra-managed.json. Lo que no es de Elyra no se toca, y desinstalar Elyra elimina solo lo que tiene el marcador. - MausBot: usa las skills de las carpetas del Claude Code y del Codex, donde Elyra ya las instala.
- OpenBot: recibe los avisos de Elyra por la acción Llamar a una URL (ejemplo arriba).
- La carpeta
~/.grok/skillses la del Grok CLI, no la de Grok Bot; Grok Bot recibe Elyra por el conector.
Un bot que no ve las skills puede necesitar recargar las suyas; consulta cómo en su documentación.
Prompt para tu bot:
Lista las skills que tienes cargadas y dime si existe una llamada "elyra". Si existe, léela ahora y, antes deusar la herramienta `elyra`, sigue lo que ella indica. Si no existe, recarga tus skills siguiendo ladocumentación de tu propio bot y vuelve a comprobar; no inventes comandos.Ejemplo de punta a punta
El bot envía una tarea a un agente y recibe un aviso cuando termina.
-
Conecta el bot a Elyra mediante
elyra mcpo mediante el Cloud. -
Crea la automatización “un agente termine → Llamar a una URL” apuntando a la dirección del bot, con firma, y entrégale el secreto (consulta Avisar al bot).
-
Pide en el chat del bot: “pide a un agente que revise los cambios del proyecto X”.
-
El bot usa la herramienta
elyrapara localizar el proyecto y abrir el agente, algo como:Janela do terminal elyra workspace list --jsonelyra canvas create terminal --workspace 'id:<ID-DEL-LISTADO>' --agent <agente> --title 'Tarea del bot' --jsonelyra terminal wait --terminal '<HANDLE>' --for tui-idle --jsonelyra terminal send --terminal '<HANDLE>' --text-file <archivo-con-la-tarea> --jsonEl
<HANDLE>viene de la respuesta del segundo comando. -
El agente trabaja. Cuando termina, Elyra hace la llamada Llamar a una URL, el bot comprueba la firma y te cuenta en el chat que acabó. Para leer el resultado, el bot usa
elyra terminal read --terminal '<HANDLE>'.
Prompt para tu bot:
Usa Elyra para esta tarea: abre un agente en el proyecto "<nombre del proyecto>" (lista los workspaces con`elyra workspace list --json` mediante la herramienta `elyra`, y lee antes la skill "elyra"), pídele que"<la tarea>" y vigílalo. Cuando Elyra me avise en tu dirección de que el agente terminó (comprueba la firmaX-Elyra-Signature-256), lee el resultado de su terminal y cuéntame aquí, en el chat, qué se hizo.Resolver problemas
| Síntoma | Qué hacer |
|---|---|
| El bot recibe “abre la aplicación Elyra” | Elyra está cerrado. Abre la app; elyra mcp vuelve a funcionar en la siguiente petición. |
El bot no encuentra el comando elyra |
Usa la ruta completa del ejecutable en command. |
| El Cloud rechaza la conexión del bot | Consulta Resolver problemas del Cloud. |
| La acción falló con “El servidor respondió 401” | El bot rechazó la llamada. Revisa la dirección y el secreto que usa para validar. |
| La acción falló con “La firma está activada, pero el secreto no existe” | Abre el detalle de la automatización y toca Generar secreto. |
| La acción falló con “La llamada tardó más de 10 s en responder” | El bot tardó demasiado. Responde 200 enseguida y procesa el aviso después. |

