<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 4.0.1) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-teodor-pilot-protocol-01" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Pilot Protocol">Pilot Protocol: An Overlay Network for Autonomous Agent Communication</title>

    <author initials="C." surname="Teodor" fullname="Calin Teodor">
      <organization>Vulture Labs</organization>
      <address>
        <email>teodor@vulturelabs.com</email>
      </address>
    </author>

    <date year="2026" month="April" day="06"/>

    <area>Internet</area>
    <workgroup>Independent Submission</workgroup>
    

    <abstract>


<?line 63?>

<t>This document specifies Pilot Protocol, an overlay network that provides
autonomous AI agents with virtual addresses, port-based service
multiplexing, reliable and unreliable transport, NAT traversal, encrypted
tunnels, and a bilateral trust model. Pilot Protocol operates as a
network and transport layer beneath application-layer agent protocols such
as A2A and MCP. It encapsulates virtual packets in UDP datagrams for
transit over the existing Internet. The protocol gives agents first-class
network citizenship --- stable identities, reachable addresses, and
standard transport primitives --- independent of their underlying network
infrastructure.</t>



    </abstract>



  </front>

  <middle>


<?line 76?>

<section anchor="introduction"><name>Introduction</name>

<t>AI agents are autonomous software entities that reason, plan, and execute
tasks. As agents become more prevalent, they need to communicate with each
other across heterogeneous network environments: cloud, edge, behind NAT,
and across organizational boundaries. Current agent protocols (MCP, A2A)
operate at the application layer over HTTP, assuming agents have stable,
reachable endpoints. This assumption fails for a large class of
deployments.</t>

<t>Pilot Protocol is an overlay network stack that gives agents network-layer
primitives: virtual addresses, ports, reliable streams, unreliable
datagrams, NAT traversal, encrypted tunnels, name resolution, and a
bilateral trust model. It is positioned as the network/transport layer
beneath application-layer agent protocols --- analogous to how TCP/IP sits
beneath HTTP.</t>

<section anchor="design-principles"><name>Design Principles</name>

<t>The protocol is designed around five principles:</t>

<t><list style="numbers" type="1">
  <t><strong>Agents are first-class network citizens.</strong> Every agent gets a unique
virtual address, can bind ports, listen for connections, and be reached
by any authorized peer.</t>
  <t><strong>The network boundary is the trust boundary.</strong> Network membership
serves as the primary access control mechanism. Joining a network
requires meeting its rules.</t>
  <t><strong>Transport agnosticism.</strong> The protocol provides reliable streams
(TCP-equivalent) and unreliable datagrams (UDP-equivalent). Anything
that runs on TCP/IP can run on the overlay.</t>
  <t><strong>Minimize the protocol, maximize the surface.</strong> The protocol defines
addressing, packets, and transport. Application-level message formats
are layers built on top.</t>
  <t><strong>Practical over pure.</strong> The protocol uses a centralized registry for
address assignment and a centralized beacon for NAT traversal. Full
decentralization is a future goal, not a prerequisite.</t>
</list></t>

</section>
<section anchor="relationship-to-existing-protocols"><name>Relationship to Existing Protocols</name>

<t>Pilot Protocol operates at the network and transport layers of the overlay
stack. It is complementary to, not competitive with, application-layer
agent protocols:</t>

<t><list style="symbols">
  <t>A2A defines what agents say to each other. Pilot defines how they reach
each other.</t>
  <t>MCP defines agent-to-tool interfaces. Pilot provides the transport
substrate.</t>
  <t>QUIC <xref target="RFC9000"/> is a potential underlay transport. Pilot could run over
QUIC instead of raw UDP.</t>
  <t>LISP <xref target="RFC9300"/> provides conceptual precedent for identity/locator
separation.</t>
  <t>VXLAN <xref target="RFC7348"/> and GENEVE <xref target="RFC8926"/> are overlay encapsulation
precedents at the data link layer. Pilot operates at the network layer.</t>
  <t>AGTP <xref target="I-D.hood-independent-agtp"/> and AIP <xref target="I-D.prakash-aip"/> address
agent transport and identity at the application layer; Pilot provides
the network substrate beneath them.</t>
</list></t>

<t>The CATALIST coordination effort <xref target="I-D.yao-catalist-problem-space-analysis"/>
at IETF 125 surveyed the agent protocol landscape and is scoping what
IETF should standardize in this space.</t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<dl>
  <dt>Agent:</dt>
  <dd>
    <t>An autonomous software entity capable of reasoning, planning, and
executing tasks without continuous human supervision.</t>
  </dd>
  <dt>Daemon:</dt>
  <dd>
    <t>The local Pilot Protocol process that implements the virtual network
stack. It maintains a UDP tunnel, handles routing, session management,
and encryption. Analogous to a virtual NIC.</t>
  </dd>
  <dt>Driver:</dt>
  <dd>
    <t>An SDK or library that agents import to communicate with the local
daemon over IPC. Provides the application-facing API (listen, dial,
read, write, close).</t>
  </dd>
  <dt>Registry:</dt>
  <dd>
    <t>A centralized service that assigns virtual addresses, maintains the
address-to-locator mapping table, manages network membership, and stores
public keys.</t>
  </dd>
  <dt>Beacon:</dt>
  <dd>
    <t>A service that provides NAT traversal coordination: endpoint discovery
(STUN-like), hole-punch coordination, and relay fallback.</t>
  </dd>
  <dt>Virtual Address:</dt>
  <dd>
    <t>A 48-bit overlay address assigned to an agent, independent of its
underlying IP address.</t>
  </dd>
  <dt>Trust Pair:</dt>
  <dd>
    <t>A bilateral trust relationship between two agents, established through
explicit mutual consent.</t>
  </dd>
</dl>

</section>
<section anchor="architecture-overview"><name>Architecture Overview</name>

<section anchor="protocol-stack"><name>Protocol Stack</name>

<t>Pilot Protocol is a five-layer overlay stack:</t>

<texttable>
      <ttcol align='left'>Layer</ttcol>
      <ttcol align='left'>Function</ttcol>
      <c>Application</c>
      <c>HTTP, RPC, custom protocols (above Pilot)</c>
      <c>Session</c>
      <c>Reliable streams, unreliable datagrams</c>
      <c>Network</c>
      <c>Virtual addresses, ports, routing</c>
      <c>Tunnel</c>
      <c>NAT traversal, UDP encapsulation, encryption</c>
      <c>Physical</c>
      <c>Real Internet (IP/TCP/UDP)</c>
</texttable>

<t>The overlay handles addressing, routing, and session management. The
underlying Internet handles physical delivery.</t>

</section>
<section anchor="component-roles"><name>Component Roles</name>

<dl>
  <dt>Registry:</dt>
  <dd>
    <t>Assigns virtual addresses, maintains address table, manages networks
and trust pairs, relays handshake requests for private nodes. Runs on
TCP. The only globally reachable component.</t>
  </dd>
  <dt>Beacon:</dt>
  <dd>
    <t>Provides STUN-like endpoint discovery, hole-punch coordination, and
relay fallback for symmetric NAT. Runs on UDP.</t>
  </dd>
  <dt>Daemon:</dt>
  <dd>
    <t>Core protocol implementation running on each participating machine.
Maintains a single UDP socket, multiplexes all virtual connections,
handles tunnel encryption, and exposes a local IPC socket for drivers.</t>
  </dd>
  <dt>Driver:</dt>
  <dd>
    <t>Client SDK that agents import. Connects to the local daemon via Unix
domain socket. Implements standard network interfaces (listeners,
connections).</t>
  </dd>
  <dt>Nameserver:</dt>
  <dd>
    <t>DNS equivalent for the overlay. Runs as a service on virtual port 53,
resolving human-readable names to virtual addresses.</t>
  </dd>
  <dt>Gateway:</dt>
  <dd>
    <t>Bridge between the overlay and standard IP. Maps virtual addresses to
local IPs, allowing unmodified TCP programs to reach agents.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="addressing"><name>Addressing</name>

<section anchor="virtual-address-format"><name>Virtual Address Format</name>

<t>Addresses are 48 bits, split into two fields:</t>

<figure><artwork><![CDATA[
 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Network ID (16 bits)     |       Node ID (32 bits) ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~             Node ID (continued)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<dl>
  <dt>Network ID (16 bits):</dt>
  <dd>
    <t>Identifies the network or topic. Network 0 is the global backbone; all
nodes are members by default. Networks 1-65534 are created for specific
purposes. Network 65535 is reserved.</t>
  </dd>
  <dt>Node ID (32 bits):</dt>
  <dd>
    <t>Identifies the individual agent within a network. Supports over 4
billion nodes per network.</t>
  </dd>
</dl>

</section>
<section anchor="text-representation"><name>Text Representation</name>

<t>Addresses are written as <spanx style="verb">N:XXXX.YYYY.ZZZZ</spanx> where:</t>

<t><list style="symbols">
  <t><spanx style="verb">N</spanx> is the network ID in decimal</t>
  <t><spanx style="verb">XXXX.YYYY.ZZZZ</spanx> is the node ID as three groups of 4 hexadecimal digits</t>
</list></t>

<t>Examples:</t>

<t><list style="symbols">
  <t><spanx style="verb">0:0000.0000.0001</spanx> --- Node 1 on the backbone</t>
  <t><spanx style="verb">1:00A3.F291.0004</spanx> --- A node on network 1</t>
</list></t>

</section>
<section anchor="socket-addresses"><name>Socket Addresses</name>

<t>A socket address appends a port: <spanx style="verb">1:00A3.F291.0004:1000</spanx></t>

</section>
<section anchor="special-addresses"><name>Special Addresses</name>

<texttable>
      <ttcol align='left'>Address</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">0:0000.0000.0000</spanx></c>
      <c>Unspecified / wildcard</c>
      <c><spanx style="verb">0:0000.0000.0001</spanx></c>
      <c>Registry</c>
      <c><spanx style="verb">0:0000.0000.0002</spanx></c>
      <c>Beacon</c>
      <c><spanx style="verb">0:0000.0000.0003</spanx></c>
      <c>Nameserver</c>
      <c><spanx style="verb">X:FFFF.FFFF.FFFF</spanx></c>
      <c>Broadcast on network X</c>
</texttable>

</section>
</section>
<section anchor="ports"><name>Ports</name>

<section anchor="port-ranges"><name>Port Ranges</name>

<t>Virtual ports are 16-bit unsigned integers (0-65535):</t>

<texttable>
      <ttcol align='left'>Range</ttcol>
      <ttcol align='left'>Purpose</ttcol>
      <c>0-1023</c>
      <c>Reserved / well-known</c>
      <c>1024-49151</c>
      <c>Registered services</c>
      <c>49152-65535</c>
      <c>Ephemeral / dynamic</c>
</texttable>

</section>
<section anchor="well-known-ports"><name>Well-Known Ports</name>

<texttable>
      <ttcol align='left'>Port</ttcol>
      <ttcol align='left'>Service</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Ping</c>
      <c>Liveness checks</c>
      <c>1</c>
      <c>Control</c>
      <c>Daemon-to-daemon control</c>
      <c>7</c>
      <c>Echo</c>
      <c>Echo service (testing)</c>
      <c>53</c>
      <c>Name resolution</c>
      <c>Nameserver queries</c>
      <c>80</c>
      <c>Agent HTTP</c>
      <c>Web endpoints</c>
      <c>443</c>
      <c>Secure channel</c>
      <c>X25519 + AES-256-GCM</c>
      <c>444</c>
      <c>Trust handshake</c>
      <c>Peer trust negotiation</c>
      <c>1000</c>
      <c>Standard I/O</c>
      <c>Text stream between agents</c>
      <c>1001</c>
      <c>Data exchange</c>
      <c>Typed frames (text, binary, JSON, file)</c>
      <c>1002</c>
      <c>Event stream</c>
      <c>Pub/sub with topic filtering</c>
      <c>1003</c>
      <c>Task submission</c>
      <c>Task lifecycle and reputation scoring</c>
</texttable>

</section>
</section>
<section anchor="packet-format"><name>Packet Format</name>

<section anchor="header-layout"><name>Header Layout</name>

<t>The fixed packet header is 34 bytes:</t>

<figure title="Pilot Protocol Packet Header (34 bytes)" anchor="fig-header"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ver  | Flags |   Protocol    |         Payload Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Source Network ID          |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     Source Node ID            |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Destination Network ID       |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   Destination Node ID         |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Source Port             |     Destination Port          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Sequence Number                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Window (segments)        |        Checksum (hi)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Checksum (lo)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>All multi-byte fields are in network byte order (big-endian).</t>

</section>
<section anchor="field-definitions"><name>Field Definitions</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Version</c>
      <c>0</c>
      <c>4 bits</c>
      <c>Protocol version. Current: 1</c>
      <c>Flags</c>
      <c>0</c>
      <c>4 bits</c>
      <c>SYN (0x1), ACK (0x2), FIN (0x4), RST (0x8)</c>
      <c>Protocol</c>
      <c>1</c>
      <c>1 byte</c>
      <c>Transport type (see <xref target="protocol-types"/>)</c>
      <c>Payload Length</c>
      <c>2</c>
      <c>2 bytes</c>
      <c>Payload length in bytes (max 65535)</c>
      <c>Source Network</c>
      <c>4</c>
      <c>2 bytes</c>
      <c>Source network ID</c>
      <c>Source Node</c>
      <c>6</c>
      <c>4 bytes</c>
      <c>Source node ID</c>
      <c>Dest Network</c>
      <c>10</c>
      <c>2 bytes</c>
      <c>Destination network ID</c>
      <c>Dest Node</c>
      <c>12</c>
      <c>4 bytes</c>
      <c>Destination node ID</c>
      <c>Source Port</c>
      <c>16</c>
      <c>2 bytes</c>
      <c>Source port</c>
      <c>Dest Port</c>
      <c>18</c>
      <c>2 bytes</c>
      <c>Destination port</c>
      <c>Sequence Number</c>
      <c>20</c>
      <c>4 bytes</c>
      <c>Byte offset of this segment</c>
      <c>Ack Number</c>
      <c>24</c>
      <c>4 bytes</c>
      <c>Next expected byte from peer</c>
      <c>Window</c>
      <c>28</c>
      <c>2 bytes</c>
      <c>Advertised receive window in segments</c>
      <c>Checksum</c>
      <c>30</c>
      <c>4 bytes</c>
      <c>CRC32 over header + payload</c>
</texttable>

</section>
<section anchor="protocol-types"><name>Protocol Types</name>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Stream</c>
      <c>Reliable, ordered delivery (TCP-like)</c>
      <c>0x02</c>
      <c>Datagram</c>
      <c>Unreliable, unordered (UDP-like)</c>
      <c>0x03</c>
      <c>Control</c>
      <c>Internal control messages</c>
</texttable>

</section>
<section anchor="flag-definitions"><name>Flag Definitions</name>

<texttable>
      <ttcol align='left'>Bit</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>SYN</c>
      <c>Synchronize --- initiate connection</c>
      <c>1</c>
      <c>ACK</c>
      <c>Acknowledge --- confirm receipt</c>
      <c>2</c>
      <c>FIN</c>
      <c>Finish --- close connection</c>
      <c>3</c>
      <c>RST</c>
      <c>Reset --- abort connection</c>
</texttable>

</section>
<section anchor="checksum-calculation"><name>Checksum Calculation</name>

<t>The checksum is computed as follows:</t>

<t><list style="numbers" type="1">
  <t>Set the 4-byte checksum field to zero.</t>
  <t>Compute CRC32 (IEEE polynomial) over the entire header (34 bytes with
zeroed checksum field) concatenated with the payload bytes.</t>
  <t>Write the resulting 32-bit value into the checksum field in big-endian
byte order.</t>
</list></t>

<t>Receivers <bcp14>MUST</bcp14> verify the checksum and discard packets with incorrect
values.</t>

<t>Note: CRC32 detects accidental corruption but does not provide
cryptographic integrity. Tamper resistance is provided by tunnel-layer
encryption (<xref target="tunnel-encryption"/>).</t>

</section>
</section>
<section anchor="tunnel-encapsulation"><name>Tunnel Encapsulation</name>

<t>Virtual packets are encapsulated in UDP datagrams for transit over the
real Internet. Four frame types are defined, distinguished by a 4-byte
magic value.</t>

<section anchor="plaintext-frame-pilt"><name>Plaintext Frame (PILT)</name>

<figure><artwork><![CDATA[
+------+------+------+------+---...---+---...---+
| 0x50 | 0x49 | 0x4C | 0x54 | Header  | Payload |
+------+------+------+------+---...---+---...---+
    P      I      L      T     34 bytes  variable
]]></artwork></figure>

<t>The magic bytes 0x50494C54 ("PILT") indicate an unencrypted Pilot
Protocol frame. The header and payload follow immediately.</t>

</section>
<section anchor="tunnel-encryption"><name>Encrypted Frame (PILS)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+----------+---...---+
| 0x50 | 0x49 | 0x4C | 0x53 | SenderID |  Nonce   |Ciphertext
+------+------+------+------+----------+----------+---...---+
    P      I      L      S    4 bytes    12 bytes   variable
]]></artwork></figure>

<t>The magic bytes 0x50494C53 ("PILS") indicate an encrypted frame.</t>

<dl>
  <dt>SenderID:</dt>
  <dd>
    <t>4-byte Node ID of the sending daemon, in big-endian. Used by the
receiver to look up the shared AES-256-GCM key for this peer.</t>
  </dd>
  <dt>Nonce:</dt>
  <dd>
    <t>12-byte GCM nonce. See <xref target="nonce-management"/> for construction.</t>
  </dd>
  <dt>Ciphertext:</dt>
  <dd>
    <t>The Pilot Protocol header and payload, encrypted with AES-256-GCM
<xref target="RFC5116"/>. The ciphertext includes a 16-byte authentication tag
appended by GCM.</t>
  </dd>
</dl>

<t>The encryption key is derived from an X25519 <xref target="RFC7748"/> ECDH exchange
between the two daemons (see <xref target="key-exchange"/>), processed through
HKDF <xref target="RFC5869"/> (see <xref target="hkdf-derivation"/>).</t>

</section>
<section anchor="key-exchange"><name>Key Exchange Frame (PILK)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+---...---+
| 0x50 | 0x49 | 0x4C | 0x4B | SenderID | X25519  |
+------+------+------+------+----------+---...---+
    P      I      L      K    4 bytes    32 bytes
]]></artwork></figure>

<t>Anonymous key exchange. The sender transmits its ephemeral X25519 public
key (32 bytes, per <xref target="RFC7748"/>). Both sides compute the ECDH shared
secret and derive an AES-256-GCM key.</t>

<t>PILK provides confidentiality but not authentication. An active attacker
can perform a man-in-the-middle attack by substituting their own public
key. See <xref target="authenticated-key-exchange"/> for the authenticated variant.</t>

</section>
<section anchor="authenticated-key-exchange"><name>Authenticated Key Exchange Frame (PILA)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+---------+---------+---------+
| 0x50 | 0x49 | 0x4C | 0x41 | SenderID | X25519  | Ed25519 |  Sig   |
+------+------+------+------+----------+---------+---------+---------+
    P      I      L      A    4 bytes   32 bytes  32 bytes  64 bytes
]]></artwork></figure>

<t>Authenticated key exchange. In addition to the X25519 public key, the
sender includes its Ed25519 public key (32 bytes, per <xref target="RFC8032"/>) and a
64-byte Ed25519 signature.</t>

<t>The signature covers the concatenation of:</t>

<t><list style="numbers" type="1">
  <t>The ASCII string "auth" (4 bytes)</t>
  <t>The sender's Node ID (4 bytes, big-endian)</t>
  <t>The X25519 public key (32 bytes)</t>
</list></t>

<t>The receiver verifies the signature using the sender's Ed25519 public key,
which it obtains from the registry and cross-checks against the claimed
Node ID. This binds the ephemeral X25519 key to the sender's persistent
identity, preventing man-in-the-middle attacks.</t>

<t>Daemons with persistent Ed25519 identities <bcp14>SHOULD</bcp14> use PILA. Daemons
without persistent identities fall back to PILK.</t>

</section>
<section anchor="nat-punch-frame-pilp"><name>NAT Punch Frame (PILP)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+
| 0x50 | 0x49 | 0x4C | 0x50 | SenderID |
+------+------+------+------+----------+
    P      I      L      P    4 bytes
]]></artwork></figure>

<t>The magic bytes 0x50494C50 ("PILP") indicate a NAT punch frame.</t>

<dl>
  <dt>SenderID:</dt>
  <dd>
    <t>4-byte Node ID of the sending daemon, in big-endian.</t>
  </dd>
</dl>

<t>The PILP frame carries no overlay payload. Its sole purpose is to create
a NAT mapping by sending a UDP packet to the peer's observed endpoint
during hole-punch coordination (<xref target="hole-punching"/>). Receivers silently
discard PILP frames after recording the sender's source address for
subsequent direct communication.</t>

</section>
</section>
<section anchor="session-layer"><name>Session Layer</name>

<section anchor="connection-state-machine"><name>Connection State Machine</name>

<figure title="Connection State Machine" anchor="fig-state-machine"><artwork><![CDATA[
                         Dial()
    CLOSED -----------> SYN_SENT
      ^                    |
      |               SYN-ACK recv
      |                    |
      |                    v
      |              ESTABLISHED <--- Listen() + SYN recv
      |                    |
      |               Close()
      |                    |
      |                    v
      |               FIN_WAIT
      |                    |
      |                ACK recv
      |                    |
      |                    v
      |               TIME_WAIT
      |                    |
      |               10s timeout
      |                    |
      +--------------------+
]]></artwork></figure>

</section>
<section anchor="three-way-handshake"><name>Three-Way Handshake</name>

<t>Connection establishment uses a three-way handshake:</t>

<figure><artwork><![CDATA[
Initiator                          Responder
    |                                  |
    |-------- SYN seq=X ------------->|
    |                                  |
    |<--- SYN+ACK seq=Y ack=X+1 -----|
    |                                  |
    |-------- ACK ack=Y+1 ----------->|
    |                                  |
    |       ESTABLISHED                |       ESTABLISHED
]]></artwork></figure>

<t>The initiator selects an initial sequence number X. The responder selects
its own initial sequence number Y and acknowledges X+1. The initiator
confirms by acknowledging Y+1.</t>

<t>Both sides include their advertised receive window in the Window field of
the SYN and SYN-ACK packets.</t>

</section>
<section anchor="connection-teardown"><name>Connection Teardown</name>

<figure><artwork><![CDATA[
Closer                             Remote
    |                                  |
    |-------- FIN seq=N ------------->|
    |                                  |
    |<------- ACK ack=N+1 -----------|
    |                                  |
    |       TIME_WAIT (10s)            |       CLOSED
    |                                  |
    |       CLOSED                     |
]]></artwork></figure>

<t>The closer sends FIN, waits for ACK, and enters TIME_WAIT for 10
seconds. The 10-second TIME_WAIT is shorter than TCP's typical 2*MSL
because overlay RTTs are bounded by the underlay network.</t>

</section>
<section anchor="sequence-number-arithmetic"><name>Sequence Number Arithmetic</name>

<t>Sequence numbers are 32-bit unsigned integers with wrapping comparison
per <xref target="RFC1982"/>:</t>

<figure><artwork><![CDATA[
seqAfter(a, b) = int32(a - b) > 0
]]></artwork></figure>

<t>This correctly handles wraparound at 2^32.</t>

</section>
<section anchor="reliable-delivery"><name>Reliable Delivery</name>

<t>The Stream protocol (0x01) provides reliable, ordered byte stream
delivery using a sliding window mechanism.</t>

<section anchor="retransmission-timeout-rto"><name>Retransmission Timeout (RTO)</name>

<t>RTO is computed per <xref target="RFC6298"/>:</t>

<t><list style="symbols">
  <t>SRTT (Smoothed RTT): updated with alpha = 1/8</t>
  <t>RTTVAR (RTT Variance): updated with beta = 1/4</t>
  <t>RTO = SRTT + max(G, 4 * RTTVAR)</t>
  <t>G (clock granularity floor) = 10 ms</t>
  <t>RTO is clamped to the range 200 ms to 10 s</t>
</list></t>

<t>SYN packets are retransmitted with exponential backoff: 1s, 2s, 4s, 8s,
up to 5 retries. Data segments allow up to 8 retransmission attempts
before the connection is closed.</t>

</section>
<section anchor="out-of-order-handling"><name>Out-of-Order Handling</name>

<t>Segments received out of order are buffered and delivered to the
application in sequence order when gaps are filled.</t>

</section>
</section>
<section anchor="selective-acknowledgment-sack"><name>Selective Acknowledgment (SACK)</name>

<t>When the receiver has out-of-order segments, it encodes SACK blocks in the
ACK payload. Each SACK block is a pair of 32-bit sequence numbers
representing a contiguous range of received bytes beyond the cumulative
ACK point. Up to 4 SACK blocks are encoded per ACK.</t>

<t>The sender uses SACK information to retransmit only the missing segments,
skipping segments the peer has already received.</t>

</section>
<section anchor="congestion-control"><name>Congestion Control</name>

<t>The protocol implements TCP-style congestion control:</t>

<dl>
  <dt>Slow Start:</dt>
  <dd>
    <t>The congestion window (cwnd) starts at 10 segments (40 KB) per
<xref target="RFC6928"/> and grows by one segment for each ACK received, until cwnd
reaches the slow-start threshold (ssthresh).</t>
  </dd>
  <dt>Congestion Avoidance:</dt>
  <dd>
    <t>After cwnd reaches ssthresh, growth switches to additive-increase:
cwnd grows by approximately one segment per round-trip time (Appropriate
Byte Counting per <xref target="RFC3465"/>).</t>
  </dd>
  <dt>Fast Retransmit:</dt>
  <dd>
    <t>After 3 duplicate pure ACKs (data packets with piggybacked ACKs are
excluded per <xref target="RFC5681"/> Section 3.2), the sender retransmits the
missing segment without waiting for RTO.</t>
  </dd>
  <dt>Multiplicative Decrease:</dt>
  <dd>
    <t>On loss detection (fast retransmit or RTO), ssthresh is set to
max(cwnd/2, 2 segments). On RTO, cwnd is additionally reset to 1
segment (Tahoe behavior).</t>
  </dd>
</dl>

<t>The maximum congestion window is 1 MB. The maximum segment size (MSS)
is 4096 bytes.</t>

</section>
<section anchor="flow-control"><name>Flow Control</name>

<t>Each ACK carries the receiver's advertised window --- the number of free
segments in its receive buffer. The sender's effective window is:</t>

<figure><artwork><![CDATA[
effective_window = min(cwnd, peer_advertised_window)
]]></artwork></figure>

<t>This prevents a fast sender from overwhelming a slow receiver.</t>

<section anchor="zero-window-probing"><name>Zero-Window Probing</name>

<t>When the receiver advertises a zero window, the sender enters persist
mode and sends 1-byte probe segments at exponentially increasing intervals
until the receiver opens its window.</t>

</section>
</section>
<section anchor="write-coalescing-nagles-algorithm"><name>Write Coalescing (Nagle's Algorithm)</name>

<t>Small writes are buffered when unacknowledged data is in flight and
flushed when:</t>

<t><list style="symbols">
  <t>The buffer reaches MSS (4096 bytes), or</t>
  <t>All previous data is acknowledged, or</t>
  <t>A 40 ms timeout expires.</t>
</list></t>

<t>This reduces packet overhead for applications performing many small
writes. The algorithm can be disabled per-connection with a NoDelay
option, analogous to TCP_NODELAY.</t>

</section>
<section anchor="automatic-segmentation"><name>Automatic Segmentation</name>

<t>Large writes are automatically segmented into MSS-sized chunks (4096
bytes) by the daemon. Applications can write arbitrarily large buffers
without manual chunking.</t>

</section>
<section anchor="delayed-acks"><name>Delayed ACKs</name>

<t>Instead of sending an ACK for every received segment, the daemon batches
up to 2 segments or 40 ms (whichever comes first). When out-of-order
data is present, ACKs are sent immediately with SACK blocks to trigger
fast retransmit. When data is sent on a connection, the pending delayed
ACK is cancelled because the outgoing data packet piggybacks the latest
cumulative ACK and receive window.</t>

</section>
<section anchor="keepalive-and-idle-timeout"><name>Keepalive and Idle Timeout</name>

<t>Keepalive probes (empty ACKs) are sent every 30 seconds to idle
connections. Connections idle for 120 seconds are automatically closed.
These timers are appropriate for the overlay's use case (agent
communication), where stale connections should be reclaimed promptly.</t>

</section>
<section anchor="timewait"><name>TIME_WAIT</name>

<t>Closed connections enter TIME_WAIT for 10 seconds before being removed.
During TIME_WAIT, the connection occupies its port binding (preventing
reuse confusion with delayed packets) but does not count as active.</t>

</section>
</section>
<section anchor="nat-traversal"><name>NAT Traversal</name>

<section anchor="stun-based-endpoint-discovery"><name>STUN-Based Endpoint Discovery</name>

<t>On startup, the daemon sends a UDP probe to the beacon. The beacon
observes the daemon's public IP address and port (as mapped by NAT) and
reports it back. This follows the mechanism described in <xref target="RFC8489"/>
(Session Traversal Utilities for NAT).</t>

<t>The discovered public endpoint is registered with the registry as the
daemon's locator.</t>

<t>For daemons with known public endpoints (e.g., cloud VMs), the
<spanx style="verb">-endpoint host:port</spanx> flag skips STUN and registers the specified
endpoint directly.</t>

</section>
<section anchor="hole-punching"><name>Hole Punching</name>

<t>When daemon A wants to reach daemon B and both are behind NAT:</t>

<t><list style="numbers" type="1">
  <t>Daemon A sends a punch request to the beacon, specifying B's Node ID.</t>
  <t>The beacon looks up B's registered endpoint and sends a punch command
to both A and B, instructing each to send a UDP packet to the other's
observed endpoint.</t>
  <t>Both daemons send UDP packets to each other simultaneously, punching
holes in their respective NATs.</t>
  <t>Subsequent packets flow directly between A and B.</t>
</list></t>

<t>This works for Full Cone, Restricted Cone, and Port-Restricted Cone NAT
types.</t>

</section>
<section anchor="relay-fallback"><name>Relay Fallback</name>

<t>When hole punching fails (typically Symmetric NAT, where the mapped port
changes per destination), the beacon provides transparent relay:</t>

<figure><artwork><![CDATA[
+----------+         +----------+         +----------+
| Daemon A | ------> |  Beacon  | ------> | Daemon B |
+----------+  relay  +----------+  relay  +----------+
]]></artwork></figure>

<t>The relay frame format:</t>

<figure><artwork><![CDATA[
+------+----------+----------+---...---+
| 0x05 | SenderID |  DestID  | Payload |
+------+----------+----------+---...---+
1 byte   4 bytes    4 bytes   variable
]]></artwork></figure>

<t>The beacon unwraps the relay header and forwards the payload to the
destination daemon. Relay is transparent to the session layer --- the
virtual packet inside the relay frame is identical to a directly-delivered
packet.</t>

</section>
<section anchor="connection-establishment-strategy"><name>Connection Establishment Strategy</name>

<t>When dialing a remote daemon, the connection strategy is:</t>

<t><list style="numbers" type="1">
  <t>Attempt 3 direct UDP sends to the peer's registered endpoint.</t>
  <t>If all 3 fail, switch to relay mode through the beacon.</t>
  <t>Attempt 3 relay sends.</t>
  <t>If all relay attempts fail, return an error to the application.</t>
</list></t>

<t>The switch from direct to relay is automatic and transparent to the
application layer.</t>

</section>
</section>
<section anchor="security"><name>Security</name>

<section anchor="identity"><name>Identity</name>

<t>Each node receives an Ed25519 <xref target="RFC8032"/> keypair from the registry upon
registration. The private key serves as the node's identity credential.
The registry holds all public keys and can verify signatures.</t>

<t>Identities may be persisted to disk so that a node retains its keypair
and virtual address across restarts. On restart with a persisted identity,
the daemon re-registers with the stored public key and the registry
restores the node's address and memberships.</t>

</section>
<section anchor="tunnel-layer-encryption"><name>Tunnel-Layer Encryption</name>

<t>Tunnel encryption is enabled by default. On startup, each daemon
generates an ephemeral X25519 <xref target="RFC7748"/> keypair. When two daemons first
communicate, they exchange public keys via PILK (<xref target="key-exchange"/>) or PILA
(<xref target="authenticated-key-exchange"/>) frames, compute an ECDH shared secret,
and derive an AES-256-GCM <xref target="RFC5116"/> key via HKDF (<xref target="hkdf-derivation"/>).</t>

<t>All subsequent packets between the pair are encrypted (PILS frames),
regardless of virtual port. The encryption is at the tunnel layer ---
it protects all overlay traffic between two daemons, including connection
handshakes.</t>

<t>The sender's Node ID (4 bytes, big-endian) is used as GCM Additional
Authenticated Data (AAD). This binds the ciphertext to the sender's
identity --- a decryption attempt with an incorrect sender ID will fail
GCM authentication, preventing packet reattribution attacks.</t>

<t>Tunnel encryption is backward-compatible: if a peer does not respond to
key exchange, communication falls back to plaintext (PILT frames).</t>

</section>
<section anchor="hkdf-derivation"><name>HKDF Key Derivation</name>

<t>The shared secret from the X25519 ECDH exchange is processed through
HKDF <xref target="RFC5869"/> to produce the AES-256-GCM key:</t>

<figure><artwork><![CDATA[
Extract:  PRK = HMAC-SHA256(salt=empty, IKM=shared_secret)
Expand:   key = HMAC-SHA256(PRK, info || 0x01)
]]></artwork></figure>

<t>For tunnel encryption, info is the ASCII string "pilot-tunnel-v1"
(15 bytes). For application-layer encryption on port 443
(<xref target="application-layer-encryption"/>), info is the ASCII string
"pilot-secure-v1" (15 bytes).</t>

<t>After the AES-256-GCM cipher is established, implementations <bcp14>MUST</bcp14> zero
the shared secret, PRK, and derived key material in memory to limit the
window of exposure if process memory is compromised.</t>

</section>
<section anchor="authenticated-key-exchange-upgrade"><name>Authenticated Key Exchange Upgrade</name>

<t>When a daemon has a persisted Ed25519 identity, the key exchange is
upgraded from PILK to PILA (see <xref target="authenticated-key-exchange"/>). The
Ed25519 signature binds the ephemeral X25519 key to the node's persistent
identity, preventing man-in-the-middle attacks.</t>

<t>Implementations <bcp14>SHOULD</bcp14> use PILA when an Ed25519 identity is available.</t>

</section>
<section anchor="application-layer-encryption"><name>Application-Layer Encryption (Port 443)</name>

<t>Virtual port 443 provides end-to-end encryption between two agents, on
top of any tunnel-layer encryption. The agents perform an X25519 ECDH
handshake and derive a shared key via HKDF <xref target="RFC5869"/> with info string
"pilot-secure-v1", then use AES-256-GCM for all subsequent data.</t>

<t>Each encrypted frame:</t>

<figure><artwork><![CDATA[
[4-byte length][12-byte nonce][ciphertext + 16-byte GCM tag]
]]></artwork></figure>

<t>The sender's nonce prefix (first 4 bytes of the nonce, see
<xref target="application-layer-nonces"/>) is used as GCM Additional Authenticated
Data (AAD). This binds ciphertext to the sender's role (server or
client), preventing cross-role confusion attacks.</t>

<t>This provides defense in depth: even if the tunnel encryption is
compromised (e.g., by a compromised intermediate daemon in a future
multi-hop topology), port 443 data remains protected.</t>

</section>
<section anchor="trust-handshake-protocol-port-444"><name>Trust Handshake Protocol (Port 444)</name>

<t>Port 444 implements a bilateral trust negotiation protocol. Two agents
exchange trust requests with justification strings and must both approve
before a trust relationship is established.</t>

<t>Three auto-approval paths exist:</t>

<t><list style="numbers" type="1">
  <t><strong>Mutual handshake</strong>: If both agents independently request trust with
each other, the relationship is auto-approved.</t>
  <t><strong>Network trust</strong>: If both agents share a non-backbone network, the
relationship is auto-approved (network membership serves as a trust
signal).</t>
  <t><strong>Manual approval</strong>: If neither condition is met, the request is queued
for the receiving agent's operator to approve or reject.</t>
</list></t>

<t>Trust pairs are recorded in the registry and persist across restarts.
Trust is revocable: revoking trust immediately prevents further
communication.</t>

<t>When trust handshake messages are relayed through the registry (for
private nodes that cannot be reached directly), the sender <bcp14>MUST</bcp14> include
an Ed25519 <xref target="RFC8032"/> signature over the concatenation of the ASCII
string "handshake:", the sender's Node ID (decimal), ":", and the peer's
Node ID (decimal). The receiver verifies the signature against the
sender's public key as registered in the registry. This prevents
handshake message forgery by a compromised relay path.</t>

</section>
<section anchor="privacy-model"><name>Privacy Model</name>

<t>Agents are private by default:</t>

<t><list style="symbols">
  <t>A node's physical IP:port is never disclosed in registry responses
unless the node has explicitly opted into public visibility.</t>
  <t>Resolving a private node's endpoint requires one of: (a) the node is
public, (b) a mutual trust pair exists, or (c) both nodes share a
non-backbone network.</t>
  <t>Listing nodes on the backbone (network 0) is rejected by the registry.
Non-backbone networks allow listing since membership is the trust
boundary.</t>
</list></t>

</section>
<section anchor="rate-limiting"><name>Rate Limiting</name>

<t>The registry enforces per-connection sliding window rate limits using a
token-bucket algorithm with per-source tracking. Clients that exceed the
limit receive throttle responses.</t>

<t>Daemons implement SYN rate limiting to mitigate connection flood attacks.</t>

</section>
<section anchor="ipc-security"><name>IPC Security</name>

<t>The daemon's Unix domain socket is created with mode 0600, restricting
access to the socket owner. This prevents unprivileged processes on the
same machine from issuing commands to the daemon.</t>

</section>
</section>
<section anchor="nonce-management"><name>Nonce Management</name>

<section anchor="construction"><name>Construction</name>

<t>AES-256-GCM nonces are 96 bits (12 bytes), constructed as:</t>

<figure><artwork><![CDATA[
+---...---+---...---+
|  Prefix | Counter |
+---...---+---...---+
 4 bytes    8 bytes
]]></artwork></figure>

<dl>
  <dt>Prefix:</dt>
  <dd>
    <t>4 bytes generated from a cryptographically secure random source when
the tunnel session is established. Unique per session with overwhelming
probability.</t>
  </dd>
  <dt>Counter:</dt>
  <dd>
    <t>8-byte unsigned integer, starting at 0, incremented by 1 for each
packet encrypted. The counter <bcp14>MUST NOT</bcp14> be reset within a session.</t>
  </dd>
</dl>

</section>
<section anchor="session-lifecycle"><name>Session Lifecycle</name>

<t>A new tunnel session is established when two daemons perform an X25519
key exchange (PILK or PILA). Each session produces:</t>

<t><list style="symbols">
  <t>A fresh AES-256-GCM key (from the ECDH shared secret)</t>
  <t>A fresh random nonce prefix</t>
</list></t>

<t>Since each session uses a different key, nonces from different sessions
cannot collide (different keys are independent encryption contexts).</t>

</section>
<section anchor="counter-exhaustion"><name>Counter Exhaustion</name>

<t>The 8-byte counter supports 2^64 encryptions per session. Implementations
<bcp14>MUST</bcp14> re-key (initiate a new key exchange) before the counter reaches
2^64 - 1. In practice, at 1 million packets per second, counter
exhaustion would take over 584,000 years.</t>

</section>
<section anchor="application-layer-nonces"><name>Application-Layer Nonces (Port 443)</name>

<t>Secure connections on port 443 use a role-prefix nonce scheme:</t>

<figure><artwork><![CDATA[
+---...---+---...---+
|  Role   | Counter |
+---...---+---...---+
 4 bytes    8 bytes
]]></artwork></figure>

<dl>
  <dt>Role Prefix:</dt>
  <dd>
    <t>0x00000001 for the server (listener) side, 0x00000002 for the client
(dialer) side. Fixed per role for the lifetime of the connection.</t>
  </dd>
  <dt>Counter:</dt>
  <dd>
    <t>8-byte unsigned integer, starting at 0, incremented by 1 for each
packet encrypted.</t>
  </dd>
</dl>

<t>The role prefix prevents nonce collision between the two sides of a
connection, even if both encrypt the same number of packets. Each
connection has an independent counter and key derived from its own X25519
handshake and HKDF expansion.</t>

</section>
</section>
<section anchor="version-negotiation"><name>Version Negotiation</name>

<section anchor="version-field"><name>Version Field</name>

<t>The 4-bit Version field in the packet header identifies the protocol
version. The current version is 1. Version 0 is reserved and <bcp14>MUST NOT</bcp14>
be used.</t>

</section>
<section anchor="handling-mismatches"><name>Handling Mismatches</name>

<t>The initiator includes its protocol version in the SYN packet. The
responder checks the version:</t>

<t><list style="symbols">
  <t>If supported: echoes the same version in SYN-ACK. Both sides use this
version for the connection's lifetime.</t>
  <t>If unsupported: sends RST. No version downgrade negotiation occurs.</t>
</list></t>

<t>For non-SYN packets, if the Version field does not match the connection's
established version, the packet is silently discarded. Implementations
<bcp14>SHOULD</bcp14> log such events at debug level.</t>

</section>
<section anchor="future-extensibility"><name>Future Extensibility</name>

<t>Future protocol versions <bcp14>MAY</bcp14> extend the header format. Implementations
<bcp14>MUST NOT</bcp14> assume a fixed header size based solely on the Version field ---
they <bcp14>SHOULD</bcp14> use the version to determine the expected header layout.</t>

</section>
</section>
<section anchor="path-mtu-considerations"><name>Path MTU Considerations</name>

<section anchor="encapsulation-overhead"><name>Encapsulation Overhead</name>

<t>The total per-packet overhead for encrypted tunnel frames is:</t>

<texttable>
      <ttcol align='left'>Component</ttcol>
      <ttcol align='left'>Size</ttcol>
      <c>PILS magic</c>
      <c>4 bytes</c>
      <c>Sender Node ID</c>
      <c>4 bytes</c>
      <c>GCM nonce</c>
      <c>12 bytes</c>
      <c>Pilot header</c>
      <c>34 bytes</c>
      <c>GCM authentication tag</c>
      <c>16 bytes</c>
      <c><strong>Total</strong></c>
      <c><strong>70 bytes</strong></c>
</texttable>

<t>For plaintext frames (PILT), overhead is 38 bytes (4-byte magic + 34-byte
header).</t>

</section>
<section anchor="effective-payload"><name>Effective Payload</name>

<t>With a typical 1500-byte Ethernet MTU, 20-byte IP header, and 8-byte UDP
header:</t>

<t><list style="symbols">
  <t>Available for Pilot: 1500 - 28 = 1472 bytes</t>
  <t>Encrypted payload capacity: 1472 - 70 = 1402 bytes</t>
  <t>Plaintext payload capacity: 1472 - 38 = 1434 bytes</t>
</list></t>

</section>
<section anchor="mss-selection"><name>MSS Selection</name>

<t>The default MSS of 4096 bytes exceeds single-packet capacity on standard
Ethernet paths. Full-MSS segments will be fragmented into 3 IP fragments.
This is acceptable on most networks but may fail on paths that block IP
fragmentation.</t>

<t>Recommendations:</t>

<t><list style="symbols">
  <t>For Internet-facing deployments where IP fragmentation may be blocked,
an MSS of 1400 bytes avoids fragmentation on virtually all paths.</t>
  <t>For datacenter or local deployments (jumbo frames), the default 4096
MSS is appropriate.</t>
  <t>Implementations <bcp14>SHOULD</bcp14> provide a configurable MSS option.</t>
  <t>Implementations <bcp14>SHOULD NOT</bcp14> set the Don't Fragment (DF) bit on UDP
datagrams, allowing IP-layer fragmentation as a fallback.</t>
</list></t>

</section>
</section>
<section anchor="built-in-services"><name>Built-in Services</name>

<section anchor="echo-port-7"><name>Echo (Port 7)</name>

<t>The echo service reflects any data received back to the sender. It is
used for liveness testing (ping) and throughput benchmarking.</t>

</section>
<section anchor="data-exchange-port-1001"><name>Data Exchange (Port 1001)</name>

<t>A typed frame protocol for structured data. Each frame carries a 4-byte
type tag and a 4-byte length prefix:</t>

<texttable>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Text</c>
      <c>0x01</c>
      <c>UTF-8 text</c>
      <c>Binary</c>
      <c>0x02</c>
      <c>Raw bytes</c>
      <c>JSON</c>
      <c>0x03</c>
      <c>JSON document</c>
      <c>File</c>
      <c>0x04</c>
      <c>File with name metadata</c>
</texttable>

</section>
<section anchor="event-stream-port-1002"><name>Event Stream (Port 1002)</name>

<t>A publish/subscribe broker. Agents subscribe to named topics and receive
events published by any peer. Wildcard subscriptions (<spanx style="verb">*</spanx>) match all
topics. The wire protocol uses newline-delimited text commands:</t>

<t><list style="symbols">
  <t><spanx style="verb">SUB &lt;topic&gt;</spanx> --- subscribe to a topic</t>
  <t><spanx style="verb">PUB &lt;topic&gt; &lt;payload&gt;</spanx> --- publish an event</t>
  <t><spanx style="verb">EVENT &lt;topic&gt; &lt;payload&gt;</spanx> --- delivered event (broker to subscriber)</t>
</list></t>

</section>
<section anchor="task-submission-port-1003"><name>Task Submission (Port 1003)</name>

<t>A task lifecycle protocol. Agents submit tasks with descriptions, workers
accept or decline, execute, and return results. A reputation score (polo
score) adjusts based on execution efficiency.</t>

</section>
</section>
<section anchor="gateway"><name>Gateway</name>

<t>The gateway bridges the overlay network and standard IP networks,
allowing unmodified TCP programs (curl, browsers, databases) to
communicate with overlay agents.</t>

<section anchor="address-mapping"><name>Address Mapping</name>

<t>The gateway maps virtual addresses to local IP addresses on the loopback
interface. For each mapped agent, the gateway creates a loopback alias:</t>

<t><list style="symbols">
  <t>Linux: <spanx style="verb">ip addr add &lt;local-ip&gt;/32 dev lo</spanx></t>
  <t>macOS: <spanx style="verb">ifconfig lo0 alias &lt;local-ip&gt;</spanx></t>
</list></t>

<t>The default mapping subnet is 10.4.0.0/16. Each virtual address is
assigned a unique local IP within this subnet.</t>

</section>
<section anchor="proxying"><name>Proxying</name>

<t>For each mapped address, the gateway listens on configurable TCP ports
(default: 7, 80, 443, 1000, 1001, 1002, 8080, 8443) on the local IP.
Incoming TCP connections are forwarded to the corresponding agent's
virtual address and port via the daemon's Dial operation. Data flows
bidirectionally between the TCP connection and the overlay stream.</t>

<t>This enables scenarios such as:</t>

<figure><artwork><![CDATA[
curl http://10.4.0.1:80/api     # reaches agent 0:0000.0000.0001 port 80
]]></artwork></figure>

</section>
</section>
<section anchor="ipc-protocol"><name>IPC Protocol</name>

<section anchor="framing"><name>Framing</name>

<t>The daemon and driver communicate over a Unix domain socket using
length-prefixed messages:</t>

<figure><artwork><![CDATA[
[4-byte big-endian length][message bytes]
]]></artwork></figure>

<t>Maximum message size: 1,048,576 bytes (1 MB).</t>

</section>
<section anchor="command-set"><name>Command Set</name>

<texttable>
      <ttcol align='left'>Cmd</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Direction</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Bind</c>
      <c>Driver -&gt; Daemon</c>
      <c>Bind a virtual port</c>
      <c>0x02</c>
      <c>BindOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Confirm port binding</c>
      <c>0x03</c>
      <c>Dial</c>
      <c>Driver -&gt; Daemon</c>
      <c>Connect to remote agent</c>
      <c>0x04</c>
      <c>DialOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Connection established</c>
      <c>0x05</c>
      <c>Accept</c>
      <c>Daemon -&gt; Driver</c>
      <c>Incoming connection</c>
      <c>0x06</c>
      <c>Send</c>
      <c>Driver -&gt; Daemon</c>
      <c>Send data on connection</c>
      <c>0x07</c>
      <c>Recv</c>
      <c>Daemon -&gt; Driver</c>
      <c>Receive data</c>
      <c>0x08</c>
      <c>Close</c>
      <c>Driver -&gt; Daemon</c>
      <c>Close connection</c>
      <c>0x09</c>
      <c>CloseOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Connection closed</c>
      <c>0x0A</c>
      <c>Error</c>
      <c>Daemon -&gt; Driver</c>
      <c>Error response</c>
      <c>0x0B</c>
      <c>SendTo</c>
      <c>Driver -&gt; Daemon</c>
      <c>Send datagram</c>
      <c>0x0C</c>
      <c>RecvFrom</c>
      <c>Daemon -&gt; Driver</c>
      <c>Receive datagram</c>
      <c>0x0D</c>
      <c>Info</c>
      <c>Driver -&gt; Daemon</c>
      <c>Query daemon status</c>
      <c>0x0E</c>
      <c>InfoOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Status response (JSON)</c>
      <c>0x0F</c>
      <c>Handshake</c>
      <c>Driver -&gt; Daemon</c>
      <c>Trust handshake command</c>
      <c>0x10</c>
      <c>HandshakeOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Handshake result (JSON)</c>
      <c>0x11</c>
      <c>ResolveHostname</c>
      <c>Driver -&gt; Daemon</c>
      <c>Resolve hostname to address</c>
      <c>0x12</c>
      <c>ResolveHostnameOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Resolution result (JSON)</c>
      <c>0x13</c>
      <c>SetHostname</c>
      <c>Driver -&gt; Daemon</c>
      <c>Set discoverable hostname</c>
      <c>0x14</c>
      <c>SetHostnameOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Hostname confirmation</c>
      <c>0x15</c>
      <c>SetVisibility</c>
      <c>Driver -&gt; Daemon</c>
      <c>Set public/private</c>
      <c>0x16</c>
      <c>SetVisibilityOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Visibility confirmation</c>
      <c>0x17</c>
      <c>Deregister</c>
      <c>Driver -&gt; Daemon</c>
      <c>Deregister from registry</c>
      <c>0x18</c>
      <c>DeregisterOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Deregister confirmation</c>
      <c>0x19</c>
      <c>SetTags</c>
      <c>Driver -&gt; Daemon</c>
      <c>Set node tags (JSON)</c>
      <c>0x1A</c>
      <c>SetTagsOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Tags confirmation</c>
      <c>0x1B</c>
      <c>SetWebhook</c>
      <c>Driver -&gt; Daemon</c>
      <c>Set event webhook URL</c>
      <c>0x1C</c>
      <c>SetWebhookOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Webhook confirmation</c>
      <c>0x1D</c>
      <c>SetTaskExec</c>
      <c>Driver -&gt; Daemon</c>
      <c>Enable/disable task exec</c>
      <c>0x1E</c>
      <c>SetTaskExecOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Task exec confirmation</c>
      <c>0x1F</c>
      <c>Network</c>
      <c>Driver -&gt; Daemon</c>
      <c>Network management</c>
      <c>0x20</c>
      <c>NetworkOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Network result (JSON)</c>
      <c>0x21</c>
      <c>Health</c>
      <c>Driver -&gt; Daemon</c>
      <c>Health check probe</c>
      <c>0x22</c>
      <c>HealthOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Health response (JSON)</c>
</texttable>

</section>
<section anchor="network-sub-commands"><name>Network Sub-Commands</name>

<t>The Network command (0x1F) uses a sub-command byte as the first byte of
the payload:</t>

<texttable>
      <ttcol align='left'>Sub</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Payload</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>List</c>
      <c>(empty)</c>
      <c>List joined networks</c>
      <c>0x02</c>
      <c>Join</c>
      <c>network_id, token</c>
      <c>Join a network</c>
      <c>0x03</c>
      <c>Leave</c>
      <c>network_id</c>
      <c>Leave a network</c>
      <c>0x04</c>
      <c>Members</c>
      <c>network_id</c>
      <c>List network members</c>
      <c>0x05</c>
      <c>Invite</c>
      <c>network_id, node_id</c>
      <c>Invite a node</c>
      <c>0x06</c>
      <c>PollInvites</c>
      <c>(empty)</c>
      <c>Poll pending invitations</c>
      <c>0x07</c>
      <c>RespondInvite</c>
      <c>network_id, accept</c>
      <c>Accept/reject invite</c>
</texttable>

</section>
</section>
<section anchor="registry-replication"><name>Registry Replication</name>

<section anchor="hot-standby-architecture"><name>Hot-Standby Architecture</name>

<t>The registry supports high-availability through a hot-standby replication
model. One registry instance operates as the primary (accepting reads
and writes) while one or more standbys maintain synchronized copies of
the state.</t>

</section>
<section anchor="push-based-replication"><name>Push-Based Replication</name>

<t>Standbys connect to the primary via persistent TCP connections and
subscribe for state updates. On any mutation (node registration,
network creation, trust pair change, policy update), the primary pushes
a full state snapshot to all connected standbys. The snapshot includes
nodes, networks, trust pairs, and enterprise state.</t>

</section>
<section anchor="liveness-and-failover"><name>Liveness and Failover</name>

<t>The primary sends heartbeat messages every 15 seconds. A standby that
does not receive a heartbeat within 30 seconds considers the primary
unavailable. Failover is manual: an operator promotes a standby to
primary by restarting it in primary mode.</t>

<t>Standbys reject all write operations, returning an error directing the
client to the primary. This prevents split-brain scenarios.</t>

</section>
</section>
<section anchor="enterprise-extensions"><name>Enterprise Extensions</name>

<section anchor="role-based-access-control"><name>Role-Based Access Control</name>

<t>Networks support three roles:</t>

<texttable>
      <ttcol align='left'>Role</ttcol>
      <ttcol align='left'>Permissions</ttcol>
      <c>Owner</c>
      <c>Full control: delete network, transfer ownership, all admin operations</c>
      <c>Admin</c>
      <c>Manage members: invite, kick, promote, demote, set policy</c>
      <c>Member</c>
      <c>Participate: send/receive data, list members</c>
</texttable>

<t>Role assignments are stored per-network in the registry. Operations are
gated by minimum role requirement --- a member cannot modify policy, and
an admin cannot delete the network. The network creator is automatically
assigned the Owner role.</t>

</section>
<section anchor="network-policies"><name>Network Policies</name>

<t>Each network may define policies that constrain member behavior:</t>

<t><list style="symbols">
  <t><strong>max_members:</strong> Maximum number of nodes in the network. The registry
rejects join and invite operations when the limit is reached.</t>
  <t><strong>allowed_ports:</strong> Per-network port allow-list (reserved for future
enforcement at the daemon level).</t>
</list></t>

<t>Policies persist across registry restarts and are replicated to standbys.</t>

</section>
<section anchor="audit-trail"><name>Audit Trail</name>

<t>The registry maintains a ring-buffer audit log recording
security-relevant operations:</t>

<t><list style="symbols">
  <t>Node registration and deregistration</t>
  <t>Trust relationship creation and revocation</t>
  <t>Network membership changes (join, leave, kick, invite)</t>
  <t>Role assignments (promote, demote, ownership transfer)</t>
  <t>Policy modifications</t>
  <t>Key rotation and expiry events</t>
  <t>Enterprise flag changes</t>
</list></t>

<t>Each audit entry includes a timestamp, the action identifier, the actor's
node ID, and for state mutations, both the old and new values. The audit
log persists across registry restarts via atomic JSON snapshots.</t>

<t>An export API allows external systems (SIEM, compliance tools) to
retrieve audit events. Webhook-based export with retry logic and a
dead-letter queue ensures reliable delivery to external endpoints.</t>

</section>
<section anchor="identity-integration"><name>Identity Integration</name>

<t>The registry optionally supports external identity integration:</t>

<t><list style="symbols">
  <t><strong>OIDC/JWT Validation:</strong> Nodes may authenticate using JWT tokens from
an OIDC provider. The registry validates RS256 signatures using cached
JWKS (JSON Web Key Set) endpoints.</t>
  <t><strong>External Identity Mapping:</strong> Nodes may carry an external_id field
linking their overlay identity to an OIDC subject or directory entry.</t>
  <t><strong>Directory Synchronization:</strong> Webhook-based synchronization with
external identity providers enables centralized identity management.</t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="crc32-limitations"><name>CRC32 Limitations</name>

<t>The packet checksum uses CRC32 (IEEE polynomial), which detects accidental
corruption but provides no cryptographic integrity. An attacker who can
modify packets in transit can recompute a valid CRC32. Integrity against
active attackers is provided by tunnel-layer AES-256-GCM encryption, which
<bcp14>MUST</bcp14> be used for all Internet-facing deployments.</t>

</section>
<section anchor="anonymous-key-exchange"><name>Anonymous Key Exchange</name>

<t>The PILK key exchange frame provides no identity binding. An active
man-in-the-middle attacker can substitute their own X25519 public key,
establishing separate encrypted sessions with each peer. The PILA
authenticated key exchange (<xref target="authenticated-key-exchange"/>) prevents this
by binding the ephemeral key to an Ed25519 identity. Implementations
<bcp14>SHOULD</bcp14> use PILA whenever an Ed25519 identity is available.</t>

</section>
<section anchor="registry-authentication"><name>Registry Authentication</name>

<t>Write operations to the registry that modify node state (deregister, set
visibility, set hostname, set tags, network operations) require either:</t>

<t><list style="symbols">
  <t>An Ed25519 <xref target="RFC8032"/> signature from the node's registered keypair, or</t>
  <t>A valid admin token (verified via constant-time comparison to prevent
timing attacks).</t>
</list></t>

<t>Nodes without a registered public key <bcp14>MUST</bcp14> provide a valid admin token
for any write operation.</t>

</section>
<section anchor="tls-certificate-pinning"><name>TLS Certificate Pinning</name>

<t>Clients <bcp14>MAY</bcp14> pin the registry's TLS certificate fingerprint (SHA-256 hash
of the DER-encoded certificate). When pinning is configured, the client
performs manual certificate verification via the TLS VerifyPeerCertificate
callback, rejecting connections whose certificate hash does not match
the pinned value. This protects against compromised Certificate
Authorities.</t>

</section>
<section anchor="registry-as-trusted-third-party"><name>Registry as Trusted Third Party</name>

<t>The registry is a centralized trusted third party. Compromise of the
registry could allow:</t>

<t><list style="symbols">
  <t>Address hijacking (reassigning a node's virtual address)</t>
  <t>Locator spoofing (returning incorrect IP:port for a node)</t>
  <t>Public key substitution (enabling identity impersonation)</t>
  <t>Metadata harvesting (enumerating registered nodes)</t>
</list></t>

<t>Mitigations include TLS transport with optional certificate pinning,
Ed25519 signature verification for node operations, admin token
authentication for privileged operations, hot-standby replication for
availability, and persistent audit logging for forensic analysis. Future
work should explore distributed registry designs with consensus-based
replication.</t>

</section>
<section anchor="gcm-nonce-uniqueness"><name>GCM Nonce Uniqueness</name>

<t>AES-256-GCM security depends critically on nonce uniqueness under the same
key. The nonce construction (<xref target="nonce-management"/>) guarantees uniqueness
through a random prefix (unique per session) and a monotonic counter
(never reset within a session). Since each key exchange produces a new
key, nonces from different sessions are in independent cryptographic
contexts.</t>

<t>Implementations <bcp14>MUST NOT</bcp14> reuse nonces. Implementations <bcp14>MUST NOT</bcp14> reset
the counter within a session. Implementations <bcp14>MUST</bcp14> re-key before counter
exhaustion.</t>

</section>
<section anchor="metadata-exposure"><name>Metadata Exposure</name>

<t>Even with tunnel encryption (PILS), the sender's Node ID is transmitted
in cleartext (it is needed for the receiver to look up the decryption
key). This allows a passive observer to determine which daemons are
communicating, though the content and virtual addressing within the
encrypted payload remain confidential.</t>

</section>
<section anchor="double-congestion-control"><name>Double Congestion Control</name>

<t>Pilot Protocol implements congestion control at the overlay layer, while
the underlay UDP-over-IP path may also be subject to network-level
congestion signals (ICMP source quench, ECN). The overlay congestion
control operates independently, which may lead to suboptimal behavior on
heavily congested paths. This is a known issue shared with all overlay
transport protocols.</t>

</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Implementations <bcp14>MUST</bcp14> maintain a sliding-window replay bitmap for each
peer's tunnel session. The recommended window size is 256 nonces. The
replay check operates as follows:</t>

<t><list style="numbers" type="1">
  <t>If the nonce counter is below the window's lower bound (more than 256
positions behind the highest seen counter), the packet is rejected.</t>
  <t>If the nonce counter falls within the window and the corresponding
bitmap bit is set, the packet is a replay and is rejected.</t>
  <t>If the nonce counter is within the window and the bit is not set, the
bit is set and the packet is accepted.</t>
  <t>If the nonce counter is ahead of the window, the window slides forward
and the packet is accepted.</t>
</list></t>

<t>This provides replay protection while tolerating out-of-order packet
delivery within the window size.</t>

</section>
<section anchor="ipc-as-trust-boundary"><name>IPC as Trust Boundary</name>

<t>The Unix domain socket IPC between daemon and driver is a trust boundary.
The daemon trusts that any process connecting to the socket is authorized
(enforced by filesystem permissions, mode 0600). If an attacker gains
access to the socket, they can impersonate the local agent. Deployments
<bcp14>SHOULD</bcp14> ensure the daemon runs under a dedicated user account.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="pilot-protocol-tunnel-magic-values"><name>Pilot Protocol Tunnel Magic Values</name>

<t>This document requests the creation of a "Pilot Protocol Tunnel Magic
Values" registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Magic</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>PILT</c>
      <c>0x50494C54</c>
      <c>Plaintext frame</c>
      <c>PILS</c>
      <c>0x50494C53</c>
      <c>Encrypted frame</c>
      <c>PILK</c>
      <c>0x50494C4B</c>
      <c>Key exchange frame</c>
      <c>PILA</c>
      <c>0x50494C41</c>
      <c>Authenticated key exchange frame</c>
      <c>PILP</c>
      <c>0x50494C50</c>
      <c>NAT punch frame</c>
</texttable>

</section>
<section anchor="pilot-protocol-type-values"><name>Pilot Protocol Type Values</name>

<t>This document requests the creation of a "Pilot Protocol Type Values"
registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Stream</c>
      <c>Reliable, ordered delivery</c>
      <c>0x02</c>
      <c>Datagram</c>
      <c>Unreliable, unordered delivery</c>
      <c>0x03</c>
      <c>Control</c>
      <c>Internal control messages</c>
</texttable>

</section>
<section anchor="pilot-protocol-well-known-ports"><name>Pilot Protocol Well-Known Ports</name>

<t>This document requests the creation of a "Pilot Protocol Well-Known
Ports" registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Port</ttcol>
      <ttcol align='left'>Service</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Ping</c>
      <c>Liveness checks</c>
      <c>1</c>
      <c>Control</c>
      <c>Daemon-to-daemon control</c>
      <c>7</c>
      <c>Echo</c>
      <c>Echo service</c>
      <c>53</c>
      <c>Name Resolution</c>
      <c>Nameserver</c>
      <c>80</c>
      <c>Agent HTTP</c>
      <c>Web endpoints</c>
      <c>443</c>
      <c>Secure</c>
      <c>End-to-end encrypted channel</c>
      <c>444</c>
      <c>Trust</c>
      <c>Trust handshake protocol</c>
      <c>1000</c>
      <c>StdIO</c>
      <c>Text stream</c>
      <c>1001</c>
      <c>DataExchange</c>
      <c>Typed frame protocol</c>
      <c>1002</c>
      <c>EventStream</c>
      <c>Pub/sub broker</c>
      <c>1003</c>
      <c>TaskSubmit</c>
      <c>Task lifecycle</c>
</texttable>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>Per <xref target="RFC7942"/>, this section documents the known implementations of
Pilot Protocol at the time of writing.</t>

<section anchor="go-reference-implementation"><name>Go Reference Implementation</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Vulture Labs</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Complete implementation of Pilot Protocol including daemon, driver SDK,
registry, beacon, nameserver, gateway, and CLI (pilotctl). Implemented
in Go with zero external dependencies.</t>
  </dd>
  <dt>Level of maturity:</dt>
  <dd>
    <t>Production deployments in experimental environments.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>All features specified in this document are implemented, including
tunnel encryption (PILK/PILA/PILS/PILP), HKDF key derivation,
sliding-window replay detection, SACK, congestion control, flow
control, Nagle's algorithm, automatic segmentation, NAT traversal
(STUN, hole-punch, relay), trust handshake protocol with Ed25519
relay signing, privacy model, registry high-availability replication,
enterprise RBAC and audit trail, OIDC/JWT identity integration,
gateway bridge, per-port connection limits, and all built-in services.</t>
  </dd>
  <dt>Testing:</dt>
  <dd>
    <t>983 tests. Integration tests validated across 5 GCP regions (US
Central, US East, Europe West, US West, Asia East) with public-IP,
NAT-only, and symmetric-NAT topologies.</t>
  </dd>
  <dt>Licensing:</dt>
  <dd>
    <t>Proprietary.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>teodor@vulturelabs.com</t>
  </dd>
</dl>

</section>
<section anchor="python-sdk"><name>Python SDK</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Vulture Labs</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Python client SDK using ctypes FFI to the Go shared library. Published
on PyPI as <spanx style="verb">pilotprotocol</spanx>.</t>
  </dd>
  <dt>Level of maturity:</dt>
  <dd>
    <t>Production-ready.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>Driver operations (dial, listen, accept, send, receive, close),
datagram support, info queries.</t>
  </dd>
  <dt>Licensing:</dt>
  <dd>
    <t>Proprietary.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>teodor@vulturelabs.com</t>
  </dd>
</dl>

</section>
<section anchor="nodejs-sdk"><name>Node.js SDK</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Vulture Labs</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>TypeScript client SDK with FFI bindings to the Go shared library.
Published on npm as <spanx style="verb">pilotprotocol</spanx>.</t>
  </dd>
  <dt>Level of maturity:</dt>
  <dd>
    <t>Production-ready.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>Driver operations (dial, listen, accept, send, receive, close),
datagram support, info queries. Full TypeScript type definitions.</t>
  </dd>
  <dt>Licensing:</dt>
  <dd>
    <t>Proprietary.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>teodor@vulturelabs.com</t>
  </dd>
</dl>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC1982">
  <front>
    <title>Serial Number Arithmetic</title>
    <author fullname="R. Elz" initials="R." surname="Elz"/>
    <author fullname="R. Bush" initials="R." surname="Bush"/>
    <date month="August" year="1996"/>
    <abstract>
      <t>The DNS has long relied upon serial number arithmetic, a concept which has never really been defined, certainly not in an IETF document, though which has been widely understood. This memo supplies the missing definition. It is intended to update RFC1034 and RFC1035. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1982"/>
  <seriesInfo name="DOI" value="10.17487/RFC1982"/>
</reference>
<reference anchor="RFC5116">
  <front>
    <title>An Interface and Algorithms for Authenticated Encryption</title>
    <author fullname="D. McGrew" initials="D." surname="McGrew"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5116"/>
  <seriesInfo name="DOI" value="10.17487/RFC5116"/>
</reference>
<reference anchor="RFC5681">
  <front>
    <title>TCP Congestion Control</title>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <author fullname="V. Paxson" initials="V." surname="Paxson"/>
    <author fullname="E. Blanton" initials="E." surname="Blanton"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document defines TCP's four intertwined congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. In addition, the document specifies how TCP should begin transmission after a relatively long idle period, as well as discussing various acknowledgment generation methods. This document obsoletes RFC 2581. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5681"/>
  <seriesInfo name="DOI" value="10.17487/RFC5681"/>
</reference>
<reference anchor="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>
<reference anchor="RFC6298">
  <front>
    <title>Computing TCP's Retransmission Timer</title>
    <author fullname="V. Paxson" initials="V." surname="Paxson"/>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <author fullname="J. Chu" initials="J." surname="Chu"/>
    <author fullname="M. Sargent" initials="M." surname="Sargent"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST. This document obsoletes RFC 2988. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6298"/>
  <seriesInfo name="DOI" value="10.17487/RFC6298"/>
</reference>
<reference anchor="RFC6928">
  <front>
    <title>Increasing TCP's Initial Window</title>
    <author fullname="J. Chu" initials="J." surname="Chu"/>
    <author fullname="N. Dukkipati" initials="N." surname="Dukkipati"/>
    <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
    <author fullname="M. Mathis" initials="M." surname="Mathis"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>This document proposes an experiment to increase the permitted TCP initial window (IW) from between 2 and 4 segments, as specified in RFC 3390, to 10 segments with a fallback to the existing recommendation when performance issues are detected. It discusses the motivation behind the increase, the advantages and disadvantages of the higher initial window, and presents results from several large-scale experiments showing that the higher initial window improves the overall performance of many web services without resulting in a congestion collapse. The document closes with a discussion of usage and deployment for further experimental purposes recommended by the IETF TCP Maintenance and Minor Extensions (TCPM) working group.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6928"/>
  <seriesInfo name="DOI" value="10.17487/RFC6928"/>
</reference>
<reference anchor="RFC7748">
  <front>
    <title>Elliptic Curves for Security</title>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="January" year="2016"/>
    <abstract>
      <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7748"/>
  <seriesInfo name="DOI" value="10.17487/RFC7748"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8489">
  <front>
    <title>Session Traversal Utilities for NAT (STUN)</title>
    <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
    <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
    <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
    <author fullname="D. Wing" initials="D." surname="Wing"/>
    <author fullname="R. Mahy" initials="R." surname="Mahy"/>
    <author fullname="P. Matthews" initials="P." surname="Matthews"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
      <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
      <t>This document obsoletes RFC 5389.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8489"/>
  <seriesInfo name="DOI" value="10.17487/RFC8489"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC3465">
  <front>
    <title>TCP Congestion Control with Appropriate Byte Counting (ABC)</title>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <date month="February" year="2003"/>
    <abstract>
      <t>This document proposes a small modification to the way TCP increases its congestion window. Rather than the traditional method of increasing the congestion window by a constant amount for each arriving acknowledgment, the document suggests basing the increase on the number of previously unacknowledged bytes each ACK covers. This change improves the performance of TCP, as well as closes a security hole TCP receivers can use to induce the sender into increasing the sending rate too rapidly. This memo defines an Experimental Protocol for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3465"/>
  <seriesInfo name="DOI" value="10.17487/RFC3465"/>
</reference>
<reference anchor="RFC7348">
  <front>
    <title>Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks</title>
    <author fullname="M. Mahalingam" initials="M." surname="Mahalingam"/>
    <author fullname="D. Dutt" initials="D." surname="Dutt"/>
    <author fullname="K. Duda" initials="K." surname="Duda"/>
    <author fullname="P. Agarwal" initials="P." surname="Agarwal"/>
    <author fullname="L. Kreeger" initials="L." surname="Kreeger"/>
    <author fullname="T. Sridhar" initials="T." surname="Sridhar"/>
    <author fullname="M. Bursell" initials="M." surname="Bursell"/>
    <author fullname="C. Wright" initials="C." surname="Wright"/>
    <date month="August" year="2014"/>
    <abstract>
      <t>This document describes Virtual eXtensible Local Area Network (VXLAN), which is used to address the need for overlay networks within virtualized data centers accommodating multiple tenants. The scheme and the related protocols can be used in networks for cloud service providers and enterprise data centers. This memo documents the deployed VXLAN protocol for the benefit of the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7348"/>
  <seriesInfo name="DOI" value="10.17487/RFC7348"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8926">
  <front>
    <title>Geneve: Generic Network Virtualization Encapsulation</title>
    <author fullname="J. Gross" initials="J." role="editor" surname="Gross"/>
    <author fullname="I. Ganga" initials="I." role="editor" surname="Ganga"/>
    <author fullname="T. Sridhar" initials="T." role="editor" surname="Sridhar"/>
    <date month="November" year="2020"/>
    <abstract>
      <t>Network virtualization involves the cooperation of devices with a wide variety of capabilities such as software and hardware tunnel endpoints, transit fabrics, and centralized control clusters. As a result of their role in tying together different elements of the system, the requirements on tunnels are influenced by all of these components. Therefore, flexibility is the most important aspect of a tunneling protocol if it is to keep pace with the evolution of technology. This document describes Geneve, an encapsulation protocol designed to recognize and accommodate these changing capabilities and needs.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8926"/>
  <seriesInfo name="DOI" value="10.17487/RFC8926"/>
</reference>
<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="RFC9300">
  <front>
    <title>The Locator/ID Separation Protocol (LISP)</title>
    <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
    <author fullname="V. Fuller" initials="V." surname="Fuller"/>
    <author fullname="D. Meyer" initials="D." surname="Meyer"/>
    <author fullname="D. Lewis" initials="D." surname="Lewis"/>
    <author fullname="A. Cabellos" initials="A." role="editor" surname="Cabellos"/>
    <date month="October" year="2022"/>
    <abstract>
      <t>This document describes the data plane protocol for the Locator/ID Separation Protocol (LISP). LISP defines two namespaces: Endpoint Identifiers (EIDs), which identify end hosts; and Routing Locators (RLOCs), which identify network attachment points. With this, LISP effectively separates control from data and allows routers to create overlay networks. LISP-capable routers exchange encapsulated packets according to EID-to-RLOC mappings stored in a local Map-Cache.</t>
      <t>LISP requires no change to either host protocol stacks or underlay routers and offers Traffic Engineering (TE), multihoming, and mobility, among other features.</t>
      <t>This document obsoletes RFC 6830.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9300"/>
  <seriesInfo name="DOI" value="10.17487/RFC9300"/>
</reference>

<reference anchor="I-D.yao-catalist-problem-space-analysis" target="https://datatracker.ietf.org/doc/draft-yao-catalist-problem-space-analysis/">
  <front>
    <title>Problem Space Analysis of AI Agent Protocols in IETF</title>
    <author initials="Y." surname="Zhou">
      <organization></organization>
    </author>
    <author initials="K." surname="Yao">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="I-D.prakash-aip" target="https://datatracker.ietf.org/doc/draft-prakash-aip/">
  <front>
    <title>Agent Identity Protocol (AIP)</title>
    <author initials="S." surname="Prakash">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="I-D.hood-independent-agtp" target="https://datatracker.ietf.org/doc/draft-hood-independent-agtp/">
  <front>
    <title>Agent Transfer Protocol (AGTP)</title>
    <author initials="C." surname="Hood">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>


    </references>

</references>


<?line 1522?>

<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the participants of the IETF AI protocols discussions
for their contributions to the understanding of the agent communication
landscape.</t>

</section>
<section anchor="wire-examples"><name>Wire Examples</name>

<section anchor="syn-packet"><name>SYN Packet</name>

<t>A SYN packet from <spanx style="verb">0:0000.0000.0001</spanx> port 49152 to <spanx style="verb">0:0000.0000.0002</spanx>
port 1000, with no payload:</t>

<figure><artwork><![CDATA[
Byte  0:    0x11         (version=1, flags=SYN)
Byte  1:    0x01         (protocol=Stream)
Byte  2-3:  0x0000       (payload length=0)
Byte  4-5:  0x0000       (src network=0)
Byte  6-9:  0x00000001   (src node=1)
Byte 10-11: 0x0000       (dst network=0)
Byte 12-15: 0x00000002   (dst node=2)
Byte 16-17: 0xC000       (src port=49152)
Byte 18-19: 0x03E8       (dst port=1000)
Byte 20-23: 0x00000000   (seq=0)
Byte 24-27: 0x00000000   (ack=0)
Byte 28-29: 0x0200       (window=512 segments)
Byte 30-33: [CRC32]      (computed over header)
]]></artwork></figure>

<t>Total: 34 bytes.</t>

</section>
<section anchor="data-packet"><name>Data Packet</name>

<t>An ACK data packet with 5-byte payload "hello":</t>

<figure><artwork><![CDATA[
Byte  0:    0x12         (version=1, flags=ACK)
Byte  1:    0x01         (protocol=Stream)
Byte  2-3:  0x0005       (payload length=5)
...
Byte 28-29: 0x01F6       (window=502 segments)
Byte 30-33: [CRC32]      (computed over header + payload)
Byte 34-38: 0x68656C6C6F ("hello")
]]></artwork></figure>

<t>Total: 39 bytes.</t>

</section>
<section anchor="encrypted-tunnel-frame"><name>Encrypted Tunnel Frame</name>

<t>A PILS frame carrying an encrypted Pilot packet:</t>

<figure><artwork><![CDATA[
Byte  0-3:  0x50494C53   (magic="PILS")
Byte  4-7:  0x00000001   (sender node ID=1)
Byte  8-19: [12-byte nonce]
Byte 20+:   [ciphertext + 16-byte GCM tag]
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
/wczfuPy19YAAA==

-->

</rfc>

