Skip to main content
Glama

AgentBus

Прочная шина координации для флотов ИИ-агентов — с блокирующим этапом одобрения человеком перед любым необратимым действием.

Агентам всё чаще разрешают развёртывать, отправлять, удалять и тратить. В этот момент ломаются две вещи, и ни одна из них не является проблемой LLM:

  1. Передача работы теряется. Агент завершает задачу, передаёт работу следующему, и процесс умирает. Никто не повторяет попытку, никто не замечает.

  2. Нет единой точки контроля. Одобрение живёт внутри промпта — «сначала спроси меня» — это предложение, а не контроль, и не оставляет записи о том, кто что разрешил.

AgentBus — это скучная инфраструктура под всем этим: прочная очередь с доставкой как минимум один раз, блокирующий шлюз одобрения человеком и журнал аудита только для добавления, в котором фиксируется каждое сообщение и каждое решение.

                    ┌──────────────────────────────┐
   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 file

Ноль зависимостей в рантайме. Никакого Redis, Postgres, брокера или облачного аккаунта. Node 24+ и файл.


Быстрый старт

npx agentbus serve                 # http://127.0.0.1:7801 — API + dashboard

Заблокировать рискованное действие за одобрением человека

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.sh

ask --wait блокирует выполнение и выводит ссылку. Человек открывает её на телефоне, одобряет или отклоняет, и команда завершается с кодом 0 — одобрено · 10 — отклонено · 11 — истекло — так что && делает ровно то, что нужно, а решение записывается на имя этого человека.

Прочная передача работы

# 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'

Не подтверждённая работа возвращается в очередь по истечении аренды, так что воркер, убитый в середине задачи, ничего не теряет.


Related MCP server: gotoHuman MCP Server

Предоставление доступа агенту (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" }
    }
  }
}

Агент получает request_approval, check_approval, publish, pull, ack, nack и stats. request_approval блокирует выполнение, пока человек не примет решение, и возвращает явные указания:

{
  "state": "denied",
  "approved": false,
  "decidedBy": "sami",
  "reason": "not without a backup",
  "guidance": "Not approved (denied). Do NOT proceed. Tell the user and stop."
}

Тайм-аут возвращает pending, но никогда approved — молчание никогда не является согласием.


Концепции

Топики разделяются точками: deploy.prod.api. В шаблонах * означает один сегмент, а > — все остальные: deploy.>, *.prod.api, >.

Группы потребителей получают собственную копию каждого подходящего сообщения. Внутри группы сообщение одновременно обрабатывает ровно один воркер. Новая группа по умолчанию начинает с текущего момента; --earliest воспроизводит весь накопленный журнал.

Аренды дают воркеру тайм-аут видимости (по умолчанию 30 секунд, можно продлить). Если он пропущен, сообщение доставляется повторно. После max_attempts (5) сообщение попадает в очередь недоставленных, видно на панели управления и может быть воспроизведено одним кликом.

Одобрения содержат заголовок, машиночитаемое действие, произвольный текст деталей, структурированную полезную нагрузку, уровень риска и опциональные помеченные варианты («канарейка 10%» против «полный релиз»). Они истекают, а не висят вечно. Каждый запрос и решение — кто, когда, почему — попадают в журнал аудита.

Порядок определяется последовательностью SQLite, а не временной меткой: два сообщения, опубликованные в одну миллисекунду, всё равно имеют чётко определённый порядок.


HTTP API

Метод

Путь

POST

/v1/publish

{topic, payload, idempotencyKey?, delayMs?}

POST

/v1/pull

{group, patterns?, max?, leaseMs?, waitMs?} — длинный опрос

POST

/v1/ack · /v1/nack · /v1/extend

подтвердить, отклонить или продлить доставку

GET

/v1/stats · /v1/dead · /v1/audit

наблюдаемость

POST

/v1/replay

повторно поставить в очередь недоставленное письмо

POST

/v1/approvals

создать; возвращает подписанный URL для передачи

GET

/v1/approvals/:id/wait

длинный опрос до принятия решения

POST

/v1/approvals/:id/decide

{decision, by, reason?, choice?}

GET

/v1/stream

SSE-поток сообщений и одобрений

GET

/ · /a/:id

панель управления · страница одного одобрения

Установите AGENTBUS_TOKEN, чтобы требовать Authorization: Bearer …. Ссылки на одобрения содержат собственный HMAC-токен, так что вы можете отправить их на телефон, не передавая ключ API.

Окружение: AGENTBUS_URL, AGENTBUS_TOKEN, AGENTBUS_DB, AGENTBUS_SECRET, AGENTBUS_AGENT, AGENTBUS_ALLOWED_ORIGINS.

Политика происхождения браузера

По умолчанию это неаутентифицированный сервер на loopback, что означает, что веб-страница, открытая у вас, в противном случае могла бы до него добраться. Три правила это предотвращают, и они действуют независимо от того, установлен ли токен:

  • Запрос с заголовком Origin отклоняется, если этот источник не является собственным сервером, хостом из AGENTBUS_URL или не указан в AGENTBUS_ALLOWED_ORIGINS. Отказ означает 403 — а не просто отсутствие заголовка CORS, который скрывает ответ, но всё равно выполняет запись.

  • POST требует content-type: application/json. Формы и тела text/plain — это «простые запросы» CORS, которые браузер отправляет без предварительной проверки, поэтому их принятие снова открыло бы дыру.

  • Неожиданный заголовок Host отклоняется, что блокирует DNS rebinding.

Не-браузерные клиенты — CLI, MCP-сервер, curl, ваши собственные скрипты — не отправляют Origin и не затрагиваются. Если вы обслуживаете панель управления на LAN-адресе или за прокси, чтобы одобрения доходили до телефона, установите AGENTBUS_URL (или --url) на этот публичный источник; именно из него строятся ссылки на одобрения.


Разработка

npm test          # 66 tests, no network, no fixtures
npm run typecheck # strict, noUncheckedIndexedAccess, erasableSyntaxOnly

TypeScript выполняется напрямую на Node 24 через нативное удаление типов — нет этапа сборки и нет компилятора в пути выполнения.


Лицензия

MIT

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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