EnglishРусский Map

Pigeon

title
Pigeon
type
toolbox
summary
Python-библиотека для подписанных сужаемых пропусков возможностей, передаваемых субагенту вместо API-ключа и проверяемых при вызове инструмента
tags
ai-agents, security, python, authorization, watchlist
language
Python
license
MIT
created
2026-09-13
updated
2026-09-13
lang
ru
translation_of
pigeon
source_updated
2026-09-13
translated
2026-09-14
translator
lllm/antigravity/gemini-3.7-flash-medium

Pigeon решает одну конкретную ошибку: агент запускает субагента и отдаёт ему тот же API-ключ, так что субагент может делать всё то же, что и родительский агент. Вместо этого родитель передаёт Pigeon Pass - подписанный мандат со списком разрешённых дочернему агенту действий, а исполнитель инструмента проверяет Pass перед выполнением побочного эффекта. Это библиотека, а не сервис: никакого сервера Pigeon здесь нет.

Модель

grant создаёт Pass для субъекта с возможностями (действиями вроде deploy или open_pr), ресурсами (environment:staging, repo:acme/api) и ограничениями, например лимитом частоты запросов. delegate порождает дочерний Pass от родительского. verify проверяет запрошенное действие по Pass и никогда не возвращает простой boolean: отказ содержит код причины (RESOURCE_NOT_ALLOWED, CAPABILITY_NOT_GRANTED), сообщение и не сошедшееся сравнение запрошенного с разрешённым.

from pigeon import delegate, grant, verify, DelegationError

parent = grant(
    subject="agent:orchestrator",
    capabilities=["deploy", "open_pr"],
    resources=["environment:staging", "repo:acme/api"],
    constraints={"max_deploys_per_hour": 3},
)

worker = delegate(
    parent,
    subject="agent:pr-bot",
    capabilities=["open_pr"],
    resources=["repo:acme/api"],
    constraints={"max_deploys_per_hour": 3},
)

assert verify(worker, action="open_pr", resource="repo:acme/api").allowed

try:
    delegate(worker, "agent:rogue", ["open_pr", "deploy"], ["repo:acme/api"])
except DelegationError as exc:
    assert exc.reason_code == "PRIVILEGE_ESCALATION"

Делегирование работает только на сужение. Дочерний Pass не может добавлять возможности, расширять ресурсы, повышать лимит или отменять ограничения родителя; если Pigeon не может доказать, что дочерний пропуск уже, он отклоняет делегирование. Это идея сужения прав (attenuation) из токенов возможностей вроде macaroons, применённая к деревьям агентов.

В существующем агенте меняются два места. Там, где ключ копировался бы в субагента, вызывается delegate. Там, где происходит побочный эффект (развёртывание, запрос, MCP-инструмент), вызывается verify с отказом при запрете. Настоящий секрет остаётся у исполнителя. Интеграция с MCP выпускает более узкий Pass под каждый вызов инструмента на стороне клиента и проверяет его на сервере перед запуском инструмента (pass_for_tool, execute_tool). В CLI есть pigeon keygen и pigeon inspect pass.json.

git clone https://github.com/pigeonlabsHQ/pigeon.git
cd pigeon
pip install .

Ограничения, в основном указанные в README

В README границы применимости описаны на редкость прямо. Pigeon - это не платформа, не движок политик, не провайдер идентификации и не хранилище ключей; он также не защищает от prompt injection. Он лишь ограничивает радиус поражения по тем параметрам, которые записаны в Pass, и ни по каким другим. И, по выражению авторов, если исполнитель ни разу не вызывает verify, Pass остаётся декорацией: исполнение правил ровно настолько надёжно, насколько полно покрыты вызовами verify все инструменты с побочными эффектами. Если у субагента есть любой другой доступ к ресурсу - через сетевой маршрут или переменные окружения с готовыми учётными данными, - Pigeon на это никак не влияет.

В примерах из README работа с ключами не показана. grant вызывается без ключа, поэтому то, где хранятся ключи подписи и как проверяющая сторона узнаёт, каким из них доверять, описано в связанных SPEC.md и SECURITY.md, не изучавшихся для этой страницы. Библиотека ставится из клона git-репозитория; пакет в PyPI не упоминается. Требуется Python 3.12 или новее.

Место в контексте

onecli скрывает учётные данные от агентов, но оставляет каждому агенту полные полномочия каждого привязанного ключа; Pigeon дополняет его, сужая полномочия при каждой делегации, ничего не скрывая. В agent-identity-attribution разграничение прав для каждого агента названо сильнейшим практическим аргументом в пользу присвоения агентам идентичности, а Pass реализует такое разграничение без инфраструктуры идентификации. credential-compartmentalization ограничивает ущерб от утечки разделением учётных данных по разным хранилищам; аттенюация ограничивает его разделением полномочий по дереву агентов. В примерах из README у Pass есть ограничения по частоте, но нет срока действия, так что свойство ephemeral-credentials здесь явно не обеспечивается. Проверка на стороне исполнителя - это слой политик, описанный в sandboxing-ai-agents, перенесённый из сети на уровень вызова инструмента.

Находится на watchlist: проекту неделя, все коммиты сделаны за один день, 41★, а также это примитив безопасности без аудита и внедрений.

MIT, 41★, 2 форка, создан 2026-09-06, последний push 2026-09-06. Репозиторий: https://github.com/pigeonlabsHQ/pigeon