Cross-device Agent-to-Agent communication bridge for OpenClaw, powered by Google's A2A Protocol.
Your AI agents shouldn't be islands. This bridge lets them talk to each other โ across devices, across networks, speaking a standard protocol.
AI agents are powerful individually, but collaboration unlocks their real potential. The problem? Most agent frameworks trap agents in single-machine silos.
OpenClaw A2A Bridge solves this by implementing Google's A2A protocol โ the emerging standard for agent interoperability โ on top of OpenClaw's powerful agent runtime. Now your agents can:
- ๐ Discover each other's capabilities automatically
- ๐ฌ Communicate via a standard JSON-RPC protocol
- ๐ Collaborate across devices on your Tailscale network (or any network)
- ๐ Stream responses in real-time via SSE
| Feature | Description |
|---|---|
| A2A Protocol Compliance | Full implementation of Agent Card discovery, JSON-RPC 2.0 messaging, and SSE streaming |
| OpenClaw Integration | Wraps any OpenClaw agent as an A2A-compliant service via the OpenResponses API |
| Cross-Device | Designed for multi-machine setups with Tailscale, but works on any network |
| Zero Config Discovery | Agents self-describe via /.well-known/agent.json โ no registry needed |
| Traffic Logging | All A2A traffic logged with rotation for debugging and monitoring |
| Health Checks | Built-in health check for all components (server, agent card, API) |
| Auto-Start | LaunchAgent (macOS) and systemd (Linux) support included |
| Interactive Client | CLI client with discovery, one-shot, streaming, and interactive modes |
โโโโโโโโโโโโโโโโโโโโโโโโ A2A Protocol โโโโโโโโโโโโโโโโโโโโโโโโ
โ Device A โ (JSON-RPC / HTTP) โ Device B โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโ โ โโโโโโ Tailscale / LAN โโโโโบ โ โโโโโโโโโโโโโโโโโโโ โ
โ โ A2A Server โ โ or any network โ โ A2A Server โ โ
โ โ (port 9100) โ โ โ โ (port 9100) โ โ
โ โโโโโโโโโโฌโโโโโโโโโ โ โ โโโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ โ โ
โ โผ โ โ โผ โ
โ โโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโ โ
โ โ OpenResponses โ โ โ โ OpenResponses โ โ
โ โ Adapter โ โ โ โ Adapter โ โ
โ โโโโโโโโโโฌโโโโโโโโโ โ โ โโโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ โ โ
โ โผ โ โ โผ โ
โ โโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโ โ
โ โ OpenClaw Agent โ โ โ โ OpenClaw Agent โ โ
โ โโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
The easiest way to set up A2A Bridge? Just send this message to your OpenClaw agent:
Send one of the following messages to your OpenClaw agent. It will read the full install document, then handle everything โ environment detection, dependencies, configuration, verification, auto-start, and remote agent connection.
Read https://raw.githubusercontent.com/Shy-Plus/openclaw-a2a-bridge/main/INSTALL_PROMPT.en.md and follow every instruction in it. Complete all 7 phases. Do not skip any step.
Agent A is already running? Send this to Agent B:
Read https://raw.githubusercontent.com/Shy-Plus/openclaw-a2a-bridge/main/INSTALL_PROMPT.en.md and follow every instruction. After setup, connect to the remote agent at http://{Agent A's IP}:9100 โ discover it and send a test message.
For 3+ agents, send to each new agent:
Read https://raw.githubusercontent.com/Shy-Plus/openclaw-a2a-bridge/main/INSTALL_PROMPT.en.md and follow every instruction. After setup, discover and connect to all known agents: {list their IPs}. Send a hello to each one.
ไธญๆ็ / Chinese:
้ ่ฏป https://raw.githubusercontent.com/Shy-Plus/openclaw-a2a-bridge/main/INSTALL_PROMPT.md ๅนถไธฅๆ ผๆ็ งๆๆกฃไธญ็ๆฏไธๆญฅๆง่กใๅฎๆๅ จ้จ 7 ไธช้ถๆฎต๏ผไธ่ฆ่ทณ่ฟไปปไฝๆญฅ้ชคใ
git clone https://github.com/Shy-Plus/openclaw-a2a-bridge.git
cd openclaw-a2a-bridge
pip install -r requirements.txtcp .env.example .env
# Edit .env โ at minimum, set A2A_PUBLIC_URL to your machine's IP# Start the server
./scripts/run_server.sh
# Or directly:
python -m src.server --port 9100 --public-url http://YOUR_IP:9100That's it. Your agent is now discoverable via A2A at http://YOUR_IP:9100/.well-known/agent.json.
python -m src.client --target http://remote-agent:9100 --discover-only๐ค Agent: Remote Agent
Version: 1.0.0
Skills (3):
โข General Conversation: Engage in natural conversation
โข Creative Assistant: Help with creative tasks
โข Frontend Development: React, Next.js, CSS, UI/UX
python -m src.client --target http://remote-agent:9100 -m "Explain the A2A protocol"python -m src.client --target http://remote-agent:9100python -m src.client --target http://remote-agent:9100 -m "Tell me a story" --streampython -m src.health_check --url http://localhost:9100โ
http://localhost:9100 โ HEALTHY
โ
A2A Server: 12ms
โ
Agent Card: 8ms โ My Agent v1.0.0 (3 skills)
โ
OpenResponses API: 45ms
# Start servers on both machines first, then:
python examples/demo.py --local http://agent-a:9100 --remote http://agent-b:9100| Variable | Default | Description |
|---|---|---|
A2A_GATEWAY_TOKEN |
Auto-detect from openclaw.json |
Gateway shared auth credential (token or password) |
Note: if your OpenClaw gateway uses
gateway.auth.mode="password", the bridge now auto-detectsgateway.auth.passwordfrom~/.openclaw/openclaw.jsonwhenA2A_GATEWAY_TOKENis not set. |A2A_LOCAL_HOST|0.0.0.0| Server bind address | |A2A_LOCAL_PORT|9100| Server port | |A2A_LOCAL_API|http://localhost:18789/v1/responses| OpenResponses API URL | |A2A_PUBLIC_URL|http://{host}:{port}| URL advertised in Agent Card | |A2A_REMOTE_HOST| โ | Remote agent IP (for multi-agent) | |A2A_REMOTE_PORT|9100| Remote agent port | |A2A_MODEL|openclaw:main| Model for OpenResponses API | |A2A_AGENT_CARD|cards/agent_card.json| Agent card file path | |A2A_TRAFFIC_LOG|~/.openclaw/logs/a2a-traffic.log| Traffic log path |
The Agent Card (cards/agent_card.json) defines your agent's identity and capabilities. Customize it to describe what your agent can do:
{
"name": "My Agent",
"description": "What this agent does",
"skills": [
{
"id": "skill_id",
"name": "Skill Name",
"description": "What this skill does",
"tags": ["tag1"],
"examples": ["Example prompt"]
}
]
}| A2A Feature | Status | Notes |
|---|---|---|
| Agent Card (Discovery) | โ | GET /.well-known/agent.json |
| JSON-RPC 2.0 | โ | Full request/response cycle |
| Synchronous messaging | โ | Standard request โ response |
| SSE Streaming | โ | Real-time token streaming |
| Multi-skill declaration | โ | Via Agent Card skills array |
| Bearer Token Auth | โ | For OpenResponses API |
| Task management | โ | In-memory task store |
openclaw-a2a-bridge/
โโโ src/
โ โโโ __init__.py # Package init
โ โโโ server.py # A2A server (Starlette + uvicorn)
โ โโโ client.py # A2A client (discovery + messaging)
โ โโโ adapter.py # OpenResponses โ A2A bridge
โ โโโ config.py # Centralized configuration
โ โโโ health_check.py # Component health checker
โโโ cards/
โ โโโ agent_card.json # Primary agent card (customize this)
โ โโโ remote_agent_card.json # Example remote agent card
โโโ scripts/
โ โโโ run_server.sh # Start/stop/restart/status
โ โโโ install_service.sh # macOS LaunchAgent installer
โโโ examples/
โ โโโ demo.py # Multi-agent collaboration demo
โ โโโ collaborative_workflow.py # Pipeline workflow example
โโโ docs/
โ โโโ architecture.md # Detailed architecture docs
โ โโโ setup-guide.md # Step-by-step setup guide
โ โโโ troubleshooting.md # Common issues & solutions
โโโ .env.example # Environment variable template
โโโ requirements.txt # Python dependencies
โโโ setup.py # pip install support
โโโ LICENSE # MIT License
./scripts/install_service.sh # Install
./scripts/install_service.sh --uninstall # RemoveSee docs/setup-guide.md for systemd setup.
Contributions welcome! Here's how:
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Commit changes:
git commit -m "feat: add my feature" - Push:
git push origin feat/my-feature - Open a Pull Request
Please follow Conventional Commits for commit messages.
MIT License โ use it however you want.
- Google A2A Protocol โ The Agent-to-Agent protocol specification
- a2a-sdk โ Official Python SDK for A2A
- OpenClaw โ The AI agent runtime this bridge extends
- Tailscale โ Mesh VPN for secure cross-device connectivity
Built by Shy's Lab ๐ช
Making agents talk to each other, one bridge at a time.