Zum Hauptinhalt springen
failproofai enthält 39 integrierte Richtlinien, die häufige Fehlerquellen von Agenten abfangen. Jede Richtlinie wird bei einem bestimmten Hook-Ereignistyp und Tool-Namen ausgelöst. Neunzehn Richtlinien akzeptieren Parameter, mit denen Sie ihr Verhalten anpassen können, ohne Code zu schreiben. Fünf Workflow-Richtlinien erzwingen eine Commit → Push → PR → CI-Pipeline, bevor Claude anhält.

Übersicht

Richtlinien sind in Kategorien gruppiert:
KategorieRichtlinienHook-Typ
Gefährliche Befehleblock-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commandsPreToolUse
Infrastrukturbefehleblock-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipelinePreToolUse
Geheimnisse (Sanitizer)sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokensPostToolUse
Umgebungblock-env-files, protect-env-varsPreToolUse
Dateizugriffblock-read-outside-cwd, block-secrets-writePreToolUse
Gitblock-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-stagedPreToolUse
Datenbankwarn-destructive-sql, warn-schema-alterationPreToolUse
Warnungenwarn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-installPreToolUse
Paketmanagerprefer-package-managerPreToolUse
Workflowrequire-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stopStop
  • block- — verhindert, dass der Agent fortfährt.
  • warn- — gibt dem Agenten zusätzlichen Kontext, damit er sich selbst korrigieren kann.
  • sanitize- — bereinigt sensible Daten aus der Tool-Ausgabe, bevor der Agent sie sieht.

Namespaces

Jede Richtlinie befindet sich in einem <namespace>/<name>-Slot. Integrierte Richtlinien gehören zum failproofai/-Namespace — zum Beispiel failproofai/sanitize-jwt. Der Namespace verhindert Kollisionen, wenn Sie auch benutzerdefinierte oder Drittanbieter-Richtlinien mit ähnlichen Kurznamen laden. In Ihrer Konfiguration können Sie auf eine integrierte Richtlinie entweder mit ihrem Kurznamen oder ihrem qualifizierten Namen verweisen; beide Formen lösen sich zur selben Richtlinie auf:
{
  "enabledPolicies": [
    "sanitize-jwt",
    "failproofai/block-rm-rf"
  ]
}
Enthält ein Name kein /, behandelt failproofai ihn als zum Standard-Namespace failproofai gehörend. Namen, die bereits ein / enthalten (z. B. myorg/foo, custom/my-hook), werden unverändert übernommen.
  • require- — blockiert das Stop-Ereignis, bis die Bedingungen erfüllt sind.

Jede Richtlinie unterstützt ein optionales hint-Feld in policyParams. Der Hinweis wird an die deny- oder instruct-Nachricht angehängt, die Claude sieht, und gibt handlungsorientierte Hinweise, ohne den Richtliniencode zu ändern. Funktioniert mit integrierten, benutzerdefinierten und konventionsbasierten Richtlinien. Siehe Konfiguration → hint für Details.

Gefährliche Befehle

Verhindert, dass Agenten Operationen ausführen, die schwer rückgängig zu machen sind oder das Hostsystem beschädigen könnten.

block-sudo

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden sudo-Befehl.
Blockiert Aufrufe, die das sudo-Schlüsselwort enthalten. Der Musterabgleich erfolgt auf geparsten Befehls-Tokens, nicht auf dem Rohstring, um Umgehungsversuche durch Shell-Operator-Injection zu verhindern. Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]Exakte Befehlspräfixe, die erlaubt sind. Jeder Eintrag wird gegen die geparsten argv-Tokens abgeglichen.
Beispiel:
{
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    }
  }
}
Mit dieser Konfiguration ist sudo systemctl status nginx erlaubt, aber sudo rm /etc/hosts wird verweigert.
Muster werden gegen geparste Tokens abgeglichen, nicht gegen den Rohbefehlsstring. Dies verhindert Umgehungsversuche durch angehängte Shell-Operatoren (z. B. sudo systemctl status x; rm -rf / entspricht nicht sudo systemctl status *).

block-rm-rf

Ereignis: PreToolUse (Bash)
Standard: Verweigert rm -rf, rm -fr und ähnliche rekursive Löschformen.
Parameter:
ParameterTypStandardBeschreibung
allowPathsstring[][]Pfade, die sicher rekursiv gelöscht werden dürfen (z. B. /tmp).
Beispiel:
{
  "policyParams": {
    "block-rm-rf": {
      "allowPaths": ["/tmp", "/var/cache"]
    }
  }
}

block-curl-pipe-sh

Ereignis: PreToolUse (Bash)
Standard: Verweigert curl <url> | bash, curl <url> | sh, wget <url> | bash und ähnliche Muster.
Keine Parameter.

block-failproofai-commands

Ereignis: PreToolUse (Bash)
Standard: Verweigert Befehle, die failproofai selbst deinstallieren oder deaktivieren würden (z. B. npm uninstall failproofai, failproofai policies --uninstall).
Keine Parameter.

Infrastrukturbefehle

Verhindert, dass Coding-Agenten Infrastruktur-CLIs ausführen oder CI/CD-Pipelines auslösen. Alle Richtlinien in dieser Kategorie sind opt-in (defaultEnabled: false) — Agenten, die legitim kubectl, terraform usw. aufrufen müssen, werden nicht beeinträchtigt, es sei denn, Sie aktivieren die Richtlinie. Wenn aktiviert, wird jeder Aufruf der entsprechenden CLI verweigert, es sei denn, der Befehl entspricht einem Eintrag in allowPatterns. Die Mustergrammatik ist dieselbe wie bei block-sudo: Tokens werden gegen geparste argv abgeglichen, * ist ein Platzhalter für ein Token, und jeder Befehl, der einen eigenständigen Shell-Operator (&&, ||, |, ;) oder ein Token mit eingebetteten Shell-Metazeichen enthält, wird vor dem Allowlist-Abgleich abgelehnt, um Injection-Umgehungsversuche zu verhindern.

block-kubectl

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden kubectl-Aufruf.
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]kubectl-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-kubectl": {
      "allowPatterns": ["kubectl get *", "kubectl describe *", "kubectl logs *"]
    }
  }
}
Mit dieser Konfiguration ist kubectl get pods erlaubt, aber kubectl apply -f deploy.yaml wird verweigert.

block-terraform

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden terraform- oder tofu-Aufruf (OpenTofu).
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]terraform/tofu-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-terraform": {
      "allowPatterns": ["terraform plan", "terraform validate", "terraform show *"]
    }
  }
}

block-aws-cli

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden aws-CLI-Aufruf.
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]aws-CLI-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-aws-cli": {
      "allowPatterns": ["aws s3 ls *", "aws sts get-caller-identity"]
    }
  }
}

block-gcloud

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden gcloud-CLI-Aufruf (Google Cloud).
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]gcloud-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-gcloud": {
      "allowPatterns": ["gcloud auth list", "gcloud config list"]
    }
  }
}

block-az-cli

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden az-CLI-Aufruf (Azure).
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]az-CLI-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-az-cli": {
      "allowPatterns": ["az account show", "az group list"]
    }
  }
}

block-helm

Ereignis: PreToolUse (Bash)
Standard: Verweigert jeden helm-Aufruf.
Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]helm-Befehlspräfixe, die erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-helm": {
      "allowPatterns": ["helm list", "helm status *"]
    }
  }
}

block-gh-pipeline

Ereignis: PreToolUse (Bash)
Standard: Verweigert die folgenden gh-CLI-Unterbefehle, die den Zustand ändern oder Pipelines auslösen:
  • gh workflow run, gh workflow enable, gh workflow disable
  • gh run rerun, gh run cancel
  • gh pr merge
  • gh release create, gh release delete
  • gh cache delete
  • gh secret set, gh secret delete
Schreibgeschützte gh-Unterbefehle wie gh pr view, gh pr list, gh run list, gh release view und gh api repos/.../... werden von dieser Richtlinie nicht erfasst — sie werden routinemäßig für Workflow-Prüfungen benötigt (einschließlich failproofais eigenem require-ci-green-before-stop). Parameter:
ParameterTypStandardBeschreibung
allowPatternsstring[][]Bestimmte skriptierte Aufrufe, die erlaubt werden sollen, auch wenn sie andernfalls verweigert würden.
Beispiel:
{
  "policyParams": {
    "block-gh-pipeline": {
      "allowPatterns": ["gh run rerun *"]
    }
  }
}

Geheimnisse (Sanitizer)

Verhindert, dass Agenten Anmeldeinformationen in ihren Kontext oder ihre Ausgabe weitergeben. Sanitizer-Richtlinien werden bei PostToolUse-Ereignissen ausgelöst. Wenn Claude einen Bash-Befehl ausführt, eine Datei liest oder ein Tool aufruft, prüfen diese Richtlinien die Ausgabe, bevor sie an Claude zurückgegeben wird. Wenn ein Geheimnis-Muster erkannt wird, gibt die Richtlinie eine Verweigerungsentscheidung zurück, die verhindert, dass die Ausgabe weitergeleitet wird.

sanitize-jwt

Ereignis: PostToolUse (alle Tools)
Standard: Schwärzt JWT-Tokens (drei base64url-Segmente, getrennt durch .).
Keine Parameter.

sanitize-api-keys

Ereignis: PostToolUse (alle Tools)
Standard: Schwärzt gängige API-Schlüsselformate: Anthropic (sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), AWS-Zugriffsschlüssel (AKIA), Stripe-Schlüssel (sk_live_, sk_test_) und Google-API-Schlüssel (AIza).
Parameter:
ParameterTypStandardBeschreibung
additionalPatterns{ regex: string; label: string }[][]Zusätzliche Regex-Muster, die als Geheimnisse behandelt werden sollen.
Beispiel:
{
  "policyParams": {
    "sanitize-api-keys": {
      "additionalPatterns": [
        { "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo internal API key" },
        { "regex": "pat_[0-9a-f]{40}", "label": "Internal PAT" }
      ]
    }
  }
}

sanitize-connection-strings

Ereignis: PostToolUse (alle Tools)
Standard: Schwärzt Datenbankverbindungsstrings, die eingebettete Anmeldeinformationen enthalten (z. B. postgresql://user:password@host/db).
Keine Parameter.

sanitize-private-key-content

Ereignis: PostToolUse (alle Tools)
Standard: Schwärzt PEM-Blöcke (-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY----- usw.).
Keine Parameter.

sanitize-bearer-tokens

Ereignis: PostToolUse (alle Tools)
Standard: Schwärzt Authorization: Bearer <token>-Header, bei denen das Token 20 oder mehr Zeichen lang ist.
Keine Parameter.

Umgebung

Schützt sensible Umgebungskonfigurationen davor, von Agenten gelesen oder offengelegt zu werden.

block-env-files

Ereignis: PreToolUse (Bash, Read)
Standard: Verweigert das Lesen von .env-Dateien über cat .env, Read-Tool-Aufrufe mit .env als Dateipfad usw.
Blockiert nicht .envrc oder andere umgebungsnahe Dateien — nur Dateien, die exakt .env heißen. Keine Parameter.

protect-env-vars

Ereignis: PreToolUse (Bash)
Standard: Verweigert Befehle, die Umgebungsvariablen ausgeben: printenv, env, echo $VAR.
Keine Parameter.

Dateizugriff

Hält Agenten innerhalb der Projektgrenzen und fernab von sensiblen Dateien.

block-read-outside-cwd

Ereignis: PreToolUse (Read, Bash)
Standard: Verweigert das Lesen von Dateien außerhalb des Projektstamms. Die Grenze ist CLAUDE_PROJECT_DIR (einmal pro Sitzung von Claude Code gesetzt), mit einem Fallback auf das aktuelle Arbeitsverzeichnis der Sitzung, wenn diese Variable nicht gesetzt ist. Die Verwendung des Projektstamms anstelle des Live-cwd bedeutet, dass die Grenze auch dann stabil bleibt, wenn Claude in ein Unterverzeichnis wechselt.
Parameter:
ParameterTypStandardBeschreibung
allowPathsstring[][]Absolute Pfadpräfixe, die auch außerhalb des Projektstamms erlaubt sind.
Beispiel:
{
  "policyParams": {
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company/config"]
    }
  }
}

block-secrets-write

Ereignis: PreToolUse (Write, Edit)
Standard: Verweigert Schreibvorgänge in Dateien, die häufig für private Schlüssel und Zertifikate verwendet werden: id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Parameter:
ParameterTypStandardBeschreibung
additionalPatternsstring[][]Zusätzliche Dateinamenmuster (Glob-Stil), die blockiert werden sollen.
Beispiel:
{
  "policyParams": {
    "block-secrets-write": {
      "additionalPatterns": [".token", ".secret"]
    }
  }
}

Git

Verhindert versehentliche Pushes, Force-Pushes und Branch-Fehler, die schwer rückgängig zu machen sind.

block-push-master

Ereignis: PreToolUse (Bash)
Standard: Verweigert git push origin main und git push origin master.
Parameter:
ParameterTypStandardBeschreibung
protectedBranchesstring[]["main", "master"]Branch-Namen, auf die nicht direkt gepusht werden darf.
Beispiel:
{
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "master", "release", "prod"]
    }
  }
}
Um das Pushen auf alle Branches zu erlauben (was diese Richtlinie effektiv deaktiviert, ohne sie aus enabledPolicies zu entfernen), setzen Sie protectedBranches: [].

block-work-on-main

Ereignis: PreToolUse (Bash)
Standard: Verweigert git commit, git merge, git rebase und git cherry-pick, während sich der Working Tree auf main oder master befindet. Branch-Erstellung und -Wechsel (git checkout, git checkout -b, git switch, git switch -c) sind nicht betroffen.
Parameter:
ParameterTypStandardBeschreibung
protectedBranchesstring[]["main", "master"]Branch-Namen, auf denen commit/merge/rebase/cherry-pick verweigert wird.

block-force-push

Ereignis: PreToolUse (Bash)
Standard: Verweigert git push --force und git push -f.
Keine richtlinienspezifischen Parameter. Verwenden Sie das übergreifende hint, um Alternativen vorzuschlagen:
{
  "policyParams": {
    "block-force-push": {
      "hint": "Create a new branch from your current HEAD (e.g. `git checkout -b <new-branch>`) and push that instead."
    }
  }
}

warn-git-amend

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, vorsichtig vorzugehen, wenn git commit --amend ausgeführt wird. Blockiert den Befehl nicht.
Keine Parameter.

warn-git-stash-drop

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, vor dem Ausführen von git stash drop zu bestätigen. Blockiert den Befehl nicht.
Keine Parameter.

warn-all-files-staged

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, zu überprüfen, was es staged, wenn es git add -A oder git add . ausführt. Blockiert den Befehl nicht.
Keine Parameter.

Datenbank

Erkennt destruktive SQL-Operationen, bevor sie gegen Ihre Datenbank ausgeführt werden.

warn-destructive-sql

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, zu bestätigen, bevor SQL ausgeführt wird, das DROP TABLE, DROP DATABASE oder DELETE ohne WHERE-Klausel enthält.
Keine Parameter.

warn-schema-alteration

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, zu bestätigen, bevor ALTER TABLE-Anweisungen ausgeführt werden.
Keine Parameter.

Warnungen

Gibt Agenten zusätzlichen Kontext vor potenziell riskanten, aber nicht destruktiven Operationen.

warn-large-file-write

Ereignis: PreToolUse (Write)
Standard: Weist Claude an, zu bestätigen, bevor Dateien größer als 1024 KB geschrieben werden.
Parameter:
ParameterTypStandardBeschreibung
thresholdKbnumber1024Dateigrößenschwellenwert in Kilobyte, ab dem eine Warnung ausgegeben wird.
Beispiel:
{
  "policyParams": {
    "warn-large-file-write": {
      "thresholdKb": 256
    }
  }
}
Der Hook-Handler erzwingt ein stdin-Limit von 1 MB für Payloads. Um diese Richtlinie mit kleinem Inhalt zu testen, setzen Sie thresholdKb auf einen Wert deutlich unterhalb von 1024.

warn-package-publish

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, zu bestätigen, bevor npm publish ausgeführt wird.
Keine Parameter.

warn-background-process

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, vorsichtig zu sein, wenn Hintergrundprozesse über nohup, &, disown oder screen gestartet werden.
Keine Parameter.

warn-global-package-install

Ereignis: PreToolUse (Bash)
Standard: Weist Claude an, zu bestätigen, bevor npm install -g, yarn global add oder pip install ohne virtuelle Umgebung ausgeführt wird.
Keine Parameter.

Paketmanager

Legt fest, welche Paketmanager der Agent verwenden darf.

prefer-package-manager

Ereignis: PreToolUse (Bash)
Standard: Deaktiviert. Wenn aktiviert, blockiert es jeden Paketmanager-Befehl, der nicht in der allowed-Liste steht, und weist Claude an, den Befehl mit einem erlaubten Manager umzuschreiben.
Erkennt: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo.
ParameterTypStandardBeschreibung
allowedstring[][]Erlaubte Paketmanager-Namen. Jeder erkannte Manager, der nicht in dieser Liste steht, wird blockiert. Wenn leer, ist die Richtlinie wirkungslos.
blockedstring[][]Zusätzliche Manager-Namen, die über die integrierte Liste hinaus blockiert werden sollen (z. B. ['pdm', 'pipx']).
Die integrierte Blockliste umfasst: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Verwenden Sie blocked, um Manager hinzuzufügen, die nicht in dieser Liste enthalten sind. Beispielkonfiguration:
{
  "enabledPolicies": ["prefer-package-manager"],
  "policyParams": {
    "prefer-package-manager": {
      "allowed": ["uv", "bun"],
      "blocked": ["pdm", "pipx"]
    }
  }
}
Mit dieser Konfiguration werden pip install flask und pdm install flask beide verweigert, mit einer Meldung, die Claude auffordert, stattdessen uv oder bun zu verwenden. Befehle wie uv pip install flask sind erlaubt, da uv in der Allowlist steht und zuerst geprüft wird.

KI-Verhalten

Erkennt, wenn Agenten feststecken oder sich unerwartet verhalten.

warn-repeated-tool-calls

Ereignis: PreToolUse (alle Tools)
Standard: Weist Claude an, neu zu überlegen, wenn dasselbe Tool 3+ Mal mit identischen Parametern aufgerufen wird — ein häufiges Zeichen dafür, dass der Agent in einer Schleife feststeckt.
Keine Parameter.

Workflow

Erzwingt einen disziplinierten Workflow am Sitzungsende. Diese Richtlinien werden beim Stop-Ereignis ausgelöst und verhindern, dass der Agent anhält, bis jede Bedingung erfüllt ist. Sie folgen einer natürlichen Abhängigkeitskette: Commit → Push → PR → CI. Wenn eine Richtlinie verweigert, werden spätere Richtlinien in der Kette übersprungen (Kurzschluss bei Verweigerung). Alle Workflow-Richtlinien sind fail-open: Wenn das erforderliche Tool nicht verfügbar ist (z. B. gh nicht installiert, kein Git-Remote), erlaubt die Richtlinie den Vorgang mit einer informativen Meldung, die erklärt, warum die Prüfung übersprungen wurde.

Stop-Semantik je CLI

Die Stop-Durchsetzung sieht bei den sieben unterstützten CLIs etwas unterschiedlich aus, da jede eine andere Vertragsform für den Hook “Agent fertig” bereitstellt. Das Ergebnis ist dasselbe — der Agent kommt nicht damit durch, anzuhalten, während ein Workflow-Gate fehlschlägt — aber die Mechanik unterscheidet sich. Die folgende Tabelle fasst dies zusammen; nur Pi hat eine für den Benutzer sichtbare Besonderheit, die es wert ist, sie zu verstehen, bevor Sie eine require-*-before-stop-Richtlinie aktivieren.
CLIWann das Gate ausgelöst wirdWas Sie sehen
Claude CodeDieselbe Agentenschleife, sofortClaude arbeitet weiter — behebt das Problem und versucht dann erneut zu beenden. Für Sie keine sichtbare Unterbrechung.
CodexDieselbe Agentenschleife, sofortWie bei Claude.
GitHub Copilot CLIDieselbe Agentenschleife, sofortWie bei Claude (verwendet Copilots {decision:"block", reason}-Retry-Kanal — empirisch gegen Copilot CLI 1.0.41 verifiziert).
Cursor AgentDieselbe Agentenschleife, sofortWie bei Claude (verwendet Cursors {followup_message}-Kanal — begrenzt durch loop_limit, Standard 5 Wiederholungen).
Gemini CLIDieselbe Agentenschleife, sofortWie bei Claude (verwendet Geminis {decision:"block", reason}-Kanal bei AfterAgent).
OpenCodeDieselbe Agentenschleife, sofortWie bei Claude (verwendet OpenCodes client.session.prompt(...)-SDK-Aufruf, weitergeleitet über hookSpecificOutput.additionalContext).
Pi (pi-coding-agent)Nächste BenutzerrundePi hält sichtbar an, wenn das Gate ausgelöst wird — seine Agentenschleife wird beendet und Sie kehren zur Eingabeaufforderung zurück. Das Gate wird dann beim nächsten Mal ausgelöst, wenn Sie eine Eingabeaufforderung senden: failproofai stellt eine MANDATORY ACTION REQUIRED-Direktive an den Beginn des System-Prompts dieser Runde und weist das LLM an, den Workflow-Schritt (Commit, Push usw.) abzuschließen, bevor es das Angeforderte tut.
Pi-Einschränkung. Pis AgentEndEvent (das Upstream-Äquivalent von Claudes Stop-Hook) hat keinen Result-Typ — wenn er ausgelöst wird, ist Pis Agentenschleife bereits beendet. Pi kann nicht gezwungen werden, dieselbe Schleife zu wiederholen, wie es Claude / Copilot / Cursor / Gemini / OpenCode können. failproofai verschiebt das Gate auf Pis before_agent_start-Ereignis (das nach der nächsten Benutzereingabe ausgelöst wird), damit die Workflow-Prüfung weiterhin erzwungen wird, allerdings erst in der nächsten Runde statt in der aktuellen.Was das in der Praxis bedeutet:
  • Nachdem Pi anhält, wird der Verweigerungsgrund im Arbeitsspeicher gespeichert, indexiert nach der Pi-Sitzungs-ID. Die nächste Eingabeaufforderung, die Sie in demselben Pi-Prozess senden, leert diesen Speicher: Das LLM sieht die MANDATORY ACTION REQUIRED-Direktive am Anfang seines System-Prompts, führt einen Commit durch (oder Push / öffnet den PR / wartet auf CI) und fährt dann erst mit Ihrer Anfrage fort. Der gespeicherte Verweigerungsgrund ist einmalig — sobald er geleert wurde, ist das Gate frei.
  • Das Gate ist an die Lebensdauer des Pi-Prozesses gebunden. Wenn Sie Pi zwischen den Runden mit Ctrl+C beenden oder schließen, wird der Speichereintrag zusammen mit dem Prozess verworfen und das Gate wird verpasst. Claude, Copilot, Cursor, Gemini und OpenCode haben dieselbe Einschränkung (Agent beenden und das Gate wird verpasst) — Pi macht es nur sichtbarer, weil der Agent sichtbar beendet wird, bevor das Gate ausgelöst wird.
  • Ein ausstehender Verweigerungsgrund wird auch bei session_shutdown aus beliebigem Grund (new / resume / fork / quit) gelöscht, sodass ein veraltetes Gate aus einer früheren Sitzung nicht in eine neue Sitzung im selben Pi-Prozess übertragen werden kann.
Wenn Sie Claude-ähnliche Wiederholungen in derselben Schleife benötigen, führen Sie Ihre Stop-Richtlinien unter einer der anderen sechs unterstützten CLIs aus. Wir verfolgen Pi Upstream auf einen zukünftigen Result-Typ bei AgentEndEvent, der es uns ermöglichen würde, diese Lücke zu schließen.

require-commit-before-stop

Ereignis: Stop
Standard: Verweigert das Anhalten, wenn uncommittete Änderungen vorhanden sind (geänderte, gestagete oder nicht verfolgte Dateien). Gibt eine informative Meldung zurück, wenn das Arbeitsverzeichnis sauber ist.
Keine Parameter.

require-push-before-stop

Ereignis: Stop
Standard: Verweigert das Anhalten, wenn es unpushed Commits gibt oder wenn der aktuelle Branch keinen Remote-Tracking-Branch hat. Schlägt git push -u vor, um bei Bedarf einen Tracking-Branch zu erstellen. Fails open, wenn kein Remote konfiguriert ist.
Parameter:
ParameterTypStandardBeschreibung
remotestring"origin"Remote-Name, auf den gepusht werden soll.
Beispiel:
{
  "policyParams": {
    "require-push-before-stop": {
      "remote": "upstream"
    }
  }
}

require-pr-before-stop

Ereignis: Stop
Standard: Verweigert das Anhalten, wenn kein Pull Request für den aktuellen Branch existiert oder wenn der vorhandene PR ohne Merge geschlossen wurde. Weist Claude an, einen PR mit gh pr create zu erstellen. Wenn der PR gemergt ist, erlaubt die Richtlinie den Vorgang (die Arbeit ist ausgeliefert) und der Hinweis empfiehlt, den Branch zu wechseln (git checkout main && git pull).
Keine Parameter.
Diese Richtlinie erfordert, dass GitHub CLI (gh) installiert und authentifiziert ist. Führen Sie gh auth login mit einem persönlichen Zugriffstoken aus, das den repo-Scope für Lesezugriff auf Pull Requests hat. Wenn gh nicht installiert oder nicht authentifiziert ist, schlägt die Richtlinie offen fehl und meldet den Grund an Claude.

require-no-conflicts-before-stop

Ereignis: Stop
Standard: Verweigert das Anhalten, wenn der aktuelle Branch nicht sauber in den Basis-Branch gemergt werden kann. Die Richtlinie prüft zunächst, ob auf GitHub ein OPEN-PR für den Branch existiert — ohne einen solchen gibt es kein Merge-Ziel, das erzwungen werden müsste, sodass die gesamte Richtlinie mit allow kurzgeschlossen wird. Sobald ein OPEN-PR bestätigt ist, werden zwei unabhängige Prüfungen durchgeführt:
  1. Lokalgit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. Bei einem Konflikt nennt die Verweigerungsmeldung die betroffenen Dateien, damit Claude genau weiß, was aufgelöst werden muss.
  2. GitHub — verwendet das bereits für die Vorprüfung abgerufene Ergebnis von gh pr view --json mergeable,state. Erkennt Konflikte, die ein veraltetes lokales origin/<baseBranch> verpasst hätte (z. B. wenn jemand einen konfliktierenden PR auf main gemergt hat, seit dem letzten Fetch). Ein CONFLICTING-Ergebnis verweigert. Ein UNKNOWN-Ergebnis verweigert ebenfalls und weist Claude an, etwa 10 Sekunden zu warten und erneut zu prüfen, bevor ein weiterer Stoppversuch unternommen wird — dies verhindert falsch-negative Ergebnisse, während GitHub neu berechnet.
Wird vollständig übersprungen (erlaubt), wenn: gh nicht installiert ist, kein PR für den Branch existiert, der PR-Status nicht OPEN ist (z. B. MERGED, CLOSED), oder gh pr view nicht parsierbare Ausgabe liefert. Schlägt auch offen fehl, wenn origin/<baseBranch> lokal fehlt oder wenn keine Commits vor der Basis vorhanden sind — diese Layer-1-Fallbacks konsultieren trotzdem die gecachte PR-Merge-Fähigkeit, bevor sie erlauben. Parameter:
ParameterTypStandardBeschreibung
baseBranchstring"main"Basis-Branch, gegen den auf Konflikte geprüft wird.
GitHub CLI (gh) ist für diese Richtlinie erforderlich. Die Richtlinie verwendet gh pr view, um zu bestätigen, dass ein OPEN-PR existiert, bevor eine Konfliktprüfung durchgeführt wird — ohne gh schließt die Richtlinie mit allow kurz. Führen Sie gh auth login mit einem persönlichen Zugriffstoken aus, das den repo-Scope für Lesezugriff auf Pull Requests hat.

require-ci-green-before-stop

Ereignis: Stop
Standard: Verweigert das Anhalten, wenn CI-Prüfungen fehlschlagen oder auf dem aktuellen Branch noch laufen. Prüft sowohl GitHub Actions-Workflow-Runs als auch Drittanbieter-Bot-Prüfungen (z. B. CodeRabbit, SonarCloud, Codecov). Behandelt skipped, cancelled und neutral als nicht fehlgeschlagen (letzteres deckt z. B. Socket Security-Warnungen bei PRs externer Mitwirkender ab, bei denen die App absichtlich neutral statt Erfolg/Fehler meldet). Gibt eine informative Meldung zurück, wenn alle Prüfungen bestanden sind.
Keine Parameter.
Diese Richtlinie erfordert, dass GitHub CLI (gh) installiert und authentifiziert ist. Führen Sie gh auth login mit einem persönlichen Zugriffstoken aus, das den repo-Scope für Lesezugriff auf Actions-Workflow-Runs und die Checks-API hat. Wenn gh nicht installiert oder nicht authentifiziert ist, schlägt die Richtlinie offen fehl und meldet den Grund an Claude.


Einzelne Richtlinien deaktivieren

Entfernen Sie eine bestimmte Richtlinie aus enabledPolicies in Ihrer Konfiguration oder deaktivieren Sie sie im Dashboard-Tab Richtlinien.
{
  "enabledPolicies": [
    "block-rm-rf",
    "sanitize-api-keys"
  ]
}
Richtlinien, die nicht in enabledPolicies aufgeführt sind, werden nicht ausgeführt, auch wenn policyParams-Einträge für sie vorhanden sind.