failproofai 0.0.6-beta.0 → 0.0.6-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.failproofai/policies/review-policies.mjs +113 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a.nuas._.js → [root-of-the-server]__05akje6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.~fd7s._.js → [root-of-the-server]__0i5kvry._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +6 -6
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
- package/.next/standalone/.next/static/chunks/{0teq8wdh3po1n.js → 00j0rr7rh8ef8.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0maq.q1t.ri85.js → 05j1px0r8yzh6.js} +2 -2
- package/.next/standalone/.next/static/chunks/0badv41uxa56..js +4 -0
- package/.next/standalone/.next/static/chunks/{0hplx-8c-4vpv.js → 0ijk_kek9_wyx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0uc0um_uz51m_.js → 0npb~873.wvg3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0hctoh28rg838.js → 0xpl.oscrakvx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0.z51twd.0l5z.js → 1052sguyd-.ka.js} +1 -1
- package/.next/standalone/.next/static/chunks/{09e7drilkf1sn.js → 12simlrcfk3g2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ul6fk-z.6k-0.js → 14cl9poem30dq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0r26pc8h0y_-e.js → turbopack-0o7k.hakttp4k.js} +1 -1
- package/.next/standalone/CHANGELOG.md +19 -0
- package/.next/standalone/README.md +2 -2
- package/.next/standalone/bun.lock +43 -85
- package/.next/standalone/dist/cli.mjs +91 -4
- package/.next/standalone/docs/ar/built-in-policies.mdx +124 -87
- package/.next/standalone/docs/ar/custom-policies.mdx +72 -72
- package/.next/standalone/docs/ar/examples.mdx +86 -33
- package/.next/standalone/docs/ar/getting-started.mdx +82 -29
- package/.next/standalone/docs/built-in-policies.mdx +38 -1
- package/.next/standalone/docs/custom-policies.mdx +1 -1
- package/.next/standalone/docs/de/built-in-policies.mdx +93 -56
- package/.next/standalone/docs/de/custom-policies.mdx +56 -56
- package/.next/standalone/docs/de/examples.mdx +72 -18
- package/.next/standalone/docs/de/getting-started.mdx +72 -20
- package/.next/standalone/docs/es/built-in-policies.mdx +115 -78
- package/.next/standalone/docs/es/custom-policies.mdx +55 -55
- package/.next/standalone/docs/es/examples.mdx +73 -19
- package/.next/standalone/docs/es/getting-started.mdx +72 -20
- package/.next/standalone/docs/examples.mdx +54 -0
- package/.next/standalone/docs/fr/built-in-policies.mdx +83 -46
- package/.next/standalone/docs/fr/custom-policies.mdx +51 -51
- package/.next/standalone/docs/fr/examples.mdx +78 -24
- package/.next/standalone/docs/fr/getting-started.mdx +65 -13
- package/.next/standalone/docs/getting-started.mdx +52 -0
- package/.next/standalone/docs/he/built-in-policies.mdx +156 -117
- package/.next/standalone/docs/he/custom-policies.mdx +75 -75
- package/.next/standalone/docs/he/examples.mdx +87 -33
- package/.next/standalone/docs/he/getting-started.mdx +84 -33
- package/.next/standalone/docs/hi/built-in-policies.mdx +101 -60
- package/.next/standalone/docs/hi/custom-policies.mdx +71 -70
- package/.next/standalone/docs/hi/examples.mdx +90 -36
- package/.next/standalone/docs/hi/getting-started.mdx +80 -27
- package/.next/standalone/docs/i18n/README.ar.md +69 -69
- package/.next/standalone/docs/i18n/README.de.md +46 -46
- package/.next/standalone/docs/i18n/README.es.md +42 -42
- package/.next/standalone/docs/i18n/README.fr.md +39 -39
- package/.next/standalone/docs/i18n/README.he.md +83 -83
- package/.next/standalone/docs/i18n/README.hi.md +69 -69
- package/.next/standalone/docs/i18n/README.it.md +72 -72
- package/.next/standalone/docs/i18n/README.ja.md +71 -71
- package/.next/standalone/docs/i18n/README.ko.md +52 -52
- package/.next/standalone/docs/i18n/README.pt-br.md +44 -44
- package/.next/standalone/docs/i18n/README.ru.md +66 -66
- package/.next/standalone/docs/i18n/README.tr.md +82 -83
- package/.next/standalone/docs/i18n/README.vi.md +70 -71
- package/.next/standalone/docs/i18n/README.zh.md +51 -51
- package/.next/standalone/docs/it/built-in-policies.mdx +118 -81
- package/.next/standalone/docs/it/custom-policies.mdx +69 -69
- package/.next/standalone/docs/it/examples.mdx +93 -39
- package/.next/standalone/docs/it/getting-started.mdx +73 -21
- package/.next/standalone/docs/ja/built-in-policies.mdx +98 -61
- package/.next/standalone/docs/ja/custom-policies.mdx +71 -71
- package/.next/standalone/docs/ja/examples.mdx +76 -22
- package/.next/standalone/docs/ja/getting-started.mdx +65 -13
- package/.next/standalone/docs/ko/built-in-policies.mdx +137 -100
- package/.next/standalone/docs/ko/custom-policies.mdx +67 -67
- package/.next/standalone/docs/ko/examples.mdx +87 -33
- package/.next/standalone/docs/ko/getting-started.mdx +61 -9
- package/.next/standalone/docs/pt-br/built-in-policies.mdx +94 -57
- package/.next/standalone/docs/pt-br/custom-policies.mdx +56 -56
- package/.next/standalone/docs/pt-br/examples.mdx +78 -24
- package/.next/standalone/docs/pt-br/getting-started.mdx +64 -12
- package/.next/standalone/docs/ru/built-in-policies.mdx +142 -105
- package/.next/standalone/docs/ru/custom-policies.mdx +82 -81
- package/.next/standalone/docs/ru/examples.mdx +77 -22
- package/.next/standalone/docs/ru/getting-started.mdx +74 -22
- package/.next/standalone/docs/tr/built-in-policies.mdx +104 -67
- package/.next/standalone/docs/tr/custom-policies.mdx +59 -60
- package/.next/standalone/docs/tr/examples.mdx +97 -42
- package/.next/standalone/docs/tr/getting-started.mdx +75 -23
- package/.next/standalone/docs/vi/built-in-policies.mdx +110 -72
- package/.next/standalone/docs/vi/custom-policies.mdx +68 -68
- package/.next/standalone/docs/vi/examples.mdx +93 -38
- package/.next/standalone/docs/vi/getting-started.mdx +74 -22
- package/.next/standalone/docs/zh/built-in-policies.mdx +132 -95
- package/.next/standalone/docs/zh/custom-policies.mdx +49 -49
- package/.next/standalone/docs/zh/examples.mdx +90 -36
- package/.next/standalone/docs/zh/getting-started.mdx +73 -21
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/config-schema.js +10 -2
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/render.js +27 -20
- package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +15 -15
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/hooks/builtin-policies.ts +106 -1
- package/README.md +2 -2
- package/dist/cli.mjs +91 -4
- package/package.json +2 -2
- package/src/hooks/builtin-policies.ts +106 -1
- package/.next/standalone/.next/static/chunks/0w9lwqy0-v1dk.js +0 -4
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_ssgManifest.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Benutzerdefinierte Richtlinien
|
|
3
|
-
description: "Schreibe eigene Richtlinien in JavaScript – Konventionen
|
|
3
|
+
description: "Schreibe eigene Richtlinien in JavaScript – setze Konventionen durch, verhindere Abweichungen, erkenne Fehler und integriere externe Systeme"
|
|
4
4
|
icon: code
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Benutzerdefinierte Richtlinien ermöglichen es dir, Regeln für jedes Agentenverhalten zu schreiben: Projektkonventionen durchsetzen,
|
|
7
|
+
Benutzerdefinierte Richtlinien ermöglichen es dir, Regeln für jedes Agentenverhalten zu schreiben: Projektkonventionen durchsetzen, Abweichungen verhindern, destruktive Operationen absichern, feststeckende Agenten erkennen oder Integrationen mit Slack, Genehmigungsworkflows und mehr umsetzen. Sie verwenden dasselbe Hook-Event-System und dieselben `allow`-, `deny`- und `instruct`-Entscheidungen wie integrierte Richtlinien.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -44,23 +44,23 @@ failproofai policies --install --custom ./my-policies.js
|
|
|
44
44
|
Lege `*policies.{js,mjs,ts}`-Dateien in `.failproofai/policies/` ab – sie werden automatisch geladen, ohne Flags oder Konfigurationsänderungen. Das funktioniert wie Git-Hooks: Datei ablegen, fertig.
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
# Projektebene
|
|
47
|
+
# Projektebene — in Git eingecheckt, wird mit dem Team geteilt
|
|
48
48
|
.failproofai/policies/security-policies.mjs
|
|
49
49
|
.failproofai/policies/workflow-policies.mjs
|
|
50
50
|
|
|
51
|
-
# Benutzerebene
|
|
51
|
+
# Benutzerebene — persönlich, gilt für alle Projekte
|
|
52
52
|
~/.failproofai/policies/my-policies.mjs
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
**
|
|
56
|
-
- Sowohl Projekt- als auch Benutzerverzeichnisse werden durchsucht (Vereinigung – kein „
|
|
55
|
+
**So funktioniert es:**
|
|
56
|
+
- Sowohl Projekt- als auch Benutzerverzeichnisse werden durchsucht (Vereinigung – kein „First-scope-wins")
|
|
57
57
|
- Dateien werden innerhalb jedes Verzeichnisses alphabetisch geladen. Mit `01-`, `02-` als Präfix lässt sich die Reihenfolge steuern
|
|
58
58
|
- Nur Dateien, die auf `*policies.{js,mjs,ts}` passen, werden geladen; andere Dateien werden ignoriert
|
|
59
59
|
- Jede Datei wird unabhängig geladen (fail-open pro Datei)
|
|
60
|
-
- Funktioniert zusammen mit
|
|
60
|
+
- Funktioniert zusammen mit expliziten `--custom`- und integrierten Richtlinien
|
|
61
61
|
|
|
62
62
|
<Tip>
|
|
63
|
-
Konventionsrichtlinien sind der einfachste Weg,
|
|
63
|
+
Konventionsrichtlinien sind der einfachste Weg, einen Qualitätsstandard für deine Organisation aufzubauen. Checke `.failproofai/policies/` in Git ein, und jedes Teammitglied erhält automatisch dieselben Regeln – kein Setup pro Entwickler nötig. Wenn dein Team neue Fehlerquellen entdeckt, füge eine Richtlinie hinzu und pushe sie. Mit der Zeit entstehen so lebendige Qualitätsstandards, die mit jedem Beitrag besser werden.
|
|
64
64
|
</Tip>
|
|
65
65
|
|
|
66
66
|
### Option 2: Expliziter Dateipfad
|
|
@@ -69,7 +69,7 @@ Konventionsrichtlinien sind der einfachste Weg, Richtlinien im Team zu teilen. C
|
|
|
69
69
|
# Mit einer benutzerdefinierten Richtliniendatei installieren
|
|
70
70
|
failproofai policies --install --custom ./my-policies.js
|
|
71
71
|
|
|
72
|
-
# Den
|
|
72
|
+
# Den Pfad zur Richtliniendatei ersetzen
|
|
73
73
|
failproofai policies --install --custom ./new-policies.js
|
|
74
74
|
|
|
75
75
|
# Den benutzerdefinierten Richtlinienpfad aus der Konfiguration entfernen
|
|
@@ -78,13 +78,13 @@ failproofai policies --uninstall --custom
|
|
|
78
78
|
|
|
79
79
|
Der aufgelöste absolute Pfad wird in `policies-config.json` als `customPoliciesPath` gespeichert. Die Datei wird bei jedem Hook-Event neu geladen – es gibt kein Caching zwischen Events.
|
|
80
80
|
|
|
81
|
-
### Beide Varianten
|
|
81
|
+
### Beide Varianten zusammen verwenden
|
|
82
82
|
|
|
83
83
|
Konventionsrichtlinien und die explizite `--custom`-Datei können nebeneinander existieren. Ladereihenfolge:
|
|
84
84
|
|
|
85
|
-
1. Explizite `customPoliciesPath`-Datei (
|
|
86
|
-
2.
|
|
87
|
-
3.
|
|
85
|
+
1. Explizite `customPoliciesPath`-Datei (falls konfiguriert)
|
|
86
|
+
2. Projektkonventionsdateien (`{cwd}/.failproofai/policies/`, alphabetisch)
|
|
87
|
+
3. Benutzerkonventionsdateien (`~/.failproofai/policies/`, alphabetisch)
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
@@ -103,40 +103,40 @@ Registriert eine Richtlinie. Kann mehrfach aufgerufen werden, um mehrere Richtli
|
|
|
103
103
|
```ts
|
|
104
104
|
customPolicies.add({
|
|
105
105
|
name: string; // erforderlich – eindeutiger Bezeichner
|
|
106
|
-
description?: string; //
|
|
107
|
-
match?: { events?: HookEventType[] }; // nach Event-Typ filtern; weglassen
|
|
106
|
+
description?: string; // wird in der Ausgabe von `failproofai policies` angezeigt
|
|
107
|
+
match?: { events?: HookEventType[] }; // nach Event-Typ filtern; weglassen, um alle abzugleichen
|
|
108
108
|
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
109
109
|
});
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
### Entscheidungs-Hilfsfunktionen
|
|
113
113
|
|
|
114
|
-
| Funktion | Wirkung |
|
|
115
|
-
|
|
116
|
-
| `allow()` | Operation lautlos
|
|
114
|
+
| Funktion | Wirkung | Verwenden, wenn |
|
|
115
|
+
|----------|---------|-----------------|
|
|
116
|
+
| `allow()` | Operation lautlos erlauben | Die Aktion ist sicher, keine Meldung erforderlich |
|
|
117
117
|
| `deny(message)` | Operation blockieren | Der Agent soll diese Aktion nicht ausführen |
|
|
118
|
-
| `instruct(message)` | Kontext hinzufügen ohne zu blockieren | Dem Agenten zusätzlichen Kontext geben,
|
|
118
|
+
| `instruct(message)` | Kontext hinzufügen, ohne zu blockieren | Dem Agenten zusätzlichen Kontext geben, damit er auf Kurs bleibt |
|
|
119
119
|
|
|
120
|
-
`deny(message)` – die Nachricht
|
|
120
|
+
`deny(message)` – die Nachricht wird Claude mit dem Präfix `"Blocked by failproofai:"` angezeigt. Ein einzelnes `deny` bricht die gesamte weitere Auswertung ab.
|
|
121
121
|
|
|
122
|
-
`instruct(message)` – die Nachricht wird dem Kontext von Claude für den aktuellen Tool-Aufruf
|
|
122
|
+
`instruct(message)` – die Nachricht wird dem Kontext von Claude für den aktuellen Tool-Aufruf hinzugefügt. Alle `instruct`-Nachrichten werden gesammelt und gemeinsam übermittelt.
|
|
123
123
|
|
|
124
124
|
<Tip>
|
|
125
|
-
|
|
125
|
+
Du kannst jeder `deny`- oder `instruct`-Nachricht zusätzliche Hinweise hinzufügen, indem du ein `hint`-Feld in `policyParams` setzt – ohne Codeänderung. Das funktioniert auch für benutzerdefinierte (`custom/`), Projektkonventions- (`.failproofai-project/`) und Benutzerkonventionsrichtlinien (`.failproofai-user/`). Weitere Details unter [Konfiguration → hint](/de/configuration#hint-cross-cutting).
|
|
126
126
|
</Tip>
|
|
127
127
|
|
|
128
128
|
### Informative Allow-Nachrichten
|
|
129
129
|
|
|
130
|
-
`allow(message)` erlaubt die Operation **und** sendet eine informative Nachricht
|
|
130
|
+
`allow(message)` erlaubt die Operation **und** sendet eine informative Nachricht an Claude. Die Nachricht wird als `additionalContext` in der stdout-Antwort des Hook-Handlers übermittelt – derselbe Mechanismus wie bei `instruct`, aber semantisch anders: Es handelt sich um eine Statusmeldung, nicht um eine Warnung.
|
|
131
131
|
|
|
132
|
-
| Funktion | Wirkung |
|
|
133
|
-
|
|
134
|
-
| `allow(message)` |
|
|
132
|
+
| Funktion | Wirkung | Verwenden, wenn |
|
|
133
|
+
|----------|---------|-----------------|
|
|
134
|
+
| `allow(message)` | Erlauben und Kontext an Claude senden | Bestätigen, dass eine Prüfung bestanden wurde, oder erklären, warum eine Prüfung übersprungen wurde |
|
|
135
135
|
|
|
136
136
|
Anwendungsfälle:
|
|
137
|
-
- **Statusbestätigungen:** `allow("All CI checks passed.")` – teilt Claude mit, dass alles
|
|
137
|
+
- **Statusbestätigungen:** `allow("All CI checks passed.")` – teilt Claude mit, dass alles in Ordnung ist
|
|
138
138
|
- **Fail-open-Erklärungen:** `allow("GitHub CLI not installed, skipping CI check.")` – erklärt Claude, warum eine Prüfung übersprungen wurde, damit er den vollen Kontext hat
|
|
139
|
-
- **Mehrere Nachrichten werden akkumuliert:**
|
|
139
|
+
- **Mehrere Nachrichten werden akkumuliert:** Wenn mehrere Richtlinien jeweils `allow(message)` zurückgeben, werden alle Nachrichten mit Zeilenumbrüchen verbunden und gemeinsam übermittelt
|
|
140
140
|
|
|
141
141
|
```js
|
|
142
142
|
customPolicies.add({
|
|
@@ -155,30 +155,30 @@ customPolicies.add({
|
|
|
155
155
|
});
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
### `PolicyContext
|
|
158
|
+
### Felder von `PolicyContext`
|
|
159
159
|
|
|
160
160
|
| Feld | Typ | Beschreibung |
|
|
161
161
|
|------|-----|--------------|
|
|
162
162
|
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
163
163
|
| `toolName` | `string \| undefined` | Das aufgerufene Tool (z. B. `"Bash"`, `"Write"`, `"Read"`) |
|
|
164
164
|
| `toolInput` | `Record<string, unknown> \| undefined` | Die Eingabeparameter des Tools |
|
|
165
|
-
| `payload` | `Record<string, unknown>` |
|
|
165
|
+
| `payload` | `Record<string, unknown>` | Vollständige rohe Event-Nutzlast von Claude Code |
|
|
166
166
|
| `session` | `SessionMetadata \| undefined` | Sitzungskontext (siehe unten) |
|
|
167
167
|
|
|
168
|
-
### `SessionMetadata
|
|
168
|
+
### Felder von `SessionMetadata`
|
|
169
169
|
|
|
170
170
|
| Feld | Typ | Beschreibung |
|
|
171
171
|
|------|-----|--------------|
|
|
172
|
-
| `sessionId` | `string` | Claude Code-
|
|
172
|
+
| `sessionId` | `string` | Claude Code-Sitzungsbezeichner |
|
|
173
173
|
| `cwd` | `string` | Arbeitsverzeichnis der Claude Code-Sitzung |
|
|
174
174
|
| `transcriptPath` | `string` | Pfad zur JSONL-Transkriptdatei der Sitzung |
|
|
175
175
|
|
|
176
176
|
### Event-Typen
|
|
177
177
|
|
|
178
|
-
| Event | Wann
|
|
179
|
-
|
|
178
|
+
| Event | Wann ausgelöst | Inhalt von `toolInput` |
|
|
179
|
+
|-------|---------------|------------------------|
|
|
180
180
|
| `PreToolUse` | Bevor Claude ein Tool ausführt | Die Eingabe des Tools (z. B. `{ command: "..." }` für Bash) |
|
|
181
|
-
| `PostToolUse` | Nachdem ein Tool abgeschlossen
|
|
181
|
+
| `PostToolUse` | Nachdem ein Tool abgeschlossen ist | Die Eingabe des Tools + `tool_result` (die Ausgabe) |
|
|
182
182
|
| `Notification` | Wenn Claude eine Benachrichtigung sendet | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` – Hooks müssen immer `allow()` zurückgeben, Benachrichtigungen können nicht blockiert werden |
|
|
183
183
|
| `Stop` | Wenn die Claude-Sitzung endet | Leer |
|
|
184
184
|
|
|
@@ -188,18 +188,18 @@ customPolicies.add({
|
|
|
188
188
|
|
|
189
189
|
Richtlinien werden in dieser Reihenfolge ausgewertet:
|
|
190
190
|
|
|
191
|
-
1.
|
|
191
|
+
1. Integrierte Richtlinien (in Definitionsreihenfolge)
|
|
192
192
|
2. Explizite benutzerdefinierte Richtlinien aus `customPoliciesPath` (in `.add()`-Reihenfolge)
|
|
193
|
-
3. Konventionsrichtlinien aus dem Projekt `.failproofai/policies/` (Dateien alphabetisch, `.add()`-Reihenfolge innerhalb)
|
|
193
|
+
3. Konventionsrichtlinien aus dem Projekt unter `.failproofai/policies/` (Dateien alphabetisch, `.add()`-Reihenfolge innerhalb)
|
|
194
194
|
4. Konventionsrichtlinien aus dem Benutzerverzeichnis `~/.failproofai/policies/` (Dateien alphabetisch, `.add()`-Reihenfolge innerhalb)
|
|
195
195
|
|
|
196
196
|
<Note>
|
|
197
|
-
Das erste `deny` bricht alle nachfolgenden Richtlinien ab. Alle `instruct`-Nachrichten werden gesammelt und gemeinsam
|
|
197
|
+
Das erste `deny` bricht alle nachfolgenden Richtlinien ab. Alle `instruct`-Nachrichten werden gesammelt und gemeinsam übermittelt.
|
|
198
198
|
</Note>
|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
202
|
-
## Transitive
|
|
202
|
+
## Transitive Imports
|
|
203
203
|
|
|
204
204
|
Benutzerdefinierte Richtliniendateien können lokale Module über relative Pfade importieren:
|
|
205
205
|
|
|
@@ -218,13 +218,13 @@ customPolicies.add({
|
|
|
218
218
|
});
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
-
Alle
|
|
221
|
+
Alle relativen Imports, die von der Einstiegsdatei aus erreichbar sind, werden aufgelöst. Dies wird implementiert, indem `from "failproofai"`-Imports auf den tatsächlichen dist-Pfad umgeschrieben und temporäre `.mjs`-Dateien erstellt werden, um ESM-Kompatibilität sicherzustellen.
|
|
222
222
|
|
|
223
223
|
---
|
|
224
224
|
|
|
225
|
-
## Event-Typ
|
|
225
|
+
## Filterung nach Event-Typ
|
|
226
226
|
|
|
227
|
-
|
|
227
|
+
Verwende `match.events`, um einzuschränken, wann eine Richtlinie ausgelöst wird:
|
|
228
228
|
|
|
229
229
|
```js
|
|
230
230
|
customPolicies.add({
|
|
@@ -238,26 +238,26 @@ customPolicies.add({
|
|
|
238
238
|
});
|
|
239
239
|
```
|
|
240
240
|
|
|
241
|
-
`match`
|
|
241
|
+
Lass `match` vollständig weg, um bei jedem Event-Typ ausgelöst zu werden.
|
|
242
242
|
|
|
243
243
|
---
|
|
244
244
|
|
|
245
|
-
## Fehlerbehandlung und
|
|
245
|
+
## Fehlerbehandlung und Fehlermodi
|
|
246
246
|
|
|
247
|
-
Benutzerdefinierte Richtlinien sind **fail-open**: Fehler blockieren niemals
|
|
247
|
+
Benutzerdefinierte Richtlinien sind **fail-open**: Fehler blockieren niemals integrierte Richtlinien oder bringen den Hook-Handler zum Absturz.
|
|
248
248
|
|
|
249
249
|
| Fehler | Verhalten |
|
|
250
250
|
|--------|-----------|
|
|
251
|
-
| `customPoliciesPath` nicht gesetzt | Keine expliziten benutzerdefinierten Richtlinien werden ausgeführt; Konventionsrichtlinien und
|
|
252
|
-
| Datei nicht gefunden | Warnung wird in `~/.failproofai/hook.log` protokolliert;
|
|
251
|
+
| `customPoliciesPath` nicht gesetzt | Keine expliziten benutzerdefinierten Richtlinien werden ausgeführt; Konventionsrichtlinien und integrierte Richtlinien laufen normal weiter |
|
|
252
|
+
| Datei nicht gefunden | Warnung wird in `~/.failproofai/hook.log` protokolliert; integrierte Richtlinien laufen weiter |
|
|
253
253
|
| Syntax-/Importfehler (explizit) | Fehler wird in `~/.failproofai/hook.log` protokolliert; explizite benutzerdefinierte Richtlinien werden übersprungen |
|
|
254
254
|
| Syntax-/Importfehler (Konvention) | Fehler wird protokolliert; diese Datei wird übersprungen, andere Konventionsdateien werden weiterhin geladen |
|
|
255
255
|
| `fn` wirft zur Laufzeit | Fehler wird protokolliert; dieser Hook wird als `allow` behandelt; andere Hooks laufen weiter |
|
|
256
|
-
| `fn` dauert länger als 10
|
|
256
|
+
| `fn` dauert länger als 10 Sekunden | Timeout wird protokolliert; wird als `allow` behandelt |
|
|
257
257
|
| Konventionsverzeichnis fehlt | Keine Konventionsrichtlinien werden ausgeführt; kein Fehler |
|
|
258
258
|
|
|
259
259
|
<Tip>
|
|
260
|
-
|
|
260
|
+
Um Fehler in benutzerdefinierten Richtlinien zu debuggen, beobachte die Protokolldatei:
|
|
261
261
|
|
|
262
262
|
```bash
|
|
263
263
|
tail -f ~/.failproofai/hook.log
|
|
@@ -272,7 +272,7 @@ tail -f ~/.failproofai/hook.log
|
|
|
272
272
|
// my-policies.js
|
|
273
273
|
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
274
274
|
|
|
275
|
-
// Verhindert, dass der Agent in das
|
|
275
|
+
// Verhindert, dass der Agent in das Verzeichnis secrets/ schreibt
|
|
276
276
|
customPolicies.add({
|
|
277
277
|
name: "block-secrets-dir",
|
|
278
278
|
description: "Prevent agent from writing to secrets/ directory",
|
|
@@ -300,7 +300,7 @@ customPolicies.add({
|
|
|
300
300
|
},
|
|
301
301
|
});
|
|
302
302
|
|
|
303
|
-
// Verhindert ungeplante Abhängigkeitsänderungen während
|
|
303
|
+
// Verhindert ungeplante Abhängigkeitsänderungen während eines Freeze
|
|
304
304
|
customPolicies.add({
|
|
305
305
|
name: "dependency-freeze",
|
|
306
306
|
description: "Prevent unplanned dependency changes during freeze period",
|
|
@@ -323,14 +323,14 @@ export { customPolicies };
|
|
|
323
323
|
|
|
324
324
|
## Beispiele
|
|
325
325
|
|
|
326
|
-
Das Verzeichnis `examples/` enthält
|
|
326
|
+
Das Verzeichnis `examples/` enthält fertige Richtliniendateien:
|
|
327
327
|
|
|
328
328
|
| Datei | Inhalt |
|
|
329
329
|
|-------|--------|
|
|
330
|
-
| `examples/policies-basic.js` | Fünf
|
|
331
|
-
| `examples/policies-advanced/index.js` | Fortgeschrittene Muster: transitive
|
|
332
|
-
| `examples/convention-policies/security-policies.mjs` | Konventionsbasierte Sicherheitsrichtlinien (blockiert .env-Schreibzugriffe, verhindert Umschreiben der Git-Historie) |
|
|
333
|
-
| `examples/convention-policies/workflow-policies.mjs` | Konventionsbasierte Workflow-Richtlinien (Test-Erinnerungen, Protokollierung von
|
|
330
|
+
| `examples/policies-basic.js` | Fünf Einstiegsrichtlinien für häufige Agenten-Fehlerszenarien |
|
|
331
|
+
| `examples/policies-advanced/index.js` | Fortgeschrittene Muster: transitive Imports, asynchrone Aufrufe, Ausgabebereinigung und Sitzungsende-Hooks |
|
|
332
|
+
| `examples/convention-policies/security-policies.mjs` | Konventionsbasierte Sicherheitsrichtlinien (blockiert .env-Schreibzugriffe, verhindert das Umschreiben der Git-Historie) |
|
|
333
|
+
| `examples/convention-policies/workflow-policies.mjs` | Konventionsbasierte Workflow-Richtlinien (Test-Erinnerungen, Protokollierung von Dateiänderungen) |
|
|
334
334
|
|
|
335
335
|
### Explizite Dateibeispiele verwenden
|
|
336
336
|
|
|
@@ -4,13 +4,13 @@ description: "So richten Sie Hooks für Claude Code und das Agents SDK ein"
|
|
|
4
4
|
icon: book-open
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Sofort
|
|
7
|
+
Sofort verwendbare Beispiele für häufige Szenarien. Jedes zeigt, wie man es installiert und was zu erwarten ist.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## Hooks für Claude Code einrichten
|
|
12
12
|
|
|
13
|
-
Failproof AI integriert sich mit Claude Code über dessen [Hooks-System](https://docs.anthropic.com/en/docs/claude-code/hooks). Wenn Sie `failproofai policies --install` ausführen,
|
|
13
|
+
Failproof AI integriert sich mit Claude Code über dessen [Hooks-System](https://docs.anthropic.com/en/docs/claude-code/hooks). Wenn Sie `failproofai policies --install` ausführen, registriert es Hook-Befehle in der `settings.json` von Claude Code, die bei jedem Tool-Aufruf ausgelöst werden.
|
|
14
14
|
|
|
15
15
|
<Steps>
|
|
16
16
|
<Step title="failproofai installieren">
|
|
@@ -28,14 +28,14 @@ Failproof AI integriert sich mit Claude Code über dessen [Hooks-System](https:/
|
|
|
28
28
|
cat ~/.claude/settings.json | grep failproofai
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
Sie sollten Hook-Einträge für `PreToolUse
|
|
31
|
+
Sie sollten Hook-Einträge für `PreToolUse`, `PostToolUse`, `Notification` und `Stop`-Ereignisse sehen.
|
|
32
32
|
</Step>
|
|
33
33
|
<Step title="Claude Code starten">
|
|
34
34
|
```bash
|
|
35
35
|
claude
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Richtlinien werden
|
|
38
|
+
Richtlinien werden jetzt automatisch bei jedem Tool-Aufruf ausgeführt. Bitten Sie Claude, `sudo rm -rf /` auszuführen – es wird blockiert.
|
|
39
39
|
</Step>
|
|
40
40
|
</Steps>
|
|
41
41
|
|
|
@@ -43,7 +43,7 @@ Failproof AI integriert sich mit Claude Code über dessen [Hooks-System](https:/
|
|
|
43
43
|
|
|
44
44
|
## Hooks für das Agents SDK einrichten
|
|
45
45
|
|
|
46
|
-
Wenn Sie mit dem [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk) entwickeln, können Sie dasselbe Hook-System
|
|
46
|
+
Wenn Sie mit dem [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk) entwickeln, können Sie dasselbe Hook-System programmatisch verwenden.
|
|
47
47
|
|
|
48
48
|
<Steps>
|
|
49
49
|
<Step title="failproofai in Ihrem Projekt installieren">
|
|
@@ -52,7 +52,7 @@ Wenn Sie mit dem [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk) ent
|
|
|
52
52
|
```
|
|
53
53
|
</Step>
|
|
54
54
|
<Step title="Hooks in Ihrem Agenten konfigurieren">
|
|
55
|
-
Übergeben Sie Hook-Befehle beim Erstellen Ihres Agentenprozesses. Die Hooks werden genauso wie in Claude Code
|
|
55
|
+
Übergeben Sie Hook-Befehle beim Erstellen Ihres Agentenprozesses. Die Hooks werden genauso ausgelöst wie in Claude Code – über stdin/stdout JSON:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
failproofai --hook PreToolUse # wird vor jedem Tool aufgerufen
|
|
@@ -104,19 +104,19 @@ Was dies bewirkt:
|
|
|
104
104
|
|
|
105
105
|
## Geheimnis-Leaks verhindern
|
|
106
106
|
|
|
107
|
-
Verhindert, dass Agenten
|
|
107
|
+
Verhindert, dass Agenten Anmeldeinformationen in der Tool-Ausgabe sehen oder weitergeben.
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
110
|
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
Diese
|
|
113
|
+
Diese werden bei `PostToolUse` ausgelöst – nachdem ein Tool ausgeführt wurde, bereinigen sie die Ausgabe, bevor der Agent sie sieht.
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
117
117
|
## Slack-Benachrichtigungen erhalten, wenn Agenten Aufmerksamkeit benötigen
|
|
118
118
|
|
|
119
|
-
Verwenden Sie den
|
|
119
|
+
Verwenden Sie den Benachrichtigungs-Hook, um Leerlauf-Warnungen an Slack weiterzuleiten.
|
|
120
120
|
|
|
121
121
|
```javascript
|
|
122
122
|
import { customPolicies, allow, instruct } from "failproofai";
|
|
@@ -150,7 +150,7 @@ customPolicies.add({
|
|
|
150
150
|
});
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
Installieren:
|
|
154
154
|
|
|
155
155
|
```bash
|
|
156
156
|
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js
|
|
@@ -160,7 +160,7 @@ SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --c
|
|
|
160
160
|
|
|
161
161
|
## Agenten auf einem Branch halten
|
|
162
162
|
|
|
163
|
-
Verhindert, dass Agenten Branches wechseln oder
|
|
163
|
+
Verhindert, dass Agenten Branches wechseln oder auf geschützte Branches pushen.
|
|
164
164
|
|
|
165
165
|
```javascript
|
|
166
166
|
import { customPolicies, allow, deny } from "failproofai";
|
|
@@ -182,7 +182,7 @@ customPolicies.add({
|
|
|
182
182
|
|
|
183
183
|
---
|
|
184
184
|
|
|
185
|
-
## Tests vor Commits
|
|
185
|
+
## Tests vor Commits voraussetzen
|
|
186
186
|
|
|
187
187
|
Erinnert Agenten daran, vor dem Committen Tests auszuführen.
|
|
188
188
|
|
|
@@ -231,7 +231,7 @@ Erstellen Sie `.failproofai/policies-config.json` in Ihrem Repository:
|
|
|
231
231
|
}
|
|
232
232
|
```
|
|
233
233
|
|
|
234
|
-
Dann committen
|
|
234
|
+
Dann committen:
|
|
235
235
|
|
|
236
236
|
```bash
|
|
237
237
|
git add .failproofai/policies-config.json
|
|
@@ -242,12 +242,66 @@ Jedes Teammitglied, das failproofai installiert hat, übernimmt diese Regeln aut
|
|
|
242
242
|
|
|
243
243
|
---
|
|
244
244
|
|
|
245
|
+
## Einen organisationsweiten Qualitätsstandard mit Convention-Richtlinien aufbauen
|
|
246
|
+
|
|
247
|
+
Das wirkungsvollste Setup: Committen Sie `.failproofai/policies/` in Ihr Repository mit auf Ihr Projekt zugeschnittenen Richtlinien. Jedes Teammitglied erhält sie automatisch – keine Installationsbefehle, keine Konfigurationsänderungen.
|
|
248
|
+
|
|
249
|
+
<Steps>
|
|
250
|
+
<Step title="Verzeichnis erstellen und Richtlinien hinzufügen">
|
|
251
|
+
```bash
|
|
252
|
+
mkdir -p .failproofai/policies
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
```js
|
|
256
|
+
// .failproofai/policies/team-policies.mjs
|
|
257
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
258
|
+
|
|
259
|
+
// Bevorzugten Paketmanager Ihres Teams durchsetzen
|
|
260
|
+
// (oder stattdessen die integrierte prefer-package-manager-Richtlinie aktivieren)
|
|
261
|
+
customPolicies.add({
|
|
262
|
+
name: "enforce-bun",
|
|
263
|
+
match: { events: ["PreToolUse"] },
|
|
264
|
+
fn: async (ctx) => {
|
|
265
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
266
|
+
const cmd = String(ctx.toolInput?.command ?? "");
|
|
267
|
+
if (/\bnpm\b/.test(cmd)) return deny("Use bun instead of npm.");
|
|
268
|
+
return allow();
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Den Agenten daran erinnern, vor dem Committen Tests auszuführen
|
|
273
|
+
customPolicies.add({
|
|
274
|
+
name: "test-before-commit",
|
|
275
|
+
match: { events: ["PreToolUse"] },
|
|
276
|
+
fn: async (ctx) => {
|
|
277
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
278
|
+
if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
|
|
279
|
+
return instruct("Run tests before committing.");
|
|
280
|
+
}
|
|
281
|
+
return allow();
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
```
|
|
285
|
+
</Step>
|
|
286
|
+
<Step title="In Git committen">
|
|
287
|
+
```bash
|
|
288
|
+
git add .failproofai/policies/
|
|
289
|
+
git commit -m "Add team quality policies"
|
|
290
|
+
```
|
|
291
|
+
</Step>
|
|
292
|
+
<Step title="Kontinuierlich verbessern">
|
|
293
|
+
Wenn Ihr Team auf neue Fehlerquellen stößt, fügen Sie Richtlinien hinzu und pushen Sie. Jeder erhält die Aktualisierung beim nächsten `git pull`. Diese Richtlinien werden zu einem lebendigen Qualitätsstandard, der mit Ihrem Team wächst.
|
|
294
|
+
</Step>
|
|
295
|
+
</Steps>
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
245
299
|
## Weitere Beispiele
|
|
246
300
|
|
|
247
301
|
Das Verzeichnis [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) im Repository enthält:
|
|
248
302
|
|
|
249
|
-
| Datei |
|
|
250
|
-
|
|
251
|
-
| `policies-basic.js` |
|
|
252
|
-
| `policies-notification.js` | Slack-Benachrichtigungen
|
|
253
|
-
| `policies-advanced/index.js` | Transitive Imports, asynchrone Hooks, PostToolUse-Ausgabebereinigung, Stop-
|
|
303
|
+
| Datei | Was es zeigt |
|
|
304
|
+
|-------|--------------|
|
|
305
|
+
| `policies-basic.js` | Einstiegsrichtlinien – Schreibzugriffe auf Produktion, Force-Push und Piped-Skripte blockieren |
|
|
306
|
+
| `policies-notification.js` | Slack-Benachrichtigungen für Leerlauf-Meldungen und Sitzungsende |
|
|
307
|
+
| `policies-advanced/index.js` | Transitive Imports, asynchrone Hooks, PostToolUse-Ausgabebereinigung, Stop-Event-Behandlung |
|
|
@@ -7,7 +7,7 @@ icon: rocket
|
|
|
7
7
|
## Voraussetzungen
|
|
8
8
|
|
|
9
9
|
- **Node.js** >= 20.9.0
|
|
10
|
-
- **Bun** >= 1.3.0 (optional –
|
|
10
|
+
- **Bun** >= 1.3.0 (optional – nur für das Erstellen aus dem Quellcode erforderlich)
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -31,13 +31,13 @@ bun add -g failproofai
|
|
|
31
31
|
|
|
32
32
|
<Steps>
|
|
33
33
|
<Step title="Policies aktivieren">
|
|
34
|
-
Policies sind Regeln, die vor und nach jedem
|
|
34
|
+
Policies sind Regeln, die vor und nach jedem Werkzeugaufruf eines Agenten ausgeführt werden. Sie erkennen destruktive Befehle, das Durchsickern von Geheimnissen und andere Fehlerquellen, bevor Schaden entsteht.
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
failproofai policies --install
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Dadurch werden Hook-Einträge in die `settings.json` von Claude Code geschrieben.
|
|
40
|
+
Dadurch werden Hook-Einträge in die `settings.json` von Claude Code geschrieben. Sie können auch für ein einzelnes Projekt installieren oder bestimmte Policies auswählen:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
failproofai policies --install --scope project
|
|
@@ -51,23 +51,23 @@ bun add -g failproofai
|
|
|
51
51
|
|
|
52
52
|
Zeigt alle Policies an, ob sie aktiviert sind und welche Parameter konfiguriert wurden.
|
|
53
53
|
</Step>
|
|
54
|
-
<Step title="Dashboard
|
|
54
|
+
<Step title="Dashboard starten">
|
|
55
55
|
```bash
|
|
56
56
|
failproofai
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Öffnet ein lokales Dashboard unter `http://localhost:8020`, in dem
|
|
59
|
+
Öffnet ein lokales Dashboard unter `http://localhost:8020`, in dem Sie Sitzungen durchsuchen, Werkzeugaufrufe untersuchen und Policies verwalten können.
|
|
60
60
|
</Step>
|
|
61
|
-
<Step title="Agenten
|
|
62
|
-
Claude Code wie gewohnt
|
|
61
|
+
<Step title="Agenten ausführen">
|
|
62
|
+
Starten Sie Claude Code wie gewohnt. Wenn der Agent etwas Riskantes versucht, greift failproofai automatisch ein. Lassen Sie ihn unbeaufsichtigt laufen und überprüfen Sie anschließend im Dashboard, was passiert ist.
|
|
63
63
|
</Step>
|
|
64
64
|
</Steps>
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
68
|
-
##
|
|
68
|
+
## Wie Policies funktionieren
|
|
69
69
|
|
|
70
|
-
Jedes Mal, wenn ein Agent ein
|
|
70
|
+
Jedes Mal, wenn ein Agent ein Werkzeug ausführt, ruft Claude Code failproofai als Subprozess auf:
|
|
71
71
|
|
|
72
72
|
```text
|
|
73
73
|
Claude Code → failproofai --hook PreToolUse → reads stdin JSON
|
|
@@ -78,26 +78,78 @@ Claude Code → failproofai --hook PreToolUse → reads stdin JSON
|
|
|
78
78
|
Jede Policy gibt eine von drei Entscheidungen zurück:
|
|
79
79
|
|
|
80
80
|
- **allow** – der Agent fährt normal fort
|
|
81
|
-
- **deny** – die Aktion wird blockiert
|
|
82
|
-
- **instruct** – dem Prompt des Agenten
|
|
81
|
+
- **deny** – die Aktion wird blockiert und dem Agenten wird der Grund mitgeteilt
|
|
82
|
+
- **instruct** – dem Prompt des Agenten werden zusätzliche Informationen hinzugefügt
|
|
83
83
|
|
|
84
84
|
<Note>
|
|
85
|
-
Policies laufen
|
|
85
|
+
Policies laufen in Ihrem lokalen Prozess. Es werden keine Daten an einen externen Dienst übertragen.
|
|
86
86
|
</Note>
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
90
|
+
## Team-Policies mit konventionsbasierten Policies einrichten
|
|
91
|
+
|
|
92
|
+
Der schnellste Weg, Qualitätsstandards im gesamten Team zu etablieren, ist die `.failproofai/policies/`-Konvention. Legen Sie Policy-Dateien in dieses Verzeichnis ab und sie werden automatisch geladen – ohne Flags, ohne Konfigurationsänderungen, ohne Installationsbefehle.
|
|
93
|
+
|
|
94
|
+
<Steps>
|
|
95
|
+
<Step title="Policies-Verzeichnis erstellen">
|
|
96
|
+
```bash
|
|
97
|
+
mkdir -p .failproofai/policies
|
|
98
|
+
```
|
|
99
|
+
</Step>
|
|
100
|
+
<Step title="Policy-Dateien hinzufügen">
|
|
101
|
+
Kopieren Sie die Starter-Beispiele oder schreiben Sie Ihre eigenen:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cp node_modules/failproofai/examples/convention-policies/*.mjs .failproofai/policies/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Oder erstellen Sie eine neue:
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
// .failproofai/policies/team-policies.mjs
|
|
111
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
112
|
+
|
|
113
|
+
customPolicies.add({
|
|
114
|
+
name: "test-before-commit",
|
|
115
|
+
match: { events: ["PreToolUse"] },
|
|
116
|
+
fn: async (ctx) => {
|
|
117
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
118
|
+
if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
|
|
119
|
+
return instruct("Run tests before committing.");
|
|
120
|
+
}
|
|
121
|
+
return allow();
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
</Step>
|
|
126
|
+
<Step title="In Git einchecken">
|
|
127
|
+
```bash
|
|
128
|
+
git add .failproofai/policies/
|
|
129
|
+
git commit -m "Add team quality policies"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Jedes Teammitglied, das failproofai installiert hat, übernimmt diese Policies automatisch. Es ist keine individuelle Einrichtung pro Entwickler erforderlich.
|
|
133
|
+
</Step>
|
|
134
|
+
</Steps>
|
|
135
|
+
|
|
136
|
+
<Tip>
|
|
137
|
+
Checken Sie `.failproofai/policies/` in Ihr Repository ein, damit das gesamte Team dieselben Standards teilt. Sobald Ihr Team neue Fehlerquellen entdeckt, fügen Sie Policies hinzu und pushen Sie – alle erhalten die Aktualisierung beim nächsten `git pull`. Mit der Zeit werden diese Policies zu einem lebendigen Qualitätsstandard, der sich kontinuierlich verbessert.
|
|
138
|
+
</Tip>
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
90
142
|
## Datenspeicherung
|
|
91
143
|
|
|
92
|
-
Alle Konfigurationen und
|
|
144
|
+
Alle Konfigurationen und Protokolle verbleiben auf Ihrem Rechner:
|
|
93
145
|
|
|
94
|
-
| Pfad |
|
|
95
|
-
|
|
146
|
+
| Pfad | Gespeicherte Inhalte |
|
|
147
|
+
|------|----------------------|
|
|
96
148
|
| `~/.failproofai/policies-config.json` | Globale Policy-Konfiguration |
|
|
97
|
-
| `~/.failproofai/hook-activity.jsonl` | Hook-
|
|
98
|
-
| `~/.failproofai/hook.log` | Debug-
|
|
99
|
-
| `.failproofai/policies-config.json` | Projektspezifische Konfiguration (
|
|
100
|
-
| `.failproofai/policies-config.local.json` | Persönliche Überschreibungen (
|
|
149
|
+
| `~/.failproofai/hook-activity.jsonl` | Hook-Ausführungsverlauf |
|
|
150
|
+
| `~/.failproofai/hook.log` | Debug-Protokoll für benutzerdefinierte Hook-Fehler |
|
|
151
|
+
| `.failproofai/policies-config.json` | Projektspezifische Konfiguration (eingecheckt) |
|
|
152
|
+
| `.failproofai/policies-config.local.json` | Persönliche Überschreibungen (per gitignore ausgeschlossen) |
|
|
101
153
|
|
|
102
154
|
---
|
|
103
155
|
|
|
@@ -128,7 +180,7 @@ Entfernt Hook-Einträge aus `~/.claude/settings.json`. Konfigurationsdateien in
|
|
|
128
180
|
</Card>
|
|
129
181
|
|
|
130
182
|
<Card title="Agenten-Monitor" icon="chart-line" href="/de/dashboard">
|
|
131
|
-
|
|
183
|
+
Sitzungen überwachen und Policy-Aktivität einsehen
|
|
132
184
|
</Card>
|
|
133
185
|
|
|
134
186
|
</CardGroup>
|