Pigeon: Ein signierter Pass, der festlegt, was ein Sub-Agent darf
Pigeon, a signed Pass for what a sub-agent may do
Wenn ein Agent einen Sub-Agenten erstellt und ihm denselben API-Key übergibt, kann dieser ungehindert in Produktion deployen, die Zahlungsdatenbank lesen oder in main mergen. Pigeon verhindert das: Statt einer Kopie aller Berechtigungen erhält der Sub-Agent einen Pigeon Pass – eine eingeschränkte, signierte Berechtigung, die genau definiert, welche Aktionen auf welchen Ressourcen erlaubt sind. Das Tool fügt sich in bestehende Agenten ein, ohne Server, und bietet MCP-Middleware. Verweigerungen liefern stets einen Grundcode und Details. Pigeon ist bewusst klein gehalten: Es ist keine Plattform, sondern eine primitive, die den Blast Radius begrenzt.
Identity tells you who the agent is. Authority tells you what it may do.
- Retr0id
> Pigeon Pass ist ein eigenes Anmeldeformat. Es ist kein Profil von JWT, CWT, Macaroons, Biscuit oder UCAN.
Warum?
> Pigeon ist [...] kein [...] Schlüsselverwalter.
Was ist dann hier los? https://github.com/pigeonlabsHQ/pigeon/blob/eb6a1e97b80c4951...
Ich nehme an, ich bin der erste Mensch, der das hier liest.
- awestroke
Ein triviales Problem, auf sehr komplexe Weise gelöst.
- pigeonlabshq
Wenn ein Agent einen Sub-Agenten startet, übergibt er normalerweise dieselben Anmeldeinformationen. Ein API-Schlüssel ist der offensichtliche Fall. Dasselbe Muster gilt für Bereitstellungsrechte, Datenbankzugriff oder die Erlaubnis, in den Hauptzweig zu mergen. Das Kind hat dann alles, was der Elternteil hat.
Pigeon ist ein kleines Protokoll dafür. Du gewährst einen Pass (Fähigkeiten, Ressourcen, Einschränkungen), delegierst einen engeren an das Kind und verifizierst, bevor das Tool läuft. Wenn das Kind mehr verlangt, schlägt es fehl (fail closed). Identität sagt, wer der Agent ist. Autorität sagt, was er tun darf.
Es gibt keinen Server. Das echte Geheimnis bleibt auf dem Runner. Das Kind trägt den 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: eigenes Format (nicht JWT/Biscuit/UCAN), Ed25519, Rate-/Count-Beschränkungen, Kettenverifikation, MCP-Helfer als Durchsetzungspunkt. Keine Plattform. Stoppt keine Prompt-Injection.
Repo: https://github.com/pigeonlabsHQ/pigeon
Release: https://github.com/pigeonlabsHQ/pigeon/releases/tag/v0.1.0
Demo: python demo/agent.py