pending_approval zurückgibt, wird der Tool-Call
zurückgehalten und Ihr Agent wartet. Standardmäßig räumt ein Prüfer diesen
Hold aus der Konsole. Der Firewall-Approval-Webhook verdrahtet dasselbe
Gate in Ihr System: das Gateway POSTet eine signierte Benachrichtigung an
Ihren Endpunkt in dem Moment, in dem ein Aufruf zurückgehalten wird, und Ihr
System POSTet eine HMAC-signierte Entscheidung zurück, um ihn freizugeben —
kein Konsolen-Sitzplatz, kein Pollen eines Menschen.
Dies ist die asynchrone (Callback-)Hälfte von Human-in-the-Loop. Der
zurückgehaltene Aufruf, das Verdikt und der Konsolen-Auflösungspfad werden in
Approvals auflösen und der
Firewall-Referenz behandelt;
diese Seite ist nur die Webhook-Verdrahtung.
Der Webhook ist ein Fast-Path-Hinweis, nicht das System of Record. Der
Long-Poll des Relays auf dem zurückgehaltenen Aufruf ist das maßgebliche Gate
— wenn eine Benachrichtigung verloren geht oder Ihr Empfänger ausfällt, bleibt
der Hold bestehen, und ein Prüfer kann ihn aus der Konsole räumen. Das
Konfigurieren des Webhooks fügt nur einen programmatischen Weg hinzu, ihn
aufzulösen.
1. Wann ein Firewall-Approval-Webhook zu verwenden ist
Greifen Sie danach, wenn ein Human-in-the-Loop-Firewall-Gate von etwas anderem als einer Person aufgelöst werden muss, die einen Button klickt:Zu Ihrer eigenen Approvals-UI routen
Schieben Sie zurückgehaltene Tool-Calls in Slack, PagerDuty oder eine
interne Review-Queue und lösen Sie sie dort, wo Ihr Team bereits arbeitet.
Programmatische Policy
Genehmigen Sie automatisch einen zurückgehaltenen
db.query gegen eine
Read-Replica, lehnen Sie einen gegen prod automatisch ab — Ihr Code
entscheidet, das Gateway setzt durch.2. In der Konsole konfigurieren
Beide Hälften leben auf einer Workspace-Einstellung. Öffnen Sie Firewall → Settings und füllen Sie zwei Felder aus (eine Developer+-Aktion — der Settings-Write ist rollengesteuert):Approval-Webhook-URL — wohin wir Sie benachrichtigen
Approval-Webhook-URL — wohin wir Sie benachrichtigen
Der
https://-Endpunkt, an den wir POSTen, wenn ein Aufruf zurückgehalten
wird. HTTP wird abgelehnt, und die URL wird beim Speichern durch einen
SSRF-Preflight geführt, sodass ein Loopback-, Private-Range- oder
Cloud-Metadata-Ziel abgewiesen wird, bevor es gespeichert werden kann.
Lassen Sie es leer, um den asynchronen Pfad vollständig zu deaktivieren.Shared Secret — wie sich beide Seiten authentifizieren
Shared Secret — wie sich beide Seiten authentifizieren
3. Die Benachrichtigung, die wir Ihnen senden
Wenn ein Aufruf zurückgehalten wird, POSTen wir eine signierte JSON-Hülle an Ihre URL:approval_id, die Sie zum Auflösen brauchen, sowie Identifikatoren zur
Korrelation, nie die Tool-Argumente. Das Argument-Detail lebt in der
Approvals-Queue und im
Firewall-Events-Log.
4. Der Callback, den Sie zurück-POSTen
Um den Hold freizugeben (oder abzulehnen), POSTen Sie Ihre Entscheidung an den Callback-Endpunkt mit derapproval_id aus der Benachrichtigung:
decision ist approved oder rejected — kein anderer Wert wird akzeptiert.
reason ist optional und taucht im Audit-Trail des aufgelösten Approvals auf.
Der Callback ist first-decision-wins und idempotent: wer zuerst auflöst —
Ihr Webhook oder ein Konsolen-Prüfer — setzt das Ergebnis, und ein
wiederholter Callback für ein bereits aufgelöstes Approval gibt 200 zurück,
sodass Ihr System aufhört, es erneut zu versuchen.
5. Den zurückgehaltenen Aufruf freigeben
Das Auflösen des Approvals wiederholt den Tool-Call nicht für Sie — es hebt das Gate, sodass Ihr Agent ihn erneut ausstellen kann. Die Agent-Runtime:- Pollt den Zustand des Holds unter
GET /api/v1/firewall/approvals/:id(ein firewall-gateway-scoped Key, nicht Ihr Relay-Key oder Ihre Konsolen-Session), bis erpendingverlässt. - Bei
approvedreicht er den ursprünglichen Tool-Call erneut ein, mit einem einmal nutzbarenX-OrcaRouter-Firewall-Approval-Header — das Gateway lässt diesen einen Aufruf durch und das Token ist verbraucht.
Wenn die zugrunde liegende Regel nach dem Zurückhalten des Aufrufs bearbeitet
wurde, flaggt die Approvals-Queue,
dass sich die Regel seitdem geändert hat, und unterdrückt die nun veraltete
„held because…”-Klausel, sodass ein Konsolen-Prüfer nicht auf Provenienz
handelt, die nicht mehr dem entspricht, was den Aufruf zurückgehalten hat.
6. Die Verdrahtung verifizieren
Eine schnelle End-to-End-Prüfung, bevor Sie sich darauf verlassen:| Schritt | Was zu tun ist | Erwartet |
|---|---|---|
| Einen Aufruf zurückhalten | Eine Regel mit einem pending_approval-Verdikt auslösen | 400 firewall_approval_pending |
| Benachrichtigung | Ihren Endpunkt beobachten | Signierter firewall.approval.pending-POST trifft ein |
| Callback | Einen signierten { "decision": "approved" } POSTen | 200 mit dem aufgelösten Zustand |
| Replay-Schutz | Den Callback erneut POSTen | 200, bereits aufgelöst (kein Double-Apply) |
7. Wo das hineinpasst
Approvals auflösen
Der Konsolen-Prüferpfad und der vollständige Lebenszyklus eines
zurückgehaltenen Aufrufs.
Verdikte
Woher
pending_approval kommt und wie es sich mit anderen Verdikten
komponiert.Gateway-Keys
Prägen Sie den firewall-gateway-scoped Key, den der Poll- +
Re-submit-Flow braucht.
Übermäßige Handlungsmacht
Die Bedrohung, die Human-in-the-Loop-Gates eindämmen sollen.
