Pigeon:AIエージェントに「何をしてよいか」を署名付きで渡す新ライブラリ
Pigeon, a signed Pass for what a sub-agent may do
AIエージェントがサブエージェントを生成する際、親と同じAPIキーを渡すと、子エージェントが本番環境へのデプロイやDB閲覧など、過剰な権限を持つことになります。Pigeonはこれを防ぐため、子エージェントに「Pigeon Pass」と呼ばれる、許可された操作のみを記した署名付き資格情報を渡します。Pythonライブラリとして提供され、`grant`で権限を定義し、`delegate`で子に委譲、`verify`で実行前に検証します。子は権限を拡大できず、制約も緩められません。MCPミドルウェアとしても利用可能で、ツール呼び出しごとに細かい権限を発行できます。
アイデンティティはエージェントが誰かを示す。オーソリティは、それが何をしてよいかを示す。
- Retr0id
Retr0id:
> Pigeon Passは独自のクレデンシャル形式です。JWT、CWT、マカロン、Biscuit、UCANのプロファイルではありません。
なぜ?
> Pigeonは[...]キー管理者ではありません。
では、これは何なのですか? https://github.com/pigeonlabsHQ/pigeon/blob/eb6a1e97b80c4951...
おそらく私はこれを読んだ最初の人間でしょう。
- awestroke
awestroke:
単純な問題を非常に複雑な方法で解決している
- pigeonlabshq
pigeonlabshq:
エージェントがサブエージェントを起動するとき、通常は同じ資格情報を引き渡します。APIキーがその典型例です。同じパターンは、デプロイ権限、データベースアクセス、メインへのマージ権限にも当てはまります。子エージェントは親が持つすべての権限を持つことになります。
Pigeonはそのための小さなプロトコルです。Pass(機能、リソース、制約)を付与し、子にはより狭い範囲のものを委任し、ツール実行前に検証します。子がそれ以上を要求した場合、フェイルクローズ(安全側に倒す)します。アイデンティティはエージェントが誰であるかを示し、権限は何をしてよいかを示します。
サーバーはありません。実際の秘密はランナー上に残ります。子はPassを保持します。
from pigeon import grant, verify
auth = grant(
subject="agent:deployer",
capabilities=["deploy"],
resources=["environment:staging"],
)
verify(auth, "deploy", "environment:staging").allowed # True
verify(auth, "deploy", "environment:production").reason_code # RESOURCE_NOT_ALLOWED
v0.1: 独自形式(JWT/Biscuit/UCANではない)、Ed25519、レート/回数制約、チェーン検証、強制ポイントとしてのMCPヘルパー。プラットフォームではありません。プロンプトインジェクションを防ぐものではありません。
リポジトリ: https://github.com/pigeonlabsHQ/pigeon
リリース: https://github.com/pigeonlabsHQ/pigeon/releases/tag/v0.1.0
デモ: python demo/agent.py