
pilotprotocol v1.13.2
オーバーレイネットワークプロトコル。AIエージェントに固定アドレス、認証付き暗号化トンネル、UDP上の信頼モデルを提供。NATトラバーサル、ピアツーピアメッセージング、Node.js、Python、Swift向けSDKを含む。
Pilot Protocol
AIエージェントのためのネットワークスタック。
アドレス。ポート。トンネル。暗号化。信頼。
ドキュメント · ワイヤ仕様 · ホワイトペーパー · IETFドラフト · エージェントスキル · Polo(ライブダッシュボード)
インターネットは人間のために作られた。AIエージェントにはアドレスも、アイデンティティも、到達する手段もない。Pilot Protocolは、インターネットがデバイスに与えたものをエージェントに与えるオーバーレイネットワークである。すなわち、永続的なアドレス、認証された暗号化チャネル、そして信頼モデルであり、これらすべてが標準的なUDPの上に構築されている。
エージェントはディスカバリとNATトラバーサルのためにランデブーサービスに登録する。アプリケーションデータは直接パス上でピア間を直接流れる。NATホールパンチングが失敗した場合(例:シンメトリックNAT)、ビーコンがフォールバックとして、依然としてエンドツーエンドで暗号化されたトラフィックをリレーする。これはAPIではない。フレームワークでもない。インフラストラクチャである。
問題
今日、エージェントは集中型APIを通じて通信する。すべてのメッセージはプラットフォームを経由する。プラットフォームはすべてのトラフィックを把握し、アクセスを制御し、単一障害点となる。```mermaid graph LR A1[Agent A] -->|HTTP API| P[Platform / Cloud] A2[Agent B] -->|HTTP API| P A3[Agent C] -->|HTTP API| P style P fill:#f66,stroke:#333,color:#fff style A1 fill:#4a9,stroke:#333,color:#fff style A2 fill:#4a9,stroke:#333,color:#fff style A3 fill:#4a9,stroke:#333,color:#fff
Pilot Protocolはプラットフォームをデータパスから排除します。軽量な**ランデブー**サービスがディスカバリとNATトラバーサルを処理しますが、エージェント同士が互いを見つけた後は、認証済みの暗号化トンネルを介して直接通信します:```mermaid
graph LR
A1[Agent A<br/><small>0:0000.0000.0001</small>] <-->|Encrypted UDP Tunnel| A2[Agent B<br/><small>0:0000.0000.0002</small>]
A1 <-->|Encrypted UDP Tunnel| A3[Agent C<br/><small>0:0000.0000.0003</small>]
A2 <-->|Encrypted UDP Tunnel| A3
A1 -.->|discovery| RV[Rendezvous]
A2 -.->|discovery| RV
A3 -.->|discovery| RV
style A1 fill:#4a9,stroke:#333,color:#fff
style A2 fill:#4a9,stroke:#333,color:#fff
style A3 fill:#4a9,stroke:#333,color:#fff
style RV fill:#888,stroke:#333,color:#fff
エージェントが得られるもの```bash
pilotctl info # show your address, hostname, peer count pilotctl set-hostname my-agent # claim a name other agents can resolve pilotctl find agent-alpha # resolve a public demo peer pilotctl ping agent-alpha # round-trip over the encrypted tunnel pilotctl bench agent-alpha # 1 MB echo benchmark
信頼できるピアを確立したら、エージェント間メッセージングはポート1001のデータ交換サービスを使用します:```bash
# Send a structured message (waits for reply by default)
pilotctl send-message other-agent --data "hello"
# Read messages delivered to your inbox
pilotctl inbox
# Read a specific message
pilotctl inbox read <id>
低レベルの生ポートメッセージングの場合:```bash
on the sender
pilotctl send other-agent 1000 --data "hello"
on the receiver
pilotctl recv 1000 --count 5 --timeout 30s
すべてのCLIコマンドは構造化出力のために `--json` をサポートしています — 全機能範囲については[CLIリファレンス](https://pilotprotocol.network/docs/cli-reference)を参照してください。
<details>
<summary><strong>JSON出力の例</strong></summary>```json
$ pilotctl --json info
{"status":"ok","data":{"address":"0:0000.0000.0005","node_id":5,"hostname":"my-agent","peers":3,"connections":1,"uptime_secs":3600}}
$ pilotctl --json find other-agent
{"status":"ok","data":{"hostname":"other-agent","address":"0:0000.0000.0003"}}
$ pilotctl --json recv 1000 --count 1
{"status":"ok","data":{"messages":[{"seq":0,"port":1000,"data":"hello","bytes":5}]}}
$ pilotctl --json find nonexistent
{"status":"error","code":"not_found","message":"cannot find \"nonexistent\" — hostname not found or no mutual trust","hint":"establish trust first: pilotctl handshake nonexistent \"reason\""}
プログラムによるアクセス (SDK)
デーモンが起動したら、CLI の代わりに SDK を通じてエージェントとプログラムでやり取りできます。3 つの SDK はすべて、Unix ソケット IPC を介してローカルの Pilot デーモンと通信し、ハンドシェイク、トラスト、送信、受信、ストリーム、ゲートウェイといったエージェントの全機能を、お好みの言語で利用できるようにします。
| 言語 | パッケージ | クイックスタート |
|---|---|---|
| Node.js / TypeScript | npm の pilotprotocol | npm install pilotprotocol — sdk-node README を参照 |
| Python | PyPI の pilotprotocol | pip install pilotprotocol — sdk-python README を参照 |
| Swift / iOS / macOS | GitHub の pilotprotocol | Package.swift 経由で追加 — sdk-swift README を参照 |
daemon start 後の最小限の Node.js 初回クエリの例:```js
import { createPilot, createAgent } from 'pilotprotocol';
const pilot = await createPilot(); const conn = await pilot.handshake('agent-alpha', 'hello'); await conn.trust();
// Send a message await conn.send(3000, Buffer.from('ping'));
// Receive on any port const msgs = await conn.recv(3000, { count: 1, timeout: 10 }); console.log('Received:', msgs[0].data.toString());
各SDKのREADMEには、完全なAPIドキュメント、ストリーミングの例、およびプラットフォーム固有のセットアップ(iOSシミュレータ、PyPI extrasなど)が記載されています。
## ハイライト
<table>
<tr>
<td width="50%" valign="top">
**アドレッシング**
- 48ビット仮想アドレス(`N:NNNN.HHHH.LLLL`)
- ウェルノウン割り当てを持つ16ビットポート
- ホスト名ベースのディスカバリ
**トランスポート**
- 信頼性のあるストリーム(TCP相当)
- スライディングウィンドウ、SACK、輻輳制御(AIMD)
- フロー制御(アドバタイズされた受信ウィンドウ)
- Nagle coalescing、自動セグメンテーション、ゼロウィンドウプロービング
- NATトラバーサル: STUNディスカバリ、ホールパンチング、リレーフォールバック
</td>
<td width="50%" valign="top">
**セキュリティ**
- 認証済み鍵交換(Ed25519署名付きX25519 + AES-256-GCM)
- トンネルセッションにバインドされたEd25519アイデンティティキー
- ノードはデフォルトでプライベート
- 相互信頼ハンドシェイクプロトコル(署名付き、レジストリ経由のリレー)
**運用**
- コアプロトコル: Go標準ライブラリのみ
- 組み込みサービスを備えた単一デーモンバイナリ
- 構造化JSONロギング(`slog`)
- すべての状態に対するアトミックな永続化
- ホットスタンバイレジストリレプリケーション
</td>
</tr>
</table>
---
## アーキテクチャ```mermaid
graph LR
subgraph Local Machine
Agent[Your Agent] -->|commands| CLI[pilotctl]
CLI -->|Unix socket| D[Daemon]
D --- E[Echo :7]
D --- DX[Data Exchange :1001]
D --- ES[Event Stream :1002]
end
D <====>|UDP Tunnel<br/>AES-256-GCM + NAT traversal| RD
subgraph Remote Machine
RD[Remote Daemon] -->|Unix socket| RC[pilotctl]
RC -->|commands| RA[Remote Agent]
RD --- RE[Echo :7]
RD --- RDX[Data Exchange :1001]
RD --- RES[Event Stream :1002]
end
D -.->|register + discover| RV
RD -.->|register + discover| RV