Ir al contenido

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.

Ver Markdown

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_dir y search: comandos y archivos;
  • screenshot y browser_screenshot: muestran lo que Elyra o una página exhibe (en el Cloud, con un enlace a la imagen);
  • list_skills y read_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 mcp sigue en pie para la siguiente petición.
  • El bot tiene que encontrar el ejecutable. Si no encuentra elyra, pon la ruta completa en command. Para descubrirla, ejecuta command -v elyra (macOS y Linux) o Get-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 mcp escribe en la salida estándar es solo el protocolo MCP; avisos y errores van a stderr.

MausBot: MausBot trabaja con el Claude Code y el Codex de tu ordenador. Registra elyra mcp en ellos, y MausBot pasa a controlar Elyra:

Janela do terminal
claude mcp add --scope user elyra -- elyra mcp
codex mcp add elyra -- elyra mcp

Prompt 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 y
llama a la herramienta `elyra` con los argumentos `workspace list` para confirmar que funcionó. Usa la
documentació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 el
enlace de inicio de sesión para que yo lo autorice. Sigue la documentación de tu propio MCP para hacerlo; no
inventes 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

  1. Abre Automatizaciones y usa Crear automatización.
  2. En cuando, elige el evento, por ejemplo un agente termine.
  3. En haz esto, elige Llamar a una URL y rellena:
    • Método: GET, POST, PUT, PATCH o DELETE;
    • 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).
  4. 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:

  1. Guarda la automatización y abre su detalle.
  2. 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.
  3. 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 3xx cuenta 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:

Janela do terminal
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 debo
usar) y, cuando llegue un aviso, comprueba la cabecera X-Elyra-Signature-256: vale "sha256=" más el
HMAC-SHA256 en hexadecimal del cuerpo exacto, usando como clave el secreto que te voy a pasar. Si la firma no
coincide, ignora el aviso. Si coincide, el cuerpo es un JSON con trigger, agent, card, project, time y
summary: cuéntame en el chat qué pasó. Responde 200 a Elyra en menos de 10 segundos. Cuando la dirección
exista, 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 la
automatizació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/skills es 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 de
usar la herramienta `elyra`, sigue lo que ella indica. Si no existe, recarga tus skills siguiendo la
documentació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.

  1. Conecta el bot a Elyra mediante elyra mcp o mediante el Cloud.

  2. 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).

  3. Pide en el chat del bot: “pide a un agente que revise los cambios del proyecto X”.

  4. El bot usa la herramienta elyra para localizar el proyecto y abrir el agente, algo como:

    Janela do terminal
    elyra workspace list --json
    elyra canvas create terminal --workspace 'id:<ID-DEL-LISTADO>' --agent <agente> --title 'Tarea del bot' --json
    elyra terminal wait --terminal '<HANDLE>' --for tui-idle --json
    elyra terminal send --terminal '<HANDLE>' --text-file <archivo-con-la-tarea> --json

    El <HANDLE> viene de la respuesta del segundo comando.

  5. 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 firma
X-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.