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種類 – TextPartFilePart(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": []
}

主要セクションには agentCardserversecurity(トークンローテーション、MIME許可リスト、ファイルサイズ制限)、routing(デフォルトエージェントID、ルールリスト)、peers(URLと認証付きリモートエージェントの配列)があります。


誰が使うべきか?

  • マルチエージェント展開:異なる OpenClaw インスタンスが通信が必要な場合(例:チャットボットクラスタ、SNS自動化ボット、分散型ツールコールエージェント)。
  • 研究者:大規模エージェントエコシステムを構築し、独自のネットワークレイヤーを書かずに自動発見とバイオインスパイアドルーティングを実現したい人。
  • 運用チーム:既に OpenClaw を運用しており、データセンター、エッジ、クラウドノード間のセキュアでゼロコンフィグのブリッジが必要な人。

TL;DR

OpenClaw A2A Gateway は、インストール可能な Node.js プラグインで、OpenClaw エージェントが機械間で標準準拠、自動発見、レジリエントな方法で相互に呼び合えるようにします。トランスポートフェールバック、パーツシリアライズ、スキルベースルーティング、セキュリティ、監視をオールインワンで提供し、数行のコマンドでセットアップ可能です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト