Skip to main content
failproofai verwendet JSON-Konfigurationsdateien, um zu steuern, welche Richtlinien aktiv sind, wie sie sich verhalten und woher benutzerdefinierte Richtlinien geladen werden. Die Konfiguration ist darauf ausgelegt, einfach mit Ihrem Team geteilt zu werden – committen Sie sie in Ihr Repository und jeder Entwickler erhält dasselbe Sicherheitsnetz für den Agenten.

Konfigurationsscopes

Es gibt drei Konfigurationsscopes, die in Prioritätsreihenfolge ausgewertet werden: Wenn failproofai ein Hook-Ereignis empfängt, lädt und führt es alle drei Dateien zusammen, die für das aktuelle Arbeitsverzeichnis existieren.

Zusammenführungsregeln

enabledPolicies – die Vereinigung aller drei Scopes. Eine Richtlinie, die auf irgendeiner Ebene aktiviert ist, ist aktiv.
policyParams – der erste Scope, der Parameter für eine bestimmte Richtlinie definiert, gewinnt vollständig. Es gibt kein tiefes Zusammenführen von Werten innerhalb der Parameter einer Richtlinie.
customPoliciesPath – der erste Scope, der diesen definiert, gewinnt. llm – der erste Scope, der diesen definiert, gewinnt.

Konfigurationsdateiformat


Feldreferenz

enabledPolicies

Typ: string[] Liste der zu aktivierenden Richtliniennamen. Die Namen müssen exakt mit den Richtlinienbezeichnern übereinstimmen, die failproofai policies anzeigt. Eine vollständige Liste finden Sie unter Integrierte Richtlinien. Richtlinien, die nicht in enabledPolicies enthalten sind, sind inaktiv, auch wenn sie Einträge in policyParams haben.

policyParams

Typ: Record<string, Record<string, unknown>> Richtlinienspezifische Parameterüberschreibungen. Der äußere Schlüssel ist der Richtlinienname; die inneren Schlüssel sind richtlinienspezifisch. Jede Richtlinie dokumentiert ihre verfügbaren Parameter unter Integrierte Richtlinien. Wenn eine Richtlinie Parameter hat, Sie diese aber nicht angeben, werden die integrierten Standardwerte der Richtlinie verwendet. Benutzer, die policyParams überhaupt nicht konfigurieren, erhalten dasselbe Verhalten wie in früheren Versionen. Unbekannte Schlüssel im Parameterblock einer Richtlinie werden zum Zeitpunkt des Hook-Aufrufs stillschweigend ignoriert, aber bei der Ausführung von failproofai policies als Warnungen markiert.

hint (übergreifend)

Typ: string (optional) Eine Nachricht, die an den Grund angehängt wird, wenn eine Richtlinie deny oder instruct zurückgibt. Damit können Sie Claude handlungsrelevante Hinweise geben, ohne die Richtlinie selbst zu ändern. Funktioniert mit jedem Richtlinientyp – integriert, benutzerdefiniert (custom/), Projektkonvention (.failproofai-project/) oder Benutzerkonvention (.failproofai-user/).
Wenn block-force-push ablehnt, sieht Claude: „Force-Pushing ist blockiert. Try creating a fresh branch instead.” Nicht-String-Werte und leere Strings werden stillschweigend ignoriert. Wenn hint nicht gesetzt ist, bleibt das Verhalten unverändert (abwärtskompatibel).

customPoliciesPath

Typ: string (absoluter Pfad) Pfad zu einer JavaScript-Datei mit benutzerdefinierten Hook-Richtlinien. Dieser wird automatisch von failproofai policies --install --custom <path> gesetzt (der Pfad wird vor der Speicherung in einen absoluten Pfad aufgelöst). Die Datei wird bei jedem Hook-Ereignis neu geladen – es gibt kein Caching. Weitere Details zur Erstellung finden Sie unter Benutzerdefinierte Richtlinien.

Konventionsbasierte Richtlinien

Zusätzlich zum expliziten customPoliciesPath erkennt und lädt failproofai automatisch Richtliniendateien aus .failproofai/policies/-Verzeichnissen: Dateiabgleich: Es werden nur Dateien geladen, die dem Muster *policies.{js,mjs,ts} entsprechen (z. B. security-policies.mjs, workflow-policies.js). Andere Dateien im Verzeichnis werden ignoriert. Keine Konfiguration erforderlich: Konventionsrichtlinien benötigen keine Einträge in policies-config.json. Legen Sie einfach Dateien in das Verzeichnis und sie werden beim nächsten Hook-Ereignis erkannt. Vereinigtes Laden: Sowohl das Projekt- als auch das Benutzerkonventionsverzeichnis werden durchsucht. Alle passenden Dateien aus beiden Ebenen werden geladen (im Gegensatz zu customPoliciesPath, das das Prinzip „erster Scope gewinnt” verwendet). Weitere Details und Beispiele finden Sie unter Benutzerdefinierte Richtlinien.

llm

Typ: object (optional) LLM-Client-Konfiguration für Richtlinien, die KI-Aufrufe durchführen. Für die meisten Setups nicht erforderlich.

Konfiguration über die CLI verwalten

Die Befehle policies --install und policies --uninstall schreiben in die Hook-Einstellungsdatei Ihrer Agenten-CLI (die Hook-Einstiegspunkte), während policies-config.json die Datei ist, die Sie direkt verwalten. Die beiden sind voneinander getrennt:
  • Agenten-CLI-Einstellungen – weist den Agenten an, bei jeder Toolnutzung failproofai --hook <event> aufzurufen:
    • Claude Code: ~/.claude/settings.json (Benutzer), <cwd>/.claude/settings.json (Projekt), <cwd>/.claude/settings.local.json (lokal)
    • OpenAI Codex: ~/.codex/hooks.json (Benutzer), <cwd>/.codex/hooks.json (Projekt) – Codex hat keinen local-Scope
    • GitHub Copilot CLI (beta): ~/.copilot/hooks/failproofai.json (Benutzer), <cwd>/.github/hooks/failproofai.json (Projekt) – Copilot hat keinen local-Scope. Hook-Einträge verwenden Copilots betriebssystemspezifische bash/powershell-Befehlsfelder mit timeoutSec; die Datei enthält einen version: 1-Marker auf oberster Ebene. Die Unterstützung von Copilot CLI ist beta, während wir das events.jsonl-Aufzeichnungsschema (das in der öffentlichen Dokumentation nicht spezifiziert ist) anhand weiterer realer Sitzungen überprüfen.
    • Cursor Agent (beta): ~/.cursor/hooks.json (Benutzer), <cwd>/.cursor/hooks.json (Projekt) – Cursor hat keinen local-Scope. Hook-Einträge verwenden die Claude-ähnliche {type, command, timeout}-Form (ohne bash/powershell-Aufteilung), werden aber unter camelCase-Ereignisschlüsseln (preToolUse, beforeSubmitPrompt, …) in einem flachen Array gemäß Cursors Hooks-Schema gespeichert; die Datei enthält einen version: 1-Marker auf oberster Ebene. Der Handler kanonisiert camelCase → PascalCase über CURSOR_EVENT_MAP, sodass bestehende integrierte Richtlinien unverändert ausgelöst werden. Die Unterstützung von Cursor Agent ist beta, während wir Cursors On-Disk-Transkriptformat (in der öffentlichen Dokumentation nicht spezifiziert) anhand weiterer realer Installationen überprüfen.
    • OpenCode (beta): ~/.config/opencode/opencode.json + ~/.config/opencode/plugins/failproofai.mjs (Benutzer), <cwd>/.opencode/opencode.json + <cwd>/.opencode/plugins/failproofai.mjs (Projekt) – OpenCode hat keinen local-Scope. Im Gegensatz zu den anderen fünf CLIs verfügt OpenCode über kein externes Befehls-Hook-System: Es lädt In-Process-JS/TS-Plugins, die explizit über das plugin: []-Array in opencode.json registriert werden (automatische Erkennung aus .opencode/plugins/ ist nicht die Art, wie Plugins in opencode v1.14.33 geladen werden). Die Installation legt ein kleines generiertes Plugin-Shim ab, das den failproofai-Binary als Subprozess aufruft und die JSON-Antwort im Claude-Format des Binaries zurück in Plugin-Semantik übersetzt: throw new Error() für tool-event deny (bricht den Tool-Aufruf ab), client.session.prompt(...) für instruct UND für Stop / SubagentStop deny (reicht den Ablehnungsgrund als nächste Benutzernachricht ein – der einzige Force-Retry-Kanal, da session.idle nur eine Benachrichtigung ist und das Werfen einer Exception dort ein No-op ist), und No-op für allow. Das Shim kanonisiert sowohl Tool-Namen (Kleinbuchstaben → PascalCase über OPENCODE_TOOL_MAP) als auch Tool-Input-Argumentschlüssel (camelCase → snake_case über OPENCODE_TOOL_INPUT_MAP für Read / Write / Edit, z. B. filePathfile_path, oldStringold_string), bevor es an das Binary weiterleitet, sodass pfadprüfende Builtins wie block-read-outside-cwd, block-env-files und block-secrets-write bei OpenCode-Tool-Aufrufen unverändert ausgelöst werden. Sitzungen werden in OpenCodes SQLite-Datenbank unter ~/.local/share/opencode/opencode.db gespeichert; der Session-Viewer des Dashboards liest sie über opencode db --format json und opencode export <id>. Die OpenCode-Unterstützung ist beta, während wir das Verhalten versionsübergreifend und anhand weiterer realer Sitzungen überprüfen. Siehe die OpenCode-Plugin-Dokumentation.
    • Pi (beta): ~/.pi/agent/settings.json (Benutzer), <cwd>/.pi/settings.json (Projekt) – Pi hat keinen local-Scope. Pi lädt TypeScript-Erweiterungspakete beim Start; die Einstellungsdatei ist ein flaches String-Array {"packages": ["./relative/path", …]}. failproofai schreibt einen einzelnen packages-Array-Eintrag, der auf sein gebündeltes pi-extension/-Verzeichnis zeigt. Die Erweiterung abonniert intern Pis tool_call / user_bash / input / session_start-Ereignisse und ruft failproofai --hook <Event> --cli pi als Shell-Befehl auf; der Handler kanonisiert Ereignisse über PI_EVENT_MAP von underscore_lower_snake_case → PascalCase, sodass bestehende integrierte Richtlinien unverändert ausgelöst werden. Tool-Input-Argumente werden ebenfalls über PI_TOOL_INPUT_MAP kanonisiert (Pis Read / Write / Edit liefern path statt file_path; die Zuordnung des obersten Schlüssels lässt block-env-files und block-secrets-write auslösen – block-read-outside-cwd hatte bereits einen path-Fallback). Die Pi-Unterstützung ist beta, während sich Pis Erweiterungs-API und das Sitzungslog-Layout stabilisieren.
    • Hermes (hermes-agent): ~/.hermes/config.yaml (nur Benutzer-Scope – Hermes hat keine Projekt-/lokale Konfiguration). Hermes ist ein Slack/Telegram-Gateway, daher fängt eine Installation Tool-Aufrufe von jeder Plattform (Slack/Telegram/cli/cron) und internen Subagenten ab. Hook-Einträge sind ein {command, timeout}-Paar (Timeout in Sekunden) unter einem hooks:-Map, der nach Hermes’ snake_case-Ereignissen (pre_tool_call / post_tool_call / on_session_start / on_session_end / subagent_stop) geordnet ist; der Handler kanonisiert Ereignisse über HERMES_EVENT_MAP und Tool-Namen über HERMES_TOOL_MAP, sodass integrierte Richtlinien unverändert ausgelöst werden. Die Konfiguration wird durch einen kommentarerhaltenden YAML-Document-Round-trip bearbeitet, sodass die anderen Einstellungen des Betreibers erhalten bleiben, und die Installation setzt hooks_auto_accept: true, sodass das kopflose Gateway (kein TTY) die Hooks ohne Zustimmungsaufforderung ausführt. Der Auswerter gibt Hermes’ stdout-Vertrag {"decision":"block","reason"} aus (Hermes ignoriert Exit-Codes). Einschränkungen: Hermes hat kein turn-end-Stop-Ereignis, daher werden die require-*-before-stop-Builtins für Hermes nie ausgelöst (nicht anwendbar, nicht defekt); instruct wird zu allow-with-logged-note herabgestuft (kein additional-context-Kanal); und Output-Secret-Redaktion (sanitize-*) kann Tool-Output über den Shell-Hook-Vertrag nicht umschreiben. Hermes ist auch eine Offline-Audit-Quelle – das Dashboard liest seine Gateway-Sitzungen direkt aus ~/.hermes/state.db.
  • policies-config.json – teilt failproofai mit, welche Richtlinien ausgewertet werden sollen und mit welchen Parametern (geteilt über alle Agenten-CLIs)
Übergeben Sie --cli claude|codex|copilot|cursor|opencode|pi|hermes, um einen bestimmten Agenten anzusprechen (durch Leerzeichen getrennt oder wiederholt für eine beliebige Teilmenge):
Wenn --cli weggelassen wird, erkennt failproofai automatisch, welche Agenten-CLIs installiert sind (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which hermes):
  • Eine CLI erkannt – wählt diese CLI automatisch ohne Rückfrage aus.
  • Mehrere CLIs erkannt in einem interaktiven Terminal – zeigt eine Einzelauswahl-Eingabeaufforderung mit Pfeiltasten an, die in einen Abschnitt Erkannt (N) (mit einer Für alle N erkannten installieren-Sammelzeile + jeder erkannten CLI einzeln) und einen Abschnitt Nicht installiert (M) · Hooks vorab installieren unterteilt ist, der alle nicht erkannten unterstützten CLIs als Vorwärts-Installationsoption auflistet (↑↓ zum Bewegen, Enter zum Auswählen, ^C zum Beenden). Der Deinstallationsablauf zeigt nur den Abschnitt „Erkannt” an.
  • Mehrere CLIs erkannt in einem nicht-interaktiven Lauf (CI, kein TTY) – installiert für alle erkannten CLIs ohne Rückfrage.
  • Keine erkannt – fällt auf claude zurück, mit einer Warnung, dass kein Agenten-Binary im PATH gefunden wurde; der Hook-Befehl wird trotzdem geschrieben, sodass er aktiviert wird, sobald Sie einen installieren.
Sie können policies-config.json jederzeit direkt bearbeiten; Änderungen treten sofort beim nächsten Hook-Ereignis in Kraft, ohne dass ein Neustart erforderlich ist.

Beispiel: Konfiguration auf Projektebene mit Team-Standardwerten

Committen Sie .failproofai/policies-config.json in Ihr Repository:
Jeder Entwickler kann dann .failproofai/policies-config.local.json (per .gitignore ausgeschlossen) für persönliche Overrides erstellen, ohne Teammitglieder zu beeinflussen.