Skip to main content
Benutzerdefinierte Richtlinien verwandeln ein Fehlermuster aus Ihren Traces oder Audits in eine Entscheidung, die während der Arbeit eines Agenten ausgeführt wird. Eine Richtlinie kann eine Aktion erlauben, dem Agenten Hinweise geben oder die Aktion blockieren, bevor sie einen weiteren Vorfall verursacht. Verwenden Sie eine benutzerdefinierte Richtlinie, wenn das Verhalten von Ihren Tools, Pfaden, Befehlen, Umgebungen oder Betriebsregeln abhängt. Prüfen Sie zuerst den Katalog der integrierten Richtlinien, um keine bereits vorhandene Kontrolle neu zu erstellen.

Eine benutzerdefinierte Richtlinie erstellen

  1. Gehen Sie zu Admin → policy editor, wählen Sie New policy aus und beschreiben Sie den Fehler, den Sie verhindern möchten.
  2. Fügen Sie den Richtlinienquellcode hinzu und testen Sie erwartete Treffer sowie unbedenkliche Nicht-Treffer im Editor. Beheben Sie alle Validierungsfehler.
  3. Speichern Sie den Entwurf und wählen Sie Publish version, um eine unveränderliche Version zu erstellen.
  4. Gehen Sie zu Admin → enforcement, deployen Sie die Version auf einem Testrechner im observe-Modus und überprüfen Sie die Entscheidungen unter Observe → policy, bevor Sie die Richtlinie durchsetzen. Der Policy-Editor zum Erstellen und Veröffentlichen einer benutzerdefinierten Richtlinie.

Mit einer engen Regel beginnen

Diese Richtlinie blockiert destruktive Kubernetes-Befehle nur dann, wenn der Befehl auf die Produktionsumgebung abzielt. Alles außerhalb dieses genauen Fehlermusters gibt allow() zurück.
Gute Richtlinien sind eng genug, um sie in einem Satz zu erklären. Treffen Sie auf die beobachtbare Aktion – nicht auf die vermutete Absicht des Agenten – und geben Sie allow() zurück, sobald die Regel nicht zutrifft.

Eine Entscheidung wählen

Schreiben Sie den Grund für den Agenten, der sich erholen muss. Erläutern Sie, was erkannt wurde und was stattdessen getan werden soll.
Verwenden Sie instruct() nicht für eine Sicherheitsgrenze. Die Übermittlung von Hinweisen variiert je nach Agent-Harness. Verwenden Sie deny(), wenn die Aktion verhindert werden muss.

Das Policy-Objekt

Filtern Sie Tools innerhalb von fn. match.toolNames ist kein Teil des öffentlichen Typs für benutzerdefinierte Richtlinien.

Policy-Kontext

Jede Richtlinie erhält einen PolicyContext. Behandeln Sie jeden optionalen Wert als tatsächlich optional. Nicht alle Agent-Versionen und Ereignistypen stellen dieselben Felder bereit.

Häufige Tool-Eingaben

Failproof AI normalisiert gängige Tools über unterstützte Harnesses hinweg, sodass eine Richtlinie in der Regel eine einheitliche Eingabeform verwenden kann. Verwenden Sie defensive Typumwandlung, da Tool-Eingabewerte als unknown typisiert sind:

Das Ereignis wählen

Die Verfügbarkeit von Ereignissen und das Blockierverhalten hängen vom Agent-Harness ab. Lesen Sie Agent harnesses, bevor Sie sich bei einem gemischten Fleet auf ein Ereignis verlassen.
SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PermissionRequest, PermissionDenied, PostToolUse, PostToolUseFailure, Notification, SubagentStart, SubagentStop, TaskCreated, TaskCompleted, Stop, StopFailure, TeammateIdle, InstructionsLoaded, ConfigChange, CwdChanged, FileChanged, WorktreeCreate, WorktreeRemove, PreCompact, PostCompact, Elicitation, ElicitationResult, UserPromptExpansion, PostToolBatch und Setup.

Häufige Richtlinienmuster erstellen

Schreibzugriffe auf geschützte Pfade blockieren

Nicht-blockierende Hinweise geben

Sitzungsabschluss absichern

Ein abgelehntes Stop-Ereignis kann dazu führen, dass der Agent es erneut versucht. Sichern Sie nur Bedingungen ab, die der Agent in der aktuellen Umgebung erfüllen kann, und begrenzen Sie jeden Subprocess- oder Netzwerkaufruf.

Richtliniendateien laden

Konventionsdateien

Konventionsdateien werden automatisch geladen:
  • Projekt- und Benutzer-Richtlinienverzeichnisse werden beide geladen.
  • Dateien werden innerhalb jedes Verzeichnisses alphabetisch geladen.
  • Eine Datei muss auf policies.js, policies.mjs oder policies.ts enden.
  • Mehrere customPolicies.add()-Aufrufe in einer Datei werden unterstützt.
  • Relative Importe aus lokalen Modulen werden unterstützt.
  • Projektrichtlinien können eingecheckt werden, sodass dieselben Regeln dem Repository folgen.

Explizite Dateien

Verwenden Sie explizite Pfade, wenn die Validierung oder Konfiguration die Eingabedatei direkt benennen soll:
Explizite Dateien werden zuerst geladen, gefolgt von Projekt-Konventionsdateien und dann Benutzer-Konventionsdateien. Eine Datei, die über beide Pfade gefunden wird, wird nur einmal geladen.

Validieren und testen

Die Validierung führt das Modul über den Produktions-Loader aus und bestätigt, dass mindestens eine Richtlinie registriert wird.
Die Validierung erkennt fehlende Dateien, Syntaxfehler, nicht aufgelöste Importe, Ausnahmen auf oberster Ebene und Modul-Lade-Timeouts. Sie beweist jedoch nicht, dass Ihre Match-Logik korrekt ist. Testen Sie mindestens diese Fälle:
  • Eine Aktion, die treffen muss und den beabsichtigten Richtliniengrund erzeugen soll.
  • Eine ähnliche, aber unbedenkliche Aktion, die allow() zurückgeben muss.
  • Fehlende oder fehlerhafte Tool-Felder.
  • Abweichende Befehlssyntax, Pfade, Anführungszeichen, Groß-/Kleinschreibung und Leerzeichen.
  • Ein nicht verfügbarer Subprocess oder eine nicht verfügbare Netzwerkabhängigkeit.
Ordnen Sie das Ergebnis Ihrer benutzerdefinierten Richtlinie unter Observe → policy zu. Ein blockierter Test ist nicht ausreichend, wenn eine andere integrierte Richtlinie die Entscheidung getroffen hat.

Laufzeitverhalten

  • Integrierte Richtlinien werden vor benutzerdefinierten Richtlinien ausgewertet.
  • Das erste deny stoppt die weitere Richtlinienauswertung.
  • Mehrere instruct-Ergebnisse können kombiniert werden, wenn keine Richtlinie das Ereignis ablehnt.
  • Eine Richtlinienfunktion hat eine Ausführungsfrist von 10 Sekunden.
  • Eine ausgelöste Ausnahme oder ein Timeout wird protokolliert und als allow() behandelt.
  • Eine Konventionsdatei, die nicht geladen werden kann, wird übersprungen; andere benutzerdefinierte Dateien und integrierte Richtlinien werden weiterhin ausgeführt.
  • Das Laden von Modulen auf oberster Ebene hat ebenfalls eine Frist von 10 Sekunden.
  • Im Cloud-Observe-Modus wird die Richtlinie ausgeführt, aber eine Nicht-allow-Entscheidung wird aufgezeichnet, ohne sie durchzusetzen.
Halten Sie Richtlinienmodule deterministisch und schnell. Vermeiden Sie Netzwerkaufrufe oder Server-Starts auf oberster Ebene. Begrenzen Sie die Arbeit innerhalb von fn, fangen Sie Abhängigkeitsfehler ab und entscheiden Sie bewusst, ob ein solcher Fehler die Operation erlauben oder ablehnen soll.

API-Exporte

TypeScript exportiert PolicyContext, PolicyResult, CustomHook, PolicyDecision und PolicyFunction.

Benutzerdefinierte Richtlinien deployen

Veröffentlichen Sie eine Version, deployen Sie sie im Observe-Modus, überprüfen Sie Entscheidungen und wechseln Sie zur Durchsetzung.