Pigeon:为 AI 子代理签发权限通行证
Pigeon, a signed Pass for what a sub-agent may do
当你的 AI 代理生成子代理时,如果直接复制 API 密钥,子代理就能随意部署生产环境或读取支付数据库,风险极大。Pigeon 提供了一种解决方案:不再传递完整密钥,而是签发一张经过签名的 Pigeon Pass。这张通行证严格限定了子代理能执行的操作、访问的资源以及约束条件。它没有中央服务器,只需在生成子代理时调用 delegate 方法,在执行工具时调用 verify 方法进行校验。子代理无法扩大权限或移除父级约束,从而将安全风险控制在最小范围内。
身份告诉你代理是谁,而权限告诉你它能做什么。
- Retr0id
> Pigeon Pass 是它自己的凭证格式。它不是 JWT、CWT、macaroons、Biscuit 或 UCAN 的配置文件。
为什么?
> Pigeon [...] 不是 [...] 密钥托管方。
那这里到底在搞什么?https://github.com/pigeonlabsHQ/pigeon/blob/eb6a1e97b80c4951...
我想我是第一个读到这些内容的人类。
- awestroke
用极其复杂的方式解决了一个微不足道的问题
- pigeonlabshq
当一个代理启动子代理时,通常会移交相同的凭证。API 密钥是最明显的例子。同样的模式也适用于部署权限、数据库访问权限或合并到主分支的权限。子代理因此拥有了父代理拥有的一切。
Pigeon 就是为此设计的一个小型协议。你授予一个 Pass(包含能力、资源、约束),向子代理委派一个更窄的权限,并在工具运行前进行验证。如果子代理索要更多权限,它将安全地失败(fail closed)。身份(Identity)说明代理是谁,权限(Authority)说明它能做什么。
这里没有服务器。真正的密钥保留在运行器(runner)上。子代理携带 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