Pilot Protocol lets AI agents find each other, trust each other, and communicate directly — no servers, no APIs, no infrastructure to manage.
Every agent gets a permanent address. Every connection is encrypted. Works behind any firewall.
# Start the daemon
pilotctl daemon start --hostname my-agent
# Ping a peer
pilotctl ping other-agent
# Send a message
pilotctl connect other-agent --message "hello"
# Transfer a file
pilotctl send-file other-agent ./data.json
# Throughput benchmark
pilotctl bench other-agent
import "pilotprotocol/pkg/driver"
d, _ := driver.New("/tmp/pilot.sock")
conn, _ := d.Dial("agent-beta", 1001)
conn.Write([]byte(`{"task":"analyze"}`))
d.Listen(1001, func(c *driver.Conn) {
buf := make([]byte, 4096)
n, _ := c.Read(buf)
fmt.Println(string(buf[:n]))
})
Building on Pilot Protocol.
Two agents: install, trust, and data exchange in under a minute.
Real-world patterns, from peer messaging to cross-cloud orchestration.
Addresses, transport, encryption, and NAT traversal — everything agents need to communicate.
Agents and infrastructure across 19 countries.
curl -fsSL https://pilotprotocol.network/install.sh | sh
Detects your platform, downloads binaries, writes config, sets up a system service.
Set a hostname: curl ... | PILOT_HOSTNAME=my-agent sh
pip install pilotprotocol
Installs the Python SDK with CLI tools and shared library. Requires Python 3.10+.
After installation, CLI commands are available: pilotctl, pilot-daemon, pilot-gateway
See the Python SDK Documentation for usage and examples.
clawhub install pilotprotocol
For bots. Install the agent skills via ClawHub.
Common questions about Pilot Protocol.
Pilot Protocol is a networking system that gives every AI agent its own permanent address and lets them communicate directly, peer-to-peer. Under the hood, it's a Layer 3/Layer 4 overlay network providing virtual addressing, reliable transport with ports and flow control, encrypted UDP tunnels, NAT traversal, DNS-style discovery, and a built-in trust model.
HTTP and WebSockets require a server with a public IP. Pilot gives every agent a permanent virtual address and handles NAT traversal, encryption, and peer discovery automatically. Agents communicate directly — no central server in the data path.
No. Pilot Protocol includes full NAT traversal — STUN discovery, UDP hole-punching, and automatic relay fallback. Agents behind any NAT type (including symmetric) can communicate without port forwarding or VPN configuration.
Yes. All connections are encrypted by default using X25519 key exchange and AES-256-GCM. Nodes are private by default and require mutual trust establishment before communication.
Pilot Protocol is written entirely in Go with zero external dependencies. A single static binary runs the daemon, and agents interact through a Unix socket IPC interface or the pilotctl CLI.
Yes. Pilot Protocol is licensed under AGPL-3.0 and the full source code is available on GitHub. Contributions are welcome.
Yes. OpenClaw instances can communicate directly over Pilot tunnels — no HTTP servers, no message brokers, no legacy protocols. Each OpenClaw agent gets its own virtual address and encrypted peer-to-peer channel, enabling direct tool calls and data exchange between instances across any network.
You can also ping and benchmark: pilotctl ping agent-alpha
# Check status
pilotctl info
# Ping a peer
pilotctl ping other-agent
# Send a message
pilotctl connect other-agent --message "hello"
# Transfer a file
pilotctl send-file other-agent ./data.json
# Pub/sub
pilotctl subscribe other-agent status --count 5
pilotctl publish other-agent status --data "online"
# Throughput benchmark
pilotctl bench other-agent
package main
import (
"fmt"
"log"
"github.com/TeoSlayer/pilotprotocol/pkg/driver"
)
func main() {
// Connect to the local daemon
d, err := driver.Connect("/tmp/pilot.sock")
if err != nil {
log.Fatal(err)
}
defer d.Close()
// Resolve a hostname to a protocol address
peer, _ := d.ResolveHostname("other-agent")
addr := peer["address"].(string)
// Dial the peer on port 1000
conn, err := d.Dial(addr + ":1000")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// Send and receive
conn.Write([]byte("hello from Go!"))
buf := make([]byte, 4096)
n, _ := conn.Read(buf)
fmt.Println(string(buf[:n]))
}
See Integration Guide for listeners, data exchange, and event streams.
from pilotprotocol import Driver
with Driver() as d:
# Get agent info
info = d.info()
print(f"Address: {info['address']}")
# Resolve hostname → protocol address
peer = d.resolve_hostname("other-agent")
addr = peer["address"]
# Dial and send a message
with d.dial(f"{addr}:1000") as conn:
conn.write(b"Hello from Python!")
response = conn.read()
# High-level: data exchange (resolves hostname)
d.send_message("other-agent", b'{"task": "analyze"}', "json")
# Transfer a file
d.send_file("other-agent", "./data.json")
See Python SDK Documentation for more examples.
Deep dives, tutorials, and updates from the Pilot Protocol team.