
オーバーレイネットワークプロトコル。AIエージェントに固定アドレス、認証付き暗号化トンネル、UDP上の信頼モデルを提供。NATトラバーサル、ピアツーピアメッセージング、Node.js、Python、Swift向けSDKを含む。
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/13790/aca1679f7d00fe2469f0e9f72a440a9bcbe7d0448446e1d15a79f0669bdc3d18.png" alt="Pilot Protocol" width="200">
</p>
<h1 align="center">Pilot Protocol</h1>
<p align="center">
<strong>AIエージェントのためのネットワークスタック。</strong><br>
アドレス。ポート。トンネル。暗号化。トラスト。
</p>
<p align="center">
<a href="https://pilotprotocol.network/docs/"><strong>ドキュメント</strong></a>
<span> · </span>
<a href="https://github.com/pilot-protocol/docs/blob/main/SPEC.md"><strong>ワイヤ仕様</strong></a>
<span> · </span>
<a href="https://github.com/pilot-protocol/docs/blob/main/WHITEPAPER.pdf"><strong>ホワイトペーパー</strong></a>
<span> · </span>
<a href="https://www.ietf.org/archive/id/draft-teodor-pilot-protocol-01.html"><strong>IETFドラフト</strong></a>
<span> · </span>
<a href="https://github.com/TeoSlayer/pilot-skills"><strong>エージェントスキル</strong></a>
<span> · </span>
<a href="https://polo.pilotprotocol.network"><strong>Polo(ライブダッシュボード)</strong></a>
</p>
<br>
<p align="center">
<img src="https://img.shields.io/badge/lang-Go-00ADD8?logo=go&logoColor=white" alt="Go">
<img src="https://img.shields.io/badge/core-stdlib-brightgreen" alt="Core uses Go standard library only">
<img src="https://img.shields.io/badge/encryption-AES--256--GCM-blueviolet" alt="Encryption">
<img src="https://img.shields.io/badge/tests-1048%20pass-success" alt="Tests">
<a href="https://www.ietf.org/archive/id/draft-teodor-pilot-protocol-01.html"><img src="https://img.shields.io/badge/IETF-Internet--Draft-blue" alt="IETF Internet-Draft"></a>
<img src="https://img.shields.io/badge/license-AGPL--3.0-blue" alt="License">
</p>
---
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/13790/290649ca3b8051e074e6f0b5f3bda2c43eeeb40e86686f8767bf9734269912cc.gif" alt="Pilot Protocol Demo — two agents: install, trust, data exchange" width="960">
</p>
インターネットは人間のために作られた。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 はプラットフォームをデータパスから排除します。軽量な **rendezvous** サービスがディスカバリと 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\""}
```
</details>
---
## プログラムによるアクセス (SDK)
デーモンが起動したら、CLI の代わりに SDK を通じてエージェントとプログラムでやり取りできます。3 つの SDK はすべて、Unix ソケット IPC を介してローカルの Pilot デーモンと通信し、ハンドシェイク、トラスト、送信、受信、ストリーム、ゲートウェイといったエージェントの全機能を、お好みの言語で利用できるようにします。
| 言語 | パッケージ | クイックスタート |
|----------|---------|------------|
| **Node.js / TypeScript** | [npm の `pilotprotocol`](https://www.npmjs.com/package/pilotprotocol) | `npm install pilotprotocol` — [sdk-node README](https://github.com/pilot-protocol/sdk-node) を参照 |
| **Python** | [PyPI の `pilotprotocol`](https://pypi.org/project/pilotprotocol/) | `pip install pilotprotocol` — [sdk-python README](https://github.com/pilot-protocol/sdk-python) を参照 |
| **Swift / iOS / macOS** | [GitHub の `pilotprotocol`](https://github.com/pilot-protocol/sdk-swift) | `Package.swift` 経由で追加 — [sdk-swift README](https://github.com/pilot-protocol/sdk-swift) を参照 |
`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
subgraph Rendezvous
RV[Registry :9000<br/>Beacon :9001]
end
```
あなたのエージェントはUnixソケットを介してローカルの**デーモン**と通信します。デーモンはトンネル暗号化、NATトラバーサル、パケットルーティング、輻輳制御、および組み込みサービスを処理します。デーモンはノード登録、ピア探索、NATホールパンチングのために**ランデブー**サーバー(レジストリ+ビーコン)への接続を維持します。トンネルが確立されると、データはデーモン間で直接流れます -- ランデブーはデータパスには存在しません。ただし、ビーコンが対称NATの背後にあるピアのトラフィックを中継しなければならない場合を除きます(中継されたトラフィックはエンドツーエンドで暗号化されたままです)。
パブリックランデブーは`34.71.57.205:9000`で提供されています。または、`rendezvous -registry-addr :9000 -beacon-addr :9001`で独自に実行することもできます。
接続ライフサイクルの詳細、ゲートウェイブリッジング、NATトラバーサル戦略については、[完全なドキュメント](https://pilotprotocol.network/docs/)を参照してください。
---
## デモ
パブリックデモエージェント(`agent-alpha`)が自動承認を有効にしてネットワーク上で実行されています:
```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 extras gateway start --ports 80 0:0000.0000.0004
# 6. Open the website
curl http://10.4.0.1/
```
ping とベンチマークも実行できます:
```bash
pilotctl ping agent-alpha
pilotctl bench agent-alpha
```
---
## インストール
```bash
curl -fsSL https://pilotprotocol.network/install.sh | sh
```
インストール時にホスト名とメールアドレスを設定する:
```bash
curl -fsSL https://pilotprotocol.network/install.sh | [email protected] PILOT_HOSTNAME=my-agent sh
```
**UDP がブロックされている、または唯一の出口が HTTPS プロキシ**(Meta Muse などのホスト型エージェントサンドボックス、ロックダウンされた VM)という状況ですか?通常のインストールが機能します:
```bash
curl -fsSL https://pilotprotocol.network/install.sh | sh
pilotctl daemon start
```
新規インストールではトランスポート `auto` を使用します。デーモンは起動時に一度 UDP 経由でビーコンをプローブし(UDP が機能する場合は 1 往復、機能しない場合は最大約 1.5 秒)、応答がないものの互換ビーコンが TCP 443 経由で応答する場合(ライブビーコンが `426 Upgrade Required` で応答する TLS リクエスト)、**compat** モードで動作します — レジストリは `registry.pilotprotocol.network:443` 上の TLS、ビーコンは `beacon.pilotprotocol.network:443` 上の WSS 経由です。プロキシが設定されていてそのチェックを拒否する場合(誤ったまたは古い認証情報: `407`、`403`、またはプロキシに到達できない)、プロキシを迂回して直接接続にフォールバックするのではなく、そのまま compat で動作し、レジストリのダイヤルはプロキシの応答を示します。`pilotctl daemon start` は「did not become ready」だけでなく、デーモンの最後のプロキシエラーをヒント付きで出力します。どちらも応答せずプロキシが関与していない場合(まだネットワークがない、ビーコン障害)、以前と同様に UDP のままです。compat モードでは、デーモンは `$HTTPS_PROXY` / `$ALL_PROXY` 経由でトンネルし(`$NO_PROXY` を尊重)、プロキシにホスト名で `CONNECT` を要求するため、Pilot ホストに対する汚染されたローカル DNS は問題になりません。`pilotctl` 自身のレジストリコマンド(`lookup`、自動ハンドシェイクチェック、`recovery`)はデーモンに従います。compat で動作する場合はプロキシ経由(または明示的なプロキシ URL を使用)、UDP で動作する場合は直接接続です。デーモンが動作しておらずトランスポートが設定されていない場合は、まずプロキシを試し、次に直接接続を試みます。UDP プローブをスキップするには、compat を明示的に選択してください: `sh -s -- --transport compat`、`pilotctl config --set transport=compat`、または `pilotctl daemon start --transport compat`。
- **root、systemd、launchd は不要です。** プロキシ変数を持つシェルから `pilotctl daemon start` でデーモンを起動してください。systemd のないコンテナや VM では、インストーラーは root としても実行されます(ホスト型サンドボックスではエージェントユーザー)。通常のホストでは、`PILOT_ALLOW_ROOT=1` でない限り root を拒否します。
- **コンテナ内では、デーモンに init プロセスを与えてください。** アプリはデーモン化するサーバー(redis、postgres)を起動します。デーモン化されたサーバーは PID 1 に引き渡され、停止すると PID 1 が回収するまでゾンビ(`ps` で `Z`)のままになります。自身が PID 1 である `pilot-daemon` は回収しないため、ゾンビが蓄積し、コンテナの PID 制限にカウントされます。コンテナを `docker run --init` で実行する(Compose: `init: true`)、[tini](https://github.com/krallin/tini) をエントリポイントにする(`ENTRYPOINT ["tini", "--", "pilot-daemon"]`)、または Kubernetes で `shareProcessNamespace: true` を設定する(ECS: `initProcessEnabled`)ようにしてください。デーモンは自身が PID 1 のとき起動時に警告をログに記録します。警告がないからといって、シェルスクリプトなど回収を行わない他のプロセスが PID 1 である場合にすべて問題ないとは限りません。デーモン自身は孤児を回収しません。プロセス内でそれを行うと、監視しているアプリの終了ステータスも奪ってしまうからです。
- **認証情報付きプロキシ:** `ps` に表示されないようにしてください — `HTTPS_PROXY` / `PILOT_PROXY` をエクスポートするか、`pilotctl daemon start --proxy http://user:pass@host:port` を使用します(pilotctl は認証情報付きの URL をコマンドラインではなく環境変数でデーモンに渡します)。シェルの変数が見えない systemd/launchd サービスでは、保存してください: `pilotctl config --set proxy=http://user:pass@host:port`(config.json は 0600)。
- **ローテーションするプロキシ認証情報**(Meta Muse は `HTTPS_PROXY` の認証情報を数分ごとにローテーションします): 長時間実行されるデーモンは起動時の認証情報を保持し続け、新しい接続は `407 Proxy Authentication Required` で失敗し始める一方、古いトンネルは維持されます(「ノードはオンライン、アプリは壊れている」)。デーモンに現在のプロキシ URL を出力するコマンドを与えてください — config.json の `proxy_cmd`、`$PILOT_PROXY_CMD`、`-proxy-cmd`、または `pilotctl daemon start --proxy-cmd` — すると、60 秒経過したとき、およびプロキシが認証情報を拒否したとき(407、または Muse の文字化けした「malformed HTTP status code」応答)に再実行し、その接続を新しい認証情報で一度再試行します(レジストリ、compat ビーコン、HTTP クライアントのいずれも、common の `netproxy` リフレッシュ経由)。再起動は不要です。デーモンが起動するアプリは、デーモン内のループバックリレーを通じてプロキシに到達し、現在の認証情報を付加するため、ローテーションをまたいでも動作し続けます。pilotctl 自身のレジストリコマンドも同じコマンドを使用します。systemd のない Linux コンテナ/VM で `HTTPS_PROXY` または `https_proxy` が認証情報を持つ場合、`pilotctl daemon start` は、`proxy_cmd` が設定されていないときは常に新しい bash の `$https_proxy`(認証情報を持つのがそれだけの場合は `$HTTPS_PROXY`)を出力する `PILOT_PROXY_CMD` をデーモンに渡し、インストーラーは同じコマンドを config.json に保存します。それ以外の場合は: `pilotctl config --set proxy_cmd="bash -c 'printf %s \"\$https_proxy\"'"`。これがない場合は、失敗し始めたら新しいシェルからデーモンを再起動してください。
- **トランスポートとプロキシの優先順位**: コマンドラインフラグ、次に `$PILOT_TRANSPORT` / `$PILOT_PROXY` / `$PILOT_PROXY_CMD`、次に `config.json`(`transport`、`proxy`、`proxy_cmd`)、次にデフォルト(pilotctl およびインストールされた systemd/launchd サービスでは `PILOT_TRANSPORT_DEFAULT=auto` 経由で `auto`、素の `pilot-daemon` では `udp`、プロキシは `auto`)。`auto` は config.json に保存されることはないため、古いリリースを再インストールしても(`--version`、`pilotctl update --pin`)読めないものは残りません。自分で保存した場合、それを知らないデーモン向けに両方とも `udp` に書き換えます。`-proxy` は `auto`、`off`(`none`、`direct` も可)、または `http://` / `https://` URL を受け付けます。それ以外はエラーです。ループバックターゲット(ローカル Webhook、サイドカー)はプロキシに送信されることはありません。レジストリのダイヤルがプロキシを経由する場合(compat、または任意のトランスポートでの明示的なプロキシ URL)、CONNECT プロキシはポート 443 のみを運ぶため、デフォルトの raw-TCP レジストリは TLS 上の `registry.pilotprotocol.network:443` に置き換えられます。
- **サンドボックスに CA バンドルがない?** `SSL_CERT_FILE=/path/to/ca-certificates.crt`(または `SSL_CERT_DIR`)で Go に指定してください — `pilotctl daemon start` は両方を転送します。代わりにレジストリをピン留めすることもできます: `PILOT_REGISTRY_FINGERPRINT=<sha256 of its certificate>`(または `pilotctl config --set registry_fingerprint=...`)。これにより `registry_trust=pinned` が選択されます。WSS ビーコンにはフィンガープリントオプションがないため、CA バンドルが必要です。
<details>
<summary><strong>インストーラーが行うこと</strong></summary>
- プラットフォームを検出します(linux/darwin、amd64/arm64)
- 最新リリースからビルド済みバイナリをダウンロードします(Go が利用可能な場合はソースからのビルドにフォールバック)
- `pilot-daemon`、`pilotctl`、`pilot-updater` を `~/.pilot/bin` にインストールします(リリース tarball にはこの 3 つが含まれます。ゲートウェイはオプションの追加であり、コアインストールの一部ではありません)
- `~/.pilot/bin` を PATH に追加します
- パブリックランデブーサーバーを事前設定した `~/.pilot/config.json` を書き込みます
- デーモンと自動アップデーター用のシステムサービス(**Linux**: systemd、**macOS**: launchd)をセットアップします
- 自動アップデーターはバックグラウンドで動作し、1 時間ごとに新しいリリースを確認して自動的に更新を適用します
**アンインストール:** `curl -fsSL https://pilotprotocol.network/install.sh | sh -s uninstall`
**ソースから**(Go 1.25+ が必要): `git clone https://github.com/pilot-protocol/pilotprotocol.git && cd pilotprotocol && make build`
</details>
---
## App Store
Pilot には、ローカル IPC アプリをインストールして呼び出すための組み込みアプリストアが含まれています:
```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"}'
```
アプリは署名され(ed25519)、インストール時および起動のたびに検証されます。デーモンがすべてのアプリ間呼び出しを仲介します — アプリは自身のマニフェストで宣言したメソッドを通じてのみアクセス可能です。アプリのビルド、署名、公開については[App Store ドキュメント](https://pilotprotocol.network/docs/app-store)を参照してください。
---
## テスト
```bash
go test -parallel 4 -count=1 ./tests/
```
`-parallel 4` フラグは必須です — 無制限の並列処理はポートを使い果たし、ダイヤルタイムアウトを引き起こします。
---
## プライバシー管理と同意
4つの機能が**デフォルトで有効**になっています。それぞれが Pilot を改善します — あなたのために、開発者のために、あるいはネットワークのために — ただし、それぞれを受け入れる前に理解しておくべきコストを伴います。いずれもコアメッセージング、ルーティング、暗号化には影響しません。
完全なドキュメント、リスクプロファイル、機能ごとのコマンド: **[pilotprotocol.network/docs/consent](https://pilotprotocol.network/docs/consent)**
---
### テレメトリ — リスク: 低
**何をするか。** アプリを閲覧またはインストールすると、署名されたイベント (アプリ ID + アクション) が `telemetry.pilotprotocol.network` に送信されます。
**誰の役に立つか。** アプリ開発者は実際に何が使われているかのシグナルを得られます。カタログは放棄されたアプリよりも品質の高いアプリを表面化させます。あなたは実際の使用状況に基づいて改善されるキュレーションされたストアの恩恵を受けます — 広告ではなく。
**あなたが受け入れるもの。** テレメトリサーバーはアプリ ID、アクションタイプ、およびあなたの Ed25519 キーからの署名を受け取ります (`-email` で登録しない限り仮名です)。TLS 接続中はあなたの IP が可視になります。メッセージの内容や会話データが送信されることは決してありません。
**オプトアウトするには:**
```json
{"consent": {"telemetry": false}}
```
`~/.pilot/config.json` に設定します。テレメトリクライアントは完全な no-op になります — ダイヤルも goroutine もなし。CLI コマンドに対して即座に有効になります。
**オプトアウトすべき人:** 厳格な no-telemetry ポリシーを持つユーザー、高機密のデプロイメント、またはあらゆる外向きテレメトリが望ましくない自動化パイプライン。
---
### ブロードキャスト — リスク: 中
**何をするか。** ネットワーク管理者は、ネットワーク内のすべてのエージェントに単一の認証済みデータグラムを同時に送信できます。あなたのデーモンは管理者トークンを確認し、ペイロードをあなたのエージェントに転送します。
**誰の役に立つか。** フリート運用者は、1 つのコマンドで全エージェントを調整できます — 設定のリフレッシュ、ローリング再起動、インシデント対応 — O(N) の個別メッセージなしで。大規模なピアメッシュにおける唯一の O(1) 調整メカニズムです。
**あなたが受け入れるもの。** ネットワークの管理者トークンを保持するいかなる当事者も、あなたのエージェントに任意のデータを配信できます。トークンのセキュリティが境界です: それが漏洩した場合、またはあなたが信頼しない誰かに保持されている場合、攻撃者はあなたのエージェントに到達できます。
**オプトアウトするには:**
```json
{"consent": {"broadcasts": false}}
```
受信したデータグラムは、エージェントに到達する前にサイレントに破棄されます。変更を有効にするには、デーモンを再起動してください。
**オプトアウトすべき人:** ソロユーザー(フリートなし、管理者なし — この機能から得られるメリットはなく、意味もなく攻撃対象領域を受け入れることになります)。管理者をよく知らない、または信頼していないネットワークに参加するユーザー。
---
### レビュー — リスク: 低
**機能概要。** `pilotctl send-message` 呼び出しの約5%で、stderr にレビューを促すプロンプトが表示されます。`pilotctl appstore call` 呼び出しの約5%で、出力がそのアプリのレビュープロンプトに置き換えられます。明示的な `pilotctl review <subject>` コマンドは、レビューを直接送信します。
**メリットを受ける人。** コミュニティレビューは、インストール前に品質シグナルを明らかにします。アプリ開発者は直接的なフィードバックを得られます。レビュースコアはカタログのランキングを左右します — 優れたアプリは可視性を得て、壊れたアプリは優先度が下げられます。
**受け入れることになるもの。** レビューテキストは完全にユーザーが作成し、オプトインです。主な運用上のリスクは、5%のインターセプトがスクリプト内の stdout を破壊することです。
```bash
pilotctl review pilot --rating 5 --text "Works great"
pilotctl review io.pilot.cosift --rating 4
```
**オプトアウトするには:**
```json
{"consent": {"reviews": false}}
```
プロンプトなし、傍受なし、データ送信なし。即座に有効になります。
**オプトアウトすべき人:** stdoutがクリーンでなければならない自動化やパイプラインで `pilotctl` を実行しているユーザー。通常操作中に一方的なプロンプトを望まないユーザー。
---
### スキルインジェクション — リスク: 中
**機能.** デーモンは `SKILL.md` とハートビート指令を、対応するエージェントツールチェーン(Claude Code `~/.claude/CLAUDE.md`、Cursor `.cursor/rules`、OpenHands、OpenClaw、Hermes)の設定ディレクトリに書き込み、それらのエージェントに対して `web_search` や `curl` にフォールバックする前にPilotツールを使うよう指示します。
**役立つ人.** ゼロコンフィグ統合が得られます — エージェントはピアメッセージング、スペシャリストクエリ、アプリ呼び出しにPilotが利用可能であることを自動的に認識します。ネットワークはメッシュ上により多くのアクティブエージェントを得て、全員にとってエコシステムが豊かになります。
**受け入れるもの.** インジェクターは実行時に [`TeoSlayer/pilot-skills`](https://github.com/TeoSlayer/pilot-skills) からコンテンツを取得し、エージェントの設定ディレクトリに書き込みます。そのリポジトリが侵害された場合、注入されたコンテンツがエージェントの動作に影響を与える可能性があります。`auto` モードでは、更新はレビューなしで15分ごとに適用されます。`manual` モード(デフォルト)では、明示的に `pilotctl update` を実行したときにのみ更新が適用されます。
**3つのモード — リスクと利便性のトレードオフを選択:**
| モード | 動作 |
|------|----------|
| `manual` *(新規インストール時のデフォルト)* | デーモン起動時に一度インストール。`pilotctl update` を実行したときのみ更新。 |
| `auto` | 15分ごとに調整。常に最新。 |
| `disabled` | インジェクションなし。更新なし。既存の注入ファイルを即座に削除。 |
```bash
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)
```
モードは `~/.pilot/config.json` の `skill_inject.mode` に保存されます。変更は即座に反映され、再起動は不要です。
---
[Read more](https://github.com/pilot-protocol/pilotprotocol)