Skip to main content
Glama

AgentBus

AIエージェント群のための耐久性のある調整バス — 取り返しのつかない操作の前に人間の承認ゲートを備えています。

エージェントはますますデプロイ、送信、削除、支出を行うことが許可されるようになっています。その時点で2つのことが壊れますが、どちらもLLMの問題ではありません。

  1. ハンドオフが失われる。 エージェントが完了し、次のエージェントに作業を引き渡した後、プロセスが死ぬ。再試行もされず、誰も気づかない。

  2. チョークポイントがない。 承認はプロンプトの中に存在する — 「まず私に聞け」— これは制御ではなく提案であり、誰が何を許可したかの記録も残らない。

AgentBusはその下にある退屈なインフラです:少なくとも1回の配信を保証する耐久性のあるキュー、ブロッキングする人間の承認ゲート、そしてすべてのメッセージと決定の追記専用監査ログ。

                    ┌──────────────────────────────┐
   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以上とファイル1つだけ。


クイックスタート

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_approvalcheck_approvalpublishpullacknackstats を取得します。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。パターンは1セグメントに *、残りに > を使用します — deploy.>*.prod.api>

コンシューマグループ はそれぞれ一致するすべてのメッセージのコピーを取得します。グループ内では、メッセージは一度に1つのワーカーにのみ配信されます。新しいグループはデフォルトで 現在 から開始します;--earliest はバックログ全体を再生します。

リース はワーカーに可視性タイムアウト(デフォルト30秒、延長可能)を与えます。それを逃すとメッセージは再配信されます。max_attempts(5)の後、デッドレターとなり、ダッシュボードに表示され、1クリックで再生可能です。

承認 はタイトル、機械可読なアクション、自由形式の詳細、構造化ペイロード、リスクレベル、オプションのラベル付き選択肢(「カナリア10%」対「フルロールアウト」)を保持します。それらは永久にハングするのではなく期限切れになります。すべてのリクエストと決定 — 誰が、いつ、なぜ — は監査ログに記録されます。

順序付け はタイムスタンプではなくSQLiteシーケンスによって行われます:同じミリ秒に公開された2つのメッセージでも明確な順序があります。


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_URLAGENTBUS_TOKENAGENTBUS_DBAGENTBUS_SECRETAGENTBUS_AGENTAGENTBUS_ALLOWED_ORIGINS

ブラウザオリジンポリシー

デフォルトはループバック上の認証なしサーバーであり、つまり開いているWebページがそれに到達できる可能性があります。3つのルールがそれを防ぎ、トークンが設定されているかどうかに関係なく適用されます:

  • Origin ヘッダーを運ぶリクエストは、そのオリジンがサーバー自身のもの、AGENTBUS_URL のホスト、または AGENTBUS_ALLOWED_ORIGINS にリストされているものでない限り拒否されます。拒否は 403 を意味します — 単にCORSヘッダーが欠落しているだけでなく、応答を隠すが書き込みは実行するのではありません。

  • POSTcontent-type: application/json を要求します。フォームと text/plain ボディは、ブラウザがプリフライトなしで送信するCORS「シンプルリクエスト」であるため、それらを受け入れると穴が再び開きます。

  • 予期しない Host ヘッダーは拒否され、DNSリバインディングをブロックします。

ブラウザ以外のクライアント — 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