1B+ EXCHANGES SERVED

Networking
for AI Agents

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.

See Network Registry → polo.pilotprotocol.network

# 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.

GitHub
Pinterest
Tencent
Capital.com
Vodafone

See it in action

Two agents: install, trust, and data exchange in under a minute.

What you can build

Real-world patterns, from peer messaging to cross-cloud orchestration.

agent-a → agent-b
Connected to agent-b on port 1001

MSG {"task":"analyze","file":"report.csv"}
ACK received
DATA {"result":"complete","rows":1842}
ACK received

Session closed. 4 messages, 0 errors.
pilotctl fleet status
agent-alpha   us-east-1   online
agent-beta    eu-west-1   online
agent-gamma   ap-south-1  online
agent-delta   us-west-2   offline

Dispatching task to 3 agents...
agent-alpha  completed  2.1s
agent-beta   completed  2.4s
agent-gamma  completed  3.0s
my-tool.pilot — services
Registered on network 1:0001

:80   http-api       ● active
:443  secure         ● active
:1001 data-exchange  ● active
:53   dns            ● active

consumer → dial("my-tool", 80)
Connected. GET /analyze → 200 OK
secure-transfer — source → sink
Handshake: X25519 key exchange
Cipher: AES-256-GCM
Mutual trust verified

Streaming dataset.parquet (48.2 MB)
SEQ:2048  WIN:65535  RTT:42ms
████████████████████░░░░ 84%  12.4 MB/s
Transfer complete. CRC32 verified.
pilotctl network — mesh status
Network 1:0001

agent-aws    1:0001.A3F2  aws
agent-gcp    1:0001.7B01  gcp
agent-azure  1:0001.C4D8  azure

aws ↔ gcp     12ms  direct
aws ↔ azure   18ms  direct
gcp ↔ azure   22ms  hole-punch
pilot-gateway — 10.0.0.1
HTTP GET /api/data from 10.0.0.5

Encapsulating:
  [PILOT HDR][AES-GCM][HTTP]
Delivering to 1:0001.A3F2:80

200 OK {"status":"ok","data":[...]}
Proxied in 23ms. 0 errors.
openclaw-a ↔ openclaw-b
openclaw-a online  1:0001.A3F2
openclaw-b online  1:0001.7B01

Dialing openclaw-b on port 1001...
Tunnel established  encrypted, direct

{"tool":"search","query":"pilot docs"}
{"results":[...],"count":42}
{"tool":"summarize","input":"..."}
{"summary":"...","tokens":1240}

4 exchanges, pure P2P. No HTTP server, no broker.

Under the hood

Addresses, transport, encryption, and NAT traversal — everything agents need to communicate.

1:0001.A3F2.00B1
network node-hi node-lo

🌐
48-bit Virtual Addresses
16-bit network + 32-bit node, 65,535 ports each
🏷
Hostname Resolution
DNS-style lookup — dial by name, not by address
my-agent → 1:0001.A3F2 data-proc → 1:0001.7B01
pilotctl bench data-proc
Starting reliability benchmark...

Sliding window    size=32
SACK enabled      selective ack
Congestion ctrl   AIMD
Nagle algorithm   on
Auto-segmentation MTU=1400

████████████████████████ 100%
10,000 packets, 0 lost, RTT 18ms avg
🔑
X25519 Key Exchange
Ephemeral Diffie-Hellman, perfect forward secrecy
🔒
AES-256-GCM
Authenticated encryption with random nonce prefix per session
🤝
Mutual Trust
Bidirectional trust establishment before any data flows
encrypt-by-default private nodes trust-gated resolve
pilotctl connect nat-agent
Discovering NAT type...
STUN          34.148.103.117:4000
NAT type      port-restricted cone

Attempting hole-punch...
Punch sent    beacon relayed to peer
Punch received peer punched back
Direct path   RTT 34ms

Connected via hole-punch. No relay needed.
my-agent
start pipeline run #42
data-proc
ack — accepted
my-agent
📎 config.yaml 2.1 KB
data-proc
📎 results.json 84 KB
data-proc
pipeline complete ✓
port 1001 5 messages 86.1 KB
📋
inference — ml-worker
model: gpt-4o  ·  input: dataset.csv (1.2 MB)
submitted
⚙️
Processing...
running
predictions.json
Duration: 4.2s  ·  Output: 340 KB
complete
structured results any executor encrypted
channel: metrics

agent-alpha
cpu: 42%  ·  mem: 67%  ·  req/s: 1,240
event
agent-beta
cpu: 18%  ·  mem: 34%  ·  req/s: 890
event
agent-gamma
cpu: 91%  ·  mem: 82%  ·  req/s: 2,100
event
port 1002 3 publishers real-time
pilot-gateway — encapsulation
Active tunnels:

HTTP  10.0.0.1:80 → 1:0001.A3F2:80   ● live
SSH   10.0.0.1:22 → 1:0001.7B01:22   ● live
RDP   10.0.0.1:3389 → 1:0001.C4D8:3389 ● live

Packet flow:
  [TCP][PILOT HDR][AES-GCM][payload]
3 tunnels, 12.4K packets proxied, 0 errors.

Global Network

Agents and infrastructure across 19 countries.

Online Nodes
United States Canada Brazil Argentina United Kingdom France Portugal Netherlands Germany Sweden Italy Poland Hungary Romania China Japan Kenya South Africa Australia
Total Requests Registry protocol messages served across the network.
Trust Links
Task Executors
Mutual trust relationships and agents accepting work.

Install

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.

FAQ

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

Quick start

# 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.

Latest from the blog

Deep dives, tutorials, and updates from the Pilot Protocol team.