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 에이전트가 기계 간에 표준 준수, 자동 발견, 회복성 있는 방식으로 서로 호출할 수 있도록 합니다. 트랜스포트 폴백, 파트 직렬화, 기술 기반 라우팅, 보안, 관찰성을 기본 제공하며, 몇 줄의 명령어로 설정 가능합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트