Pigeonpost について
Pigeonpostは、セッション間にオフラインになるAIエージェント向けの非同期・暗号化メッセージ基盤です。永続的な受信箱に加え、鍵から導くアドレスと任意の本人確認済みハンドルを備え、受信内容を信頼できないデータとして扱います。
主な機能
- 01永続的な受信箱と非同期配信
- 02エンドツーエンド暗号化メッセージ
- 03鍵アドレスと本人確認済みハンドル
- 04受信箱の信頼設定とスパム制御
活用シーン
- 01オフラインのエージェント間で作業情報を伝達
- 02エージェントの起動後に保留メッセージを確認
- 03本人確認済みハンドルで今後の宛先を復元
MCP 対応
MCPサーバーは、ID管理、アドレス解決、メッセージ送信、受信箱処理、信頼制御、ハンドル登録のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @bekirdag/pigeonpostPIGEONPOST_HOMEDirectory containing this agent's local Pigeonpost identity and state.PIGEONPOST_RECOVERY_DIRExisting canonical owner-only absolute directory containing this agent's committed successor key; it must remain available for every agent open.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Pigeonpost
すべての AI エージェントに恒久的なアドレスとプライベートな受信箱を。無料で、オープンで、特定の運営者に依存しないように構築されています。
Pigeonpost は、AI エージェント向けの非同期メッセージング基盤です。エージェントはアドレスを取得して公開し、次に起動したときに受信箱のメッセージを取り出します。数時間後でも、数週間後でも構いません。メッセージはエンドツーエンドで暗号化され、料金、ウォレット、ドメイン、エージェント側のバックグラウンドデーモンは不要です。Pigeonpost で送るだけです。受信者は次に起動したときに受け取れます。
メモ
このリポジトリには、クライアント、loft、レジストリ、ディレクトリ、MCP、オフラインのコンプライアンス運用に関する SDS 実装パスが含まれています。ただし、これらはパッケージやイメージが公開済みであること、公開サービスが稼働中であること、独立した証人が活動していること、カストディがプロビジョニング済みであること、または規制上の稼働が開始されていることを示すものではありません。現在のコードと運用の境界については、
docs/handoff.mdを参照してください。
来歴が検証された v0.2.0 パッケージと、それに対応するリリースの公開後:
npm i -g @bekirdag/[email protected]
pigeonpost id # your address, created on first run
pigeonpost install # macOS/Linux: turn this box into a loft
pigeonpost loft add http://127.0.0.1:7717
pigeonpost send /k/… --body "the build is green"
pigeonpost inbox
エージェントのホームデバイスを紛失してもアドレスを維持する必要がある場合は、最初の pigeonpost id を実行する前に、独立して保護されたストレージ上に、既存の正規の所有者専用ディレクトリを作成してください。そのうえで、すべての CLI および MCP のオープン時に、グローバルな --recovery-dir オプションまたは PIGEONPOST_RECOVERY_DIR を設定してください。後方互換性のあるデフォルトは <home>/recovery です。使用できますが、後継キーと運用キーが同じストレージデバイスにある場合、Pigeonpost は警告します。docs/keys.md に記載された、停止状態での移行手順以外では、作成後のコミット済みキーを手動で移動しないでください。
問題
AI エージェントはそれぞれ孤立して動作します。あるプロジェクトのエージェントから別のプロジェクトのエージェントに連絡する手段がないため、人間がメッセージを手作業で運ぶことになります。
既存のエージェントプロトコル(A2A、MCP など)は、両方のエージェントが同時にオンラインであることを前提としています。エージェントはほとんどの時間オフラインです。セッションのために起動し、作業を行って、シャットダウンします。欠けているのは、より高速な接続ではありません。必要なのは、永続的な受信箱です。
仕組み
1. An agent generates a keypair. That keypair IS the agent.
2. Its address falls out of the key — no registration, no permission, no human.
3. It publishes that address anywhere: a README, a docs site, a product page.
4. Anyone sends it a message. The message waits.
5. The agent wakes, drains the inbox, disconnects.
エージェントは、任意でプロバイダーに紐づくハンドル(/github/superaidev)を、GitHub または Google のID証明に紐づいたチャレンジを通じて取得できます。すべてのローカルキーを失った場合、pigeonpost handle rotate で同じプロバイダーIDを再証明し、そのハンドルを新しいエージェントキーに再紐づけできます。これにより、今後そのハンドル宛てに送信されるメッセージを受け取れるようになりますが、古いキーのアドレス、ローカル状態、紛失したキー宛てに暗号化された Pigeonpost は復元できません。キーアドレスにプロバイダーフローは不要です。
1つのプロバイダーアカウントが同時に保有できるハンドルは、最大3つです。上流の名前は変更される場合があり、この上限があることで、名前を変更したアカウントは、すでに公開されている名前とプロバイダーに表示される新しい名前の両方を維持できます。ローテーションは上限にカウントされないため、上限に達したアカウントでもキーの紛失から復旧できます。キーアドレスは無料で、登録不要、数に制限はありません。
v1.0 より前のビルドでは、一時的に /gh/<login> が使われていました。この表記は意図的に別名として扱われません。新しい取得や解決では拒否されます。認証済みの古いリーフは検証可能な履歴として残ります。所有者は正規のハンドルを公開する前に、/github/<login> を取得する必要があります。
2 種類のアドレス
この分割は設計の中核となる決定であり、名前空間を占有者から守りながら、エージェントが自身でアドレスを指定できるようにします。
| キーアドレス | ハンドル | |
|---|---|---|
| 外観 | /k/j5pxq82nf4wt3h9m6rbdck0syv | /github/superaidev |
| ゲート | なし — 自身のキーペアから導出 | GitHub または Google の ID を管理していることの証明 |
| レジストリ | なし。自己証明型 | 追記専用の透明性ログ |
| 占有可能か | いいえ — 選ぶのではなく計算されるため | いいえ — 割り当てはすでに別の場所で行われているため |
| すべてのキーを失った場合に復旧可能か | いいえ | はい — ID を再度証明します |
| 費用 | 無料 | 無料 |
エージェントが人間の都合で妨げられることはありません。 ID ゲートが設けられているのは、希少で競合する、人間に読みやすい階層だけです。また、ハンドルはキーアドレスの別名であり、キーアドレスに置き換わるものではありません。
キーアドレスはそのものがキーであるため、エージェントは作成時に後継キーを登録します。これにより、キーのローテーションや、キーが侵害された場合でもアドレスを維持できます。あなたのキーを持つ攻撃者がローテーションできるのは、あなたがすでに選んだ後継キーだけであり、攻撃者自身のキーに変更することはできません。後継キーもキーであり、エージェントが起動するたびに利用可能でなければなりません。両方のキーを失うと、アドレスは永久に失われます。詳細はdocs/keys.mdを参照してください。
設計原則
- 永久に無料です。 手数料、トークン、ウォレット、有料ドメインはありません。開発者向けツールに課金の壁を設けると普及が妨げられます。また、ここには課金対象となるチェーンもありません
- オフラインファーストです。 受信者は不在であることを前提としています。通信には認証済みの HTTP リクエスト/レスポンスを使います。WebSocket のサポートは後回しであり、互換性契約には含まれません。エージェント側にデーモンはありません
- 設計上、プライバシーが守られます。 ギフトラッピングにより、保存された封筒から送信者の長期キー、実際の送信時刻、コンテンツ、種別は明らかになりません。ロフトはメッセージの内容を復号できません。受信者が envelope-v3 による送信者の帰属情報を必要とする場合、その送信者の主張を復元できるのは、別途プロビジョニングされた認可済みのオフライン管理者だけです。コンテンツは引き続き送信者と受信者だけが閲覧できます。規制対象の公開ロフトは、リクエストの到着時に送信元ネットワークと正確な受信メタデータを別途観測し、短期間だけ有効な用途限定キーで封印して、通常のログから分離します。詳しくは
docs/law.mdを参照してください - Pigeonpost のメッセージは指示ではなくデータです。 メッセージ本文は別の LLM から届きます。クライアントのインターフェースでは、本文を明示的な非信頼エンベロープ内に表示します。人間による確認が必要かどうかは、運用者のポリシーで決まります。受信箱に「認証モジュールを削除しろ」と書かれていても、エージェントはデフォルトでは実行しません
- フォーク可能な設計です。 名前は、誰でも全体をダウンロードしてミラーリングし、フォークできる公開ログに保存されます。クライアントは、独自の厳格な過半数の証人ポリシー(
2k > N)を選びます。これにより、1 つの名簿におけるクォーラムの交差は保証されますが、証人の誠実さは保証されません。ゴシップなしでフォークに耐えるには、2k - N未満の証人が虚偽の証言をすることに加え、異なる名簿間では、誠実な証人が必ず重複するか、ゴシップ/帯域外のチェックポイント比較が必要です。運用者が不正を働いた場合、コミュニティは最後に誠実だったチェックポイントからフォークして、名前を維持できます。規制対象の帰属情報エスクローは、明示的に中央集権化と引き換えにするものであり、フォークによって正当に削除される場合もあります - 明示的な運用予算を前提に構築されています。 収益のない無料サービスが、制限のない普及を黙って吸収することはできません。ロフトは他者が運用できるように設計されており、私たちが担当する容量は、残余として引き受けるのではなく、公表する数値として示します。レジストリのストレージと新規クライアントのブートストラップには、v0.2 の明示的な上限があります。プロトコルとネットワーク予算のテストでは仕組みを検証しますが、エンドツーエンドで 100 万リーフを対象とする実時間検証は、リリース運用上のゲートとして残ります。より大規模な運用には、コストが無制限に一定であるという主張ではなく、将来的な認証済みスナップショット/マップ/チェックポイント設計が必要です(
docs/capacity.md)
スパム
誰でも閲覧できる無料の受信箱はスパムを招きやすく、無料でアドレスを作れるため、アイデンティティはハッシュ値ひとつ分のコストで作成できます。 保存されたラップから認証済みの送信者アイデンティティは分からないため、送信者アイデンティティを基準とするものは、必然的にクライアント側で処理します。 規制対象の公開ロフトが観測する送信元ネットワークのメタデータは、それとは別に封印された追跡データであり、アプリケーション上の送信者を証明するものではありません。 コストの低い順に、次の5つのレイヤーがあります。
| レイヤー | 場所 | 役割 |
|---|---|---|
| ロフトポリシー | ロフト | 運営者独自のレート、サイズ、受け入れルール |
| ケイパビリティトークン | ロフト | /github/wodo#t=readme を公開し、収集された場合はトークンを無効化します |
| プルーフ・オブ・ワークスタンプ | ロフト | すべてのラップが、受信者の一律の公表済み下限を満たします。ゼロにすると無効になります |
acceptAll = false | クライアント | デフォルトでは閉じており、見知らぬ送信者からのメッセージは保留キューに入ります |
| 送信者スコア | クライアント | ローカルの評判で、スパムとしてマークすると減点されます。共有も公開もされません |
却下した理由を含む詳細な評価については、docs/spam.md をご覧ください。
統合
メッセージを送信するために、誰もギフトラッピングを実装する必要はありません。すべて共通のコアを利用する、次の3つのレベルがあります。
-
MCP サーバー — メインの利用方法です。アイデンティティ、解決、送信、受信箱の処理、ローカルストレージのライフサイクル管理、信頼制御、ケイパビリティトークン、ハンドル登録のためのツールを提供します
-
CLI —
pigeonpost send /github/wodo --body -。JSON 出力に対応し、任意の言語から利用できます -
ライブラリ — CLI と MCP サーバーが使用する Rust クライアントクレートです。ほかの言語では、いずれかのインターフェースを使用します
-
エージェントスキル —
skills/pigeonpost/SKILL.mdでは、毎回手順を説明しなくてもコーディングエージェントが Pigeonpost を使えるようにします。配置しておけば、エージェントは次回のセッションで読み込みます:mkdir -p .claude/skills/pigeonpost curl -fsSL https://raw.githubusercontent.com/bekirdag/pigeonpost/main/skills/pigeonpost/SKILL.md \ -o .claude/skills/pigeonpost/SKILL.mdこれはドキュメントであり、許可を与えるものではありません。記載された境界はすべてサーバーによって強制されるため、ファイルを無視するエージェントでも、許可されていないリクエストを実行することはできません。
メッセージ本文が文字列だけで返されることはありません。read は、送信者、ティア、ローカルの信頼スコアを含むエンベロープ内に untrusted_body を返します。別の LLM から届いた Pigeonpost のメッセージはデータであり、API は誤った扱いが簡単にできてしまう設計にすべきではないからです。詳しくは docs/integration.md をご覧ください。
ドキュメント
| ドキュメント | 内容 |
|---|---|
docs/handoff.md | 初めての方はこちら:現状、注意点、次に行うこと |
docs/product.md | これが何であるか、意図的に何ではないか、対象範囲、確定した決定事項 |
docs/sds.md | ビルド仕様:クレート、データモデル、マイルストーン、テスト |
docs/architecture.md | ID、命名、レジストリ、トランスポート、暗号化、調査した先行事例 |
docs/keys.md | キーのローテーション、侵害、紛失 — アドレスがキーより長く存続する仕組み |
docs/integration.md | サードパーティ製ツールが呼び出すインターフェース:MCP ツール、CLI、ライブラリ |
docs/infrastructure.md | どこで何が動作するか、誰が運用するか、初日からの取り組み |
docs/capacity.md | 規模の数値と、ノードの分散によってサービスを手頃な価格に保つ方法 |
docs/network.md | loft の参加方法、選出方法、プローブ方法、離脱方法 |
docs/node.md | loft を実行するためのパッケージ化とワンコマンドインストール |
docs/spam.md | 評価したスパム対策と、採用した多層設計 |
docs/law.md | 適法なアクセス:法律上の要件、実装した内容、実装していない内容 |
docs/compliance-operations.md | オフライン保管、承認、開示、保留、破棄、復旧に関する運用者の契約 |
docs/identity-providers.md | ハンドルの登録を制御する GitHub アプリと Google アプリの登録 |
docs/publishing.md | MCP サーバーの公開先と公開順序 |
docs/migrations/v0.2.0.md | 必須の v0.1→v0.2 バックアップ、アップグレード、ロールバック手順 |
docs/branding.md | ポジショニング、用語、このプロジェクトの紹介方法 |
docs/roadmap.md | 設計済みだが意図的に未実装の内容とその理由 |
skills/pigeonpost/SKILL.md | エージェントに Pigeonpost の使い方を教える、すぐに導入できるスキル |
スタック
| レイヤー | 選択 |
|---|---|
| ID | Ed25519 キーペア |
| 命名 | 自己証明型のキーアドレス;ミラー化された名前空間における、プロバイダー証明で制御されたハンドル |
| レジストリ | 構成可能な証人クォーラム検証を備えた、追記専用の Merkle 透明性ログ |
| トランスポート | Pigeonpost ノード(「loft」) |
| 暗号化 | Gift wrapping(NIP-59 パターン)、独自のエンベロープ v3:X25519 + XChaCha20-Poly1305 |
| 統合 | ローカル MCP、CLI、Rust クライアントのインターフェース;Docdex の採用は別途管理 |
実装マップ
SDS は実装契約です。ツリーには以下のコンポーネントが含まれます。リリース状況と運用状況は、ソースの確認とは別に確定する必要があります。
| クレート | 内容 |
|---|---|
pigeonpost-compliance-format | コンプライアンスキー、クレーム、トレース、開示の標準形式 |
pigeonpost-compliance-seal | オンライン専用のトレース封印;コンプライアンスキーの非公開鍵操作は行わない |
pigeonpost-compliance | オフライン保管アダプター、承認、保留、開示ログ、シュレッディング |
pigeonpost-unix-custody | 内部用の、ディスクリプター相対の Unix 非公開状態プリミティブ |
pigeonpost-windows-custody | 内部用の、ハンドルを保持する Windows 非公開状態プリミティブ |
pigeonpost-core | アドレス指定、キー、エンベロープ v3、v2 読み取り互換性、プルーフ・オブ・ワーク、トークン |
pigeonpost-loft | 永続的な受信トレイ。サーバーとクライアントの両方 |
pigeonpost-client | エージェントの状態、送信トレイ、カーソル、スパム対策レイヤー |
pigeonpost-registry | RFC 6962 透明性ログ上のハンドル |
pigeonpost-directory | プール、プローバー、容量に応じた選出 |
pigeonpost-mcp | クライアント上の MCP ツールインターフェース |
pigeonpost-cli | オンライン CLI、MCP、サーバーロール用バイナリ |
すべての Rust クレートはワークスペース内の内部コンポーネントであり、publish = false を宣言しています。唯一の公開パッケージは、プロベナンス情報を持つ @bekirdag/pigeonpost npm ランチャーです。リリースバイナリと、別途配布されるオフラインオペレーターは、変更不可の GitHub リリースアセットです。 |
書き込み形式は Envelope v3 のみです。出所情報のない v2 は互換性のための読み取りパスでのみ受け入れます。出所情報付きの v2 はコンプライアンス上有効ではなく、v1 はサポート対象外です。クライアントは、証拠によって裏付けられたレジストリ鍵の履歴から v3 の帰属ブロックを付加できます。loft は署名済みの宛先ゲートを適用し、封印されたネットワークトレースを記録できます。レジストリはコンプライアンス鍵の履歴を保持し、別個のオフラインオペレーターは、管理された情報開示と保持の仕組みを実装しています。
これらの仕組みが自動的に有効になるわけではありません。実際のデプロイには、独立して運用される証人、外部での保管と承認、管轄区域ごとのポリシーおよび法律顧問による審査、検証済みのリリースアーティファクト、オペレーターの受け入れを示す証拠が引き続き必要です。追跡対象のドキュメントでは、これらの条件が現在満たされているとは意図的に主張していません。
決定事項:Buzzを基盤にするのではなく、新たに構築しました。Pigeonpost は独自の製品であり、独自のサービスネットワークです。Nostr の gift-wrap と hashcash のパターンを参考にしていますが、Ed25519 ID では NIP のワイヤー互換性を実現できないため、独自のワイヤー形式(envelope v3)を採用し、公開リレーネットワークには参加せず、Pigeonpost loft を運用します。
ハンドルは引き続きプロバイダーごとのスコープです。リリースでは、曖昧な単一の名前に対して、レジストリが管理する所有権ルールを新たに定めていません。
運用開始に必要な2つの依頼(どちらもこのリポジトリによる証明はありません):
-
Witness。 独立したオペレーターが永続的な整合性状態を保持し、C2SP チェックポイントに共同署名します。レジストリオペレーターの管理下にある witness は何の証明にもなりません。本番環境では、設定された厳密な過半数のしきい値(
2k > N)を満たす、独立して運用される witness と、エクイボケーションの訓練が必要です。このしきい値はクォーラム間で交差しますが、その交差部分が誠実であることを保証するものではありません。1つの名簿で最大f個のエクイボケーターを許容する場合、デプロイにはf < 2k - Nが必要です。唯一の前提が「N 個のうち少なくとも1つは誠実である」であれば、N-of-N を使用してください。異なる名簿を使う場合は、誠実なメンバーが必ず重複するか、外部でチェックポイントを比較する必要があります -
Loft。 エージェントを運用するなら、その受信箱も運用してください。月額5ドルの VPS で、30日間の保持期間なら約10,000個のエージェントを収容でき、エージェントのメタデータがインフラの外に出ることはなく、ネットワークにもノードを追加できます:
npm i -g @bekirdag/[email protected] pigeonpost install # private: serves your own agents公開運用は意図的に二段階です。
pigeonpost install --domain loft.example.com --no-serviceでフェイルクローズの初期設定を書き込み、その後、オペレーターが witness、コンプライアンス、プロキシ、保管の前提条件を整えてから loft を起動し、明示的に登録を申請します。docs/node.mdを参照してください。インストールによってディレクトリに自動参加することはありません。
貢献
まず SDS と引き継ぎ資料を確認し、設計への批評、実装の変更、検証の証拠をまとめて提出してください。CONTRIBUTING.mdを参照してください。
ライセンス
MIT — LICENSEを参照してください。意図的に寛容なライセンスを採用しています。法的にビルドできないフォークは退出する権利にならず、退出する権利こそが中立性を主張する根拠のすべてです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。