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

Benutzerdefinierte Richtlinie erstellen

  1. Gehen Sie zu Admin → Richtlinieneditor, wählen Sie Neue Richtlinie und beschreiben Sie den Fehler, den Sie verhindern möchten.
  2. Fügen Sie den Richtliniencode hinzu und testen Sie erwartete Übereinstimmungen sowie sichere Nicht-Übereinstimmungen im Editor. Beheben Sie alle Validierungsfehler.
  3. Speichern Sie den Entwurf und wählen Sie Version veröffentlichen, um eine unveränderliche Version zu erstellen.
  4. Gehen Sie zu Admin → Durchsetzung, stellen Sie die Version auf einem Testgerät im Beobachtungs-Modus bereit und überprüfen Sie die Entscheidungen unter Beobachten → Richtlinie, bevor Sie sie durchsetzen. Der Richtlinieneditor 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. Prüfen Sie die beobachtbare Aktion – nicht die vermutete Absicht des Agenten – und geben Sie allow() zurück, sobald die Regel nicht zutrifft.

Entscheidung wählen

Formulieren Sie den Grund für den Agenten, der sich erholen muss. Erklären Sie, was erkannt wurde und was stattdessen getan werden soll.
Verwenden Sie instruct() nicht für eine Sicherheitsgrenze. Die Zustellung von Anleitungen variiert je nach Agent-Umgebung. Verwenden Sie deny(), wenn die Aktion verhindert werden muss.

Richtlinienobjekt

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

Richtlinienkontext

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

Häufige Tool-Eingaben

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

Ereignis wählen

Ereignisverfügbarkeit und Blockierungsverhalten hängen von der Agent-Umgebung ab. Lesen Sie Agent-Umgebungen, bevor Sie sich auf ein Ereignis über eine gemischte Flotte hinweg 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

Schreibvorgänge auf geschützte Pfade blockieren

Nicht-blockierende Anleitung geben

Sitzungsabschluss kontrollieren

Ein abgelehntes Stop-Ereignis kann dazu führen, dass der Agent es erneut versucht. Stellen Sie die Bedingung nur dann auf, wenn der Agent sie in der aktuellen Umgebung erfüllen kann, und begrenzen Sie jeden Subprozess oder Netzwerkaufruf.

Richtliniendateien laden

Konventionsdateien

Konventionsdateien werden automatisch geladen:
  • Projekt- und Benutzerrichtlinienverzeichnisse werden beide geladen.
  • Dateien werden alphabetisch innerhalb jedes Verzeichnisses 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 Validierung oder Konfiguration die Einstiegsdatei direkt benennen sollen:
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 es mindestens eine Richtlinie registriert.
Die Validierung erkennt fehlende Dateien, Syntaxfehler, nicht aufgelöste Importe, Ausnahmen auf oberster Ebene und Modul-Lade-Timeouts. Sie beweist nicht, dass Ihre Match-Logik korrekt ist. Testen Sie mindestens diese Fälle:
  • Eine Aktion, die übereinstimmen und den beabsichtigten Richtliniengrund erzeugen muss.
  • Eine ähnliche, aber sichere Aktion, die allow() zurückgeben muss.
  • Fehlende oder fehlerhafte Tool-Felder.
  • Alternative Befehlssyntax, Pfade, Anführungszeichen, Groß-/Kleinschreibung und Leerzeichen.
  • Ein nicht verfügbarer Subprozess oder eine Netzwerkabhängigkeit.
Ordnen Sie das Ergebnis Ihrer benutzerdefinierten Richtlinie unter Beobachten → Richtlinie zu. Ein blockierter Test reicht nicht aus, 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 weiter ausgeführt.
  • Das Laden von Modulen auf oberster Ebene hat ebenfalls eine Frist von 10 Sekunden.
  • Der Cloud-Beobachtungsmodus führt die Richtlinie aus, zeichnet jedoch eine Nicht-allow-Entscheidung auf, 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 dieser Fehler die Operation erlauben oder verweigern soll.

API-Exporte

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

Benutzerdefinierte Richtlinien bereitstellen

Eine Version veröffentlichen, im Beobachtungsmodus bereitstellen, Entscheidungen überprüfen und zur Durchsetzung übergehen.