agentbus
AgentBus
Un bus de coordinación duradero para flotas de agentes de IA, con una puerta de aprobación humana frente a cualquier cosa irreversible.
Cada vez se permite más a los agentes desplegar, enviar, eliminar y gastar. En ese punto se rompen dos cosas, y ninguna es un problema de LLM:
Los traspasos se pierden. Un agente termina, entrega el trabajo al siguiente y el proceso muere. Nada reintenta, nadie se da cuenta.
No hay un punto de estrangulamiento. La aprobación vive dentro de un prompt — "pregúntame primero" — que es una sugerencia, no un control, y no deja registro de quién permitió qué.
AgentBus es la infraestructura aburrida que hay debajo: una cola duradera con entrega al menos una vez, una puerta de aprobación humana bloqueante y un registro de auditoría de solo añadidura de cada mensaje y decisión.
┌──────────────────────────────┐
agents ────────▶│ topics · groups · leases │────────▶ workers
(MCP/HTTP/CLI) │ retries · dead letters │
├──────────────────────────────┤
agent ─ ask ───▶│ approval gate ── blocks ───│──▶ human (phone/dashboard)
├──────────────────────────────┤
│ append-only audit log │
└──────────────────────────────┘
one SQLite fileCero dependencias en tiempo de ejecución. Sin Redis, sin Postgres, sin broker, sin cuenta en la nube. Node 24+ y un archivo.
Inicio rápido
npx agentbus serve # http://127.0.0.1:7801 — API + dashboardProtege una acción arriesgada detrás de un humano
agentbus ask "Deploy api build 118 to production" \
--action deploy.prod --risk high \
--detail "3 commits, including a migration that drops a column." \
--payload '{"service":"api","build":118}' \
--wait && ./deploy.shask --wait bloquea e imprime un enlace. Una persona lo abre en su teléfono, aprueba o deniega, y el comando sale con 0 aprobado · 10 denegado · 11 expirado — así que && hace exactamente lo correcto, y la decisión queda registrada con su nombre.
Traspaso de trabajo duradero
# Producer — survives a crash, deduplicated by key
agentbus pub job.render '{"file":"a.png"}' --key render-a
# Consumer — any shell command becomes a durable worker.
# Payload on stdin; exit 0 acks, non-zero retries with backoff, then dead-letters.
agentbus sub 'job.>' --group renderers --exec './render.sh'El trabajo no confirmado vuelve a la cola cuando expira la concesión, así que un trabajador que muere a mitad de trabajo no pierde nada.
Related MCP server: gotoHuman MCP Server
Dar acceso a un agente (MCP)
// .mcp.json — or claude_desktop_config.json
{
"mcpServers": {
"agentbus": {
"command": "npx",
"args": ["-y", "agentbus", "mcp"],
"env": { "AGENTBUS_URL": "http://127.0.0.1:7801", "AGENTBUS_AGENT": "deploy-agent" }
}
}
}El agente obtiene request_approval, check_approval, publish, pull, ack, nack y stats. request_approval bloquea hasta que un humano decide, y devuelve una guía explícita:
{
"state": "denied",
"approved": false,
"decidedBy": "sami",
"reason": "not without a backup",
"guidance": "Not approved (denied). Do NOT proceed. Tell the user and stop."
}Un tiempo de espera agotado devuelve pending, nunca approved — el silencio nunca es consentimiento.
Conceptos
Los temas están separados por puntos: deploy.prod.api. Los patrones usan * para un segmento y > para el resto — deploy.>, *.prod.api, >.
Los grupos de consumidores reciben cada uno su propia copia de cada mensaje que coincida. Dentro de un grupo, un mensaje va a exactamente un trabajador a la vez. Un grupo nuevo comienza desde ahora por defecto; --earliest reproduce todo el historial pendiente.
Las concesiones dan a un trabajador un tiempo de visibilidad (30 s por defecto, ampliable). Si se supera, el mensaje se vuelve a entregar. Después de max_attempts (5) se envía a la cola de mensajes muertos, visible en el panel y reproducible con un clic.
Las aprobaciones llevan un título, una acción legible por máquina, un detalle de texto libre, una carga útil estructurada, un nivel de riesgo y opciones etiquetadas opcionales ("canary 10%" vs "despliegue completo"). Expiran en lugar de colgar para siempre. Cada solicitud y decisión — quién, cuándo, por qué — queda en el registro de auditoría.
El orden se basa en una secuencia de SQLite, no en la marca de tiempo: dos mensajes publicados en el mismo milisegundo siguen teniendo un orden bien definido.
API HTTP
Método | Ruta | |
|
|
|
|
|
|
|
| resolver o ampliar una entrega |
|
| observabilidad |
|
| reencolar un mensaje muerto |
|
| crear; devuelve una URL firmada y compartible |
|
| sondeo largo hasta que se decida |
|
|
|
|
| cola SSE de mensajes y aprobaciones |
|
| panel · página de aprobación individual |
Establece AGENTBUS_TOKEN para exigir Authorization: Bearer …. Los enlaces de aprobación llevan su propio token HMAC, así que puedes enviar uno a un teléfono sin entregar la clave de API.
Entorno: AGENTBUS_URL, AGENTBUS_TOKEN, AGENTBUS_DB, AGENTBUS_SECRET, AGENTBUS_AGENT, AGENTBUS_ALLOWED_ORIGINS.
Política de origen del navegador
El valor predeterminado es un servidor no autenticado en loopback, lo que significa que una página web que tengas abierta podría alcanzarlo de otro modo. Tres reglas lo impiden, y se aplican tanto si hay un token como si no:
Una solicitud que lleve una cabecera
Originse rechaza a menos que ese origen sea el del propio servidor, el host enAGENTBUS_URLo esté listado enAGENTBUS_ALLOWED_ORIGINS. Rechazada significa 403 — no solo una cabecera CORS ausente, que oculta la respuesta pero aun así realiza la escritura.POSTrequierecontent-type: application/json. Los cuerpos de formulario ytext/plainson "solicitudes simples" de CORS que un navegador envía sin preflight alguno, así que aceptarlos reabriría el agujero.Una cabecera
Hostinesperada se rechaza, lo que bloquea el rebinding de DNS.
Los clientes que no son navegadores — la CLI, el servidor MCP, curl, tus propios scripts — no envían Origin y no se ven afectados. Si sirves el panel en una dirección LAN o detrás de un proxy para que las aprobaciones lleguen a un teléfono, establece AGENTBUS_URL (o --url) a ese origen público; de todos modos, es de donde se construyen los enlaces de aprobación.
Desarrollo
npm test # 66 tests, no network, no fixtures
npm run typecheck # strict, noUncheckedIndexedAccess, erasableSyntaxOnlyTypeScript se ejecuta directamente en Node 24 mediante la eliminación nativa de tipos — no hay paso de compilación ni compilador en la ruta de ejecución.
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Shared task queue for humans and AI agents: leases, handoffs, approvals and signed receipts.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Durable agent-to-agent handoffs and shared scratchpad for multi-agent workflows.
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePauses AI agent execution and routes approval requests to humans via Slack or email, with cryptographically signed proof of the human's decision.52MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to request human approvals with customizable forms, webhooks, and team features.69MIT
- AlicenseNot gradedqualityBmaintenanceGoverned, self-hosted memory for AI agents: writes queue until an authorized approver signs off.Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables structured role-to-role handoffs and merge gating for multi-agent collaboration. It persists evidence and computes approval gates without invoking LLMs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/selimam2/agentbus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server