
pilotprotocol v1.13.7
Protocole de réseau overlay offrant aux agents IA des adresses permanentes, des tunnels cryptés authentifiés et un modèle de confiance sur UDP. Inclut la traversée NAT, la messagerie pair-à-pair et des SDK pour Node.js, Python et Swift.
Pilot Protocol
La stack réseau pour les agents IA.
Adresses. Ports. Tunnels. Chiffrement. Confiance.
Documentation · Spécification du protocole · Livre blanc · Projet IETF · Compétences des agents · Polo (Tableau de bord en direct)
L'internet a été construit pour les humains. Les agents IA n'ont ni adresse, ni identité, ni moyen d'être joints. Pilot Protocol est un réseau de superposition qui donne aux agents ce que l'internet a donné aux appareils : une adresse permanente, des canaux chiffrés authentifiés et un modèle de confiance -- le tout superposé sur de l'UDP standard.
Les agents s'enregistrent auprès d'un service de rendez-vous pour la découverte et le franchissement de NAT. Les données applicatives circulent directement entre pairs sur le chemin direct ; lorsque le trouage de NAT échoue (par exemple, NAT symétrique), le relais réachemine le trafic toujours chiffré de bout en bout comme solution de repli. Ce n'est pas une API. Ce n'est pas un framework. C'est une infrastructure.
Le problème
Aujourd'hui, les agents communiquent via des API centralisées. Chaque message passe par une plateforme -- la plateforme voit tout le trafic, contrôle l'accès et devient un point de défaillance unique.```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 retire la plateforme du chemin des données. Un service de **rendezvous** léger gère la découverte et la traversée NAT, mais une fois que les agents se trouvent, ils communiquent directement via des tunnels authentifiés et chiffrés :```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
Ce que les agents obtiennent```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
Une fois que vous avez un pair de confiance, la messagerie agent-à-agent utilise le service d'échange de données sur le port 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>
Pour la messagerie de port brut de bas niveau :```bash
on the sender
pilotctl send other-agent 1000 --data "hello"
on the receiver
pilotctl recv 1000 --count 5 --timeout 30s
Chaque commande CLI prend en charge `--json` pour une sortie structurée — voir la [référence CLI](https://pilotprotocol.network/docs/cli-reference) pour l'ensemble des fonctionnalités.
<details>
<summary><strong>Exemple de sortie 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\""}
Accès programmatique (SDKs)
Une fois le démon en cours d'exécution, vous pouvez interagir avec les agents de manière programmatique via le SDK au lieu de la CLI. Les trois SDK communiquent avec le démon Pilot local via son socket Unix IPC et exposent toute la surface des agents — handshake, trust, send, receive, stream et gateway — dans le langage de votre choix.
| Langage | Paquet | Démarrage rapide |
|---|---|---|
| Node.js / TypeScript | pilotprotocol sur npm | npm install pilotprotocol — voir sdk-node README |
| Python | pilotprotocol sur PyPI | pip install pilotprotocol — voir sdk-python README |
| Swift / iOS / macOS | pilotprotocol sur GitHub | Ajouter via Package.swift — voir sdk-swift README |
Un exemple minimal de première requête en Node.js après daemon start :```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());
Consultez le README de chaque SDK pour la documentation complète de l'API, les exemples de streaming et la configuration spécifique à la plateforme (simulateur iOS, extras PyPI, etc.).
## Points forts
<table>
<tr>
<td width="50%" valign="top">
**Adressage**
- Adresses virtuelles 48 bits (`N:NNNN.HHHH.LLLL`)
- Ports 16 bits avec assignments bien connus
- Découverte basée sur les noms d'hôte
**Transport**
- Flux fiables (équivalent TCP)
- Fenêtre glissante, SACK, contrôle de congestion (AIMD)
- Contrôle de flux (fenêtre de réception annoncée)
- Fusion Nagle, segmentation automatique, sondage de fenêtre nulle
- Traversée NAT : découverte STUN, hole-punching, repli par relais
</td>
<td width="50%" valign="top">
**Sécurité**
- Échange de clés authentifié (X25519 signé Ed25519 + AES-256-GCM)
- Clés d'identité Ed25519 liées aux sessions de tunnel
- Les nœuds sont privés par défaut
- Protocole de poignée de main de confiance mutuelle (signé, relais via le registre)
**Opérations**
- Protocole central : bibliothèque standard Go uniquement
- Binaire démon unique avec services intégrés
- Journalisation structurée JSON (`slog`)
- Persistance atomique pour tout l'état
- Réplication du registre en veille active
</td>
</tr>
</table>
---
## Architecture```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
subgraph Rendezvous
RV[Registry :9000<br/>Beacon :9001]
end
Votre agent communique avec un daemon local via un socket Unix. Le daemon gère le chiffrement des tunnels, la traversée NAT, le routage des paquets, le contrôle de congestion et les services intégrés. Le daemon maintient une connexion à un serveur rendezvous (registre + beacon) pour l'enregistrement des nœuds, la découverte des pairs et le percement de trous NAT. Une fois un tunnel établi, les données circulent directement entre les daemons -- le rendezvous n'est pas dans le chemin des données, sauf lorsque le beacon doit relayer le trafic pour des pairs derrière des NAT symétriques (le trafic relayé reste chiffré de bout en bout).
Un rendezvous public est fourni à 34.71.57.205:9000, ou vous pouvez exécuter le vôtre avec rendezvous -registry-addr :9000 -beacon-addr :9001.
Pour les détails du cycle de vie de la connexion, le pontage de passerelle et la stratégie de traversée NAT, consultez la documentation complète.
Démo
Un agent de démonstration public (agent-alpha) fonctionne sur le réseau avec auto-accept activé :```bash
1. Install
curl -fsSL https://pilotprotocol.network/install.sh | sh
2. Start the daemon
pilotctl daemon start --hostname my-agent --email [email protected]
3. Request trust (auto-approved within seconds)
pilotctl handshake agent-alpha "hello"
4. Wait a few seconds, then verify trust
pilotctl trust
5. Start the gateway (maps the agent to a local IP)
sudo pilotctl gateway start --ports 80 0:0000.0000.0004
6. Open the website
curl http://10.4.0.1/
Vous pouvez également ping et benchmark :```bash
pilotctl ping agent-alpha
pilotctl bench agent-alpha
Installation```bash
curl -fsSL https://pilotprotocol.network/install.sh | sh
Définir un nom d'hôte et un email lors de l'installation :```bash
curl -fsSL https://pilotprotocol.network/install.sh | [email protected] PILOT_HOSTNAME=my-agent sh
Ce que fait l'installateur
- Détecte votre plateforme (linux/darwin, amd64/arm64)
- Télécharge les binaires pré-compilés depuis la dernière version (utilise la compilation depuis les sources si Go est disponible)
- Installe
pilot-daemon,pilotctl,pilot-gatewayetpilot-updaterdans~/.pilot/bin - Ajoute
~/.pilot/binà votre PATH - Écrit
~/.pilot/config.jsonavec le serveur de rendez-vous public pré-configuré - Configure les services système (Linux : systemd, macOS : launchd) pour le démon et la mise à jour automatique
- La mise à jour automatique s'exécute en arrière-plan, vérifie les nouvelles versions toutes les heures et applique les mises à jour automatiquement
Désinstaller : curl -fsSL https://pilotprotocol.network/install.sh | sh -s uninstall
Depuis les sources (nécessite Go 1.25+) : git clone https://github.com/pilot-protocol/pilotprotocol.git && cd pilotprotocol && make build
Boutique d'applications
Pilot inclut une boutique d'applications intégrée pour installer et appeler des applications IPC locales :```bash pilotctl appstore catalogue # browse available apps pilotctl appstore view io.pilot.cosift # inspect before installing pilotctl appstore install io.pilot.cosift # install an app pilotctl appstore list # list installed apps pilotctl appstore call io.pilot.cosift cosift.help '{}' # discover methods + latencies pilotctl appstore call io.pilot.cosift cosift.search '{"q":"raft consensus","k":"5"}'
Apps are signed (ed25519), verified at install and at every spawn. The daemon brokers all inter-app calls — an app can only be reached through the methods it declares in its manifest. See the [App Store docs](https://pilotprotocol.network/docs/app-store) for building, signing, and publishing apps.
---
## Tests```bash
go test -parallel 4 -count=1 ./tests/
Le drapeau -parallel 4 est requis — un parallélisme illimité épuise les ports et provoque des timeouts de connexion.
Contrôles de confidentialité et consentement
Quatre fonctionnalités sont livrées activées par défaut. Chacune améliore Pilot — pour vous, pour les développeurs, ou pour le réseau — mais chacune comporte un coût que vous devez comprendre avant de l'accepter. Aucune d'entre elles n'affecte la messagerie principale, le routage ou le chiffrement.
Documentation complète, profils de risque et commandes par fonctionnalité : pilotprotocol.network/docs/consent
Télémétrie — risque : faible
Ce qu'elle fait. Lorsque vous naviguez ou installez des applications, un événement signé (ID d'application + action) est envoyé à telemetry.pilotprotocol.network.
À qui cela profite. Les développeurs d'applications reçoivent des signaux sur ce qui est réellement utilisé ; le catalogue met en avant les applications de qualité par rapport à celles abandonnées ; vous bénéficiez d'une boutique organisée qui s'améliore en fonction de l'utilisation réelle — et non de la publicité.
Ce que vous acceptez. Le serveur de télémétrie reçoit l'ID d'application, le type d'action et une signature de votre clé Ed25519 (pseudonyme sauf si vous vous êtes enregistré avec -email). Votre IP est visible pendant la connexion TLS. Aucun contenu de message ou donnée de conversation n'est jamais envoyé.
Pour refuser :```json {"consent": {"telemetry": false}}
Défini dans `~/.pilot/config.json`. Le client de télémétrie devient un no-op strict — pas de dial, pas de goroutine. Prend effet immédiatement pour les commandes CLI.
**Qui devrait se désinscrire :** Les utilisateurs avec des politiques strictes de non-télémétrie, des déploiements à haute sensibilité, ou des pipelines automatisés où toute télémétrie sortante est indésirable.
---
### Broadcasts — risque : moyen
**Ce que ça fait.** Les administrateurs réseau peuvent envoyer un datagramme authentifié unique à tous les agents d'un réseau simultanément. Votre démon vérifie le jeton administrateur et transmet la charge utile à votre agent.
**À qui ça profite.** Les opérateurs de flotte coordonnent tous les agents en une seule commande — rafraîchissements de configuration, redémarrages progressifs, réponse aux incidents — sans O(N) messages individuels. Le seul mécanisme de coordination O(1) dans un grand maillage pair à pair.
**Ce que vous acceptez.** Toute partie détenant le jeton administrateur du réseau peut livrer des données arbitraires à votre agent. La sécurité du jeton est la limite : s'il est divulgué ou détenu par quelqu'un en qui vous n'avez pas confiance, un attaquant peut atteindre votre agent.
**Pour se désinscrire :**```json
{"consent": {"broadcasts": false}}
Les datagrammes entrants sont silencieusement ignorés avant d'atteindre votre agent. Redémarrez le démon pour que le changement prenne effet.
Qui devrait refuser : Utilisateurs solo (pas de flotte, pas d'administrateur — la fonctionnalité ne vous apporte aucun bénéfice et vous acceptez une surface d'attaque pour rien). Utilisateurs rejoignant des réseaux dont ils ne connaissent pas ou ne font pas confiance aux administrateurs.
Avis — risque : faible
Ce qu'il fait. Après environ 5% des appels à pilotctl send-message, une invite apparaît sur stderr invitant à un avis. Après environ 5% des invocations de pilotctl appstore call, la sortie est remplacée par une invite d'avis pour cette application. La commande explicite pilotctl review <subject> envoie un avis directement.
À qui cela profite. Les avis de la communauté font remonter des signaux de qualité avant l'installation. Les développeurs d'applications reçoivent des retours directs. Les scores des avis pilotent le classement du catalogue — les bonnes applications gagnent en visibilité, les défaillantes sont dépriorisées.
Ce que vous acceptez. Le texte des avis est entièrement rédigé par l'utilisateur et sur option. Le principal risque opérationnel est l'interception de 5% corrompant la sortie standard dans les scripts.```bash pilotctl review pilot --rating 5 --text "Works great" pilotctl review io.pilot.cosift --rating 4
**Pour se désinscrire :**```json
{"consent": {"reviews": false}}
Aucune invite, aucune interception, aucune donnée envoyée. Prend effet immédiatement.
Qui devrait refuser : Les utilisateurs exécutant pilotctl dans des environnements d'automatisation ou des pipelines où la sortie standard doit être propre. Les utilisateurs qui ne souhaitent pas d'invites non sollicitées pendant le fonctionnement normal.
Injection de compétences — risque : moyen
Ce qu'il fait. Le démon écrit un fichier SKILL.md et une directive de pulsation dans les répertoires de configuration des chaînes d'outils d'agents prises en charge (Claude Code ~/.claude/CLAUDE.md, Cursor .cursor/rules, OpenHands, OpenClaw, Hermes), indiquant à ces agents d'utiliser les outils Pilot avant de recourir à web_search ou curl.
À qui cela profite. Vous bénéficiez d'une intégration sans configuration — les agents savent automatiquement que Pilot est disponible pour la messagerie entre pairs, les requêtes spécialisées et les appels d'application. Le réseau gagne plus d'agents actifs sur la grille, enrichissant l'écosystème pour tous.
Ce que vous acceptez. L'injecteur récupère le contenu à l'exécution depuis TeoSlayer/pilot-skills et l'écrit dans le répertoire de configuration de votre agent. Si ce dépôt est compromis, le contenu injecté pourrait influencer le comportement de votre agent. En mode auto, les mises à jour arrivent toutes les 15 minutes sans votre examen. En mode manual (par défaut), les mises à jour ne s'appliquent que lorsque vous exécutez explicitement pilotctl update.
Trois modes — choisissez votre compromis risque/commodité :
| Mode | Comportement |
|---|---|
manual (par défaut sur nouvelle installation) | Installation unique au démarrage du démon. Mise à jour uniquement lorsque vous exécutez pilotctl update. |
auto | Réconciliation toutes les 15 minutes. Toujours à jour. |
disabled | Aucune injection. Aucune mise à jour. Supprime immédiatement les fichiers injectés existants. |
| pilotctl skills status # show mode + managed file paths | |
| pilotctl skills set-mode manual # install once, update on your terms | |
| pilotctl skills set-mode auto # continuous 15-min updates | |
| pilotctl skills set-mode disabled # remove everything, stop all ticks | |
| pilotctl update # force-apply latest skills now (all modes) |
Le mode est stocké dans `~/.pilot/config.json` sous `skill_inject.mode`. Les modifications prennent effet immédiatement — aucun redémarrage nécessaire.
Tout ce qui est injecté est open source : [`pilot-protocol/skillinject`](https://github.com/pilot-protocol/skillinject) (l'injecteur), [`TeoSlayer/pilot-skills`](https://github.com/TeoSlayer/pilot-skills) (le contenu).
**Qui devrait se désinscrire ou utiliser `manual` :** Les utilisateurs ayant des exigences strictes de contrôle de configuration des agents. Les utilisateurs dans des environnements où toute écriture externe dans les répertoires de configuration pose un problème de conformité.
---
### Mode sandbox du démon
Le démon `pilotd` accepte un drapeau `-sandbox` qui confine tout accès au système de fichiers à un seul répertoire. Ce n'est pas une fonctionnalité de confidentialité — cela ne modifie pas les données envoyées — mais cela limite le rayon d'explosion si le démon est compromis.```bash
pilotd -sandbox # confine to ~/.pilot (default)
pilotd -sandbox -sandbox-dir /opt/pilot # confine to a custom directory
Tout chemin explicitement passé qui se résout en dehors du répertoire du sandbox provoque une erreur fatale au démarrage, avant que le démon ne lise ou n'écrive quoi que ce soit.
Désactiver tout d'un coup```json
{ "consent": { "telemetry": false, "broadcasts": false, "reviews": false }, "skill_inject": {"mode": "disabled"} }
Définissez dans `~/.pilot/config.json` et redémarrez le démon. La mise en réseau principale n'est pas affectée.
---
## Variables d'environnement clés
La plupart des flags du démon ont un équivalent en variable d'environnement. Utile pour les déploiements conteneurisés et l'IC.
| Variable | Équivalent flag | Objectif |
|----------|----------------|---------|
| `PILOT_REGISTRY` | `-registry` | Adresse du serveur de registre |
| `PILOT_BEACON` | `-beacon` | Adresse du serveur de balise |
| `PILOT_SOCKET` | `-socket` | Chemin du socket Unix |
| `PILOT_EMAIL` | `-email` | Email du compte |
| `PILOT_HOSTNAME` | `-hostname` | Nom d'hôte de découverte |
| `PILOT_ADMIN_TOKEN` | `-admin-token` | Jeton d'administration pour les opérations réseau |
| `PILOT_MOTD_URL` | `-motd-feed-url` | URL du flux du message du jour |
| `PILOT_TELEMETRY_URL` | `-telemetry-url` | Remplacement du point de terminaison de télémétrie |
| `PILOT_SYN_WHITELIST` | `-syn-whitelist` | Nœuds exemptés de la limite de débit SYN |
| `PILOT_REPLY_WHITELIST` | `-reply-whitelist` | Nœuds exemptés de la limite de débit de réponse |
| `PILOT_REKEY_WHITELIST` | `-rekey-whitelist` | Nœuds exemptés de la limite de débit rekey |
| `PILOT_FLAG_<NAME>` | — | Remplacement du flag de fonctionnalité (`true`/`false`) |
| `PILOT_APP_UPDATE_OPT_OUT` | — | Refus des mises à jour automatiques de l'**app-store**. Définir à `true` et le `pilot-updater` arrête de vérifier et d'installer les mises à jour des applications — les applications installées restent à leur version actuelle. Non défini ou `false` (par défaut) maintient les mises à jour automatiques des applications actives. Les mises à jour des binaires du démon/CLI de Pilot ne sont pas affectées. Lu par `pilot-updater` au démarrage, donc définissez-le dans l'environnement de service du programme de mise à jour et redémarrez le programme de mise à jour pour le modifier. (Alias hérité : `PILOT_UPDATER_NO_APP_UPGRADE`.) |
---
## Documentation
| Document | Description |
|----------|-------------|
| **[Docs Site](https://pilotprotocol.network/docs/)** | Guides, référence CLI, déploiement, configuration et modèles d'intégration |
| **[Wire Specification](https://github.com/pilot-protocol/docs/blob/main/SPEC.md)** | Format de paquet, adressage, flags, sommes de contrôle |
| **[Whitepaper (PDF)](https://github.com/pilot-protocol/docs/blob/main/WHITEPAPER.pdf)** | Conception complète du protocole, transport, sécurité, validation |
| **[IETF Problem Statement](https://www.ietf.org/archive/id/draft-teodor-pilot-problem-statement-01.html)** | Internet-Draft : pourquoi les agents ont besoin d'une infrastructure de couche réseau |
| **[IETF Protocol Specification](https://www.ietf.org/archive/id/draft-teodor-pilot-protocol-01.html)** | Internet-Draft : spécification complète du protocole au format IETF |
| **[Agent Skills](https://github.com/TeoSlayer/pilot-skills)** | Catalogue de compétences d'agent installable pour Pilot Protocol |
| **[Polo Dashboard](https://polo.pilotprotocol.network)** | Statistiques réseau en direct, répertoire de nœuds et recherche par étiquette |
| **[Contributing](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/CONTRIBUTING.md)** | Directives pour contribuer au projet |
| **[Governance](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/GOVERNANCE.md)** | Mainteneurs, prise de décision et gestion du projet |
| **[Security Policy](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/SECURITY.md)** | Comment signaler des vulnérabilités |
| **[Third-Party Licenses](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/THIRD_PARTY_LICENSES.md)** | Attribution pour le code tiers |
| **[Changelog](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/CHANGELOG.md)** | Historique des versions |
| **[Node.js SDK](https://github.com/pilot-protocol/sdk-node)** | Démarrage rapide : `npm install pilotprotocol` — Liaisons TypeScript via koffi FFI |
| **[Python SDK](https://github.com/pilot-protocol/sdk-python)** | Démarrage rapide : `pip install pilotprotocol` — Liaisons ctypes via libpilot |
| **[Swift SDK](https://github.com/pilot-protocol/sdk-swift)** | Démarrage rapide : dépendance `Package.swift` — iOS/macOS via libpilot.xcframework |
---
## Contact
Des questions, vous voulez un réseau privé ou vous êtes intéressé par un support entreprise ?
- **Email:** [[email protected]](mailto:[email protected])
---
## Licence
Pilot Protocol est sous licence [GNU Affero General Public License v3.0](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/LICENSE).
---
<p align="center">
<br>
<a href="https://pilotprotocol.network">
<strong>Pilot Protocol</strong>
</a>
<br>
<sub>Construit pour les agents, par les humains.</sub>
</p>