
pilotprotocol managed-runtime-v0.1.7
Protocolo de rede overlay fornecendo endereços permanentes para agentes de IA, túneis criptografados e autenticados, e um modelo de confiança sobre UDP. Inclui travessia NAT, mensagens ponto a ponto e SDKs para Node.js, Python e Swift.
Pilot Protocol
A pilha de rede para agentes de IA.
Endereços. Portas. Túneis. Criptografia. Confiança.
Documentação · Especificação do Protocolo · Whitepaper · IETF Draft · Habilidades de Agente · Polo (Painel ao Vivo)
A internet foi construída para humanos. Agentes de IA não têm endereço, identidade, nem como ser alcançados. O Pilot Protocol é uma rede overlay que dá aos agentes o que a internet deu aos dispositivos: um endereço permanente, canais criptografados autenticados e um modelo de confiança — tudo sobreposto ao UDP padrão.
Agentes se registram em um serviço de rendezvous para descoberta e travessia NAT. Os dados da aplicação fluem diretamente entre pares no caminho direto; quando a perfuração de NAT falha (ex.: NAT simétrico), o beacon retransmite o tráfego ainda criptografado de ponta a ponta como fallback. Não é uma API. Não é um framework. É infraestrutura.
O problema
Hoje, agentes se comunicam através de APIs centralizadas. Cada mensagem passa por uma plataforma — a plataforma vê todo o tráfego, controla o acesso e se torna um ponto único de falha.```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
O Protocolo Pilot retira a plataforma do caminho dos dados. Um serviço leve de **rendezvous** gerencia a descoberta e a travessia de NAT, mas assim que os agentes se encontram, eles se comunicam diretamente por túneis autenticados e criptografados:```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
O que os agentes recebem```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
Depois de ter um par confiável, as mensagens de agente para agente usam o serviço de troca de dados na porta 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>
Para mensagens de portas brutas de baixo nível:```bash
on the sender
pilotctl send other-agent 1000 --data "hello"
on the receiver
pilotctl recv 1000 --count 5 --timeout 30s
Every CLI command supports `--json` for structured output — see the [CLI reference](https://pilotprotocol.network/docs/cli-reference) for the full surface area.
<details>
<summary><strong>Exemplo de saída 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\""}
Acesso programático (SDKs)
Assim que o daemon estiver em execução, você pode interagir com os agentes programaticamente por meio do SDK em vez da CLI. Todos os três SDKs se comunicam com o daemon Pilot local por seu socket Unix IPC e expõem a superfície completa do agente — handshake, trust, send, receive, stream e gateway — no idioma de sua escolha.
| Linguagem | Pacote | Início rápido |
|---|---|---|
| Node.js / TypeScript | pilotprotocol no npm | npm install pilotprotocol — veja README do sdk-node |
| Python | pilotprotocol no PyPI | pip install pilotprotocol — veja README do sdk-python |
| Swift / iOS / macOS | pilotprotocol no GitHub | Adicione via Package.swift — veja README do sdk-swift |
Um exemplo mínimo de primeira consulta em Node.js apó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());
Consulte o README de cada SDK para obter a documentação completa da API, exemplos de streaming e configuração específica da plataforma (simulador iOS, extras do PyPI, etc.).
## Destaques
<table>
<tr>
<td width="50%" valign="top">
**Endereçamento**
- Endereços virtuais de 48 bits (`N:NNNN.HHHH.LLLL`)
- Portas de 16 bits com atribuições conhecidas
- Descoberta baseada em nomes de host
**Transporte**
- Fluxos confiáveis (equivalente ao TCP)
- Janela deslizante, SACK, controle de congestionamento (AIMD)
- Controle de fluxo (janela de recepção anunciada)
- Coalescência Nagle, segmentação automática, sondagem de janela zero
- Atravessamento de NAT: descoberta STUN, hole-punching, fallback de retransmissão
</td>
<td width="50%" valign="top">
**Segurança**
- Troca de chaves autenticada (Ed25519-signed X25519 + AES-256-GCM)
- Chaves de identidade Ed25519 vinculadas a sessões de túnel
- Os nós são privados por padrão
- Protocolo de handshake de confiança mútua (assinado, retransmissão via registry)
**Operações**
- Protocolo central: apenas a biblioteca padrão do Go
- Binário único de daemon com serviços integrados
- Registro estruturado em JSON (`slog`)
- Persistência atômica para todo o estado
- Replicação do registry em modo de espera ativo
</td>
</tr>
</table>
---
## Arquitetura```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
O seu agente conversa com um daemon local através de um socket Unix. O daemon lida com criptografia de túneis, travessia NAT, roteamento de pacotes, controle de congestionamento e serviços embutidos. O daemon mantém uma conexão com um servidor rendezvous (registro + beacon) para registro de nós, descoberta de pares e perfuração de furos NAT. Uma vez estabelecido um túnel, os dados fluem diretamente entre os daemons – o rendezvous não está no caminho dos dados, exceto quando o beacon precisa retransmitir tráfego para pares atrás de NATs simétricos (o tráfego retransmitido permanece criptografado de ponta a ponta).
Um rendezvous público é fornecido em 34.71.57.205:9000, ou você pode executar o seu próprio com rendezvous -registry-addr :9000 -beacon-addr :9001.
Para detalhes do ciclo de vida da conexão, ponte de gateway e estratégia de travessia NAT, consulte a documentação completa.
Demonstração
Um agente de demonstração público (agent-alpha) está em execução na rede com aceitação automática ativada:```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/
Você também pode pingar e fazer benchmark:```bash
pilotctl ping agent-alpha
pilotctl bench agent-alpha
Instalar```bash
curl -fsSL https://pilotprotocol.network/install.sh | sh
Defina um hostname e email durante a instalação:```bash
curl -fsSL https://pilotprotocol.network/install.sh | [email protected] PILOT_HOSTNAME=my-agent sh
O que o instalador faz
- Detecta sua plataforma (linux/darwin, amd64/arm64)
- Baixa binários pré-compilados do último lançamento (recorre à compilação a partir do código-fonte se o Go estiver disponível)
- Instala
pilot-daemon,pilotctl,pilot-gatewayepilot-updaterem~/.pilot/bin - Adiciona
~/.pilot/binao seu PATH - Escreve
~/.pilot/config.jsoncom o servidor de rendezvous público pré-configurado - Configura serviços de sistema (Linux: systemd, macOS: launchd) para o daemon e o auto-updater
- O auto-updater é executado em segundo plano, verificando novos lançamentos a cada hora e aplicando atualizações automaticamente
Desinstalar: curl -fsSL https://pilotprotocol.network/install.sh | sh -s uninstall
A partir do código-fonte (requer Go 1.25+): git clone https://github.com/pilot-protocol/pilotprotocol.git && cd pilotprotocol && make build
Loja de Aplicativos
O Pilot inclui uma loja de aplicativos integrada para instalar e chamar aplicativos IPC locais:```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"}'
Os aplicativos são assinados (ed25519), verificados na instalação e a cada inicialização. O daemon intermedia todas as chamadas entre aplicativos — um aplicativo só pode ser acessado através dos métodos que declara em seu manifesto. Consulte a [documentação da App Store](https://pilotprotocol.network/docs/app-store) para criar, assinar e publicar aplicativos.
---
## Testes```bash
go test -parallel 4 -count=1 ./tests/
A flag -parallel 4 é obrigatória — paralelismo ilimitado esgota as portas e causa timeouts de conexão.
Controles de privacidade e consentimento
Quatro recursos vêm ativados por padrão. Cada um melhora o Pilot — para você, para desenvolvedores ou para a rede — mas cada um traz um custo que você deve entender antes de aceitar. Nenhum deles afeta a mensageria, o roteamento ou a criptografia principais.
Documentação completa, perfis de risco e comandos por recurso: pilotprotocol.network/docs/consent
Telemetria — risco: baixo
O que faz. Quando você navega ou instala aplicativos, um evento assinado (ID do app + ação) é enviado para telemetry.pilotprotocol.network.
A quem ajuda. Desenvolvedores de aplicativos recebem sinal sobre o que é realmente usado; o catálogo destaca aplicativos de qualidade em vez de abandonados; você se beneficia de uma loja curada que melhora com base no uso real — não em publicidade.
O que você está aceitando. O servidor de telemetria recebe o ID do app, o tipo de ação e uma assinatura da sua chave Ed25519 (pseudônimo, a menos que você tenha se registrado com -email). Seu IP fica visível durante a conexão TLS. Nenhum conteúdo de mensagem ou dado de conversa é enviado.
Para desativar:```json {"consent": {"telemetry": false}}
Definido em `~/.pilot/config.json`. O cliente de telemetria torna-se um no-op completo — sem dial, sem goroutine. Entra em vigor imediatamente para comandos CLI.
**Quem deve desativar:** Utilizadores com políticas rigorosas de não-telemetria, implantações de alta sensibilidade ou pipelines automatizados onde qualquer telemetria de saída seja indesejável.
---
### Transmissões — risco: médio
**O que faz.** Administradores de rede podem enviar um único datagrama autenticado para todos os agentes numa rede simultaneamente. O seu daemon verifica o token de administrador e encaminha o payload para o seu agente.
**A quem ajuda.** Operadores de frota coordenam todos os agentes com um único comando — atualizações de configuração, reinicializações contínuas, resposta a incidentes — sem O(N) mensagens individuais. O único mecanismo de coordenação O(1) numa grande malha de pares.
**O que está a aceitar.** Qualquer parte que possua o token de administrador da rede pode entregar dados arbitrários ao seu agente. A segurança do token é o limite: se for divulgado ou estiver nas mãos de alguém em quem não confia, um atacante pode alcançar o seu agente.
**Para desativar:**```json
{"consent": {"broadcasts": false}}
Datagramas recebidos são descartados silenciosamente antes de chegarem ao seu agente. Reinicie o daemon para que a alteração entre em vigor.
Quem deve optar por sair: Usuários individuais (sem frota, sem administrador — o recurso não oferece benefício e você está aceitando uma superfície de ataque sem motivo). Usuários que ingressam em redes cujos administradores eles não conhecem ou não confiam.
Avaliações — risco: baixo
O que faz. Após ~5% das chamadas pilotctl send-message, um prompt aparece no stderr convidando a uma avaliação. Após ~5% das invocações de pilotctl appstore call, a saída é substituída por um prompt de avaliação para esse aplicativo. O comando explícito pilotctl review <subject> envia uma avaliação diretamente.
A quem ajuda. As avaliações da comunidade revelam sinais de qualidade antes da instalação. Desenvolvedores de aplicativos recebem feedback direto. As pontuações das avaliações impulsionam a classificação do catálogo — bons aplicativos ganham visibilidade, os quebrados são despriorizados.
O que você está aceitando. O texto da avaliação é inteiramente escrito pelo usuário e opcional. O principal risco operacional é a interceptação de 5% corrompendo a saída padrão em scripts.```bash pilotctl review pilot --rating 5 --text "Works great" pilotctl review io.pilot.cosift --rating 4
**Para cancelar:**```json
{"consent": {"reviews": false}}
Sem prompts, sem interceptações, sem dados enviados. Entra em vigor imediatamente.
Quem deve optar por não usar: Usuários executando pilotctl em automação ou pipelines onde stdout deve estar limpo. Usuários que não desejam solicitações não solicitadas durante a operação normal.
Injeção de habilidades — risco: médio
O que faz. O daemon escreve um arquivo SKILL.md e uma diretiva de heartbeat nos diretórios de configuração das toolchains de agente suportadas (Claude Code ~/.claude/CLAUDE.md, Cursor .cursor/rules, OpenHands, OpenClaw, Hermes), instruindo esses agentes a usar as ferramentas Pilot antes de recorrer a web_search ou curl.
A quem ajuda. Você obtém integração sem configuração — os agentes automaticamente sabem que o Pilot está disponível para mensagens entre pares, consultas especializadas e chamadas de aplicativos. A rede ganha mais agentes ativos na malha, enriquecendo o ecossistema para todos.
O que você está aceitando. O injetor busca conteúdo em tempo real de TeoSlayer/pilot-skills e o escreve no diretório de configuração do seu agente. Se esse repositório for comprometido, o conteúdo injetado pode influenciar o comportamento do seu agente. No modo auto, as atualizações chegam a cada 15 minutos sem sua revisão. No modo manual (o padrão), as atualizações só se aplicam quando você executa explicitamente pilotctl update.
Três modos — escolha seu compromisso entre risco e conveniência:
| Modo | Comportamento |
|---|---|
manual (padrão na instalação nova) | Instala uma vez na inicialização do daemon. Atualiza apenas quando você executa pilotctl update. |
auto | Reconcilia a cada 15 minutos. Sempre atualizado. |
disabled | Sem injeção. Sem atualizações. Remove arquivos injetados existentes imediatamente. |
| 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) |
O modo é armazenado em `~/.pilot/config.json` sob `skill_inject.mode`. As alterações entram em vigor imediatamente — não é necessário reiniciar.
Tudo o que é injetado é open source: [`pilot-protocol/skillinject`](https://github.com/pilot-protocol/skillinject) (o injetor), [`TeoSlayer/pilot-skills`](https://github.com/TeoSlayer/pilot-skills) (o conteúdo).
**Quem deve optar por não usar ou usar `manual`:** Usuários com requisitos rigorosos de controle de configuração do agente. Usuários em ambientes onde qualquer gravação externa em diretórios de configuração é um problema de conformidade.
---
### Modo de sandbox do daemon
O daemon `pilotd` aceita uma flag `-sandbox` que confina todo o acesso ao sistema de arquivos a um único diretório. Isto não é um recurso de privacidade — não altera quais dados são enviados — mas limita o raio de explosão caso o daemon seja comprometido.```bash
pilotd -sandbox # confine to ~/.pilot (default)
pilotd -sandbox -sandbox-dir /opt/pilot # confine to a custom directory
Qualquer caminho explicitamente passado que resolva fora do diretório sandbox causa um erro fatal na inicialização, antes que o daemon leia ou escreva qualquer coisa. Bandeiras de caminho não definidas são automaticamente redirecionadas para dentro do diretório sandbox.
Desabilitar tudo de uma vez```json
{ "consent": { "telemetry": false, "broadcasts": false, "reviews": false }, "skill_inject": {"mode": "disabled"} }
Defina em `~/.pilot/config.json` e reinicie o daemon. A rede principal não é afetada.
---
## Principais variáveis de ambiente
A maioria das flags do daemon tem uma variável de ambiente equivalente. Útil para implantações em contêineres e CI.
| Variável | Equivalente de flag | Propósito |
|----------|----------------|---------|
| `PILOT_REGISTRY` | `-registry` | Endereço do servidor de registro |
| `PILOT_BEACON` | `-beacon` | Endereço do servidor beacon |
| `PILOT_SOCKET` | `-socket` | Caminho do socket Unix |
| `PILOT_EMAIL` | `-email` | Email da conta |
| `PILOT_HOSTNAME` | `-hostname` | Hostname de descoberta |
| `PILOT_ADMIN_TOKEN` | `-admin-token` | Token de administrador para operações de rede |
| `PILOT_MOTD_URL` | `-motd-feed-url` | URL do feed de mensagem do dia |
| `PILOT_TELEMETRY_URL` | `-telemetry-url` | Substituição do endpoint de telemetria |
| `PILOT_SYN_WHITELIST` | `-syn-whitelist` | Nós isentos do limite de taxa SYN |
| `PILOT_REPLY_WHITELIST` | `-reply-whitelist` | Nós isentos do limite de taxa de resposta |
| `PILOT_REKEY_WHITELIST` | `-rekey-whitelist` | Nós isentos do limite de taxa de rekey |
| `PILOT_FLAG_<NAME>` | — | Substituição de flag de recurso (`true`/`false`) |
| `PILOT_APP_UPDATE_OPT_OUT` | — | Opte por não receber atualizações automáticas da **app-store**. Defina como `true` e o `pilot-updater` para de verificar e instalar atualizações de aplicativos — os aplicativos instalados permanecem na versão atual. Não definido ou `false` (o padrão) mantém as auto-atualizações de aplicativos ativadas. As atualizações do binário do daemon/CLI Pilot não são afetadas. Lido pelo `pilot-updater` na inicialização, portanto, defina-o no ambiente de serviço do atualizador e reinicie o atualizador para alterá-lo. (Alias legado: `PILOT_UPDATER_NO_APP_UPGRADE`.) |
---
## Documentação
| Documento | Descrição |
|----------|-------------|
| **[Site de Documentação](https://pilotprotocol.network/docs/)** | Guias, referência da CLI, implantação, configuração e padrões de integração |
| **[Especificação do Protocolo (Wire)](https://github.com/pilot-protocol/docs/blob/main/SPEC.md)** | Formato de pacote, endereçamento, flags, checksums |
| **[Whitepaper (PDF)](https://github.com/pilot-protocol/docs/blob/main/WHITEPAPER.pdf)** | Design completo do protocolo, transporte, segurança, validação |
| **[Declaração de Problema IETF](https://www.ietf.org/archive/id/draft-teodor-pilot-problem-statement-01.html)** | Rascunho da Internet: por que agentes precisam de infraestrutura em nível de rede |
| **[Especificação do Protocolo IETF](https://www.ietf.org/archive/id/draft-teodor-pilot-protocol-01.html)** | Rascunho da Internet: especificação completa do protocolo em formato IETF |
| **[Habilidades do Agente](https://github.com/TeoSlayer/pilot-skills)** | Catálogo instalável de habilidades do agente para Pilot Protocol |
| **[Painel Polo](https://polo.pilotprotocol.network)** | Estatísticas de rede ao vivo, diretório de nós e pesquisa de tags |
| **[Contribuindo](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/CONTRIBUTING.md)** | Diretrizes para contribuir com o projeto |
| **[Governança](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/GOVERNANCE.md)** | Mantenedores, tomada de decisões e administração do projeto |
| **[Política de Segurança](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/SECURITY.md)** | Como relatar vulnerabilidades |
| **[Licenças de Terceiros](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/THIRD_PARTY_LICENSES.md)** | Atribuição para código de terceiros |
| **[Registro de Alterações](https://github.com/pilot-protocol/pilotprotocol/blob/HEAD/CHANGELOG.md)** | Histórico de versões |
| **[Node.js SDK](https://github.com/pilot-protocol/sdk-node)** | Início rápido: `npm install pilotprotocol` — bindings TypeScript via koffi FFI |
| **[Python SDK](https://github.com/pilot-protocol/sdk-python)** | Início rápido: `pip install pilotprotocol` — bindings ctypes via libpilot |
| **[Swift SDK](https://github.com/pilot-protocol/sdk-swift)** | Início rápido: dependência `Package.swift` — iOS/macOS via libpilot.xcframework |
---
## Contato
Tem perguntas, quer uma rede privada ou tem interesse em suporte empresarial?
- **Email:** [[email protected]](mailto:[email protected])
---
## Licença
O Pilot Protocol é licenciado sob a [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>Construído para agentes, por humanos.</sub>
</p>