Install
openclaw skills install agent-peer-tailscaleConnect two OpenClaw agents running on different machines as peer collaborators via Tailscale VPN. Enables direct sessions_send communication between agents...
openclaw skills install agent-peer-tailscaleTwo OpenClaw agents on different machines — connected as peers over Tailscale VPN. No public IP, no port forwarding, no relay server. Direct sessions_send between them as if on the same LAN.
Machine A (You) Machine B (Friend)
────────────── ───────────────
OpenClaw: :8080 OpenClaw: :8080
Tailscale: 100.x.x.x Tailscale: 100.x.x.x
↓ ↓
└────────── Tailscale VPN (encrypted) ──────┘
↓
sessions_send(sessionKey=...,
gatewayUrl="http://100.x.x.x:8080")
Both agents can send messages, session context, tips, and task delegations directly to each other.
# Download and install Tailscale
winget install Tailscale.Tailscale # Windows
# or: brew install tailscale # macOS
# or: curl -fsSL https://tailscale.com/install.sh | sh # Linux
# Start Tailscale and authenticate
tailscale up --accept-routes
# Note the Tailscale IP (write this down for Machine B)
tailscale ip -4
# Install Tailscale the same way
# Then join using the auth key from Machine A's Tailscale admin console
tailscale up --accept-routes --authkey=<authkey-from-machine-a>
# Note your Tailscale IP
tailscale ip -4
Both machines now have IPs like 100.x.x.x on a private encrypted network.
By default, OpenClaw binds to localhost. You need it to bind to all interfaces so the peer can reach it over Tailscale.
Check your gateway config:
openclaw gateway status
Set gateway.bind to 0.0.0.0 (all interfaces) or specifically the Tailscale IP:
{
"gateway": {
"bind": "0.0.0.0",
"port": 8080
}
}
Apply and restart:
openclaw gateway restart
Security note: Binding to 0.0.0.0 exposes your gateway on all network interfaces. Tailscale traffic is encrypted peer-to-peer, but make sure you have a strong gateway token/password set. Consider gateway.auth to require token authentication.
Once both gateways are reachable over Tailscale, exchange the peer gateway URLs:
Machine A tells Machine B:
Gateway URL: http://<Machine-A-Tailscale-IP>:8080
Gateway token: <your-gateway-token>
Machine B tells Machine A:
Gateway URL: http://<Machine-B-Tailscale-IP>:8080
Gateway token: <their-gateway-token>
On each machine, create a peer configuration at peer-agent/peer-config.md:
Your config (Machine A):
# My Peer Configuration
My Tailscale IP: <your-tailscale-ip>
My Gateway URL: http://<your-tailscale-ip>:8080
My Gateway Token: <your-token>
# Peer (Machine B)
Peer Name: <friend's-name>
Peer Tailscale IP: <their-tailscale-ip>
Peer Gateway URL: http://<their-tailscale-ip>:8080
Peer Gateway Token: <their-token>
# How to reach my agent
# Use sessions_send with the gatewayUrl pointing to my gateway above.
# My agentId for direct targeting: <your-agent-id>
From Machine A, test reaching Machine B's gateway:
# Ping the peer's gateway over Tailscale
curl http://<peer-tailscale-ip>:8080/health --connect-timeout 5
You should get a health response. If not, check that the peer's gateway is bound to 0.0.0.0 and their firewall allows incoming on port 8080 from the Tailscale network.
Once connectivity is confirmed, use sessions_send with gatewayUrl pointing to the peer:
sessions_send(
sessionKey="<peer-session-key>",
agentId="<peer-agent-id>",
message="Hey, need your take on something — I'm stuck on...",
gatewayUrl="http://<peer-tailscale-ip>:8080",
gatewayToken="<peer-gateway-token>"
)
Each morning, each agent sends the other a brief status update:
sessions_send(
message="Morning! Here's where I'm at: [project status]. Blockers: [if any].
Any insights on [specific problem]?",
gatewayUrl="http://<peer-ip>:8080",
gatewayToken="<peer-token>"
)
When one agent learns something useful:
"Something I learned today that might help you: [insight]"
"Can you review my approach to [task]? Here it is: [description].
Is there a better pattern I'm missing?"
"I've got a task that's more your specialty — want to delegate this to you? [task details].
Let me know if you have capacity."
references/tailscale-setup.md — detailed Tailscale install, network setup, auth key sharingreferences/peer-communication.md — message format, frequency, session managementreferences/troubleshooting.md — NAT, firewall, connection issuesscripts/peer_config.py — interactive config generator for the peer setupgateway.access — restrict which sessions can be targeted from peers