win4r/openclaw-a2a-gateway
OpenClaw plugin implementing the A2A (Agent-to-Agent) protocol v0.3.0 — bidirectional agent communication gateway
OpenClaw A2A Gateway プラグイン
何であるか – OpenClaw エージェントプラットフォーム用の本番環境対応プラグインで、Google A2A (エージェント間) v0.3.0 プロトコルを実装しています。異なるマシン上の OpenClaw エージェントが自動で相互に発見し、JSON-RPC、REST、または gRPC を介してメッセージ(テキスト、ファイル、JSONデータ)を交換できるようにします。
コアコンセプト
| コンセプト | プラグインの対応方法 |
|---|---|
| トランスポート | JSON-RPC → REST → gRPC と自動的に試行し、失敗時にフェールバック。ライブステータス更新用のハートビート付き Server-Sent-Events ストリーミングをサポート。 |
| メッセージパーツ | A2A パーツの3種類 – TextPart、FilePart(URI または base64)、DataPart をサポート。エージェントの応答に含まれるファイル URL は自動的にアウトバウンド FilePart に変換されます。 |
| ルーティング | ルールベース(正規表現、タグ、スキル)+バイオインスパイアドの「ヒル方程式」アフィニティスコア(スキル、タグ、パターン一致、成功確率を重み付け)。各メッセージごとに最適なピアを選択。 |
| ディスカバリ | DNS-SD(_a2a._tcp SRV/TXT)によるゼロコンフィグのピア検出、mDNS 自己広告、およびピア数に応じて間隔を調整するクォラムセンシングポーラー。 |
| レジリエンス | 4段階のサーキットブレーカー(閉じる → 非感応 → 開く → 回復)と指数回復、適応的トランスポートランク、プッシュ通知Webhook、Michaelis-Mentenスタイルのソフトコンカレントスロット。 |
| セキュリティ | ベアラートークン認証(単一トークンまたはローテーションリスト)、Ed25519 デバイスID、SSRF保護(ホスト許可リスト、MIME許可リスト、サイズ制限)、JSON-L監査ログ、オプションの認証付きメトリクスエンドポイント、TTLクリーンアップ付き永続的ディスクタスクストア。 |
クイックスタート(ゼロコンフィグ)
# npmからインストール(推奨)
openclaw plugins install openclaw-a2a-gateway
# ソースから
mkdir -p ~/.openclaw/workspace/plugins && cd ~/.openclaw/workspace/plugins
git clone https://github.com/win4r/openclaw-a2a-gateway.git a2a-gateway
cd a2a-gateway
npm install --production
openclaw plugins install ~/.openclaw/workspace/plugins/a2a-gateway
openclaw gateway restart
# Agent Cardの到達性を確認
curl -s http://localhost:18800/.well-known/agent-card.json | python3 -m json.tool
プラグインはデフォルトのAgent Card(name: "OpenClaw A2A Gateway", skills: [chat])で起動します。
ピアの追加と設定
openclaw config set plugins.entries.a2a-gateway.config.peers '[
{
"name": "PeerB",
"agentCardUrl": "http://<PEER_IP>:18800/.well-known/agent-card.json",
"auth": {"type": "bearer", "token": "<PEER_TOKEN>"}
}
]'
openclaw gateway restart
双方向通信のためには、両側が互いをピアとして追加し、再起動する必要があります。
メッセージの送信
プラグインは公式 @a2a-js/sdk クライアントをラップしたヘルパー スクリプトを同梱しています。
node <PLUGIN_PATH>/skill/scripts/a2a-send.mjs \
--peer-url http://<PEER_IP>:18800 \
--token <PEER_TOKEN> \
--message "Hello from Server A!"
長時間または複数ラウンドのインタラクションは、ポーリングで非ブロッキングモードで実行可能:
node <PLUGIN_PATH>/skill/scripts/a2a-send.mjs \
--peer-url http://<PEER_IP>:18800 \
--token <PEER_TOKEN> \
--non-blocking --wait --timeout-ms 600000 --poll-ms 1000 \
--message "Discuss A2A advantages in 3 rounds"
リモート側の特定の OpenClaw agentId をターゲットにするには(OpenClaw固有の拡張機能)--agent-id <ID> を追加します。
エージェント側ツールキット
プラグインはエージェントが呼び出せる a2a_send_file ツールを登録しています:
| パラメータ | 必須? | 意味 |
|---|---|---|
peer |
はい | 設定済みピアの名前 |
uri |
はい | ファイルのパブリックURL |
name |
いいえ | ファイル名(例:report.pdf) |
mimeType |
いいえ | MIMEタイプ(省略時は自動検出) |
text |
いいえ | オプションのキャプション |
agentId |
いいえ | リモート OpenClaw エージェントID(拡張機能) |
エージェントは TOOLS.md エントリを a-2-a-send.mjs スクリプトにリンクすることでこのツールを使えるように学習できます。
ネットワークオプション
| オプション | 使用タイミング |
|---|---|
| Tailscale(推奨) | サーバ間のセキュアなメッシュ;ファイアウォール変更不要。 |
| LAN | 両マシンが同じローカルネットワーク上;ポート18800を開くだけ。 |
| パブリックIP | インターネット公開;ベアラートークンとオプションのファイアウォールルールで保護必須。 |
設定リファレンス(抜粋)
{
"agentCard": {
"name": "OpenClaw A2A Gateway",
"description": "A2A bridge for OpenClaw agents",
"skills": [{"id":"chat","name":"chat","description":"Chat bridge"}]
},
"server": {"host":"0.0.0.0","port":18800},
"security": {"inboundAuth":"bearer","token":"<TOKEN>"},
"routing": {"defaultAgentId":"main","rules":[]},
"peers": []
}
主要セクションには agentCard、server、security(トークンローテーション、MIME許可リスト、ファイルサイズ制限)、routing(デフォルトエージェントID、ルールリスト)、peers(URLと認証付きリモートエージェントの配列)があります。
誰が使うべきか?
- マルチエージェント展開:異なる OpenClaw インスタンスが通信が必要な場合(例:チャットボットクラスタ、SNS自動化ボット、分散型ツールコールエージェント)。
- 研究者:大規模エージェントエコシステムを構築し、独自のネットワークレイヤーを書かずに自動発見とバイオインスパイアドルーティングを実現したい人。
- 運用チーム:既に OpenClaw を運用しており、データセンター、エッジ、クラウドノード間のセキュアでゼロコンフィグのブリッジが必要な人。
TL;DR
OpenClaw A2A Gateway は、インストール可能な Node.js プラグインで、OpenClaw エージェントが機械間で標準準拠、自動発見、レジリエントな方法で相互に呼び合えるようにします。トランスポートフェールバック、パーツシリアライズ、スキルベースルーティング、セキュリティ、監視をオールインワンで提供し、数行のコマンドでセットアップ可能です。
関連
- プロジェクト
- プロジェクト
- プロジェクト