Pigeon:AIエージェントに「何をしてよいか」を署名付きで渡す新ライブラリ

Pigeon, a signed Pass for what a sub-agent may do

AIエージェントがサブエージェントを生成する際、親と同じAPIキーを渡すと、子エージェントが本番環境へのデプロイやDB閲覧など、過剰な権限を持つことになります。Pigeonはこれを防ぐため、子エージェントに「Pigeon Pass」と呼ばれる、許可された操作のみを記した署名付き資格情報を渡します。Pythonライブラリとして提供され、`grant`で権限を定義し、`delegate`で子に委譲、`verify`で実行前に検証します。子は権限を拡大できず、制約も緩められません。MCPミドルウェアとしても利用可能で、ツール呼び出しごとに細かい権限を発行できます。

アイデンティティはエージェントが誰かを示す。オーソリティは、それが何をしてよいかを示す。
  1. Retr0id

    Retr0id:

    > Pigeon Passは独自のクレデンシャル形式です。JWT、CWT、マカロン、Biscuit、UCANのプロファイルではありません。

    なぜ?

    > Pigeonは[...]キー管理者ではありません。

    では、これは何なのですか? https://github.com/pigeonlabsHQ/pigeon/blob/eb6a1e97b80c4951...

    おそらく私はこれを読んだ最初の人間でしょう。

  2. awestroke

    awestroke:

    単純な問題を非常に複雑な方法で解決している

  3. 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

この日のほかの記事

2026-09-06