win4r/openclaw-a2a-gateway

OpenClaw plugin implementing the A2A (Agent-to-Agent) protocol v0.3.0 — bidirectional agent communication gateway

OpenClaw A2A 게이트웨이 플러그인

무엇인가요OpenClaw 에이전트 플랫폼용 프로덕션 준비 완료 플러그인으로, Google A2A (에이전트 간) v0.3.0 프로토콜을 구현합니다. 서로 다른 머신에 있는 OpenClaw 에이전트들이 자동으로 상호 발견하고, JSON-RPC, REST, 또는 gRPC를 통해 메시지(텍스트, 파일, JSON 데이터)를 교환할 수 있게 해줍니다.


핵심 개념

개념 플러그인의 처리 방식
트랜스포트 JSON-RPC → REST → gRPC 순으로 자동 시도하고, 실패 시 폴백. 실시간 상태 업데이트를 위한 허트비트 포함 Server-Sent-Events 스트리밍 지원.
메시지 부분 A2A의 세 가지 파트 유형 – TextPart, FilePart (URI 또는 base64), DataPart 지원. 에이전트 응답에 포함된 파일 URL은 자동으로 아웃바운드 FilePart로 변환됩니다.
라우팅 규칙 기반(정규식, 태그, 기술) + 생물학적 영감을 받은 "힐 방정식" 유사도 점수(기술, 태그, 패턴 일치, 성공률 가중치). 각 메시지마다 최적의 피어를 선택합니다.
디스커버리 DNS-SD(_a2a._tcp SRV/TXT)를 통한 제로 컨피그 피어 탐색, mDNS 자가 광고, 그리고 알려진 피어 수에 따라 간격을 조절하는 큐럼 센싱 폴러.
회복성 네 단계의 서킷 브레이커(닫힘 → 민감도 감소 → 열림 → 복구)와 지수 회복, 적응형 트랜스포트 순위, 푸시 알림 웹훅, 마이클리스-멘텐 스타일의 소프트 동시성 스로틀.
보안 베어러 토큰 인증(단일 토큰 또는 회전 목록), Ed25519 장치 식별, 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

# 에이전트 카드 접근성 확인
curl -s http://localhost:18800/.well-known/agent-card.json | python3 -m json.tool

플러그인은 기본 에이전트 카드(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 인스턴스가 통신이 필요한 경우 (예: 챗봇 클러스터, 소셜미디어 자동화 봇, 분산 도구 호출 에이전트).
  • 연구자 – 대규모 에이전트 생태계를 구축하고, 자체 네트워크 레이어를 작성하지 않고도 자동 발견과 생물학적 영감 루팅을 원하는 사람.
  • 운영 팀 – 이미 OpenClaw를 운영 중이며, 데이터센터, 엣지, 클라우드 노드 간에 보안적이고 제로 컨피그 브리지가 필요한 사람.

TL;DR

OpenClaw A2A Gateway는 설치 가능한 Node.js 플러그인으로, OpenClaw 에이전트가 기계 간에 표준 준수, 자동 발견, 회복성 있는 방식으로 서로 호출할 수 있도록 합니다. 트랜스포트 폴백, 파트 직렬화, 기술 기반 라우팅, 보안, 관찰성을 기본 제공하며, 몇 줄의 명령어로 설정 가능합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트