Policy Boundaries in Architecture: Was Agenten tun dürfen

Governance-Layer, der Regeln definiert und erzwingt: was dem Agenten erlaubt ist, was verboten ist und was Freigabe braucht.
Auf dieser Seite
  1. Idee in 30 Sekunden
  2. Problem
  3. Loesung
  4. Wie Policy Boundaries funktionieren
  5. Im Code sieht das so aus
  6. Wie es zur Laufzeit aussieht
  7. Wann es passt - und wann nicht
  8. Passt
  9. Passt nicht
  10. Typische Probleme und Ausfaelle
  11. Wie es mit anderen Patterns zusammenspielt
  12. Unterschied zu Guarded-Policy Agent
  13. Kurz
  14. FAQ
  15. Was als Naechstes

Idee in 30 Sekunden

Die Policy-Boundaries-Schicht ist die Systemgrenze, die festlegt, was ein Agent tun darf und was nicht.

Der Agent kann Aktionen vorschlagen, aber die finale Entscheidung liegt immer beim System: allow, deny oder require_approval.

Wann noetig: wenn der Agent Zugriff auf Tools, Daten oder Operationen hat, die Zustand aendern, Budget verbrauchen oder Risiko erzeugen koennen.

Das LLM darf side effects (Zustandsaenderungen) nicht selbst steuern. Die Policy-Boundaries-Schicht erzwingt das auf Architektur-Ebene.


Problem

Ohne klare Policy Boundaries beginnt ein Agent "zu frei" zu handeln.

Das erzeugt typische Risiken:

  • der Agent fuehrt eine Aktion ohne noetige Rechte aus;
  • liest oder uebertraegt sensible Daten;
  • der Agent ueberschreitet Budget, Quoten oder erlaubte Schrittzahl;
  • startet irreversible Operationen ohne Freigabe;
  • unterschiedliche Services wenden unterschiedliche Regeln an, und Verhalten wird unvorhersehbar.

Als Ergebnis steigen Incident-Risiken, Audits werden schwieriger und Fehler werden teurer.

Loesung

Fuege Policy Boundaries als separate Governance-Schicht im System hinzu: sie prueft jede riskante Aktion vor der Ausfuehrung.

Diese Schicht arbeitet nach "deny by default": erlaubt ist nur, was explizit in der Allowlist steht und zum Kontext passt.

Analogie: wie ein Zugangssystem in einem Buerozentrum.

Eine Person moechte vielleicht in den Serverraum, aber die Tuer geht nur mit richtigem Zugriffslevel auf.

Die Policy-Boundaries-Schicht prueft genauso den Zugriff auf Aktionen und Ressourcen vor der Ausfuehrung.

Wie Policy Boundaries funktionieren

Policy Boundaries ist eine Governance-Schicht zwischen Agent Runtime und Ausfuehrungs-/Daten-Layern, die entscheidet: Aktion zulassen, blockieren oder zur Freigabe senden.

Diagram
Beschreibung des kompletten Flows: Classify → Check → Decide → Enforce → Log

Classify
Das System klassifiziert den Aktionstyp: Lesen, Schreiben, Loeschen, Export, Code-Ausfuehrung, Budgetverbrauch.

Check
Die Policy Engine prueft Rolle, Tenant, Allowlist, Scopes, Budget-/Schritt-Limits und Risikolevel.

Decide
Die Entscheidung muss explizit sein: allow, deny oder require_approval.

Enforce
Die Aktion wird entweder blockiert oder mit eingeschraenkten Rechten ueber Tool Execution Layer ausgefuehrt.

Log
Im Log landen Entscheidung, reason_code, request context sowie Ergebnis der Ausfuehrung oder Blockierung.

Dieser Zyklus gilt fuer jede riskante Aktion und liefert vorhersagbares Verhalten, selbst bei Modellfehlern.

Im Code sieht das so aus

PYTHON
class PolicyBoundaryLayer:
    def __init__(self, policy_engine, approval_queue):
        self.policy_engine = policy_engine
        self.approval_queue = approval_queue

    def authorize(self, action, context):
        request = {
            "actor_role": context["role"],
            "tenant_id": context["tenant_id"],
            "action": action["name"],
            "resource": action.get("resource"),
            "risk_level": action.get("risk_level", "medium"),
        }

        decision = self.policy_engine.evaluate(request)
        mode = decision.get("mode")

        if mode == "allow":
            return {"ok": True, "mode": "allow", "scopes": decision.get("scopes", [])}

        if mode == "require_approval":
            ticket_id = self.approval_queue.create(request=request, reason=decision["reason_code"])
            return {"ok": False, "mode": "pending_approval", "ticket_id": ticket_id}

        # Fail-closed for deny and for unexpected/unavailable policy modes.
        return {
            "ok": False,
            "mode": "deny",
            "reason_code": decision.get("reason_code", "policy_unavailable_or_invalid"),
        }

Wie es zur Laufzeit aussieht

TEXT
Anfrage: "Loesche Rechnung INV-991 und sende Kundendaten an ein externes CRM"

Step 1
Agent Runtime: bildet action -> delete_invoice + export_customer_data
Runtime: sendet Aktionen an Policy Boundaries

Step 2
Policy Boundaries: Check -> Rolle support_agent, Risiko high
Policy Engine: delete_invoice -> require_approval
Policy Engine: export_customer_data -> deny (reason_code: cross_system_export_blocked)

Step 3
Runtime: erstellt approval ticket fuer Loeschung
Runtime: blockiert Export und gibt eine sichere Antwort mit Grund zurueck

Die Policy-Boundaries-Schicht "raet" nicht nur, sie stoppt gefaehrliche Aktionen wirklich.

Wann es passt - und wann nicht

Die Policy-Boundaries-Schicht wird dort gebraucht, wo reale Risiken bei Zugriff, Zustandsaenderung oder Kosten bestehen. Fuer einen lokalen Read-only-Prototyp kann das unnoetige Komplexitaet sein.

Passt

SituationWarum Policy Boundaries passt
Es gibt Tools, die den Systemzustand aendernDie Policy-Boundaries-Schicht blockiert gefaehrliche Operationen oder verlangt Freigabe.
Rollenbasiertes Zugriffsmodell und Multi-Tenant-Isolation sind noetigEinheitliche Policy Rules verhindern Leaks zwischen Tenants und Rollen.
Der Agent kann Geld oder begrenzte Ressourcen verbrauchenDie Policy-Boundaries-Schicht kontrolliert budget caps, quotas und require_approval fuer teure Aktionen.
Entscheidungs-Audit ist fuer Compliance erforderlichDie Policy-Boundaries-Schicht protokolliert Entscheidung, reason_code und Kontext fuer jede kritische Aktion.

Passt nicht

SituationWarum Policy Boundaries nicht passt
One-shot-Demo mit einem Read-only-Tool ohne side effectsEine separate Policy-Boundaries-Schicht kann mehr Komplexitaet als Nutzen bringen.
Der Agent trifft keine eigenen Entscheidungen - der gesamte Flow ist deterministisch in Business-Logik kodiertMeist reichen einfache Checks in der Business-Logik des konkreten Services.

In solchen Faellen reicht manchmal ein einfacher Check im Code:

PYTHON
if role != "admin":
    raise PermissionError("denied")

Typische Probleme und Ausfaelle

ProblemWas passiertWie verhindern
Umgehung der policy boundaryAktionen laufen direkt und umgehen policy checksEinziger Einstiegspunkt fuer Tools, direkter Zugriff verboten
Fail-open bei Ausfall der policy engineBeim Ausfall erlaubt das System versehentlich riskante AktionenFail-closed fuer write/high-risk-Operationen, Notfall deny by default
Zu strenge RegelnNuetzliche Aktionen werden blockiert, der Agent kann Aufgabe nicht abschliessenRisk-tier-Regeln, Ausnahmen mit Audit, regelmaessige Policy-Reviews
Policy drift (Regeln nicht synchron)Dokumentation sagt eins, Code prueft etwas anderesPolicy-as-code, Versionierung und Policy-Tests
Keine Erklaerung fuer den BlockierungsgrundDas Team versteht nicht, warum die Aktion abgelehnt wurdeStandardisierte reason_code und Audit-Logs
Unvollstaendiger Kontext fuer policy checkPolicy Engine entscheidet ohne wichtige Request-AttributeVollstaendigen request context uebergeben: actor, tenant, resource, action type, risk, budget

Die meisten dieser Probleme werden durch einen einzigen Policy-Kontrollpunkt, einen Fail-closed-Ansatz und qualitatives Audit geloest.

Wie es mit anderen Patterns zusammenspielt

Die Policy-Boundaries-Schicht ersetzt nicht Agent Runtime oder Tool Execution Layer. Sie ist eine systemweite Zugriffskontroll-Schicht ueber ihnen.

  • Agent Runtime - Runtime steuert Schritte, waehrend die Policy-Boundaries-Schicht prueft, welche Aktionen in diesen Schritten erlaubt sind.
  • Tool Execution Layer - execution layer fuehrt Aktion aus, waehrend die Policy-Boundaries-Schicht entscheidet, ob sie gestartet werden darf.
  • Human-in-the-Loop Architecture - riskante Aktionen koennen in require_approval ueberfuehrt werden.
  • Multi-Tenant - die Policy-Boundaries-Schicht erzwingt Zugriffsisolation zwischen Tenants.

Anders gesagt:

  • Agent Runtime definiert wann der Agent einen Schritt macht
  • Die Policy-Boundaries-Schicht definiert welche Aktionen in diesem Schritt ueberhaupt erlaubt sind

Unterschied zu Guarded-Policy Agent

Guarded-Policy AgentPolicy Boundaries in der Architektur
EbeneVerhaltens-Pattern innerhalb der AgentenlogikSystem-Layer fuer erzwungene Kontrolle auf Architektur-Ebene
Was kontrolliert wirdWie der Agent Aktionen formuliert und auswaehltOb diese Aktion real ausgefuehrt werden darf
Wie auf Modellfehler reagiert wirdReduziert Risiko, garantiert aber keine BlockierungBlockiert erzwungen oder sendet zur Freigabe
SchluesselergebnisSichereres AgentenverhaltenTechnisch garantierte Zugriffsgrenzen + Audit

Guarded-Policy Agent macht das Agentenverhalten vorsichtiger.

Die Policy-Boundaries-Schicht haelt die Aktionsausfuehrung kontrolliert, selbst wenn sich der Agent irrt.

Kurz

Kurzfazit

Policy Boundaries:

  • definiert, was erlaubt, verboten oder freigabepflichtig ist
  • erzwingt Pruefung von Rolle, Tenant, Allowlist und Aktionsrisiko
  • blockiert gefaehrliche Aktionen vor Ausfuehrung
  • protokolliert Entscheidungen und reason_code fuer Audit

FAQ

Q: Wenn es Guarded-Policy Agent gibt, braucht man Policy Boundaries trotzdem?
A: Ja. Guarded-Policy Agent verbessert Verhalten, aber die Policy-Boundaries-Schicht erzwingt Regeln auf Systemebene.

Q: Wo sollten policy rules am besten gespeichert werden?
A: Meist in einer separaten policy engine oder einer policy-as-code-Layer mit Versionen und Tests.

Q: Was tun, wenn policy engine nicht verfuegbar ist?
A: Fuer riskante write-Operationen gilt fail-closed: Ausfuehrung verbieten, solange Pruefung nicht verfuegbar ist.

Q: Koennen Policy Boundaries von der Umgebung (dev, staging, prod) abhaengen?
A: Ja. Dieselben Aktionen haben oft unterschiedliche policy rules je nach Umgebung, Risikolevel und Datentyp.

Was als Naechstes

Policy Boundaries setzen die Spielregeln. Als Naechstes ist es sinnvoll zu sehen, wo diese Regeln im System durchgesetzt werden:

⏱️ 8 Min. LesezeitAktualisiert 7. März 2026Schwierigkeit: ★★★
Integriert: Production ControlOnceOnly
Guardrails für Tool-Calling-Agents
Shippe dieses Pattern mit Governance:
  • Budgets (Steps / Spend Caps)
  • Tool-Permissions (Allowlist / Blocklist)
  • Kill switch & Incident Stop
  • Idempotenz & Dedupe
  • Audit logs & Nachvollziehbarkeit
Integrierter Hinweis: OnceOnly ist eine Control-Layer für Production-Agent-Systeme.
Autor

Diese Dokumentation wird von Engineers kuratiert und gepflegt, die AI-Agenten in der Produktion betreiben.

Die Inhalte sind KI-gestützt, mit menschlicher redaktioneller Verantwortung für Genauigkeit, Klarheit und Produktionsrelevanz.

Patterns und Empfehlungen basieren auf Post-Mortems, Failure-Modes und operativen Incidents in produktiven Systemen, auch bei der Entwicklung und dem Betrieb von Governance-Infrastruktur für Agenten bei OnceOnly.