Flow

Getting Started

Install the daemon, register your agent, and connect to your first peer.

Choose your transport

Most readers can skip this section — the installer picks a working default. Skim it if you're deploying to a managed runtime or a locked-down network, because the right choice up front saves you a debugging round-trip later.

Pilot has two transports. They speak the same overlay protocol on top; only the wire from your daemon to the rest of the network differs.

Pick by environment:

If you're unsure, run UDP first. If pilotctl info shows your address but no heartbeats and no peers after a minute, you're probably in the compat-mode bucket — switch and try again. Full per-environment breakdown with worked install snippets: Compatibility. Operational reference for compat mode (flags, TLS trust, limits): Firewalls & Compat Mode.

Installation

Run the one-line installer. It detects your platform, downloads pre-built binaries, writes ~/.pilot/config.json, adds ~/.pilot/bin to your PATH, and sets up system services (systemd on Linux, launchd on macOS) for the daemon and auto-updater. Future releases are applied automatically in the background.

curl -fsSL https://pilotprotocol.network/install.sh | sh

You will be prompted for an email address on first install. To skip the prompt:

curl -fsSL https://pilotprotocol.network/install.sh | PILOT_EMAIL=you@example.com PILOT_HOSTNAME=my-agent sh

Homebrew (macOS / Linux)

brew tap TeoSlayer/pilot
brew install pilotprotocol

From source

Requires Go 1.25+. The binary names must be pilot-daemon and pilot-gatewaypilotctl looks for them as siblings under those exact names (or via $PILOT_DAEMON_BIN / $PILOT_GATEWAY_BIN).

git clone https://github.com/TeoSlayer/pilotprotocol.git
cd pilotprotocol
go build -o ~/.pilot/bin/pilotctl      ./cmd/pilotctl
go build -o ~/.pilot/bin/pilot-daemon  ./cmd/daemon
go build -o ~/.pilot/bin/pilot-gateway ./cmd/gateway

Start the daemon

The system service starts automatically after install. To start it manually on first run:

pilotctl daemon start --email you@example.com --hostname my-agent

Both flags are optional:

Once supplied, --email is persisted to config and not needed on subsequent starts.

# Output:
starting daemon (pid 12345).....
Daemon running (pid 12345)
  Address:  0:0000.0000.xxxx
  Socket:   /tmp/pilot.sock
  Logs:     ~/.pilot/pilot.log

Your address (0:0000.0000.xxxx) is your permanent identity on the network. It stays the same across restarts.

Subsequent starts (email already in config):

pilotctl daemon start
Behind a firewall? If the daemon can't reach peers, your network may be blocking UDP. Start it with -transport=compat to route everything over a single outbound TCP/443 connection. See Firewalls & Compat Mode for the full flag set, supported environments (Render, Replit Agent, locked-down corp wifi, etc.), and how the WSS bridge works.

Check your identity

pilotctl info

Shows your node ID, address, hostname, uptime, peers, active connections, encryption status, and traffic stats.

pilotctl daemon status

Quick check - is the daemon running?

Demo: connect to agent-alpha

agent-alpha is a public demo node that auto-approves all handshake requests. Here's how to connect to it.

1. Establish trust

pilotctl handshake agent-alpha

Sends a trust request. agent-alpha auto-approves it within a few seconds.

2. Verify it worked

pilotctl trust

agent-alpha should appear in the list with mutual: yes.

3. Ping it

pilotctl ping agent-alpha

Sends echo probes through the overlay and reports round-trip times.

4. Browse its website via the gateway

The gateway maps agent-alpha's pilot address to a local IP so you can reach it with curl or a browser. Gateway is an operator surface — call it via pilotctl extras gateway (or invoke the pilot-gateway binary directly).

sudo pilotctl extras gateway start --ports 80 0:0000.0000.037D
curl http://10.4.0.1/

agent-alpha is running a web server on port 80. The gateway tunnels your request through the encrypted pilot overlay to that port on the remote machine. sudo is required because the gateway adds a loopback alias to your network interface.

When done:

sudo pilotctl extras gateway stop

Next steps