From be3f41b59b658f445d5222bcd0605ae7fd731f41 Mon Sep 17 00:00:00 2001 From: chhhee10 Date: Tue, 8 Sep 2026 18:47:56 +0530 Subject: [PATCH 1/8] Fix the commands and claims the docs revert left behind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #773 restored docs/ and README.md byte-for-byte to the pre-#756 commit, which was the right call for positioning and the wrong one for accuracy: that text describes a CLI two minor versions old. Three commands in it do not run at all, one sets a machine up wrong, and two claims the code contradicts. Verified against the shipped 1.0.4-beta.0 binary, not against memory: failproofai pack add core refused — "core" is no longer a pack name failproofai pack add --bundled unknown flag failproofai pack build retired into `publish` The worst one still exits 0. `failproofai config --connect --token ` was taught as first-machine setup in six pages, but `--connect` short-circuits to enrolment and RETURNS (bin/failproofai.mjs:2181) — the wizard never runs, so no daemon and no hooks. Anyone who followed the quickstart got a machine that appeared in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through FAILPROOFAI_CLOUD_TOKEN rather than argv, where ps, shell history and CI logs can all read it. Both of hermes-exosphere's blocking findings on #773: - "39 built-in policies activate immediately" (README:143) is false. `--install` with no names wires hooks and touches no policy (manager.ts:614), 1 of 39 is alwaysOn, and setup says so itself when it finishes: "Nothing is enforcing yet." The README and quickstart now carry the `policies add FailproofAI/policies` step that actually guards a machine, and document `block-failproofai-commands` separately as the one thing enforcing before it runs. - "Same events, same policies" across twelve harnesses (README:34) is what enforcement-capability.ts exists to prevent. Pre-tool blocking is verified on all twelve; turn-end gates on eight — OpenCode, Pi, Hermes and Goose have none, so a Stop policy deployed on that sentence enforced nothing. #773 removed the claim from docs/index.mdx and left the README. The advisory finding was worse than advisory. 102 pages across seven locales opened with two consecutive `---`, so Mintlify closed the frontmatter before any key was in it: docs.befailproof.ai/ar/policies/overview was rendering raw `title:` / `description:` / `icon:` as body text, on a page with no title. Stripped — and findTranslationError gained the check that could not have caught it, because every check there asks YAML.parse, which reads a leading `---` as a document-start marker and returns a clean {title, …}. A second Mintlify-shaped view of the block is now compared against it, with tests that fail without it. Also found while checking: `--machine-label` on `config` is always a rename (the branch fires whenever --connect and --disconnect are absent), so `config --token --machine-label ` never reaches the wizard — the docs now put the label after setup, not during. `sanitize-api-keys` is out of the README's "What it stops" table: it matches PostToolUse, which ENFORCEMENT_CAPABILITY classes observe-only, so it reports a secret rather than keeping one out of the context (#669, still open). And docs/start/integrations was linked from two pages but listed in no sidebar, in English and all 14 locales; nav and disk now agree exactly at 1020 each. English sources only — the nightly translate job regenerates the locales from them, as it did in #774. The 102 frontmatter fixes are direct because their English sources are unchanged and the job would not revisit them. Verified: validate:mdx 1034 pages clean, tsc --noEmit clean, lint 0 errors (5 pre-existing warnings), translate-docs suite 154 passed. --- CHANGELOG.md | 9 ++ README.md | 32 +++-- .../validate-translation.test.ts | 25 ++++ docs/ar/admin/keys-and-permissions.mdx | 1 - docs/ar/admin/overview.mdx | 1 - docs/ar/admin/usage.mdx | 1 - docs/ar/audits/agent-contracts.mdx | 1 - docs/ar/audits/alerts.mdx | 1 - docs/ar/audits/cadence.mdx | 1 - docs/ar/audits/findings-and-issues.mdx | 1 - docs/ar/audits/recipes.mdx | 1 - docs/ar/audits/run.mdx | 1 - docs/ar/index.mdx | 1 - docs/ar/policies/custom.mdx | 1 - docs/ar/policies/deploy.mdx | 1 - docs/ar/policies/editor.mdx | 1 - docs/ar/policies/failure-behavior.mdx | 1 - docs/ar/policies/fleet.mdx | 1 - docs/ar/policies/local-configuration.mdx | 1 - docs/ar/policies/overview.mdx | 1 - docs/ar/policies/publish-a-pack.mdx | 1 - docs/ar/policies/rollback.mdx | 1 - docs/ar/reference/cloud-cli.mdx | 1 - docs/ar/reference/evaluator-sdk.mdx | 1 - docs/ar/reference/failproof-cli.mdx | 1 - docs/ar/reference/policy-sdk.mdx | 1 - docs/ar/sessions/assistant.mdx | 1 - docs/ar/sessions/dashboards.mdx | 1 - docs/ar/sessions/errors.mdx | 1 - docs/ar/sessions/evaluations.mdx | 1 - docs/ar/sessions/live-events.mdx | 1 - docs/ar/sessions/models.mdx | 1 - docs/ar/sessions/overview.mdx | 1 - docs/ar/sessions/policy-decisions.mdx | 1 - docs/ar/sessions/read-a-trace.mdx | 1 - docs/ar/start/first-policy.mdx | 1 - docs/ar/start/integrations.mdx | 1 - docs/ar/start/integrations/crewai.mdx | 1 - docs/ar/start/integrations/langchain.mdx | 1 - docs/ar/start/quickstart.mdx | 1 - docs/ar/start/quickstarts/crewai.mdx | 1 - docs/ar/start/quickstarts/custom-agents.mdx | 1 - docs/ar/start/quickstarts/langchain.mdx | 1 - docs/docs.json | 15 +++ docs/he/admin/overview.mdx | 1 - docs/he/audits/agent-contracts.mdx | 1 - docs/he/audits/local-audit.mdx | 1 - docs/he/audits/overview.mdx | 1 - docs/he/audits/recipes.mdx | 1 - docs/he/index.mdx | 1 - docs/he/policies/custom.mdx | 1 - docs/he/reference/self-hosting.mdx | 1 - docs/he/sessions/evaluations.mdx | 1 - docs/he/sessions/live-events.mdx | 1 - docs/he/sessions/models.mdx | 1 - docs/he/start/integrations.mdx | 1 - docs/he/start/integrations/crewai.mdx | 1 - docs/he/start/integrations/llamaindex.mdx | 1 - docs/he/start/integrations/pydantic-ai.mdx | 1 - docs/hi/admin/keys-and-permissions.mdx | 1 - docs/hi/policies/custom.mdx | 1 - docs/hi/policies/failure-behavior.mdx | 1 - docs/hi/reference/local-dashboard.mdx | 1 - docs/hi/sessions/evaluations.mdx | 1 - docs/hi/start/integrations.mdx | 1 - docs/hi/start/integrations/crewai.mdx | 1 - docs/it/admin/overview.mdx | 1 - docs/it/audits/agent-contracts.mdx | 1 - docs/it/policies/local-configuration.mdx | 1 - docs/it/reference/evaluator-sdk.mdx | 1 - docs/it/reference/harnesses.mdx | 1 - docs/it/reference/local-dashboard.mdx | 1 - docs/it/sessions/assistant.mdx | 1 - docs/it/sessions/queries.mdx | 1 - docs/it/start/quickstarts/langchain.mdx | 1 - docs/policies/failure-behavior.mdx | 6 +- docs/policies/packs.mdx | 45 ++++--- docs/policies/publish-a-pack.mdx | 117 ++++++++++++------ docs/reference/custom-agents.mdx | 4 +- docs/reference/failproof-cli.mdx | 51 +++++--- docs/reference/harnesses.mdx | 10 +- docs/reference/overview.mdx | 4 +- docs/ru/audits/recipes.mdx | 1 - docs/ru/audits/setup.mdx | 1 - docs/ru/policies/publish-a-pack.mdx | 1 - docs/ru/sessions/assistant.mdx | 1 - docs/ru/start/integrations/crewai.mdx | 1 - docs/start/quickstart.mdx | 25 +++- docs/start/setup.mdx | 18 ++- docs/tr/admin/keys-and-permissions.mdx | 1 - docs/tr/admin/usage.mdx | 1 - docs/tr/admin/users-and-organizations.mdx | 1 - docs/tr/audits/alerts.mdx | 1 - docs/tr/audits/overview.mdx | 1 - docs/tr/audits/recipes.mdx | 1 - docs/tr/policies/builtin-catalog.mdx | 1 - docs/tr/reference/cloud-cli.mdx | 1 - docs/tr/reference/evaluator-sdk.mdx | 1 - docs/tr/reference/harnesses.mdx | 1 - docs/tr/reference/policy-sdk.mdx | 1 - docs/tr/reference/troubleshooting.mdx | 1 - docs/tr/sessions/overview.mdx | 1 - docs/tr/sessions/policy-decisions.mdx | 1 - docs/tr/start/concepts.mdx | 1 - docs/tr/start/quickstarts/langchain.mdx | 1 - docs/vi/admin/settings-and-security.mdx | 1 - docs/vi/audits/agent-contracts.mdx | 1 - docs/vi/audits/local-audit.mdx | 1 - docs/vi/audits/run.mdx | 1 - docs/vi/audits/setup.mdx | 1 - docs/vi/index.mdx | 1 - docs/vi/policies/failure-behavior.mdx | 1 - docs/vi/sessions/evaluations.mdx | 1 - docs/vi/start/integrations.mdx | 1 - docs/vi/start/setup.mdx | 1 - .../translate-docs/validate-translation.ts | 44 +++++++ 116 files changed, 301 insertions(+), 206 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9282faee5..debb238db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,15 @@ - The 1.0.2 documentation overhaul is reverted: `docs/` and `README.md` go back byte-for-byte to the commit #756 merged onto, along with the 14 generated locales and 14 translated READMEs #759 regenerated from those English sources. The release half of #756 stays — `package.json` and the Cargo workspace are untouched, since they have moved on to 1.0.4-beta.0 and the release tag the CLI builds its daemon download URL from is that npm version. Under `## 1.0.2` the heading and its release narrative stay, because 1.0.2 did ship; the `### Docs` entries underneath described the overhaul and go with it. Leaving the locales in place was the alternative considered and rejected: the nightly translate job is content-hash cached, so pages whose pre-overhaul English hashes it had already seen would have been skipped rather than repaired, stranding every non-English reader on a translation of text that no longer exists (#773) - The landing page no longer opens with the harness paragraph claiming that "the same events, the same policies, and the same session history apply to every one" of the twelve. Removed from `docs/index.mdx` and all 14 locales (#773) +- The commands the reverted docs teach are checked against the shipped CLI again, and three of them did not run at all: `failproofai pack add core` is refused (`"core" is no longer a pack name` — ours is a pack like anyone else's now), `failproofai pack add --bundled` is an unknown flag, and `pack build` retired into `publish`. `packs.mdx`, `publish-a-pack.mdx`, `failure-behavior.mdx` and `reference/failproof-cli.mdx` are corrected; `policy`, `pack` and `p` remain working aliases for `policies` and are documented as such rather than silently relied on (#PR) +- `failproofai config --connect --token ` is no longer taught as the way to set a machine up. `--connect` short-circuits to enrolment and **returns** — no daemon, no hooks — so anyone who followed the quickstart got a machine that showed up in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through `FAILPROOFAI_CLOUD_TOKEN` rather than argv, where `ps`, shell history and CI logs can all read it. Corrected in `start/quickstart.mdx`, `start/setup.mdx`, `reference/failproof-cli.mdx`, `reference/harnesses.mdx`, `reference/custom-agents.mdx` and `reference/overview.mdx` (#PR) +- Nothing claims that installing hooks enables the policy catalog any more. `policies --install` with no names wires hooks and touches no policy, and setup says so itself when it finishes ("Nothing is enforcing yet"), so `README.md` and `start/quickstart.mdx` now carry the `failproofai policies add FailproofAI/policies` step that actually puts guardrails on a machine — 38 policies, of which the pack's manifest switches on 10. The always-on `block-failproofai-commands` guard is documented separately, as the one thing enforcing before that command runs (#PR) +- The README's harness paragraph no longer promises "same events, same policies" across all twelve. `src/hooks/enforcement-capability.ts` is the authority and disagrees: blocking a tool call before it runs is verified on all twelve, but turn-end gates on eight — OpenCode, Pi, Hermes and Goose have none — so a Stop policy deployed on the strength of that sentence enforced nothing. It now states what is shared (one policy API, one session history), what is not, and links the per-harness matrix. `docs/index.mdx` lost the same sentence in #773; the README kept it (#PR) +- `--machine-label` is documented in the order it actually works. On `config` it is *always* a rename — the branch that reads it fires whenever `--connect` and `--disconnect` are absent, so `failproofai config --token --machine-label ` never reaches the wizard and answers "this machine is not connected … so it has no name to change". Setup comes first, the label after (#PR) +- `sanitize-api-keys` is out of the README's "What it stops" table. It matches `PostToolUse`, which `ENFORCEMENT_CAPABILITY` classes observe-only, so the tool has already run and its output has already reached the model: it reports a secret rather than keeping one out of the context (#669). The nine policies left in that table are all `PreToolUse` and do gate the call, on every harness (#PR) +- 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it (#PR) +- `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly: 1020 entries, 1020 files, nothing orphaned and nothing dangling (#PR) + ### Dependencies - The `sharp` override moves 0.35.0 → 0.35.4, closing GHSA-rgj7-g3m4-5g8c (CVSS 8.9 — two Critical libheif RCEs inherited through libvips, reachable when processing untrusted input). Same surface-late shape as browserslist above and the chromadb entries: the advisory published 2026-09-08 21:25 UTC, between main's green Supply Chain run at 14:18 and its red one the next morning, so it turned every open branch red without any dependency change of its own — reproduced identically by running CI's scanner image against main's untouched lockfile. It stays an override rather than becoming a direct dependency because sharp is still only an optional dependency of next; what changed since #591 pinned it is the direction of the constraint. That pin was needed because next asked for `^0.34.5`, a range that excluded the then-fixed 0.35.0 — next 16.3.4 now asks for `^0.35.4`, so the pin had inverted into the thing holding the tree *below* what its dependent wants. Verified past a green lockfile the same way #591 did: sharp 0.35.4 loads against libvips 8.18.6 (`@img/sharp-libvips-*` 1.3.0 → 1.3.3) and round-trips a PNG encode; the scanner image reports "No issues found" (exit 0) with `osv-scanner.toml` gaining no new entry (#790) diff --git a/README.md b/README.md index 636d2666b..9b396f776 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,11 @@ tool calls before they execute. 39 built-in policies. Zero latency. Runs locally ## Supported harnesses Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant -gateways (Hermes, OpenClaw). Same events, same policies, same session history, -whichever one your agent runs in. +gateways (Hermes, OpenClaw). One policy API and one session history across all +of them. What a policy can *block* is per-harness: stopping a tool call before +it runs is verified on all twelve, turn-end gates on eight. The +[per-harness matrix](https://docs.befailproof.ai/reference/harnesses#enforcement-capability) +lists the events each one honours. Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/custom-agents), which gives you tracing, sessions and audits. Enforcement there needs a hook in @@ -136,11 +139,22 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i ```sh npm install -g failproofai -failproofai policies --install # or just run `failproofai` and accept the first-run prompt -failproofai +failproofai config # wire up your agents and the daemon +failproofai policies add FailproofAI/policies # choose what to enforce +failproofai # dashboard on localhost:8020 ``` -39 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`. +Setup wires the hooks and picks **no** policies — that second command is what +puts guardrails on the machine, and any pack is typed the same way +(`failproofai policies add /`; `policies show /` reads +one first). Run `failproofai config` with no terminal — CI, a container, an +agent driving it — and it applies rather than asking. On a machine that has +never been set up, any other command runs the same wizard first; disable that +with `FAILPROOFAI_NO_FIRST_RUN=1`. + +Until a pack arrives, the only thing enforcing is `block-failproofai-commands`, +which is always on and cannot be switched off or paused: an agent that can pause +enforcement can switch off every other policy. --- @@ -148,7 +162,6 @@ failproofai | Policy | What it blocks | |---|---| -| `sanitize-api-keys` | API keys leaking into the agent's context | | `block-env-files` | Reads of `.env` and other secret files | | `warn-repeated-tool-calls` | The agent looping on the same call | | `block-sudo` | Privilege escalation | @@ -157,8 +170,11 @@ failproofai | `block-rm-rf` | Recursive file deletion | | `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` | -The first five apply to any agent that can call a tool. The last three are the -developer favourites — coding CLIs are the harness class we cover deepest. +Every one of these gates the call *before* it runs, so they hold on all twelve +harnesses. The first four apply to any agent that can call a tool; the last +three are the developer favourites — coding CLIs are the harness class we cover +deepest. The `sanitize-*` family is separate: it runs after a tool returns, so +it reports a secret in tool output rather than keeping it out of the context. → [All 39 built-in policies](https://docs.befailproof.ai/policies/builtin) diff --git a/__tests__/scripts/translate-docs/validate-translation.test.ts b/__tests__/scripts/translate-docs/validate-translation.test.ts index 97d4eb43e..05f600b74 100644 --- a/__tests__/scripts/translate-docs/validate-translation.test.ts +++ b/__tests__/scripts/translate-docs/validate-translation.test.ts @@ -23,6 +23,31 @@ describe("findTranslationError", () => { expect(error).toMatch(/does not parse/); }); + it("flags a stray second opening delimiter", async () => { + // The exact shape that shipped to 102 published pages across seven locales. + // Every check that asks YAML calls this clean — YAML reads the leading + // `---` as a document-start marker and returns `{title, description}` — but + // Mintlify closes the block on line 2, so the keys render as body text and + // the page has no title at all. Only the second, Mintlify-shaped view sees + // it, which is the whole reason that view exists. + const rendered = `---\n---\ntitle: "Fähigkeit"\ndescription: "Eine Seite"\n---\n\n# Körper\n`; + const error = await findTranslationError(rendered, SOURCE); + expect(error).not.toBeNull(); + expect(error).toContain("empty"); + // Says what to do, not just what is wrong — the message is read by a model + // that has to produce a corrected page on the retry. + expect(error).toContain("exactly one opening `---`"); + }); + + it("flags a stray second opening delimiter on a frontmatter-less source", async () => { + // Nothing about the defect depends on the source having frontmatter: the + // page is equally broken either way, so the check runs for every shape. + const rendered = `---\n---\ntitle: "Titel"\n---\n\nEtwas Prosa.\n`; + const error = await findTranslationError(rendered, README_SOURCE); + expect(error).not.toBeNull(); + expect(error).toContain("empty"); + }); + it("flags a frontmatter block the model dropped entirely", async () => { // A missing block is still valid YAML (mintlify tolerates it), so only the // key-parity check against the source catches it. diff --git a/docs/ar/admin/keys-and-permissions.mdx b/docs/ar/admin/keys-and-permissions.mdx index 0f8682ef5..fc3ef8cb9 100644 --- a/docs/ar/admin/keys-and-permissions.mdx +++ b/docs/ar/admin/keys-and-permissions.mdx @@ -1,5 +1,4 @@ --- ---- title: "المفاتيح والأذونات" description: "إنشاء مفاتيح API ذات نطاق محدد للآلات والأتمتة والمشغلين." icon: "key-round" diff --git a/docs/ar/admin/overview.mdx b/docs/ar/admin/overview.mdx index 8827906ad..23483ed1d 100644 --- a/docs/ar/admin/overview.mdx +++ b/docs/ar/admin/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "الإدارة" description: "تشغيل الوصول والاستخدام والمنظمات والأمان دون دمجها في سير عمل الموثوقية." icon: "settings-2" diff --git a/docs/ar/admin/usage.mdx b/docs/ar/admin/usage.mdx index 532df2e43..066940331 100644 --- a/docs/ar/admin/usage.mdx +++ b/docs/ar/admin/usage.mdx @@ -1,5 +1,4 @@ --- ---- title: "الاستخدام" description: "فحص استهلاك المنظمة والنافذة الفعالة للفواتير." icon: "chart-no-axes-combined" diff --git a/docs/ar/audits/agent-contracts.mdx b/docs/ar/audits/agent-contracts.mdx index 442b6c2bb..abd6d8a32 100644 --- a/docs/ar/audits/agent-contracts.mdx +++ b/docs/ar/audits/agent-contracts.mdx @@ -1,5 +1,4 @@ --- ---- title: "سياق الوكيل" description: "أخبر المراجعات بما يجب أن يفعله كل وكيل، وما يجب أن ينتجه، وما يجب أن لا يفعله أبداً." icon: "bot" diff --git a/docs/ar/audits/alerts.mdx b/docs/ar/audits/alerts.mdx index a7a8b5af1..bb9d34362 100644 --- a/docs/ar/audits/alerts.mdx +++ b/docs/ar/audits/alerts.mdx @@ -1,5 +1,4 @@ --- ---- title: "التنبيهات" description: "كتشف تكرار الحوادث وإعادة توجيهها إلى المستجيبين المناسبين." icon: "bell-ring" diff --git a/docs/ar/audits/cadence.mdx b/docs/ar/audits/cadence.mdx index 35661228f..32cf486b6 100644 --- a/docs/ar/audits/cadence.mdx +++ b/docs/ar/audits/cadence.mdx @@ -1,5 +1,4 @@ --- ---- title: "تكرار المراجعة" description: "حدد موعد تشغيل المراجعات المتكررة وكمية البيانات التي تراجعها." icon: "calendar-clock" diff --git a/docs/ar/audits/findings-and-issues.mdx b/docs/ar/audits/findings-and-issues.mdx index 8655cd01e..ff12081d9 100644 --- a/docs/ar/audits/findings-and-issues.mdx +++ b/docs/ar/audits/findings-and-issues.mdx @@ -1,5 +1,4 @@ --- ---- title: "النتائج والمشاكل" description: "تحويل أدلة التدقيق إلى عمل إعادة معالجة مملوك وقابل للتتبع." icon: "clipboard-check" diff --git a/docs/ar/audits/recipes.mdx b/docs/ar/audits/recipes.mdx index d93b47879..402c90080 100644 --- a/docs/ar/audits/recipes.mdx +++ b/docs/ar/audits/recipes.mdx @@ -1,5 +1,4 @@ --- ---- title: "وصفات التدقيق" description: "أهداف البداية للتحقيقات الشائعة لفشل الوكيل." icon: "book-open-check" diff --git a/docs/ar/audits/run.mdx b/docs/ar/audits/run.mdx index 7b857ebaa..6e221a7d1 100644 --- a/docs/ar/audits/run.mdx +++ b/docs/ar/audits/run.mdx @@ -1,5 +1,4 @@ --- ---- title: "تشغيل ومراجعة التدقيق" description: "قم بتشغيل التدقيق والتحقق من نطاقه وفحص النتائج الناتجة." icon: "play" diff --git a/docs/ar/index.mdx b/docs/ar/index.mdx index 92b389a32..dea610256 100644 --- a/docs/ar/index.mdx +++ b/docs/ar/index.mdx @@ -1,5 +1,4 @@ --- ---- title: "اجعل وكيلك failproof" description: "قابلية المراقبة والإنفاذ لكل محرك يعمل به وكلاؤك — برامج سطر الأوامر للترميز، بوابات الدردشة، المساعدات المستضافة ذاتياً، والوكلاء المزودين بآليات المراقبة الخاصة بك." icon: "shield-check" diff --git a/docs/ar/policies/custom.mdx b/docs/ar/policies/custom.mdx index 5cd4348c8..6827b9df2 100644 --- a/docs/ar/policies/custom.mdx +++ b/docs/ar/policies/custom.mdx @@ -1,5 +1,4 @@ --- ---- title: "سياسات مخصصة" description: "اكتب سياسة لحالة فشل فريدة من نوعها في سير عمل وكيلك." icon: "shield-plus" diff --git a/docs/ar/policies/deploy.mdx b/docs/ar/policies/deploy.mdx index b2aa395d4..55b293fb9 100644 --- a/docs/ar/policies/deploy.mdx +++ b/docs/ar/policies/deploy.mdx @@ -1,5 +1,4 @@ --- ---- title: "نشر السياسات" description: "طرح نسخة سياسة تمت مراجعتها على الأجهزة المخطط لها." icon: "cloud-upload" diff --git a/docs/ar/policies/editor.mdx b/docs/ar/policies/editor.mdx index ed6ed1238..9668f9c04 100644 --- a/docs/ar/policies/editor.mdx +++ b/docs/ar/policies/editor.mdx @@ -1,5 +1,4 @@ --- ---- title: "محرر السياسات" description: "إنشاء ومراجعة السياسات ذات الإصدارات من نمط فشل مؤكد." icon: "file-pen-line" diff --git a/docs/ar/policies/failure-behavior.mdx b/docs/ar/policies/failure-behavior.mdx index ba16d9ece..e666f018a 100644 --- a/docs/ar/policies/failure-behavior.mdx +++ b/docs/ar/policies/failure-behavior.mdx @@ -1,5 +1,4 @@ --- ---- title: "سلوك الفشل" description: "فهم ما يحدث عند عدم توفر تقييم السياسة أو مُحقِّق محلي." icon: "shield-alert" diff --git a/docs/ar/policies/fleet.mdx b/docs/ar/policies/fleet.mdx index e2e5c65d5..4fcf2f76f 100644 --- a/docs/ar/policies/fleet.mdx +++ b/docs/ar/policies/fleet.mdx @@ -1,5 +1,4 @@ --- ---- title: "نشر السياسات على الأجهزة" description: "تحديد الأجهزة المسجلة والمحدثة والتي تطبق إصدارات السياسات المقصودة." icon: "network" diff --git a/docs/ar/policies/local-configuration.mdx b/docs/ar/policies/local-configuration.mdx index 690de26c5..f8144b958 100644 --- a/docs/ar/policies/local-configuration.mdx +++ b/docs/ar/policies/local-configuration.mdx @@ -1,5 +1,4 @@ --- ---- title: "التكوين المحلي" description: "التحكم في نطاق السياسة والمعاملات والملفات المخصصة وإعدادات Failproof AI على مستوى الجهاز." icon: "file-cog" diff --git a/docs/ar/policies/overview.mdx b/docs/ar/policies/overview.mdx index 5e2a3ec67..9be3a2c13 100644 --- a/docs/ar/policies/overview.mdx +++ b/docs/ar/policies/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "السياسات" description: "راقب أو وجّه أو احجب إجراءات الوكيل قبل أن تتكرر حالة فشل معروفة." icon: "shield-check" diff --git a/docs/ar/policies/publish-a-pack.mdx b/docs/ar/policies/publish-a-pack.mdx index 602fdb5a2..048637e78 100644 --- a/docs/ar/policies/publish-a-pack.mdx +++ b/docs/ar/policies/publish-a-pack.mdx @@ -1,5 +1,4 @@ --- ---- title: "نشر حزمة" description: "شحن سياساتك الخاصة كإصدار GitHub يمكن لأي شخص تثبيته." icon: "upload" diff --git a/docs/ar/policies/rollback.mdx b/docs/ar/policies/rollback.mdx index 621137578..acecf62b1 100644 --- a/docs/ar/policies/rollback.mdx +++ b/docs/ar/policies/rollback.mdx @@ -1,5 +1,4 @@ --- ---- title: "التراجع عن النشر" description: "استعادة نشر سياسة معروف عند حدوث اضطراب في عمل الوكيل الصحيح." icon: "rotate-ccw" diff --git a/docs/ar/reference/cloud-cli.mdx b/docs/ar/reference/cloud-cli.mdx index 41ebf2238..42b2069c5 100644 --- a/docs/ar/reference/cloud-cli.mdx +++ b/docs/ar/reference/cloud-cli.mdx @@ -1,5 +1,4 @@ --- ---- title: "Failproof Cloud CLI" description: "مرجع شامل للاستعلام عن وإدارة Failproof AI Cloud باستخدام fp." icon: "cloud-cog" diff --git a/docs/ar/reference/evaluator-sdk.mdx b/docs/ar/reference/evaluator-sdk.mdx index 6f3eb4f27..2084d1107 100644 --- a/docs/ar/reference/evaluator-sdk.mdx +++ b/docs/ar/reference/evaluator-sdk.mdx @@ -1,5 +1,4 @@ --- ---- title: "Evaluator SDK" description: "أنشئ خدمة تقيّم جلسات Failproof AI بشكل متزامن أو غير متزامن." icon: "gauge" diff --git a/docs/ar/reference/failproof-cli.mdx b/docs/ar/reference/failproof-cli.mdx index 0344448d9..1339a14c2 100644 --- a/docs/ar/reference/failproof-cli.mdx +++ b/docs/ar/reference/failproof-cli.mdx @@ -1,5 +1,4 @@ --- ---- title: "واجهة أوامر Failproof AI" description: "ثبّت الخطافات، أدِر السياسات المحلية، اتصل بالسحابة، وشغّل مراقب الخادم المحلي." icon: "terminal" diff --git a/docs/ar/reference/policy-sdk.mdx b/docs/ar/reference/policy-sdk.mdx index eb0e43a4b..1a433f1a8 100644 --- a/docs/ar/reference/policy-sdk.mdx +++ b/docs/ar/reference/policy-sdk.mdx @@ -1,5 +1,4 @@ --- ---- title: "السياسات المخصصة" description: "قم بتأليف واختبار ونشر سياسات JavaScript أو TypeScript لحالات الفشل الخاصة بوكلائك." icon: "shield-plus" diff --git a/docs/ar/sessions/assistant.mdx b/docs/ar/sessions/assistant.mdx index 6fd63c8fb..bc00d786f 100644 --- a/docs/ar/sessions/assistant.mdx +++ b/docs/ar/sessions/assistant.mdx @@ -1,5 +1,4 @@ --- ---- title: "مساعد Failproof" description: "حلل وشغل Failproof AI باستخدام اللغة الطبيعية، من الأسئلة والاستفسارات إلى لوحات المعلومات والتدقيق." icon: "message-square-text" diff --git a/docs/ar/sessions/dashboards.mdx b/docs/ar/sessions/dashboards.mdx index 318610784..a1fd12604 100644 --- a/docs/ar/sessions/dashboards.mdx +++ b/docs/ar/sessions/dashboards.mdx @@ -1,5 +1,4 @@ --- ---- title: "لوحات المعلومات" description: "تتبع إشارات الموثوقية التي تهم الوكيل أو سير العمل." icon: "layout-dashboard" diff --git a/docs/ar/sessions/errors.mdx b/docs/ar/sessions/errors.mdx index 8277065b5..55f9df2cb 100644 --- a/docs/ar/sessions/errors.mdx +++ b/docs/ar/sessions/errors.mdx @@ -1,5 +1,4 @@ --- ---- title: "الأخطاء" description: "جمّع الأخطاء المتكررة وافتح الجلسات المرتبطة بها." icon: "circle-alert" diff --git a/docs/ar/sessions/evaluations.mdx b/docs/ar/sessions/evaluations.mdx index ad4b8f0b1..8d5168a1a 100644 --- a/docs/ar/sessions/evaluations.mdx +++ b/docs/ar/sessions/evaluations.mdx @@ -1,5 +1,4 @@ --- ---- title: "التقييمات المباشرة" description: "قيّم الجلسات المباشرة والمكتملة من حيث الجودة والامتثال والتكلفة والكمون." icon: "gauge" diff --git a/docs/ar/sessions/live-events.mdx b/docs/ar/sessions/live-events.mdx index 7c678d3ac..a5476ae67 100644 --- a/docs/ar/sessions/live-events.mdx +++ b/docs/ar/sessions/live-events.mdx @@ -1,5 +1,4 @@ --- ---- title: "الأحداث المباشرة" description: "شاهد نشاط الوكيل يصل أثناء تشغيل جلسة عمل." icon: "radio" diff --git a/docs/ar/sessions/models.mdx b/docs/ar/sessions/models.mdx index b47c3ccec..862d72e63 100644 --- a/docs/ar/sessions/models.mdx +++ b/docs/ar/sessions/models.mdx @@ -1,5 +1,4 @@ --- ---- title: "النماذج" description: "قارن زمن الاستجابة والرموز واستخدام السياق وتوزيع حركة المرور بين النماذج." icon: "cpu" diff --git a/docs/ar/sessions/overview.mdx b/docs/ar/sessions/overview.mdx index 5726912ee..9933bb518 100644 --- a/docs/ar/sessions/overview.mdx +++ b/docs/ar/sessions/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "الجلسات" description: "ابدأ بسجل كامل لتشغيل وكيل واحد." icon: "workflow" diff --git a/docs/ar/sessions/policy-decisions.mdx b/docs/ar/sessions/policy-decisions.mdx index 6fe89515e..c972d4a2d 100644 --- a/docs/ar/sessions/policy-decisions.mdx +++ b/docs/ar/sessions/policy-decisions.mdx @@ -1,5 +1,4 @@ --- ---- title: "قرارات السياسة" description: "اطّلع على السياسات المقيّمة والمحظورة والموجّهة والمسموح بها." icon: "shield-check" diff --git a/docs/ar/sessions/read-a-trace.mdx b/docs/ar/sessions/read-a-trace.mdx index 212dddf39..a3600aa9c 100644 --- a/docs/ar/sessions/read-a-trace.mdx +++ b/docs/ar/sessions/read-a-trace.mdx @@ -1,5 +1,4 @@ --- ---- title: "قراءة التتبع" description: "ابحث عن الحدث الذي غيّر مسار جلسة الوكيل." icon: "route" diff --git a/docs/ar/start/first-policy.mdx b/docs/ar/start/first-policy.mdx index ccc76b888..6647e7f1f 100644 --- a/docs/ar/start/first-policy.mdx +++ b/docs/ar/start/first-policy.mdx @@ -1,5 +1,4 @@ --- ---- title: "منع فشلك الأول باستخدام سياسة" description: "قم بتأليف نسخة من السياسة، وانشرها في وضع المراقبة، ثم طبقها." icon: "shield-check" diff --git a/docs/ar/start/integrations.mdx b/docs/ar/start/integrations.mdx index 047a0ff6f..a56459630 100644 --- a/docs/ar/start/integrations.mdx +++ b/docs/ar/start/integrations.mdx @@ -1,5 +1,4 @@ --- ---- title: "جهز وكيلك" sidebarTitle: "الأطر العمل" description: "اربط أي إطار عمل وكيل مدعوم إلى Failproof AI برمز واحد." diff --git a/docs/ar/start/integrations/crewai.mdx b/docs/ar/start/integrations/crewai.mdx index 16861f7bf..e580e5d34 100644 --- a/docs/ar/start/integrations/crewai.mdx +++ b/docs/ar/start/integrations/crewai.mdx @@ -1,5 +1,4 @@ --- ---- title: "CrewAI" sidebarTitle: "CrewAI" description: "تجهيز الفرق والتدفقات والوكلاء حسب الدور والأدوات والذاكرة وردود الفعل البشرية." diff --git a/docs/ar/start/integrations/langchain.mdx b/docs/ar/start/integrations/langchain.mdx index c6f9eee46..a35b43efa 100644 --- a/docs/ar/start/integrations/langchain.mdx +++ b/docs/ar/start/integrations/langchain.mdx @@ -1,5 +1,4 @@ --- ---- title: "LangChain و LangGraph" sidebarTitle: "LangChain و LangGraph" description: "قم بتتبع الرسوم البيانية والعقد والأدوات والمسترجعات واستدعاءات النموذج برمز واحد." diff --git a/docs/ar/start/quickstart.mdx b/docs/ar/start/quickstart.mdx index b59e7768f..1daebeea6 100644 --- a/docs/ar/start/quickstart.mdx +++ b/docs/ar/start/quickstart.mdx @@ -1,5 +1,4 @@ --- ---- title: "البدء السريع" description: "التقط جلسة وكيل، ابحث عن عطل، وابدأ في منعه." icon: "zap" diff --git a/docs/ar/start/quickstarts/crewai.mdx b/docs/ar/start/quickstarts/crewai.mdx index d948814b2..9ee22d1db 100644 --- a/docs/ar/start/quickstarts/crewai.mdx +++ b/docs/ar/start/quickstarts/crewai.mdx @@ -1,5 +1,4 @@ --- ---- title: "CrewAI" description: "قم بالتثبيت والمراقبة وشاهد أول تتبع لك." icon: "/images/frameworks/crewai.svg" diff --git a/docs/ar/start/quickstarts/custom-agents.mdx b/docs/ar/start/quickstarts/custom-agents.mdx index e5b6d2347..a25d12073 100644 --- a/docs/ar/start/quickstarts/custom-agents.mdx +++ b/docs/ar/start/quickstarts/custom-agents.mdx @@ -1,5 +1,4 @@ --- ---- title: "وكلاء مخصصون" description: "غلّف وكيلك في ثلاث كتل `with` وسيبدأ التسجيل." icon: "code" diff --git a/docs/ar/start/quickstarts/langchain.mdx b/docs/ar/start/quickstarts/langchain.mdx index b16ccee4b..53c3f78f1 100644 --- a/docs/ar/start/quickstarts/langchain.mdx +++ b/docs/ar/start/quickstarts/langchain.mdx @@ -1,5 +1,4 @@ --- ---- title: "LangChain و LangGraph" description: "التثبيت والأداة والحصول على أول تتبع لديك." icon: "/images/frameworks/langchain.svg" diff --git a/docs/docs.json b/docs/docs.json index cda19dd2f..e8f6b669d 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -121,6 +121,7 @@ { "group": "Plug in your agent", "pages": [ + "start/integrations", "start/integrations/custom-agents", "start/integrations/langchain", "start/integrations/crewai", @@ -283,6 +284,7 @@ { "group": "Plug in your agent", "pages": [ + "zh/start/integrations", "zh/start/integrations/custom-agents", "zh/start/integrations/langchain", "zh/start/integrations/crewai", @@ -439,6 +441,7 @@ { "group": "Plug in your agent", "pages": [ + "ja/start/integrations", "ja/start/integrations/custom-agents", "ja/start/integrations/langchain", "ja/start/integrations/crewai", @@ -595,6 +598,7 @@ { "group": "Plug in your agent", "pages": [ + "ko/start/integrations", "ko/start/integrations/custom-agents", "ko/start/integrations/langchain", "ko/start/integrations/crewai", @@ -751,6 +755,7 @@ { "group": "Plug in your agent", "pages": [ + "es/start/integrations", "es/start/integrations/custom-agents", "es/start/integrations/langchain", "es/start/integrations/crewai", @@ -907,6 +912,7 @@ { "group": "Plug in your agent", "pages": [ + "pt-br/start/integrations", "pt-br/start/integrations/custom-agents", "pt-br/start/integrations/langchain", "pt-br/start/integrations/crewai", @@ -1063,6 +1069,7 @@ { "group": "Plug in your agent", "pages": [ + "de/start/integrations", "de/start/integrations/custom-agents", "de/start/integrations/langchain", "de/start/integrations/crewai", @@ -1219,6 +1226,7 @@ { "group": "Plug in your agent", "pages": [ + "fr/start/integrations", "fr/start/integrations/custom-agents", "fr/start/integrations/langchain", "fr/start/integrations/crewai", @@ -1375,6 +1383,7 @@ { "group": "Plug in your agent", "pages": [ + "ru/start/integrations", "ru/start/integrations/custom-agents", "ru/start/integrations/langchain", "ru/start/integrations/crewai", @@ -1531,6 +1540,7 @@ { "group": "Plug in your agent", "pages": [ + "hi/start/integrations", "hi/start/integrations/custom-agents", "hi/start/integrations/langchain", "hi/start/integrations/crewai", @@ -1687,6 +1697,7 @@ { "group": "Plug in your agent", "pages": [ + "tr/start/integrations", "tr/start/integrations/custom-agents", "tr/start/integrations/langchain", "tr/start/integrations/crewai", @@ -1843,6 +1854,7 @@ { "group": "Plug in your agent", "pages": [ + "vi/start/integrations", "vi/start/integrations/custom-agents", "vi/start/integrations/langchain", "vi/start/integrations/crewai", @@ -1999,6 +2011,7 @@ { "group": "Plug in your agent", "pages": [ + "it/start/integrations", "it/start/integrations/custom-agents", "it/start/integrations/langchain", "it/start/integrations/crewai", @@ -2155,6 +2168,7 @@ { "group": "Plug in your agent", "pages": [ + "ar/start/integrations", "ar/start/integrations/custom-agents", "ar/start/integrations/langchain", "ar/start/integrations/crewai", @@ -2311,6 +2325,7 @@ { "group": "Plug in your agent", "pages": [ + "he/start/integrations", "he/start/integrations/custom-agents", "he/start/integrations/langchain", "he/start/integrations/crewai", diff --git a/docs/he/admin/overview.mdx b/docs/he/admin/overview.mdx index e549af854..ffe88835f 100644 --- a/docs/he/admin/overview.mdx +++ b/docs/he/admin/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "ניהול" description: "נהל גישה, שימוש, ארגונים וביטחון ללא עירוב שלהם בזרימת העבודה של אמינות." icon: "settings-2" diff --git a/docs/he/audits/agent-contracts.mdx b/docs/he/audits/agent-contracts.mdx index bb2e66a8c..671c42b06 100644 --- a/docs/he/audits/agent-contracts.mdx +++ b/docs/he/audits/agent-contracts.mdx @@ -1,5 +1,4 @@ --- ---- title: "הקשר סוכן" description: "ספר לביקורות מה כל סוכן חייב לעשות, להפיק, ולעולם לא לעשות." icon: "bot" diff --git a/docs/he/audits/local-audit.mdx b/docs/he/audits/local-audit.mdx index 2e09ecbb4..50eda92f2 100644 --- a/docs/he/audits/local-audit.mdx +++ b/docs/he/audits/local-audit.mdx @@ -1,5 +1,4 @@ --- ---- title: "审核本地代理历史记录" description: "离线扫描受支持的代理 CLI 历史记录,并在本地审查风险或浪费的行为。" icon: "laptop-minimal-check" diff --git a/docs/he/audits/overview.mdx b/docs/he/audits/overview.mdx index 8dc687f4d..c73b7eb66 100644 --- a/docs/he/audits/overview.mdx +++ b/docs/he/audits/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "ביקורות" description: "בדוק אוכלוסיית פגיעויות מוגדרת לכשלים שעקבות בלבד לא יגידו עליהם." icon: "scan-search" diff --git a/docs/he/audits/recipes.mdx b/docs/he/audits/recipes.mdx index 2dd3dc4a3..5466ac6cc 100644 --- a/docs/he/audits/recipes.mdx +++ b/docs/he/audits/recipes.mdx @@ -1,5 +1,4 @@ --- ---- title: "מתכונים ביקורת" description: "יעדים התחלתיים לחקירות נפוצות של כשלים בסוכנים." icon: "book-open-check" diff --git a/docs/he/index.mdx b/docs/he/index.mdx index ede5a62cb..dbcf5ee98 100644 --- a/docs/he/index.mdx +++ b/docs/he/index.mdx @@ -1,5 +1,4 @@ --- ---- title: "הפוך את הסוכן שלך לבטוח מטעויות" description: "נראות והטלת אכיפה על כל ההרתמה שהסוכנים שלך מריצים - CLIs קידוד, שערי צ'אט, עוזרים עצמאיים והסוכנים המותאמים שלך." icon: "shield-check" diff --git a/docs/he/policies/custom.mdx b/docs/he/policies/custom.mdx index 7735b35c4..fa36bd27c 100644 --- a/docs/he/policies/custom.mdx +++ b/docs/he/policies/custom.mdx @@ -1,5 +1,4 @@ --- ---- title: "מדיניויות מותאמות" description: "כתוב מדיניות עבור מצב כשל ייחודי לזרימת העבודה של הסוכן שלך." icon: "shield-plus" diff --git a/docs/he/reference/self-hosting.mdx b/docs/he/reference/self-hosting.mdx index 4f0b72ed5..1df6da179 100644 --- a/docs/he/reference/self-hosting.mdx +++ b/docs/he/reference/self-hosting.mdx @@ -1,5 +1,4 @@ --- ---- title: "Self-host Failproof AI Cloud" description: "פרוס את מישור הבקרה של Failproof AI על קלסטר Kubernetes המנוהל על ידי הלקוח." icon: "cloud-cog" diff --git a/docs/he/sessions/evaluations.mdx b/docs/he/sessions/evaluations.mdx index 328d60cb1..2b37f70d3 100644 --- a/docs/he/sessions/evaluations.mdx +++ b/docs/he/sessions/evaluations.mdx @@ -1,5 +1,4 @@ --- ---- title: "הערכות מקוונות" description: "דירוג הפעלות חיות ושהסתיימו לאיכות, ציות, עלות ותופעת השהיה." icon: "gauge" diff --git a/docs/he/sessions/live-events.mdx b/docs/he/sessions/live-events.mdx index 5e24741da..59b9c5ea1 100644 --- a/docs/he/sessions/live-events.mdx +++ b/docs/he/sessions/live-events.mdx @@ -1,5 +1,4 @@ --- ---- title: "אירועים בזמן אמת" description: "צפו בפעילות הסוכן בזמן ביצוע הסשן." icon: "radio" diff --git a/docs/he/sessions/models.mdx b/docs/he/sessions/models.mdx index 72f10ff2d..94666771c 100644 --- a/docs/he/sessions/models.mdx +++ b/docs/he/sessions/models.mdx @@ -1,5 +1,4 @@ --- ---- title: "Models" description: "השווה בין latency של מודלים, tokens, שימוש בקונטקסט, והפצת תעבורה." icon: "cpu" diff --git a/docs/he/start/integrations.mdx b/docs/he/start/integrations.mdx index f88a2c9fe..3c67d164c 100644 --- a/docs/he/start/integrations.mdx +++ b/docs/he/start/integrations.mdx @@ -1,5 +1,4 @@ --- ---- title: "הוספת כלים לסוכן שלך" sidebarTitle: "Frameworks" description: "חבר כל framework סוכן נתמך ל-Failproof AI בקריאה אחת." diff --git a/docs/he/start/integrations/crewai.mdx b/docs/he/start/integrations/crewai.mdx index c58033a42..b7d5b367d 100644 --- a/docs/he/start/integrations/crewai.mdx +++ b/docs/he/start/integrations/crewai.mdx @@ -1,5 +1,4 @@ --- ---- title: "CrewAI" sidebarTitle: "CrewAI" description: "ניהול צוות, זרימות, סוכנים לפי תפקיד, כלים, זיכרון ומשוב אנושי." diff --git a/docs/he/start/integrations/llamaindex.mdx b/docs/he/start/integrations/llamaindex.mdx index 267cc8c80..e36fb1d6b 100644 --- a/docs/he/start/integrations/llamaindex.mdx +++ b/docs/he/start/integrations/llamaindex.mdx @@ -1,5 +1,4 @@ --- ---- title: "LlamaIndex" sidebarTitle: "LlamaIndex" description: "Instrument workflows, steps, function agents, and retrievers." diff --git a/docs/he/start/integrations/pydantic-ai.mdx b/docs/he/start/integrations/pydantic-ai.mdx index 685b36d59..ca0aced10 100644 --- a/docs/he/start/integrations/pydantic-ai.mdx +++ b/docs/he/start/integrations/pydantic-ai.mdx @@ -1,5 +1,4 @@ --- ---- title: "Pydantic AI" sidebarTitle: "Pydantic AI" description: "הגן על אג'נטים מוקלדים, כלים, קריאות מודל וניסיונות חוזרים." diff --git a/docs/hi/admin/keys-and-permissions.mdx b/docs/hi/admin/keys-and-permissions.mdx index 405a74a4b..ba9fd66d5 100644 --- a/docs/hi/admin/keys-and-permissions.mdx +++ b/docs/hi/admin/keys-and-permissions.mdx @@ -1,5 +1,4 @@ --- ---- title: "कुंजियाँ और अनुमतियाँ" description: "मशीनों, स्वचालन और ऑपरेटरों के लिए स्कोप की गई API कुंजियाँ बनाएँ।" icon: "key-round" diff --git a/docs/hi/policies/custom.mdx b/docs/hi/policies/custom.mdx index 7c04250fe..05edc823e 100644 --- a/docs/hi/policies/custom.mdx +++ b/docs/hi/policies/custom.mdx @@ -1,5 +1,4 @@ --- ---- title: "कस्टम नीतियां" description: "अपने agent वर्कफ़्लो के लिए अद्वितीय विफलता मोड के लिए एक नीति लिखें।" icon: "shield-plus" diff --git a/docs/hi/policies/failure-behavior.mdx b/docs/hi/policies/failure-behavior.mdx index 1c635b52e..42bccfe67 100644 --- a/docs/hi/policies/failure-behavior.mdx +++ b/docs/hi/policies/failure-behavior.mdx @@ -1,5 +1,4 @@ --- ---- title: "विफलता व्यवहार" description: "समझें कि जब नीति मूल्यांकन या स्थानीय daemon अनुपलब्ध हो तो क्या होता है।" icon: "shield-alert" diff --git a/docs/hi/reference/local-dashboard.mdx b/docs/hi/reference/local-dashboard.mdx index c6d49c557..bb30c11f6 100644 --- a/docs/hi/reference/local-dashboard.mdx +++ b/docs/hi/reference/local-dashboard.mdx @@ -1,5 +1,4 @@ --- ---- title: "लोकल डैशबोर्ड" description: "लोकल प्रोजेक्ट, सेशन, पॉलिसी एक्टिविटी, कॉन्फ़िगरेशन, ऑडिट और शेड्यूल्ड स्कैन की समीक्षा करें।" icon: "monitor-cog" diff --git a/docs/hi/sessions/evaluations.mdx b/docs/hi/sessions/evaluations.mdx index 5f5e4fae5..4eb1d3d31 100644 --- a/docs/hi/sessions/evaluations.mdx +++ b/docs/hi/sessions/evaluations.mdx @@ -1,5 +1,4 @@ --- ---- title: "ऑनलाइन मूल्यांकन" description: "गुणवत्ता, अनुपालन, लागत और विलंबता के लिए लाइव और पूर्ण सत्रों को स्कोर करें।" icon: "gauge" diff --git a/docs/hi/start/integrations.mdx b/docs/hi/start/integrations.mdx index 7f4e3eebc..336abed0e 100644 --- a/docs/hi/start/integrations.mdx +++ b/docs/hi/start/integrations.mdx @@ -1,5 +1,4 @@ --- ---- title: "अपने एजेंट को इंस्ट्रूमेंट करें" sidebarTitle: "Frameworks" description: "किसी भी समर्थित एजेंट फ्रेमवर्क को Failproof AI से एक कॉल के साथ कनेक्ट करें।" diff --git a/docs/hi/start/integrations/crewai.mdx b/docs/hi/start/integrations/crewai.mdx index 0ed13312e..d09708955 100644 --- a/docs/hi/start/integrations/crewai.mdx +++ b/docs/hi/start/integrations/crewai.mdx @@ -1,5 +1,4 @@ --- ---- title: "CrewAI" sidebarTitle: "CrewAI" description: "Crews, flows, agents को भूमिका, tools, memory और human feedback द्वारा instrument करें।" diff --git a/docs/it/admin/overview.mdx b/docs/it/admin/overview.mdx index 3bbdb458d..ee1356207 100644 --- a/docs/it/admin/overview.mdx +++ b/docs/it/admin/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "Amministrazione" description: "Gestisci accesso, utilizzo, organizzazioni e sicurezza senza mischiarli nel flusso di lavoro di affidabilità." icon: "settings-2" diff --git a/docs/it/audits/agent-contracts.mdx b/docs/it/audits/agent-contracts.mdx index 05743e556..161e0ff22 100644 --- a/docs/it/audits/agent-contracts.mdx +++ b/docs/it/audits/agent-contracts.mdx @@ -1,5 +1,4 @@ --- ---- title: "Contesto dell'agente" description: "Indica ai controlli cosa deve fare, produrre e non fare mai ogni agente." icon: "bot" diff --git a/docs/it/policies/local-configuration.mdx b/docs/it/policies/local-configuration.mdx index 549621077..a758d9606 100644 --- a/docs/it/policies/local-configuration.mdx +++ b/docs/it/policies/local-configuration.mdx @@ -1,5 +1,4 @@ --- ---- title: "Configurazione locale" description: "Controlla l'ambito delle policy, i parametri, i file personalizzati e le impostazioni di Failproof AI a livello di macchina." icon: "file-cog" diff --git a/docs/it/reference/evaluator-sdk.mdx b/docs/it/reference/evaluator-sdk.mdx index 693304db9..0fc260696 100644 --- a/docs/it/reference/evaluator-sdk.mdx +++ b/docs/it/reference/evaluator-sdk.mdx @@ -1,5 +1,4 @@ --- ---- title: "Evaluator SDK" description: "Costruisci un servizio che valuta le sessioni di Failproof AI in modo sincrono o asincrono." icon: "gauge" diff --git a/docs/it/reference/harnesses.mdx b/docs/it/reference/harnesses.mdx index 701f74256..5839de80c 100644 --- a/docs/it/reference/harnesses.mdx +++ b/docs/it/reference/harnesses.mdx @@ -1,5 +1,4 @@ --- ---- title: "Harness per agent" description: "Cattura sessioni e applica policy su tutti i 12 harness per agent supportati." icon: "plug-zap" diff --git a/docs/it/reference/local-dashboard.mdx b/docs/it/reference/local-dashboard.mdx index e2a200ef4..d00b81828 100644 --- a/docs/it/reference/local-dashboard.mdx +++ b/docs/it/reference/local-dashboard.mdx @@ -1,5 +1,4 @@ --- ---- title: "Dashboard locale" description: "Rivedi progetti locali, sessioni, attività delle policy, configurazione, audit e scansioni pianificate." icon: "monitor-cog" diff --git a/docs/it/sessions/assistant.mdx b/docs/it/sessions/assistant.mdx index ac6815ebd..ad66c6b21 100644 --- a/docs/it/sessions/assistant.mdx +++ b/docs/it/sessions/assistant.mdx @@ -1,5 +1,4 @@ --- ---- title: "Failproof Assistant" description: "Analizza e gestisci Failproof AI in linguaggio naturale, da domande e query a dashboard e audit." icon: "message-square-text" diff --git a/docs/it/sessions/queries.mdx b/docs/it/sessions/queries.mdx index a474e1f37..9d760555d 100644 --- a/docs/it/sessions/queries.mdx +++ b/docs/it/sessions/queries.mdx @@ -1,5 +1,4 @@ --- ---- title: "Query" description: "Esplora i dati di sessione, evento e valutazione con SQL riutilizzabile." icon: "database" diff --git a/docs/it/start/quickstarts/langchain.mdx b/docs/it/start/quickstarts/langchain.mdx index 473332274..97db6c747 100644 --- a/docs/it/start/quickstarts/langchain.mdx +++ b/docs/it/start/quickstarts/langchain.mdx @@ -1,5 +1,4 @@ --- ---- title: "LangChain e LangGraph" description: "Installa, strumenta e visualizza la tua prima traccia." icon: "/images/frameworks/langchain.svg" diff --git a/docs/policies/failure-behavior.mdx b/docs/policies/failure-behavior.mdx index 15865cd3c..176be13a2 100644 --- a/docs/policies/failure-behavior.mdx +++ b/docs/policies/failure-behavior.mdx @@ -61,7 +61,9 @@ It does not fire for: ### What to do ```bash -failproofai pack list +failproofai policies ``` -It names any installed pack that will not load, says why, and exits non-zero. Then either reinstall it (`failproofai pack add `) or remove it (`failproofai pack remove `) — removing it withdraws the expectation, and the deny stops with it. +The listing names any installed pack that will not load and says why, alongside everything else enforcing here. Then either reinstall it (`failproofai policies add `) or remove it (`failproofai policies remove `) — removing it withdraws the expectation, and the deny stops with it. + +The deny itself is attributed to `pack/failproofai-pack-unavailable`, which outranks the policies that did load, so a blocked tool call names the missing pack rather than whichever surviving guard happened to fire first. diff --git a/docs/policies/packs.mdx b/docs/policies/packs.mdx index 8f1db2d19..870439776 100644 --- a/docs/policies/packs.mdx +++ b/docs/policies/packs.mdx @@ -9,33 +9,37 @@ A pack is a set of policies published as a GitHub release. One command installs ## Install the Failproof AI policies ```bash -failproofai pack add core +failproofai policies add FailproofAI/policies ``` -That installs the set we publish, from the copy inside the package — so it needs no network and cannot fail behind a proxy. Take part of it: +That installs the set we publish, fetched and pinned from its own GitHub release — ours is a pack like anyone else's, typed the same way, with no short name only we can use. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended; the rest are listed for you to choose. Take part of it instead: ```bash -failproofai pack add core --policy block-rm-rf # one, or a comma-separated few -failproofai pack add core --category dangerous-commands # a whole category -failproofai pack add core --all # everything in it +failproofai policies add FailproofAI/policies --policy block-rm-rf # one, or a comma-separated few +failproofai policies add FailproofAI/policies --category dangerous-commands # a whole category +failproofai policies add FailproofAI/policies --all # everything in it ``` -`failproofai pack list` names every category the pack offers. +`failproofai policies show FailproofAI/policies` names every category the pack offers. + + + This is the one step of setup that needs the network. `failproofai config` wires the hooks and deliberately chooses **no** policies, so a machine that has only been set up is not yet enforcing one — it tells you so when it finishes. + ## See what a pack contains, before installing it ```bash -failproofai pack list acme/support-agent +failproofai policies show acme/support-agent ``` Lists every policy the pack carries, grouped by category, marking which ones its author switches on by default and which are opt-in. It reads **only the manifest** — the entry artifact is never downloaded and never imported, so looking at a stranger's pack cannot run a stranger's code. The manifest is still checked against the release's own `SHA256SUMS`, so what you are reading is what would install. -`failproofai pack list` with no source lists the packs already installed here. +`failproofai policies` with no arguments lists what is already installed here — packs included, alongside builtin, convention and custom policies. ## Install somebody else's pack ```bash -failproofai pack add acme/support-agent +failproofai policies add acme/support-agent ``` Any of these work — paste whichever you have: @@ -54,9 +58,9 @@ Naming no tag installs the newest release **and pins it**, then tells you which By default you get the pack's **own** defaults — the policies its author marked safe to switch on unattended — not everything it contains. ```bash -failproofai pack add acme/support-agent --category billing,git -failproofai pack add acme/support-agent --policy block-refunds -failproofai pack add acme/support-agent --all +failproofai policies add acme/support-agent --category billing,git +failproofai policies add acme/support-agent --policy block-refunds +failproofai policies add acme/support-agent --all ``` `--category` and `--policy` combine as a union (`--only` is accepted as a synonym for `--policy`). Re-adding at a newer version keeps whatever you chose rather than switching the rest back on. @@ -64,11 +68,11 @@ failproofai pack add acme/support-agent --all ## Manage what is on ```bash -failproofai policies # every source in one list, packs included -failproofai pack list # packs only, grouped by category +failproofai policies # every source in one list, packs included +failproofai policies show acme/support-agent # what a pack out there carries failproofai policies --uninstall block-refunds # turn one pack policy off failproofai policies --install block-refunds # and back on -failproofai pack remove acme/support-agent +failproofai policies remove acme/support-agent # uninstall the pack ``` A bare name means the **builtin** when one exists by that name. Name a pack's copy explicitly when you need to: @@ -83,13 +87,16 @@ If a pack ships a policy whose name is also an **enabled builtin**, the builtin ## Where the Failproof AI policies come from -`core` reads the copy vendored in the npm package. The same set is published as a GitHub release, which is what you install if you want a specific version: +The same place anyone else's do — a GitHub release, fetched and pinned like any other pack. The npm package carries no copy of them and there is no short name reserved for ours, so the set we publish is installed and versioned exactly the way yours would be: ```bash -failproofai pack add core # from this package, no network -failproofai pack add FailproofAI/policies # the same set, from its GitHub release +failproofai policies add FailproofAI/policies # newest release, pinned +failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # a specific one +failproofai policies show FailproofAI/policies --releases # everything it has published ``` +The one policy that does ship compiled into the package is `block-failproofai-commands`, the always-on guard: a pack may not declare `alwaysOn`, because a downloaded file no local command can switch off is the thing that guard exists to prevent. + ## What integrity does and does not buy `SHA256SUMS` ships in the same release as the artifact, so it is **not** a signature and proves nothing about who published it. What it does prove is that the bytes are the ones that release published — and because the digest is recorded when you add the pack and re-verified before every import, a pack cannot change under your machine afterwards. A repository that retags or replaces an asset stops loading instead of quietly running something else. @@ -98,7 +105,7 @@ At install time the pack is also **imported once** and checked against its own m ## When a pack will not load -A pack this machine was told to enforce and cannot run **denies** the events its missing policies covered, rather than allowing them silently. See [Failure behavior](/policies/failure-behavior). `failproofai pack list` names any pack in that state and exits non-zero. +A pack this machine was told to enforce and cannot run **denies** the events its missing policies covered, rather than allowing them silently — as `pack/failproofai-pack-unavailable`, which outranks the policies that did load so the deny is attributed to the missing pack rather than to whichever guard happened to fire first. The exception is `UserPromptSubmit`, which instructs instead: denying there would lock you out of the agent you need in order to fix it. See [Failure behavior](/policies/failure-behavior). ## Offline and mirrors diff --git a/docs/policies/publish-a-pack.mdx b/docs/policies/publish-a-pack.mdx index 54a977e10..4f5e8b026 100644 --- a/docs/policies/publish-a-pack.mdx +++ b/docs/policies/publish-a-pack.mdx @@ -4,11 +4,19 @@ description: "Ship your own policies as a GitHub release that anyone can install icon: "upload" --- -A pack is three files attached to a GitHub release. `failproofai pack build` writes all three from a policy file you already have. +A pack is three files attached to a GitHub release. `failproofai publish` writes all three from the policy files in front of it, creates the release, and uploads them. ## 1. Write the policies -One file, using the same API as any custom policy. Two extra fields matter for a pack: +Start from something that already works rather than a template with blanks: + +```bash +failproofai publish --init +``` + +That asks what the pack is called, writes `.mjs`, and stops — no network, no git, nothing published. The file it writes is one policy that already blocks `git push --force`. It refuses to overwrite a file that exists. + +Policies use the same API as any custom policy. Two extra fields matter for a pack: ```js import { customPolicies, deny, allow } from "failproofai"; @@ -17,7 +25,7 @@ customPolicies.add({ name: "block-refunds", description: "Refunds above the approved limit need a human", category: "Billing", // groups it, and is what --category selects on - defaultEnabled: true, // switched on by a plain `pack add` + defaultEnabled: true, // switched on by a plain `policies add` match: { events: ["PreToolUse"], tools: ["Bash"] }, fn: async (ctx) => String(ctx.toolInput?.command ?? "").includes("refund") @@ -26,66 +34,105 @@ customPolicies.add({ }); ``` -`defaultEnabled` defaults to **false** when you omit it. A plain `failproofai pack add` switches on only what you marked — installing a stranger's every policy unattended is not a decision the installer should make for its user. +`defaultEnabled` defaults to **false** when you omit it. A plain `failproofai policies add` switches on only what you marked — installing a stranger's every policy unattended is not a decision the installer should make for its user. + +Write as many files as you like; one per category reads well. Every file in the directory that registers policies is bundled into the single artifact a pack has to be. -The entry must be **one self-contained file**. Only the entry is digest-pinned, so a pack that imports local files could not honestly claim the digest covers what runs. Bundle first (`esbuild`, `bun build`, `rollup`) and build the pack from the bundle — `pack build` refuses a local import rather than shipping a promise it cannot keep. +Bundling needs **bun**. Without it, keep to one self-contained file. Either way the published entry must not import local files at install time: only the entry is digest-pinned, so a pack that reached for siblings could not honestly claim the digest covers what runs — and `publish` refuses one rather than shipping a promise it cannot keep. -## 2. Build the release assets +## 2. Try it here first + +Before anyone else can see it, enforce the file on this machine: ```bash -failproofai pack build ./policies.mjs \ - --id acme/support-agent \ - --version 1.0.0 \ - --out ./dist-pack +failproofai policies -i -c ./.mjs ``` -It writes three files, and validates every policy with the **loader's own rules** first — so a pack that could never install fails here, where you can fix it: +Any path, any filename. Ask your agent to do the thing you blocked and watch it get refused. Nothing is published and nobody else is affected. + +## 3. Publish it + +```bash +failproofai publish +``` + +It asks **where** only when nothing tells it — no git remote to read — and works the rest out. In order, stopping before it touches GitHub if anything is wrong: + +1. Finds the policy files here by **content** (files that import `failproofai` and call `customPolicies.add`), not by filename. Not recursive: publishing a fixture is worse than being asked. +2. Reads the repo from `git remote get-url origin`, in the **file's** directory rather than yours, and decides the version. +3. Finds your credential: `GITHUB_TOKEN`, `GH_TOKEN`, or `gh auth login`. It needs release-write and nothing else, and is never printed. +4. Creates the repository if it does not exist. +5. Builds the three assets, validating with the **loader's own rules** — the code that decides what may install on a stranger's machine. A pack that could never install fails here, where you can fix it. +6. Creates or reuses the release and uploads, replacing assets of the same name. | File | What it is | | --- | --- | | `failproofai-pack.json` | The manifest: id, version, effect, and one entry per policy | -| `failproofai-pack.mjs` | Your entry, verbatim | +| `failproofai-pack.mjs` | Your bundled entry | | `SHA256SUMS` | ` ` for the other two | +The asset names are fixed — they are what a consumer's CLI constructs its URLs from, with no API call and no discovery. + Refused at build time: an id that is not `publisher/name`, a policy name containing `/`, a policy declaring `alwaysOn`, a missing `description`, `category` or `match`, an entry that registers nothing, and an entry that imports local files. -## 3. Attach them to a release +Use `--dry-run` to build the assets and publish nothing; it needs no credential. -Tag the release with the same version you built, and attach all three files as release assets: +## How the version is decided -```bash -gh release create 1.0.0 \ - ./dist-pack/failproofai-pack.json \ - ./dist-pack/failproofai-pack.mjs \ - ./dist-pack/SHA256SUMS -``` +The **commit you are publishing from** — its short sha, twelve characters: `a1b2c3d4e5f6`. Nothing to pick and nothing to count, and it names exactly where the bytes came from. Publish the same source twice and you get the same version, because there is nothing to increment. -Anyone can now install it: +Twelve characters rather than git's seven: seven collides in a repository with enough objects, and a version that stops being unique means two artifacts claiming one name. The full sha is recorded beside it. -```bash -failproofai pack add acme/support-agent -``` +It is read from the tree in front of you, never from the repository's releases, so a fresh clone and an air-gapped machine compute the same answer and neither has to ask GitHub what happened before. -The asset names are fixed — they are what a consumer's CLI constructs its URLs from, with no API call and no discovery. +It **refuses rather than guessing** in two cases, because the version claims to name a commit and must not be minted where that is false: -## Shipping a new version +| Case | Why | +| --- | --- | +| No git checkout | There is no commit to name | +| Uncommitted changes | Those bytes are not in that commit | + +`--version` overrides both, and a tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. -Build with the new `--version`, tag a new release, attach the three assets again. Consumers run the same `pack add` and keep whatever subset they had chosen; a policy they turned off stays off across the upgrade. +A sha does not order. `failproofai policies show / --releases` is where you see which came first, newest at the top. -Changing a policy's **name** is a breaking change: a machine that had turned it off is turning off a name that no longer exists, and the new name arrives at whatever `defaultEnabled` says. + + The release also records the commit you published from, in the manifest and in the release notes. That is **provenance, not verification** — the artifact digest is still the only thing that decides whether the bytes are the ones that were published. It answers the question a digest cannot: which source produced them. + -## What your users are trusting +## The repository must be public -`SHA256SUMS` lives in the same release as the artifact, so it proves the bytes are the ones you published — not who you are. Whoever can write to the repository can write both files. Your users' protection is that the digest is pinned when they install, so what you shipped cannot change under them afterwards. +Installs are anonymous HTTPS with no credential to offer, so a private repository publishes to nobody. A repo `publish` creates is public for that reason; an existing private one is **refused**, before anything is built, created or uploaded. -Publish from a repository whose write access you control, and treat a pack release like publishing a package. +`--allow-private` publishes to one anyway, for somebody who will hand the three assets over another way — it still says plainly that no `policies add` can reach them. -## Observe before you enforce +Only the release matters. Installs read `releases/download//` and never touch your git tree; pushing the source is for humans. -A manifest may declare `"effect": "observe"`. Those policies run and their verdicts are **recorded and discarded** — nothing is blocked. It is the way to measure a new rule against real traffic before it can interrupt anyone's work. +## Install it -```json -{ "id": "acme/support-agent", "version": "1.1.0", "effect": "observe", "policies": [ ... ] } +```bash +failproofai policies add acme/support-agent # newest release, pinned +failproofai policies add acme/support-agent@a1b2c3d4e5f6 # that exact one +failproofai policies show acme/support-agent --releases # everything published ``` + +## Options + +| Flag | Use | +| --- | --- | +| `--init [file]` | Write a starter policy and stop | +| `--repo /` | Where to release it, created if missing | +| `--version ` | Name the version, instead of the commit it was built from | +| `--id ` | The pack's id. Defaults to `--repo` | +| `--tag ` | Release tag. Defaults to the version; a `v` prefix is fine | +| `--notes ` | Release notes | +| `--out ` | Where to write the assets. Default `dist-pack` | +| `--effect ` | `enforce` or `observe`. `observe` records and blocks nothing. Default `enforce` | +| `--dry-run` | Build the assets, publish nothing. No credential needed | +| `--allow-private` | Publish to an already-private repo anyway. Nobody can install it | + +## Shipping a new version + +Commit the change and run `failproofai publish` again — the new commit is the new version. Consumers run the same `failproofai policies add` and keep whatever subset they had chosen; a policy they turned off stays off across the upgrade. diff --git a/docs/reference/custom-agents.mdx b/docs/reference/custom-agents.mdx index 938a3b5b9..0568f7976 100644 --- a/docs/reference/custom-agents.mdx +++ b/docs/reference/custom-agents.mdx @@ -38,9 +38,7 @@ The package is installed as `failproofai-sdk` and imported in Python as `failpro ```bash - failproofai config \ - --connect https://app.befailproof.ai \ - --token + FAILPROOFAI_CLOUD_TOKEN= failproofai config failproofai config --status ``` diff --git a/docs/reference/failproof-cli.mdx b/docs/reference/failproof-cli.mdx index 49242ed3d..db3328f68 100644 --- a/docs/reference/failproof-cli.mdx +++ b/docs/reference/failproof-cli.mdx @@ -6,37 +6,46 @@ icon: "terminal" Install the local CLI with `npm install -g failproofai`. Run it with no arguments to open the local policy dashboard. -The package requires Node.js 20.9 or newer. Bun 1.3 or newer is supported for development and source installs. `failproofai configure` and `failproofai setup` are aliases for `failproofai config`; `failproofai p` is an alias for `failproofai policies`. +The package requires Node.js 20.9 or newer. Bun 1.3 or newer is supported for development and source installs. `failproofai configure` and `failproofai setup` are aliases for `failproofai config`. `failproofai policy`, `failproofai pack` and `failproofai p` are all spellings of `failproofai policies` — packs and single policies were three commands for one idea and are now one. The older spellings still work, with two exceptions: `pack list ` is now `policies show `, and `pack build` is now `publish`. ## Set up a machine ```bash npm install -g failproofai -failproofai config \ - --connect https://app.befailproof.ai \ - --token \ - --machine-label checkout-prod-01 -failproofai policies --install +export FAILPROOFAI_CLOUD_TOKEN="" +failproofai config # hooks, daemon, and Cloud in one pass +failproofai policies add FailproofAI/policies # choose what enforces failproofai config --status ``` +`failproofai config` is the whole of setup: it installs the `failproofaid` service (root once, via `sudo -n` — never an interactive password prompt), wires hooks into every agent CLI it finds, and connects to Cloud when a key is available. With no terminal — CI, a container, an agent driving it — it applies rather than asking, and exits 1 if anything it was asked to do did not happen. + +It chooses **no** policies. That is the second command's job, and without it a freshly configured machine enforces nothing but the always-on guard. + +Prefer the environment variable over `--token`: a command-line argument is readable from `ps` by every user on the box, and lands in shell history and CI logs. + + + `--connect ` enrols a machine that is **already set up**. It returns as soon as enrolment succeeds — it does not install the daemon and does not wire any hooks. Use plain `failproofai config` (or `failproofai config --token `) on a machine that has not been set up yet, or it will read as connected while collecting and enforcing nothing. + + Run `failproofai` without arguments to open the local policy dashboard. | Command | Outcome | | --- | --- | -| `failproofai config` | Run interactive machine setup | -| `failproofai config --connect --token ` | Connect Cloud ingestion and policy delivery | +| `failproofai config` | Set the machine up: agents, daemon, and Cloud when a key is present | +| `failproofai config --token ` | Set up and connect in one pass, asking nothing | +| `failproofai config --connect ` | Enrol a machine that is **already** set up — no daemon, no hooks | | `failproofai config --status` | Show connection, daemon, delivery, and pause state | | `failproofai policies` | List builtin, custom, convention, pack, and Cloud-managed policies | -| `failproofai policies --install` | Install hooks and enable policies | -| `failproofai policy add ` | Enable one policy — a builtin, or `:` from an installed pack | -| `failproofai policy remove ` | Disable one policy, same naming | +| `failproofai policies --install` | Wire hooks into your agent CLIs. Enables no policy on its own | +| `failproofai policies add ` | Enable one policy — a builtin, or `:` from an installed pack | +| `failproofai policies remove ` | Disable one policy, same naming | | `failproofai policies --uninstall` | Disable policies or remove harness hooks | -| `failproofai pack list` | List installed policy packs and every policy each one carries | -| `failproofai pack add ` | Install a policy pack from a GitHub release; no tag takes the newest and pins it | -| `failproofai pack add --bundled` | Install the builtin policies as a pack, from this package, with no network | -| `failproofai pack build ` | Build the three release assets for a pack of your own | -| `failproofai pack remove ` | Deactivate an installed pack | +| `failproofai policies show /` | What a pack carries, read from its manifest, before you take it | +| `failproofai policies show / --releases` | Every version it has published, and which one is here | +| `failproofai policies add ` | Install a policy pack from a GitHub release; no tag takes the newest and pins it | +| `failproofai publish` | Ship your own policies as a pack; `--init` writes one to start from | +| `failproofai policies remove ` | Uninstall a pack | | `failproofai audit` | Scan local agent history and open the local audit view | | `failproofai audit --schedule [days] --email
` | Schedule recurring local scans and email their findings | | `failproofai audit --status` | Show the report address, interval, and next scheduled scan | @@ -56,9 +65,11 @@ Run `failproofai` without arguments to open the local policy dashboard. | Flag | Use | | --- | --- | -| `--connect --token ` | Connect non-interactively | +| `--token ` | Set up and connect non-interactively; also read from `FAILPROOFAI_CLOUD_TOKEN` | +| `--url ` | Connect somewhere other than `app.befailproof.ai`; also read from `FAILPROOFAI_CLOUD_URL` | +| `--connect ` | Enrol only, on a machine already set up. Skips the daemon and every hook | | `--machine-id ` | Set the stable machine ID | -| `--machine-label ` | Set or change the dashboard label | +| `--machine-label ` | Rename a machine that is **already connected**. On its own it never runs setup, so give it after `failproofai config`, not during | | `--no-transcripts` | Send decisions without transcript content | | `--disconnect` | Stop Cloud policy pulls and event delivery | | `--status` | Show current machine state | @@ -73,7 +84,7 @@ Local pauses suspend builtin, custom, convention, and pack policies for one sess | Flag | Use | | --- | --- | -| `--install`, `-i` | Enable policies and install harness hooks | +| `--install`, `-i` | Install harness hooks. Names after it enable those policies; with none, no policy changes | | `--uninstall`, `-u` | Disable policies or remove hooks | | `--cli ` | Target one or more supported harnesses | | `--scope user\|project\|local\|all` | Choose the configuration scope; `all` is for uninstall | @@ -116,6 +127,8 @@ Use configuration files for persistent machine behavior. Environment variables a | Variable | Use | | --- | --- | +| `FAILPROOFAI_CLOUD_TOKEN` | The Cloud key, instead of `--token`. Prefer this: an argument is readable from `ps` and lands in shell history and CI logs | +| `FAILPROOFAI_CLOUD_URL` | The Cloud URL, instead of `--url`. The same variable the daemon reads | | `FAILPROOFAI_HOME` | Relocate the complete `~/.failproofai` layout | | `FAILPROOFAI_LOG_LEVEL` | Set local logging verbosity | | `FAILPROOFAI_HOOK_LOG_FILE` | Write hook diagnostics to a selected file | diff --git a/docs/reference/harnesses.mdx b/docs/reference/harnesses.mdx index ceafd3c9c..3876abb2e 100644 --- a/docs/reference/harnesses.mdx +++ b/docs/reference/harnesses.mdx @@ -65,15 +65,15 @@ Capabilities are version-sensitive. Re-test after upgrading an agent CLI, especi ![The Policy page used to verify policy decisions from a newly connected harness.](/images/dashboard/policy-observe.png) - Install hooks for every detected harness: + Set the machine up — this wires hooks for every detected harness, installs the daemon, and connects to Cloud: ```bash - failproofai config \ - --connect https://app.befailproof.ai \ - --token - failproofai policies --install + FAILPROOFAI_CLOUD_TOKEN= failproofai config + failproofai policies add FailproofAI/policies ``` + Setup enables no policy on its own, which is what the second command is for. + Or target named harnesses and a configuration scope: ```bash diff --git a/docs/reference/overview.mdx b/docs/reference/overview.mdx index a39656a7e..f3437a5d1 100644 --- a/docs/reference/overview.mdx +++ b/docs/reference/overview.mdx @@ -65,9 +65,7 @@ The generated [HTTP API reference](/reference/http-api) covers the public `/v1` --add events:add \ --add policies:pull - failproofai config \ - --connect https://app.befailproof.ai \ - --token + FAILPROOFAI_CLOUD_TOKEN= failproofai config failproofai flush --wait fp sessions --since 1h --env production diff --git a/docs/ru/audits/recipes.mdx b/docs/ru/audits/recipes.mdx index 5bfc2f4e9..cd4f0f0ad 100644 --- a/docs/ru/audits/recipes.mdx +++ b/docs/ru/audits/recipes.mdx @@ -1,5 +1,4 @@ --- ---- title: "Рецепты аудитов" description: "Начальные цели для типичных расследований сбоев агентов." icon: "book-open-check" diff --git a/docs/ru/audits/setup.mdx b/docs/ru/audits/setup.mdx index 499cc9937..623c926a5 100644 --- a/docs/ru/audits/setup.mdx +++ b/docs/ru/audits/setup.mdx @@ -1,5 +1,4 @@ --- ---- title: "Настройка аудита" description: "Определите цель аудита, популяцию сессий и контекст доказательств." icon: "sliders-horizontal" diff --git a/docs/ru/policies/publish-a-pack.mdx b/docs/ru/policies/publish-a-pack.mdx index 92fffcbdd..5298b4508 100644 --- a/docs/ru/policies/publish-a-pack.mdx +++ b/docs/ru/policies/publish-a-pack.mdx @@ -1,5 +1,4 @@ --- ---- title: "Опубликовать пак" description: "Распространяйте собственные политики как релиз на GitHub, который сможет установить любой." icon: "upload" diff --git a/docs/ru/sessions/assistant.mdx b/docs/ru/sessions/assistant.mdx index 54fe9e1bb..8831ed5b1 100644 --- a/docs/ru/sessions/assistant.mdx +++ b/docs/ru/sessions/assistant.mdx @@ -1,5 +1,4 @@ --- ---- title: "Failproof Assistant" description: "Анализируйте и управляйте Failproof AI на естественном языке: от вопросов и запросов до панелей управления и аудитов." icon: "message-square-text" diff --git a/docs/ru/start/integrations/crewai.mdx b/docs/ru/start/integrations/crewai.mdx index 67004ea67..378cdce16 100644 --- a/docs/ru/start/integrations/crewai.mdx +++ b/docs/ru/start/integrations/crewai.mdx @@ -1,5 +1,4 @@ --- ---- title: "CrewAI" sidebarTitle: "CrewAI" description: "Оркестрируйте команды, потоки, агентов по ролям, инструменты, память и обратную связь от пользователей." diff --git a/docs/start/quickstart.mdx b/docs/start/quickstart.mdx index 31f47f690..cde4bda55 100644 --- a/docs/start/quickstart.mdx +++ b/docs/start/quickstart.mdx @@ -42,11 +42,17 @@ export FAILPROOFAI_KEY="" ```bash npm install -g failproofai - failproofai config --connect https://app.befailproof.ai --token "$FAILPROOFAI_KEY" + FAILPROOFAI_CLOUD_TOKEN="$FAILPROOFAI_KEY" failproofai config ``` + That one command is the whole of setup: it installs the local daemon (root once), wires hooks into every agent CLI it finds, and connects this machine to Cloud. Passing the key through the environment rather than `--token` keeps it out of `ps`, shell history and CI logs. + Session transcripts are sent by default. Add `--no-transcripts` to report hook activity and policy decisions without transcript content. + + Do not reach for `failproofai config --connect ` here. That flag enrols a machine that is **already** set up and returns straight after — no daemon, no hooks — so the machine would appear in Cloud while collecting and enforcing nothing. + + If this machine already has agent history, preview and import the last seven days, then wait for delivery to finish. Skip this step on a new machine. ```bash @@ -57,10 +63,8 @@ export FAILPROOFAI_KEY="" Open **Sessions** in Failproof AI and select an imported session. - - This attaches Failproof AI to your harness and installs the 39 built-in policies. Use them to see local policy decisions and try enforcement before Failproof AI audits your sessions and writes policies for your agents. - - Let the installer detect your harness, or name one explicitly. Every one of the 12 is a valid `--cli` value — `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity`, `goose`. + + The previous step already wired every agent CLI it detected. Re-run it for one harness explicitly when you need to, or to add a harness installed afterwards. Every one of the 12 is a valid `--cli` value — `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity`, `goose`. ```bash failproofai policies --install --cli claude --scope user # a coding CLI @@ -69,6 +73,17 @@ export FAILPROOFAI_KEY="" Blocking a tool call before it runs is verified on all 12. Turn-end gates are verified on 8 — see [enforcement capability](/reference/harnesses#enforcement-capability) for the per-harness matrix. + + Wiring hooks enables no policy. Setup deliberately picks none — that decision is yours — so take a pack: + + ```bash + failproofai policies add FailproofAI/policies + ``` + + Ours is a pack like anyone else's: fetched from its GitHub release, checksum-verified, and pinned to the exact tag it resolved. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended. Read one before taking it with `failproofai policies show /`, and see [policy packs](/policies/packs) for taking only part of one. + + Until this runs, the only thing enforcing is `block-failproofai-commands` — the always-on guard that stops an agent switching Failproof AI off. `failproofai policies` lists what is on. + Follow [Run your first failure check](/start/first-audit). Use a concrete goal such as “find sessions where the agent retried a failing tool without changing its approach.” diff --git a/docs/start/setup.mdx b/docs/start/setup.mdx index b88165d66..b6a124cf8 100644 --- a/docs/start/setup.mdx +++ b/docs/start/setup.mdx @@ -6,7 +6,7 @@ icon: "waypoints" - Install hooks and policies on a machine. Use this when you need immediate guardrails without sending session data to Cloud. + Set a machine up and take a policy pack. Use this when you need immediate guardrails without sending session data to Cloud. Add centralized sessions, audits, online evaluations, dashboards, alerts, and fleet policy deployment. @@ -49,15 +49,23 @@ icon: "waypoints" ```bash - failproofai config --connect https://app.befailproof.ai \ - --token "$FAILPROOFAI_KEY" \ - --machine-label checkout-runner-01 + export FAILPROOFAI_CLOUD_TOKEN="$FAILPROOFAI_KEY" + failproofai config - failproofai policies --install --cli claude --scope user + failproofai policies add FailproofAI/policies + failproofai config --machine-label checkout-runner-01 failproofai config --status ``` + `failproofai config` does the whole setup — daemon, hooks for every agent CLI it finds, and the Cloud connection — then chooses no policies, which is what the second command is for. + + The label comes **after** connecting, not during: `failproofai config --machine-label ` renames a machine that is already connected, and on one that is not it does nothing but say so. + Add `--no-transcripts` when transcript content must remain local. + + + On a machine that is **already** set up, `failproofai config --connect ` enrols it and nothing else. Do not use that form for a first install: it returns before the daemon or any hook is in place, leaving a machine that shows up in Cloud but collects and enforces nothing. + diff --git a/docs/tr/admin/keys-and-permissions.mdx b/docs/tr/admin/keys-and-permissions.mdx index 1250cd0b1..08d6f7da6 100644 --- a/docs/tr/admin/keys-and-permissions.mdx +++ b/docs/tr/admin/keys-and-permissions.mdx @@ -1,5 +1,4 @@ --- ---- title: "Anahtarlar ve izinler" description: "Makineler, otomasyon ve operatörler için kapsamlı API anahtarları oluşturun." icon: "key-round" diff --git a/docs/tr/admin/usage.mdx b/docs/tr/admin/usage.mdx index be7adcaa7..76a728155 100644 --- a/docs/tr/admin/usage.mdx +++ b/docs/tr/admin/usage.mdx @@ -1,5 +1,4 @@ --- ---- title: "Kullanım" description: "Kuruluş tüketimini ve etkin faturalama dönemini inceleyin." icon: "chart-no-axes-combined" diff --git a/docs/tr/admin/users-and-organizations.mdx b/docs/tr/admin/users-and-organizations.mdx index de032c3c2..f082e362f 100644 --- a/docs/tr/admin/users-and-organizations.mdx +++ b/docs/tr/admin/users-and-organizations.mdx @@ -1,5 +1,4 @@ --- ---- title: "Kullanıcılar ve kuruluşlar" description: "Üyelik kontrolü ve her kuruluşun verilerini ve işlemlerini kapsamlı tutun." icon: "users" diff --git a/docs/tr/audits/alerts.mdx b/docs/tr/audits/alerts.mdx index ea9bc133d..bc735942a 100644 --- a/docs/tr/audits/alerts.mdx +++ b/docs/tr/audits/alerts.mdx @@ -1,5 +1,4 @@ --- ---- title: "Uyarılar" description: "Tekrarlayan sorunları algılayın ve olayı uygun müdahalelere yönlendirin." icon: "bell-ring" diff --git a/docs/tr/audits/overview.mdx b/docs/tr/audits/overview.mdx index 34eaa75dd..5b696362e 100644 --- a/docs/tr/audits/overview.mdx +++ b/docs/tr/audits/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "Denetimler" description: "Tanı izleri tek başına ortaya çıkarmayacak başarısızlıkları bulmak için belirlenmiş bir oturum popülasyonunu gözden geçirin." icon: "scan-search" diff --git a/docs/tr/audits/recipes.mdx b/docs/tr/audits/recipes.mdx index 9252fa273..7e7293bc0 100644 --- a/docs/tr/audits/recipes.mdx +++ b/docs/tr/audits/recipes.mdx @@ -1,5 +1,4 @@ --- ---- title: "Denetim reçeteleri" description: "Yaygın aracı arıza soruşturmaları için başlangıç hedefleri." icon: "book-open-check" diff --git a/docs/tr/policies/builtin-catalog.mdx b/docs/tr/policies/builtin-catalog.mdx index dbf1755e1..ba6159f5e 100644 --- a/docs/tr/policies/builtin-catalog.mdx +++ b/docs/tr/policies/builtin-catalog.mdx @@ -1,5 +1,4 @@ --- ---- title: "Dahili politika kataloğu" description: "Her bir Failproof AI dahili politikasını, tetikleyicisini, önerilen durumunu ve yapılandırılabilir parametrelerini gözden geçirin." icon: "list-checks" diff --git a/docs/tr/reference/cloud-cli.mdx b/docs/tr/reference/cloud-cli.mdx index d68139bce..fa491b25b 100644 --- a/docs/tr/reference/cloud-cli.mdx +++ b/docs/tr/reference/cloud-cli.mdx @@ -1,5 +1,4 @@ --- ---- title: "Failproof Cloud CLI" description: "Failproof AI Cloud'u fp ile sorgulamak ve yönetmek için kapsamlı referans." icon: "cloud-cog" diff --git a/docs/tr/reference/evaluator-sdk.mdx b/docs/tr/reference/evaluator-sdk.mdx index d1567ed6b..ff1efbee2 100644 --- a/docs/tr/reference/evaluator-sdk.mdx +++ b/docs/tr/reference/evaluator-sdk.mdx @@ -1,5 +1,4 @@ --- ---- title: "Evaluator SDK" description: "Failproof AI oturumlarını senkron veya asenkron olarak puanlayan bir hizmet oluşturun." icon: "gauge" diff --git a/docs/tr/reference/harnesses.mdx b/docs/tr/reference/harnesses.mdx index 28694dd3b..440450f50 100644 --- a/docs/tr/reference/harnesses.mdx +++ b/docs/tr/reference/harnesses.mdx @@ -1,5 +1,4 @@ --- ---- title: "Agent araçları" description: "12 desteklenen agent aracında oturumları yakalayın ve politikaları uygulatın." icon: "plug-zap" diff --git a/docs/tr/reference/policy-sdk.mdx b/docs/tr/reference/policy-sdk.mdx index b297dc823..ef8e6fbf5 100644 --- a/docs/tr/reference/policy-sdk.mdx +++ b/docs/tr/reference/policy-sdk.mdx @@ -1,5 +1,4 @@ --- ---- title: "Özel politikalar" description: "Aracılarınıza özgü hatalar için JavaScript veya TypeScript politikaları yazın, test edin ve dağıtın." icon: "shield-plus" diff --git a/docs/tr/reference/troubleshooting.mdx b/docs/tr/reference/troubleshooting.mdx index 45a27e39a..b16640cdd 100644 --- a/docs/tr/reference/troubleshooting.mdx +++ b/docs/tr/reference/troubleshooting.mdx @@ -1,5 +1,4 @@ --- ---- title: "Sorun Giderme" description: "Eksik oturumları, eksik politikaları, başarısız teslimatı ve engellenen aracı işlemlerini tanılayın." icon: "wrench" diff --git a/docs/tr/sessions/overview.mdx b/docs/tr/sessions/overview.mdx index 29db18368..71d77f27b 100644 --- a/docs/tr/sessions/overview.mdx +++ b/docs/tr/sessions/overview.mdx @@ -1,5 +1,4 @@ --- ---- title: "Oturumlar" description: "Bir aracı çalışmasının tam kaydıyla başlayın." icon: "workflow" diff --git a/docs/tr/sessions/policy-decisions.mdx b/docs/tr/sessions/policy-decisions.mdx index e815d420e..d77fd8f4a 100644 --- a/docs/tr/sessions/policy-decisions.mdx +++ b/docs/tr/sessions/policy-decisions.mdx @@ -1,5 +1,4 @@ --- ---- title: "İlke kararları" description: "Hangi ilkelerin değerlendirildiğini, engellediğini, yönlendirdiğini veya izin verdiğini görün." icon: "shield-check" diff --git a/docs/tr/start/concepts.mdx b/docs/tr/start/concepts.mdx index 2a34a09d6..34f238916 100644 --- a/docs/tr/start/concepts.mdx +++ b/docs/tr/start/concepts.mdx @@ -1,5 +1,4 @@ --- ---- title: "Temel kavramlar" description: "Failproof AI genelinde kullanılan kavramların küçük bir seti." icon: "boxes" diff --git a/docs/tr/start/quickstarts/langchain.mdx b/docs/tr/start/quickstarts/langchain.mdx index 43a51a2a2..07e30b83a 100644 --- a/docs/tr/start/quickstarts/langchain.mdx +++ b/docs/tr/start/quickstarts/langchain.mdx @@ -1,5 +1,4 @@ --- ---- title: "LangChain ve LangGraph" description: "Kurun, enstrüman edin ve ilk izinizi görün." icon: "/images/frameworks/langchain.svg" diff --git a/docs/vi/admin/settings-and-security.mdx b/docs/vi/admin/settings-and-security.mdx index 5993dc912..ee694e80a 100644 --- a/docs/vi/admin/settings-and-security.mdx +++ b/docs/vi/admin/settings-and-security.mdx @@ -1,5 +1,4 @@ --- ---- title: "Cài đặt và bảo mật" description: "Định cấu hình các giá trị hoạt động cụ thể và đưa ra những lựa chọn có chủ đích về dữ liệu của agent." icon: "lock-keyhole" diff --git a/docs/vi/audits/agent-contracts.mdx b/docs/vi/audits/agent-contracts.mdx index 299a5ec56..4f7344995 100644 --- a/docs/vi/audits/agent-contracts.mdx +++ b/docs/vi/audits/agent-contracts.mdx @@ -1,5 +1,4 @@ --- ---- title: "Ngữ cảnh agent" description: "Cho các audit biết mỗi agent phải làm gì, tạo ra cái gì, và không được phép làm gì." icon: "bot" diff --git a/docs/vi/audits/local-audit.mdx b/docs/vi/audits/local-audit.mdx index a8db5db00..2021a704a 100644 --- a/docs/vi/audits/local-audit.mdx +++ b/docs/vi/audits/local-audit.mdx @@ -1,5 +1,4 @@ --- ---- title: "Kiểm toán lịch sử agent cục bộ" description: "Quét lịch sử CLI agent được hỗ trợ ngoại tuyến và xem xét hành vi rủi ro hoặc lãng phí cục bộ." icon: "laptop-minimal-check" diff --git a/docs/vi/audits/run.mdx b/docs/vi/audits/run.mdx index fd774facc..d893a96ea 100644 --- a/docs/vi/audits/run.mdx +++ b/docs/vi/audits/run.mdx @@ -1,5 +1,4 @@ --- ---- title: "Chạy và xem xét một audit" description: "Chạy một audit, xác minh phạm vi bao phủ của nó, và kiểm tra các phát hiện kết quả." icon: "play" diff --git a/docs/vi/audits/setup.mdx b/docs/vi/audits/setup.mdx index 11557ee9e..c61be6e3d 100644 --- a/docs/vi/audits/setup.mdx +++ b/docs/vi/audits/setup.mdx @@ -1,5 +1,4 @@ --- ---- title: "Thiết lập một audit" description: "Xác định mục tiêu audit, dân số phiên, và ngữ cảnh bằng chứng." icon: "sliders-horizontal" diff --git a/docs/vi/index.mdx b/docs/vi/index.mdx index 045fcc0b6..46cf81ccc 100644 --- a/docs/vi/index.mdx +++ b/docs/vi/index.mdx @@ -1,5 +1,4 @@ --- ---- title: "Làm cho agent của bạn không thể thất bại" description: "Khả năng quan sát và thực thi cho mọi công cụ mà agent chạy — CLI mã hóa, cổng trò chuyện, trợ lý tự lưu trữ và agent được đo lường của riêng bạn." icon: "shield-check" diff --git a/docs/vi/policies/failure-behavior.mdx b/docs/vi/policies/failure-behavior.mdx index 8c75d7c90..3a64aa423 100644 --- a/docs/vi/policies/failure-behavior.mdx +++ b/docs/vi/policies/failure-behavior.mdx @@ -1,5 +1,4 @@ --- ---- title: "Hành vi khi gặp sự cố" description: "Hiểu điều gì xảy ra khi đánh giá chính sách hoặc daemon cục bộ không khả dụng." icon: "shield-alert" diff --git a/docs/vi/sessions/evaluations.mdx b/docs/vi/sessions/evaluations.mdx index 731123b9b..821a1cd15 100644 --- a/docs/vi/sessions/evaluations.mdx +++ b/docs/vi/sessions/evaluations.mdx @@ -1,5 +1,4 @@ --- ---- title: "Đánh giá trực tuyến" description: "Chấm điểm các phiên làm việc trực tiếp và đã hoàn thành để đánh giá chất lượng, tuân thủ, chi phí và độ trễ." icon: "gauge" diff --git a/docs/vi/start/integrations.mdx b/docs/vi/start/integrations.mdx index 134d131a9..bdc9ce35c 100644 --- a/docs/vi/start/integrations.mdx +++ b/docs/vi/start/integrations.mdx @@ -1,5 +1,4 @@ --- ---- title: "Thiết bị cho agent của bạn" sidebarTitle: "Frameworks" description: "Kết nối bất kỳ framework agent được hỗ trợ nào với Failproof AI chỉ bằng một lệnh gọi." diff --git a/docs/vi/start/setup.mdx b/docs/vi/start/setup.mdx index 4223bb0e6..76290fdf3 100644 --- a/docs/vi/start/setup.mdx +++ b/docs/vi/start/setup.mdx @@ -1,5 +1,4 @@ --- ---- title: "Chọn cách thiết lập của bạn" description: "Chọn thực thi cục bộ, Failproof AI Cloud, hoặc triển khai doanh nghiệp." icon: "waypoints" diff --git a/scripts/translate-docs/validate-translation.ts b/scripts/translate-docs/validate-translation.ts index 632343028..181133715 100644 --- a/scripts/translate-docs/validate-translation.ts +++ b/scripts/translate-docs/validate-translation.ts @@ -11,6 +11,11 @@ * - Frontmatter YAML (class A): the model re-emits an inner `"` unescaped into * a double-quoted `title:`/`description:` value, breaking the YAML. This is * the class that failed run 29575781632; `findFrontmatterError` catches it. + * - Empty block (class A2): the model emits a second opening `---`, so the + * block Mintlify reads closes before any key is inside it and the whole + * frontmatter renders as body text. YAML calls a leading `---` a + * document-start marker and parses it clean, so class A is blind to this; + * `mintlifyFrontmatterBlock` is the second view that is not. * - Key parity (class B): the model drops the frontmatter block entirely, or * renames a key. A dropped block is still *valid YAML* (mintlify tolerates * it, deriving the title from the slug), so only comparing against the @@ -52,6 +57,30 @@ function frontmatterKeys(page: string): string[] | null { } } +/** + * The frontmatter block as MINTLIFY reads it: opened by a leading `---` line, + * closed by the FIRST line after it that is exactly `---`. `null` when the page + * does not open with a delimiter at all. + * + * Deliberately NOT reusing `FRONTMATTER_RE`. That matcher exists to feed + * `YAML.parse`, and YAML reads a bare `---` as a document-START marker rather + * than as a terminator — so a page beginning `---\n---\ntitle: …` parses there + * as a perfectly clean `{title: …}` while Mintlify closes the block on line 2 + * and renders every key as body text. The reader gets a literal `title: "…"` at + * the top of the page and no title on it. + * + * That is not hypothetical: 102 published pages across seven locales shipped + * exactly that way, invisible to every other check in this file, because both + * of them asked YAML. The two views have to be compared, never shared. + */ +function mintlifyFrontmatterBlock(page: string): string | null { + const lines = page.split(/\r?\n/); + if (lines[0]?.trim() !== "---") return null; + const close = lines.findIndex((line, i) => i > 0 && line.trim() === "---"); + if (close < 0) return null; + return lines.slice(1, close).join("\n"); +} + /** * A ±2-line window around `line` (1-based), the failing line prefixed `> ` and * its neighbours ` `. Empty string when `line` is undefined. @@ -93,6 +122,21 @@ export async function findTranslationError( ); } + // Class A2: a block that is EMPTY as Mintlify delimits it. A stray opening + // delimiter (`---\n---\ntitle: …`) is the shape that does this, and it is + // invisible to everything above — see `mintlifyFrontmatterBlock`. Checked for + // every source shape, like the YAML above: the model adding this to a + // frontmatter-less page breaks that page just as thoroughly. + const mintlifyBlock = mintlifyFrontmatterBlock(rendered); + if (mintlifyBlock !== null && mintlifyBlock.trim() === "") { + return ( + "The YAML frontmatter block is empty. The page opens with `---` and the " + + "very next line is `---` again, which closes the block before any key is " + + "in it — every `title:`/`description:`/`icon:` line below then renders as " + + "body text and the page has no title. Emit exactly one opening `---`." + ); + } + const sourceKeys = frontmatterKeys(source); if (sourceKeys) { // The source has frontmatter, so the translation must carry the same keys. From f063cf561a20817c1315b5bf180a94c263d48394 Mon Sep 17 00:00:00 2001 From: chhhee10 Date: Tue, 8 Sep 2026 19:03:40 +0530 Subject: [PATCH 2/8] Match the docs' own voice and restore what the rewrite dropped MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Checked against the live site, which is the post-#773 baseline this branch edits. Three problems, all mine. The publish-a-pack rewrite silently dropped two sections. It was a whole-file replace written after reading only the first 75 of 91 lines, so `What your users are trusting` and `Observe before you enforce` went with it, along with the note that renaming a policy is a breaking change. The observe section matters most: observe-before-enforce is the rollout story the landing page's Session → Audit → Finding → Issue → Policy narrative ends on, and dropping it removed a positioning concept rather than a stale command. Restored, with `"effect": "observe"` now pointing at the `--effect observe` flag that sets it. Three sentences had drifted into the CLI's own register — inward-looking rationale about why WE built it this way ("ours is a pack like anyone else's", "no short name only we can use", twice more), where the surrounding pages state what a thing does for the reader. The baseline uses that self-referential framing twice in 68 pages; this branch had introduced it three times in two. Rewritten to the page's register, and the same for the clipped help-text phrasings that read as pasted output rather than prose ("Not recursive: publishing a fixture is worse than being asked", "A sha does not order"). The quickstart lost a positioning sentence along with the false claim it sat beside — "try enforcement before Failproof AI audits your sessions and writes policies for your agents" is the same observe → audit → policy loop, and only the "installs the 39 built-in policies" half was wrong. Restored. Also trimmed the version-scheme section, which had grown implementation trivia (why twelve sha characters rather than git's seven) that no publisher needs. Design checks against the true HEAD~1 baseline rather than a no-op stash: callouts 39 Warning / 14 Note across 68 English pages, several pages already carrying two or three Warnings, so +3/+2 here is in keeping; headings stay sentence case; no untouched page now contradicts an edited one — every surviving `policies --install ` names policies, which does enable them. validate:mdx 1034 pages clean. --- docs/policies/packs.mdx | 6 +++--- docs/policies/publish-a-pack.mdx | 32 +++++++++++++++++++++++--------- docs/start/quickstart.mdx | 4 +++- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/policies/packs.mdx b/docs/policies/packs.mdx index 870439776..c3418df84 100644 --- a/docs/policies/packs.mdx +++ b/docs/policies/packs.mdx @@ -12,7 +12,7 @@ A pack is a set of policies published as a GitHub release. One command installs failproofai policies add FailproofAI/policies ``` -That installs the set we publish, fetched and pinned from its own GitHub release — ours is a pack like anyone else's, typed the same way, with no short name only we can use. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended; the rest are listed for you to choose. Take part of it instead: +That fetches the Failproof AI set from its GitHub release and pins it, the same way any other pack is installed. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended; the rest are listed for you to choose. Take part of it instead: ```bash failproofai policies add FailproofAI/policies --policy block-rm-rf # one, or a comma-separated few @@ -87,7 +87,7 @@ If a pack ships a policy whose name is also an **enabled builtin**, the builtin ## Where the Failproof AI policies come from -The same place anyone else's do — a GitHub release, fetched and pinned like any other pack. The npm package carries no copy of them and there is no short name reserved for ours, so the set we publish is installed and versioned exactly the way yours would be: +A GitHub release, fetched and pinned like any other pack. The npm package carries no copy of them, so naming a specific version works exactly as it does for anybody's pack: ```bash failproofai policies add FailproofAI/policies # newest release, pinned @@ -95,7 +95,7 @@ failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # a specific one failproofai policies show FailproofAI/policies --releases # everything it has published ``` -The one policy that does ship compiled into the package is `block-failproofai-commands`, the always-on guard: a pack may not declare `alwaysOn`, because a downloaded file no local command can switch off is the thing that guard exists to prevent. +One policy does ship compiled into the package: `block-failproofai-commands`, the always-on guard. A pack may not declare `alwaysOn`, precisely because a downloaded file that no local command can switch off is what that guard exists to prevent. ## What integrity does and does not buy diff --git a/docs/policies/publish-a-pack.mdx b/docs/policies/publish-a-pack.mdx index 4f5e8b026..b8fe61264 100644 --- a/docs/policies/publish-a-pack.mdx +++ b/docs/policies/publish-a-pack.mdx @@ -58,13 +58,13 @@ Any path, any filename. Ask your agent to do the thing you blocked and watch it failproofai publish ``` -It asks **where** only when nothing tells it — no git remote to read — and works the rest out. In order, stopping before it touches GitHub if anything is wrong: +It works out where to publish, what to bundle and what version to call it, and only asks when nothing in the repository tells it. In order, stopping before it touches GitHub if anything is wrong: -1. Finds the policy files here by **content** (files that import `failproofai` and call `customPolicies.add`), not by filename. Not recursive: publishing a fixture is worse than being asked. +1. Finds the policy files here by **content** — those that import `failproofai` and call `customPolicies.add` — rather than by filename, so it finds `guards.mjs` and ignores an unrelated `policies.mjs`. It does not descend into subdirectories, so a test fixture is never swept up by accident. 2. Reads the repo from `git remote get-url origin`, in the **file's** directory rather than yours, and decides the version. 3. Finds your credential: `GITHUB_TOKEN`, `GH_TOKEN`, or `gh auth login`. It needs release-write and nothing else, and is never printed. 4. Creates the repository if it does not exist. -5. Builds the three assets, validating with the **loader's own rules** — the code that decides what may install on a stranger's machine. A pack that could never install fails here, where you can fix it. +5. Builds the three assets, validating them with the **loader's own rules** — the same code that decides what may install on a stranger's machine — so a pack that could never install fails here, where you can still fix it. 6. Creates or reuses the release and uploads, replacing assets of the same name. | File | What it is | @@ -81,13 +81,11 @@ Use `--dry-run` to build the assets and publish nothing; it needs no credential. ## How the version is decided -The **commit you are publishing from** — its short sha, twelve characters: `a1b2c3d4e5f6`. Nothing to pick and nothing to count, and it names exactly where the bytes came from. Publish the same source twice and you get the same version, because there is nothing to increment. +The version is the **commit you are publishing from** — its short sha, twelve characters: `a1b2c3d4e5f6`. There is nothing to pick and nothing to increment, and the version names exactly where the bytes came from, so publishing the same source twice gives the same version. -Twelve characters rather than git's seven: seven collides in a repository with enough objects, and a version that stops being unique means two artifacts claiming one name. The full sha is recorded beside it. +It is read from the tree in front of you, never from the repository's releases, so a fresh clone and an air-gapped machine compute the same answer without asking GitHub what happened before. -It is read from the tree in front of you, never from the repository's releases, so a fresh clone and an air-gapped machine compute the same answer and neither has to ask GitHub what happened before. - -It **refuses rather than guessing** in two cases, because the version claims to name a commit and must not be minted where that is false: +Because the version claims to name a commit, it **refuses rather than guessing** where that would be false: | Case | Why | | --- | --- | @@ -96,7 +94,7 @@ It **refuses rather than guessing** in two cases, because the version claims to `--version` overrides both, and a tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. -A sha does not order. `failproofai policies show / --releases` is where you see which came first, newest at the top. +A sha carries no ordering of its own, so use `failproofai policies show / --releases` to see which release came first — newest at the top. The release also records the commit you published from, in the manifest and in the release notes. That is **provenance, not verification** — the artifact digest is still the only thing that decides whether the bytes are the ones that were published. It answers the question a digest cannot: which source produced them. @@ -136,3 +134,19 @@ failproofai policies show acme/support-agent --releases # everything published ## Shipping a new version Commit the change and run `failproofai publish` again — the new commit is the new version. Consumers run the same `failproofai policies add` and keep whatever subset they had chosen; a policy they turned off stays off across the upgrade. + +Changing a policy's **name** is a breaking change: a machine that had turned it off is turning off a name that no longer exists, and the new name arrives at whatever `defaultEnabled` says. + +## What your users are trusting + +`SHA256SUMS` lives in the same release as the artifact, so it proves the bytes are the ones you published — not who you are. Whoever can write to the repository can write both files. Your users' protection is that the digest is pinned when they install, so what you shipped cannot change under them afterwards. + +Publish from a repository whose write access you control, and treat a pack release like publishing a package. + +## Observe before you enforce + +A manifest may declare `"effect": "observe"` — `failproofai publish --effect observe` is what sets it. Those policies run and their verdicts are **recorded and discarded** — nothing is blocked. It is the way to measure a new rule against real traffic before it can interrupt anyone's work. + +```json +{ "id": "acme/support-agent", "version": "a1b2c3d4e5f6", "effect": "observe", "policies": [ ... ] } +``` diff --git a/docs/start/quickstart.mdx b/docs/start/quickstart.mdx index cde4bda55..6620f6be5 100644 --- a/docs/start/quickstart.mdx +++ b/docs/start/quickstart.mdx @@ -80,7 +80,9 @@ export FAILPROOFAI_KEY="" failproofai policies add FailproofAI/policies ``` - Ours is a pack like anyone else's: fetched from its GitHub release, checksum-verified, and pinned to the exact tag it resolved. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended. Read one before taking it with `failproofai policies show /`, and see [policy packs](/policies/packs) for taking only part of one. + The pack is fetched from its GitHub release, checksum-verified, and pinned to the exact tag it resolved. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended. Use them to see local policy decisions and try enforcement before Failproof AI audits your sessions and writes policies for your agents. + + Read any pack before taking it with `failproofai policies show /`, and see [policy packs](/policies/packs) for taking only part of one. Until this runs, the only thing enforcing is `block-failproofai-commands` — the always-on guard that stops an agent switching Failproof AI off. `failproofai policies` lists what is on. From 0c8bd42990e57de4d0e01c6ece6bcf22160feded Mon Sep 17 00:00:00 2001 From: chhhee10 Date: Tue, 8 Sep 2026 19:22:03 +0530 Subject: [PATCH 3/8] Reconcile the builtin pages with the catalog they describe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `builtin.mdx` taught `policy add` with no mention that policies arrive in a pack at all, which read oddly beside every other page now saying setup selects nothing. Fixing that surfaced three harder errors on it and the catalog page it links to. THE COUNT. It claimed 40. `POLICY_CATALOG` and `BUILTIN_POLICIES` both hold 39, and the catalog page documents 39 names that diff clean against source — so 40 came from nowhere. 38 is also right, for a different question: a pack may not declare `alwaysOn`, so `block-failproofai-commands` cannot travel that lane and the pack carries 38. Both numbers were already in the docs, unexplained and a page apart. They are now stated together, once, on the page about builtins: 39 exist, 38 are selectable, the 39th is the always-on guard. Also recorded that `--beta` currently adds nothing, since no policy carries the flag. THE BASELINE, which is the one that mattered. The catalog listed fourteen policies as "the guided setup's recommended selection". Setup has no selection — it enables none — and of those fourteen, `block-rm-rf`, `block-force-push` and `block-secrets-write` are NOT `defaultEnabled`. Anyone reading that page believed their two most-wanted guards were on when a bare pack install leaves them off. The list is now the manifest's real 10, attributed to the pack rather than to setup, and the three absentees are called out by name with the command to enable each. THE SANITIZERS, again. Five rows promised redaction "before the model sees them" while the same row named `PostToolUse` as the trigger — the contradiction sitting in one line. Same finding as #669 and the same fix already applied to the README: they report a secret that has already reached the model. Reworded, with a note pointing at the `PreToolUse` guards that stop the read instead. Counts verified by importing the real modules, not by grepping: 39 catalog, 39 runtime, 1 alwaysOn, 0 beta, 11 defaultEnabled of which 10 are not the guard — which is where pack-store's "10 of 38" comes from. validate:mdx 1034 pages clean; both pages render. --- CHANGELOG.md | 3 +++ docs/policies/builtin-catalog.mdx | 41 +++++++++++++++++++------------ docs/policies/builtin.mdx | 24 +++++++++++++----- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index debb238db..c363cc5d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ - `--machine-label` is documented in the order it actually works. On `config` it is *always* a rename — the branch that reads it fires whenever `--connect` and `--disconnect` are absent, so `failproofai config --token --machine-label ` never reaches the wizard and answers "this machine is not connected … so it has no name to change". Setup comes first, the label after (#PR) - `sanitize-api-keys` is out of the README's "What it stops" table. It matches `PostToolUse`, which `ENFORCEMENT_CAPABILITY` classes observe-only, so the tool has already run and its output has already reached the model: it reports a secret rather than keeping one out of the context (#669). The nine policies left in that table are all `PreToolUse` and do gate the call, on every harness (#PR) - 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it (#PR) +- The builtin pages no longer disagree with the catalog about how many policies there are, or which of them are on. `builtin.mdx` claimed **40**; `POLICY_CATALOG` and `BUILTIN_POLICIES` both hold **39**, and the catalog page documents 39 names matching source exactly. Both numbers a reader meets are now stated together and once: 39 exist, **38** are selectable, and the 39th is `block-failproofai-commands` — always on, excluded from the pack because a pack may not declare `alwaysOn`. `--beta` is documented as adding nothing, because no policy is currently marked beta (#PR) +- The catalog's "Recommended baseline" listed **14** policies as the guided setup's selection. Setup selects nothing, the list is the pack manifest's own 10 defaults, and three of the fourteen — `block-rm-rf`, `block-force-push` and `block-secrets-write` — are **not** among them. Those are the guards a reader is most likely to assume are on, so the corrected list is followed by a warning naming all three and the command to enable each (#PR) +- The five `sanitize-*` rows in the catalog said they redact secrets "before the model sees them" while the same row named `PostToolUse` as the trigger. They match an observation-only event: the tool has already run and its output has already reached the model, so they report a secret rather than withhold one, and they are not a data-loss control (#669). Reworded, with a note pointing at the `PreToolUse` guards that do stop the read (#PR) - `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly: 1020 entries, 1020 files, nothing orphaned and nothing dangling (#PR) ### Dependencies diff --git a/docs/policies/builtin-catalog.mdx b/docs/policies/builtin-catalog.mdx index 75029a507..78f3cd6ba 100644 --- a/docs/policies/builtin-catalog.mdx +++ b/docs/policies/builtin-catalog.mdx @@ -8,39 +8,48 @@ The installed package is the source of truth for policy availability. Run `failp ## Recommended baseline -The guided setup's recommended selection currently enables secret sanitizers, environment protections, self-protection, catastrophic-command guards, and protected-branch safety: +Setting up a machine enables **no** policy. The baseline below is the Failproof AI pack's own default selection — the 10 its manifest marks as safe to switch on unattended, applied when you run `failproofai policies add FailproofAI/policies` with no flags: ```text sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content +sanitize-connection-strings sanitize-private-key-content sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push +block-env-files block-sudo +block-curl-pipe-sh block-push-master ``` -`block-failproofai-commands` is **always on**. It is listed above for -completeness, but it registers on every evaluation whether or not it appears in -your enabled set, and it cannot be disabled or paused — a guard against the -agent switching off enforcement that the agent can switch off is not a guard. +`block-failproofai-commands` enforces alongside them without being one of them. It is **always on**: it registers on every evaluation whether or not it appears in your enabled set, and it cannot be disabled or paused — a guard against the agent switching off enforcement that the agent can switch off is not a guard. -Recommended is deliberately narrower than **Everything**. Infrastructure and workflow policies can interrupt valid work and should be enabled for the repositories and machines that need them. + + `block-rm-rf`, `block-force-push` and `block-secrets-write` are **not** in the baseline. They are among the most-wanted guards and it is reasonable to assume otherwise, so enable them deliberately: + + ```bash + failproofai policies add block-rm-rf + failproofai policies add block-force-push + failproofai policies add block-secrets-write + ``` + + +The baseline is deliberately narrower than **Everything**. Destructive-command, infrastructure and workflow policies can interrupt valid work, so they are opt-in per repository and machine — `--all` takes the lot. ## Secrets and environment | Policy | Trigger | Outcome | | --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Redact JWTs from tool output before the model sees them. | -| `sanitize-api-keys` | `PostToolUse` | Redact common OpenAI, Anthropic, GitHub, AWS, Stripe, and Google keys. | -| `sanitize-connection-strings` | `PostToolUse` | Redact database connection strings containing credentials. | -| `sanitize-private-key-content` | `PostToolUse` | Redact PEM private-key bodies. | -| `sanitize-bearer-tokens` | `PostToolUse` | Redact authorization bearer tokens. | +| `sanitize-jwt` | `PostToolUse` | Report JWTs found in tool output. | +| `sanitize-api-keys` | `PostToolUse` | Report common OpenAI, Anthropic, GitHub, AWS, Stripe, and Google keys. | +| `sanitize-connection-strings` | `PostToolUse` | Report database connection strings containing credentials. | +| `sanitize-private-key-content` | `PostToolUse` | Report PEM private-key bodies. | +| `sanitize-bearer-tokens` | `PostToolUse` | Report authorization bearer tokens. | | `protect-env-vars` | `PreToolUse` on shell tools | Block commands that dump environment variables. | | `block-env-files` | `PreToolUse` | Block reads and writes of `.env` files. | | `block-read-outside-cwd` | `PreToolUse` on read, glob, grep, or shell tools | Keep reads inside the session working directory. | | `block-secrets-write` | `PreToolUse` on write tools | Block writes to common secret-key and credential filenames. | + + The five `sanitize-*` policies run on `PostToolUse`, which is **observation only**: the tool has already run and its output has already reached the model. They tell you a secret appeared in tool output — they do not keep it out of the context, and they are not a data-loss control. Use `block-env-files`, `protect-env-vars` and `block-secrets-write`, which gate on `PreToolUse`, to stop the read happening at all. + + ## Dangerous commands and infrastructure | Policy | Trigger | Outcome | diff --git a/docs/policies/builtin.mdx b/docs/policies/builtin.mdx index 1dd24e61b..7b92d0c12 100644 --- a/docs/policies/builtin.mdx +++ b/docs/policies/builtin.mdx @@ -6,6 +6,16 @@ icon: "library" Builtin policies cover secret handling, environment files, destructive shell commands, protected branches, cloud and infrastructure tools, package publishing, repeated calls, and end-of-task workflow checks. +There are **39** of them, and **38** are yours to choose from. The odd one out is `block-failproofai-commands`, which is always on and cannot be switched off or paused — an agent that can pause enforcement can switch off every other policy, so that guard ships compiled into the package rather than arriving in a pack. + +They reach a machine as a **pack**. Setting up wires the hooks and selects nothing, so take one before any of the 38 enforce: + +```bash +failproofai policies add FailproofAI/policies +``` + +That switches on the 10 the pack's manifest marks as safe to enable unattended and lists the rest for you to pick from. See [policy packs](/policies/packs) for taking only part of one. + ## Enable and verify a builtin policy @@ -19,15 +29,15 @@ Builtin policies cover secret handling, environment files, destructive shell com ```bash failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project + failproofai policies add block-rm-rf --cli claude --scope project failproofai config --status ``` - Remove it with `failproofai policy remove block-rm-rf --cli claude --scope project`. + Remove it with `failproofai policies remove block-rm-rf --cli claude --scope project`. -List the policies available in your installed version: +List every policy on this machine and whether it is on: ```bash failproofai policies @@ -36,9 +46,11 @@ failproofai policies Enable one policy for a project: ```bash -failproofai policy add block-rm-rf --scope project +failproofai policies add block-rm-rf --scope project ``` +A name with no slash is a policy; anything with one is a pack source, so there is nothing to disambiguate. + Enable several policies for selected harnesses: ```bash @@ -46,10 +58,10 @@ failproofai policies --install block-sudo block-force-push \ --cli claude codex --scope project ``` -Some policies accept parameters or are marked beta. Review the description, match scope, and default behavior before rollout. A policy that protects one workflow may block valid operations in another. +Some policies accept parameters. Review the description, match scope, and default behavior before rollout — a policy that protects one workflow may block valid operations in another. `--beta` includes policies marked beta; none currently are. - Review all 40 current policies, their triggers, recommended baseline, and parameters. + Review all 39 policies, their triggers, recommended baseline, and parameters. From 1024255acc8d1dd0d14f2a783805b2dbe846dc58 Mon Sep 17 00:00:00 2001 From: chhhee10 Date: Tue, 8 Sep 2026 20:05:35 +0530 Subject: [PATCH 4/8] Point the changelog entries at #788 --- CHANGELOG.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c363cc5d2..d4cdc9f26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,17 +13,17 @@ - The 1.0.2 documentation overhaul is reverted: `docs/` and `README.md` go back byte-for-byte to the commit #756 merged onto, along with the 14 generated locales and 14 translated READMEs #759 regenerated from those English sources. The release half of #756 stays — `package.json` and the Cargo workspace are untouched, since they have moved on to 1.0.4-beta.0 and the release tag the CLI builds its daemon download URL from is that npm version. Under `## 1.0.2` the heading and its release narrative stay, because 1.0.2 did ship; the `### Docs` entries underneath described the overhaul and go with it. Leaving the locales in place was the alternative considered and rejected: the nightly translate job is content-hash cached, so pages whose pre-overhaul English hashes it had already seen would have been skipped rather than repaired, stranding every non-English reader on a translation of text that no longer exists (#773) - The landing page no longer opens with the harness paragraph claiming that "the same events, the same policies, and the same session history apply to every one" of the twelve. Removed from `docs/index.mdx` and all 14 locales (#773) -- The commands the reverted docs teach are checked against the shipped CLI again, and three of them did not run at all: `failproofai pack add core` is refused (`"core" is no longer a pack name` — ours is a pack like anyone else's now), `failproofai pack add --bundled` is an unknown flag, and `pack build` retired into `publish`. `packs.mdx`, `publish-a-pack.mdx`, `failure-behavior.mdx` and `reference/failproof-cli.mdx` are corrected; `policy`, `pack` and `p` remain working aliases for `policies` and are documented as such rather than silently relied on (#PR) -- `failproofai config --connect --token ` is no longer taught as the way to set a machine up. `--connect` short-circuits to enrolment and **returns** — no daemon, no hooks — so anyone who followed the quickstart got a machine that showed up in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through `FAILPROOFAI_CLOUD_TOKEN` rather than argv, where `ps`, shell history and CI logs can all read it. Corrected in `start/quickstart.mdx`, `start/setup.mdx`, `reference/failproof-cli.mdx`, `reference/harnesses.mdx`, `reference/custom-agents.mdx` and `reference/overview.mdx` (#PR) -- Nothing claims that installing hooks enables the policy catalog any more. `policies --install` with no names wires hooks and touches no policy, and setup says so itself when it finishes ("Nothing is enforcing yet"), so `README.md` and `start/quickstart.mdx` now carry the `failproofai policies add FailproofAI/policies` step that actually puts guardrails on a machine — 38 policies, of which the pack's manifest switches on 10. The always-on `block-failproofai-commands` guard is documented separately, as the one thing enforcing before that command runs (#PR) -- The README's harness paragraph no longer promises "same events, same policies" across all twelve. `src/hooks/enforcement-capability.ts` is the authority and disagrees: blocking a tool call before it runs is verified on all twelve, but turn-end gates on eight — OpenCode, Pi, Hermes and Goose have none — so a Stop policy deployed on the strength of that sentence enforced nothing. It now states what is shared (one policy API, one session history), what is not, and links the per-harness matrix. `docs/index.mdx` lost the same sentence in #773; the README kept it (#PR) -- `--machine-label` is documented in the order it actually works. On `config` it is *always* a rename — the branch that reads it fires whenever `--connect` and `--disconnect` are absent, so `failproofai config --token --machine-label ` never reaches the wizard and answers "this machine is not connected … so it has no name to change". Setup comes first, the label after (#PR) -- `sanitize-api-keys` is out of the README's "What it stops" table. It matches `PostToolUse`, which `ENFORCEMENT_CAPABILITY` classes observe-only, so the tool has already run and its output has already reached the model: it reports a secret rather than keeping one out of the context (#669). The nine policies left in that table are all `PreToolUse` and do gate the call, on every harness (#PR) -- 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it (#PR) -- The builtin pages no longer disagree with the catalog about how many policies there are, or which of them are on. `builtin.mdx` claimed **40**; `POLICY_CATALOG` and `BUILTIN_POLICIES` both hold **39**, and the catalog page documents 39 names matching source exactly. Both numbers a reader meets are now stated together and once: 39 exist, **38** are selectable, and the 39th is `block-failproofai-commands` — always on, excluded from the pack because a pack may not declare `alwaysOn`. `--beta` is documented as adding nothing, because no policy is currently marked beta (#PR) -- The catalog's "Recommended baseline" listed **14** policies as the guided setup's selection. Setup selects nothing, the list is the pack manifest's own 10 defaults, and three of the fourteen — `block-rm-rf`, `block-force-push` and `block-secrets-write` — are **not** among them. Those are the guards a reader is most likely to assume are on, so the corrected list is followed by a warning naming all three and the command to enable each (#PR) -- The five `sanitize-*` rows in the catalog said they redact secrets "before the model sees them" while the same row named `PostToolUse` as the trigger. They match an observation-only event: the tool has already run and its output has already reached the model, so they report a secret rather than withhold one, and they are not a data-loss control (#669). Reworded, with a note pointing at the `PreToolUse` guards that do stop the read (#PR) -- `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly: 1020 entries, 1020 files, nothing orphaned and nothing dangling (#PR) +- The commands the reverted docs teach are checked against the shipped CLI again, and three of them did not run at all: `failproofai pack add core` is refused (`"core" is no longer a pack name` — ours is a pack like anyone else's now), `failproofai pack add --bundled` is an unknown flag, and `pack build` retired into `publish`. `packs.mdx`, `publish-a-pack.mdx`, `failure-behavior.mdx` and `reference/failproof-cli.mdx` are corrected; `policy`, `pack` and `p` remain working aliases for `policies` and are documented as such rather than silently relied on (#788) +- `failproofai config --connect --token ` is no longer taught as the way to set a machine up. `--connect` short-circuits to enrolment and **returns** — no daemon, no hooks — so anyone who followed the quickstart got a machine that showed up in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through `FAILPROOFAI_CLOUD_TOKEN` rather than argv, where `ps`, shell history and CI logs can all read it. Corrected in `start/quickstart.mdx`, `start/setup.mdx`, `reference/failproof-cli.mdx`, `reference/harnesses.mdx`, `reference/custom-agents.mdx` and `reference/overview.mdx` (#788) +- Nothing claims that installing hooks enables the policy catalog any more. `policies --install` with no names wires hooks and touches no policy, and setup says so itself when it finishes ("Nothing is enforcing yet"), so `README.md` and `start/quickstart.mdx` now carry the `failproofai policies add FailproofAI/policies` step that actually puts guardrails on a machine — 38 policies, of which the pack's manifest switches on 10. The always-on `block-failproofai-commands` guard is documented separately, as the one thing enforcing before that command runs (#788) +- The README's harness paragraph no longer promises "same events, same policies" across all twelve. `src/hooks/enforcement-capability.ts` is the authority and disagrees: blocking a tool call before it runs is verified on all twelve, but turn-end gates on eight — OpenCode, Pi, Hermes and Goose have none — so a Stop policy deployed on the strength of that sentence enforced nothing. It now states what is shared (one policy API, one session history), what is not, and links the per-harness matrix. `docs/index.mdx` lost the same sentence in #773; the README kept it (#788) +- `--machine-label` is documented in the order it actually works. On `config` it is *always* a rename — the branch that reads it fires whenever `--connect` and `--disconnect` are absent, so `failproofai config --token --machine-label ` never reaches the wizard and answers "this machine is not connected … so it has no name to change". Setup comes first, the label after (#788) +- `sanitize-api-keys` is out of the README's "What it stops" table. It matches `PostToolUse`, which `ENFORCEMENT_CAPABILITY` classes observe-only, so the tool has already run and its output has already reached the model: it reports a secret rather than keeping one out of the context (#669). The nine policies left in that table are all `PreToolUse` and do gate the call, on every harness (#788) +- 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it (#788) +- The builtin pages no longer disagree with the catalog about how many policies there are, or which of them are on. `builtin.mdx` claimed **40**; `POLICY_CATALOG` and `BUILTIN_POLICIES` both hold **39**, and the catalog page documents 39 names matching source exactly. Both numbers a reader meets are now stated together and once: 39 exist, **38** are selectable, and the 39th is `block-failproofai-commands` — always on, excluded from the pack because a pack may not declare `alwaysOn`. `--beta` is documented as adding nothing, because no policy is currently marked beta (#788) +- The catalog's "Recommended baseline" listed **14** policies as the guided setup's selection. Setup selects nothing, the list is the pack manifest's own 10 defaults, and three of the fourteen — `block-rm-rf`, `block-force-push` and `block-secrets-write` — are **not** among them. Those are the guards a reader is most likely to assume are on, so the corrected list is followed by a warning naming all three and the command to enable each (#788) +- The five `sanitize-*` rows in the catalog said they redact secrets "before the model sees them" while the same row named `PostToolUse` as the trigger. They match an observation-only event: the tool has already run and its output has already reached the model, so they report a secret rather than withhold one, and they are not a data-loss control (#669). Reworded, with a note pointing at the `PreToolUse` guards that do stop the read (#788) +- `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly: 1020 entries, 1020 files, nothing orphaned and nothing dangling (#788) ### Dependencies @@ -616,7 +616,7 @@ disappearing quietly. - Drop the Status link from the docs sidebar. It was a `navigation.global.anchors` entry, which Mintlify pins above the page tree on every page in every tab — permanent real estate for a link that answers a question almost no reader of a docs page is asking. Support stays, since that one is reached from anywhere in the docs by someone who is already stuck. (#718) -- Drop a duplicated entry and a repeated `### Fixes` heading from this release's own section. The canary-images entry was committed twice — once carrying an unfilled `(#PR)` placeholder and once as `(#705)` — and the section then opened a second `### Fixes` block a few entries after the first. Both were invisible while the changelog was only ever read on GitHub; the release announcement renders straight from these sections, so a duplicated headline and a heading appearing twice were about to show up in a public channel. (#721) +- Drop a duplicated entry and a repeated `### Fixes` heading from this release's own section. The canary-images entry was committed twice — once carrying an unfilled `(#788)` placeholder and once as `(#705)` — and the section then opened a second `### Fixes` block a few entries after the first. Both were invisible while the changelog was only ever read on GitHub; the release announcement renders straight from these sections, so a duplicated headline and a heading appearing twice were about to show up in a public channel. (#721) ## 1.0.1-beta.0 — 2026-08-14 From 6ef9d4458c73c494f42e8030f12fcab12d111963 Mon Sep 17 00:00:00 2001 From: chhhee10 Date: Tue, 8 Sep 2026 20:29:42 +0530 Subject: [PATCH 5/8] Bring the edited pages back to the site's formatting conventions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Measured against df1d0565 rather than eyeballed, and one page was well outside what the rest of the site does. publish-a-pack had grown from 91 lines and 6 H2s to 152 and 10 — the only page on the branch more than a few lines from its baseline. The command it documents did change completely (`pack build` plus a hand-written `gh release create` became one `publish`), but that did not justify four new top-level sections. Two were reference material the site keeps elsewhere: `## Install it` restated packs.mdx and is now one sentence linking there, and `## Options` was a ten-row flag table where this page's own convention is flags shown inline in the example being explained. `## The repository must be public` folded into `What your users are trusting`, which is the same subject. Now 7 H2s and 125 lines. Two smaller drifts, both from copying one page's habits onto others: - Aligned trailing `#` comments in bash blocks are a packs.mdx idiom — 8 of the 96 bash lines in the English docs, all on that one page. They had spread to the setup block in failproof-cli.mdx, where the baseline has none. Removed; the explanation was already in the prose underneath. - Two callout bodies sat at 0 indentation where 67 of 69 top-level callouts in the baseline use 2. Both were pre-existing rather than introduced here, but they are in files this branch already touches, so they are normalised now. Also fixed an example that taught the wrong thing: `--id acme/support-agent` passed alongside `--repo acme/support-agent`, which is exactly its default, so the flag looked required. Dropped from the example and described in the prose. validate:mdx 1034 pages clean; pages render. --- docs/policies/packs.mdx | 2 +- docs/policies/publish-a-pack.mdx | 62 +++++++++----------------------- docs/reference/failproof-cli.mdx | 4 +-- 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/docs/policies/packs.mdx b/docs/policies/packs.mdx index c3418df84..68581b039 100644 --- a/docs/policies/packs.mdx +++ b/docs/policies/packs.mdx @@ -82,7 +82,7 @@ failproofai policies --uninstall acme/support-agent:block-refunds ``` -If a pack ships a policy whose name is also an **enabled builtin**, the builtin runs and the pack's copy is skipped — the same guard would otherwise be evaluated twice. Turn the builtin off to use the pack's copy instead. + If a pack ships a policy whose name is also an **enabled builtin**, the builtin runs and the pack's copy is skipped — the same guard would otherwise be evaluated twice. Turn the builtin off to use the pack's copy instead. ## Where the Failproof AI policies come from diff --git a/docs/policies/publish-a-pack.mdx b/docs/policies/publish-a-pack.mdx index b8fe61264..b636d95f8 100644 --- a/docs/policies/publish-a-pack.mdx +++ b/docs/policies/publish-a-pack.mdx @@ -39,7 +39,7 @@ customPolicies.add({ Write as many files as you like; one per category reads well. Every file in the directory that registers policies is bundled into the single artifact a pack has to be. -Bundling needs **bun**. Without it, keep to one self-contained file. Either way the published entry must not import local files at install time: only the entry is digest-pinned, so a pack that reached for siblings could not honestly claim the digest covers what runs — and `publish` refuses one rather than shipping a promise it cannot keep. + Bundling needs **bun**. Without it, keep to one self-contained file. Either way the published entry must not import local files at install time: only the entry is digest-pinned, so a pack that reached for siblings could not honestly claim the digest covers what runs — and `publish` refuses one rather than shipping a promise it cannot keep. ## 2. Try it here first @@ -77,7 +77,19 @@ The asset names are fixed — they are what a consumer's CLI constructs its URLs Refused at build time: an id that is not `publisher/name`, a policy name containing `/`, a policy declaring `alwaysOn`, a missing `description`, `category` or `match`, an entry that registers nothing, and an entry that imports local files. -Use `--dry-run` to build the assets and publish nothing; it needs no credential. +Override anything it decided: + +```bash +failproofai publish \ + --repo acme/support-agent \ + --version 1.0.0 \ + --effect observe \ + --dry-run +``` + +`--id` sets the pack id when it should differ from the repo, `--tag` and `--notes` name the release, `--out` chooses where the assets are written (default `dist-pack`), and `--dry-run` builds them without publishing and needs no credential. + +Anyone can now install it with `failproofai policies add acme/support-agent`. See [policy packs](/policies/packs) for pinning a version and taking only part of one. ## How the version is decided @@ -85,52 +97,10 @@ The version is the **commit you are publishing from** — its short sha, twelve It is read from the tree in front of you, never from the repository's releases, so a fresh clone and an air-gapped machine compute the same answer without asking GitHub what happened before. -Because the version claims to name a commit, it **refuses rather than guessing** where that would be false: - -| Case | Why | -| --- | --- | -| No git checkout | There is no commit to name | -| Uncommitted changes | Those bytes are not in that commit | - -`--version` overrides both, and a tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. +Because the version claims to name a commit, it **refuses rather than guessing** where that would be false: outside a git checkout there is no commit to name, and with uncommitted changes those bytes are not in the commit it would name. `--version` overrides both, and a tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. A sha carries no ordering of its own, so use `failproofai policies show / --releases` to see which release came first — newest at the top. - - The release also records the commit you published from, in the manifest and in the release notes. That is **provenance, not verification** — the artifact digest is still the only thing that decides whether the bytes are the ones that were published. It answers the question a digest cannot: which source produced them. - - -## The repository must be public - -Installs are anonymous HTTPS with no credential to offer, so a private repository publishes to nobody. A repo `publish` creates is public for that reason; an existing private one is **refused**, before anything is built, created or uploaded. - -`--allow-private` publishes to one anyway, for somebody who will hand the three assets over another way — it still says plainly that no `policies add` can reach them. - -Only the release matters. Installs read `releases/download//` and never touch your git tree; pushing the source is for humans. - -## Install it - -```bash -failproofai policies add acme/support-agent # newest release, pinned -failproofai policies add acme/support-agent@a1b2c3d4e5f6 # that exact one -failproofai policies show acme/support-agent --releases # everything published -``` - -## Options - -| Flag | Use | -| --- | --- | -| `--init [file]` | Write a starter policy and stop | -| `--repo /` | Where to release it, created if missing | -| `--version ` | Name the version, instead of the commit it was built from | -| `--id ` | The pack's id. Defaults to `--repo` | -| `--tag ` | Release tag. Defaults to the version; a `v` prefix is fine | -| `--notes ` | Release notes | -| `--out ` | Where to write the assets. Default `dist-pack` | -| `--effect ` | `enforce` or `observe`. `observe` records and blocks nothing. Default `enforce` | -| `--dry-run` | Build the assets, publish nothing. No credential needed | -| `--allow-private` | Publish to an already-private repo anyway. Nobody can install it | - ## Shipping a new version Commit the change and run `failproofai publish` again — the new commit is the new version. Consumers run the same `failproofai policies add` and keep whatever subset they had chosen; a policy they turned off stays off across the upgrade. @@ -143,6 +113,8 @@ Changing a policy's **name** is a breaking change: a machine that had turned it Publish from a repository whose write access you control, and treat a pack release like publishing a package. +The repository must also be **public**. Installs are anonymous HTTPS with no credential to offer, so an existing private repo is refused before anything is built or uploaded, and one `publish` creates is public for the same reason. `--allow-private` overrides that for somebody handing the three assets over another way, and says plainly that no `policies add` can reach them. Only the release matters: installs read `releases/download//` and never touch your git tree. + ## Observe before you enforce A manifest may declare `"effect": "observe"` — `failproofai publish --effect observe` is what sets it. Those policies run and their verdicts are **recorded and discarded** — nothing is blocked. It is the way to measure a new rule against real traffic before it can interrupt anyone's work. diff --git a/docs/reference/failproof-cli.mdx b/docs/reference/failproof-cli.mdx index db3328f68..bcead78d0 100644 --- a/docs/reference/failproof-cli.mdx +++ b/docs/reference/failproof-cli.mdx @@ -13,8 +13,8 @@ The package requires Node.js 20.9 or newer. Bun 1.3 or newer is supported for de ```bash npm install -g failproofai export FAILPROOFAI_CLOUD_TOKEN="" -failproofai config # hooks, daemon, and Cloud in one pass -failproofai policies add FailproofAI/policies # choose what enforces +failproofai config +failproofai policies add FailproofAI/policies failproofai config --status ``` From 7f8dbeee6874abfd578335ffc4530b93eb5d91dd Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Thu, 10 Sep 2026 21:09:09 +0530 Subject: [PATCH 6/8] Address the CodeRabbit review - Key setup reads the key with read -s instead of typing it into a command. The environment keeps the key out of ps but not out of shell history, and the pages now claim only that; CI is told to inject it from its secret store with shell tracing off. - start/setup.mdx no longer uses an unset FAILPROOFAI_KEY, and gains the local-only flow its "Local enforcement" card promised. - mintlifyFrontmatterBlock stops trimming delimiter lines, so an indented --- is content, not a delimiter. Tests cover that near-miss and a stray delimiter carrying trailing whitespace. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01NAo4baGJEMnD5iA3dh3sen --- .../validate-translation.test.ts | 21 +++++++++++++++++++ docs/reference/custom-agents.mdx | 10 ++++++++- docs/reference/failproof-cli.mdx | 13 +++++++++--- docs/reference/harnesses.mdx | 10 +++++++-- docs/reference/overview.mdx | 9 ++++++-- docs/start/quickstart.mdx | 6 +++--- docs/start/setup.mdx | 17 +++++++++++++-- .../translate-docs/validate-translation.ts | 12 +++++++---- 8 files changed, 81 insertions(+), 17 deletions(-) diff --git a/__tests__/scripts/translate-docs/validate-translation.test.ts b/__tests__/scripts/translate-docs/validate-translation.test.ts index 05f600b74..0b60c6818 100644 --- a/__tests__/scripts/translate-docs/validate-translation.test.ts +++ b/__tests__/scripts/translate-docs/validate-translation.test.ts @@ -48,6 +48,27 @@ describe("findTranslationError", () => { expect(error).toContain("empty"); }); + it("still flags a stray delimiter that carries trailing whitespace", async () => { + // Mintlify closes the block on `--- ` just as it does on `---`, so the + // trailing space changes nothing about the defect. + const rendered = `---\n--- \ntitle: "Fähigkeit"\ndescription: "Eine Seite"\n---\n\n# Körper\n`; + const error = await findTranslationError(rendered, SOURCE); + expect(error).not.toBeNull(); + expect(error).toContain("empty"); + }); + + it("does not read an indented `---` as a delimiter", async () => { + // A delimiter starts its line. Comparing trimmed lines let an indented + // `---` open or close the block, so both of these were rejected for an + // empty frontmatter block they do not have — a retry burned on a defect + // that is not there. + const indentedAfterOpener = `---\n ---\n Titel\n---\n\n# Körper\n`; + expect(await findTranslationError(indentedAfterOpener, README_SOURCE)).toBeNull(); + + const indentedFirstLine = ` ---\n---\n\n# Körper\n`; + expect(await findTranslationError(indentedFirstLine, README_SOURCE)).toBeNull(); + }); + it("flags a frontmatter block the model dropped entirely", async () => { // A missing block is still valid YAML (mintlify tolerates it), so only the // key-parity check against the source catches it. diff --git a/docs/reference/custom-agents.mdx b/docs/reference/custom-agents.mdx index 0568f7976..ab9b7245d 100644 --- a/docs/reference/custom-agents.mdx +++ b/docs/reference/custom-agents.mdx @@ -37,8 +37,16 @@ The package is installed as `failproofai-sdk` and imported in Python as `failpro ![A custom Python agent session reconstructed as an execution graph and ordered event trace.](/images/dashboard/session-detail.png) + Read the `events:add` key into the shell. `read -s` takes it at a prompt that does not echo, so it never appears in a command or in shell history: + + ```bash + read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN + ``` + + Then set the machine up and check that it connected: + ```bash - FAILPROOFAI_CLOUD_TOKEN= failproofai config + failproofai config failproofai config --status ``` diff --git a/docs/reference/failproof-cli.mdx b/docs/reference/failproof-cli.mdx index bcead78d0..c4a234cb9 100644 --- a/docs/reference/failproof-cli.mdx +++ b/docs/reference/failproof-cli.mdx @@ -10,9 +10,16 @@ The package requires Node.js 20.9 or newer. Bun 1.3 or newer is supported for de ## Set up a machine +Install the CLI, then read the machine key into the shell. `read -s` takes it at a prompt that does not echo, so it never appears in a command: + ```bash npm install -g failproofai -export FAILPROOFAI_CLOUD_TOKEN="" +read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN +``` + +Then set the machine up and choose what it enforces: + +```bash failproofai config failproofai policies add FailproofAI/policies failproofai config --status @@ -22,7 +29,7 @@ failproofai config --status It chooses **no** policies. That is the second command's job, and without it a freshly configured machine enforces nothing but the always-on guard. -Prefer the environment variable over `--token`: a command-line argument is readable from `ps` by every user on the box, and lands in shell history and CI logs. +Prefer the environment variable over `--token`: a command-line argument is readable from `ps` by every user on the box. That is all the variable protects against — a key typed into any command, `export` included, still lands in shell history, which is why it is read in with `read -s` above. In CI, set it from the secret store and keep shell tracing (`set -x`) off, or the trace prints it. `--connect ` enrols a machine that is **already set up**. It returns as soon as enrolment succeeds — it does not install the daemon and does not wire any hooks. Use plain `failproofai config` (or `failproofai config --token `) on a machine that has not been set up yet, or it will read as connected while collecting and enforcing nothing. @@ -127,7 +134,7 @@ Use configuration files for persistent machine behavior. Environment variables a | Variable | Use | | --- | --- | -| `FAILPROOFAI_CLOUD_TOKEN` | The Cloud key, instead of `--token`. Prefer this: an argument is readable from `ps` and lands in shell history and CI logs | +| `FAILPROOFAI_CLOUD_TOKEN` | The Cloud key, instead of `--token`. Prefer this: an argument is readable from `ps` by every user. Set it with `read -s` or from a CI secret store, never by typing the key into a command, which lands in shell history either way | | `FAILPROOFAI_CLOUD_URL` | The Cloud URL, instead of `--url`. The same variable the daemon reads | | `FAILPROOFAI_HOME` | Relocate the complete `~/.failproofai` layout | | `FAILPROOFAI_LOG_LEVEL` | Set local logging verbosity | diff --git a/docs/reference/harnesses.mdx b/docs/reference/harnesses.mdx index 3876abb2e..09e095854 100644 --- a/docs/reference/harnesses.mdx +++ b/docs/reference/harnesses.mdx @@ -65,10 +65,16 @@ Capabilities are version-sensitive. Re-test after upgrading an agent CLI, especi ![The Policy page used to verify policy decisions from a newly connected harness.](/images/dashboard/policy-observe.png) - Set the machine up — this wires hooks for every detected harness, installs the daemon, and connects to Cloud: + Read the machine key into the shell. `read -s` takes it at a prompt that does not echo, so it never appears in a command or in shell history: ```bash - FAILPROOFAI_CLOUD_TOKEN= failproofai config + read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN + ``` + + Then set the machine up — this wires hooks for every detected harness, installs the daemon, and connects to Cloud: + + ```bash + failproofai config failproofai policies add FailproofAI/policies ``` diff --git a/docs/reference/overview.mdx b/docs/reference/overview.mdx index f3437a5d1..c98399bf8 100644 --- a/docs/reference/overview.mdx +++ b/docs/reference/overview.mdx @@ -58,14 +58,19 @@ The generated [HTTP API reference](/reference/http-api) covers the public `/v1` Open one of these sessions before considering the integration complete; the trace should contain the model, tool, error, and policy evidence your audits need. - Create a machine key, connect the Failproof daemon, and verify the first session. + Create a machine key, then read the secret it prints into the shell. `read -s` takes it at a prompt that does not echo, so it never appears in a command or in shell history: ```bash fp keys create agent-production \ --add events:add \ --add policies:pull + read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN + ``` + + Connect the Failproof daemon and verify the first session: - FAILPROOFAI_CLOUD_TOKEN= failproofai config + ```bash + failproofai config failproofai flush --wait fp sessions --since 1h --env production diff --git a/docs/start/quickstart.mdx b/docs/start/quickstart.mdx index 6620f6be5..6d98a26d7 100644 --- a/docs/start/quickstart.mdx +++ b/docs/start/quickstart.mdx @@ -30,10 +30,10 @@ This quickstart gets one machine reporting sessions, runs an audit, and deploys 1. Open the [Failproof AI dashboard](https://app.befailproof.ai) and create an account or sign in with your work email. 2. Go to **Administration → Keys** and create a key with `events:add` and `policies:pull`. -3. Copy the one-time secret and store it on the target machine: +3. Copy the one-time secret, then read it into a shell on the target machine. `read -s` takes it at a prompt that does not echo, so it never appears in a command: ```bash -export FAILPROOFAI_KEY="" +read -rs FAILPROOFAI_KEY && export FAILPROOFAI_KEY ``` ## Install @@ -45,7 +45,7 @@ export FAILPROOFAI_KEY="" FAILPROOFAI_CLOUD_TOKEN="$FAILPROOFAI_KEY" failproofai config ``` - That one command is the whole of setup: it installs the local daemon (root once), wires hooks into every agent CLI it finds, and connects this machine to Cloud. Passing the key through the environment rather than `--token` keeps it out of `ps`, shell history and CI logs. + That one command is the whole of setup: it installs the local daemon (root once), wires hooks into every agent CLI it finds, and connects this machine to Cloud. Passing the key through the environment rather than `--token` keeps it out of `ps`, where every user on the machine can read a command's arguments. It does not keep it out of shell history — reading it with `read -s` is what does that. In CI, inject it as a masked secret and keep shell tracing (`set -x`) off, or the trace prints it. Session transcripts are sent by default. Add `--no-transcripts` to report hook activity and policy decisions without transcript content. diff --git a/docs/start/setup.mdx b/docs/start/setup.mdx index b6a124cf8..8a3e2e211 100644 --- a/docs/start/setup.mdx +++ b/docs/start/setup.mdx @@ -6,7 +6,7 @@ icon: "waypoints" - Set a machine up and take a policy pack. Use this when you need immediate guardrails without sending session data to Cloud. + Set a machine up with no Cloud key and take a policy pack. Use this when you need immediate guardrails without sending session data to Cloud. Add centralized sessions, audits, online evaluations, dashboards, alerts, and fleet policy deployment. @@ -16,6 +16,10 @@ icon: "waypoints" +## Enforce locally + +Run `failproofai config` without a key, then take a pack with `failproofai policies add FailproofAI/policies`. In a terminal, pick **Not now — stay local** when setup asks to connect to Cloud; with no terminal and no `FAILPROOFAI_CLOUD_TOKEN`, it stays local on its own. The daemon and hooks enforce on the machine, and no session data is sent to Cloud. To connect later, follow the steps below. + ## Recommended production path 1. Connect a non-production machine with transcript capture enabled. @@ -48,8 +52,15 @@ icon: "waypoints" Continue only after both the machine and its first event are visible. + Read the one-time secret into the shell. `read -s` takes it at a prompt that does not echo, so it never appears in a command or in shell history: + + ```bash + read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN + ``` + + Then set the machine up, choose its policies, and name it: + ```bash - export FAILPROOFAI_CLOUD_TOKEN="$FAILPROOFAI_KEY" failproofai config failproofai policies add FailproofAI/policies @@ -63,6 +74,8 @@ icon: "waypoints" Add `--no-transcripts` when transcript content must remain local. + In CI, set `FAILPROOFAI_CLOUD_TOKEN` from the secret store instead of `read -s`, and keep shell tracing (`set -x`) off, or the trace prints the key. + On a machine that is **already** set up, `failproofai config --connect ` enrols it and nothing else. Do not use that form for a first install: it returns before the daemon or any hook is in place, leaving a machine that shows up in Cloud but collects and enforces nothing. diff --git a/scripts/translate-docs/validate-translation.ts b/scripts/translate-docs/validate-translation.ts index 181133715..56be21b53 100644 --- a/scripts/translate-docs/validate-translation.ts +++ b/scripts/translate-docs/validate-translation.ts @@ -58,8 +58,10 @@ function frontmatterKeys(page: string): string[] | null { } /** - * The frontmatter block as MINTLIFY reads it: opened by a leading `---` line, - * closed by the FIRST line after it that is exactly `---`. `null` when the page + * The frontmatter block as MINTLIFY reads it: opened by a first line that is + * exactly `---`, closed by the FIRST line after it that is `---` — trailing + * spaces or tabs allowed, as `FRONTMATTER_RE` allows them, but never leading + * ones: an indented `---` is content, not a delimiter. `null` when the page * does not open with a delimiter at all. * * Deliberately NOT reusing `FRONTMATTER_RE`. That matcher exists to feed @@ -75,8 +77,10 @@ function frontmatterKeys(page: string): string[] | null { */ function mintlifyFrontmatterBlock(page: string): string | null { const lines = page.split(/\r?\n/); - if (lines[0]?.trim() !== "---") return null; - const close = lines.findIndex((line, i) => i > 0 && line.trim() === "---"); + if (lines[0] !== "---") return null; + const close = lines.findIndex( + (line, i) => i > 0 && /^---[ \t]*$/.test(line), + ); if (close < 0) return null; return lines.slice(1, close).join("\n"); } From 57b261e0f752e7e5cd47bd51c6d379e356093ed2 Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Thu, 10 Sep 2026 21:09:09 +0530 Subject: [PATCH 7/8] Rebuild the Policies section and add Evaluate agents Policies now follow how a policy is made: write one, from an audit or by hand, or take a pack from the policy hub; then test it, deploy it, and version and roll it back, with publishing a pack and failure behavior after that. builtin, builtin-catalog, custom and fleet fold into packs, editor, test and deploy and go with their 56 translations. Their URLs redirect in all 15 languages, as does the website's built-in-policies link, and local-configuration moves to the Reference tab with the catalog's parameter table. Every command on those pages is checked against the source of both CLIs, which corrected 13 claims. The worst was the observe-mode deploy example, which actually enforced: fp fleet deploy --add defaults to enforce, so it now passes :observe. Evaluate agents is a new group at the top of Find failures: the two kinds of evaluator, writing one, testing it against real sessions, deploying and versioning it, and reading the results. The Evaluator SDK reference is rewritten for the Evaluator v2 worker in failproofai_sdk.evaluator, since the push-model SDK it documented is retired, and evaluations:run joins the permissions table. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01NAo4baGJEMnD5iA3dh3sen --- CHANGELOG.md | 13 +- README.md | 10 +- docs/admin/keys-and-permissions.mdx | 2 +- docs/ar/policies/builtin-catalog.mdx | 129 ---- docs/ar/policies/builtin.mdx | 57 -- docs/ar/policies/custom.mdx | 72 -- docs/ar/policies/fleet.mdx | 52 -- docs/de/policies/builtin-catalog.mdx | 129 ---- docs/de/policies/builtin.mdx | 57 -- docs/de/policies/custom.mdx | 72 -- docs/de/policies/fleet.mdx | 52 -- docs/docs.json | 684 ++++++++++++++---- docs/es/policies/builtin-catalog.mdx | 132 ---- docs/es/policies/builtin.mdx | 57 -- docs/es/policies/custom.mdx | 72 -- docs/es/policies/fleet.mdx | 52 -- docs/evaluations/deploy.mdx | 55 ++ docs/evaluations/overview.mdx | 44 ++ docs/evaluations/test.mdx | 29 + docs/evaluations/write.mdx | 76 ++ docs/fr/policies/builtin-catalog.mdx | 129 ---- docs/fr/policies/builtin.mdx | 57 -- docs/fr/policies/custom.mdx | 72 -- docs/fr/policies/fleet.mdx | 52 -- docs/he/policies/builtin-catalog.mdx | 129 ---- docs/he/policies/builtin.mdx | 57 -- docs/he/policies/custom.mdx | 72 -- docs/he/policies/fleet.mdx | 52 -- docs/hi/policies/builtin-catalog.mdx | 129 ---- docs/hi/policies/builtin.mdx | 57 -- docs/hi/policies/custom.mdx | 72 -- docs/hi/policies/fleet.mdx | 52 -- docs/images/dashboard/eval-authoring-code.png | Bin 0 -> 139033 bytes .../images/dashboard/eval-authoring-draft.png | Bin 0 -> 160946 bytes docs/images/dashboard/eval-definitions.png | Bin 0 -> 122932 bytes docs/images/dashboard/eval-test.png | Bin 0 -> 137510 bytes .../dashboard/evaluations-assistant.png | Bin 0 -> 269131 bytes docs/images/dashboard/evaluations-chart.png | Bin 0 -> 94355 bytes docs/images/dashboard/policy-backtest.png | Bin 0 -> 100712 bytes docs/it/policies/builtin-catalog.mdx | 133 ---- docs/it/policies/builtin.mdx | 57 -- docs/it/policies/custom.mdx | 72 -- docs/it/policies/fleet.mdx | 52 -- docs/ja/policies/builtin-catalog.mdx | 129 ---- docs/ja/policies/builtin.mdx | 57 -- docs/ja/policies/custom.mdx | 72 -- docs/ja/policies/fleet.mdx | 52 -- docs/ko/policies/builtin-catalog.mdx | 129 ---- docs/ko/policies/builtin.mdx | 57 -- docs/ko/policies/custom.mdx | 72 -- docs/ko/policies/fleet.mdx | 52 -- docs/policies/builtin-catalog.mdx | 141 ---- docs/policies/builtin.mdx | 69 -- docs/policies/custom.mdx | 72 -- docs/policies/deploy.mdx | 77 +- docs/policies/editor.mdx | 99 ++- docs/policies/failure-behavior.mdx | 2 +- docs/policies/fleet.mdx | 52 -- docs/policies/local-configuration.mdx | 66 +- docs/policies/overview.mdx | 71 +- docs/policies/packs.mdx | 82 ++- docs/policies/publish-a-pack.mdx | 18 +- docs/policies/rollback.mdx | 54 +- docs/policies/test.mdx | 60 ++ docs/pt-br/policies/builtin-catalog.mdx | 132 ---- docs/pt-br/policies/builtin.mdx | 57 -- docs/pt-br/policies/custom.mdx | 72 -- docs/pt-br/policies/fleet.mdx | 52 -- docs/reference/cloud-cli.mdx | 4 +- docs/reference/evaluator-sdk.mdx | 250 +++---- docs/reference/policy-sdk.mdx | 2 +- docs/ru/policies/builtin-catalog.mdx | 132 ---- docs/ru/policies/builtin.mdx | 57 -- docs/ru/policies/custom.mdx | 72 -- docs/ru/policies/fleet.mdx | 52 -- docs/sessions/evaluations.mdx | 52 +- docs/tr/policies/builtin-catalog.mdx | 129 ---- docs/tr/policies/builtin.mdx | 57 -- docs/tr/policies/custom.mdx | 72 -- docs/tr/policies/fleet.mdx | 52 -- docs/vi/policies/builtin-catalog.mdx | 129 ---- docs/vi/policies/builtin.mdx | 57 -- docs/vi/policies/custom.mdx | 72 -- docs/vi/policies/fleet.mdx | 52 -- docs/zh/policies/builtin-catalog.mdx | 129 ---- docs/zh/policies/builtin.mdx | 57 -- docs/zh/policies/custom.mdx | 72 -- docs/zh/policies/fleet.mdx | 52 -- 88 files changed, 1248 insertions(+), 5189 deletions(-) delete mode 100644 docs/ar/policies/builtin-catalog.mdx delete mode 100644 docs/ar/policies/builtin.mdx delete mode 100644 docs/ar/policies/custom.mdx delete mode 100644 docs/ar/policies/fleet.mdx delete mode 100644 docs/de/policies/builtin-catalog.mdx delete mode 100644 docs/de/policies/builtin.mdx delete mode 100644 docs/de/policies/custom.mdx delete mode 100644 docs/de/policies/fleet.mdx delete mode 100644 docs/es/policies/builtin-catalog.mdx delete mode 100644 docs/es/policies/builtin.mdx delete mode 100644 docs/es/policies/custom.mdx delete mode 100644 docs/es/policies/fleet.mdx create mode 100644 docs/evaluations/deploy.mdx create mode 100644 docs/evaluations/overview.mdx create mode 100644 docs/evaluations/test.mdx create mode 100644 docs/evaluations/write.mdx delete mode 100644 docs/fr/policies/builtin-catalog.mdx delete mode 100644 docs/fr/policies/builtin.mdx delete mode 100644 docs/fr/policies/custom.mdx delete mode 100644 docs/fr/policies/fleet.mdx delete mode 100644 docs/he/policies/builtin-catalog.mdx delete mode 100644 docs/he/policies/builtin.mdx delete mode 100644 docs/he/policies/custom.mdx delete mode 100644 docs/he/policies/fleet.mdx delete mode 100644 docs/hi/policies/builtin-catalog.mdx delete mode 100644 docs/hi/policies/builtin.mdx delete mode 100644 docs/hi/policies/custom.mdx delete mode 100644 docs/hi/policies/fleet.mdx create mode 100644 docs/images/dashboard/eval-authoring-code.png create mode 100644 docs/images/dashboard/eval-authoring-draft.png create mode 100644 docs/images/dashboard/eval-definitions.png create mode 100644 docs/images/dashboard/eval-test.png create mode 100644 docs/images/dashboard/evaluations-assistant.png create mode 100644 docs/images/dashboard/evaluations-chart.png create mode 100644 docs/images/dashboard/policy-backtest.png delete mode 100644 docs/it/policies/builtin-catalog.mdx delete mode 100644 docs/it/policies/builtin.mdx delete mode 100644 docs/it/policies/custom.mdx delete mode 100644 docs/it/policies/fleet.mdx delete mode 100644 docs/ja/policies/builtin-catalog.mdx delete mode 100644 docs/ja/policies/builtin.mdx delete mode 100644 docs/ja/policies/custom.mdx delete mode 100644 docs/ja/policies/fleet.mdx delete mode 100644 docs/ko/policies/builtin-catalog.mdx delete mode 100644 docs/ko/policies/builtin.mdx delete mode 100644 docs/ko/policies/custom.mdx delete mode 100644 docs/ko/policies/fleet.mdx delete mode 100644 docs/policies/builtin-catalog.mdx delete mode 100644 docs/policies/builtin.mdx delete mode 100644 docs/policies/custom.mdx delete mode 100644 docs/policies/fleet.mdx create mode 100644 docs/policies/test.mdx delete mode 100644 docs/pt-br/policies/builtin-catalog.mdx delete mode 100644 docs/pt-br/policies/builtin.mdx delete mode 100644 docs/pt-br/policies/custom.mdx delete mode 100644 docs/pt-br/policies/fleet.mdx delete mode 100644 docs/ru/policies/builtin-catalog.mdx delete mode 100644 docs/ru/policies/builtin.mdx delete mode 100644 docs/ru/policies/custom.mdx delete mode 100644 docs/ru/policies/fleet.mdx delete mode 100644 docs/tr/policies/builtin-catalog.mdx delete mode 100644 docs/tr/policies/builtin.mdx delete mode 100644 docs/tr/policies/custom.mdx delete mode 100644 docs/tr/policies/fleet.mdx delete mode 100644 docs/vi/policies/builtin-catalog.mdx delete mode 100644 docs/vi/policies/builtin.mdx delete mode 100644 docs/vi/policies/custom.mdx delete mode 100644 docs/vi/policies/fleet.mdx delete mode 100644 docs/zh/policies/builtin-catalog.mdx delete mode 100644 docs/zh/policies/builtin.mdx delete mode 100644 docs/zh/policies/custom.mdx delete mode 100644 docs/zh/policies/fleet.mdx diff --git a/CHANGELOG.md b/CHANGELOG.md index d4cdc9f26..9f97e6097 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,16 +14,17 @@ - The landing page no longer opens with the harness paragraph claiming that "the same events, the same policies, and the same session history apply to every one" of the twelve. Removed from `docs/index.mdx` and all 14 locales (#773) - The commands the reverted docs teach are checked against the shipped CLI again, and three of them did not run at all: `failproofai pack add core` is refused (`"core" is no longer a pack name` — ours is a pack like anyone else's now), `failproofai pack add --bundled` is an unknown flag, and `pack build` retired into `publish`. `packs.mdx`, `publish-a-pack.mdx`, `failure-behavior.mdx` and `reference/failproof-cli.mdx` are corrected; `policy`, `pack` and `p` remain working aliases for `policies` and are documented as such rather than silently relied on (#788) -- `failproofai config --connect --token ` is no longer taught as the way to set a machine up. `--connect` short-circuits to enrolment and **returns** — no daemon, no hooks — so anyone who followed the quickstart got a machine that showed up in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through `FAILPROOFAI_CLOUD_TOKEN` rather than argv, where `ps`, shell history and CI logs can all read it. Corrected in `start/quickstart.mdx`, `start/setup.mdx`, `reference/failproof-cli.mdx`, `reference/harnesses.mdx`, `reference/custom-agents.mdx` and `reference/overview.mdx` (#788) +- `failproofai config --connect --token ` is no longer taught as the way to set a machine up. `--connect` short-circuits to enrolment and **returns** — no daemon, no hooks — so anyone who followed the quickstart got a machine that showed up in Cloud and then collected and enforced nothing. Fresh machines now get plain `failproofai config`, with the key arriving through `FAILPROOFAI_CLOUD_TOKEN` rather than argv, where `ps` shows it to every user on the box. The examples read it in with `read -s`, since a key typed into any command — `export` included — still lands in shell history, and CI is told to inject it from the secret store with shell tracing off. Corrected in `start/quickstart.mdx`, `start/setup.mdx`, `reference/failproof-cli.mdx`, `reference/harnesses.mdx`, `reference/custom-agents.mdx` and `reference/overview.mdx` (#788) +- `start/setup.mdx`'s "Local enforcement" card promised guardrails without sending session data to Cloud, then documented only the Cloud flow. The page now shows the local one: `failproofai config` with no key — **Not now — stay local** in a terminal, and on its own with no terminal — then a pack (#788) - Nothing claims that installing hooks enables the policy catalog any more. `policies --install` with no names wires hooks and touches no policy, and setup says so itself when it finishes ("Nothing is enforcing yet"), so `README.md` and `start/quickstart.mdx` now carry the `failproofai policies add FailproofAI/policies` step that actually puts guardrails on a machine — 38 policies, of which the pack's manifest switches on 10. The always-on `block-failproofai-commands` guard is documented separately, as the one thing enforcing before that command runs (#788) - The README's harness paragraph no longer promises "same events, same policies" across all twelve. `src/hooks/enforcement-capability.ts` is the authority and disagrees: blocking a tool call before it runs is verified on all twelve, but turn-end gates on eight — OpenCode, Pi, Hermes and Goose have none — so a Stop policy deployed on the strength of that sentence enforced nothing. It now states what is shared (one policy API, one session history), what is not, and links the per-harness matrix. `docs/index.mdx` lost the same sentence in #773; the README kept it (#788) - `--machine-label` is documented in the order it actually works. On `config` it is *always* a rename — the branch that reads it fires whenever `--connect` and `--disconnect` are absent, so `failproofai config --token --machine-label ` never reaches the wizard and answers "this machine is not connected … so it has no name to change". Setup comes first, the label after (#788) - `sanitize-api-keys` is out of the README's "What it stops" table. It matches `PostToolUse`, which `ENFORCEMENT_CAPABILITY` classes observe-only, so the tool has already run and its output has already reached the model: it reports a secret rather than keeping one out of the context (#669). The nine policies left in that table are all `PreToolUse` and do gate the call, on every harness (#788) -- 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it (#788) -- The builtin pages no longer disagree with the catalog about how many policies there are, or which of them are on. `builtin.mdx` claimed **40**; `POLICY_CATALOG` and `BUILTIN_POLICIES` both hold **39**, and the catalog page documents 39 names matching source exactly. Both numbers a reader meets are now stated together and once: 39 exist, **38** are selectable, and the 39th is `block-failproofai-commands` — always on, excluded from the pack because a pack may not declare `alwaysOn`. `--beta` is documented as adding nothing, because no policy is currently marked beta (#788) -- The catalog's "Recommended baseline" listed **14** policies as the guided setup's selection. Setup selects nothing, the list is the pack manifest's own 10 defaults, and three of the fourteen — `block-rm-rf`, `block-force-push` and `block-secrets-write` — are **not** among them. Those are the guards a reader is most likely to assume are on, so the corrected list is followed by a warning naming all three and the command to enable each (#788) -- The five `sanitize-*` rows in the catalog said they redact secrets "before the model sees them" while the same row named `PostToolUse` as the trigger. They match an observation-only event: the tool has already run and its output has already reached the model, so they report a secret rather than withhold one, and they are not a data-loss control (#669). Reworded, with a note pointing at the `PreToolUse` guards that do stop the read (#788) -- `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly: 1020 entries, 1020 files, nothing orphaned and nothing dangling (#788) +- 102 published pages across seven locales opened with two consecutive `---` lines, so Mintlify closed the frontmatter block before any key was in it and rendered `title:`, `description:` and `icon:` as body text on a page with no title — visible on `docs.befailproof.ai` for as long as it stood. The stray delimiter is stripped, and `findTranslationError` gained the check that could not have caught it: every existing test asks `YAML.parse`, which reads a leading `---` as a document-start marker and returns a clean `{title, …}`, so the defect was invisible to the validator that exists to prevent exactly this. A second, Mintlify-shaped view of the block is now compared against it, and like Mintlify it takes only an unindented `---` as a delimiter, so an indented one is not mistaken for an empty block (#788) +- `docs/start/integrations.mdx` is in the navigation. The hub page for the five framework guides was on disk and linked from `reference/overview.mdx` and `reference/custom-agents.mdx`, but listed in no sidebar, in English and all 14 locales. Nav and disk now agree exactly, with nothing orphaned and nothing dangling (#788) +- The Policies section follows how a policy is actually made instead of listing every surface side by side. There are two ways to get one — write it (`policies/editor`: from an audit via **generate policy** and **write this policy**, or by hand) or take a pack from the [policy hub](https://befailproof.ai/policy-hub/) (`policies/packs`) — then one path: test (the new `policies/test`, which leads with the editor's backtest), deploy (which now starts with adding a machine), versions and rollback, and finally publishing a pack and failure behavior. `builtin`, `builtin-catalog`, `custom` and `fleet` are folded into `packs`, `editor`, `test` and `deploy` and deleted along with their 56 translations; their URLs redirect in all 15 languages, as does the website's `/built-in-policies`. `local-configuration` moves to the Reference tab and takes the catalog's parameter table with it. What the builtin pages said that still holds moves to `packs`: the Failproof pack's 38 policies and 10 defaults, checked against its published manifest, with a table marking which common guards a plain `policies add` switches on — `block-rm-rf`, `block-force-push` and `block-secrets-write` are not among them. The catalog's claim that the `sanitize-*` policies redact secrets "before the model sees them" goes with it: they match observation-only `PostToolUse`, so they report a secret found in tool output rather than withhold one (#669). `rollback.mdx` also stops calling CLI rollback a dashboard-only workflow — `fp fleet rollback ` exists (#788) +- Every command in the Policies pages is checked against both CLIs' source, and 13 claims did not hold. The worst: the "deploy in observe mode" example enforced, because a bare `fp fleet deploy --add ` keeps the machine's effect or defaults to `enforce` — it now passes `:observe`. `fp policies test` takes `--file`, not `--file-path` (fixed in the Cloud CLI reference too, alongside `fp fleet rollback`'s missing `GENERATION`); `compose` is session-only and refuses API keys; a pack policy switches on machine-wide whatever `--scope` says, and a bare name resolves to the pack that declares it, not to the builtin; re-adding a pack at a terminal re-opens the picker and replaces the selection; `failproofai publish` creates the repository before it validates the build, and at a terminal commits for you rather than refusing (#788) +- Evaluations get their own section, **Evaluate agents**, at the top of the Find failures tab: the two kinds of evaluator — hosted Python written in the dashboard, and your own worker for LLM judges — then writing one (drafted by the assistant and grounded in your payload keys, or by hand), testing it against real sessions without storing anything, deploying and versioning it (a successor disables its predecessor, rolling back re-enables it, and history is scored on request, up to 90 days at a time), and reading results, which absorbs the old Online evaluations page. The Evaluator SDK reference is rewritten for Evaluator v2's outbound-only worker in `failproofai_sdk.evaluator`: the push-model service it documented — `EVALUATOR_ENDPOINT`, `/evaluate`, `JobPending` — is retired, so every example on that page described an SDK that no longer ships. `evaluations:run`, the permission a worker's key needs, joins the permissions table (#788) ### Dependencies diff --git a/README.md b/README.md index 9b396f776..63496d24d 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ three are the developer favourites — coding CLIs are the harness class we cove deepest. The `sanitize-*` family is separate: it runs after a tool returns, so it reports a secret in tool output rather than keeping it out of the context. -→ [All 39 built-in policies](https://docs.befailproof.ai/policies/builtin) +→ [All 39 built-in policies](https://docs.befailproof.ai/policies/packs) --- @@ -207,7 +207,7 @@ Three decisions available to every policy: | `deny(message)` | Block it — message goes back to the agent | | `instruct(message)` | Let it through, but add context to the agent's next prompt | -→ [Custom policies guide](https://docs.befailproof.ai/policies/custom) +→ [Write a policy](https://docs.befailproof.ai/policies/editor) --- @@ -258,9 +258,9 @@ own cluster is available on the Enterprise plan. | Enforce | | |---|---| -| [Built-in policies](https://docs.befailproof.ai/policies/builtin) | All 39 policies with parameters | -| [Custom policies](https://docs.befailproof.ai/policies/custom) | Write your own | -| [Configuration](https://docs.befailproof.ai/policies/local-configuration) | Config scopes and merge rules | +| [Policy packs](https://docs.befailproof.ai/policies/packs) | The Failproof AI policies, and packs from the policy hub | +| [Write a policy](https://docs.befailproof.ai/policies/editor) | From an audit, or in code | +| [Configuration](https://docs.befailproof.ai/policies/local-configuration) | Config scopes, merge rules and policy parameters | | Instrument your own agent | | |---|---| diff --git a/docs/admin/keys-and-permissions.mdx b/docs/admin/keys-and-permissions.mdx index 82ca36dc2..d2a364ee0 100644 --- a/docs/admin/keys-and-permissions.mdx +++ b/docs/admin/keys-and-permissions.mdx @@ -54,7 +54,7 @@ Key secrets are shown when created or regenerated. Store them in a secret manage | Events | `events:add`, `events:read` | | Keys | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` is human-session only | | Users | `users:create`, `users:read`, `users:update`, `users:delete` | -| Evaluations | `evaluations:read`, `evaluations:trigger` | +| Evaluations | `evaluations:read`, `evaluations:trigger`, `evaluations:run` | | Dashboards | `dashboards:read`, `dashboards:write`, `dashboards:delete` | | Queries | `queries:read`, `queries:write`, `queries:delete`, `queries:run` | | Assistant | `agent:use` | diff --git a/docs/ar/policies/builtin-catalog.mdx b/docs/ar/policies/builtin-catalog.mdx deleted file mode 100644 index ea5cc26f1..000000000 --- a/docs/ar/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "كتالوج السياسات المدمجة" -description: "راجع كل سياسة مدمجة في Failproof AI، ومحفزها، والحالة الموصى بها، والمعاملات القابلة للتكوين." -icon: "list-checks" ---- - -الحزمة المثبتة هي مصدر الحقيقة لتوفر السياسات. قم بتشغيل `failproofai policies` بعد كل تحديث لأن إدخالات الكتالوج والسلوك قد يتغيران مع إصدار الحزمة. - -## خط الأساس الموصى به - -يقوم الإعداد الموجه حالياً بتفعيل معقمات الأسرار وحماية البيئة والحماية الذاتية وحراس الأوامر الكارثية وسلامة الفرع المحمي: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **مفعّل دائماً**. يُدرج أعلاه للكمال فقط، لكنه يسجل عند كل تقييم بغض النظر عما إذا كان يظهر في مجموعة السياسات المفعلة لديك، ولا يمكن تعطيله أو إيقافه مؤقتاً — حيث أن الحماية التي يمكن للوكيل إيقافها ليست حماية حقيقية. - -خط الأساس الموصى به أضيق عن قصد من **الكل**. قد تقاطع سياسات البنية التحتية وسير العمل العمل الصحيح ويجب تفعيلها للمستودعات والآلات التي تحتاجها. - -## الأسرار والبيئة - -| السياسة | المحفز | النتيجة | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | إخفاء JWTs من مخرجات الأداة قبل أن يراها النموذج. | -| `sanitize-api-keys` | `PostToolUse` | إخفاء مفاتيح OpenAI و Anthropic و GitHub و AWS و Stripe و Google الشائعة. | -| `sanitize-connection-strings` | `PostToolUse` | إخفاء سلاسل اتصال قواعد البيانات التي تحتوي على بيانات اعتماد. | -| `sanitize-private-key-content` | `PostToolUse` | إخفاء أجسام مفاتيح PEM الخاصة. | -| `sanitize-bearer-tokens` | `PostToolUse` | إخفاء رموز التفويض bearer. | -| `protect-env-vars` | `PreToolUse` على أدوات shell | حظر الأوامر التي تُفرغ متغيرات البيئة. | -| `block-env-files` | `PreToolUse` | حظر قراءة وكتابة ملفات `.env`. | -| `block-read-outside-cwd` | `PreToolUse` على أدوات read أو glob أو grep أو shell | الاحتفاظ بالقراءات داخل دليل عمل الجلسة. | -| `block-secrets-write` | `PreToolUse` على أدوات الكتابة | حظر الكتابة إلى أسماء ملفات المفاتيح السرية وبيانات الاعتماد الشائعة. | - -## الأوامر الخطيرة والبنية التحتية - -| السياسة | المحفز | النتيجة | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`، `PermissionRequest` | حظر `sudo` ما لم تطابق نمط السماح. | -| `block-curl-pipe-sh` | `PreToolUse` | حظر البرامج النصية المحملة الموجهة مباشرة إلى shell. | -| `block-rm-rf` | `PreToolUse` | حظر أنماط الحذف العودي الكارثية. | -| `block-failproofai-commands` | `PreToolUse`، `PermissionRequest` | **مفعّل دائماً، لا يمكن تعطيله.** حظر كل استدعاء CLI لـ Failproof AI وإيقاف ذاتي وحذف مدير الحزم. | -| `block-kubectl` | `PreToolUse` | التحكم في أوامر Kubernetes. | -| `block-terraform` | `PreToolUse` | التحكم في أوامر Terraform و OpenTofu. | -| `block-aws-cli` | `PreToolUse` | التحكم في أوامر AWS CLI. | -| `block-gcloud` | `PreToolUse` | التحكم في أوامر Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | التحكم في أوامر Azure CLI. | -| `block-helm` | `PreToolUse` | التحكم في أوامر Helm. | -| `block-gh-pipeline` | `PreToolUse` | التحكم في عمليات GitHub CLI التي تُحدث التغييرات المتعلقة بسير العمل والتشغيل والدمج والإصدار والذاكرة المؤقتة والأسرار. | - -## سلامة Git وقاعدة البيانات - -| السياسة | المحفز | النتيجة | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | حظر الدفع المباشر إلى الفروع المحمية المكونة. | -| `block-force-push` | `PreToolUse` | حظر الدفع القسري؛ يبقى `--force-with-lease` مسموحاً بالتنفيذ الحالي. | -| `block-work-on-main` | `PreToolUse` | حظر الالتزامات والدمج على الفروع المحمية. | -| `warn-git-amend` | `PreToolUse` | تحذير قبل إعادة كتابة التزام باستخدام `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | تحذير قبل حذف أو مسح المخزنات مؤقتاً بشكل دائم. | -| `warn-all-files-staged` | `PreToolUse` | تحذير على `git add -A` أو `git add .` أو `git add --all` الواسعة. | -| `warn-destructive-sql` | `PreToolUse` | تحذير على `DROP` و `TRUNCATE` و `DELETE` بدون `WHERE` عبر عملاء قواعد البيانات المعروفة. | -| `warn-schema-alteration` | `PreToolUse` | تحذير على عمليات `ALTER TABLE` المعروفة الخاصة بالأعمدة وإعادة التسمية. | - -## الحزم وسلوك النظام ودورات الوكيل - -| السياسة | المحفز | النتيجة | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | تحذير قبل النشر إلى سجلات الحزم. | -| `warn-global-package-install` | `PreToolUse` | تحذير قبل التثبيت العام للحزم. | -| `prefer-package-manager` | `PreToolUse` | توجيه الوكيل لاستخدام مدير حزم مسموح. | -| `warn-large-file-write` | `PreToolUse` على أدوات الكتابة | تحذير فوق حد حجم الملف المكون. | -| `warn-background-process` | `PreToolUse` | تحذير على أنماط العمليات الخلفية المنفصلة أو طويلة الأجل. | -| `warn-repeated-tool-calls` | `PreToolUse` | تحذير بعد ثلاث أو أكثر من استدعاءات الأداة المتطابقة. | - -## سير عمل نهاية المهمة - -تتطلب هذه السياسات جهازاً يصدر حدث `Stop` متوافقاً. - -| السياسة | النتيجة | -| --- | --- | -| `require-commit-before-stop` | رفض الإكمال بينما يبقى عمل متتبع غير ملتزم. | -| `require-push-before-stop` | رفض الإكمال بينما تبقى التزامات محلية فقط. | -| `require-pr-before-stop` | تطلب طلب دمج للفرع الحالي. | -| `require-no-conflicts-before-stop` | تطلب دمج نظيف ضد الفرع الأساسي المكون. | -| `require-ci-green-before-stop` | تطلب اكتمال فحوصات CI الحالية بنجاح. | - -## مرجع المعاملات - -كون المعاملات تحت كائن `policyParams` للنطاق المحدد. تتحقق الأنواع من قبل كل سياسة. - -| السياسة | المعامل | النوع والافتراضي | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`، `[]`؛ تحتوي الإدخالات على `regex` و `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`، `[]` | -| `block-sudo` | `allowPatterns` | `string[]`، `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`، `[]` | -| حاجبات البنية التحتية | `allowPatterns` | `string[]`، `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`، `[]` | -| `block-push-master` | `protectedBranches` | `string[]`، `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`، `["main", "master"]` | -| `prefer-package-manager` | `allowed`، `blocked` | `string[]`، `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`، `1024` | -| `require-push-before-stop` | `remote`، `baseBranch` | `string`، `"origin"`؛ `string`، `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`، `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`، `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - نمط السماح يوسع ما قد يفعله الوكيل. اختبر التقسيم الدقيق ومتغيرات الأوامر على جهاز الاستهداف قبل نشره عبر الأسطول. - \ No newline at end of file diff --git a/docs/ar/policies/builtin.mdx b/docs/ar/policies/builtin.mdx deleted file mode 100644 index ef479347f..000000000 --- a/docs/ar/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "السياسات المدمجة" -description: "تفعيل حواجز مصانة للحالات الشائعة لفشل الوكلاء." -icon: "library" ---- - -تغطي السياسات المدمجة معالجة الأسرار والملفات البيئية وأوامر shell المدمرة والفروع المحمية وأدوات السحابة والبنية التحتية ونشر الحزم والاستدعاءات المتكررة والتحقق من سير العمل عند نهاية المهمة. - -## تفعيل التحقق من السياسة المدمجة - - - - 1. ثبّت السياسة على جهاز متصل باستخدام واجهة سطر الأوامر المحلية. - 2. قم بتشغيل إجراء اختبار آمن في الوكيل المدعوم. - 3. انتقل إلى **Observe → policy** وقم بالتصفية حسب اسم السياسة أو بيئة الجهاز أو القرار. - 4. افتح الجلسة المرتبطة لتأكيد مدخلات الأداة المطابقة والسبب المُرجع. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - أزلها باستخدام `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -اعرض قائمة بالسياسات المتاحة في نسختك المثبتة: - -```bash -failproofai policies -``` - -فعّل سياسة واحدة لمشروع: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -فعّل عدة سياسات لأنظمة اختبار محددة: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -بعض السياسات تقبل معاملات أو يتم وضع علامة عليها كنسخة تجريبية. راجع الوصف ونطاق المطابقة والسلوك الافتراضي قبل النشر. قد تحمي السياسة التي تحافظ على سير عمل واحد من العمليات الصحيحة في سير عمل آخر. - - - راجع جميع السياسات الـ 40 الحالية، مشغلاتها والخط الأساسي الموصى به والمعاملات. - - - - فضّل نطاق المشروع للتوقعات الخاصة بالمستودع ونطاق المستخدم لمتطلبات السلامة الموسعة على الجهاز. - \ No newline at end of file diff --git a/docs/ar/policies/custom.mdx b/docs/ar/policies/custom.mdx deleted file mode 100644 index 6827b9df2..000000000 --- a/docs/ar/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "سياسات مخصصة" -description: "اكتب سياسة لحالة فشل فريدة من نوعها في سير عمل وكيلك." -icon: "shield-plus" ---- - -أنشئ ملفًا ينتهي بـ `policies.js` أو `policies.mjs` أو `policies.ts` تحت `.failproofai/policies/`. يتم تحميل ملفات الاتفاقية تلقائيًا في نطاق المشروع والمستخدم. - -## اختبر السياسة قبل النشر على Cloud - - - - 1. ثبّت السياسة المخصصة على جهاز اختبار واحد وفعّل كلاً من الإجراء المطابق وعدم التطابق الشرعي. - 2. انتقل إلى **Observe → policy** وقارن بين القرارين. - 3. افتح كل جلسة مرتبطة وتحقق من أن حمل الحدث يحتوي على أدلة كافية للقاعدة. - 4. عندما يكون السلوك صحيحًا، انقل المصدر المراجع إلى **Admin → policy editor** ونشّر نسخة. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - يتم تحميل ملفات الاتفاقية تحت `.failproofai/policies/` بدون `--custom`. احتفظ بأمر التثبيت الصريح في CI عندما يجب أن يفشل التحقق على وحدة معطوبة. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -هذا يطابق `production/config.yml` و `/srv/production/config.yml` و `/srv/production` و `C:\\production\\config.yml` لكل من `Write` و `Edit`. لا يطابق الأسماء مثل `production-backup` لأن `production` يجب أن تكون قطعة مسار كاملة. - -تحقق من صحة وثبّت ملف صريح: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -سياق السياسة يتضمن نوع الحدث، والحمل المعياري، واسم الأداة والمدخلات، وبيانات تعريف الجلسة، والمعاملات، والمصدر CLI عند توفره. - -## اختبر مسارات الفشل - -قم بتشغيل التحقق من الصحة بعد تغيير ملف الإدخال أو أي وحدة محلية يستوردها: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -مسار CLI الصارم يفشل للملفات المفقودة وأخطاء بناء الجملة والاستيرادات غير المحللة والاستثناءات على مستوى أعلى وانتهاءات مهلة تحميل الوحدة. في وقت الفرض، يتم تسجيل ملف مخصص معطوب والتخطي عنه بحيث يمكن للسياسات المدمجة أن تستمر. تعامل مع أي تحذير تحميل كفقدان للفرض المتوقع وأرسل تنبيهًا عليه في سجلات الإنتاج. - -استخدم أسماء فريدة عالميًا عبر السياسات الصريحة والاتفاقية والمدارة من Cloud. اجعل وظائف السياسة حتمية، وقيّد الاتصالات الخارجية بمهل زمنية قصيرة، وأرجع `allow` أو `instruct` أو `deny` مقصودة على كل مسار. - - - السياسة المخصصة هي كود الفرض. اختبر الحقول المفقودة وأسماء الأدوات البديلة والمدخلات غير الصحيحة—ليس فقط المطابقة المتوقعة. - \ No newline at end of file diff --git a/docs/ar/policies/fleet.mdx b/docs/ar/policies/fleet.mdx deleted file mode 100644 index 4fcf2f76f..000000000 --- a/docs/ar/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "نشر السياسات على الأجهزة" -description: "تحديد الأجهزة المسجلة والمحدثة والتي تطبق إصدارات السياسات المقصودة." -icon: "network" ---- - -يجيب تغطية الأسطول عما إذا كانت سياسة موجودة حيث توجد المخاطرة. تتبع الأجهزة من خلال معرّف مستقر وتسمية قابلة للقراءة من قبل الإنسان، ثم قارن حالة النشر المخصصة والمبلغ عنها. - -## التحقق من التغطية - - - - 1. انتقل إلى **المسؤول → الإنفاذ** واستعرض إجمالي الإنفاذ والمراقبة. - 2. ابحث عن جهاز حسب المعرّف أو التسمية، أو قم بالتصفية للأجهزة التي تفتقد سياسة. - 3. وسّع الصف لمقارنة السياسات المخصصة والنشر المبلغ عنه آخر تسجيل دخول والسجل. - 4. أعد التحديث بعد فترة الاستطلاع للجهاز عندما يبقى النشر المطبق قيد الانتظار. - - ![أسطول الإنفاذ يعرض تغطية السياسة وحالة نشر الجهاز وتعيينات المراقبة والإنفاذ.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - استخدم `fp events --agent-id --since 24h` للتأكد من وصول نشاط وكيل الجهاز إلى السحابة. - - - -استخدم طرق عرض التغطية للعثور على: - -- الأجهزة التي لم تسحب النشر الأخير أبداً -- الأجهزة المسجلة التي توقفت عن الإبلاغ عن النشاط -- سياسة مخصصة للبيئة أو المجموعة الخاطئة -- انجراف الإصدار بعد تحديث متقطع - -إعادة تسمية جهاز دون إعادة الاتصال: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -التحقق من الحالة المحلية: - -```bash -failproofai config --status -``` - - - استخدم تسميات تحدد عبء العمل والبيئة. غالباً ما تكون أسماء المضيفين وحدها غير كافية بعد التوسيع التلقائي أو استبدال الجهاز. - \ No newline at end of file diff --git a/docs/de/policies/builtin-catalog.mdx b/docs/de/policies/builtin-catalog.mdx deleted file mode 100644 index 96dfd40e3..000000000 --- a/docs/de/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "Integrierter Richtlinienkatalog" -description: "Übersicht aller integrierten Failproof AI-Richtlinien mit Auslöser, empfohlenem Status und konfigurierbaren Parametern." -icon: "list-checks" ---- - -Das installierte Paket ist die maßgebliche Quelle für die Verfügbarkeit von Richtlinien. Führen Sie nach jedem Upgrade `failproofai policies` aus, da sich Katalogeinträge und Verhalten mit der Paketversion ändern können. - -## Empfohlene Grundkonfiguration - -Die empfohlene Auswahl des geführten Setups aktiviert derzeit Secret-Sanitizer, Umgebungsschutz, Selbstschutz, Schutz vor kritischen Befehlen und Sicherheit für geschützte Branches: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` ist **immer aktiv**. Die Richtlinie ist oben der Vollständigkeit halber aufgeführt, wird jedoch bei jeder Auswertung registriert, unabhängig davon, ob sie in Ihrer aktivierten Gruppe erscheint. Sie kann weder deaktiviert noch pausiert werden – ein Schutz, den der Agent selbst abschalten kann, ist kein Schutz. - -Die empfohlene Auswahl ist bewusst schmaler als **Alles**. Infrastruktur- und Workflow-Richtlinien können valide Arbeit unterbrechen und sollten nur für die Repositories und Maschinen aktiviert werden, die sie benötigen. - -## Secrets und Umgebung - -| Richtlinie | Auslöser | Ergebnis | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | JWTs aus der Tool-Ausgabe entfernen, bevor das Modell sie sieht. | -| `sanitize-api-keys` | `PostToolUse` | Gängige OpenAI-, Anthropic-, GitHub-, AWS-, Stripe- und Google-Schlüssel entfernen. | -| `sanitize-connection-strings` | `PostToolUse` | Datenbankverbindungsstrings mit Zugangsdaten entfernen. | -| `sanitize-private-key-content` | `PostToolUse` | PEM-Private-Key-Inhalte entfernen. | -| `sanitize-bearer-tokens` | `PostToolUse` | Authorization-Bearer-Tokens entfernen. | -| `protect-env-vars` | `PreToolUse` bei Shell-Tools | Befehle blockieren, die Umgebungsvariablen ausgeben. | -| `block-env-files` | `PreToolUse` | Lese- und Schreibzugriffe auf `.env`-Dateien blockieren. | -| `block-read-outside-cwd` | `PreToolUse` bei Lese-, Glob-, Grep- oder Shell-Tools | Lesezugriffe auf das Arbeitsverzeichnis der Sitzung beschränken. | -| `block-secrets-write` | `PreToolUse` bei Schreib-Tools | Schreibzugriffe auf gängige Secret-Key- und Credential-Dateinamen blockieren. | - -## Gefährliche Befehle und Infrastruktur - -| Richtlinie | Auslöser | Ergebnis | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | `sudo` blockieren, sofern kein Allow-Muster übereinstimmt. | -| `block-curl-pipe-sh` | `PreToolUse` | Heruntergeladene Skripte blockieren, die direkt an eine Shell weitergeleitet werden. | -| `block-rm-rf` | `PreToolUse` | Kritische rekursive Löschmuster blockieren. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Immer aktiv, kann nicht deaktiviert werden.** Jeden Failproof AI CLI-Aufruf, Self-Pause und Paketmanager-Deinstallation blockieren. | -| `block-kubectl` | `PreToolUse` | Kubernetes-Befehle kontrollieren. | -| `block-terraform` | `PreToolUse` | Terraform- und OpenTofu-Befehle kontrollieren. | -| `block-aws-cli` | `PreToolUse` | AWS CLI-Befehle kontrollieren. | -| `block-gcloud` | `PreToolUse` | Google Cloud CLI-Befehle kontrollieren. | -| `block-az-cli` | `PreToolUse` | Azure CLI-Befehle kontrollieren. | -| `block-helm` | `PreToolUse` | Helm-Befehle kontrollieren. | -| `block-gh-pipeline` | `PreToolUse` | Mutierende GitHub CLI-Operationen für Workflows, Runs, Merges, Releases, Caches und Secrets kontrollieren. | - -## Git- und Datenbanksicherheit - -| Richtlinie | Auslöser | Ergebnis | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Direkte Pushes auf konfigurierte geschützte Branches blockieren. | -| `block-force-push` | `PreToolUse` | Force-Pushes blockieren; `--force-with-lease` bleibt durch die aktuelle Implementierung erlaubt. | -| `block-work-on-main` | `PreToolUse` | Commits und Merges auf geschützten Branches blockieren. | -| `warn-git-amend` | `PreToolUse` | Warnung vor dem Umschreiben eines Commits mit `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Warnung vor dem dauerhaften Löschen oder Leeren von Stashes. | -| `warn-all-files-staged` | `PreToolUse` | Warnung bei breit gefasstem `git add -A`, `git add .` oder `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Warnung bei `DROP`, `TRUNCATE` und `DELETE` ohne `WHERE` über erkannte Datenbankclients. | -| `warn-schema-alteration` | `PreToolUse` | Warnung bei erkannten `ALTER TABLE`-Spalten- und Umbenennungsoperationen. | - -## Pakete, Systemverhalten und Agent-Schleifen - -| Richtlinie | Auslöser | Ergebnis | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Warnung vor der Veröffentlichung in Paketregistries. | -| `warn-global-package-install` | `PreToolUse` | Warnung vor der globalen Paketinstallation. | -| `prefer-package-manager` | `PreToolUse` | Den Agenten anweisen, einen erlaubten Paketmanager zu verwenden. | -| `warn-large-file-write` | `PreToolUse` bei Schreib-Tools | Warnung bei Überschreiten des konfigurierten Dateigrößen-Schwellenwerts. | -| `warn-background-process` | `PreToolUse` | Warnung bei getrennten oder langlebigen Hintergrundprozess-Mustern. | -| `warn-repeated-tool-calls` | `PreToolUse` | Warnung nach drei oder mehr identischen Tool-Aufrufen. | - -## Aufgabenabschluss-Workflow - -Diese Richtlinien erfordern ein Harness, das ein kompatibles `Stop`-Ereignis ausgibt. - -| Richtlinie | Ergebnis | -| --- | --- | -| `require-commit-before-stop` | Abschluss verweigern, solange verfolgte Änderungen uncommittet sind. | -| `require-push-before-stop` | Abschluss verweigern, solange Commits nur lokal vorhanden sind. | -| `require-pr-before-stop` | Einen Pull Request für den aktuellen Branch verlangen. | -| `require-no-conflicts-before-stop` | Einen konfliktfreien Merge mit dem konfigurierten Basis-Branch verlangen. | -| `require-ci-green-before-stop` | Erfolgreichen Abschluss der CI-Prüfungen für den aktuellen HEAD verlangen. | - -## Parameterreferenz - -Parameter werden unter dem `policyParams`-Objekt des gewählten Scopes konfiguriert. Die Typen werden von jeder Richtlinie validiert. - -| Richtlinie | Parameter | Typ und Standard | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; Einträge enthalten `regex` und `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Infrastruktur-Blocker | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Ein Allow-Muster erweitert den Handlungsspielraum eines Agenten. Testen Sie die genaue Tokenisierung und Befehlsvarianten auf dem Ziel-Harness, bevor Sie es in einer gesamten Flotte einsetzen. - \ No newline at end of file diff --git a/docs/de/policies/builtin.mdx b/docs/de/policies/builtin.mdx deleted file mode 100644 index 6f9c9367c..000000000 --- a/docs/de/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Eingebaute Richtlinien" -description: "Aktiviere gepflegte Schutzmaßnahmen für häufige Agent-Fehlerszenarien." -icon: "library" ---- - -Eingebaute Richtlinien decken die Behandlung von Geheimnissen, Umgebungsdateien, destruktive Shell-Befehle, geschützte Branches, Cloud- und Infrastruktur-Tools, Paketveröffentlichungen, wiederholte Aufrufe sowie Workflow-Prüfungen am Aufgabenende ab. - -## Eine eingebaute Richtlinie aktivieren und überprüfen - - - - 1. Installiere die Richtlinie auf einem verbundenen Rechner mit der lokalen CLI. - 2. Führe eine sichere Testaktion im instrumentierten Agenten aus. - 3. Gehe zu **Observe → policy** und filtere nach dem Richtliniennamen, der Maschinenumgebung oder der Entscheidung. - 4. Öffne die verknüpfte Sitzung, um die übereinstimmende Tool-Eingabe und den zurückgegebenen Grund zu bestätigen. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Entferne sie mit `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Alle in der installierten Version verfügbaren Richtlinien auflisten: - -```bash -failproofai policies -``` - -Eine Richtlinie für ein Projekt aktivieren: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Mehrere Richtlinien für ausgewählte Harnesses aktivieren: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Einige Richtlinien akzeptieren Parameter oder sind als Beta markiert. Überprüfe Beschreibung, Geltungsbereich und Standardverhalten vor dem Rollout. Eine Richtlinie, die einen Workflow schützt, kann in einem anderen gültige Operationen blockieren. - - - Alle 40 aktuellen Richtlinien, ihre Auslöser, die empfohlene Grundkonfiguration und Parameter einsehen. - - - - Bevorzuge den Projektbereich für repository-spezifische Anforderungen und den Benutzerbereich für maschinenweite Sicherheitsanforderungen. - \ No newline at end of file diff --git a/docs/de/policies/custom.mdx b/docs/de/policies/custom.mdx deleted file mode 100644 index 1fabbf193..000000000 --- a/docs/de/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Benutzerdefinierte Richtlinien" -description: "Schreibe eine Richtlinie für einen Fehlerfall, der einzigartig für deinen Agenten-Workflow ist." -icon: "shield-plus" ---- - -Erstelle eine Datei mit der Endung `policies.js`, `policies.mjs` oder `policies.ts` unter `.failproofai/policies/`. Konventionsdateien werden automatisch auf Projekt- und Benutzerebene geladen. - -## Richtlinie vor der Cloud-Veröffentlichung testen - - - - 1. Installiere die benutzerdefinierte Richtlinie auf einem Testrechner und löse sowohl eine übereinstimmende Aktion als auch eine legitime Nicht-Übereinstimmung aus. - 2. Gehe zu **Observe → policy** und vergleiche die beiden Entscheidungen. - 3. Öffne jede verknüpfte Sitzung und überprüfe, ob das Ereignis-Payload genügend Belege für die Regel enthält. - 4. Wenn das Verhalten korrekt ist, verschiebe den geprüften Quellcode in **Admin → policy editor** und veröffentliche eine Version. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Konventionsdateien unter `.failproofai/policies/` werden ohne `--custom` geladen. Behalte einen expliziten Installationsbefehl in CI, wenn die Validierung bei einem defekten Modul fehlschlagen soll. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Dies trifft auf `production/config.yml`, `/srv/production/config.yml`, `/srv/production` und `C:\\production\\config.yml` sowohl für `Write` als auch für `Edit` zu. Namen wie `production-backup` werden nicht erfasst, da `production` ein vollständiges Pfadsegment sein muss. - -Validiere und installiere eine explizite Datei: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Der Richtlinienkontext enthält den Ereignistyp, die normalisierte Nutzlast, den Tool-Namen und die Tool-Eingabe, Sitzungsmetadaten, Parameter sowie das Quell-CLI, sofern verfügbar. - -## Fehlerpfade testen - -Führe die Validierung nach dem Ändern der Einstiegsdatei oder eines lokalen Moduls, das sie importiert, erneut aus: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Der strikte CLI-Pfad schlägt bei fehlenden Dateien, Syntaxfehlern, nicht auflösbaren Importen, Ausnahmen auf oberster Ebene und Zeitüberschreitungen beim Modulladen fehl. Zur Durchsetzungszeit wird eine defekte benutzerdefinierte Datei protokolliert und übersprungen, damit eingebaute Richtlinien weiter ausgeführt werden können. Behandle jede Ladewarnung als Verlust der erwarteten Durchsetzung und löse in Produktionsprotokollen einen Alarm aus. - -Verwende global eindeutige Namen für explizite, konventionsbasierte und Cloud-verwaltete Richtlinien. Halte Richtlinienfunktionen deterministisch, begrenze externe Aufrufe mit kurzen Timeouts und gib auf jedem Pfad ein bewusstes `allow`, `instruct` oder `deny` zurück. - - - Eine benutzerdefinierte Richtlinie ist Durchsetzungscode. Teste fehlende Felder, alternative Tool-Namen und fehlerhafte Eingaben – nicht nur die erwartete Übereinstimmung. - \ No newline at end of file diff --git a/docs/de/policies/fleet.mdx b/docs/de/policies/fleet.mdx deleted file mode 100644 index 09bd69af6..000000000 --- a/docs/de/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Richtlinien auf Maschinen ausrollen" -description: "Behalten Sie den Überblick, welche Maschinen registriert sind, aktuelle Konfigurationen ausführen und die vorgesehenen Richtlinienversionen durchsetzen." -icon: "network" ---- - -Die Fleet-Abdeckung beantwortet die Frage, ob eine Richtlinie dort vorhanden ist, wo das Risiko besteht. Verfolgen Sie Maschinen anhand einer stabilen ID und einer lesbaren Bezeichnung, und vergleichen Sie dann den zugewiesenen und gemeldeten Deployment-Status. - -## Abdeckung prüfen - - - - 1. Gehen Sie zu **Admin → Durchsetzung** und überprüfen Sie die Gesamtzahlen für „Durchsetzend" und „Beobachtend". - 2. Suchen Sie nach einer Maschine anhand von ID oder Bezeichnung, oder filtern Sie nach Maschinen ohne zugewiesene Richtlinie. - 3. Erweitern Sie eine Zeile, um zugewiesene Richtlinien, gemeldetes Deployment, letzten Check-in und Verlauf zu vergleichen. - 4. Aktualisieren Sie die Ansicht nach dem Abfrageintervall der Maschine, wenn ein angewendetes Deployment noch aussteht. - - ![Das Enforcement-Fleet mit Richtlinienabdeckung, Deployment-Status der Maschine sowie Beobachtungs- und Durchsetzungszuweisungen.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Verwenden Sie `fp events --agent-id --since 24h`, um zu bestätigen, dass die Agentaktivität der Maschine die Cloud erreicht. - - - -Nutzen Sie die Abdeckungsansichten, um Folgendes zu ermitteln: - -- Maschinen, die das neueste Deployment nie abgerufen haben -- Registrierte Maschinen, die keine Aktivität mehr melden -- Eine Richtlinie, die der falschen Umgebung oder Gruppe zugewiesen wurde -- Versionsabweichungen nach einem unterbrochenen Update - -Benennen Sie eine Maschine um, ohne sie neu zu verbinden: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Lokalen Status prüfen: - -```bash -failproofai config --status -``` - - - Verwenden Sie Bezeichnungen, die Workload und Umgebung identifizieren. Hostnamen allein sind nach Autoscaling oder Maschinenaustausch oft nicht ausreichend. - \ No newline at end of file diff --git a/docs/docs.json b/docs/docs.json index e8f6b669d..a003f8136 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -112,7 +112,6 @@ "sessions/policy-decisions", "sessions/tools", "sessions/errors", - "sessions/evaluations", "sessions/metrics", "sessions/dashboards", "sessions/queries" @@ -135,6 +134,16 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "evaluations/overview", + "evaluations/write", + "evaluations/test", + "evaluations/deploy", + "sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -158,17 +167,23 @@ { "group": "Prevent repeat failures", "pages": [ - "policies/overview", - "policies/builtin", - "policies/builtin-catalog", - "policies/custom", - "policies/packs", - "policies/publish-a-pack", - "policies/local-configuration", + "policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "policies/editor", + "policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ + "policies/test", "policies/deploy", - "policies/fleet", "policies/rollback", + "policies/publish-a-pack", "policies/failure-behavior" ] } @@ -211,6 +226,7 @@ "pages": [ "reference/failproof-cli", "reference/local-dashboard", + "policies/local-configuration", "reference/cloud-cli", "reference/http-api", "reference/events-and-configuration", @@ -275,7 +291,6 @@ "zh/sessions/policy-decisions", "zh/sessions/tools", "zh/sessions/errors", - "zh/sessions/evaluations", "zh/sessions/metrics", "zh/sessions/dashboards", "zh/sessions/queries" @@ -298,6 +313,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "zh/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -321,17 +342,22 @@ { "group": "Prevent repeat failures", "pages": [ - "zh/policies/overview", - "zh/policies/builtin", - "zh/policies/builtin-catalog", - "zh/policies/custom", - "zh/policies/packs", - "zh/policies/publish-a-pack", - "zh/policies/local-configuration", + "zh/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "zh/policies/editor", + "zh/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "zh/policies/deploy", - "zh/policies/fleet", "zh/policies/rollback", + "zh/policies/publish-a-pack", "zh/policies/failure-behavior" ] } @@ -374,6 +400,7 @@ "pages": [ "zh/reference/failproof-cli", "zh/reference/local-dashboard", + "zh/policies/local-configuration", "zh/reference/cloud-cli", "zh/reference/http-api", "zh/reference/events-and-configuration", @@ -432,7 +459,6 @@ "ja/sessions/policy-decisions", "ja/sessions/tools", "ja/sessions/errors", - "ja/sessions/evaluations", "ja/sessions/metrics", "ja/sessions/dashboards", "ja/sessions/queries" @@ -455,6 +481,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "ja/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -478,17 +510,22 @@ { "group": "Prevent repeat failures", "pages": [ - "ja/policies/overview", - "ja/policies/builtin", - "ja/policies/builtin-catalog", - "ja/policies/custom", - "ja/policies/packs", - "ja/policies/publish-a-pack", - "ja/policies/local-configuration", + "ja/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "ja/policies/editor", + "ja/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "ja/policies/deploy", - "ja/policies/fleet", "ja/policies/rollback", + "ja/policies/publish-a-pack", "ja/policies/failure-behavior" ] } @@ -531,6 +568,7 @@ "pages": [ "ja/reference/failproof-cli", "ja/reference/local-dashboard", + "ja/policies/local-configuration", "ja/reference/cloud-cli", "ja/reference/http-api", "ja/reference/events-and-configuration", @@ -589,7 +627,6 @@ "ko/sessions/policy-decisions", "ko/sessions/tools", "ko/sessions/errors", - "ko/sessions/evaluations", "ko/sessions/metrics", "ko/sessions/dashboards", "ko/sessions/queries" @@ -612,6 +649,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "ko/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -635,17 +678,22 @@ { "group": "Prevent repeat failures", "pages": [ - "ko/policies/overview", - "ko/policies/builtin", - "ko/policies/builtin-catalog", - "ko/policies/custom", - "ko/policies/packs", - "ko/policies/publish-a-pack", - "ko/policies/local-configuration", + "ko/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "ko/policies/editor", + "ko/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "ko/policies/deploy", - "ko/policies/fleet", "ko/policies/rollback", + "ko/policies/publish-a-pack", "ko/policies/failure-behavior" ] } @@ -688,6 +736,7 @@ "pages": [ "ko/reference/failproof-cli", "ko/reference/local-dashboard", + "ko/policies/local-configuration", "ko/reference/cloud-cli", "ko/reference/http-api", "ko/reference/events-and-configuration", @@ -746,7 +795,6 @@ "es/sessions/policy-decisions", "es/sessions/tools", "es/sessions/errors", - "es/sessions/evaluations", "es/sessions/metrics", "es/sessions/dashboards", "es/sessions/queries" @@ -769,6 +817,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "es/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -792,17 +846,22 @@ { "group": "Prevent repeat failures", "pages": [ - "es/policies/overview", - "es/policies/builtin", - "es/policies/builtin-catalog", - "es/policies/custom", - "es/policies/packs", - "es/policies/publish-a-pack", - "es/policies/local-configuration", + "es/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "es/policies/editor", + "es/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "es/policies/deploy", - "es/policies/fleet", "es/policies/rollback", + "es/policies/publish-a-pack", "es/policies/failure-behavior" ] } @@ -845,6 +904,7 @@ "pages": [ "es/reference/failproof-cli", "es/reference/local-dashboard", + "es/policies/local-configuration", "es/reference/cloud-cli", "es/reference/http-api", "es/reference/events-and-configuration", @@ -903,7 +963,6 @@ "pt-br/sessions/policy-decisions", "pt-br/sessions/tools", "pt-br/sessions/errors", - "pt-br/sessions/evaluations", "pt-br/sessions/metrics", "pt-br/sessions/dashboards", "pt-br/sessions/queries" @@ -926,6 +985,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "pt-br/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -949,17 +1014,22 @@ { "group": "Prevent repeat failures", "pages": [ - "pt-br/policies/overview", - "pt-br/policies/builtin", - "pt-br/policies/builtin-catalog", - "pt-br/policies/custom", - "pt-br/policies/packs", - "pt-br/policies/publish-a-pack", - "pt-br/policies/local-configuration", + "pt-br/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "pt-br/policies/editor", + "pt-br/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "pt-br/policies/deploy", - "pt-br/policies/fleet", "pt-br/policies/rollback", + "pt-br/policies/publish-a-pack", "pt-br/policies/failure-behavior" ] } @@ -1002,6 +1072,7 @@ "pages": [ "pt-br/reference/failproof-cli", "pt-br/reference/local-dashboard", + "pt-br/policies/local-configuration", "pt-br/reference/cloud-cli", "pt-br/reference/http-api", "pt-br/reference/events-and-configuration", @@ -1060,7 +1131,6 @@ "de/sessions/policy-decisions", "de/sessions/tools", "de/sessions/errors", - "de/sessions/evaluations", "de/sessions/metrics", "de/sessions/dashboards", "de/sessions/queries" @@ -1083,6 +1153,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "de/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1106,17 +1182,22 @@ { "group": "Prevent repeat failures", "pages": [ - "de/policies/overview", - "de/policies/builtin", - "de/policies/builtin-catalog", - "de/policies/custom", - "de/policies/packs", - "de/policies/publish-a-pack", - "de/policies/local-configuration", + "de/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "de/policies/editor", + "de/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "de/policies/deploy", - "de/policies/fleet", "de/policies/rollback", + "de/policies/publish-a-pack", "de/policies/failure-behavior" ] } @@ -1159,6 +1240,7 @@ "pages": [ "de/reference/failproof-cli", "de/reference/local-dashboard", + "de/policies/local-configuration", "de/reference/cloud-cli", "de/reference/http-api", "de/reference/events-and-configuration", @@ -1217,7 +1299,6 @@ "fr/sessions/policy-decisions", "fr/sessions/tools", "fr/sessions/errors", - "fr/sessions/evaluations", "fr/sessions/metrics", "fr/sessions/dashboards", "fr/sessions/queries" @@ -1240,6 +1321,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "fr/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1263,17 +1350,22 @@ { "group": "Prevent repeat failures", "pages": [ - "fr/policies/overview", - "fr/policies/builtin", - "fr/policies/builtin-catalog", - "fr/policies/custom", - "fr/policies/packs", - "fr/policies/publish-a-pack", - "fr/policies/local-configuration", + "fr/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "fr/policies/editor", + "fr/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "fr/policies/deploy", - "fr/policies/fleet", "fr/policies/rollback", + "fr/policies/publish-a-pack", "fr/policies/failure-behavior" ] } @@ -1316,6 +1408,7 @@ "pages": [ "fr/reference/failproof-cli", "fr/reference/local-dashboard", + "fr/policies/local-configuration", "fr/reference/cloud-cli", "fr/reference/http-api", "fr/reference/events-and-configuration", @@ -1374,7 +1467,6 @@ "ru/sessions/policy-decisions", "ru/sessions/tools", "ru/sessions/errors", - "ru/sessions/evaluations", "ru/sessions/metrics", "ru/sessions/dashboards", "ru/sessions/queries" @@ -1397,6 +1489,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "ru/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1420,17 +1518,22 @@ { "group": "Prevent repeat failures", "pages": [ - "ru/policies/overview", - "ru/policies/builtin", - "ru/policies/builtin-catalog", - "ru/policies/custom", - "ru/policies/packs", - "ru/policies/publish-a-pack", - "ru/policies/local-configuration", + "ru/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "ru/policies/editor", + "ru/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "ru/policies/deploy", - "ru/policies/fleet", "ru/policies/rollback", + "ru/policies/publish-a-pack", "ru/policies/failure-behavior" ] } @@ -1473,6 +1576,7 @@ "pages": [ "ru/reference/failproof-cli", "ru/reference/local-dashboard", + "ru/policies/local-configuration", "ru/reference/cloud-cli", "ru/reference/http-api", "ru/reference/events-and-configuration", @@ -1531,7 +1635,6 @@ "hi/sessions/policy-decisions", "hi/sessions/tools", "hi/sessions/errors", - "hi/sessions/evaluations", "hi/sessions/metrics", "hi/sessions/dashboards", "hi/sessions/queries" @@ -1554,6 +1657,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "hi/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1577,17 +1686,22 @@ { "group": "Prevent repeat failures", "pages": [ - "hi/policies/overview", - "hi/policies/builtin", - "hi/policies/builtin-catalog", - "hi/policies/custom", - "hi/policies/packs", - "hi/policies/publish-a-pack", - "hi/policies/local-configuration", + "hi/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "hi/policies/editor", + "hi/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "hi/policies/deploy", - "hi/policies/fleet", "hi/policies/rollback", + "hi/policies/publish-a-pack", "hi/policies/failure-behavior" ] } @@ -1630,6 +1744,7 @@ "pages": [ "hi/reference/failproof-cli", "hi/reference/local-dashboard", + "hi/policies/local-configuration", "hi/reference/cloud-cli", "hi/reference/http-api", "hi/reference/events-and-configuration", @@ -1688,7 +1803,6 @@ "tr/sessions/policy-decisions", "tr/sessions/tools", "tr/sessions/errors", - "tr/sessions/evaluations", "tr/sessions/metrics", "tr/sessions/dashboards", "tr/sessions/queries" @@ -1711,6 +1825,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "tr/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1734,17 +1854,22 @@ { "group": "Prevent repeat failures", "pages": [ - "tr/policies/overview", - "tr/policies/builtin", - "tr/policies/builtin-catalog", - "tr/policies/custom", - "tr/policies/packs", - "tr/policies/publish-a-pack", - "tr/policies/local-configuration", + "tr/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "tr/policies/editor", + "tr/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "tr/policies/deploy", - "tr/policies/fleet", "tr/policies/rollback", + "tr/policies/publish-a-pack", "tr/policies/failure-behavior" ] } @@ -1787,6 +1912,7 @@ "pages": [ "tr/reference/failproof-cli", "tr/reference/local-dashboard", + "tr/policies/local-configuration", "tr/reference/cloud-cli", "tr/reference/http-api", "tr/reference/events-and-configuration", @@ -1845,7 +1971,6 @@ "vi/sessions/policy-decisions", "vi/sessions/tools", "vi/sessions/errors", - "vi/sessions/evaluations", "vi/sessions/metrics", "vi/sessions/dashboards", "vi/sessions/queries" @@ -1868,6 +1993,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "vi/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -1891,17 +2022,22 @@ { "group": "Prevent repeat failures", "pages": [ - "vi/policies/overview", - "vi/policies/builtin", - "vi/policies/builtin-catalog", - "vi/policies/custom", - "vi/policies/packs", - "vi/policies/publish-a-pack", - "vi/policies/local-configuration", + "vi/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "vi/policies/editor", + "vi/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "vi/policies/deploy", - "vi/policies/fleet", "vi/policies/rollback", + "vi/policies/publish-a-pack", "vi/policies/failure-behavior" ] } @@ -1944,6 +2080,7 @@ "pages": [ "vi/reference/failproof-cli", "vi/reference/local-dashboard", + "vi/policies/local-configuration", "vi/reference/cloud-cli", "vi/reference/http-api", "vi/reference/events-and-configuration", @@ -2002,7 +2139,6 @@ "it/sessions/policy-decisions", "it/sessions/tools", "it/sessions/errors", - "it/sessions/evaluations", "it/sessions/metrics", "it/sessions/dashboards", "it/sessions/queries" @@ -2025,6 +2161,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "it/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -2048,17 +2190,22 @@ { "group": "Prevent repeat failures", "pages": [ - "it/policies/overview", - "it/policies/builtin", - "it/policies/builtin-catalog", - "it/policies/custom", - "it/policies/packs", - "it/policies/publish-a-pack", - "it/policies/local-configuration", + "it/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "it/policies/editor", + "it/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "it/policies/deploy", - "it/policies/fleet", "it/policies/rollback", + "it/policies/publish-a-pack", "it/policies/failure-behavior" ] } @@ -2101,6 +2248,7 @@ "pages": [ "it/reference/failproof-cli", "it/reference/local-dashboard", + "it/policies/local-configuration", "it/reference/cloud-cli", "it/reference/http-api", "it/reference/events-and-configuration", @@ -2159,7 +2307,6 @@ "ar/sessions/policy-decisions", "ar/sessions/tools", "ar/sessions/errors", - "ar/sessions/evaluations", "ar/sessions/metrics", "ar/sessions/dashboards", "ar/sessions/queries" @@ -2182,6 +2329,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "ar/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -2205,17 +2358,22 @@ { "group": "Prevent repeat failures", "pages": [ - "ar/policies/overview", - "ar/policies/builtin", - "ar/policies/builtin-catalog", - "ar/policies/custom", - "ar/policies/packs", - "ar/policies/publish-a-pack", - "ar/policies/local-configuration", + "ar/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "ar/policies/editor", + "ar/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "ar/policies/deploy", - "ar/policies/fleet", "ar/policies/rollback", + "ar/policies/publish-a-pack", "ar/policies/failure-behavior" ] } @@ -2258,6 +2416,7 @@ "pages": [ "ar/reference/failproof-cli", "ar/reference/local-dashboard", + "ar/policies/local-configuration", "ar/reference/cloud-cli", "ar/reference/http-api", "ar/reference/events-and-configuration", @@ -2316,7 +2475,6 @@ "he/sessions/policy-decisions", "he/sessions/tools", "he/sessions/errors", - "he/sessions/evaluations", "he/sessions/metrics", "he/sessions/dashboards", "he/sessions/queries" @@ -2339,6 +2497,12 @@ "tab": "Find failures", "icon": "scan-search", "groups": [ + { + "group": "Evaluate agents", + "pages": [ + "he/sessions/evaluations" + ] + }, { "group": "Find and manage failures", "pages": [ @@ -2362,17 +2526,22 @@ { "group": "Prevent repeat failures", "pages": [ - "he/policies/overview", - "he/policies/builtin", - "he/policies/builtin-catalog", - "he/policies/custom", - "he/policies/packs", - "he/policies/publish-a-pack", - "he/policies/local-configuration", + "he/policies/overview" + ] + }, + { + "group": "Get a policy", + "pages": [ "he/policies/editor", + "he/policies/packs" + ] + }, + { + "group": "Ship a policy", + "pages": [ "he/policies/deploy", - "he/policies/fleet", "he/policies/rollback", + "he/policies/publish-a-pack", "he/policies/failure-behavior" ] } @@ -2415,6 +2584,7 @@ "pages": [ "he/reference/failproof-cli", "he/reference/local-dashboard", + "he/policies/local-configuration", "he/reference/cloud-cli", "he/reference/http-api", "he/reference/events-and-configuration", @@ -2522,6 +2692,250 @@ { "source": "/start/integrations/how-it-works", "destination": "/start/integrations/custom-agents" + }, + { + "source": "/policies/builtin", + "destination": "/policies/packs" + }, + { + "source": "/zh/policies/builtin", + "destination": "/zh/policies/packs" + }, + { + "source": "/ja/policies/builtin", + "destination": "/ja/policies/packs" + }, + { + "source": "/ko/policies/builtin", + "destination": "/ko/policies/packs" + }, + { + "source": "/es/policies/builtin", + "destination": "/es/policies/packs" + }, + { + "source": "/pt-br/policies/builtin", + "destination": "/pt-br/policies/packs" + }, + { + "source": "/de/policies/builtin", + "destination": "/de/policies/packs" + }, + { + "source": "/fr/policies/builtin", + "destination": "/fr/policies/packs" + }, + { + "source": "/ru/policies/builtin", + "destination": "/ru/policies/packs" + }, + { + "source": "/hi/policies/builtin", + "destination": "/hi/policies/packs" + }, + { + "source": "/tr/policies/builtin", + "destination": "/tr/policies/packs" + }, + { + "source": "/vi/policies/builtin", + "destination": "/vi/policies/packs" + }, + { + "source": "/it/policies/builtin", + "destination": "/it/policies/packs" + }, + { + "source": "/ar/policies/builtin", + "destination": "/ar/policies/packs" + }, + { + "source": "/he/policies/builtin", + "destination": "/he/policies/packs" + }, + { + "source": "/policies/builtin-catalog", + "destination": "/policies/packs" + }, + { + "source": "/zh/policies/builtin-catalog", + "destination": "/zh/policies/packs" + }, + { + "source": "/ja/policies/builtin-catalog", + "destination": "/ja/policies/packs" + }, + { + "source": "/ko/policies/builtin-catalog", + "destination": "/ko/policies/packs" + }, + { + "source": "/es/policies/builtin-catalog", + "destination": "/es/policies/packs" + }, + { + "source": "/pt-br/policies/builtin-catalog", + "destination": "/pt-br/policies/packs" + }, + { + "source": "/de/policies/builtin-catalog", + "destination": "/de/policies/packs" + }, + { + "source": "/fr/policies/builtin-catalog", + "destination": "/fr/policies/packs" + }, + { + "source": "/ru/policies/builtin-catalog", + "destination": "/ru/policies/packs" + }, + { + "source": "/hi/policies/builtin-catalog", + "destination": "/hi/policies/packs" + }, + { + "source": "/tr/policies/builtin-catalog", + "destination": "/tr/policies/packs" + }, + { + "source": "/vi/policies/builtin-catalog", + "destination": "/vi/policies/packs" + }, + { + "source": "/it/policies/builtin-catalog", + "destination": "/it/policies/packs" + }, + { + "source": "/ar/policies/builtin-catalog", + "destination": "/ar/policies/packs" + }, + { + "source": "/he/policies/builtin-catalog", + "destination": "/he/policies/packs" + }, + { + "source": "/policies/custom", + "destination": "/policies/editor" + }, + { + "source": "/zh/policies/custom", + "destination": "/zh/policies/editor" + }, + { + "source": "/ja/policies/custom", + "destination": "/ja/policies/editor" + }, + { + "source": "/ko/policies/custom", + "destination": "/ko/policies/editor" + }, + { + "source": "/es/policies/custom", + "destination": "/es/policies/editor" + }, + { + "source": "/pt-br/policies/custom", + "destination": "/pt-br/policies/editor" + }, + { + "source": "/de/policies/custom", + "destination": "/de/policies/editor" + }, + { + "source": "/fr/policies/custom", + "destination": "/fr/policies/editor" + }, + { + "source": "/ru/policies/custom", + "destination": "/ru/policies/editor" + }, + { + "source": "/hi/policies/custom", + "destination": "/hi/policies/editor" + }, + { + "source": "/tr/policies/custom", + "destination": "/tr/policies/editor" + }, + { + "source": "/vi/policies/custom", + "destination": "/vi/policies/editor" + }, + { + "source": "/it/policies/custom", + "destination": "/it/policies/editor" + }, + { + "source": "/ar/policies/custom", + "destination": "/ar/policies/editor" + }, + { + "source": "/he/policies/custom", + "destination": "/he/policies/editor" + }, + { + "source": "/policies/fleet", + "destination": "/policies/deploy" + }, + { + "source": "/zh/policies/fleet", + "destination": "/zh/policies/deploy" + }, + { + "source": "/ja/policies/fleet", + "destination": "/ja/policies/deploy" + }, + { + "source": "/ko/policies/fleet", + "destination": "/ko/policies/deploy" + }, + { + "source": "/es/policies/fleet", + "destination": "/es/policies/deploy" + }, + { + "source": "/pt-br/policies/fleet", + "destination": "/pt-br/policies/deploy" + }, + { + "source": "/de/policies/fleet", + "destination": "/de/policies/deploy" + }, + { + "source": "/fr/policies/fleet", + "destination": "/fr/policies/deploy" + }, + { + "source": "/ru/policies/fleet", + "destination": "/ru/policies/deploy" + }, + { + "source": "/hi/policies/fleet", + "destination": "/hi/policies/deploy" + }, + { + "source": "/tr/policies/fleet", + "destination": "/tr/policies/deploy" + }, + { + "source": "/vi/policies/fleet", + "destination": "/vi/policies/deploy" + }, + { + "source": "/it/policies/fleet", + "destination": "/it/policies/deploy" + }, + { + "source": "/ar/policies/fleet", + "destination": "/ar/policies/deploy" + }, + { + "source": "/he/policies/fleet", + "destination": "/he/policies/deploy" + }, + { + "source": "/built-in-policies", + "destination": "/policies/packs" } ] } diff --git a/docs/es/policies/builtin-catalog.mdx b/docs/es/policies/builtin-catalog.mdx deleted file mode 100644 index 96584d219..000000000 --- a/docs/es/policies/builtin-catalog.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: "Catálogo de políticas integradas" -description: "Revisa cada política integrada de Failproof AI, su disparador, estado recomendado y parámetros configurables." -icon: "list-checks" ---- - -El paquete instalado es la fuente de verdad para la disponibilidad de políticas. Ejecuta `failproofai policies` tras cada actualización, ya que las entradas del catálogo y el comportamiento pueden cambiar con la versión del paquete. - -## Línea base recomendada - -La selección recomendada por la configuración guiada activa actualmente sanitizadores de secretos, protecciones de entorno, autoprotección, guardas contra comandos catastróficos y seguridad de ramas protegidas: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` está **siempre activo**. Se incluye arriba por -completitud, pero se registra en cada evaluación independientemente de si aparece en -tu conjunto habilitado, y no puede desactivarse ni pausarse — una guarda contra -que el agente desactive la aplicación que el propio agente puede desactivar no es una guarda. - -La selección recomendada es deliberadamente más reducida que **Todo**. Las políticas de infraestructura y flujo de trabajo pueden interrumpir trabajo válido y deben habilitarse solo en los repositorios y máquinas que las necesiten. - -## Secretos y entorno - -| Política | Disparador | Resultado | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Redacta JWTs de la salida de herramientas antes de que el modelo los vea. | -| `sanitize-api-keys` | `PostToolUse` | Redacta claves comunes de OpenAI, Anthropic, GitHub, AWS, Stripe y Google. | -| `sanitize-connection-strings` | `PostToolUse` | Redacta cadenas de conexión a bases de datos que contengan credenciales. | -| `sanitize-private-key-content` | `PostToolUse` | Redacta cuerpos de claves privadas PEM. | -| `sanitize-bearer-tokens` | `PostToolUse` | Redacta tokens de autorización bearer. | -| `protect-env-vars` | `PreToolUse` en herramientas de shell | Bloquea comandos que exponen variables de entorno. | -| `block-env-files` | `PreToolUse` | Bloquea lecturas y escrituras de archivos `.env`. | -| `block-read-outside-cwd` | `PreToolUse` en herramientas de lectura, glob, grep o shell | Restringe las lecturas al directorio de trabajo de la sesión. | -| `block-secrets-write` | `PreToolUse` en herramientas de escritura | Bloquea escrituras en nombres de archivos comunes de claves secretas y credenciales. | - -## Comandos peligrosos e infraestructura - -| Política | Disparador | Resultado | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Bloquea `sudo` a menos que coincida un patrón de allow. | -| `block-curl-pipe-sh` | `PreToolUse` | Bloquea scripts descargados canalizados directamente a un shell. | -| `block-rm-rf` | `PreToolUse` | Bloquea patrones de eliminación recursiva catastrófica. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Siempre activo, no puede desactivarse.** Bloquea toda invocación de la CLI de Failproof AI, autopausa y desinstalación mediante gestores de paquetes. | -| `block-kubectl` | `PreToolUse` | Controla comandos de Kubernetes. | -| `block-terraform` | `PreToolUse` | Controla comandos de Terraform y OpenTofu. | -| `block-aws-cli` | `PreToolUse` | Controla comandos de la CLI de AWS. | -| `block-gcloud` | `PreToolUse` | Controla comandos de la CLI de Google Cloud. | -| `block-az-cli` | `PreToolUse` | Controla comandos de la CLI de Azure. | -| `block-helm` | `PreToolUse` | Controla comandos de Helm. | -| `block-gh-pipeline` | `PreToolUse` | Controla operaciones mutantes de flujos de trabajo, ejecuciones, fusiones, releases, caché y secretos de la CLI de GitHub. | - -## Seguridad de Git y bases de datos - -| Política | Disparador | Resultado | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Bloquea pushes directos a las ramas protegidas configuradas. | -| `block-force-push` | `PreToolUse` | Bloquea force-pushes; `--force-with-lease` permanece permitido en la implementación actual. | -| `block-work-on-main` | `PreToolUse` | Bloquea commits y fusiones en ramas protegidas. | -| `warn-git-amend` | `PreToolUse` | Advierte antes de reescribir un commit con `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Advierte antes de eliminar o limpiar stashes de forma permanente. | -| `warn-all-files-staged` | `PreToolUse` | Advierte sobre el uso amplio de `git add -A`, `git add .` o `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Advierte sobre `DROP`, `TRUNCATE` y `DELETE` sin `WHERE` a través de clientes de base de datos reconocidos. | -| `warn-schema-alteration` | `PreToolUse` | Advierte sobre operaciones reconocidas de `ALTER TABLE` en columnas y renombrados. | - -## Paquetes, comportamiento del sistema y bucles del agente - -| Política | Disparador | Resultado | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Advierte antes de publicar en registros de paquetes. | -| `warn-global-package-install` | `PreToolUse` | Advierte antes de instalar paquetes de forma global. | -| `prefer-package-manager` | `PreToolUse` | Instruye al agente para que use un gestor de paquetes permitido. | -| `warn-large-file-write` | `PreToolUse` en herramientas de escritura | Advierte cuando se supera el umbral de tamaño de archivo configurado. | -| `warn-background-process` | `PreToolUse` | Advierte sobre patrones de procesos en segundo plano desasociados o de larga duración. | -| `warn-repeated-tool-calls` | `PreToolUse` | Advierte tras tres o más llamadas idénticas a una herramienta. | - -## Flujo de trabajo al finalizar la tarea - -Estas políticas requieren un harness que emita un evento `Stop` compatible. - -| Política | Resultado | -| --- | --- | -| `require-commit-before-stop` | Rechaza la finalización mientras haya trabajo rastreado sin confirmar. | -| `require-push-before-stop` | Rechaza la finalización mientras haya commits que solo existan en local. | -| `require-pr-before-stop` | Requiere un pull request para la rama actual. | -| `require-no-conflicts-before-stop` | Requiere una fusión limpia contra la rama base configurada. | -| `require-ci-green-before-stop` | Requiere que las comprobaciones de CI del HEAD actual finalicen con éxito. | - -## Referencia de parámetros - -Configura los parámetros bajo el objeto `policyParams` del ámbito seleccionado. Los tipos son validados por cada política. - -| Política | Parámetro | Tipo y valor por defecto | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; las entradas contienen `regex` y `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Bloqueadores de infraestructura | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Un patrón de allow amplía lo que un agente puede hacer. Prueba la tokenización exacta y las variantes de comandos en el harness de destino antes de desplegarlo en una flota. - \ No newline at end of file diff --git a/docs/es/policies/builtin.mdx b/docs/es/policies/builtin.mdx deleted file mode 100644 index aed73c03c..000000000 --- a/docs/es/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Políticas integradas" -description: "Activa salvaguardas mantenidas para los modos de fallo más comunes de los agentes." -icon: "library" ---- - -Las políticas integradas cubren el manejo de secretos, archivos de entorno, comandos de shell destructivos, ramas protegidas, herramientas de nube e infraestructura, publicación de paquetes, llamadas repetidas y verificaciones de flujo de trabajo al final de tareas. - -## Activar y verificar una política integrada - - - - 1. Instala la política en una máquina conectada con el CLI local. - 2. Ejecuta una acción de prueba segura en el agente instrumentado. - 3. Ve a **Observe → policy** y filtra por nombre de política, entorno de máquina o decisión. - 4. Abre la sesión vinculada para confirmar la entrada de herramienta coincidente y el motivo devuelto. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Elimínala con `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Lista las políticas disponibles en tu versión instalada: - -```bash -failproofai policies -``` - -Activa una política para un proyecto: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Activa varias políticas para los entornos seleccionados: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Algunas políticas aceptan parámetros o están marcadas como beta. Revisa la descripción, el alcance de coincidencia y el comportamiento predeterminado antes de implementarlas. Una política que protege un flujo de trabajo puede bloquear operaciones válidas en otro. - - - Revisa las 40 políticas actuales, sus disparadores, la línea base recomendada y los parámetros disponibles. - - - - Prefiere el alcance de proyecto para expectativas específicas del repositorio y el alcance de usuario para los requisitos de seguridad en toda la máquina. - \ No newline at end of file diff --git a/docs/es/policies/custom.mdx b/docs/es/policies/custom.mdx deleted file mode 100644 index bf1d2602f..000000000 --- a/docs/es/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Políticas personalizadas" -description: "Escribe una política para un modo de fallo único en tu flujo de trabajo de agente." -icon: "shield-plus" ---- - -Crea un archivo con extensión `policies.js`, `policies.mjs` o `policies.ts` dentro de `.failproofai/policies/`. Los archivos de convención se cargan automáticamente en el ámbito de proyecto y de usuario. - -## Prueba la política antes de publicarla en Cloud - - - - 1. Instala la política personalizada en una máquina de prueba y ejecuta tanto una acción que coincida como una que no deba coincidir. - 2. Ve a **Observar → política** y compara las dos decisiones. - 3. Abre cada sesión vinculada y verifica que el payload del evento contiene suficiente evidencia para la regla. - 4. Cuando el comportamiento sea correcto, mueve el código revisado a **Admin → editor de políticas** y publica una versión. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Los archivos de convención bajo `.failproofai/policies/` se cargan sin necesidad de `--custom`. Mantén un comando de instalación explícito en CI cuando la validación deba fallar ante un módulo roto. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Esto coincide con `production/config.yml`, `/srv/production/config.yml`, `/srv/production` y `C:\\production\\config.yml` tanto para `Write` como para `Edit`. No coincide con nombres como `production-backup`, ya que `production` debe ser un segmento completo de la ruta. - -Valida e instala un archivo explícito: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -El contexto de la política incluye el tipo de evento, el payload normalizado, el nombre e input de la herramienta, los metadatos de la sesión, los parámetros y el CLI de origen cuando esté disponible. - -## Prueba los caminos de fallo - -Ejecuta la validación después de modificar el archivo de entrada o cualquier módulo local que importe: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -La ruta CLI con --strict falla ante archivos inexistentes, errores de sintaxis, importaciones no resueltas, excepciones a nivel superior y tiempos de espera en la carga de módulos. En el momento de la aplicación, un archivo personalizado con errores se registra y se omite para que las políticas integradas puedan continuar. Trata cualquier advertencia de carga como una pérdida de la aplicación esperada y genera una alerta en los registros de producción. - -Usa nombres globalmente únicos entre políticas explícitas, de convención y gestionadas desde Cloud. Mantén las funciones de política deterministas, limita las llamadas externas con tiempos de espera cortos y devuelve un allow, instruct o deny intencionado en cada camino de ejecución. - - - Una política personalizada es código de aplicación. Prueba campos faltantes, nombres de herramienta alternativos y entradas malformadas, no solo la coincidencia esperada. - \ No newline at end of file diff --git a/docs/es/policies/fleet.mdx b/docs/es/policies/fleet.mdx deleted file mode 100644 index 0455b7d64..000000000 --- a/docs/es/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Desplegar políticas en máquinas" -description: "Conoce qué máquinas están registradas, actualizadas y aplicando las versiones de política previstas." -icon: "network" ---- - -La cobertura de flota responde si existe una política donde existe el riesgo. Realiza un seguimiento de las máquinas mediante un ID estable y una etiqueta legible por humanos, y luego compara el estado de despliegue asignado y el reportado. - -## Verificar cobertura - - - - 1. Ve a **Admin → enforcement** y revisa los totales de aplicación y observación. - 2. Busca una máquina por ID o etiqueta, o filtra las máquinas que no tienen una política asignada. - 3. Expande una fila para comparar las políticas asignadas, el despliegue reportado, el último check-in y el historial. - 4. Actualiza tras el intervalo de sondeo de la máquina cuando un despliegue aplicado permanezca pendiente. - - ![El panel de flota de Enforcement mostrando cobertura de políticas, estado de despliegue de máquinas y asignaciones de observación y aplicación.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Usa `fp events --agent-id --since 24h` para confirmar que la actividad del agente de la máquina llega a Cloud. - - - -Usa las vistas de cobertura para encontrar: - -- Máquinas que nunca obtuvieron el último despliegue -- Máquinas registradas que dejaron de reportar actividad -- Una política asignada al entorno o cohorte incorrecto -- Deriva de versiones tras una actualización interrumpida - -Renombra una máquina sin reconectarla: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Comprueba el estado local: - -```bash -failproofai config --status -``` - - - Usa etiquetas que identifiquen la carga de trabajo y el entorno. Los nombres de host por sí solos suelen ser insuficientes tras un autoescalado o reemplazo de máquina. - \ No newline at end of file diff --git a/docs/evaluations/deploy.mdx b/docs/evaluations/deploy.mdx new file mode 100644 index 000000000..93bf669f7 --- /dev/null +++ b/docs/evaluations/deploy.mdx @@ -0,0 +1,55 @@ +--- +title: "Deploy and version an evaluation" +description: "Deploy an immutable version, see what is live, publish new versions, roll back, and score sessions you already have." +icon: "cloud-upload" +--- + +## Deploy it + +Select **deploy `@`** at the bottom of the authoring page. The version is immutable once published: from then on, every session that finishes, and that its condition applies to, is scored by it. + +## See what is live + +**Analyze → eval authoring** lists your organization's hosted definitions, the evaluations the managed evaluator runs for it. Each row shows: + +- its name, key, version, and result type +- its source checksum, which tells deployed revisions apart without opening the code +- whether it is **conditional** or runs on **all completed sessions** — the condition is what scopes an evaluation to particular agents or environments +- its timeout, its labels, and when it last changed + +![The hosted definitions list: each evaluation's name, key, version, result type, checksum, timeout, and scope, with new version and enable or disable.](/images/dashboard/eval-definitions.png) + +Search the list, or filter it by state. Evaluations your own worker registers are not listed here; their results carry a **customer** tag on the [evaluations page](/sessions/evaluations), and hosted ones carry **managed**. + +An organization can have up to 100 different hosted evaluations enabled at once. + +## Publish a new version + +Select **new version** on a row. The authoring page opens with that version's code; change it, test it, and deploy it. Its key and result type carry over and cannot change. + +Publishing a successor disables its predecessor and keeps it on the list. Results keep the version that produced them, so a chart shows exactly when the new logic took over. + +## Roll back + +Select **disable** on the current version and **enable** on the one you want back. Nothing is deleted, and every result stays as it was. + +## Stop an evaluation + +Select **disable**. With no enabled version, it stops running on new sessions. To stop an evaluation your own worker runs, stop registering it: remove it from the worker, or stop the worker. + +## Score sessions you already have + +Evaluation runs forward: a version deployed now never scores a session that ended before it. To score history, open **score sessions you already have** on the eval authoring page, choose a window of up to 90 days and, optionally, a single evaluation, and count before you run. The count is exactly what will run, and each session-and-evaluation pair in it is a billable evaluation. + +It fills gaps only. A session that already has a result for that evaluation keeps it, and running the same window twice scores nothing new. + +To score one session again — after a fix, or for a session that never ended cleanly — select **re-evaluate** on its page. The new result is added to the session's history; earlier ones stay. + +## Permissions + +| Permission | Lets you | +| --- | --- | +| `evaluations:read` | See results, and open the eval authoring page | +| `evaluations:trigger` | See, deploy, version, enable, and disable hosted definitions; test them; score history; re-evaluate a session | +| `events:read` | Test against real sessions, and ground drafts in your payload keys, on top of `evaluations:trigger` | +| `evaluations:run` | Run your own evaluator worker | diff --git a/docs/evaluations/overview.mdx b/docs/evaluations/overview.mdx new file mode 100644 index 000000000..14ac945f6 --- /dev/null +++ b/docs/evaluations/overview.mdx @@ -0,0 +1,44 @@ +--- +title: "Evaluate agents" +description: "Score every finished session with evaluations you define: hosted Python checks, or LLM judges in your own worker." +icon: "gauge" +--- + +An evaluation scores a finished agent session. When a session ends, every enabled evaluation that applies to it runs and records what it found, with reasoning you can read beside the trace: + +- a **score** from 0 to 1, optionally marked passed or failed +- a **metric**, such as a count, a duration, or a cost, with its unit +- an **assertion**, which passed or did not + +## Two kinds of evaluator + +| | Hosted Python | Your own worker | +| --- | --- | --- | +| Written | In the dashboard, under **Analyze → eval authoring** | In Python, with the [Evaluator SDK](/reference/evaluator-sdk) | +| Runs | On Failproof AI's managed evaluator, in a sandbox | On your infrastructure | +| Best for | Deterministic, code-based checks | LLM judges, model calls, packages, secrets, network access, heavy processing | + +Hosted Python is deliberately small: one expression, no imports, no network. Anything that needs a model — an LLM judge scoring whether an answer was relevant, say — runs in your own worker instead. Neither kind needs an inbound connection: workers claim finished sessions and submit results over outbound HTTPS. + +## Each organization evaluates its own agents + +Evaluations belong to the organization that defines them. Each organization on an instance writes its own — its own checks, conditions, thresholds, and labels — versions and deploys them without affecting any other, and sees only its own results. Filter those results by agent, environment, evaluation, and time, or ask the assistant about them. + +## From first draft to live scores + + + + Describe what to measure and let the assistant draft it, or write it yourself. See [Write an evaluation](/evaluations/write). + + + Run it against real sessions before it goes live; nothing is stored. See [Test an evaluation](/evaluations/test). + + + Deploy an immutable version, publish new ones as it evolves, and roll back to an earlier one. See [Deploy and version](/evaluations/deploy). + + + Chart scores over time, compare agents and environments, and ask the assistant. See [Read evaluation results](/sessions/evaluations). + + + +Evaluation runs forward: a version deployed now scores the sessions that finish from now on. To score sessions you already have, [backfill them](/evaluations/deploy#score-sessions-you-already-have). diff --git a/docs/evaluations/test.mdx b/docs/evaluations/test.mdx new file mode 100644 index 000000000..3649f587e --- /dev/null +++ b/docs/evaluations/test.mdx @@ -0,0 +1,29 @@ +--- +title: "Test an evaluation" +description: "Run an evaluation against your real sessions before deploying it. Nothing is stored." +icon: "flask-conical" +--- + +**test this evaluation**, on the authoring page, runs the code against real sessions of yours on the evaluator fleet without deploying it. Nothing is stored: a failure here is a preview, and deploying is always allowed. + + + + Select **check** to compile the code and condition against the sandbox's rules without running them on any session. + + + Narrow the matching sessions by agent, environment, time, or session id, and tick up to 10. Include sessions the evaluation should fail as well as ones it should pass. + + + Select **run against N sessions**, and read each row. + + + +| Row | What it means | +| --- | --- | +| **ok** | It ran. The row lists every score, metric, and assertion it returned, and how long it took. | +| **skipped** | The condition returned `False`, so the evaluation did not run. That is a skip, not a failure. | +| Failed | It raised, timed out, or used something the sandbox refuses. The row says which, and **Fix it** hands the error to the assistant when it can help. | + +![The test this evaluation panel: three sessions picked by agent, two ok and one skipped because its condition returned False.](/images/dashboard/eval-test.png) + +A result stops being current the moment you edit the code; it is dimmed rather than reused. diff --git a/docs/evaluations/write.mdx b/docs/evaluations/write.mdx new file mode 100644 index 000000000..03a5c8d8e --- /dev/null +++ b/docs/evaluations/write.mdx @@ -0,0 +1,76 @@ +--- +title: "Write an evaluation" +description: "Describe what to measure and let the assistant draft a hosted Python evaluation, or write the code yourself. LLM judges run in your own worker." +icon: "file-pen-line" +--- + +Hosted evaluations are small, deterministic Python, written in the dashboard and run on Failproof AI's evaluator fleet. Heavier logic — an LLM judge, a package, a secret, a network call — runs in [your own worker](#write-it-in-your-own-worker) instead. + +## Draft it from a description + +1. Go to **Analyze → eval authoring** and select **new eval**. +2. Describe what to measure in plain English, or choose from **start from an example…**, and select **draft**. +3. Review the fields and the code it fills in, then [test it](/evaluations/test) and [deploy it](/evaluations/deploy). + +![The eval authoring page with a drafted evaluation: the description, the assistant's notes on the draft, and the name, key, version, result, timeout, labels, and condition fields.](/images/dashboard/eval-authoring-draft.png) + +The draft is grounded in your organization's own events: the page reads which payload keys your sessions carried over the last seven days, so the code reads keys that exist rather than guesses. Before handing the draft over, the assistant tests it against up to five of your recent sessions, repairs anything it can prove is broken — for up to three rounds — and checks once that the code measures what you asked for. Keep the description specific: broad prompts are slower and can time out. Review the code either way; deploying is never blocked. + +## Set the fields + +| Field | What it is | +| --- | --- | +| name | What people see. Editable later | +| key | The stable identifier its results chart under, such as `code_assistant_quality_gate` | +| version | Any version string without spaces, such as `1.0.0` | +| result | **score** (0 to 1), **metric** (a number with a unit), or **assertion** (passed or not) | +| timeout seconds | Default 30. The sandbox stops any single run at 60 | +| labels | Up to 20, comma-separated. Editable later | +| condition | Optional. A Python expression; the evaluation runs only on sessions where it is `True` | + +Use the condition to scope an evaluation to the agents and environments it is meant for: + +```python +session.agent_id == "code-assistant" and session.environment == "production" +``` + +The key, version, result type, condition, and code are immutable once deployed: to change any of them, publish a new version. The name, labels, and whether it is enabled stay editable. + +## Write the code yourself + +The **evaluator code** is one Python expression that returns `EvalResult(...)`, with `session` in scope. This one scores the share of tool results that came back ok: + +```python +EvalResult( + score=Score( + len([e for e in session.events_of_type("tool_result") if e.payload.get("status") == "ok"]) + / max(1, session.count("tool_result")) + ), + metrics={"tool_calls": Metric(session.count("tool_use"), unit="calls")}, + reasoning="Share of tool results that came back ok.", +) +``` + +A result leads with the evaluation's own key, in its declared type: `score=` for a score evaluation, or a `metrics` or `assertions` entry named after the key for a metric or an assertion evaluation. Other metrics and assertions ride along with it, up to 25 results in a run. + +| In scope | Gives you | +| --- | --- | +| `session` | `session_id`, `agent_id`, `environment`, `started_at`, `ended_at`, `event_count`, and `events`, plus `count(event_type)` and `events_of_type(event_type)` | +| Each event | `id`, `ts`, `event_type`, and `payload` | +| Result types | `EvalResult`, `Score`, `Metric`, `Assertion`, and `ConditionResult` for a condition | +| Builtins | `abs`, `all`, `any`, `bool`, `dict`, `float`, `int`, `len`, `list`, `max`, `min`, `range`, `round`, `set`, `sorted`, `str`, `sum`, `tuple` | + +Nothing else is reachable: no imports, and no attributes beyond that session data and plain string and dictionary methods such as `get`, `lower`, and `split`, which must be called rather than referenced. Payload keys are whatever your agents send — `status` above is only an example — so read them off a real session. **format** tidies the code and **fix** asks the assistant to repair it. The code can be up to 128 KiB, and the condition up to 16 KiB. + +![The evaluator code editor, with format and fix, showing the assertions of a drafted evaluation.](/images/dashboard/eval-authoring-code.png) + +## Write it in your own worker + +When an evaluation needs a model, a package, a secret, or the network, write it with the [Evaluator SDK](/reference/evaluator-sdk) and run it on your own infrastructure. It uses the same result types, and its results appear beside hosted ones, tagged **customer**: + +```python +@app.eval("answer_relevance", version="judge-v1", labels=["llm_judge"], timeout_seconds=30) +async def answer_relevance(session): + value, reasoning = await ask_judge(session) # your LLM call: a 0-1 score and why + return EvalResult(score=Score(value, passed=value >= 0.7), reasoning=reasoning) +``` diff --git a/docs/fr/policies/builtin-catalog.mdx b/docs/fr/policies/builtin-catalog.mdx deleted file mode 100644 index 9707296f3..000000000 --- a/docs/fr/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "Catalogue des politiques intégrées" -description: "Consultez chaque politique intégrée de Failproof AI, son déclencheur, son état recommandé et ses paramètres configurables." -icon: "list-checks" ---- - -Le package installé fait foi pour la disponibilité des politiques. Exécutez `failproofai policies` après chaque mise à jour, car les entrées du catalogue et leur comportement peuvent évoluer avec la version du package. - -## Référence de base recommandée - -La sélection recommandée lors de la configuration guidée active actuellement les désinfectants de secrets, les protections d'environnement, l'auto-protection, les gardes contre les commandes catastrophiques et la sécurité des branches protégées : - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` est **toujours actif**. Il est listé ci-dessus par souci d'exhaustivité, mais il s'enregistre à chaque évaluation qu'il figure ou non dans votre ensemble activé, et il ne peut pas être désactivé ni mis en pause — un garde contre la désactivation de l'application par l'agent, que l'agent peut lui-même désactiver, n'est pas un garde. - -La recommandation est délibérément plus restreinte que **Tout**. Les politiques d'infrastructure et de workflow peuvent interrompre un travail valide et doivent être activées uniquement pour les dépôts et les machines qui en ont besoin. - -## Secrets et environnement - -| Politique | Déclencheur | Résultat | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Masque les JWT dans la sortie des outils avant que le modèle ne les voie. | -| `sanitize-api-keys` | `PostToolUse` | Masque les clés OpenAI, Anthropic, GitHub, AWS, Stripe et Google les plus courantes. | -| `sanitize-connection-strings` | `PostToolUse` | Masque les chaînes de connexion à des bases de données contenant des identifiants. | -| `sanitize-private-key-content` | `PostToolUse` | Masque les corps de clés privées PEM. | -| `sanitize-bearer-tokens` | `PostToolUse` | Masque les jetons bearer d'autorisation. | -| `protect-env-vars` | `PreToolUse` sur les outils shell | Bloque les commandes qui affichent les variables d'environnement. | -| `block-env-files` | `PreToolUse` | Bloque les lectures et écritures des fichiers `.env`. | -| `block-read-outside-cwd` | `PreToolUse` sur les outils de lecture, glob, grep ou shell | Limite les lectures au répertoire de travail de la session. | -| `block-secrets-write` | `PreToolUse` sur les outils d'écriture | Bloque les écritures vers les noms de fichiers courants de clés secrètes et d'identifiants. | - -## Commandes dangereuses et infrastructure - -| Politique | Déclencheur | Résultat | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Bloque `sudo` sauf si un motif d'autorisation correspond. | -| `block-curl-pipe-sh` | `PreToolUse` | Bloque les scripts téléchargés et directement transmis à un shell. | -| `block-rm-rf` | `PreToolUse` | Bloque les motifs de suppression récursive catastrophique. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Toujours actif, ne peut pas être désactivé.** Bloque toute invocation de la CLI Failproof AI, toute mise en pause automatique et toute désinstallation par le gestionnaire de packages. | -| `block-kubectl` | `PreToolUse` | Contrôle les commandes Kubernetes. | -| `block-terraform` | `PreToolUse` | Contrôle les commandes Terraform et OpenTofu. | -| `block-aws-cli` | `PreToolUse` | Contrôle les commandes AWS CLI. | -| `block-gcloud` | `PreToolUse` | Contrôle les commandes Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | Contrôle les commandes Azure CLI. | -| `block-helm` | `PreToolUse` | Contrôle les commandes Helm. | -| `block-gh-pipeline` | `PreToolUse` | Contrôle les opérations GitHub CLI de workflow, d'exécution, de fusion, de release, de cache et de secrets entraînant des modifications. | - -## Sécurité Git et base de données - -| Politique | Déclencheur | Résultat | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Bloque les poussées directes vers les branches protégées configurées. | -| `block-force-push` | `PreToolUse` | Bloque les force-push ; `--force-with-lease` reste autorisé par l'implémentation actuelle. | -| `block-work-on-main` | `PreToolUse` | Bloque les commits et fusions sur les branches protégées. | -| `warn-git-amend` | `PreToolUse` | Avertit avant de réécrire un commit avec `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Avertit avant de supprimer ou vider définitivement des stashes. | -| `warn-all-files-staged` | `PreToolUse` | Avertit lors d'un `git add -A`, `git add .` ou `git add --all` général. | -| `warn-destructive-sql` | `PreToolUse` | Avertit lors d'un `DROP`, `TRUNCATE` ou `DELETE` sans clause `WHERE` via des clients de base de données reconnus. | -| `warn-schema-alteration` | `PreToolUse` | Avertit lors d'opérations `ALTER TABLE` reconnues sur des colonnes ou des renommages. | - -## Packages, comportement système et boucles d'agent - -| Politique | Déclencheur | Résultat | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Avertit avant de publier sur des registres de packages. | -| `warn-global-package-install` | `PreToolUse` | Avertit avant l'installation globale d'un package. | -| `prefer-package-manager` | `PreToolUse` | Indique à l'agent d'utiliser un gestionnaire de packages autorisé. | -| `warn-large-file-write` | `PreToolUse` sur les outils d'écriture | Avertit au-dessus du seuil de taille de fichier configuré. | -| `warn-background-process` | `PreToolUse` | Avertit sur les motifs de processus en arrière-plan détachés ou de longue durée. | -| `warn-repeated-tool-calls` | `PreToolUse` | Avertit après trois appels d'outil identiques ou plus. | - -## Workflow de fin de tâche - -Ces politiques nécessitent un harnais qui émet un événement `Stop` compatible. - -| Politique | Résultat | -| --- | --- | -| `require-commit-before-stop` | Refuse la complétion si du travail suivi reste non commité. | -| `require-push-before-stop` | Refuse la complétion si des commits restent uniquement en local. | -| `require-pr-before-stop` | Exige une pull request pour la branche courante. | -| `require-no-conflicts-before-stop` | Exige une fusion propre par rapport à la branche de base configurée. | -| `require-ci-green-before-stop` | Exige que les vérifications CI sur le HEAD courant se terminent avec succès. | - -## Référence des paramètres - -Configurez les paramètres sous l'objet `policyParams` du scope sélectionné. Les types sont validés par chaque politique. - -| Politique | Paramètre | Type et valeur par défaut | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]` ; les entrées contiennent `regex` et `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Bloqueurs d'infrastructure | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"` ; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Un motif d'autorisation élargit ce qu'un agent peut faire. Testez la tokenisation exacte et les variantes de commandes sur le harnais cible avant de le déployer sur une flotte. - \ No newline at end of file diff --git a/docs/fr/policies/builtin.mdx b/docs/fr/policies/builtin.mdx deleted file mode 100644 index 60c286aeb..000000000 --- a/docs/fr/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Politiques intégrées" -description: "Activez des garde-fous maintenus pour les modes d'échec courants des agents." -icon: "library" ---- - -Les politiques intégrées couvrent la gestion des secrets, les fichiers d'environnement, les commandes shell destructives, les branches protégées, les outils cloud et d'infrastructure, la publication de paquets, les appels répétés et les vérifications de workflow en fin de tâche. - -## Activer et vérifier une politique intégrée - - - - 1. Installez la politique sur une machine connectée avec la CLI locale. - 2. Exécutez une action de test sûre dans l'agent instrumenté. - 3. Accédez à **Observer → politique** et filtrez par nom de politique, environnement machine ou décision. - 4. Ouvrez la session liée pour confirmer l'entrée d'outil correspondante et la raison retournée. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Supprimez-la avec `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Listez les politiques disponibles dans votre version installée : - -```bash -failproofai policies -``` - -Activez une politique pour un projet : - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Activez plusieurs politiques pour certains harnais : - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Certaines politiques acceptent des paramètres ou sont marquées comme bêta. Examinez la description, le périmètre de correspondance et le comportement par défaut avant le déploiement. Une politique qui protège un workflow peut bloquer des opérations valides dans un autre. - - - Consultez l'ensemble des 40 politiques actuelles, leurs déclencheurs, la base de référence recommandée et leurs paramètres. - - - - Préférez le périmètre projet pour les attentes spécifiques au dépôt, et le périmètre utilisateur pour les exigences de sécurité à l'échelle de la machine. - \ No newline at end of file diff --git a/docs/fr/policies/custom.mdx b/docs/fr/policies/custom.mdx deleted file mode 100644 index a6e6a0ed3..000000000 --- a/docs/fr/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Politiques personnalisées" -description: "Écrivez une politique pour un mode d'échec propre à votre workflow d'agent." -icon: "shield-plus" ---- - -Créez un fichier se terminant par `policies.js`, `policies.mjs` ou `policies.ts` dans `.failproofai/policies/`. Les fichiers de convention se chargent automatiquement aux portées projet et utilisateur. - -## Tester la politique avant la publication Cloud - - - - 1. Installez la politique personnalisée sur une machine de test et déclenchez à la fois une action correspondante et une non-correspondance légitime. - 2. Rendez-vous dans **Observe → policy** et comparez les deux décisions. - 3. Ouvrez chaque session liée et vérifiez que le payload d'événement contient suffisamment d'informations pour la règle. - 4. Lorsque le comportement est correct, déplacez la source vérifiée dans **Admin → policy editor** et publiez une version. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Les fichiers de convention dans `.failproofai/policies/` se chargent sans `--custom`. Conservez une commande d'installation explicite en CI lorsque la validation doit échouer sur un module défectueux. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Ce code correspond à `production/config.yml`, `/srv/production/config.yml`, `/srv/production` et `C:\\production\\config.yml` pour les deux outils `Write` et `Edit`. Il ne correspond pas à des noms tels que `production-backup`, car `production` doit constituer un segment de chemin complet. - -Valider et installer un fichier explicite : - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Le contexte de la politique inclut le type d'événement, le payload normalisé, le nom et les entrées de l'outil, les métadonnées de session, les paramètres, ainsi que le CLI source lorsqu'il est disponible. - -## Tester les chemins d'échec - -Exécutez la validation après avoir modifié le fichier d'entrée ou tout module local qu'il importe : - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Le chemin CLI strict échoue en cas de fichiers manquants, d'erreurs de syntaxe, d'imports non résolus, d'exceptions au niveau supérieur et de délais d'expiration au chargement du module. Au moment de l'application, un fichier personnalisé défectueux est journalisé et ignoré afin que les politiques intégrées puissent continuer à fonctionner. Traitez tout avertissement de chargement comme une perte d'application attendue et signalez-le dans les journaux de production. - -Utilisez des noms globalement uniques pour les politiques explicites, de convention et gérées par Cloud. Gardez les fonctions de politique déterministes, encadrez les appels externes avec des délais courts, et retournez un `allow`, `instruct` ou `deny` intentionnel sur chaque chemin d'exécution. - - - Une politique personnalisée est du code d'application. Testez les champs manquants, les noms d'outils alternatifs et les entrées malformées — pas uniquement la correspondance attendue. - \ No newline at end of file diff --git a/docs/fr/policies/fleet.mdx b/docs/fr/policies/fleet.mdx deleted file mode 100644 index 7512ed8e1..000000000 --- a/docs/fr/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Déployer des politiques sur les machines" -description: "Savoir quelles machines sont enrôlées, à jour et appliquent les versions de politique souhaitées." -icon: "network" ---- - -La couverture de parc répond à la question de savoir si une politique existe là où le risque existe. Suivez les machines par identifiant stable et libellé lisible, puis comparez leur état de déploiement assigné et rapporté. - -## Vérifier la couverture - - - - 1. Accédez à **Admin → enforcement** et consultez les totaux en mode application et observation. - 2. Recherchez une machine par identifiant ou libellé, ou filtrez pour trouver les machines sans politique. - 3. Développez une ligne pour comparer les politiques assignées, l'état de déploiement rapporté, le dernier check-in et l'historique. - 4. Actualisez après l'intervalle d'interrogation de la machine lorsqu'un déploiement appliqué reste en attente. - - ![Le parc Enforcement affichant la couverture des politiques, l'état de déploiement des machines, et les assignations en observation et en application.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Utilisez `fp events --agent-id --since 24h` pour confirmer que l'activité de l'agent de la machine est bien transmise au Cloud. - - - -Utilisez les vues de couverture pour identifier : - -- Les machines qui n'ont jamais récupéré le dernier déploiement -- Les machines enrôlées qui ont cessé de rapporter leur activité -- Une politique assignée au mauvais environnement ou cohorte -- Une dérive de version après une mise à jour interrompue - -Renommer une machine sans la reconnecter : - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Vérifier l'état local : - -```bash -failproofai config --status -``` - - - Utilisez des libellés qui identifient la charge de travail et l'environnement. Les noms d'hôtes seuls sont souvent insuffisants après une mise à l'échelle automatique ou un remplacement de machine. - \ No newline at end of file diff --git a/docs/he/policies/builtin-catalog.mdx b/docs/he/policies/builtin-catalog.mdx deleted file mode 100644 index f7805ef7c..000000000 --- a/docs/he/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "קטלוג מדיניויות מובנה" -description: "עיין בכל מדיניות Failproof AI מובנה, בטריגר שלה, במצב מומלץ ובפרמטרים הניתנים להגדרה." -icon: "list-checks" ---- - -החבילה המותקנת היא מקור האמת לזמינות מדיניויות. הרץ `failproofai policies` לאחר כל שדרוג כי ערכי הקטלוג וההתנהגות עשויים להשתנות עם גרסת החבילה. - -## קו בסיס מומלץ - -הבחירה המומלצת של ההתקנה המודרכת מפעילה כרגע מטהרי סודות, הגנות סביבתיות, הגנה עצמית, שומרי פקודות קטסטרופליות והגנת ענפים מוגנים: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **תמיד פועל**. הוא מופיע למעלה למטרות השלמות, אך הוא נרשם בכל הערכה בין אם הוא מופיע בערכה המופעלת שלך או לא, ולא ניתן להשבית אותו או להשהות — הגנה כנגד סוכן המכבה את האכיפה שהסוכן יכול להכבות אינה הגנה. - -המומלץ הוא בכוונה צר יותר מ**הכל**. מדיניויות תשתית וזרימת עבודה יכולות להפריע לעבודה תקינה ויש להפעילן במאגרים ובמכונות הזקוקות להן. - -## סודות וסביבה - -| מדיניות | טריגר | תוצאה | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | הסר JWTs מפלט כלי לפני שהמודל רואה אותם. | -| `sanitize-api-keys` | `PostToolUse` | הסר מפתחות OpenAI, Anthropic, GitHub, AWS, Stripe ו-Google נפוצים. | -| `sanitize-connection-strings` | `PostToolUse` | הסר מחרוזות חיבור מסד נתונים המכילות אישורים. | -| `sanitize-private-key-content` | `PostToolUse` | הסר גופי מפתח פרטי PEM. | -| `sanitize-bearer-tokens` | `PostToolUse` | הסר אסימוני הרשאה של מנשאים. | -| `protect-env-vars` | `PreToolUse` בכלי מעטפת | חסום פקודות שמשחקות משתני סביבה. | -| `block-env-files` | `PreToolUse` | חסום קריאה וכתיבה של קבצי `.env`. | -| `block-read-outside-cwd` | `PreToolUse` בקריאה, glob, grep או כלי מעטפת | שמור קריאות בתוך ספריית העבודה של ההפעלה. | -| `block-secrets-write` | `PreToolUse` בכלי כתיבה | חסום כתיבות לשמות קבצים וסכמות אישור של מפתחות סודיים נפוצות. | - -## פקודות מסוכנות ותשתית - -| מדיניות | טריגר | תוצאה | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | חסום `sudo` אלא אם דפוס הרשאה תואם. | -| `block-curl-pipe-sh` | `PreToolUse` | חסום סקריפטים שהורדו בצינור ישירות למעטפת. | -| `block-rm-rf` | `PreToolUse` | חסום דפוסי מחיקה רקורסיבית קטסטרופליים. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **תמיד פועל, לא ניתן להשבית.** חסום כל הפעלה של CLI של Failproof AI, השהייה עצמית והסרת מנהל חבילות. | -| `block-kubectl` | `PreToolUse` | שער פקודות Kubernetes. | -| `block-terraform` | `PreToolUse` | שער פקודות Terraform ו-OpenTofu. | -| `block-aws-cli` | `PreToolUse` | שער פקודות AWS CLI. | -| `block-gcloud` | `PreToolUse` | שער פקודות Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | שער פקודות Azure CLI. | -| `block-helm` | `PreToolUse` | שער פקודות Helm. | -| `block-gh-pipeline` | `PreToolUse` | שער פעולות זיהום GitHub CLI של זרימת עבודה, הרצה, מיזוג, שחרור, cache וסוד. | - -## בטיחות Git ומסד נתונים - -| מדיניות | טריגר | תוצאה | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | חסום דחיפות ישירות לענפים מוגנים מוגדרים. | -| `block-force-push` | `PreToolUse` | חסום דחיפות כוח; `--force-with-lease` נשאר מותר ביישום הנוכחי. | -| `block-work-on-main` | `PreToolUse` | חסום commits ומיזוגים בענפים מוגנים. | -| `warn-git-amend` | `PreToolUse` | הזהר לפני כתיבה מחדש של commit עם `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | הזהר לפני השלכה קבועה או ניקוי stashes. | -| `warn-all-files-staged` | `PreToolUse` | הזהר בברור `git add -A`, `git add .` או `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | הזהר בנוגע ל-`DROP`, `TRUNCATE` ו-`DELETE` ללא `WHERE` דרך לקוחות מסד נתונים מוכרים. | -| `warn-schema-alteration` | `PreToolUse` | הזהר בנוגע ל-`ALTER TABLE` הכרה ופעולות שינוי שם. | - -## חבילות, התנהגות מערכת וולולים של סוכנים - -| מדיניות | טריגר | תוצאה | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | הזהר לפני פרסום לרושמי חבילות. | -| `warn-global-package-install` | `PreToolUse` | הזהר לפני התקנת חבילה גלובלית. | -| `prefer-package-manager` | `PreToolUse` | הנחה את הסוכן להשתמש במנהל חבילות מותר. | -| `warn-large-file-write` | `PreToolUse` בכלי כתיבה | הזהר מעל סף גודל הקובץ המוגדר. | -| `warn-background-process` | `PreToolUse` | הזהר בדפוסי תהליכים רקע מופרדים או ארוכי חיים. | -| `warn-repeated-tool-calls` | `PreToolUse` | הזהר לאחר שלוש או יותר קריאות כלי זהות. | - -## זרימת עבודה של סיום משימה - -מדיניויות אלה דורשות כרוכה הפולטת אירוע `Stop` תואם. - -| מדיניות | תוצאה | -| --- | --- | -| `require-commit-before-stop` | סרב השלמה בעודם עבודה עקובה לא מחוייבת. | -| `require-push-before-stop` | סרב השלמה בעוד commits נשארות מקומיות בלבד. | -| `require-pr-before-stop` | דרוש בקשת משיכה לענף הנוכחי. | -| `require-no-conflicts-before-stop` | דרוש מיזוג נקי כנגד ענף בסיס מוגדר. | -| `require-ci-green-before-stop` | דרוש בדיקות CI של current-HEAD להשלמה בהצלחה. | - -## ייחוס פרמטרים - -הגדר פרמטרים תחת אובייקט `policyParams` של ההיקף שנבחר. סוגים מאומתים על ידי כל מדיניות. - -| מדיניות | פרמטר | סוג וברירת מחדל | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; ערכים מכילים `regex` ו-`label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| חוסמי תשתית | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - דפוס הרשאה מרחיב את מה שסוכן עשוי לעשות. בדוק את הטוקניזציה המדויקת וגרסאות פקודות בכרוכה היעד לפני פריסה שלה על פני צי. - \ No newline at end of file diff --git a/docs/he/policies/builtin.mdx b/docs/he/policies/builtin.mdx deleted file mode 100644 index 95fa65e7f..000000000 --- a/docs/he/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "מדיניות מובנות" -description: "הפעל הגנות תחזוקה עבור מצבי כשל נפוצים של סוכנים." -icon: "library" ---- - -מדיניות מובנות כוללת טיפול בסודות, קבצי סביבה, פקודות shell הרסניות, ענפים מוגנים, כלים בענן ותשתיות, הוצאת חבילות, קריאות חוזרות, ובדיקות זרימת עבודה של סיום משימה. - -## הפעלה ואימות של מדיניות מובנית - - - - 1. התקן את המדיניות על מכונה מחוברת עם CLI המקומי. - 2. הפעל פעולת בדיקה בטוחה בסוכן המאומת. - 3. עבור אל **Observe → policy** וסנן לפי שם המדיניות, סביבת המכונה או ההחלטה. - 4. פתח את ההפעלה המקושרת כדי לאשר את קלט הכלי התואם והסיבה שהוחזרה. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - הסר אותה עם `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -הצג את המדיניות הזמינות בגרסה המותקנת שלך: - -```bash -failproofai policies -``` - -הפעל מדיניות אחת עבור פרויקט: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -הפעל מספר מדיניות עבור מכלים נבחרים: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -חלק מהמדיניות מקבלות פרמטרים או מסומנות כבטא. בדוק את התיאור, התאם את ההיקף וההתנהגות המוגדרת כברירת מחדל לפני הנפוץ. מדיניות המגנה על זרימת עבודה אחת עשויה לחסום פעולות חוקיות בזרימה אחרת. - - - בדוק את כל 40 המדיניות הנוכחיות, הטריגרים שלהן, קו בסיס מומלץ ופרמטרים. - - - - העדף היקף פרויקט לציפיות ספציפיות למאגר וקו היקף משתמש לדרישות בטיחות כלל-מכונה. - \ No newline at end of file diff --git a/docs/he/policies/custom.mdx b/docs/he/policies/custom.mdx deleted file mode 100644 index fa36bd27c..000000000 --- a/docs/he/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "מדיניויות מותאמות" -description: "כתוב מדיניות עבור מצב כשל ייחודי לזרימת העבודה של הסוכן שלך." -icon: "shield-plus" ---- - -צור קובץ בסיום `policies.js`, `policies.mjs`, או `policies.ts` תחת `.failproofai/policies/`. קובצי קונוונציה נטענים באופן אוטומטי בהיקף פרויקט וסטטוס משתמש. - -## בדוק את המדיניות לפני פרסום בענן - - - - 1. התקן את המדיניות המותאמת על מכונת בדיקה אחת וערוך הן פעולה תואמת והן אי-התאמה לגיטימית. - 2. עבור אל **Observe → policy** והשווה בין שתי ההחלטות. - 3. פתח כל סשן קשור וודא שמטען האירוע מכיל מספיק הוכחות לכלל. - 4. כאשר ההתנהגות נכונה, העבר את הקוד הנבדק אל **Admin → policy editor** ופרסם גרסה. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - קובצי קונוונציה תחת `.failproofai/policies/` נטענים ללא `--custom`. שמור על פקודת התקנה מפורשת ב-CI כאשר אימות צריך להיכשל על מודול שבור. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -זה תואם ל-`production/config.yml`, `/srv/production/config.yml`, `/srv/production`, ו-`C:\\production\\config.yml` עבור `Write` ו-`Edit`. זה אינו תואם לשמות כגון `production-backup` מכיוון ש-`production` חייב להיות קטע נתיב שלם. - -אמת והתקן קובץ מפורש: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -הקשר של המדיניות כולל את סוג האירוע, מטען מנורמל, שם וקלט הכלי, מטא-נתונים של סשן, פרמטרים, ו-CLI מקור כאשר זמין. - -## בדוק נתיבי כשל - -הפעל אימות לאחר שינוי קובץ הכניסה או כל מודול מקומי שהוא מייבא: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -נתיב ה-CLI הקפדני נכשל עבור קובצים חסרים, שגיאות תחביר, יבוא שלא פתור, חריגים ברמה עליונה וזמנים פגומים בטעינת מודול. בזמן אכיפה, קובץ מותאם שבור מופעל ודלג כך שמדיניויות מובנות יכולות להמשיך. התייחס לכל אזהרת טעינה כאובדן אכיפה צפויה והתריע על כך בתיקיות ייצור. - -השתמש בשמות ייחודיים ברחבי העולם בין מדיניויות מפורשות, קונוונציה וגם מנוהלות בענן. שמור על פונקציות מדיניות דטרמיניסטיות, כבול קריאות חיצוניות עם זמנים פגומים קצרים, והחזר `allow`, `instruct`, או `deny` בכוונה בכל נתיב. - - - מדיניות מותאמת היא קוד אכיפה. בדוק שדות חסרים, שמות כלים חלופיים, וקלט שגוי—לא רק ההתאמה הצפויה. - \ No newline at end of file diff --git a/docs/he/policies/fleet.mdx b/docs/he/policies/fleet.mdx deleted file mode 100644 index 609f2893e..000000000 --- a/docs/he/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "פרוס מדיניות למכונות" -description: "דע אילו מכונות רשומות, עדכניות ואוכפות את גרסאות המדיניות המכוונות." -icon: "network" ---- - -כיסוי הצי משקף האם מדיניות קיימת במקום שבו קיימת הסיכון. עקוב אחר מכונות לפי מזהה יציב ותווית קריאה, ואז השווה את מצב הפריסה שלהן שהוקצה והדווח. - -## בדוק כיסוי - - - - 1. עבור אל **Admin → enforcement** וסקור את הסכומים של אוכפים ומשקיפים. - 2. חפש מכונה לפי מזהה או תווית, או סנן מכונות שחסרה להן מדיניות. - 3. הרחב שורה כדי להשוות בין מדיניות מוקצה, פריסה דווחת, בדיקה אחרונה והיסטוריה. - 4. רענן לאחר מרווח הסקר של המכונה כאשר פריסה מיושמת נשארת בתלייה. - - ![צי enforcement המציג כיסוי מדיניות, מצב פריסה של מכונה והקצאות צפייה ואכיפה.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - השתמש ב-`fp events --agent-id --since 24h` כדי לאשר שפעילות סוכן המכונה מגיעה ל-Cloud. - - - -השתמש בתצוגות כיסוי כדי למצוא: - -- מכונות שלעולם לא משכו את הפריסה העדכנית ביותר -- מכונות רשומות שהפסיקו לדווח על פעילות -- מדיניות שהוקצתה לסביבה או קוהורטה לא נכונה -- סחיפת גרסה לאחר עדכון מופרע - -שנה שם של מכונה ללא התחברות מחדש: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -בדוק מצב מקומי: - -```bash -failproofai config --status -``` - - - השתמש בתויות המזהות עומס עבודה וסביבה. שמות מארחים לבדם לעתים קרובות אינם מספיקים לאחר שינוי גודל אוטומטי או החלפת מכונה. - \ No newline at end of file diff --git a/docs/hi/policies/builtin-catalog.mdx b/docs/hi/policies/builtin-catalog.mdx deleted file mode 100644 index 130c3610b..000000000 --- a/docs/hi/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "बिल्ट-इन पॉलिसी कैटलॉग" -description: "हर बिल्ट-इन Failproof AI पॉलिसी, इसके ट्रिगर, अनुशंसित स्थिति और कॉन्फ़िगर करने योग्य पैरामीटर की समीक्षा करें।" -icon: "list-checks" ---- - -इंस्टॉल किया गया पैकेज पॉलिसी उपलब्धता के लिए सत्य का स्रोत है। हर अपग्रेड के बाद `failproofai policies` चलाएं क्योंकि कैटलॉग प्रविष्टियां और व्यवहार पैकेज संस्करण के साथ बदल सकते हैं। - -## अनुशंसित बेसलाइन - -गाइडेड सेटअप का अनुशंसित चयन वर्तमान में सीक्रेट सैनिटाइज़र, पर्यावरण सुरक्षा, स्व-सुरक्षा, विनाशकारी-कमांड गार्ड और संरक्षित-शाखा सुरक्षा सक्षम करता है: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **हमेशा चालू रहता है**। यह पूर्णता के लिए ऊपर सूचीबद्ध है, लेकिन यह हर मूल्यांकन पर पंजीकृत होता है चाहे वह आपके सक्षम सेट में दिखाई दे या नहीं, और इसे अक्षम या रोका नहीं जा सकता — यह एजेंट को प्रवर्तन बंद करने से बचाने के लिए एक सुरक्षा है जिसे एजेंट बंद कर सकता है एक गार्ड नहीं है। - -अनुशंसित जानबूझकर **Everything** से संकीर्ण है। बुनियादी ढांचे और वर्कफ़्लो पॉलिसीएं वैध कार्य को बाधित कर सकती हैं और उन्हें उन रिपॉजिटरी और मशीनों के लिए सक्षम किया जाना चाहिए जिन्हें उनकी आवश्यकता है। - -## सीक्रेट और पर्यावरण - -| पॉलिसी | ट्रिगर | परिणाम | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | मॉडल द्वारा देखे जाने से पहले टूल आउटपुट से JWTs को हटाएं। | -| `sanitize-api-keys` | `PostToolUse` | सामान्य OpenAI, Anthropic, GitHub, AWS, Stripe और Google कुंजियों को हटाएं। | -| `sanitize-connection-strings` | `PostToolUse` | क्रेडेंशियल युक्त डेटाबेस कनेक्शन स्ट्रिंग को हटाएं। | -| `sanitize-private-key-content` | `PostToolUse` | PEM प्राइवेट-की निकायों को हटाएं। | -| `sanitize-bearer-tokens` | `PostToolUse` | प्राधिकरण बेयरर टोकन को हटाएं। | -| `protect-env-vars` | शेल टूल पर `PreToolUse` | पर्यावरण चर डंप करने वाली कमांड को ब्लॉक करें। | -| `block-env-files` | `PreToolUse` | `.env` फाइलों को पढ़ने और लिखने को ब्लॉक करें। | -| `block-read-outside-cwd` | पढ़ने, glob, grep या शेल टूल पर `PreToolUse` | सेशन वर्किंग डायरेक्टरी के अंदर पढ़ने को रखें। | -| `block-secrets-write` | लिखने वाले टूल पर `PreToolUse` | सामान्य सीक्रेट-की और क्रेडेंशियल फाइलनामों को लिखने को ब्लॉक करें। | - -## खतरनाक कमांड और बुनियादी ढांचा - -| पॉलिसी | ट्रिगर | परिणाम | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | जब तक allow पैटर्न मेल न खाए तब तक `sudo` को ब्लॉक करें। | -| `block-curl-pipe-sh` | `PreToolUse` | डाउनलोड की गई स्क्रिप्ट को सीधे शेल में पाइप करने को ब्लॉक करें। | -| `block-rm-rf` | `PreToolUse` | विनाशकारी रिकर्सिव डिलीशन पैटर्न को ब्लॉक करें। | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **हमेशा चालू, अक्षम नहीं किया जा सकता।** हर Failproof AI CLI आह्वान, स्व-रुकावट और पैकेज-मैनेजर अनइंस्टॉल को ब्लॉक करें। | -| `block-kubectl` | `PreToolUse` | Kubernetes कमांड को गेट करें। | -| `block-terraform` | `PreToolUse` | Terraform और OpenTofu कमांड को गेट करें। | -| `block-aws-cli` | `PreToolUse` | AWS CLI कमांड को गेट करें। | -| `block-gcloud` | `PreToolUse` | Google Cloud CLI कमांड को गेट करें। | -| `block-az-cli` | `PreToolUse` | Azure CLI कमांड को गेट करें। | -| `block-helm` | `PreToolUse` | Helm कमांड को गेट करें। | -| `block-gh-pipeline` | `PreToolUse` | उत्परिवर्तनशील GitHub CLI वर्कफ़्लो, रन, मर्ज, रिलीज़, कैश और सीक्रेट ऑपरेशन को गेट करें। | - -## Git और डेटाबेस सुरक्षा - -| पॉलिसी | ट्रिगर | परिणाम | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | कॉन्फ़िगर की गई संरक्षित शाखाओं को सीधे पुश करने को ब्लॉक करें। | -| `block-force-push` | `PreToolUse` | फोर्स-पुश को ब्लॉक करें; `--force-with-lease` वर्तमान कार्यान्वयन द्वारा अनुमति दी गई रहती है। | -| `block-work-on-main` | `PreToolUse` | संरक्षित शाखाओं पर कमिट और मर्ज को ब्लॉक करें। | -| `warn-git-amend` | `PreToolUse` | `--amend` से कमिट को फिर से लिखने से पहले चेतावनी दें। | -| `warn-git-stash-drop` | `PreToolUse` | स्टैश को स्थायी रूप से ड्रॉप या क्लियर करने से पहले चेतावनी दें। | -| `warn-all-files-staged` | `PreToolUse` | व्यापक `git add -A`, `git add .` या `git add --all` पर चेतावनी दें। | -| `warn-destructive-sql` | `PreToolUse` | मान्यता प्राप्त डेटाबेस क्लाइंट के माध्यम से `WHERE` बिना `DROP`, `TRUNCATE` और `DELETE` पर चेतावनी दें। | -| `warn-schema-alteration` | `PreToolUse` | मान्यता प्राप्त `ALTER TABLE` कॉलम और नाम परिवर्तन ऑपरेशन पर चेतावनी दें। | - -## पैकेज, सिस्टम व्यवहार और एजेंट लूप - -| पॉलिसी | ट्रिगर | परिणाम | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | पैकेज रजिस्ट्रीज़ में प्रकाशित करने से पहले चेतावनी दें। | -| `warn-global-package-install` | `PreToolUse` | ग्लोबल पैकेज इंस्टॉलेशन से पहले चेतावनी दें। | -| `prefer-package-manager` | `PreToolUse` | एजेंट को अनुमत पैकेज मैनेजर का उपयोग करने का निर्देश दें। | -| `warn-large-file-write` | लिखने वाले टूल पर `PreToolUse` | कॉन्फ़िगर की गई फाइल-आकार थ्रेसहोल्ड से ऊपर चेतावनी दें। | -| `warn-background-process` | `PreToolUse` | अलग किए गए या दीर्घकालीन बैकग्राउंड-प्रक्रिया पैटर्न पर चेतावनी दें। | -| `warn-repeated-tool-calls` | `PreToolUse` | तीन या अधिक समान टूल कॉल के बाद चेतावनी दें। | - -## कार्य-के-अंत वर्कफ़्लो - -ये पॉलिसीएं एक हार्नेस की आवश्यकता है जो एक संगत `Stop` इवेंट भेजता है। - -| पॉलिसी | परिणाम | -| --- | --- | -| `require-commit-before-stop` | जब तक ट्रैक किया गया कार्य अनकमिटेड है तब तक समापन को अस्वीकार करें। | -| `require-push-before-stop` | जब तक कमिट लोकल-ओनली रहें तब तक समापन को अस्वीकार करें। | -| `require-pr-before-stop` | वर्तमान शाखा के लिए एक पुल रिक्वेस्ट की आवश्यकता करें। | -| `require-no-conflicts-before-stop` | कॉन्फ़िगर की गई बेस शाखा के विरुद्ध एक स्वच्छ मर्ज की आवश्यकता करें। | -| `require-ci-green-before-stop` | वर्तमान-HEAD CI चेक को सफलतापूर्वक पूरा करने की आवश्यकता करें। | - -## पैरामीटर संदर्भ - -चयनित स्कोप के `policyParams` ऑब्जेक्ट के तहत पैरामीटर कॉन्फ़िगर करें। प्रकारों को प्रत्येक पॉलिसी द्वारा मान्य किया जाता है। - -| पॉलिसी | पैरामीटर | प्रकार और डिफ़ॉल्ट | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; प्रविष्टियों में `regex` और `label` हैं | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| बुनियादी ढांचा ब्लॉकर | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - एक allow पैटर्न एजेंट को जो कर सकता है उसे व्यापक बनाता है। तैनाती से पहले सटीक टोकनाइज़ेशन और कमांड वेरिएंट को लक्ष्य हार्नेस पर परीक्षण करें। - \ No newline at end of file diff --git a/docs/hi/policies/builtin.mdx b/docs/hi/policies/builtin.mdx deleted file mode 100644 index 9e67d5ca1..000000000 --- a/docs/hi/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "अंतर्निर्मित नीतियाँ" -description: "एजेंट की सामान्य विफलता के तरीकों के लिए रक्षा उपाय सक्षम करें।" -icon: "library" ---- - -अंतर्निर्मित नीतियाँ गुप्त प्रबंधन, पर्यावरण फ़ाइलें, विनाशकारी शेल कमांड, सुरक्षित शाखाएँ, क्लाउड और बुनियादी ढाँचा उपकरण, पैकेज प्रकाशन, दोहराई गई कॉल, और कार्य-समाप्ति वर्कफ़्लो जांच को कवर करती हैं। - -## अंतर्निर्मित नीति को सक्षम और सत्यापित करें - - - - 1. स्थानीय CLI के साथ जुड़ी हुई मशीन पर नीति को स्थापित करें। - 2. instrumented एजेंट में एक सुरक्षित परीक्षण क्रिया चलाएँ। - 3. **Observe → policy** पर जाएँ और नीति के नाम, मशीन पर्यावरण, या निर्णय के आधार पर फ़िल्टर करें। - 4. जुड़ा हुआ सत्र खोलें ताकि मिलान किए गए टूल इनपुट और दिया गया कारण की पुष्टि की जा सके। - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - इसे `failproofai policy remove block-rm-rf --cli claude --scope project` के साथ हटाएँ। - - - -आपके स्थापित संस्करण में उपलब्ध नीतियों की सूची: - -```bash -failproofai policies -``` - -किसी प्रोजेक्ट के लिए एक नीति सक्षम करें: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -चयनित harness के लिए कई नीतियाँ सक्षम करें: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -कुछ नीतियाँ मापदंड स्वीकार करती हैं या बीटा चिह्नित हैं। rollout से पहले विवरण, मेल scope, और डिफ़ॉल्ट व्यवहार की समीक्षा करें। एक नीति जो एक वर्कफ़्लो की सुरक्षा करती है, दूसरे में वैध संचालन को अवरुद्ध कर सकती है। - - - सभी 40 वर्तमान नीतियों, उनके ट्रिगर, अनुशंसित आधारभूत, और मापदंडों की समीक्षा करें। - - - - रिपॉजिटरी-विशिष्ट अपेक्षाओं के लिए प्रोजेक्ट scope को प्राथमिकता दें और मशीन-व्यापी सुरक्षा आवश्यकताओं के लिए उपयोगकर्ता scope को प्राथमिकता दें। - \ No newline at end of file diff --git a/docs/hi/policies/custom.mdx b/docs/hi/policies/custom.mdx deleted file mode 100644 index 05edc823e..000000000 --- a/docs/hi/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "कस्टम नीतियां" -description: "अपने agent वर्कफ़्लो के लिए अद्वितीय विफलता मोड के लिए एक नीति लिखें।" -icon: "shield-plus" ---- - -`.failproofai/policies/` के तहत `policies.js`, `policies.mjs`, या `policies.ts` में समाप्त होने वाली फ़ाइल बनाएं। कन्वेंशन फ़ाइलें परियोजना और उपयोगकर्ता स्कोप पर स्वचालित रूप से लोड होती हैं। - -## Cloud प्रकाशन से पहले नीति का परीक्षण करें - - - - 1. कस्टम नीति को एक परीक्षण मशीन पर स्थापित करें और एक मेल खाने वाली क्रिया और एक वैध गैर-मिलान दोनों को ट्रिगर करें। - 2. **Observe → policy** पर जाएं और दोनों निर्णयों की तुलना करें। - 3. प्रत्येक लिंक किए गए सत्र को खोलें और सत्यापित करें कि ईवेंट पेलोड में नियम के लिए पर्याप्त साक्ष्य है। - 4. जब व्यवहार सही हो, समीक्षित स्रोत को **Admin → policy editor** में स्थानांतरित करें और एक संस्करण प्रकाशित करें। - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - `.failproofai/policies/` के तहत कन्वेंशन फ़ाइलें `--custom` के बिना लोड होती हैं। CI में एक स्पष्ट इंस्टॉल कमांड रखें जब सत्यापन एक टूटे हुए मॉड्यूल पर विफल होना चाहिए। - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -यह `production/config.yml`, `/srv/production/config.yml`, `/srv/production`, और `C:\\production\\config.yml` को `Write` और `Edit` दोनों के लिए मेल खाता है। यह `production-backup` जैसे नाम से नहीं मेल खाता क्योंकि `production` को एक पूर्ण पथ सेगमेंट होना चाहिए। - -एक स्पष्ट फ़ाइल को सत्यापित और स्थापित करें: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -नीति संदर्भ में ईवेंट प्रकार, सामान्यीकृत पेलोड, टूल नाम और इनपुट, सत्र मेटाडेटा, पैरामीटर, और उपलब्ध होने पर स्रोत CLI शामिल है। - -## विफलता पथों का परीक्षण करें - -प्रविष्टि फ़ाइल या किसी भी स्थानीय मॉड्यूल को बदलने के बाद सत्यापन चलाएं जो इसे आयात करता है: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -कड़ी CLI पथ लापता फ़ाइलों, सिंटैक्स त्रुटियों, अनसुलझे आयातों, शीर्ष-स्तरीय अपवादों, और मॉड्यूल-लोड टाइमआउट के लिए विफल हो जाती है। प्रवर्तन समय पर, एक टूटी हुई कस्टम फ़ाइल को लॉग किया जाता है और छोड़ दिया जाता है ताकि अंतर्निहित नीतियां जारी रह सकें। किसी भी लोड चेतावनी को प्रत्याशित प्रवर्तन की हानि के रूप में मानें और उत्पादन लॉग में इस पर सतर्क करें। - -स्पष्ट, कन्वेंशन, और Cloud-प्रबंधित नीतियों में विश्व स्तर पर अद्वितीय नामों का उपयोग करें। नीति कार्यों को नियतात्मक रखें, बाहरी कॉलों को छोटे टाइमआउट के साथ बाध्य करें, और प्रत्येक पथ पर एक इरादतन `allow`, `instruct`, या `deny` लौटाएं। - - - एक कस्टम नीति प्रवर्तन कोड है। लापता फ़ील्ड, वैकल्पिक टूल नामों, और विकृत इनपुट का परीक्षण करें—केवल अपेक्षित मिलान नहीं। - \ No newline at end of file diff --git a/docs/hi/policies/fleet.mdx b/docs/hi/policies/fleet.mdx deleted file mode 100644 index 49118afa5..000000000 --- a/docs/hi/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "मशीनों पर नीतियां तैनात करें" -description: "जानें कि कौन सी मशीनें नामांकित हैं, वर्तमान हैं, और इच्छित नीति संस्करणों को लागू कर रही हैं।" -icon: "network" ---- - -फ़्लीट कवरेज यह उत्तर देता है कि क्या कोई नीति उस स्थान पर मौजूद है जहां जोखिम मौजूद है। स्थिर ID और मानव-पठनीय लेबल के आधार पर मशीनों को ट्रैक करें, फिर उनकी नियत और रिपोर्ट की गई तैनाती स्थिति की तुलना करें। - -## कवरेज जांचें - - - - 1. **Admin → enforcement** पर जाएं और लागू करने और देखने वाली कुल संख्या की समीक्षा करें। - 2. ID या लेबल के आधार पर एक मशीन खोजें, या नीति न रखने वाली मशीनों के लिए फ़िल्टर करें। - 3. नियत नीतियों, रिपोर्ट की गई तैनाती, अंतिम चेक-इन और इतिहास की तुलना करने के लिए एक पंक्ति का विस्तार करें। - 4. जब लागू की गई तैनाती लंबित रहे तो मशीन के पोलिंग अंतराल के बाद रीफ्रेश करें। - - ![लागू करने वाली फ़्लीट को दिखाने वाला Enforcement फ़्लीट, नीति कवरेज, मशीन तैनाती स्थिति, और देखें और लागू असाइनमेंट।](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - मशीन की एजेंट गतिविधि क्लाउड तक पहुंचती है यह पुष्टि करने के लिए `fp events --agent-id --since 24h` का उपयोग करें। - - - -कवरेज दृश्यों का उपयोग करके खोजें: - -- वे मशीनें जिन्होंने कभी नवीनतम तैनाती नहीं खींची -- नामांकित मशीनें जिन्होंने गतिविधि की रिपोर्टिंग बंद कर दी -- एक नीति जो गलत वातावरण या कोहोर्ट को निर्दिष्ट है -- एक बाधित अपडेट के बाद संस्करण बहाव - -बिना इसे फिर से कनेक्ट किए एक मशीन का नाम बदलें: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -स्थानीय स्थिति जांचें: - -```bash -failproofai config --status -``` - - - ऐसे लेबल का उपयोग करें जो वर्कलोड और वातावरण की पहचान करते हैं। ऑटोस्केलिंग या मशीन प्रतिस्थापन के बाद होस्टनाम अकेले अक्सर अपर्याप्त होते हैं। - \ No newline at end of file diff --git a/docs/images/dashboard/eval-authoring-code.png b/docs/images/dashboard/eval-authoring-code.png new file mode 100644 index 0000000000000000000000000000000000000000..c16be3853cf056380f668dd0750af5b41a2438f6 GIT binary patch literal 139033 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 pB)yhi~CnX#NJYMr!6H?ak7z^}#t@ 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 SYgY3C_!1MA7OD`?_5VLxVShsa literal 0 HcmV?d00001 diff --git a/docs/images/dashboard/eval-authoring-draft.png b/docs/images/dashboard/eval-authoring-draft.png new file mode 100644 index 0000000000000000000000000000000000000000..c40385a6b1538fc214d9e3bf9c83b0d23f2db7a2 GIT binary patch literal 160946 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
  • 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�)yo-z*SQHO5yHmW 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 UM&FMhG~h>7QA?o`ZuR{C0g9a3iU0rr literal 0 HcmV?d00001 diff --git a/docs/images/dashboard/evaluations-chart.png b/docs/images/dashboard/evaluations-chart.png new file mode 100644 index 0000000000000000000000000000000000000000..08002d94998ec6112e2dd21ead088e9fa6d9833b GIT binary patch literal 94355 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%0DN)H;b-x$nM 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

    oUQ7#^sUTt+$W2zNv_rZ)!g|7Ent=71? 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%0Ao3HoLqAu*KJQ$wcid1pDc9ih>IOIn%CnUcQQ z;s$lqPr`sZqc@{d#AVTh|FH~ukQrOkmFnnL8^2*O`FNC2>kx~=#ne~lG>#~HD z9fp##nQ94PN@{$~k~hhL16+8AmhQV^MbHT*IX|?Di=*RwbsOu~<6A!)#dF0x6JK5k zIx>1!X}Zi~*rw0T7DSV`j^)(|_H`C*0aaJ>WvXzSibWr^J@CYHZ)D7MXMEo5{Vgiz zIWqoW^q1^Y|F>BTYaE)e7Y-nC^p|@^$xP+I853|K4V!}f>l3tSB|ZUR2H!WoNKwn@ zd}kySwSZPq{g^k_N zMr+jBx-iYOA&x|;xnblx>{nn6CDUXoO^Jy=bt!|~vDHbGhvQ(oTYk7ge|tnSrP;+FOVPT)*Iz(FVGsG z4#&ihPzf1*4P2~AeglE>yhXxU(zJ3e4&~yyW?F5RC8e=>QgTzjZoz(fAcTo#Ax5}< zI$x78qVL&1elt!{Vqj^9=Bjin;QLIBrynIU0}8p1tAVRw*jCQ{M^mz^(KjYBWt!?U zu)TJQuo)w1ph+w(n4R+UH9|*(YIsT6{r!L!L!faDE=#hI%rcZnDOBCuYw0(G?ok~G zdQSUa4c;sUg(liqaE=1wLmg(y_m8$vW=wt{*A&vpwJpe3G@y{-?$L56#RH9W32{er z1cTN2F_R;|Helg(V@btQpa#DFLb6kltW|mHsmyc-%0~}#*3^!Yk_I5F0n1SJb(7~> zPp7KQ-2ORu-yQq4&*bt&rhcT_-b1|3--YSzgvTeTvQY}}V+?~?HP7}bZ5idt)6Z}A zZ|yKkECi;X;O6GS;vJ(=R0?CM`hHc0{BJK7P=qTNkNM{5MZ1_w|E1`BINKJbQ0cy2 zYHaeWCzpXq@;{3Y&1xJHq-?$VNA;alcD8p1fM;Mg7~4|gAEq#op0GixA_f_ zZy(8)0>70yE9~^+8O{aHB&_nbqnZ~OpglJKv53(~4LLjluJN66u=0)vbONjŭ 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 - Un pattern di autorizzazione amplia quello che un agente può fare. Verifica la tokenizzazione esatta e le varianti di comando sull'harness target prima di distribuirlo su una flotta. - \ No newline at end of file diff --git a/docs/it/policies/builtin.mdx b/docs/it/policies/builtin.mdx deleted file mode 100644 index 14d5760b7..000000000 --- a/docs/it/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Politiche integrate" -description: "Abilita protezioni mantenute per i comuni modi di errore degli agenti." -icon: "library" ---- - -Le politiche integrate coprono la gestione dei segreti, i file di ambiente, i comandi shell distruttivi, i rami protetti, gli strumenti cloud e infrastruttura, la pubblicazione di pacchetti, le chiamate ripetute e i controlli del flusso di lavoro di fine attività. - -## Abilitare e verificare una politica integrata - - - - 1. Installa la politica su una macchina connessa con la CLI locale. - 2. Esegui un'azione di test sicura nell'agente strumentato. - 3. Vai a **Observe → policy** e filtra per nome della politica, ambiente della macchina o decisione. - 4. Apri la sessione collegata per confermare l'input dello strumento corrispondente e il motivo restituito. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Rimuovila con `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Elenca le politiche disponibili nella tua versione installata: - -```bash -failproofai policies -``` - -Abilita una politica per un progetto: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Abilita più politiche per strumenti selezionati: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Alcune politiche accettano parametri o sono contrassegnate come beta. Rivedi la descrizione, l'ambito di corrispondenza e il comportamento predefinito prima del rollout. Una politica che protegge un flusso di lavoro potrebbe bloccare operazioni valide in un altro. - - - Rivedi tutte le 40 politiche attuali, i loro trigger, la baseline consigliata e i parametri. - - - - Preferisci l'ambito del progetto per le aspettative specifiche del repository e l'ambito utente per i requisiti di sicurezza a livello di macchina. - \ No newline at end of file diff --git a/docs/it/policies/custom.mdx b/docs/it/policies/custom.mdx deleted file mode 100644 index f74a96264..000000000 --- a/docs/it/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Criteri personalizzati" -description: "Scrivi un criterio per una modalità di errore univoca nel flusso di lavoro del tuo agente." -icon: "shield-plus" ---- - -Crea un file che termina con `policies.js`, `policies.mjs` o `policies.ts` nella cartella `.failproofai/policies/`. I file per convenzione si caricano automaticamente a livello di progetto e utente. - -## Test del criterio prima della pubblicazione Cloud - - - - 1. Installa il criterio personalizzato su una macchina di test e attiva sia un'azione corrispondente che una non-corrispondenza legittima. - 2. Vai a **Observe → policy** e confronta le due decisioni. - 3. Apri ogni sessione collegata e verifica che il payload dell'evento contenga prove sufficienti per la regola. - 4. Quando il comportamento è corretto, sposta il codice sorgente controllato in **Admin → policy editor** e pubblica una versione. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - I file per convenzione in `.failproofai/policies/` si caricano senza `--custom`. Mantieni un comando di installazione esplicito in CI quando la convalida deve fallire su un modulo difettoso. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Questo corrisponde a `production/config.yml`, `/srv/production/config.yml`, `/srv/production` e `C:\\production\\config.yml` sia per `Write` che per `Edit`. Non corrisponde a nomi come `production-backup` perché `production` deve essere un segmento di percorso completo. - -Convalida e installa un file esplicito: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Il contesto della policy include il tipo di evento, il payload normalizzato, il nome e l'input dello strumento, i metadati della sessione, i parametri e la CLI di origine quando disponibile. - -## Test dei percorsi di errore - -Esegui la convalida dopo aver modificato il file di entry o qualsiasi modulo locale che importa: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Il percorso CLI rigoroso fallisce per file mancanti, errori di sintassi, importazioni non risolte, eccezioni di livello superiore e timeout di caricamento del modulo. Al momento dell'applicazione, un file personalizzato difettoso viene registrato e saltato in modo che i criteri incorporati possano continuare. Considera qualsiasi avviso di caricamento come una perdita dell'applicazione prevista e generale un avviso nei log di produzione. - -Utilizza nomi globalmente univoci su tutti i criteri espliciti, per convenzione e gestiti da Cloud. Mantieni le funzioni della policy deterministiche, limita le chiamate esterne con timeout brevi e restituisci un intenzionale `allow`, `instruct` o `deny` su ogni percorso. - - - Un criterio personalizzato è codice di applicazione. Testa campi mancanti, nomi di strumenti alternativi e input non valido—non solo la corrispondenza prevista. - \ No newline at end of file diff --git a/docs/it/policies/fleet.mdx b/docs/it/policies/fleet.mdx deleted file mode 100644 index af98bd080..000000000 --- a/docs/it/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Distribuisci politiche alle macchine" -description: "Conosci quali macchine sono iscritte, aggiornate e applicano le versioni di politica previste." -icon: "network" ---- - -La copertura della flotta risponde alla domanda se esiste una politica dove esiste il rischio. Traccia le macchine tramite ID stabile e un'etichetta leggibile dall'uomo, quindi confronta lo stato di distribuzione assegnato e segnalato. - -## Controlla la copertura - - - - 1. Vai a **Admin → enforcement** e rivedi i totali in applicazione e osservazione. - 2. Cerca una macchina per ID o etichetta, oppure filtra per le macchine a cui manca una politica. - 3. Espandi una riga per confrontare le politiche assegnate, la distribuzione segnalata, l'ultimo check-in e la cronologia. - 4. Aggiorna dopo l'intervallo di polling della macchina quando una distribuzione applicata rimane in sospeso. - - ![La flotta Enforcement che mostra la copertura delle politiche, lo stato di distribuzione della macchina e gli assegnamenti di osservazione e applicazione.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Usa `fp events --agent-id --since 24h` per confermare che l'attività dell'agente della macchina raggiunge il Cloud. - - - -Usa le viste di copertura per trovare: - -- Macchine che non hanno mai richiesto la distribuzione più recente -- Macchine iscritte che hanno smesso di segnalare attività -- Una politica assegnata all'ambiente o alla coorte sbagliati -- Variazione di versione dopo un aggiornamento interrotto - -Rinomina una macchina senza riconnetterla: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Controlla lo stato locale: - -```bash -failproofai config --status -``` - - - Usa etichette che identifichino il carico di lavoro e l'ambiente. I nomi host da soli sono spesso insufficienti dopo il ridimensionamento automatico o la sostituzione della macchina. - \ No newline at end of file diff --git a/docs/ja/policies/builtin-catalog.mdx b/docs/ja/policies/builtin-catalog.mdx deleted file mode 100644 index 77146af0c..000000000 --- a/docs/ja/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "ビルトインポリシーカタログ" -description: "Failproof AI の全ビルトインポリシー、そのトリガー、推奨状態、および設定可能なパラメーターを確認できます。" -icon: "list-checks" ---- - -インストール済みパッケージがポリシーの利用可否に関する唯一の情報源です。パッケージをアップグレードするたびに `failproofai policies` を実行してください。カタログのエントリや動作はパッケージバージョンによって変わることがあります。 - -## 推奨ベースライン - -ガイド付きセットアップの推奨選択では、現在、シークレットサニタイザー、環境保護、自己保護、致命的コマンドガード、保護ブランチの安全策が有効化されます: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` は**常に有効**です。上記に記載しているのは網羅性のためであり、有効なセットに含まれているかどうかに関係なく、すべての評価時に登録されます。無効化や一時停止はできません。エージェントが無効にできる「エージェントによる強制のオフ」に対するガードは、ガードとして機能しないからです。 - -推奨設定は意図的に**すべて**よりも範囲を絞っています。インフラや開発ワークフローのポリシーは正当な作業を中断させる可能性があるため、それらを必要とするリポジトリやマシンに限定して有効化すべきです。 - -## シークレットと環境 - -| ポリシー | トリガー | 結果 | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | モデルに渡る前にツール出力から JWT を削除する。 | -| `sanitize-api-keys` | `PostToolUse` | OpenAI、Anthropic、GitHub、AWS、Stripe、Google の主要なキーを削除する。 | -| `sanitize-connection-strings` | `PostToolUse` | 認証情報を含むデータベース接続文字列を削除する。 | -| `sanitize-private-key-content` | `PostToolUse` | PEM 秘密鍵の本文を削除する。 | -| `sanitize-bearer-tokens` | `PostToolUse` | Authorization ベアラートークンを削除する。 | -| `protect-env-vars` | シェルツール上の `PreToolUse` | 環境変数をダンプするコマンドをブロックする。 | -| `block-env-files` | `PreToolUse` | `.env` ファイルの読み取りおよび書き込みをブロックする。 | -| `block-read-outside-cwd` | 読み取り・glob・grep・シェルツール上の `PreToolUse` | 読み取りをセッションの作業ディレクトリ内に限定する。 | -| `block-secrets-write` | 書き込みツール上の `PreToolUse` | 一般的なシークレットキーや認証情報ファイル名への書き込みをブロックする。 | - -## 危険なコマンドとインフラ - -| ポリシー | トリガー | 結果 | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`、`PermissionRequest` | allow パターンに一致しない限り `sudo` をブロックする。 | -| `block-curl-pipe-sh` | `PreToolUse` | ダウンロードしたスクリプトをシェルに直接パイプすることをブロックする。 | -| `block-rm-rf` | `PreToolUse` | 致命的な再帰削除パターンをブロックする。 | -| `block-failproofai-commands` | `PreToolUse`、`PermissionRequest` | **常に有効、無効化不可。** Failproof AI CLI のすべての呼び出し、自己一時停止、パッケージマネージャーによるアンインストールをブロックする。 | -| `block-kubectl` | `PreToolUse` | Kubernetes コマンドをゲートする。 | -| `block-terraform` | `PreToolUse` | Terraform および OpenTofu コマンドをゲートする。 | -| `block-aws-cli` | `PreToolUse` | AWS CLI コマンドをゲートする。 | -| `block-gcloud` | `PreToolUse` | Google Cloud CLI コマンドをゲートする。 | -| `block-az-cli` | `PreToolUse` | Azure CLI コマンドをゲートする。 | -| `block-helm` | `PreToolUse` | Helm コマンドをゲートする。 | -| `block-gh-pipeline` | `PreToolUse` | GitHub CLI の変更を伴うワークフロー・実行・マージ・リリース・キャッシュ・シークレット操作をゲートする。 | - -## Git とデータベースの安全性 - -| ポリシー | トリガー | 結果 | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | 設定された保護ブランチへの直接プッシュをブロックする。 | -| `block-force-push` | `PreToolUse` | フォースプッシュをブロックする。現在の実装では `--force-with-lease` は引き続き許可される。 | -| `block-work-on-main` | `PreToolUse` | 保護ブランチへのコミットおよびマージをブロックする。 | -| `warn-git-amend` | `PreToolUse` | `--amend` によるコミットの書き換え前に警告する。 | -| `warn-git-stash-drop` | `PreToolUse` | スタッシュを永続的にドロップまたはクリアする前に警告する。 | -| `warn-all-files-staged` | `PreToolUse` | 広範な `git add -A`、`git add .`、`git add --all` に対して警告する。 | -| `warn-destructive-sql` | `PreToolUse` | 認識されたデータベースクライアント経由で `WHERE` なしの `DROP`、`TRUNCATE`、`DELETE` が実行される前に警告する。 | -| `warn-schema-alteration` | `PreToolUse` | 認識された `ALTER TABLE` のカラム操作やリネーム操作に対して警告する。 | - -## パッケージ、システム動作、エージェントループ - -| ポリシー | トリガー | 結果 | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | パッケージレジストリへの公開前に警告する。 | -| `warn-global-package-install` | `PreToolUse` | グローバルパッケージのインストール前に警告する。 | -| `prefer-package-manager` | `PreToolUse` | 許可されたパッケージマネージャーを使用するようエージェントに指示する。 | -| `warn-large-file-write` | 書き込みツール上の `PreToolUse` | 設定されたファイルサイズしきい値を超えた場合に警告する。 | -| `warn-background-process` | `PreToolUse` | デタッチまたは長期実行のバックグラウンドプロセスパターンに対して警告する。 | -| `warn-repeated-tool-calls` | `PreToolUse` | 同一のツール呼び出しが 3 回以上繰り返された場合に警告する。 | - -## タスク終了時のワークフロー - -これらのポリシーは、互換性のある `Stop` イベントを発行するハーネスを必要とします。 - -| ポリシー | 結果 | -| --- | --- | -| `require-commit-before-stop` | トラッキングされた作業がコミットされていない間は完了を拒否する。 | -| `require-push-before-stop` | コミットがローカルのみの間は完了を拒否する。 | -| `require-pr-before-stop` | 現在のブランチに対してプルリクエストを要求する。 | -| `require-no-conflicts-before-stop` | 設定されたベースブランチに対してクリーンなマージを要求する。 | -| `require-ci-green-before-stop` | 現在の HEAD の CI チェックが正常に完了することを要求する。 | - -## パラメーターリファレンス - -選択したスコープの `policyParams` オブジェクト配下でパラメーターを設定します。型は各ポリシーによって検証されます。 - -| ポリシー | パラメーター | 型とデフォルト値 | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`、`[]`;エントリには `regex` と `label` が含まれる | -| `block-read-outside-cwd` | `allowPaths` | `string[]`、`[]` | -| `block-sudo` | `allowPatterns` | `string[]`、`[]` | -| `block-rm-rf` | `allowPaths` | `string[]`、`[]` | -| インフラブロッカー | `allowPatterns` | `string[]`、`[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`、`[]` | -| `block-push-master` | `protectedBranches` | `string[]`、`["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`、`["main", "master"]` | -| `prefer-package-manager` | `allowed`、`blocked` | `string[]`、`[]` | -| `warn-large-file-write` | `thresholdKb` | `number`、`1024` | -| `require-push-before-stop` | `remote`、`baseBranch` | `string`、`"origin"`;`string`、`"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`、`"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`、`"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - allow パターンはエージェントが実行できる範囲を広げます。フリートへの展開前に、対象ハーネス上でトークン化の詳細とコマンドのバリエーションを正確にテストしてください。 - \ No newline at end of file diff --git a/docs/ja/policies/builtin.mdx b/docs/ja/policies/builtin.mdx deleted file mode 100644 index 2b9a136d6..000000000 --- a/docs/ja/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "組み込みポリシー" -description: "一般的なエージェント障害モードに対する管理されたガードレールを有効にします。" -icon: "library" ---- - -組み込みポリシーは、シークレット処理、環境ファイル、破壊的なシェルコマンド、保護されたブランチ、クラウドおよびインフラツール、パッケージ公開、繰り返し呼び出し、タスク終了時のワークフローチェックをカバーします。 - -## 組み込みポリシーの有効化と検証 - - - - 1. ローカル CLI を使用して、接続済みのマシンにポリシーをインストールします。 - 2. インストルメント済みのエージェントで安全なテストアクションを実行します。 - 3. **Observe → policy** に移動し、ポリシー名、マシン環境、または決定でフィルタリングします。 - 4. リンクされたセッションを開いて、マッチしたツール入力と返された理由を確認します。 - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - `failproofai policy remove block-rm-rf --cli claude --scope project` で削除します。 - - - -インストール済みバージョンで利用可能なポリシーを一覧表示します。 - -```bash -failproofai policies -``` - -プロジェクトに対して 1 つのポリシーを有効にします。 - -```bash -failproofai policy add block-rm-rf --scope project -``` - -選択したハーネスに対して複数のポリシーを有効にします。 - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -一部のポリシーはパラメータを受け付けるか、ベータとしてマークされています。ロールアウト前に説明、マッチスコープ、デフォルト動作を確認してください。あるワークフローを保護するポリシーが、別のワークフローで有効な操作をブロックする場合があります。 - - - 現在の 40 件のポリシーすべて、トリガー、推奨ベースライン、パラメータを確認します。 - - - - リポジトリ固有の要件にはプロジェクトスコープを、マシン全体の安全要件にはユーザースコープを優先してください。 - \ No newline at end of file diff --git a/docs/ja/policies/custom.mdx b/docs/ja/policies/custom.mdx deleted file mode 100644 index 9153bb5e5..000000000 --- a/docs/ja/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "カスタムポリシー" -description: "エージェントワークフロー固有の障害モードに対応するポリシーを作成します。" -icon: "shield-plus" ---- - -`.failproofai/policies/` 以下に `policies.js`、`policies.mjs`、または `policies.ts` で終わるファイルを作成してください。規約ファイルはプロジェクトスコープおよびユーザースコープで自動的に読み込まれます。 - -## クラウド公開前にポリシーをテストする - - - - 1. カスタムポリシーをテストマシン1台にインストールし、マッチするアクションと正当なノンマッチの両方をトリガーします。 - 2. **Observe → policy** に移動して、2つの判定結果を比較します。 - 3. リンクされた各セッションを開き、イベントペイロードにルールの根拠となる十分な証跡が含まれているか確認します。 - 4. 動作が正しいことを確認したら、レビュー済みのソースを **Admin → policy editor** に移してバージョンを公開します。 - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - `.failproofai/policies/` 以下の規約ファイルは `--custom` なしで読み込まれます。壊れたモジュールでバリデーションを失敗させたい CI 環境では、明示的なインストールコマンドを残してください。 - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -これは `production/config.yml`、`/srv/production/config.yml`、`/srv/production`、`C:\\production\\config.yml` に対して `Write` と `Edit` の両方でマッチします。`production` はパスセグメント全体でなければならないため、`production-backup` のような名前にはマッチしません。 - -明示的なファイルを検証してインストールするには: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -ポリシーコンテキストには、イベントタイプ、正規化されたペイロード、ツール名と入力、セッションメタデータ、パラメーター、および利用可能な場合はソース CLI が含まれます。 - -## 失敗パスのテスト - -エントリファイルまたはそれがインポートするローカルモジュールを変更した後は、バリデーションを実行してください: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -strict な CLI パスは、ファイルが見つからない場合、構文エラー、未解決のインポート、トップレベルの例外、モジュール読み込みタイムアウトで失敗します。実行時に壊れたカスタムファイルはログに記録されてスキップされるため、組み込みポリシーは継続して機能します。読み込み警告は期待される実行の損失として扱い、本番ログでアラートを設定してください。 - -明示的・規約・クラウド管理のポリシーを通じてグローバルに一意な名前を使用してください。ポリシー関数は決定論的に保ち、外部呼び出しには短いタイムアウトを設定し、すべてのパスで意図的な `allow`、`instruct`、または `deny` を返すようにしてください。 - - - カスタムポリシーは実行コードです。期待されるマッチだけでなく、フィールドの欠如、代替ツール名、不正な入力についてもテストしてください。 - \ No newline at end of file diff --git a/docs/ja/policies/fleet.mdx b/docs/ja/policies/fleet.mdx deleted file mode 100644 index 5f364d2fd..000000000 --- a/docs/ja/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "マシンへのポリシーのデプロイ" -description: "登録済みのマシン、最新状態のマシン、および意図したポリシーバージョンを適用中のマシンを把握します。" -icon: "network" ---- - -フリートカバレッジは、リスクが存在する場所にポリシーが存在するかどうかを確認するためのものです。安定したIDと人が読めるラベルでマシンを追跡し、割り当て済みのデプロイ状態と報告されたデプロイ状態を比較します。 - -## カバレッジの確認 - - - - 1. **Admin → enforcement** に移動し、適用中(enforcing)と監視中(observing)の合計を確認します。 - 2. IDまたはラベルでマシンを検索するか、ポリシーが割り当てられていないマシンをフィルタリングします。 - 3. 行を展開して、割り当て済みポリシー、報告されたデプロイ状態、最終チェックイン、および履歴を比較します。 - 4. 適用済みのデプロイが保留中のままになっている場合は、マシンのポーリング間隔が経過した後に更新します。 - - ![ポリシーカバレッジ、マシンのデプロイ状態、監視および適用の割り当てを表示するEnforcementフリート画面。](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - `fp events --agent-id --since 24h` を使用して、マシンのエージェントアクティビティがCloudに到達していることを確認します。 - - - -カバレッジビューを使用して以下を検出できます: - -- 最新のデプロイを一度も取得していないマシン -- アクティビティの報告を停止した登録済みマシン -- 誤った環境またはコホートに割り当てられたポリシー -- 中断されたアップデート後のバージョンのずれ - -再接続せずにマシンの名前を変更する: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -ローカル状態を確認する: - -```bash -failproofai config --status -``` - - - ワークロードと環境を識別するラベルを使用してください。ホスト名だけでは、オートスケーリングやマシン入れ替え後に不十分になることがよくあります。 - \ No newline at end of file diff --git a/docs/ko/policies/builtin-catalog.mdx b/docs/ko/policies/builtin-catalog.mdx deleted file mode 100644 index 7d23bd8be..000000000 --- a/docs/ko/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "기본 제공 정책 카탈로그" -description: "Failproof AI의 모든 기본 제공 정책, 트리거, 권장 상태, 설정 가능한 파라미터를 확인하세요." -icon: "list-checks" ---- - -설치된 패키지가 정책 가용성의 기준입니다. 업그레이드할 때마다 `failproofai policies`를 실행하세요. 카탈로그 항목과 동작은 패키지 버전에 따라 변경될 수 있습니다. - -## 권장 기준 설정 - -가이드 설정의 권장 선택 항목은 현재 시크릿 삭제, 환경 보호, 자기 보호, 치명적 명령 차단, 보호 브랜치 안전 기능을 활성화합니다: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands`는 **항상 활성화**되어 있습니다. 완전성을 위해 위에 나열되었지만, 활성화된 목록에 포함 여부와 관계없이 모든 평가 시 등록되며, 비활성화하거나 일시 중지할 수 없습니다. 에이전트가 끌 수 있는 강제 수단은 진정한 보호 수단이 아닙니다. - -권장 설정은 의도적으로 **전체 활성화**보다 좁은 범위로 설정되어 있습니다. 인프라 및 워크플로 정책은 유효한 작업을 방해할 수 있으므로, 해당 정책이 필요한 저장소와 머신에서만 활성화해야 합니다. - -## 시크릿 및 환경 - -| 정책 | 트리거 | 결과 | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | 모델이 확인하기 전에 도구 출력에서 JWT를 삭제합니다. | -| `sanitize-api-keys` | `PostToolUse` | OpenAI, Anthropic, GitHub, AWS, Stripe, Google 등의 일반적인 API 키를 삭제합니다. | -| `sanitize-connection-strings` | `PostToolUse` | 자격 증명이 포함된 데이터베이스 연결 문자열을 삭제합니다. | -| `sanitize-private-key-content` | `PostToolUse` | PEM 개인 키 본문을 삭제합니다. | -| `sanitize-bearer-tokens` | `PostToolUse` | Authorization bearer 토큰을 삭제합니다. | -| `protect-env-vars` | 셸 도구에서 `PreToolUse` | 환경 변수를 덤프하는 명령을 차단합니다. | -| `block-env-files` | `PreToolUse` | `.env` 파일의 읽기 및 쓰기를 차단합니다. | -| `block-read-outside-cwd` | 읽기, glob, grep, 셸 도구에서 `PreToolUse` | 읽기 작업을 세션 작업 디렉토리 내로 제한합니다. | -| `block-secrets-write` | 쓰기 도구에서 `PreToolUse` | 일반적인 시크릿 키 및 자격 증명 파일명에 대한 쓰기를 차단합니다. | - -## 위험 명령 및 인프라 - -| 정책 | 트리거 | 결과 | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | 허용 패턴이 일치하지 않는 한 `sudo`를 차단합니다. | -| `block-curl-pipe-sh` | `PreToolUse` | 셸로 직접 파이프되는 다운로드 스크립트를 차단합니다. | -| `block-rm-rf` | `PreToolUse` | 치명적인 재귀 삭제 패턴을 차단합니다. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **항상 활성화, 비활성화 불가.** 모든 Failproof AI CLI 호출, 자기 일시 중지, 패키지 매니저 제거를 차단합니다. | -| `block-kubectl` | `PreToolUse` | Kubernetes 명령을 제어합니다. | -| `block-terraform` | `PreToolUse` | Terraform 및 OpenTofu 명령을 제어합니다. | -| `block-aws-cli` | `PreToolUse` | AWS CLI 명령을 제어합니다. | -| `block-gcloud` | `PreToolUse` | Google Cloud CLI 명령을 제어합니다. | -| `block-az-cli` | `PreToolUse` | Azure CLI 명령을 제어합니다. | -| `block-helm` | `PreToolUse` | Helm 명령을 제어합니다. | -| `block-gh-pipeline` | `PreToolUse` | GitHub CLI의 변경성 워크플로, 실행, 병합, 릴리스, 캐시, 시크릿 작업을 제어합니다. | - -## Git 및 데이터베이스 안전 - -| 정책 | 트리거 | 결과 | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | 설정된 보호 브랜치로의 직접 푸시를 차단합니다. | -| `block-force-push` | `PreToolUse` | 강제 푸시를 차단합니다. 현재 구현에서는 `--force-with-lease`는 허용됩니다. | -| `block-work-on-main` | `PreToolUse` | 보호 브랜치에서의 커밋 및 병합을 차단합니다. | -| `warn-git-amend` | `PreToolUse` | `--amend`로 커밋을 재작성하기 전에 경고합니다. | -| `warn-git-stash-drop` | `PreToolUse` | 스태시를 영구적으로 삭제하거나 초기화하기 전에 경고합니다. | -| `warn-all-files-staged` | `PreToolUse` | 광범위한 `git add -A`, `git add .`, `git add --all` 사용 시 경고합니다. | -| `warn-destructive-sql` | `PreToolUse` | 인식된 데이터베이스 클라이언트를 통해 `WHERE` 절 없이 `DROP`, `TRUNCATE`, `DELETE` 사용 시 경고합니다. | -| `warn-schema-alteration` | `PreToolUse` | 인식된 `ALTER TABLE` 컬럼 및 이름 변경 작업 시 경고합니다. | - -## 패키지, 시스템 동작, 에이전트 루프 - -| 정책 | 트리거 | 결과 | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | 패키지 레지스트리에 게시하기 전에 경고합니다. | -| `warn-global-package-install` | `PreToolUse` | 전역 패키지 설치 전에 경고합니다. | -| `prefer-package-manager` | `PreToolUse` | 허용된 패키지 매니저를 사용하도록 에이전트에게 지시합니다. | -| `warn-large-file-write` | 쓰기 도구에서 `PreToolUse` | 설정된 파일 크기 임계값을 초과하면 경고합니다. | -| `warn-background-process` | `PreToolUse` | 분리되거나 장기 실행되는 백그라운드 프로세스 패턴 시 경고합니다. | -| `warn-repeated-tool-calls` | `PreToolUse` | 동일한 도구 호출이 세 번 이상 반복되면 경고합니다. | - -## 작업 종료 워크플로 - -이 정책들은 호환되는 `Stop` 이벤트를 발생시키는 하네스가 필요합니다. - -| 정책 | 결과 | -| --- | --- | -| `require-commit-before-stop` | 추적된 작업이 커밋되지 않은 상태에서 완료를 거부합니다. | -| `require-push-before-stop` | 커밋이 로컬에만 존재하는 상태에서 완료를 거부합니다. | -| `require-pr-before-stop` | 현재 브랜치에 대한 풀 리퀘스트를 요구합니다. | -| `require-no-conflicts-before-stop` | 설정된 베이스 브랜치에 대해 충돌 없는 병합을 요구합니다. | -| `require-ci-green-before-stop` | 현재 HEAD의 CI 검사가 성공적으로 완료될 것을 요구합니다. | - -## 파라미터 참조 - -선택된 스코프의 `policyParams` 객체 아래에서 파라미터를 설정합니다. 각 정책에 의해 타입이 검증됩니다. - -| 정책 | 파라미터 | 타입 및 기본값 | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; 항목에 `regex` 및 `label` 포함 | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| 인프라 차단 정책 | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - 허용 패턴은 에이전트가 수행할 수 있는 작업의 범위를 넓힙니다. 플릿 전체에 배포하기 전에 대상 하네스에서 정확한 토크나이제이션과 명령 변형을 테스트하세요. - \ No newline at end of file diff --git a/docs/ko/policies/builtin.mdx b/docs/ko/policies/builtin.mdx deleted file mode 100644 index 11e4d015d..000000000 --- a/docs/ko/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "내장 정책" -description: "일반적인 에이전트 실패 모드에 대한 관리형 가드레일을 활성화합니다." -icon: "library" ---- - -내장 정책은 시크릿 처리, 환경 파일, 파괴적인 셸 명령, 보호된 브랜치, 클라우드 및 인프라 도구, 패키지 게시, 반복 호출, 작업 종료 워크플로우 검사를 다룹니다. - -## 내장 정책 활성화 및 검증 - - - - 1. 로컬 CLI로 연결된 머신에 정책을 설치합니다. - 2. 계측된 에이전트에서 안전한 테스트 작업을 실행합니다. - 3. **Observe → policy**로 이동하여 정책 이름, 머신 환경 또는 결정으로 필터링합니다. - 4. 연결된 세션을 열어 매칭된 도구 입력과 반환된 이유를 확인합니다. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - `failproofai policy remove block-rm-rf --cli claude --scope project`로 제거할 수 있습니다. - - - -설치된 버전에서 사용 가능한 정책 목록 확인: - -```bash -failproofai policies -``` - -프로젝트에 정책 하나 활성화: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -선택한 하네스에 여러 정책 활성화: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -일부 정책은 파라미터를 허용하거나 베타로 표시됩니다. 롤아웃 전에 설명, 매치 범위, 기본 동작을 검토하세요. 한 워크플로우를 보호하는 정책이 다른 워크플로우에서는 유효한 작업을 차단할 수 있습니다. - - - 현재 40개의 정책 전체와 각 정책의 트리거, 권장 기준선, 파라미터를 검토하세요. - - - - 저장소별 요구 사항에는 프로젝트 범위를, 머신 전체 안전 요구 사항에는 사용자 범위를 사용하는 것을 권장합니다. - \ No newline at end of file diff --git a/docs/ko/policies/custom.mdx b/docs/ko/policies/custom.mdx deleted file mode 100644 index 448c7600a..000000000 --- a/docs/ko/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "커스텀 정책" -description: "에이전트 워크플로우에 고유한 실패 모드에 대한 정책을 작성하세요." -icon: "shield-plus" ---- - -`.failproofai/policies/` 하위에 `policies.js`, `policies.mjs`, 또는 `policies.ts`로 끝나는 파일을 생성하세요. 컨벤션 파일은 프로젝트 및 사용자 범위에서 자동으로 로드됩니다. - -## 클라우드 게시 전 정책 테스트 - - - - 1. 테스트 머신 한 대에 커스텀 정책을 설치하고, 매칭되는 액션과 정상적인 비매칭 액션을 각각 트리거합니다. - 2. **Observe → policy**로 이동하여 두 결정을 비교합니다. - 3. 연결된 각 세션을 열어 이벤트 페이로드에 규칙을 판단할 충분한 근거가 포함되어 있는지 확인합니다. - 4. 동작이 올바르면, 검토한 소스를 **Admin → policy editor**로 이동하여 버전을 게시합니다. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - `.failproofai/policies/` 하위의 컨벤션 파일은 `--custom` 없이 로드됩니다. 손상된 모듈에서 유효성 검사가 실패해야 하는 CI 환경에서는 명시적인 설치 명령을 유지하세요. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -이 정책은 `Write`와 `Edit` 모두에 대해 `production/config.yml`, `/srv/production/config.yml`, `/srv/production`, `C:\\production\\config.yml`에 매칭됩니다. `production`은 완전한 경로 세그먼트여야 하므로 `production-backup`과 같은 이름은 매칭되지 않습니다. - -명시적 파일의 유효성을 검사하고 설치합니다: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -정책 컨텍스트에는 이벤트 유형, 정규화된 페이로드, 도구 이름과 입력, 세션 메타데이터, 파라미터, 그리고 가능한 경우 소스 CLI가 포함됩니다. - -## 실패 경로 테스트 - -엔트리 파일이나 해당 파일이 임포트하는 로컬 모듈을 변경한 후 유효성 검사를 실행하세요: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -strict CLI 경로는 파일 누락, 구문 오류, 해결되지 않은 임포트, 최상위 예외, 모듈 로드 타임아웃 시 실패합니다. 적용 시점에 손상된 커스텀 파일은 기록되고 건너뛰어지므로 내장 정책은 계속 동작합니다. 로드 경고는 예상되는 적용의 손실로 간주하고, 프로덕션 로그에서 알림을 설정하세요. - -명시적, 컨벤션, 클라우드 관리 정책 전반에 걸쳐 전역적으로 고유한 이름을 사용하세요. 정책 함수는 결정론적으로 유지하고, 외부 호출은 짧은 타임아웃으로 제한하며, 모든 경로에서 의도적인 `allow`, `instruct`, 또는 `deny`를 반환하세요. - - - 커스텀 정책은 적용 코드입니다. 예상되는 매칭뿐만 아니라 누락된 필드, 대체 도구 이름, 잘못된 형식의 입력에 대해서도 테스트하세요. - \ No newline at end of file diff --git a/docs/ko/policies/fleet.mdx b/docs/ko/policies/fleet.mdx deleted file mode 100644 index ca9d45058..000000000 --- a/docs/ko/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "머신에 정책 배포하기" -description: "등록된 머신이 어떤 것인지, 최신 상태인지, 의도한 정책 버전을 적용하고 있는지 파악합니다." -icon: "network" ---- - -플리트 커버리지는 위험이 존재하는 곳에 정책이 존재하는지를 확인합니다. 머신을 안정적인 ID와 사람이 읽을 수 있는 레이블로 추적한 다음, 할당된 배포 상태와 실제 보고된 배포 상태를 비교합니다. - -## 커버리지 확인 - - - - 1. **Admin → enforcement** 로 이동하여 적용(enforcing) 및 관찰(observing) 합계를 검토합니다. - 2. ID 또는 레이블로 머신을 검색하거나, 정책이 없는 머신을 필터링합니다. - 3. 행을 펼쳐 할당된 정책, 보고된 배포 상태, 마지막 체크인 시각, 히스토리를 비교합니다. - 4. 적용된 배포가 보류 상태로 남아 있을 경우, 머신의 폴링 간격이 지난 후 새로고침합니다. - - ![정책 커버리지, 머신 배포 상태, 관찰 및 적용 할당을 보여주는 Enforcement 플리트 화면.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - `fp events --agent-id --since 24h` 명령을 사용하여 해당 머신의 에이전트 활동이 Cloud에 도달하는지 확인하세요. - - - -커버리지 뷰를 활용해 다음 항목을 확인할 수 있습니다: - -- 최신 배포를 한 번도 가져오지 않은 머신 -- 등록은 됐지만 활동 보고가 중단된 머신 -- 잘못된 환경 또는 코호트에 할당된 정책 -- 업데이트 중단 이후 발생한 버전 불일치 - -머신을 재연결하지 않고 이름 변경하기: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -로컬 상태 확인하기: - -```bash -failproofai config --status -``` - - - 워크로드와 환경을 식별할 수 있는 레이블을 사용하세요. 호스트명만으로는 오토스케일링이나 머신 교체 후 식별이 어려운 경우가 많습니다. - \ No newline at end of file diff --git a/docs/policies/builtin-catalog.mdx b/docs/policies/builtin-catalog.mdx deleted file mode 100644 index 78f3cd6ba..000000000 --- a/docs/policies/builtin-catalog.mdx +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: "Builtin policy catalog" -description: "Review every builtin Failproof AI policy, its trigger, recommended state, and configurable parameters." -icon: "list-checks" ---- - -The installed package is the source of truth for policy availability. Run `failproofai policies` after every upgrade because catalog entries and behavior can change with the package version. - -## Recommended baseline - -Setting up a machine enables **no** policy. The baseline below is the Failproof AI pack's own default selection — the 10 its manifest marks as safe to switch on unattended, applied when you run `failproofai policies add FailproofAI/policies` with no flags: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-sudo -block-curl-pipe-sh block-push-master -``` - -`block-failproofai-commands` enforces alongside them without being one of them. It is **always on**: it registers on every evaluation whether or not it appears in your enabled set, and it cannot be disabled or paused — a guard against the agent switching off enforcement that the agent can switch off is not a guard. - - - `block-rm-rf`, `block-force-push` and `block-secrets-write` are **not** in the baseline. They are among the most-wanted guards and it is reasonable to assume otherwise, so enable them deliberately: - - ```bash - failproofai policies add block-rm-rf - failproofai policies add block-force-push - failproofai policies add block-secrets-write - ``` - - -The baseline is deliberately narrower than **Everything**. Destructive-command, infrastructure and workflow policies can interrupt valid work, so they are opt-in per repository and machine — `--all` takes the lot. - -## Secrets and environment - -| Policy | Trigger | Outcome | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Report JWTs found in tool output. | -| `sanitize-api-keys` | `PostToolUse` | Report common OpenAI, Anthropic, GitHub, AWS, Stripe, and Google keys. | -| `sanitize-connection-strings` | `PostToolUse` | Report database connection strings containing credentials. | -| `sanitize-private-key-content` | `PostToolUse` | Report PEM private-key bodies. | -| `sanitize-bearer-tokens` | `PostToolUse` | Report authorization bearer tokens. | -| `protect-env-vars` | `PreToolUse` on shell tools | Block commands that dump environment variables. | -| `block-env-files` | `PreToolUse` | Block reads and writes of `.env` files. | -| `block-read-outside-cwd` | `PreToolUse` on read, glob, grep, or shell tools | Keep reads inside the session working directory. | -| `block-secrets-write` | `PreToolUse` on write tools | Block writes to common secret-key and credential filenames. | - - - The five `sanitize-*` policies run on `PostToolUse`, which is **observation only**: the tool has already run and its output has already reached the model. They tell you a secret appeared in tool output — they do not keep it out of the context, and they are not a data-loss control. Use `block-env-files`, `protect-env-vars` and `block-secrets-write`, which gate on `PreToolUse`, to stop the read happening at all. - - -## Dangerous commands and infrastructure - -| Policy | Trigger | Outcome | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Block `sudo` unless an allow pattern matches. | -| `block-curl-pipe-sh` | `PreToolUse` | Block downloaded scripts piped directly to a shell. | -| `block-rm-rf` | `PreToolUse` | Block catastrophic recursive deletion patterns. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Always on, cannot be disabled.** Block every Failproof AI CLI invocation, self-pause, and package-manager uninstall. | -| `block-kubectl` | `PreToolUse` | Gate Kubernetes commands. | -| `block-terraform` | `PreToolUse` | Gate Terraform and OpenTofu commands. | -| `block-aws-cli` | `PreToolUse` | Gate AWS CLI commands. | -| `block-gcloud` | `PreToolUse` | Gate Google Cloud CLI commands. | -| `block-az-cli` | `PreToolUse` | Gate Azure CLI commands. | -| `block-helm` | `PreToolUse` | Gate Helm commands. | -| `block-gh-pipeline` | `PreToolUse` | Gate mutating GitHub CLI workflow, run, merge, release, cache, and secret operations. | - -## Git and database safety - -| Policy | Trigger | Outcome | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Block direct pushes to configured protected branches. | -| `block-force-push` | `PreToolUse` | Block force-pushes; `--force-with-lease` remains allowed by the current implementation. | -| `block-work-on-main` | `PreToolUse` | Block commits and merges on protected branches. | -| `warn-git-amend` | `PreToolUse` | Warn before rewriting a commit with `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Warn before permanently dropping or clearing stashes. | -| `warn-all-files-staged` | `PreToolUse` | Warn on broad `git add -A`, `git add .`, or `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Warn on `DROP`, `TRUNCATE`, and `DELETE` without `WHERE` through recognized database clients. | -| `warn-schema-alteration` | `PreToolUse` | Warn on recognized `ALTER TABLE` column and rename operations. | - -## Packages, system behavior, and agent loops - -| Policy | Trigger | Outcome | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Warn before publishing to package registries. | -| `warn-global-package-install` | `PreToolUse` | Warn before global package installation. | -| `prefer-package-manager` | `PreToolUse` | Instruct the agent to use an allowed package manager. | -| `warn-large-file-write` | `PreToolUse` on write tools | Warn above the configured file-size threshold. | -| `warn-background-process` | `PreToolUse` | Warn on detached or long-lived background-process patterns. | -| `warn-repeated-tool-calls` | `PreToolUse` | Warn after three or more identical tool calls. | - -## End-of-task workflow - -These policies require a harness that emits a compatible `Stop` event. - -| Policy | Outcome | -| --- | --- | -| `require-commit-before-stop` | Refuse completion while tracked work remains uncommitted. | -| `require-push-before-stop` | Refuse completion while commits remain local-only. | -| `require-pr-before-stop` | Require a pull request for the current branch. | -| `require-no-conflicts-before-stop` | Require a clean merge against the configured base branch. | -| `require-ci-green-before-stop` | Require current-HEAD CI checks to complete successfully. | - -## Parameter reference - -Configure parameters under the selected scope's `policyParams` object. Types are validated by each policy. - -| Policy | Parameter | Type and default | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; entries contain `regex` and `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Infrastructure blockers | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - An allow pattern broadens what an agent may do. Test the exact tokenization and command variants on the target harness before deploying it across a fleet. - diff --git a/docs/policies/builtin.mdx b/docs/policies/builtin.mdx deleted file mode 100644 index 7b92d0c12..000000000 --- a/docs/policies/builtin.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "Builtin policies" -description: "Enable maintained guardrails for common agent failure modes." -icon: "library" ---- - -Builtin policies cover secret handling, environment files, destructive shell commands, protected branches, cloud and infrastructure tools, package publishing, repeated calls, and end-of-task workflow checks. - -There are **39** of them, and **38** are yours to choose from. The odd one out is `block-failproofai-commands`, which is always on and cannot be switched off or paused — an agent that can pause enforcement can switch off every other policy, so that guard ships compiled into the package rather than arriving in a pack. - -They reach a machine as a **pack**. Setting up wires the hooks and selects nothing, so take one before any of the 38 enforce: - -```bash -failproofai policies add FailproofAI/policies -``` - -That switches on the 10 the pack's manifest marks as safe to enable unattended and lists the rest for you to pick from. See [policy packs](/policies/packs) for taking only part of one. - -## Enable and verify a builtin policy - - - - 1. Install the policy on a connected machine with the local CLI. - 2. Run a safe test action in the instrumented agent. - 3. Go to **Observe → policy** and filter by the policy name, machine environment, or decision. - 4. Open the linked session to confirm the matched tool input and returned reason. - - - - ```bash - failproofai policies - failproofai policies add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Remove it with `failproofai policies remove block-rm-rf --cli claude --scope project`. - - - -List every policy on this machine and whether it is on: - -```bash -failproofai policies -``` - -Enable one policy for a project: - -```bash -failproofai policies add block-rm-rf --scope project -``` - -A name with no slash is a policy; anything with one is a pack source, so there is nothing to disambiguate. - -Enable several policies for selected harnesses: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Some policies accept parameters. Review the description, match scope, and default behavior before rollout — a policy that protects one workflow may block valid operations in another. `--beta` includes policies marked beta; none currently are. - - - Review all 39 policies, their triggers, recommended baseline, and parameters. - - - - Prefer project scope for repository-specific expectations and user scope for machine-wide safety requirements. - diff --git a/docs/policies/custom.mdx b/docs/policies/custom.mdx deleted file mode 100644 index 61ea52783..000000000 --- a/docs/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Custom policies" -description: "Write a policy for a failure mode unique to your agent workflow." -icon: "shield-plus" ---- - -Create a file ending in `policies.js`, `policies.mjs`, or `policies.ts` under `.failproofai/policies/`. Convention files load automatically at project and user scope. - -## Test the policy before Cloud publication - - - - 1. Install the custom policy on one test machine and trigger both a matching action and a legitimate non-match. - 2. Go to **Observe → policy** and compare the two decisions. - 3. Open each linked session and verify the event payload contains enough evidence for the rule. - 4. When the behavior is correct, move the reviewed source into **Admin → policy editor** and publish a version. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Convention files under `.failproofai/policies/` load without `--custom`. Keep an explicit install command in CI when validation should fail on a broken module. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -This matches `production/config.yml`, `/srv/production/config.yml`, `/srv/production`, and `C:\\production\\config.yml` for both `Write` and `Edit`. It does not match names such as `production-backup` because `production` must be a complete path segment. - -Validate and install an explicit file: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -The policy context includes the event type, normalized payload, tool name and input, session metadata, parameters, and source CLI when available. - -## Test failure paths - -Run validation after changing the entry file or any local module it imports: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -The strict CLI path fails for missing files, syntax errors, unresolved imports, top-level exceptions, and module-load timeouts. At enforcement time, a broken custom file is logged and skipped so builtin policies can continue. Treat any load warning as a loss of expected enforcement and alert on it in production logs. - -Use globally unique names across explicit, convention, and Cloud-managed policies. Keep policy functions deterministic, bound external calls with short timeouts, and return an intentional `allow`, `instruct`, or `deny` on every path. - - - A custom policy is enforcement code. Test missing fields, alternate tool names, and malformed input—not only the expected match. - diff --git a/docs/policies/deploy.mdx b/docs/policies/deploy.mdx index c918125dc..a6c7cfcfd 100644 --- a/docs/policies/deploy.mdx +++ b/docs/policies/deploy.mdx @@ -1,50 +1,93 @@ --- -title: "Deploy policies" -description: "Roll out a reviewed policy version to the intended machines." +title: "Deploy a policy" +description: "Put a tested policy version on machines in observe mode, enforce it, and confirm every machine picked it up." icon: "cloud-upload" --- -A deployment connects one or more policy versions to a target set of enrolled machines. +A deployment puts published policy versions on a machine, each with one of two effects: -## Apply a deployment +- **Observe** records what the policy would have done, and blocks nothing. +- **Enforce** acts on the decision: a `deny` blocks the call and an `instruct` steers the agent. + +## Add a machine + +A machine appears under **Admin → enforcement** once it is connected to Cloud. If the one you want is not there yet: + + + + 1. Go to **Administration → Keys** and create a key with `policies:pull`, so the machine can receive deployments, and `events:add`, so its decisions reach Cloud. + 2. Connect the machine with that key — [Connect a machine to Cloud](/start/setup#connect-a-machine-to-cloud) walks through it. + 3. Confirm it shows up under **Admin → enforcement**. + + + On the machine: + + ```bash + npm install -g failproofai + failproofai config + failproofai config --status + ``` + + In a terminal, `failproofai config` asks whether to connect to Cloud and takes the key at a masked prompt. Then confirm the machine is enrolled, from anywhere, with `fp fleet list`. + + + +## Deploy in observe mode 1. Go to **Admin → enforcement**, find the machine, and expand its row. - 2. Select **edit**, add the reviewed policy version, and choose **observe** or its enforcing effect. + 2. Select **edit**, add the tested policy version, and choose **observe**. 3. Apply the change, then wait for the machine's next check-in and confirm its deployment and coverage state. 4. Go to **Observe → policy** to inspect live decisions. ![The machine deployment editor with policy versions, enforce and observe effects, and the apply deployment action.](/images/dashboard/enforcement-editor.png) - Deploy from the CLI with `fp fleet`. Review the resulting set before applying it — `deploy` prints the full plan and asks **only on an interactive terminal without `--json`**. Under `--json`, with `--yes`, or with stdin redirected (a CI step, a script, an agent shelling out) it applies immediately with no plan and no prompt — so run `fp fleet show ` first if you want review: - ```bash fp fleet list fp fleet show - fp fleet deploy --add no-force-push + fp fleet deploy --add no-force-push:observe ``` - `fp fleet diff ` shows intent vs delivery (a machine reads as `behind` until it next polls), `fp fleet history ` lists the generations, and `fp fleet rollback ` reinstates one — it refuses if that generation names a policy since disabled or deleted. + The `:observe` suffix is what makes it observe: a bare `--add no-force-push` keeps the effect the machine already has for that policy, and otherwise enforces. Switch it to enforce later with `--add no-force-push:enforce`. + + `deploy` **replaces the machine's whole policy set** with the result. It prints the plan, then asks before applying — but only on an interactive terminal. With `--yes`, under `fp --json`, or with stdin redirected (a CI step, a script, an agent shelling out) it applies without asking; the plan is still printed, or returned as `plan` under `--json`. - Check the machine itself with `failproofai config --status`, and use `fp sessions --env production --since 24h` and `fp events --event-type hook_completed` after deployment to verify activity reaches Cloud. + On the machine, `failproofai policies` lists the Cloud-managed policies it is running and `failproofai config --status` shows its connection. Use `fp sessions --env production --since 24h` and `fp events --event-type hook_completed` to confirm its activity reaches Cloud. - - Deploy a reviewed version, not a mutable draft, starting with a non-production machine or small cohort whose sessions you can inspect. + + Pick the published version and the machines it should run on. - - Review matches, reasons, affected tools, and false positives without blocking work. + + Review matches, reasons, affected tools, and false positives while nothing is blocked. - - Promote after observed matches separate unsafe actions from valid ones, then confirm every intended machine has pulled the deployment and is reporting decisions. + + Switch the effect to enforce once the observed matches separate unsafe actions from valid ones, then confirm every intended machine pulled the change and is reporting decisions. -Machines need the `policies:pull` capability. Event reporting is separately controlled by `events:add`; verify both when you expect Cloud analysis and enforcement. +## Check coverage + +Coverage answers whether a policy is running where the risk is. + +1. Go to **Admin → enforcement** and review the enforcing and observing totals. +2. Search for a machine by ID or label, or filter for machines missing a policy. +3. Expand a row to compare assigned policies, reported deployment, last check-in, and history. +4. Refresh after the machine's polling interval when an applied deployment is still pending. + +![The Enforcement fleet showing policy coverage, machine deployment state, and observe and enforce assignments.](/images/dashboard/enforcement-fleet.png) + +Look for machines that never pulled the latest deployment, enrolled machines that stopped reporting, a policy assigned to the wrong environment, and version drift after an interrupted update. + +Label machines by workload and environment — hostnames alone rarely survive autoscaling or replacement: + +```bash +failproofai config --machine-label checkout-runner-03 +``` Enforcement management is an administrative Cloud workflow. Do not treat root-only enforcement routes as ordinary customer `/v1` API endpoints. diff --git a/docs/policies/editor.mdx b/docs/policies/editor.mdx index e0f0019d9..0363bee7c 100644 --- a/docs/policies/editor.mdx +++ b/docs/policies/editor.mdx @@ -1,49 +1,96 @@ --- -title: "Policy editor" -description: "Create and revise versioned policies from a confirmed failure mode." +title: "Write a policy" +description: "Let Failproof AI draft a policy from an audit finding, or write the source yourself, then review, test, and publish it." icon: "file-pen-line" --- -Use the policy editor to turn a finding or issue into a deployable rule. Keep authoring separate from deployment so a draft cannot silently change live behavior. +There are two ways to write a policy: let Failproof AI draft it from an audit finding, or write the source yourself. Nothing is published or deployed until you choose to. -When an issue has a repeatable action pattern, open it under **Analyze → issues** and select **generate policy**. Failproof AI first explains whether a policy can express the problem, then carries the reviewed intent and finding context into the editor. The generated source remains a draft until you publish it. +## Write a policy from an audit -## Publish a policy version +An audit finds a failure; a policy stops it happening again. Failproof AI drafts the policy from the finding's own evidence. + +### 1. Run an audit + +[Run an audit](/audits/run) over the sessions where the failure happens. Each finding carries its evidence sessions, a root cause, and a suggested prevention path. Work from a finding with a **repeatable action pattern** — a policy can only stop what it can recognize in a hook event. + +### 2. Generate the draft - 1. Go to **Admin → policy editor** and, in **compose**, describe the failure mode or paste the JavaScript policy source. - 2. Validate the source and fix every reported error. - 3. Enter the policy identity and publish it, then use **library** to compare or disable versions. - 4. Select **enforcement** when the version is ready for a machine rollout. + 1. Open the finding's issue under **Analyze → issues** and check its cited sessions, root cause, and recommendation. + 2. Select **generate policy**. Failproof AI first says whether a policy can express the problem at all. A **no policy** result means the fix is an alert, a workflow change, or a person — not a policy. + 3. Select **write this policy**. The issue title, finding, root cause, recommendation, and proposed enforcement intent become a draft in **Admin → policy editor**. Use **open the editor anyway** when you disagree with the candidacy check. ![The Policy editor compose view with policy identity, AI-assisted drafting, source validation, and publishing controls.](/images/dashboard/policy-editor.png) - Publish from the CLI with `fp policies publish`. It mints a **new version** and never edits one in place, and it parse-checks the source with node before sending — nothing downstream does, so a syntax error would otherwise surface on the machine at enforcement time: + Read the evidence, then draft with the assistant. `compose` prints source for you to review and publishes nothing: ```bash - fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny - fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push" + fp issues show + fp audits finding + fp policies compose "Block git push --force on release branches" ``` - Publishing deploys nothing — a new version sits unused until `fp fleet deploy` puts it on a machine. `fp policies compose ""` drafts source with the Cloud assistant and prints it for review rather than publishing it. - - To install a policy into a local agent CLI instead (not Cloud), use `failproofai policies --install --custom ./checkout.policies.ts --cli claude --scope project`. + `compose` needs a signed-in session (`fp login`) whose role has `policies:write`; it refuses API keys. -## Authoring checklist +### 3. Review the draft + +A draft is a starting point, not a verdict. Before publishing, check that it: + +1. Names the failure mode in operational language. +2. Matches only the hook events and tools that carry enough evidence to decide. +3. Uses the narrowest condition that catches the unsafe action. +4. Returns a reason that tells the agent what to do instead. +5. Uses `instruct` where the agent can safely correct course, and `deny` only where allowing the action is unacceptable or irreversible. + +Validate the source in the editor and fix every reported error. + +### 4. Test it, then publish + +Run **backtest** under the source before you publish: it replays the draft against calls your fleet already made and counts the working calls it would have interrupted. [Test a policy](/policies/test) covers that and the other checks. + +When it behaves, enter the policy identity and select **publish version**. Publishing mints an immutable version and deploys nothing: it sits unused until you [deploy it](/policies/deploy). From a terminal: + +```bash +fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push" +``` + +`publish` parse-checks the source before sending it, so a syntax error surfaces here instead of on a machine at enforcement time. + +## Write it yourself + +A policy is JavaScript or TypeScript against the `failproofai` API: + +```ts +import { customPolicies, allow, deny } from "failproofai"; + +customPolicies.add({ + name: "protect-production-paths", + description: "Block writes to production configuration", + match: { events: ["PreToolUse"] }, + fn: async (ctx) => { + if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); + const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); + if (path.split("/").includes("production")) { + return deny("Writes to production configuration require approval."); + } + return allow(); + }, +}); +``` + +This matches `production/config.yml`, `/srv/production/config.yml`, `/srv/production`, and `C:\\production\\config.yml` for both `Write` and `Edit`, but not `production-backup`: `production` has to be a whole path segment. The context also carries the event type, normalized payload, session metadata, parameters, and source CLI when available — see the [policy SDK](/reference/policy-sdk). + +To publish it as a version, paste the source into **compose** in **Admin → policy editor** and follow steps 3 and 4 above, or publish the file from a terminal with `fp policies publish`. -1. Name the failure mode in operational language. -2. Select the hook events and tools that contain enough evidence to decide. -3. Write the narrowest condition that matches unsafe behavior. -4. Return a reason that tells the agent or operator what to do next. -5. Add examples that should match and examples that must remain allowed. -6. Save a new version and request review. +To run it on a machine without Cloud, save it under `.failproofai/policies/` with a name ending in `policies.js`, `policies.mjs` or `policies.ts` — those load automatically at project and user scope — or install it by path: -Use `instruct` when the agent can safely correct course. Use `deny` when allowing the action would create unacceptable or irreversible risk. +```bash +failproofai policies --install --custom ./security.policies.ts --scope project +``` - - Policy versions are immutable deployment inputs. Editing a draft creates a new version; it should not rewrite the version already assigned to machines. - +Give every policy a name that is unique across convention, custom, pack, and Cloud-managed policies. diff --git a/docs/policies/failure-behavior.mdx b/docs/policies/failure-behavior.mdx index 176be13a2..43f9058ca 100644 --- a/docs/policies/failure-behavior.mdx +++ b/docs/policies/failure-behavior.mdx @@ -64,6 +64,6 @@ It does not fire for: failproofai policies ``` -The listing names any installed pack that will not load and says why, alongside everything else enforcing here. Then either reinstall it (`failproofai policies add `) or remove it (`failproofai policies remove `) — removing it withdraws the expectation, and the deny stops with it. +The listing flags an installed pack whose install record or digest no longer checks out, and says why. It does not import the pack, so one that fails only once it loads — registering less than its manifest declares — lists as normal; the deny below is what names that one. Either way, reinstall it (`failproofai policies add `) or remove it (`failproofai policies remove `) — removing it withdraws the expectation, and the deny stops with it. The deny itself is attributed to `pack/failproofai-pack-unavailable`, which outranks the policies that did load, so a blocked tool call names the missing pack rather than whichever surviving guard happened to fire first. diff --git a/docs/policies/fleet.mdx b/docs/policies/fleet.mdx deleted file mode 100644 index e4f337092..000000000 --- a/docs/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Deploy policies to machines" -description: "Know which machines are enrolled, current, and enforcing the intended policy versions." -icon: "network" ---- - -Fleet coverage answers whether a policy exists where the risk exists. Track machines by stable ID and a human-readable label, then compare their assigned and reported deployment state. - -## Check coverage - - - - 1. Go to **Admin → enforcement** and review the enforcing and observing totals. - 2. Search for a machine by ID or label, or filter for machines missing a policy. - 3. Expand a row to compare assigned policies, reported deployment, last check-in, and history. - 4. Refresh after the machine's polling interval when an applied deployment remains pending. - - ![The Enforcement fleet showing policy coverage, machine deployment state, and observe and enforce assignments.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Use `fp events --agent-id --since 24h` to confirm the machine's agent activity reaches Cloud. - - - -Use coverage views to find: - -- Machines that never pulled the latest deployment -- Enrolled machines that stopped reporting activity -- A policy assigned to the wrong environment or cohort -- Version drift after an interrupted update - -Rename a machine without reconnecting it: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Check local state: - -```bash -failproofai config --status -``` - - - Use labels that identify workload and environment. Hostnames alone are often insufficient after autoscaling or machine replacement. - diff --git a/docs/policies/local-configuration.mdx b/docs/policies/local-configuration.mdx index 3af2f8b85..21ce91b1c 100644 --- a/docs/policies/local-configuration.mdx +++ b/docs/policies/local-configuration.mdx @@ -4,30 +4,25 @@ description: "Control policy scope, parameters, custom files, and machine-level icon: "file-cog" --- -Failproof AI separates policy selection from machine and daemon settings. This keeps repository policy choices reviewable while credentials and daemon state stay outside the repository. +Failproof AI keeps what a repository can commit — hook wiring, policy parameters, custom policies — apart from machine state such as credentials, installed packs, and the daemon. -## Choose a policy scope +## Choose a scope - - - Run `failproofai` without arguments to open the local policy dashboard. Choose the user, project, or local scope before enabling a policy so the change is written to the intended configuration file. +A scope decides where the hooks are wired, and which configuration file you write parameters and custom policy paths into: - - **User** applies across projects on this machine. - - **Project** belongs to the repository and can be committed. - - **Local** overrides one project for one user and should remain gitignored. +- **User** applies across projects on this machine. +- **Project** belongs to the repository and can be committed. +- **Local** overrides one project for one user and should remain gitignored. - - - ```bash - failproofai policy add block-rm-rf --scope user - failproofai policy add block-force-push --scope project - failproofai policy add warn-large-file-write --scope local - failproofai policies - ``` +```bash +failproofai policies --install --cli claude --scope project # wire hooks for this repository +failproofai policies --install --cli claude --scope user # or for every project on this machine +failproofai policies +``` - Not every harness supports local scope. The CLI rejects a scope that the selected harness cannot represent. - - +Not every harness supports local scope; the CLI rejects a scope the selected harness cannot represent. + +Which pack policies are on is **not** scoped. The switch is recorded with the installed pack, so `failproofai policies add ` turns a policy on for the whole machine, whatever `--scope` says. | Scope | Policy configuration file | | --- | --- | @@ -35,7 +30,7 @@ Failproof AI separates policy selection from machine and daemon settings. This k | Local | `/.failproofai/policies-config.local.json` | | User | `~/.failproofai/policies-config.json` | -Enabled policies are merged as a union. Policy parameters use the first scope that defines parameters for that policy, in project → local → user order. Explicit custom policy paths use the first scope that defines them. +Policy parameters use the first scope that defines parameters for that policy, in project → local → user order. Explicit custom policy paths use the first scope that defines them. ## Configure policy parameters @@ -45,11 +40,10 @@ Enabled policies are merged as a union. Policy parameters use the first scope th - Edit the selected scope's `policies-config.json`, then run `failproofai policies` to surface unknown policy names or parameter keys. + Edit the selected scope's `policies-config.json`, then run `failproofai policies`: it warns about a `policyParams` entry naming a policy no installed pack carries. It does not check the keys inside an entry, so check their spelling against the table below. ```json { - "enabledPolicies": ["block-rm-rf", "block-force-push"], "policyParams": { "block-rm-rf": { "allowPaths": ["/tmp/build-output"] @@ -64,6 +58,30 @@ Enabled policies are merged as a union. Policy parameters use the first scope th +### Parameters the Failproof AI policies accept + +Each policy validates its own parameter types. + +| Policy | Parameter | Type and default | +| --- | --- | --- | +| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; entries contain `regex` and `label` | +| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | +| `block-sudo` | `allowPatterns` | `string[]`, `[]` | +| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | +| Infrastructure blockers | `allowPatterns` | `string[]`, `[]` | +| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | +| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | +| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | +| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | +| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | +| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | +| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | +| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | + + + An allow pattern broadens what an agent may do. Test the exact tokenization and command variants on the target harness before deploying it across a fleet. + + ## Understand the machine files `~/.failproofai` contains separate files for separate trust boundaries: @@ -72,8 +90,8 @@ Enabled policies are merged as a union. Policy parameters use the first scope th | --- | --- | | `config.json` | Non-secret daemon, audit, and telemetry settings | | `credentials.json` | Cloud credentials; stored with owner-only permissions | -| `policies-config.json` | User-scope builtin selection, parameters, and explicit custom paths | -| `policies/` | User convention policies and Cloud-managed policy artifacts | +| `policies-config.json` | User-scope parameters and explicit custom policy paths | +| `policies/` | User convention policies, installed packs and which of their policies are on, and Cloud-managed policy artifacts | | `hook-activity/` | Local policy decision log | | `state/` | Daemon spool, health, pause, and runtime state | diff --git a/docs/policies/overview.mdx b/docs/policies/overview.mdx index f9a5a0d70..83b83b3a7 100644 --- a/docs/policies/overview.mdx +++ b/docs/policies/overview.mdx @@ -10,54 +10,45 @@ A policy evaluates an agent hook event and returns one of three decisions: - `instruct` gives the agent corrective guidance. - `deny` blocks the action with a reason. -## Use the three policy surfaces +## Where policies live - - - 1. Go to **Observe → policy** to filter and inspect policy decisions from sessions. - 2. Go to **Admin → policy editor** to compose, validate, publish, disable, or inspect immutable versions. - 3. Go to **Admin → enforcement** to assign versions and effects to machines. +| In the dashboard | What you do there | +| --- | --- | +| **Observe → policy** | Review decisions from real sessions: which policy matched, on which machine, and why | +| **Admin → policy editor** | Write a policy, backtest it against past traffic, publish an immutable version, and compare versions in **library** | +| **Admin → enforcement** | Put versions on machines, in observe or enforce mode | - Use the Policy page to understand what is already matching before authoring or changing enforcement. +The policy editor is where a failure becomes a rule. Describe the failure mode or paste policy source in **compose**, backtest the draft against traffic you already have, and publish a version: - ![The Policy page showing decision totals and local and Cloud-managed policy mappings.](/images/dashboard/policy-observe.png) +![The Policy editor compose view with policy identity, AI-assisted drafting, source validation, and publishing controls.](/images/dashboard/policy-editor.png) - The editor is where you turn a failure condition into source, validate it, and publish an immutable version. +On a machine, `failproofai policies` lists everything enforcing there. `fp policies` and `fp fleet` cover the editor and enforcement from a terminal — see the [Cloud CLI reference](/reference/cloud-cli). - ![The Policy editor used to compose and publish an immutable policy version.](/images/dashboard/policy-editor.png) +## Get a policy - Enforcement then assigns that published version and its observe or enforce effect to machines. - - ![The Enforcement fleet showing machine coverage and assigned policy versions.](/images/dashboard/enforcement-fleet.png) - - Verify decisions back on the Policy page after deployment so the authoring and fleet views are tied to real agent activity. - - - Use `failproofai` for local policy installation and validation: - - ```bash - failproofai policies - failproofai policy add block-rm-rf --scope project - failproofai config --status - ``` - - Use `fp` to find the Cloud sessions and events containing policy decisions. Cloud authoring and fleet deployment remain dashboard workflows. - - - -Policies have three distinct surfaces in Failproof AI: - -1. **Analyze decisions** in sessions, dashboards, and audits. -2. **Author versions** with builtin rules, code, or the policy editor. -3. **Deploy and enforce** versions across selected machines. - -Start from a confirmed failure mode. Define the smallest event and tool match that identifies it, test legitimate and unsafe examples, then observe before enforcing. +There are two ways to get one. - - Enable a reviewed rule for common secret, shell, Git, cloud, and workflow risks. + + Let Failproof AI draft one from an audit finding, or write the source yourself, then review and publish it in the editor. - - Express a workflow-specific decision in JavaScript or TypeScript. + + Plug in a Failproof AI policy pack for your use case, or a community pack from the policy hub, in one command. + +## Then ship it + + + + Backtest the draft against traffic you already have, and run it against an action it must stop and one it must allow — all before you publish. See [Test a policy](/policies/test). + + + Put the version on machines in **observe** mode, read its decisions, then enforce. See [Deploy a policy](/policies/deploy). + + + Every publish is a new, immutable version, so a rollout that blocks valid work is undone by redeploying the last good one. See [Versions and rollback](/policies/rollback). + + + +To share your policies with other teams, [publish them as a pack](/policies/publish-a-pack). For what happens when a policy cannot be evaluated at all, see [Failure behavior](/policies/failure-behavior). diff --git a/docs/policies/packs.mdx b/docs/policies/packs.mdx index 68581b039..196a788df 100644 --- a/docs/policies/packs.mdx +++ b/docs/policies/packs.mdx @@ -1,42 +1,56 @@ --- -title: "Policy packs" -description: "Install a set of policies published as a GitHub release, and manage what it enforces." +title: "Use a policy pack" +description: "Plug in a Failproof AI policy pack for your use case, or a community pack from the policy hub, and choose what it enforces." icon: "package" --- -A pack is a set of policies published as a GitHub release. One command installs it, the release's own checksums are verified before anything runs, and the digest is recorded so the pack cannot change under your machine afterwards. +A pack is a set of policies published as a GitHub release. One command installs it: the release's checksums are verified before anything runs, and its digest is recorded so the pack cannot change under your machine afterwards. -## Install the Failproof AI policies +Browse every pack, and every policy in each, on the [policy hub](https://befailproof.ai/policy-hub/). There are two kinds: + +- **Failproof AI policy packs** — ready-made packs for predefined use cases: plug one in and it works. The [coding agent policy pack](https://befailproof.ai/policy-hub/failproofai/policies/) is available now, and packs for more use cases are coming soon. +- **Community policy packs** — policies developers have written for their own use cases and published for anyone to take. + +## Failproof AI policy packs + +### Coding agent policy pack ```bash failproofai policies add FailproofAI/policies ``` -That fetches the Failproof AI set from its GitHub release and pins it, the same way any other pack is installed. It carries 38 policies and switches on the 10 its manifest marks as safe to enable unattended; the rest are listed for you to choose. Take part of it instead: +The pack carries 38 policies and switches on the 10 its manifest marks safe to enable unattended; the rest are listed for you to choose from. Some of the most used, and whether a plain `policies add` switches them on: + +| Policy | What it does | On by default | +| --- | --- | --- | +| `block-push-master` | Blocks direct pushes to protected branches | Yes | +| `block-env-files` | Blocks reading and writing `.env` files | Yes | +| `protect-env-vars` | Blocks commands that dump environment variables | Yes | +| `block-sudo` | Blocks `sudo` unless an allow pattern matches | Yes | +| `block-curl-pipe-sh` | Blocks downloaded scripts piped straight into a shell | Yes | +| `sanitize-*` (five policies) | Report API keys, bearer tokens, JWTs, private keys, and connection strings found in tool output | Yes | +| `block-rm-rf` | Blocks catastrophic recursive deletes | No | +| `block-force-push` | Blocks force-pushes | No | +| `block-secrets-write` | Blocks writes to credential and secret-key files | No | +| `warn-destructive-sql` | Warns on `DROP`, `TRUNCATE`, and `DELETE` without `WHERE` | No | + +Switch on any that are off by name — `failproofai policies add block-rm-rf` — or take the whole pack with `--all`. See every policy in it, grouped by category: ```bash -failproofai policies add FailproofAI/policies --policy block-rm-rf # one, or a comma-separated few -failproofai policies add FailproofAI/policies --category dangerous-commands # a whole category -failproofai policies add FailproofAI/policies --all # everything in it +failproofai policies show FailproofAI/policies ``` -`failproofai policies show FailproofAI/policies` names every category the pack offers. +## Community policy packs - - This is the one step of setup that needs the network. `failproofai config` wires the hooks and deliberately chooses **no** policies, so a machine that has only been set up is not yet enforcing one — it tells you so when it finishes. - - -## See what a pack contains, before installing it +Developers publish packs for the use cases they have met, and the [policy hub](https://befailproof.ai/policy-hub/) lists them. A community pack is published by its author, not audited by Failproof AI, so read what it carries before installing it: ```bash failproofai policies show acme/support-agent ``` -Lists every policy the pack carries, grouped by category, marking which ones its author switches on by default and which are opt-in. It reads **only the manifest** — the entry artifact is never downloaded and never imported, so looking at a stranger's pack cannot run a stranger's code. The manifest is still checked against the release's own `SHA256SUMS`, so what you are reading is what would install. - -`failproofai policies` with no arguments lists what is already installed here — packs included, alongside builtin, convention and custom policies. +That lists every policy it carries, grouped by category, and marks which ones its author switches on by default. It reads **only the manifest** — the entry artifact is never downloaded or imported, so looking at a stranger's pack cannot run a stranger's code. The manifest is still checked against the release's own `SHA256SUMS`, so what you read is what would install. -## Install somebody else's pack +Then install it: ```bash failproofai policies add acme/support-agent @@ -58,44 +72,32 @@ Naming no tag installs the newest release **and pins it**, then tells you which By default you get the pack's **own** defaults — the policies its author marked safe to switch on unattended — not everything it contains. ```bash -failproofai policies add acme/support-agent --category billing,git -failproofai policies add acme/support-agent --policy block-refunds -failproofai policies add acme/support-agent --all +failproofai policies add FailproofAI/policies --policy block-rm-rf # one, or a comma-separated few +failproofai policies add FailproofAI/policies --category dangerous-commands # a whole category +failproofai policies add FailproofAI/policies --all # everything in it ``` -`--category` and `--policy` combine as a union (`--only` is accepted as a synonym for `--policy`). Re-adding at a newer version keeps whatever you chose rather than switching the rest back on. +`--category` and `--policy` combine as a union (`--only` is accepted as a synonym for `--policy`). When the pack is already installed, the flags add to what you had, and re-adding it with no flag and no terminal — to upgrade, say — keeps your selection as it is. At a terminal with no flag, `add` opens the picker instead, pre-ticked with the author's defaults, and what you tick replaces your selection. ## Manage what is on ```bash failproofai policies # every source in one list, packs included -failproofai policies show acme/support-agent # what a pack out there carries +failproofai policies add block-rm-rf # switch one policy on failproofai policies --uninstall block-refunds # turn one pack policy off failproofai policies --install block-refunds # and back on failproofai policies remove acme/support-agent # uninstall the pack ``` -A bare name means the **builtin** when one exists by that name. Name a pack's copy explicitly when you need to: +Switching a pack policy on or off applies to the whole machine: the switch is recorded with the installed pack, not in a project's configuration, whatever `--scope` says. -```bash -failproofai policies --uninstall acme/support-agent:block-refunds -``` - - - If a pack ships a policy whose name is also an **enabled builtin**, the builtin runs and the pack's copy is skipped — the same guard would otherwise be evaluated twice. Turn the builtin off to use the pack's copy instead. - - -## Where the Failproof AI policies come from - -A GitHub release, fetched and pinned like any other pack. The npm package carries no copy of them, so naming a specific version works exactly as it does for anybody's pack: +A name with no slash is a policy; anything with one is a pack source. A bare name resolves to the installed pack that declares it. When two installed packs declare the same name, name the one you mean: ```bash -failproofai policies add FailproofAI/policies # newest release, pinned -failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # a specific one -failproofai policies show FailproofAI/policies --releases # everything it has published +failproofai policies --uninstall acme/support-agent:block-refunds ``` -One policy does ship compiled into the package: `block-failproofai-commands`, the always-on guard. A pack may not declare `alwaysOn`, precisely because a downloaded file that no local command can switch off is what that guard exists to prevent. +Scopes, parameters, and the files these commands write are covered in [local configuration](/policies/local-configuration). ## What integrity does and does not buy @@ -114,4 +116,4 @@ A pack this machine was told to enforce and cannot run **denies** the events its | `FAILPROOFAI_NO_DOWNLOAD=1` | Refuses to fetch; packs already installed keep enforcing | | `FAILPROOFAI_PACK_BASE_URL` | Points pack fetching at a mirror instead of `github.com` | -Publishing your own pack: see [Publish a pack](/policies/publish-a-pack). +To share your own policies this way, see [Publish a policy pack](/policies/publish-a-pack). diff --git a/docs/policies/publish-a-pack.mdx b/docs/policies/publish-a-pack.mdx index b636d95f8..0ca827f4b 100644 --- a/docs/policies/publish-a-pack.mdx +++ b/docs/policies/publish-a-pack.mdx @@ -1,5 +1,5 @@ --- -title: "Publish a pack" +title: "Publish a policy pack" description: "Ship your own policies as a GitHub release that anyone can install." icon: "upload" --- @@ -50,7 +50,7 @@ Before anyone else can see it, enforce the file on this machine: failproofai policies -i -c ./.mjs ``` -Any path, any filename. Ask your agent to do the thing you blocked and watch it get refused. Nothing is published and nobody else is affected. +Any path, any filename. Ask your agent to do the thing you blocked and watch it get refused. Nothing is published and nobody else is affected. [Test a policy](/policies/test) covers the rest: the legitimate case it must allow, and the inputs that break it. ## 3. Publish it @@ -58,12 +58,12 @@ Any path, any filename. Ask your agent to do the thing you blocked and watch it failproofai publish ``` -It works out where to publish, what to bundle and what version to call it, and only asks when nothing in the repository tells it. In order, stopping before it touches GitHub if anything is wrong: +It works out where to publish, what to bundle and what version to call it, and only asks when nothing in the repository tells it. In order, stopping before it creates a release if anything is wrong: 1. Finds the policy files here by **content** — those that import `failproofai` and call `customPolicies.add` — rather than by filename, so it finds `guards.mjs` and ignores an unrelated `policies.mjs`. It does not descend into subdirectories, so a test fixture is never swept up by accident. 2. Reads the repo from `git remote get-url origin`, in the **file's** directory rather than yours, and decides the version. 3. Finds your credential: `GITHUB_TOKEN`, `GH_TOKEN`, or `gh auth login`. It needs release-write and nothing else, and is never printed. -4. Creates the repository if it does not exist. +4. Creates the repository if it does not exist. This happens before the build, so a pack refused in the next step can leave a new repository behind with no release in it. 5. Builds the three assets, validating them with the **loader's own rules** — the same code that decides what may install on a stranger's machine — so a pack that could never install fails here, where you can still fix it. 6. Creates or reuses the release and uploads, replacing assets of the same name. @@ -87,23 +87,27 @@ failproofai publish \ --dry-run ``` -`--id` sets the pack id when it should differ from the repo, `--tag` and `--notes` name the release, `--out` chooses where the assets are written (default `dist-pack`), and `--dry-run` builds them without publishing and needs no credential. +`--id` sets the pack id when it should differ from the repo, `--tag` sets the release's tag, `--notes` replaces the generated release notes — which is where `policies show --releases` reads each release's counts and commit from — `--out` chooses where the assets are written (default `dist-pack`), and `--dry-run` builds them without publishing and needs no credential. Anyone can now install it with `failproofai policies add acme/support-agent`. See [policy packs](/policies/packs) for pinning a version and taking only part of one. +### List it on the policy hub + +Add the `failproofai-policies` topic to the repository on GitHub. There is no submission form and no approval queue: the [policy hub](https://befailproof.ai/policy-hub/)'s crawler picks the repository up on its next pass. The topic only puts it up for consideration — what lists it is a release whose manifest verifies against its own `SHA256SUMS` and parses under the same rules the CLI uses, which is exactly what `failproofai publish` produces. + ## How the version is decided The version is the **commit you are publishing from** — its short sha, twelve characters: `a1b2c3d4e5f6`. There is nothing to pick and nothing to increment, and the version names exactly where the bytes came from, so publishing the same source twice gives the same version. It is read from the tree in front of you, never from the repository's releases, so a fresh clone and an air-gapped machine compute the same answer without asking GitHub what happened before. -Because the version claims to name a commit, it **refuses rather than guessing** where that would be false: outside a git checkout there is no commit to name, and with uncommitted changes those bytes are not in the commit it would name. `--version` overrides both, and a tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. +Because the version names a commit, that commit has to exist. At a terminal, `publish` makes it for you: it initialises a repository when there is none, and commits changed policy files before it builds. It **refuses** instead — naming `--version` as the way out — when it runs without a terminal (a commit made on a CI runner would exist nowhere else), when files other than the policies are uncommitted, or in a checkout that has no commits yet. A tag on `HEAD` wins over the sha — someone who tagged `v1.2.0` has said what this release is. A sha carries no ordering of its own, so use `failproofai policies show / --releases` to see which release came first — newest at the top. ## Shipping a new version -Commit the change and run `failproofai publish` again — the new commit is the new version. Consumers run the same `failproofai policies add` and keep whatever subset they had chosen; a policy they turned off stays off across the upgrade. +Commit the change and run `failproofai publish` again — the new commit is the new version. Consumers run the same `failproofai policies add`. Without a terminal, or with a selection flag, they keep the subset they had chosen and a policy they turned off stays off; at a terminal with no flag, the picker opens pre-ticked with your defaults and their answer replaces their selection. Changing a policy's **name** is a breaking change: a machine that had turned it off is turning off a name that no longer exists, and the new name arrives at whatever `defaultEnabled` says. diff --git a/docs/policies/rollback.mdx b/docs/policies/rollback.mdx index 4dda49283..874d35eb5 100644 --- a/docs/policies/rollback.mdx +++ b/docs/policies/rollback.mdx @@ -1,10 +1,24 @@ --- -title: "Rollback" -description: "Restore a known policy deployment when a rollout disrupts valid agent work." +title: "Versions and rollback" +description: "Every publish is an immutable version, so a rollout that disrupts valid agent work is undone by redeploying the last good one." icon: "rotate-ccw" --- -Rollback changes the deployed version or removes a policy assignment; it does not erase the decision history that explains the incident. +A published policy version never changes. Editing a policy and publishing again mints a new version; it never rewrites the one already on machines. That is what makes rollback safe: the last good version is still there, byte for byte, and rolling back does not erase the decision history that explains what went wrong. + +## Find a version + + + + Go to **Admin → policy editor** and open **library** to compare a policy's versions or disable one. + + + ```bash + fp policies list # every policy version + fp policies show # one version, with its source + ``` + + ## Roll back a machine @@ -12,21 +26,41 @@ Rollback changes the deployed version or removes a policy assignment; it does no 1. Go to **Admin → enforcement**, expand the affected machine, and identify its last known-good policy set. 2. Select **edit**, restore those versions and effects, and apply the new deployment. - 3. Wait for machine check-in, then verify the reported deployment. + 3. Wait for the machine's check-in, then verify the reported deployment. 4. Open **Observe → policy** and the affected sessions to confirm valid work is no longer blocked. - - Cloud deployment rollback is a dashboard workflow. Use local status to confirm that the corrected deployment has reached the machine: + Every deployment to a machine is a numbered generation. List them, then reinstate one: ```bash - failproofai config --status + fp fleet history + fp fleet rollback ``` - `failproofai config --pause` pauses builtin, custom, and convention policies for one local session. It does not pause Cloud-managed policies, so it is not a workaround for a bad Cloud deployment. + `rollback` mints a new generation carrying the old set rather than rewinding the counter, so history stays append-only, and it refuses a generation that names a policy since disabled or deleted. It needs a signed-in session with `policies:write`. `fp fleet diff ` shows what was intended against what the machine applied — it reads as `behind` until the machine next polls — and on the machine itself, `failproofai policies` lists the deployment it is running. +## Take one policy off every machine + +```bash +fp policies disable # remove it from every deployment carrying it +fp policies enable # add it back +``` + +Each mints a new generation on every deployment it touches, so both can themselves be rolled back. + +## Roll back a pack + +A pack is pinned to the release you installed, so rolling it back means installing an earlier one: + +```bash +failproofai policies show FailproofAI/policies --releases # every version it has published, and which one is here +failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # pin that one +``` + +Without a terminal, or with `--policy`, `--category` or `--all`, re-adding keeps the subset you had chosen. At a terminal with none of those, it opens the picker pre-ticked with the author's defaults, and what you tick replaces your selection — so re-tick what you had. + ## When to roll back - A policy blocks an expected production action. @@ -34,8 +68,8 @@ Rollback changes the deployed version or removes a policy assignment; it does no - A policy depends on fields that an integration does not provide. - A new version changes behavior outside the intended failure mode. -After rollback, open the affected sessions and identify the condition that caused the false positive. Create a new version, test both the unsafe and legitimate cases, then repeat the observe phase. +After rolling back, open the affected sessions and find the condition behind the false positive. Publish a new version, [test](/policies/test) both the unsafe and the legitimate case, and observe it again before enforcing. - Pausing enforcement can be appropriate during an incident, but it widens exposure for every active policy in that scope. Prefer rolling back the specific policy version when possible. + `failproofai config --pause` suspends local policies for one session and never Cloud-managed ones, so it is no way out of a bad Cloud deployment. A pause also widens exposure for every policy in its scope; prefer rolling back the one version that misbehaves. diff --git a/docs/policies/test.mdx b/docs/policies/test.mdx new file mode 100644 index 000000000..e41746d76 --- /dev/null +++ b/docs/policies/test.mdx @@ -0,0 +1,60 @@ +--- +title: "Test a policy" +description: "Backtest a draft against traffic you already have, and prove it stops what it should and allows what it must, before any machine enforces it." +icon: "flask-conical" +--- + +Test every policy two ways: against the traffic your agents already produced, and against a legitimate action it must let through. A policy that has only seen the unsafe case has not been tested. + +## Backtest the draft + + + + The policy editor replays a draft against calls your fleet already made, before you publish it. + + 1. Open the draft in **Admin → policy editor**. The editor confirms it parses as JavaScript. + 2. In **backtest**, pick the agents and the time window to replay — **every agent** and **30d** by default — and leave the last filter on **everything** unless you want to narrow it. + 3. Select **run backtest**. + + ![The backtest panel under a draft that parses as JavaScript, with its three filters and the run backtest action, above publish version.](/images/dashboard/policy-backtest.png) + + The result is what the draft would have done to those calls — including how many **working** calls it would have interrupted. Those are false positives found before any agent meets them: tighten the draft and run it again until that number is one you can accept. + + + Backtesting is a dashboard feature. From a terminal, run the policy against events you describe instead, below. + + + +## Run it against an event you describe + +`fp policies test` runs a policy file on your machine against a synthetic event and checks the decision. Nothing is published and nothing reaches Cloud: + +```bash +fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny +fp policies test ./checkout.policy.mjs --command "git push" --expect allow +``` + +Shape the event with `--event`, `--tool`, `--command` and `--file`. The policy's own `match` filter still applies, so a policy that does not cover the event you described reports `skipped` rather than a decision — usually a sign its `match` is narrower than you meant. + +## Run it on one machine + +Next, enforce it for real on your own machine, against your own agent: + +```bash +failproofai policies --install --custom ./checkout.policy.mjs --scope project +failproofai policies +``` + +The first command validates and installs the file; the second confirms it loaded, alongside everything else enforcing here. Ask the agent to do what the policy stops and watch it get refused, then do the legitimate version and watch it go through. Nobody else is affected. + +On a machine connected to Cloud, check both decisions under **Observe → policy**: filter by the policy name, then open each linked session to confirm the tool input it matched and the reason it returned. + +## Test what breaks + +The install refuses a missing file, a syntax error, an unresolved import, a top-level exception, or a module that times out while loading — so re-run it after every change to the file or anything it imports. At enforcement time the same broken file is logged and **skipped** so every other policy keeps running: treat a load warning in production logs as lost enforcement. Convention files load without the install command, so keep an explicit `failproofai policies --install --custom ` step in CI — it is what fails the build on a broken policy. + +Then feed it what agents actually send, not only the input you expect: missing fields, alternate tool names such as `Write` and `Edit`, Windows paths, malformed input. Return an intentional `allow`, `instruct` or `deny` on every path, keep the function deterministic, and bound any external call with a short timeout. + +## Then publish it and observe it + +A backtest shows what the policy would have done to the traffic you had; it cannot show what traffic you have not seen yet will do. Select **publish version** in the editor (or run `fp policies publish`), then [deploy it](/policies/deploy) in **observe** mode first — its verdicts are recorded and nothing is blocked — and enforce once its matches separate unsafe actions from valid ones. diff --git a/docs/pt-br/policies/builtin-catalog.mdx b/docs/pt-br/policies/builtin-catalog.mdx deleted file mode 100644 index 80270ba76..000000000 --- a/docs/pt-br/policies/builtin-catalog.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: "Catálogo de políticas builtin" -description: "Revise cada política builtin do Failproof AI, seu gatilho, estado recomendado e parâmetros configuráveis." -icon: "list-checks" ---- - -O pacote instalado é a fonte de verdade para a disponibilidade de políticas. Execute `failproofai policies` após cada atualização, pois as entradas do catálogo e o comportamento podem mudar com a versão do pacote. - -## Linha de base recomendada - -A seleção recomendada pela configuração guiada atualmente habilita sanitizadores de segredos, proteções de ambiente, autoproteção, proteções contra comandos catastróficos e segurança de branches protegidas: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` está **sempre ativo**. Ele é listado acima apenas para -fins de completude, mas se registra em toda avaliação independentemente de aparecer ou não -no seu conjunto habilitado — não pode ser desabilitado ou pausado. Uma proteção contra o -agente desativar a aplicação de regras não seria uma proteção se o próprio agente pudesse desativá-la. - -O conjunto recomendado é deliberadamente mais restrito do que **Tudo**. Políticas de infraestrutura e de fluxo de trabalho podem interromper trabalhos válidos e devem ser habilitadas apenas para os repositórios e máquinas que delas necessitam. - -## Segredos e ambiente - -| Política | Gatilho | Resultado | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Redaciona JWTs da saída da ferramenta antes que o modelo os veja. | -| `sanitize-api-keys` | `PostToolUse` | Redaciona chaves comuns de OpenAI, Anthropic, GitHub, AWS, Stripe e Google. | -| `sanitize-connection-strings` | `PostToolUse` | Redaciona strings de conexão de banco de dados que contenham credenciais. | -| `sanitize-private-key-content` | `PostToolUse` | Redaciona corpos de chaves privadas PEM. | -| `sanitize-bearer-tokens` | `PostToolUse` | Redaciona tokens bearer de autorização. | -| `protect-env-vars` | `PreToolUse` em ferramentas de shell | Bloqueia comandos que expõem variáveis de ambiente. | -| `block-env-files` | `PreToolUse` | Bloqueia leituras e escritas de arquivos `.env`. | -| `block-read-outside-cwd` | `PreToolUse` em ferramentas de leitura, glob, grep ou shell | Mantém leituras dentro do diretório de trabalho da sessão. | -| `block-secrets-write` | `PreToolUse` em ferramentas de escrita | Bloqueia escritas em nomes de arquivos comuns de chaves secretas e credenciais. | - -## Comandos perigosos e infraestrutura - -| Política | Gatilho | Resultado | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Bloqueia `sudo` a menos que um padrão de permissão corresponda. | -| `block-curl-pipe-sh` | `PreToolUse` | Bloqueia scripts baixados e redirecionados diretamente para um shell. | -| `block-rm-rf` | `PreToolUse` | Bloqueia padrões catastróficos de exclusão recursiva. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Sempre ativo, não pode ser desabilitado.** Bloqueia toda invocação da CLI do Failproof AI, autopausas e desinstalações via gerenciador de pacotes. | -| `block-kubectl` | `PreToolUse` | Controla comandos Kubernetes. | -| `block-terraform` | `PreToolUse` | Controla comandos Terraform e OpenTofu. | -| `block-aws-cli` | `PreToolUse` | Controla comandos da AWS CLI. | -| `block-gcloud` | `PreToolUse` | Controla comandos da Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | Controla comandos da Azure CLI. | -| `block-helm` | `PreToolUse` | Controla comandos do Helm. | -| `block-gh-pipeline` | `PreToolUse` | Controla operações mutantes de workflow, run, merge, release, cache e secret da GitHub CLI. | - -## Segurança de Git e banco de dados - -| Política | Gatilho | Resultado | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Bloqueia pushes diretos para branches protegidas configuradas. | -| `block-force-push` | `PreToolUse` | Bloqueia force-pushes; `--force-with-lease` permanece permitido pela implementação atual. | -| `block-work-on-main` | `PreToolUse` | Bloqueia commits e merges em branches protegidas. | -| `warn-git-amend` | `PreToolUse` | Avisa antes de reescrever um commit com `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Avisa antes de descartar ou limpar stashes permanentemente. | -| `warn-all-files-staged` | `PreToolUse` | Avisa em uso amplo de `git add -A`, `git add .` ou `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Avisa em `DROP`, `TRUNCATE` e `DELETE` sem `WHERE` por meio de clientes de banco de dados reconhecidos. | -| `warn-schema-alteration` | `PreToolUse` | Avisa em operações reconhecidas de `ALTER TABLE` com colunas e renomeações. | - -## Pacotes, comportamento do sistema e loops de agente - -| Política | Gatilho | Resultado | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Avisa antes de publicar em registros de pacotes. | -| `warn-global-package-install` | `PreToolUse` | Avisa antes de instalar pacotes globalmente. | -| `prefer-package-manager` | `PreToolUse` | Instrui o agente a usar um gerenciador de pacotes permitido. | -| `warn-large-file-write` | `PreToolUse` em ferramentas de escrita | Avisa acima do limite de tamanho de arquivo configurado. | -| `warn-background-process` | `PreToolUse` | Avisa em padrões de processos em segundo plano desconectados ou de longa duração. | -| `warn-repeated-tool-calls` | `PreToolUse` | Avisa após três ou mais chamadas de ferramenta idênticas. | - -## Fluxo de trabalho de fim de tarefa - -Essas políticas requerem um harness que emita um evento `Stop` compatível. - -| Política | Resultado | -| --- | --- | -| `require-commit-before-stop` | Recusa a conclusão enquanto houver trabalho rastreado sem commit. | -| `require-push-before-stop` | Recusa a conclusão enquanto houver commits apenas locais. | -| `require-pr-before-stop` | Exige um pull request para o branch atual. | -| `require-no-conflicts-before-stop` | Exige um merge limpo com o branch base configurado. | -| `require-ci-green-before-stop` | Exige que as verificações de CI do HEAD atual sejam concluídas com sucesso. | - -## Referência de parâmetros - -Configure os parâmetros no objeto `policyParams` do escopo selecionado. Os tipos são validados por cada política. - -| Política | Parâmetro | Tipo e padrão | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; as entradas contêm `regex` e `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Bloqueadores de infraestrutura | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Um padrão de permissão amplia o que um agente pode fazer. Teste a tokenização exata e as variantes de comando no harness de destino antes de implantá-lo em uma frota. - \ No newline at end of file diff --git a/docs/pt-br/policies/builtin.mdx b/docs/pt-br/policies/builtin.mdx deleted file mode 100644 index a339ad116..000000000 --- a/docs/pt-br/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Políticas integradas" -description: "Ative proteções mantidas para modos comuns de falha de agentes." -icon: "library" ---- - -As políticas integradas cobrem tratamento de segredos, arquivos de ambiente, comandos shell destrutivos, branches protegidas, ferramentas de nuvem e infraestrutura, publicação de pacotes, chamadas repetidas e verificações de fluxo de trabalho ao final de tarefas. - -## Ativar e verificar uma política integrada - - - - 1. Instale a política em uma máquina conectada usando a CLI local. - 2. Execute uma ação de teste segura no agente instrumentado. - 3. Vá em **Observe → policy** e filtre pelo nome da política, ambiente da máquina ou decisão. - 4. Abra a sessão vinculada para confirmar a entrada da ferramenta correspondente e o motivo retornado. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Remova com `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Liste as políticas disponíveis na versão instalada: - -```bash -failproofai policies -``` - -Ative uma política para um projeto: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Ative várias políticas para harnesses selecionados: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Algumas políticas aceitam parâmetros ou estão marcadas como beta. Revise a descrição, o escopo de correspondência e o comportamento padrão antes de aplicar. Uma política que protege um fluxo de trabalho pode bloquear operações válidas em outro. - - - Revise todas as 40 políticas atuais, seus gatilhos, linha de base recomendada e parâmetros. - - - - Prefira o escopo de projeto para expectativas específicas do repositório e o escopo de usuário para requisitos de segurança em toda a máquina. - \ No newline at end of file diff --git a/docs/pt-br/policies/custom.mdx b/docs/pt-br/policies/custom.mdx deleted file mode 100644 index f8f8dac66..000000000 --- a/docs/pt-br/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Políticas personalizadas" -description: "Escreva uma política para um modo de falha exclusivo do seu fluxo de trabalho de agente." -icon: "shield-plus" ---- - -Crie um arquivo com a extensão `policies.js`, `policies.mjs` ou `policies.ts` dentro de `.failproofai/policies/`. Arquivos de convenção são carregados automaticamente nos escopos de projeto e de usuário. - -## Teste a política antes de publicar na Cloud - - - - 1. Instale a política personalizada em uma máquina de teste e acione tanto uma ação correspondente quanto uma não correspondente legítima. - 2. Vá em **Observe → policy** e compare as duas decisões. - 3. Abra cada sessão vinculada e verifique se o payload do evento contém evidências suficientes para a regra. - 4. Quando o comportamento estiver correto, mova o código revisado para **Admin → policy editor** e publique uma versão. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Arquivos de convenção em `.failproofai/policies/` são carregados sem `--custom`. Mantenha um comando de instalação explícito no CI quando a validação precisar falhar em caso de módulo corrompido. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Isso corresponde a `production/config.yml`, `/srv/production/config.yml`, `/srv/production` e `C:\\production\\config.yml` tanto para `Write` quanto para `Edit`. Não corresponde a nomes como `production-backup`, pois `production` deve ser um segmento de caminho completo. - -Valide e instale um arquivo explícito: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -O contexto da política inclui o tipo de evento, payload normalizado, nome e entrada da ferramenta, metadados da sessão, parâmetros e o CLI de origem quando disponível. - -## Teste os caminhos de falha - -Execute a validação após alterar o arquivo de entrada ou qualquer módulo local que ele importe: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -O caminho do CLI com --strict falha para arquivos ausentes, erros de sintaxe, importações não resolvidas, exceções de nível superior e timeouts de carregamento de módulo. No momento da aplicação, um arquivo personalizado corrompido é registrado em log e ignorado para que as políticas integradas possam continuar. Trate qualquer aviso de carregamento como uma perda de aplicação esperada e configure alertas para isso nos logs de produção. - -Use nomes globalmente únicos entre políticas explícitas, de convenção e gerenciadas pela Cloud. Mantenha as funções de política determinísticas, limite chamadas externas com timeouts curtos e retorne explicitamente allow, instruct ou deny em todos os caminhos. - - - Uma política personalizada é código de aplicação. Teste campos ausentes, nomes de ferramentas alternativos e entradas malformadas — não apenas a correspondência esperada. - \ No newline at end of file diff --git a/docs/pt-br/policies/fleet.mdx b/docs/pt-br/policies/fleet.mdx deleted file mode 100644 index 3b937d8d8..000000000 --- a/docs/pt-br/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Implantar políticas nas máquinas" -description: "Saiba quais máquinas estão registradas, atualizadas e aplicando as versões de política pretendidas." -icon: "network" ---- - -A cobertura de frota responde se uma política existe onde o risco existe. Rastreie máquinas por ID estável e um rótulo legível por humanos, depois compare o estado de implantação atribuído e reportado. - -## Verificar cobertura - - - - 1. Vá para **Admin → enforcement** e revise os totais de aplicação e observação. - 2. Pesquise uma máquina por ID ou rótulo, ou filtre por máquinas sem política. - 3. Expanda uma linha para comparar políticas atribuídas, implantação reportada, último check-in e histórico. - 4. Atualize após o intervalo de polling da máquina quando uma implantação aplicada permanecer pendente. - - ![O frota de Enforcement exibindo cobertura de políticas, estado de implantação das máquinas e atribuições de observação e aplicação.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Use `fp events --agent-id --since 24h` para confirmar que a atividade do agente da máquina chega ao Cloud. - - - -Use as visualizações de cobertura para encontrar: - -- Máquinas que nunca obtiveram a implantação mais recente -- Máquinas registradas que pararam de reportar atividade -- Uma política atribuída ao ambiente ou coorte errado -- Desvio de versão após uma atualização interrompida - -Renomeie uma máquina sem reconectá-la: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Verifique o estado local: - -```bash -failproofai config --status -``` - - - Use rótulos que identifiquem a carga de trabalho e o ambiente. Nomes de host por si só frequentemente são insuficientes após dimensionamento automático ou substituição de máquinas. - \ No newline at end of file diff --git a/docs/reference/cloud-cli.mdx b/docs/reference/cloud-cli.mdx index 946200cc5..404acc524 100644 --- a/docs/reference/cloud-cli.mdx +++ b/docs/reference/cloud-cli.mdx @@ -331,7 +331,7 @@ Cloud-managed policy versions. **Session-only** — every command here exits `2` | `fp policies enable POLICY_ID` | Add it back to every deployment it was removed from, minting a new generation on each. | `--yes`, `-y` | | `fp policies disable POLICY_ID` | Remove it from every deployment carrying it, minting a new generation on each. | `--yes`, `-y` | | `fp policies delete POLICY_ID` | Delete a policy version. | `--yes`, `-y` | -| `fp policies test PATH` | Run a policy locally against a synthetic context. Applies each policy's `match` filter, so one that does not cover the given event/tool is reported `skipped` rather than run. | `--event`; `--tool`; `--command`; `--file-path`; `--expect` | +| `fp policies test PATH` | Run a policy locally against a synthetic context. Applies each policy's `match` filter, so one that does not cover the given event/tool is reported `skipped` rather than run. | `--event`; `--tool`; `--command`; `--file`; `--expect` | | `fp policies compose PROMPT` | Draft a policy with the assistant. Needs `policies:write`. | — | ### Fleet @@ -345,7 +345,7 @@ Which machines run which policies. **Session-only**, same reason as above. | `fp fleet deploy MACHINE_ID` | **Replaces the machine's whole policy set.** Prints the plan and asks only on an interactive terminal without `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` | | `fp fleet diff MACHINE_ID` | Compare a machine against another deployment. | — | | `fp fleet history MACHINE_ID` | Past deployments for a machine. | — | -| `fp fleet rollback MACHINE_ID` | Restore a previous deployment. | `--yes`, `-y` | +| `fp fleet rollback MACHINE_ID GENERATION` | Reinstate a past generation's policy set, as a new generation. | `--yes`, `-y` | | `fp fleet rename MACHINE_ID` | Give a machine a readable name. | required `--name` | ### Guardrails diff --git a/docs/reference/evaluator-sdk.mdx b/docs/reference/evaluator-sdk.mdx index 1c3da5d4d..41d771f79 100644 --- a/docs/reference/evaluator-sdk.mdx +++ b/docs/reference/evaluator-sdk.mdx @@ -1,190 +1,114 @@ --- title: "Evaluator SDK" -description: "Build a service that scores Failproof AI sessions synchronously or asynchronously." +description: "Run your own evaluation worker, for LLM judges and anything else hosted Python cannot do." icon: "gauge" --- -An evaluator receives a completed agent session and returns the quality signals you care about: numeric scores, an explanation for each score, and an optional summary. Failproof AI stores these results beside the trace and charts them across agents and environments. +The Evaluator SDK runs evaluations on your own infrastructure. Your worker registers its evaluations with Failproof AI, claims sessions as they finish, scores them, and submits the results, all over outbound HTTPS: nothing connects in to it. Use it for what [hosted Python](/evaluations/write) cannot do — LLM judges, model calls, packages, secrets, and network access. Its results appear beside hosted ones on the [evaluations page](/sessions/evaluations), tagged **customer**. -## Set up an evaluator +It ships in `failproofai-sdk`, under `failproofai_sdk.evaluator`; importing the tracing SDK does not load it. - - - Install the SDK and the server used to run it. - - ```bash - pip install failproofai-sdk uvicorn - ``` - - - - Create `evaluator.py`. This example checks whether a session contains any failed tool calls. - - ```python - import os - from failproofai.evaluator import Evaluator, EvalResponse - - app = Evaluator(token=os.environ.get("EVALUATOR_TOKEN")) - - @app.config - def config(): - return {"inactivity_timeout_secs": 1800} - - @app.evaluator - def evaluate(req): - tool_errors = sum( - 1 for item in req.events - if item.event_type == "tool_result" and item.payload.get("error") - ) - return EvalResponse( - scores={"tool_reliability": 1.0 if tool_errors == 0 else 0.0}, - reasoning={"tool_reliability": f"{tool_errors} tool errors"}, - ) - ``` - - - - Set a shared token, start the evaluator, and confirm its health endpoint responds. - - ```bash - export EVALUATOR_TOKEN= - uvicorn evaluator:app --host 0.0.0.0 --port 8080 - ``` - - In another terminal: - - ```bash - curl http://127.0.0.1:8080/health - ``` - - - -## Connect the evaluator to Failproof AI - -1. Deploy the evaluator at an HTTPS URL reachable by Failproof AI Cloud. -2. Configure `EVALUATOR_ENDPOINT` with that URL and set `EVALUATOR_TOKEN` to the same token used by the evaluator. For managed Cloud, contact [support@befailproof.ai](mailto:support@befailproof.ai) to configure the connection. -3. Run an evaluation and confirm its scores appear in Failproof AI. +```bash +pip install failproofai-sdk +``` - - - Open a completed session under **Observe → Sessions** and select **Run evaluation** if it was not evaluated automatically. Review the status, scores, reasoning, and summary in the session's **Evaluation** panel. +## Write evaluations - Use **Observe → Evaluations** to compare scores across agents or environments. Use **Observe → Metrics** for latency, cost, token, and other numeric measurements. +```python +from failproofai_sdk.evaluator import ConditionResult, EvalResult, Evaluator, Metric, Score + +app = Evaluator(name="customer-production", version="2026.08.1") + + +@app.eval( + "tool_efficiency", + version="1.0.0", + labels=["tools", "deterministic"], + when=lambda session: ConditionResult(session.count("tool_use") > 0, "no_tool_calls"), +) +def tool_efficiency(session): + calls = session.events_of_type("tool_use") + distinct = {e.payload.get("tool_name") for e in calls if e.payload.get("tool_name")} + value = len(distinct) / len(calls) + return EvalResult( + score=Score(value, passed=value >= 0.7), + metrics={"tool_call_count": Metric(len(calls), unit="events")}, + reasoning=f"{len(distinct)} distinct tools across {len(calls)} calls", + ) - Start with one session to confirm that the evaluator returned the expected score keys and useful reasoning for that specific run. - ![A session detail view showing evaluation scores and reasoning beside its trace.](/images/dashboard/session-detail.png) +@app.eval( + "answer_relevance", + version="judge-v1", + labels=["llm_judge", "relevance"], + when=lambda session: ConditionResult( + session.count("human_input") > 0 and session.count("model_response") > 0, + "no_exchange", + ), + timeout_seconds=30, +) +async def answer_relevance(session): + question = session.events_of_type("human_input")[-1].payload.get("response") + answer = session.events_of_type("model_response")[-1].payload.get("content") + value, reasoning = await ask_judge(question, answer) # your LLM call: a 0-1 score and why + return EvalResult(score=Score(value, passed=value >= 0.7), reasoning=reasoning) + + +if __name__ == "__main__": + app.run_from_env() +``` - Once individual results look correct, use the evaluation dashboard to compare those scores over time and across agents or environments. +- `@app.eval(key, version=...)` registers an evaluation. The key is what its results chart under; change the version whenever the logic changes, and each result keeps the version that produced it. One worker holds up to 100 evaluations. +- `result_kind` is `"score"` unless you say otherwise. For a `"metric"` or `"assertion"` evaluation, name one `metrics` or `assertions` entry after the key: that entry is its result. +- `when` decides whether a session applies. Return `ConditionResult(False, "")` to skip one, and the reason is recorded. +- An evaluation can be a plain function or `async`, and `timeout_seconds` bounds it. +- Payload keys — `tool_name`, `response`, and `content` above — are whatever your agents send, so read them off a real session. - ![A quality dashboard charting evaluator scores over time.](/images/dashboard/dashboard-quality.png) +## Run the worker - A healthy chart should use stable score names; changing a key creates a separate series. - - - ```bash - fp evals --since 1h --score tool_reliability:0..1 - fp evals --since 24h --aggregate - ``` - - +Put a key with the `evaluations:run` permission, created under **Administration → Keys**, in `FAILPROOFAI_EVALUATOR_TOKEN` — set it from your secret store rather than typing it into a command — and start the worker: -For a self-hosted Cloud instance, automatic evaluation is disabled until `EVALUATOR_ENDPOINT` is set on the server process. Restart the server after changing evaluator environment variables. +```bash +FAILPROOFAI_EVALUATOR_URL=https://app.befailproof.ai python evaluator.py +``` -The service exposes `GET /health`, `GET /config`, `POST /evaluate`, and optionally `GET /evaluate/{job_id}`. Return `JobPending` for asynchronous work and register `@app.job_lookup` so Failproof AI can poll it. +Without the `__main__` block, `python -m failproofai_sdk.evaluator evaluator:app` does the same. -When a token is configured, all routes except health require the same bearer token that Failproof AI sends as `EVALUATOR_TOKEN`. +| Variable | Default | Purpose | +| --- | --- | --- | +| `FAILPROOFAI_EVALUATOR_URL` | required | Where Failproof AI is: `https://app.befailproof.ai` for Cloud. HTTPS unless it points at loopback | +| `FAILPROOFAI_EVALUATOR_TOKEN` | required | A key with `evaluations:run` | +| `FAILPROOFAI_EVALUATOR_WORKER_ID` | `-` | Names this worker | +| `FAILPROOFAI_EVALUATOR_CONCURRENCY` | `1` | Sessions this worker scores at once | +| `FAILPROOFAI_EVALUATOR_REQUEST_TIMEOUT_SECONDS` | `30` | Timeout for each request to Failproof AI | +| `FAILPROOFAI_EVALUATOR_DRAIN_TIMEOUT_SECONDS` | `60` | How long a stopping worker waits for runs in flight | +| `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` | `false` | Allow plain HTTP to a URL that is not loopback | +| `FAILPROOFAI_EVALUATOR_MODULE` | none | The `module:attribute` for `python -m failproofai_sdk.evaluator` | -## SDK types +## Result types | Type | Fields | | --- | --- | -| `AgentEvent` | `id`, `ts`, `event_type`, `payload` | -| `EvalRequest` | `schema_version`, `session_id`, `agent_id`, `environment`, `started_at`, `ended_at`, `events` | -| `EvalResponse` | `scores`, `reasoning`, `summary` | -| `JobPending` | `job_id`, `next_poll_secs` | -| `EvaluatorConfig` | `inactivity_timeout_secs`, `default_poll_interval_secs` | - -## Decorators and routes +| `Score` | `value` (0 to 1), `passed`, `unit` (default `ratio`), `display_value`, `description` | +| `Metric` | `value`, `unit`, `display_value`, `description` | +| `Assertion` | `passed`, `description` | +| `EvalResult` | `score`, `metrics`, `assertions`, `reasoning`, `summary`, `labels` | +| `ConditionResult` | `applicable`, `reason_code` | -| Decorator | Route | Required | -| --- | --- | --- | -| `@app.evaluator` | `POST /evaluate` | Yes | -| `@app.job_lookup` | `GET /evaluate/{job_id}` | When returning `JobPending` | -| `@app.config` | `GET /config` | No | - -The SDK caps evaluation request bodies at 25 MiB. Unknown request fields are ignored so services remain compatible as the event contract grows. +An `EvalResult` carries at least one score, metric, or assertion, and at most 25, each under a unique key. -## Return asynchronous work +## The session -Use `JobPending` when evaluation cannot finish inside one request. The job ID is opaque to Failproof AI and must remain resolvable by your service until the result is collected or the server timeout expires. - -```python -from failproofai.evaluator import EvalRequest, EvalResponse, Evaluator, JobPending - -app = Evaluator(token="shared-secret") - -@app.evaluator -def start(req: EvalRequest) -> JobPending: - job_id = enqueue(req) - return JobPending(job_id=job_id, next_poll_secs=30) - -@app.job_lookup -def lookup(job_id: str): - result = get_result(job_id) - if result is None: - return JobPending(job_id=job_id, next_poll_secs=30) - return EvalResponse( - scores=result.scores, - reasoning=result.reasoning, - summary=result.summary, - ) -``` +| Field or method | Gives you | +| --- | --- | +| `session_id`, `agent_id`, `environment` | The session's identity | +| `started_at`, `ended_at` | When it started and ended | +| `event_count`, `events` | The full, ordered transcript | +| `count(event_type)` | How many events of that type it holds | +| `events_of_type(event_type)` | Those events, in order | -Polling cadence is selected in this order: `JobPending.next_poll_secs`, `EvaluatorConfig.default_poll_interval_secs`, then the server's `EVALUATOR_POLLING_INTERVAL_SECS`. Values are clamped between 1 second and 1 hour. The server's default wall-clock polling cap is one hour. +Each event carries `id`, `ts`, `event_type`, and `payload`. -## Request and response fields +## The legacy evaluator -| Field | Type | Notes | -| --- | --- | --- | -| `EvalRequest.schema_version` | `str` | Currently `"1"`. | -| `session_id`, `agent_id`, `environment` | `str` | Session identity and environment. | -| `started_at` | `datetime` | Timestamp of the first event. | -| `ended_at` | `datetime \| None` | Present when the session emitted an end event. | -| `events` | `list[AgentEvent]` | Full ordered event stream. | -| `AgentEvent.id` | `int` | Backend event row identifier. | -| `AgentEvent.ts` | `datetime` | Event timestamp. | -| `AgentEvent.event_type` | `str` | Event family such as `tool_use`. | -| `AgentEvent.payload` | `dict[str, Any]` | Complete event payload. | -| `EvalResponse.scores` | `dict[str, float] \| None` | Numeric dimensions charted in evaluations. | -| `EvalResponse.reasoning` | `dict[str, str] \| None` | Per-score explanations; keys should mirror `scores`. | -| `EvalResponse.summary` | `str \| None` | Overall evaluation narrative. | - -## Server operator settings - -Automatic evaluation is deployment-wide and remains disabled when `EVALUATOR_ENDPOINT` is absent. - -| Variable | Default | Purpose | -| --- | --- | --- | -| `EVALUATOR_ENDPOINT` | unset | Base URL of the evaluator service. | -| `EVALUATOR_TOKEN` | unset | Bearer token shared with `Evaluator(token=...)`. | -| `EVALUATOR_WORKERS` | `2` | Concurrent dispatcher workers. | -| `EVALUATOR_CLAIM_BATCH` | `4` | Sessions claimed per dispatcher pass. | -| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | Fallback async polling cadence. | -| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | Per-request evaluator timeout. | -| `EVALUATOR_MAX_ATTEMPTS` | `5` | Delivery attempts before terminal failure. | -| `EVALUATOR_CONFIG_REFRESH_SECS` | `300` | Refresh cadence for `/config`. | -| `EVALUATOR_MAX_POLL_DURATION_SECS` | `3600` | Maximum wall-clock async polling time. | - -The server can also constrain which organizations use the deployment-global evaluator. Treat endpoint, token, retry, and organization-gate changes as operator configuration and restart or roll the server after changing them. - -## Security and operations - -- Put the evaluator behind HTTPS when traffic crosses a trusted network boundary. -- Configure a non-empty bearer token and keep it identical on both services. -- Do not log the token or full sensitive prompts from request payloads. -- Make synchronous handlers idempotent; retries may repeat a request. -- Persist asynchronous job state outside process memory in production. -- Return stable score keys. Renaming a key creates a new chart series rather than changing the old one. - -The SDK emits structured lifecycle logs such as `eval received`, `eval responded`, `job lookup`, `config returned`, `auth rejected`, and handler exceptions. It does not configure logging handlers; use the host application's logging configuration. +The earlier Evaluator SDK — an HTTP service Failproof AI called at `EVALUATOR_ENDPOINT`, answering `/evaluate` and polled through `JobPending` — is retired. Build new evaluators on this worker; operators of a self-hosted instance running a legacy service can keep it through the transition. diff --git a/docs/reference/policy-sdk.mdx b/docs/reference/policy-sdk.mdx index 78aad8063..f31e027e8 100644 --- a/docs/reference/policy-sdk.mdx +++ b/docs/reference/policy-sdk.mdx @@ -6,7 +6,7 @@ icon: "shield-plus" Custom policies turn a failure pattern from your traces or audits into a decision that runs while an agent works. A policy can allow an action, give the agent guidance, or deny the action before it causes another incident. -Use a custom policy when the behavior depends on your tools, paths, commands, environments, or operating rules. Check the [built-in policy catalog](/policies/builtin-catalog) first so you do not recreate an existing control. +Use a custom policy when the behavior depends on your tools, paths, commands, environments, or operating rules. Check the [Failproof AI policy pack](/policies/packs) first so you do not recreate an existing control. ## Author a custom policy diff --git a/docs/ru/policies/builtin-catalog.mdx b/docs/ru/policies/builtin-catalog.mdx deleted file mode 100644 index 728daf173..000000000 --- a/docs/ru/policies/builtin-catalog.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: "Каталог встроенных политик" -description: "Просмотрите каждую встроенную политику Failproof AI, её триггер, рекомендуемое состояние и настраиваемые параметры." -icon: "list-checks" ---- - -Установленный пакет является источником истины для доступности политик. Запустите `failproofai policies` после каждого обновления, так как записи каталога и поведение могут меняться в зависимости от версии пакета. - -## Рекомендуемая базовая конфигурация - -Рекомендуемый выбор в интерактивной установке в настоящее время включает санитайзеры секретов, защиту окружения, самозащиту, защиту от опасных команд и безопасность защищённых веток: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **всегда включена**. Она указана выше для -полноты, но регистрируется при каждой проверке независимо от того, включена ли она в вашем наборе -активных политик, и не может быть отключена или приостановлена — защита, которую -агент может отключить, не является защитой. - -Рекомендуемый набор намеренно ограничен в сравнении с **Всеми**. Политики инфраструктуры и рабочего процесса могут прерывать допустимые операции и должны быть включены только для репозиториев и машин, которым они необходимы. - -## Секреты и окружение - -| Политика | Триггер | Результат | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Удаляет JWT из вывода инструмента перед тем, как его увидит модель. | -| `sanitize-api-keys` | `PostToolUse` | Удаляет распространённые ключи OpenAI, Anthropic, GitHub, AWS, Stripe и Google. | -| `sanitize-connection-strings` | `PostToolUse` | Удаляет строки подключения к базам данных, содержащие учётные данные. | -| `sanitize-private-key-content` | `PostToolUse` | Удаляет содержимое PEM приватных ключей. | -| `sanitize-bearer-tokens` | `PostToolUse` | Удаляет токены авторизации в заголовке Authorization. | -| `protect-env-vars` | `PreToolUse` на shell-инструментах | Блокирует команды, которые выводят переменные окружения. | -| `block-env-files` | `PreToolUse` | Блокирует чтение и запись файлов `.env`. | -| `block-read-outside-cwd` | `PreToolUse` на инструментах чтения, glob, grep или shell | Ограничивает чтение директорией работы сеанса. | -| `block-secrets-write` | `PreToolUse` на инструментах записи | Блокирует запись в распространённые файлы с ключами секретов и учётными данными. | - -## Опасные команды и инфраструктура - -| Политика | Триггер | Результат | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Блокирует `sudo`, если не совпадает разрешающий шаблон. | -| `block-curl-pipe-sh` | `PreToolUse` | Блокирует загруженные скрипты, передаваемые напрямую в shell. | -| `block-rm-rf` | `PreToolUse` | Блокирует опасные шаблоны рекурсивного удаления. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Всегда включена, не может быть отключена.** Блокирует каждый вызов CLI Failproof AI, самопауз и удаление пакета. | -| `block-kubectl` | `PreToolUse` | Ограничивает команды Kubernetes. | -| `block-terraform` | `PreToolUse` | Ограничивает команды Terraform и OpenTofu. | -| `block-aws-cli` | `PreToolUse` | Ограничивает команды AWS CLI. | -| `block-gcloud` | `PreToolUse` | Ограничивает команды Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | Ограничивает команды Azure CLI. | -| `block-helm` | `PreToolUse` | Ограничивает команды Helm. | -| `block-gh-pipeline` | `PreToolUse` | Ограничивает операции GitHub CLI, изменяющие workflow, run, merge, release, cache и secrets. | - -## Безопасность Git и базы данных - -| Политика | Триггер | Результат | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Блокирует прямые push в настроенные защищённые ветки. | -| `block-force-push` | `PreToolUse` | Блокирует force-push; `--force-with-lease` остаётся разрешённым в текущей реализации. | -| `block-work-on-main` | `PreToolUse` | Блокирует коммиты и merge на защищённых ветках. | -| `warn-git-amend` | `PreToolUse` | Предупреждает перед переписыванием коммита с `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Предупреждает перед необратимым удалением или очисткой stash. | -| `warn-all-files-staged` | `PreToolUse` | Предупреждает при широком `git add -A`, `git add .` или `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Предупреждает о `DROP`, `TRUNCATE` и `DELETE` без `WHERE` через известные клиенты БД. | -| `warn-schema-alteration` | `PreToolUse` | Предупреждает о известных операциях `ALTER TABLE` с колонками и переименованием. | - -## Пакеты, поведение системы и циклы агента - -| Политика | Триггер | Результат | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Предупреждает перед публикацией в реестры пакетов. | -| `warn-global-package-install` | `PreToolUse` | Предупреждает перед глобальной установкой пакетов. | -| `prefer-package-manager` | `PreToolUse` | Указывает агенту использовать разрешённый менеджер пакетов. | -| `warn-large-file-write` | `PreToolUse` на инструментах записи | Предупреждает при превышении настроенного порога размера файла. | -| `warn-background-process` | `PreToolUse` | Предупреждает о фоновых процессах в отдельном сеансе или долгоживущих шаблонах. | -| `warn-repeated-tool-calls` | `PreToolUse` | Предупреждает после трёх или более идентичных вызовов инструмента. | - -## Рабочий процесс завершения задачи - -Эти политики требуют обработчика, который генерирует совместимое событие `Stop`. - -| Политика | Результат | -| --- | --- | -| `require-commit-before-stop` | Отказывает завершение, пока остаётся отслеживаемая работа без коммита. | -| `require-push-before-stop` | Отказывает завершение, пока коммиты остаются только локальными. | -| `require-pr-before-stop` | Требует pull request для текущей ветки. | -| `require-no-conflicts-before-stop` | Требует чистый merge с настроенной базовой веткой. | -| `require-ci-green-before-stop` | Требует успешного завершения проверок CI для текущего HEAD. | - -## Справочник параметров - -Настраивайте параметры в объекте `policyParams` выбранной области. Типы проверяются каждой политикой. - -| Политика | Параметр | Тип и значение по умолчанию | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; записи содержат `regex` и `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Ограничители инфраструктуры | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Разрешающий шаблон расширяет допустимые действия агента. Протестируйте точную токенизацию и варианты команд на целевом обработчике перед развёртыванием на множестве машин. - \ No newline at end of file diff --git a/docs/ru/policies/builtin.mdx b/docs/ru/policies/builtin.mdx deleted file mode 100644 index b084f1827..000000000 --- a/docs/ru/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Встроенные политики" -description: "Включите поддерживаемые гарантии безопасности для типичных режимов отказа агентов." -icon: "library" ---- - -Встроенные политики охватывают обработку секретов, файлы окружения, деструктивные команды оболочки, защищённые ветки, облачные и инфраструктурные инструменты, публикацию пакетов, повторяющиеся вызовы и проверки рабочего процесса конца задачи. - -## Включение и проверка встроенной политики - - - - 1. Установите политику на подключённой машине с помощью локального CLI. - 2. Выполните безопасное тестовое действие в инструментированном агенте. - 3. Перейдите в **Observe → policy** и отфильтруйте по имени политики, среде машины или решению. - 4. Откройте связанную сессию, чтобы подтвердить совпадающий ввод инструмента и возвращённую причину. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Удалите её с помощью `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Получите список доступных политик в установленной версии: - -```bash -failproofai policies -``` - -Включите одну политику для проекта: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Включите несколько политик для выбранных интеграций: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Некоторые политики принимают параметры или помечены как бета. Перед развёртыванием ознакомьтесь с описанием, областью действия и поведением по умолчанию. Политика, защищающая один рабочий процесс, может блокировать допустимые операции в другом. - - - Ознакомьтесь со всеми 40 текущими политиками, их триггерами, рекомендуемой базовой конфигурацией и параметрами. - - - - Предпочитайте область проекта для зависящих от репозитория ожиданий и область пользователя для требований безопасности на уровне машины. - \ No newline at end of file diff --git a/docs/ru/policies/custom.mdx b/docs/ru/policies/custom.mdx deleted file mode 100644 index ce8946bd7..000000000 --- a/docs/ru/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Пользовательские политики" -description: "Напишите политику для режима отказа, уникального для вашего рабочего процесса агента." -icon: "shield-plus" ---- - -Создайте файл с расширением `policies.js`, `policies.mjs` или `policies.ts` в папке `.failproofai/policies/`. Файлы соглашений загружаются автоматически на уровне проекта и пользователя. - -## Протестируйте политику перед публикацией в Cloud - - - - 1. Установите пользовательскую политику на одну тестовую машину и запустите как совпадающее действие, так и легитимное несовпадение. - 2. Перейдите в **Observe → policy** и сравните два решения. - 3. Откройте каждую связанную сессию и проверьте, содержит ли полезная нагрузка события достаточно доказательств для правила. - 4. Когда поведение будет правильным, переместите проверенный исходный код в **Admin → policy editor** и опубликуйте версию. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Файлы соглашений в `.failproofai/policies/` загружаются без флага `--custom`. Сохраняйте явную команду установки в CI, когда проверка должна завершиться ошибкой при наличии неработающего модуля. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Это совпадает с `production/config.yml`, `/srv/production/config.yml`, `/srv/production` и `C:\\production\\config.yml` как для `Write`, так и для `Edit`. Это не совпадает с именами вроде `production-backup`, потому что `production` должен быть полным сегментом пути. - -Проверьте и установите явный файл: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Контекст политики включает тип события, нормализованную полезную нагрузку, имя и входные данные инструмента, метаданные сессии, параметры и исходный CLI, если доступен. - -## Протестируйте пути отказа - -Запустите проверку после изменения файла входа или любого локального модуля, который он импортирует: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Строгий путь CLI завершается ошибкой для отсутствующих файлов, синтаксических ошибок, неразрешённых импортов, исключений верхнего уровня и истечения времени загрузки модуля. Во время применения нарушение пользовательского файла регистрируется и пропускается, чтобы встроенные политики могли продолжить работу. Рассматривайте любое предупреждение о загрузке как потерю ожидаемого применения и установите на него оповещение в журналах производства. - -Используйте глобально уникальные имена во всех явных, соглашениях и управляемых Cloud политиках. Обеспечьте детерминированность функций политик, ограничьте внешние вызовы короткими тайм-аутами и возвращайте намеренный `allow`, `instruct` или `deny` на каждом пути выполнения. - - - Пользовательская политика — это код применения. Тестируйте отсутствующие поля, альтернативные имена инструментов и неправильно сформированные входные данные — не только ожидаемое совпадение. - \ No newline at end of file diff --git a/docs/ru/policies/fleet.mdx b/docs/ru/policies/fleet.mdx deleted file mode 100644 index 187c087de..000000000 --- a/docs/ru/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Развертывание политик на машинах" -description: "Узнайте, какие машины зарегистрированы, актуальны и применяют нужные версии политик." -icon: "network" ---- - -Покрытие парка отвечает на вопрос, существует ли политика там, где есть риск. Отслеживайте машины по стабильному ID и понятной для человека метке, затем сравните назначенное и сообщаемое состояние развертывания. - -## Проверка покрытия - - - - 1. Перейдите в **Admin → enforcement** и ознакомьтесь с общим количеством применяемых и мониторируемых политик. - 2. Выполните поиск машины по ID или метке, или отфильтруйте машины без политики. - 3. Разверните строку, чтобы сравнить назначенные политики, сообщаемое развертывание, время последней проверки и историю. - 4. Обновите страницу после интервала опроса машины, если применённое развертывание остаётся ожидающим. - - ![Парк Enforcement, показывающий покрытие политик, состояние развертывания машины и назначения в режиме наблюдения и применения.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Используйте `fp events --agent-id --since 24h` для проверки того, что активность агента машины попадает в Cloud. - - - -Используйте представления покрытия для поиска: - -- Машин, которые никогда не загружали последнее развертывание -- Зарегистрированных машин, которые перестали сообщать о своей активности -- Политики, назначенной неправильной среде или когорте -- Расхождения версий после прерванного обновления - -Переименуйте машину без её переподключения: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Проверьте локальное состояние: - -```bash -failproofai config --status -``` - - - Используйте метки, которые идентифицируют рабочую нагрузку и среду. Только имён хостов часто недостаточно после автоскалирования или замены машины. - \ No newline at end of file diff --git a/docs/sessions/evaluations.mdx b/docs/sessions/evaluations.mdx index cbeb69c66..beaf52bc4 100644 --- a/docs/sessions/evaluations.mdx +++ b/docs/sessions/evaluations.mdx @@ -1,25 +1,25 @@ --- -title: "Online evaluations" -description: "Score live and completed sessions for quality, compliance, cost, and latency." +title: "Read evaluation results" +description: "Chart evaluation scores over time, compare agents and environments, see why a session scored low, and ask the assistant." icon: "gauge" --- -Online evaluations apply consistent judgments to agent sessions. Use them for signals that should be measured continuously rather than investigated only during an audit. +Results from every evaluation, hosted or from your own worker, land in the same places. -## Review evaluation quality +## Compare scores over time - 1. Go to **Observe → Evaluations**. - 2. Add a series and choose the agent, environment, evaluation score, statistic, and curve. - 3. Add series to compare environments, agents, or score keys. - 4. Select a result to open matching sessions or share the filtered view. Use **Observe → Metrics** for latency, tokens, cost, and other magnitude values. + Go to **Observe → evaluations**. - ![A quality dashboard showing average evaluation scores and trends over time.](/images/dashboard/dashboard-quality.png) + - **Recent runs** lists each evaluation as it lands: whether it came from a hosted (**managed**) or your own (**customer**) evaluator, the agent and session, the evaluation and its version, its status, and its score or metrics. + - **Score over time** plots what you ask for. Select **add series** and choose an agent, an environment, an evaluation, and a statistic: avg, min, max, p50, p75, p90, p95, p99, stddev, or mode. Each series is one line; give it its own **curve** to draw it on a separate chart. - Open a session from the drill-down to inspect its per-score reasoning: + ![The evaluations page: recent runs tagged customer, a score over time chart with reference lines at 0.5 and 0.8, and one series averaging finished_clean across all agents and environments.](/images/dashboard/evaluations-chart.png) - ![A session detail view showing evaluation scores and reasoning beside the complete trace.](/images/dashboard/session-detail.png) + One time range and one bin size apply to every series. A fine bin finds an incident; a coarse one shows a trend, and can hide the spikes you are looking for. A bucket where nothing was scored is a gap in the line, never a zero, and reference lines mark 0.5 and 0.8. + + Every part of the view lives in the URL: **share** copies it, and whoever opens it sees exactly the comparison you built. ```bash @@ -32,21 +32,25 @@ Online evaluations apply consistent judgments to agent sessions. Use them for si -An evaluator receives the session identity, environment, timestamps, and ordered events. It can return numeric score keys with optional reasoning and a summary. Long-running evaluators can return a pending job and be polled later. +Plot **avg** and **p90** for the same evaluation to see whether a good average is hiding a bad tail, or the same evaluation for two agents, or for production and staging, to compare them on one axis. Costs, latencies, and token counts, which carry units, chart under **Observe → metrics**, one chart per unit. + +## See why a session scored low + +Open a session from **Observe → sessions**; the grid carries each session's scores and filters by score range. The session's right rail leads with the evaluation summary, then a bar per score with the evaluator's reasoning under it. + +![A session detail view showing evaluation scores and reasoning beside the complete trace.](/images/dashboard/session-detail.png) + +## Ask the assistant + +Ask about evaluation data in plain English: "tell me about some of the recent evaluations", or which agents' scores are slipping. The [assistant](/sessions/assistant) reads and analyzes the results and answers with tables you can follow up on, and a question worth keeping can become a [query](/sessions/queries) or a [dashboard](/sessions/dashboards). -## Good evaluation targets +![The evaluations page beside the assistant, which answers "tell me about some of the recent evaluations" with a summary of totals, statuses, and scores.](/images/dashboard/evaluations-assistant.png) -- Task completion or correctness -- Groundedness and hallucination risk -- Tool selection and tool efficiency -- Policy or process compliance -- Cost and latency budgets -- Required human escalation +## Watch and act -## From score to response +- **Dashboards**, under **Analyze → dashboards**, trend the scores you feature, per agent and environment, for the whole organization. -Show scores in dashboards to track trends. Create alerts for thresholds or compound conditions. When a score declines across a population, run an audit to investigate why; when the cause is a repeatable action, deploy a policy. + ![A quality dashboard showing average evaluation scores and trends over time.](/images/dashboard/dashboard-quality.png) - - Implement synchronous or asynchronous evaluation with the Python evaluator SDK. - +- **Alerts** notify you when a score crosses a threshold. See [alerts](/audits/alerts). +- When a score declines across many sessions, [run an audit](/audits/run) to find out why; when the cause is a repeatable action, [write a policy](/policies/editor). diff --git a/docs/tr/policies/builtin-catalog.mdx b/docs/tr/policies/builtin-catalog.mdx deleted file mode 100644 index ba6159f5e..000000000 --- a/docs/tr/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "Dahili politika kataloğu" -description: "Her bir Failproof AI dahili politikasını, tetikleyicisini, önerilen durumunu ve yapılandırılabilir parametrelerini gözden geçirin." -icon: "list-checks" ---- - -Yüklü paket, politika kullanılabilirliğinin kaynağıdır. Her yükseltmeden sonra `failproofai policies` çalıştırın çünkü katalog girdileri ve davranış paket sürümüyle değişebilir. - -## Önerilen temel yapı - -Kılavuzlu kurulumun önerilen seçimi şu anda gizli dizi sterilizatörleri, ortam korumaları, kendi kendini koruma, felaket komut korumaları ve korumalı dal güvenliğini etkinleştirir: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **her zaman açıktır**. Bütünlük açısından yukarıda listelenmiştir, ancak etkinleştirilmiş setinizde yer alıp almadığına bakılmaksızın her değerlendirmede kaydedilir ve devre dışı bırakılamaz veya duraklatalamaz — aracının uygulamayı kapatabildiği bir koruma, koruma değildir. - -Önerilen yapı, **Her Şey**'den kasıtlı olarak daha dar kapsamlıdır. Altyapı ve iş akışı politikaları geçerli çalışmayı kesintiye uğratabilir ve bunları ihtiyaç duyan depolar ve makinelerde etkinleştirilmelidir. - -## Gizli diziler ve ortam - -| Politika | Tetikleyici | Sonuç | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Araç çıktısından JWT'leri model görmeden önce düşür. | -| `sanitize-api-keys` | `PostToolUse` | Yaygın OpenAI, Anthropic, GitHub, AWS, Stripe ve Google anahtarlarını düşür. | -| `sanitize-connection-strings` | `PostToolUse` | Kimlik bilgileri içeren veritabanı bağlantı dizelerini düşür. | -| `sanitize-private-key-content` | `PostToolUse` | PEM özel anahtar gövdelerini düşür. | -| `sanitize-bearer-tokens` | `PostToolUse` | Yetkilendirme taşıyıcı jetonlarını düşür. | -| `protect-env-vars` | `PreToolUse` kabuk araçlarında | Ortam değişkenlerini döken komutları engelle. | -| `block-env-files` | `PreToolUse` | `.env` dosyalarının okunmasını ve yazılmasını engelle. | -| `block-read-outside-cwd` | `PreToolUse` okuma, glob, grep veya kabuk araçlarında | Okumaları oturum çalışma dizini içinde tut. | -| `block-secrets-write` | `PreToolUse` yazma araçlarında | Yaygın gizli anahtar ve kimlik bilgisi dosya adlarına yazmaları engelle. | - -## Tehlikeli komutlar ve altyapı - -| Politika | Tetikleyici | Sonuç | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | İzin deseni eşleşmediği sürece `sudo`'yu engelle. | -| `block-curl-pipe-sh` | `PreToolUse` | İndirilen komutları doğrudan kabuğa aktaran betikleri engelle. | -| `block-rm-rf` | `PreToolUse` | Felaket niteliğinde özyinelemeli silme kalıplarını engelle. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Her zaman açık, devre dışı bırakılamaz.** Her Failproof AI CLI çağırmasını, kendi kendini duraklat işlemini ve paket yöneticisi kaldırma işlemini engelle. | -| `block-kubectl` | `PreToolUse` | Kubernetes komutlarını kısıtla. | -| `block-terraform` | `PreToolUse` | Terraform ve OpenTofu komutlarını kısıtla. | -| `block-aws-cli` | `PreToolUse` | AWS CLI komutlarını kısıtla. | -| `block-gcloud` | `PreToolUse` | Google Cloud CLI komutlarını kısıtla. | -| `block-az-cli` | `PreToolUse` | Azure CLI komutlarını kısıtla. | -| `block-helm` | `PreToolUse` | Helm komutlarını kısıtla. | -| `block-gh-pipeline` | `PreToolUse` | Değiştirici GitHub CLI iş akışı, çalıştırma, birleştirme, sürüm, önbellek ve gizli işlemleri kısıtla. | - -## Git ve veritabanı güvenliği - -| Politika | Tetikleyici | Sonuç | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Yapılandırılmış korumalı dallara doğrudan göndermeleri engelle. | -| `block-force-push` | `PreToolUse` | Zorla gönderi işlemlerini engelle; `--force-with-lease` mevcut uygulamada izinli kalır. | -| `block-work-on-main` | `PreToolUse` | Korumalı dallardaki işlemeleri ve birleştirmeleri engelle. | -| `warn-git-amend` | `PreToolUse` | `--amend` ile bir işlemeyi yeniden yazmadan önce uyar. | -| `warn-git-stash-drop` | `PreToolUse` | Depo durumunu kalıcı olarak bırakmadan veya temizlemeden önce uyar. | -| `warn-all-files-staged` | `PreToolUse` | Geniş `git add -A`, `git add .` veya `git add --all` için uyar. | -| `warn-destructive-sql` | `PreToolUse` | Tanınan veritabanı istemcileri aracılığıyla `WHERE` olmadan `DROP`, `TRUNCATE` ve `DELETE` işlemleri için uyar. | -| `warn-schema-alteration` | `PreToolUse` | Tanınan `ALTER TABLE` sütun ve yeniden adlandırma işlemleri için uyar. | - -## Paketler, sistem davranışı ve aracı döngüleri - -| Politika | Tetikleyici | Sonuç | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Paket kayıtlarına yayınlamadan önce uyar. | -| `warn-global-package-install` | `PreToolUse` | Genel paket kurulumundan önce uyar. | -| `prefer-package-manager` | `PreToolUse` | Aracıyı izin verilen bir paket yöneticisini kullanmaya yönlendir. | -| `warn-large-file-write` | `PreToolUse` yazma araçlarında | Yapılandırılmış dosya boyutu eşiğinin üzerinde uyar. | -| `warn-background-process` | `PreToolUse` | Ayrılmış veya uzun ömürlü arka plan süreci kalıplarını uyar. | -| `warn-repeated-tool-calls` | `PreToolUse` | Üç veya daha fazla özdeş araç çağrısından sonra uyar. | - -## Görev sonu iş akışı - -Bu politikalar, uyumlu bir `Stop` etkinliği yayan bir aparat gerektirir. - -| Politika | Sonuç | -| --- | --- | -| `require-commit-before-stop` | İzlenen çalışma işlenmemiş kalırken tamamlamayı reddet. | -| `require-push-before-stop` | İşlemeler yalnızca yerel kalırken tamamlamayı reddet. | -| `require-pr-before-stop` | Geçerli dal için bir çekme isteği gerektirir. | -| `require-no-conflicts-before-stop` | Yapılandırılmış temel dal karşısında temiz bir birleştirme gerektirir. | -| `require-ci-green-before-stop` | Geçerli-HEAD CI kontrollerinin başarıyla tamamlanmasını gerektirir. | - -## Parametre referansı - -Seçilen kapsamın `policyParams` nesnesi altında parametreleri yapılandırın. Türler her politika tarafından doğrulanır. - -| Politika | Parametre | Tür ve varsayılan | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; girdiler `regex` ve `label` içerir | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Altyapı engelleyicileri | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - İzin deseni, aracının yapabileceği işlemleri genişletir. Hedef apar üzerinde tam jetonlaştırma ve komut varyantlarını dağıtmadan önce test edin. - \ No newline at end of file diff --git a/docs/tr/policies/builtin.mdx b/docs/tr/policies/builtin.mdx deleted file mode 100644 index 393e95176..000000000 --- a/docs/tr/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Yerleşik politikalar" -description: "Aracı hatalarının yaygın modları için bakımı yapılan koruma mekanizmalarını etkinleştirin." -icon: "library" ---- - -Yerleşik politikalar, gizli bilgi işleme, ortam dosyaları, yıkıcı kabuk komutları, korumalı dallar, bulut ve altyapı araçları, paket yayınlama, tekrarlanan çağrılar ve görev sonlandırması iş akışı denetimlerini kapsar. - -## Yerleşik bir politikayı etkinleştirme ve doğrulama - - - - 1. Politikayı bağlı bir makinede yerel CLI ile kurun. - 2. İşleme alınan aracıda güvenli bir test işlemi çalıştırın. - 3. **Observe → policy** bölümüne gidin ve politika adı, makine ortamı veya karar ile filtreleyin. - 4. Bağlantılı oturumu açarak eşleşen araç girişini ve döndürülen nedeni doğrulayın. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - `failproofai policy remove block-rm-rf --cli claude --scope project` ile kaldırın. - - - -Yüklü sürümünüzde bulunan politikaları listeleyin: - -```bash -failproofai policies -``` - -Bir proje için bir politikayı etkinleştirin: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Seçilen araçlar için birden fazla politikayı etkinleştirin: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Bazı politikalar parametreleri kabul eder veya beta olarak işaretlenmiş olabilir. Çıkıştan önce açıklamayı, eşleşme kapsamını ve varsayılan davranışı gözden geçirin. Bir iş akışını koruyan bir politika, başka bir iş akışında geçerli işlemleri engelleyebilir. - - - Mevcut 40 politikanın tümünü, tetikleyicilerini, önerilen temeli ve parametrelerini gözden geçirin. - - - - Depoya özgü beklentiler için proje kapsamını ve makine genelindeki güvenlik gereksinimleri için kullanıcı kapsamını tercih edin. - \ No newline at end of file diff --git a/docs/tr/policies/custom.mdx b/docs/tr/policies/custom.mdx deleted file mode 100644 index 74753111b..000000000 --- a/docs/tr/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Özel politikalar" -description: "Agent iş akışınıza özgü bir hata moduna yönelik bir politika yazın." -icon: "shield-plus" ---- - -`.failproofai/policies/` altında `policies.js`, `policies.mjs` veya `policies.ts` ile biten bir dosya oluşturun. Kural dosyaları proje ve kullanıcı kapsamında otomatik olarak yüklenir. - -## Politikayı Cloud yayını öncesinde test edin - - - - 1. Özel politikayı bir test makinesine yükleyin ve hem eşleşen bir işlemi hem de geçerli bir eşleşmeyen işlemi tetikleyin. - 2. **Observe → policy** öğesine gidin ve iki kararı karşılaştırın. - 3. Her bağlantılı oturumu açın ve olay yükünün kural için yeterli kanıt içerdiğini doğrulayın. - 4. Davranış doğru olduğunda, gözden geçirilen kaynağı **Admin → policy editor** öğesine taşıyın ve bir sürüm yayımlayın. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - `.failproofai/policies/` altındaki kural dosyaları `--custom` olmadan yüklenir. Doğrulama bozuk bir modülde başarısız olmalıysa CI'da açık bir yükleme komutu tutun. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Bu, hem `Write` hem de `Edit` için `production/config.yml`, `/srv/production/config.yml`, `/srv/production` ve `C:\\production\\config.yml` ile eşleşir. `production-backup` gibi isimlerle eşleşmez çünkü `production` tam bir yol segmenti olmalıdır. - -Açık bir dosyayı doğrulayın ve yükleyin: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Politika bağlamı olay türünü, normalleştirilmiş yükü, araç adını ve girdisini, oturum meta verilerini, parametreleri ve kullanılabilir olduğunda kaynak CLI'yi içerir. - -## Başarısızlık yollarını test edin - -Giriş dosyasını veya içeri aktardığı herhangi bir yerel modülü değiştirdikten sonra doğrulamayı çalıştırın: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Katı CLI yolu eksik dosyalar, söz dizimi hataları, çözülmemiş içeri aktarmalar, üst düzey istisnalar ve modül yükleme zaman aşımları için başarısız olur. Zorlama sırasında, bozuk bir özel dosya günlüğe kaydedilir ve atlanır, böylece yerleşik politikalar devam edebilir. Herhangi bir yükleme uyarısını beklenen zorlama kaybı olarak değerlendirin ve bunu üretim günlüklerinde uyarı olarak ayarlayın. - -Açık, kural ve Cloud tarafından yönetilen politikalar arasında küresel olarak benzersiz adlar kullanın. Politika işlevlerini deterministic tutun, harici çağrıları kısa zaman aşımlarıyla sınırlayın ve her yolda ıchraç bir `allow`, `instruct` veya `deny` döndürün. - - - Özel bir politika, zorlama kodudur. Eksik alanları, alternatif araç adlarını ve hatalı girdiyi test edin — yalnızca beklenen eşleşmeyi değil. - \ No newline at end of file diff --git a/docs/tr/policies/fleet.mdx b/docs/tr/policies/fleet.mdx deleted file mode 100644 index d02d251cd..000000000 --- a/docs/tr/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Politikaları makinelere dağıtma" -description: "Hangi makinelerin kaydedildiğini, güncel olduğunu ve hedeflenen politika sürümlerini uyguladığını bilin." -icon: "network" ---- - -Fleet kapsamı, bir politikanın risk bulunan yerde var olup olmadığını cevaplar. Makineleri sabit kimlik ve insan tarafından okunabilir etiketle takip edin, ardından atanan ve bildirilen dağıtım durumlarını karşılaştırın. - -## Kapsamı kontrol etme - - - - 1. **Admin → enforcement** kısmına gidin ve uygulanan ve gözlenen toplam değerleri inceleyin. - 2. Bir makineyi kimlik veya etiketle arayın ya da politikası olmayan makineleri filtreleyip bulun. - 3. Atanan politikaları, bildirilen dağıtımı, son check-in zamanını ve geçmişi karşılaştırmak için bir satırı genişletin. - 4. Uygulanan dağıtım beklemede kalırsa, makinenin polling aralığından sonra yenileyin. - - ![Politika kapsamını, makine dağıtım durumunu ve gözlem ile uygulama atamalarını gösteren Enforcement fleet.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Makinenin agent aktivitesinin Cloud'a ulaştığını doğrulamak için `fp events --agent-id --since 24h` kullanın. - - - -Kapsamı görüntülemek için şunları bulun: - -- En son dağıtımı hiç çekmeyen makineler -- Aktivite raporlamayı durduran kayıtlı makineler -- Yanlış ortama veya kohort'a atanan politika -- İnkıta uğramış güncellemenin ardından sürüm kayması - -Makineyi yeniden bağlanmadan yeniden adlandırma: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Yerel durumu kontrol etme: - -```bash -failproofai config --status -``` - - - İş yükü ve ortamı tanımlayan etiketler kullanın. Otomatik ölçeklendirme veya makine değişiminden sonra tek başına ana bilgisayar adları genellikle yeterli değildir. - \ No newline at end of file diff --git a/docs/vi/policies/builtin-catalog.mdx b/docs/vi/policies/builtin-catalog.mdx deleted file mode 100644 index e01c0908c..000000000 --- a/docs/vi/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "Danh mục chính sách tích hợp" -description: "Xem xét mọi chính sách Failproof AI tích hợp, kích hoạt, trạng thái được khuyến nghị, và các tham số có thể cấu hình." -icon: "list-checks" ---- - -Gói đã cài đặt là nguồn dữ liệu chính thức về tính khả dụng chính sách. Chạy `failproofai policies` sau mỗi lần nâng cấp vì các mục danh mục và hành vi có thể thay đổi theo phiên bản gói. - -## Cấu hình cơ sở được khuyến nghị - -Lựa chọn được khuyến nghị của hướng dẫn thiết lập hiện tại cho phép các công cụ vệ sinh bí mật, bảo vệ môi trường, tự bảo vệ, bảo vệ lệnh thảm họa, và an toàn nhánh được bảo vệ: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **luôn bật**. Nó được liệt kê ở trên để hoàn thiện, nhưng nó đăng ký trong mỗi lần đánh giá cho dù nó có xuất hiện trong tập hợp được bật của bạn hay không, và nó không thể bị tắt hay tạm dừng — đây là một bảo vệ chống lại việc agent tắt thực thi mà chính agent có thể tắt không phải là một bảo vệ. - -Được khuyến nghị ý định hẹp hơn **Everything**. Các chính sách cơ sở hạ tầng và quy trình làm việc có thể làm gián đoạn công việc hợp lệ và nên được bật cho các kho lưu trữ và máy cần chúng. - -## Bí mật và môi trường - -| Chính sách | Kích hoạt | Kết quả | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | Xóa JWTs khỏi kết quả công cụ trước khi mô hình nhìn thấy chúng. | -| `sanitize-api-keys` | `PostToolUse` | Xóa các khóa OpenAI, Anthropic, GitHub, AWS, Stripe và Google thông thường. | -| `sanitize-connection-strings` | `PostToolUse` | Xóa chuỗi kết nối cơ sở dữ liệu chứa thông tin xác thực. | -| `sanitize-private-key-content` | `PostToolUse` | Xóa các phần nội dung khóa riêng tư PEM. | -| `sanitize-bearer-tokens` | `PostToolUse` | Xóa các mã thông báo xác thực bearer. | -| `protect-env-vars` | `PreToolUse` trên các công cụ shell | Chặn các lệnh xả các biến môi trường. | -| `block-env-files` | `PreToolUse` | Chặn việc đọc và ghi các tệp `.env`. | -| `block-read-outside-cwd` | `PreToolUse` trên các công cụ đọc, glob, grep, hoặc shell | Giữ các lần đọc bên trong thư mục làm việc của phiên. | -| `block-secrets-write` | `PreToolUse` trên các công cụ ghi | Chặn ghi vào các tên tệp khóa bí mật và thông tin xác thực thông thường. | - -## Các lệnh nguy hiểm và cơ sở hạ tầng - -| Chính sách | Kích hoạt | Kết quả | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`, `PermissionRequest` | Chặn `sudo` trừ khi một mẫu allow khớp. | -| `block-curl-pipe-sh` | `PreToolUse` | Chặn các tập lệnh đã tải xuống được piped trực tiếp đến shell. | -| `block-rm-rf` | `PreToolUse` | Chặn các mẫu xóa đệ quy thảm họa. | -| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Luôn bật, không thể tắt.** Chặn mọi lệnh gọi CLI Failproof AI, tự tạm dừng, và gỡ cài đặt trình quản lý gói. | -| `block-kubectl` | `PreToolUse` | Cổng các lệnh Kubernetes. | -| `block-terraform` | `PreToolUse` | Cổng các lệnh Terraform và OpenTofu. | -| `block-aws-cli` | `PreToolUse` | Cổng các lệnh AWS CLI. | -| `block-gcloud` | `PreToolUse` | Cổng các lệnh Google Cloud CLI. | -| `block-az-cli` | `PreToolUse` | Cổng các lệnh Azure CLI. | -| `block-helm` | `PreToolUse` | Cổng các lệnh Helm. | -| `block-gh-pipeline` | `PreToolUse` | Cổng các hoạt động luồng công việc, chạy, hợp nhất, phát hành, bộ nhớ cache và bí mật thay đổi của GitHub CLI. | - -## An toàn Git và cơ sở dữ liệu - -| Chính sách | Kích hoạt | Kết quả | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | Chặn việc push trực tiếp đến các nhánh được bảo vệ đã cấu hình. | -| `block-force-push` | `PreToolUse` | Chặn force-pushes; `--force-with-lease` vẫn được phép bởi triển khai hiện tại. | -| `block-work-on-main` | `PreToolUse` | Chặn commits và merges trên các nhánh được bảo vệ. | -| `warn-git-amend` | `PreToolUse` | Cảnh báo trước khi viết lại một commit với `--amend`. | -| `warn-git-stash-drop` | `PreToolUse` | Cảnh báo trước khi vĩnh viễn bỏ hoặc xóa các stashes. | -| `warn-all-files-staged` | `PreToolUse` | Cảnh báo trên rộng `git add -A`, `git add .`, hoặc `git add --all`. | -| `warn-destructive-sql` | `PreToolUse` | Cảnh báo trên `DROP`, `TRUNCATE`, và `DELETE` không có `WHERE` thông qua các máy khách cơ sở dữ liệu được công nhận. | -| `warn-schema-alteration` | `PreToolUse` | Cảnh báo trên các hoạt động cột `ALTER TABLE` và đổi tên được công nhận. | - -## Gói, hành vi hệ thống, và vòng lặp agent - -| Chính sách | Kích hoạt | Kết quả | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | Cảnh báo trước khi xuất bản sang các kho lưu trữ gói. | -| `warn-global-package-install` | `PreToolUse` | Cảnh báo trước khi cài đặt gói toàn cầu. | -| `prefer-package-manager` | `PreToolUse` | Hướng dẫn agent sử dụng một trình quản lý gói được phép. | -| `warn-large-file-write` | `PreToolUse` trên các công cụ ghi | Cảnh báo vượt quá ngưỡng kích thước tệp đã cấu hình. | -| `warn-background-process` | `PreToolUse` | Cảnh báo trên các mẫu quy trình nền tách rời hoặc có thời gian sống lâu dài. | -| `warn-repeated-tool-calls` | `PreToolUse` | Cảnh báo sau ba hoặc nhiều lệnh gọi công cụ giống hệt nhau. | - -## Luồng công việc kết thúc tác vụ - -Những chính sách này yêu cầu một harness phát ra một sự kiện `Stop` tương thích. - -| Chính sách | Kết quả | -| --- | --- | -| `require-commit-before-stop` | Từ chối hoàn thành trong khi công việc được theo dõi vẫn chưa được commit. | -| `require-push-before-stop` | Từ chối hoàn thành trong khi các commits vẫn chỉ ở local. | -| `require-pr-before-stop` | Yêu cầu một pull request cho nhánh hiện tại. | -| `require-no-conflicts-before-stop` | Yêu cầu một hợp nhất sạch lại nhánh cơ sở đã cấu hình. | -| `require-ci-green-before-stop` | Yêu cầu các kiểm tra CI HEAD hiện tại hoàn thành thành công. | - -## Tham khảo tham số - -Cấu hình các tham số dưới đối tượng `policyParams` của phạm vi đã chọn. Các loại được xác thực bởi mỗi chính sách. - -| Chính sách | Tham số | Loại và mặc định | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; các mục nhập chứa `regex` và `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` | -| `block-sudo` | `allowPatterns` | `string[]`, `[]` | -| `block-rm-rf` | `allowPaths` | `string[]`, `[]` | -| Các bộ chặn cơ sở hạ tầng | `allowPatterns` | `string[]`, `[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` | -| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` | -| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` | -| `warn-large-file-write` | `thresholdKb` | `number`, `1024` | -| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - Một mẫu allow mở rộng những gì một agent có thể làm. Kiểm tra tokenization chính xác và các biến thể lệnh trên harness đích trước khi triển khai nó trên toàn bộ đội. - \ No newline at end of file diff --git a/docs/vi/policies/builtin.mdx b/docs/vi/policies/builtin.mdx deleted file mode 100644 index afc039347..000000000 --- a/docs/vi/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Các chính sách tích hợp sẵn" -description: "Kích hoạt các biện pháp bảo vệ được duy trì cho các chế độ lỗi agent thường gặp." -icon: "library" ---- - -Các chính sách tích hợp sẵn bao gồm xử lý bí mật, tệp môi trường, lệnh shell phá hủy, nhánh được bảo vệ, công cụ đám mây và cơ sở hạ tầng, xuất bản gói, các cuộc gọi lặp lại, và kiểm tra quy trình làm việc khi kết thúc nhiệm vụ. - -## Bật và xác minh một chính sách tích hợp sẵn - - - - 1. Cài đặt chính sách trên một máy được kết nối với CLI cục bộ. - 2. Chạy một hành động kiểm tra an toàn trong agent được đo lường. - 3. Đi tới **Observe → policy** và lọc theo tên chính sách, môi trường máy, hoặc quyết định. - 4. Mở phiên được liên kết để xác nhận đầu vào công cụ khớp và lý do được trả về. - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - Xóa nó bằng `failproofai policy remove block-rm-rf --cli claude --scope project`. - - - -Liệt kê các chính sách có sẵn trong phiên bản đã cài đặt của bạn: - -```bash -failproofai policies -``` - -Bật một chính sách cho một dự án: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -Bật nhiều chính sách cho các harness được chọn: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -Một số chính sách chấp nhận các tham số hoặc được đánh dấu là phiên bản beta. Xem lại mô tả, phạm vi khớp, và hành vi mặc định trước khi triển khai. Một chính sách bảo vệ một quy trình làm việc có thể chặn các hoạt động hợp lệ trong quy trình khác. - - - Xem lại tất cả 40 chính sách hiện tại, các trình kích hoạt của chúng, giá trị cơ bản được đề xuất, và các tham số. - - - - Ưu tiên phạm vi dự án cho các kỳ vọng cụ thể của kho lưu trữ và phạm vi người dùng cho các yêu cầu bảo mật toàn máy. - \ No newline at end of file diff --git a/docs/vi/policies/custom.mdx b/docs/vi/policies/custom.mdx deleted file mode 100644 index 89779ff56..000000000 --- a/docs/vi/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Custom policies" -description: "Viết một policy cho một chế độ lỗi độc đáo đối với quy trình làm việc của agent của bạn." -icon: "shield-plus" ---- - -Tạo một file kết thúc bằng `policies.js`, `policies.mjs`, hoặc `policies.ts` trong `.failproofai/policies/`. Các file convention sẽ tải tự động ở phạm vi project và user. - -## Kiểm tra policy trước khi xuất bản lên Cloud - - - - 1. Cài đặt custom policy trên một máy test và kích hoạt cả một hành động phù hợp và một hành động hợp lệ không phù hợp. - 2. Đi tới **Observe → policy** và so sánh hai quyết định. - 3. Mở từng phiên được liên kết và xác minh rằng payload sự kiện chứa đủ bằng chứng cho quy tắc. - 4. Khi hành vi là chính xác, di chuyển mã nguồn được xem xét vào **Admin → policy editor** và xuất bản một phiên bản. - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - Các file convention trong `.failproofai/policies/` sẽ tải mà không cần `--custom`. Giữ một lệnh cài đặt rõ ràng trong CI khi xác thực nên thất bại trên một module bị hỏng. - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -Cái này khớp với `production/config.yml`, `/srv/production/config.yml`, `/srv/production`, và `C:\\production\\config.yml` cho cả `Write` và `Edit`. Nó không khớp với các tên như `production-backup` vì `production` phải là một phần đường dẫn hoàn chỉnh. - -Xác thực và cài đặt một file rõ ràng: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -Policy context bao gồm loại sự kiện, payload bình thường hóa, tên công cụ và input, metadata phiên, tham số, và CLI nguồn khi có sẵn. - -## Kiểm tra các đường dẫn lỗi - -Chạy xác thực sau khi thay đổi file entry hoặc bất kỳ module cục bộ nào mà nó import: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -Đường dẫn CLI strict thất bại cho các file bị thiếu, lỗi cú pháp, import không được phân giải, ngoại lệ top-level, và timeout tải module. Tại thời điểm thực thi, một file custom bị hỏng được ghi log và bỏ qua để các policy dựng sẵn có thể tiếp tục. Coi bất kỳ cảnh báo tải nào là mất mát của việc thực thi dự kiến và cảnh báo về nó trong log sản xuất. - -Sử dụng các tên duy nhất trên toàn cầu trên các policy rõ ràng, convention, và được quản lý bởi Cloud. Giữ các hàm policy xác định, liên kết các cuộc gọi bên ngoài với timeout ngắn, và trả về một `allow`, `instruct`, hoặc `deny` có chủ ý trên mọi đường dẫn. - - - Một custom policy là code thực thi. Kiểm tra các field bị thiếu, các tên công cụ thay thế, và input không đúp định dạng—không chỉ khớp dự kiến. - \ No newline at end of file diff --git a/docs/vi/policies/fleet.mdx b/docs/vi/policies/fleet.mdx deleted file mode 100644 index c7e0d142a..000000000 --- a/docs/vi/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Triển khai chính sách tới các máy" -description: "Biết những máy nào đã đăng ký, hiện tại và thực thi các phiên bản chính sách dự định." -icon: "network" ---- - -Phạm vi bao phủ của nhóm máy trả lời câu hỏi liệu một chính sách có tồn tại ở nơi rủi ro tồn tại hay không. Theo dõi các máy bằng ID ổn định và nhãn dễ đọc, sau đó so sánh trạng thái triển khai được gán và được báo cáo của chúng. - -## Kiểm tra phạm vi bao phủ - - - - 1. Đi tới **Admin → enforcement** và xem xét tổng số thực thi và quan sát. - 2. Tìm kiếm một máy theo ID hoặc nhãn, hoặc lọc các máy thiếu chính sách. - 3. Mở rộng một hàng để so sánh các chính sách được gán, triển khai được báo cáo, lần kiểm tra cuối cùng và lịch sử. - 4. Làm mới sau khoảng thời gian bỏ phiếu của máy khi triển khai được áp dụng vẫn đang chờ xử lý. - - ![Bảng điều khiển Fleet Enforcement hiển thị phạm vi bao phủ chính sách, trạng thái triển khai máy và các bài tập quan sát và thực thi.](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - Sử dụng `fp events --agent-id --since 24h` để xác nhận hoạt động tác nhân của máy đạt tới Cloud. - - - -Sử dụng các chế độ xem phạm vi bao phủ để tìm: - -- Các máy chưa bao giờ lấy triển khai mới nhất -- Các máy đã đăng ký không còn báo cáo hoạt động -- Một chính sách được gán cho môi trường hoặc cohort sai -- Phiên bản không khớp sau khi cập nhật bị gián đoạn - -Đổi tên một máy mà không cần kết nối lại: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -Kiểm tra trạng thái cục bộ: - -```bash -failproofai config --status -``` - - - Sử dụng các nhãn xác định khối lượng công việc và môi trường. Chỉ tên máy chủ thôi thường là không đủ sau khi tự động mở rộng hoặc thay thế máy. - \ No newline at end of file diff --git a/docs/zh/policies/builtin-catalog.mdx b/docs/zh/policies/builtin-catalog.mdx deleted file mode 100644 index e7118f49c..000000000 --- a/docs/zh/policies/builtin-catalog.mdx +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: "内置策略目录" -description: "查阅每条 Failproof AI 内置策略的触发条件、推荐状态及可配置参数。" -icon: "list-checks" ---- - -已安装的软件包是策略可用性的权威来源。每次升级后请运行 `failproofai policies`,因为目录条目和行为可能随包版本发生变化。 - -## 推荐基准配置 - -引导式安装的推荐选项当前会启用密钥脱敏器、环境保护、自我保护、灾难性命令防护以及受保护分支安全策略: - -```text -sanitize-jwt sanitize-api-keys -sanitize-connection-strings sanitize-private-key-content -sanitize-bearer-tokens protect-env-vars -block-env-files block-secrets-write -block-failproofai-commands block-sudo -block-curl-pipe-sh block-rm-rf -block-push-master block-force-push -``` - -`block-failproofai-commands` **始终开启**。上方列出该策略仅为完整性说明,无论其是否出现在你的启用列表中,它都会在每次评估时注册,且无法被禁用或暂停——一个能被代理关闭的执行开关,本身就不构成真正的防护。 - -推荐配置有意比**全量**配置范围更窄。基础设施和工作流策略可能会中断正常工作,应仅在需要的仓库和机器上启用。 - -## 密钥与环境 - -| 策略 | 触发条件 | 结果 | -| --- | --- | --- | -| `sanitize-jwt` | `PostToolUse` | 在模型读取工具输出之前,对其中的 JWT 进行脱敏处理。 | -| `sanitize-api-keys` | `PostToolUse` | 脱敏常见的 OpenAI、Anthropic、GitHub、AWS、Stripe 和 Google 密钥。 | -| `sanitize-connection-strings` | `PostToolUse` | 脱敏包含凭证的数据库连接字符串。 | -| `sanitize-private-key-content` | `PostToolUse` | 脱敏 PEM 格式私钥内容。 | -| `sanitize-bearer-tokens` | `PostToolUse` | 脱敏授权 Bearer Token。 | -| `protect-env-vars` | Shell 工具上的 `PreToolUse` | 阻止转储环境变量的命令。 | -| `block-env-files` | `PreToolUse` | 阻止读取和写入 `.env` 文件。 | -| `block-read-outside-cwd` | 读取、glob、grep 或 Shell 工具上的 `PreToolUse` | 将读取操作限制在会话工作目录内。 | -| `block-secrets-write` | 写入工具上的 `PreToolUse` | 阻止向常见密钥及凭证文件名写入内容。 | - -## 危险命令与基础设施 - -| 策略 | 触发条件 | 结果 | -| --- | --- | --- | -| `block-sudo` | `PreToolUse`、`PermissionRequest` | 阻止 `sudo`,除非匹配到允许模式。 | -| `block-curl-pipe-sh` | `PreToolUse` | 阻止将下载的脚本直接通过管道传递给 Shell 执行。 | -| `block-rm-rf` | `PreToolUse` | 阻止灾难性递归删除操作。 | -| `block-failproofai-commands` | `PreToolUse`、`PermissionRequest` | **始终开启,无法禁用。** 阻止所有 Failproof AI CLI 调用、自我暂停及包管理器卸载操作。 | -| `block-kubectl` | `PreToolUse` | 管控 Kubernetes 命令。 | -| `block-terraform` | `PreToolUse` | 管控 Terraform 和 OpenTofu 命令。 | -| `block-aws-cli` | `PreToolUse` | 管控 AWS CLI 命令。 | -| `block-gcloud` | `PreToolUse` | 管控 Google Cloud CLI 命令。 | -| `block-az-cli` | `PreToolUse` | 管控 Azure CLI 命令。 | -| `block-helm` | `PreToolUse` | 管控 Helm 命令。 | -| `block-gh-pipeline` | `PreToolUse` | 管控具有变更性质的 GitHub CLI 工作流、运行、合并、发布、缓存及密钥操作。 | - -## Git 与数据库安全 - -| 策略 | 触发条件 | 结果 | -| --- | --- | --- | -| `block-push-master` | `PreToolUse` | 阻止直接推送到已配置的受保护分支。 | -| `block-force-push` | `PreToolUse` | 阻止强制推送;当前实现中 `--force-with-lease` 仍被允许。 | -| `block-work-on-main` | `PreToolUse` | 阻止在受保护分支上提交和合并。 | -| `warn-git-amend` | `PreToolUse` | 在使用 `--amend` 重写提交前发出警告。 | -| `warn-git-stash-drop` | `PreToolUse` | 在永久丢弃或清除暂存区前发出警告。 | -| `warn-all-files-staged` | `PreToolUse` | 对 `git add -A`、`git add .` 或 `git add --all` 等大范围暂存操作发出警告。 | -| `warn-destructive-sql` | `PreToolUse` | 对通过已识别数据库客户端执行的不带 `WHERE` 的 `DROP`、`TRUNCATE` 和 `DELETE` 操作发出警告。 | -| `warn-schema-alteration` | `PreToolUse` | 对已识别的 `ALTER TABLE` 列修改和重命名操作发出警告。 | - -## 包管理、系统行为与代理循环 - -| 策略 | 触发条件 | 结果 | -| --- | --- | --- | -| `warn-package-publish` | `PreToolUse` | 在向包注册表发布前发出警告。 | -| `warn-global-package-install` | `PreToolUse` | 在全局安装包之前发出警告。 | -| `prefer-package-manager` | `PreToolUse` | 指示代理使用允许的包管理器。 | -| `warn-large-file-write` | 写入工具上的 `PreToolUse` | 当文件大小超过配置阈值时发出警告。 | -| `warn-background-process` | `PreToolUse` | 对后台分离或长期运行的进程模式发出警告。 | -| `warn-repeated-tool-calls` | `PreToolUse` | 在出现三次或以上相同工具调用后发出警告。 | - -## 任务结束工作流 - -这些策略需要一个能发出兼容 `Stop` 事件的执行环境。 - -| 策略 | 结果 | -| --- | --- | -| `require-commit-before-stop` | 在有已跟踪的未提交工作时,拒绝完成任务。 | -| `require-push-before-stop` | 在有仅存于本地的提交时,拒绝完成任务。 | -| `require-pr-before-stop` | 要求为当前分支创建 Pull Request。 | -| `require-no-conflicts-before-stop` | 要求与配置的基础分支干净合并,无冲突。 | -| `require-ci-green-before-stop` | 要求当前 HEAD 的 CI 检查全部通过。 | - -## 参数参考 - -在对应作用域的 `policyParams` 对象下配置参数。各策略会对参数类型进行验证。 - -| 策略 | 参数 | 类型与默认值 | -| --- | --- | --- | -| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`,`[]`;条目包含 `regex` 和 `label` | -| `block-read-outside-cwd` | `allowPaths` | `string[]`,`[]` | -| `block-sudo` | `allowPatterns` | `string[]`,`[]` | -| `block-rm-rf` | `allowPaths` | `string[]`,`[]` | -| 基础设施拦截器 | `allowPatterns` | `string[]`,`[]` | -| `block-secrets-write` | `additionalPatterns` | `string[]`,`[]` | -| `block-push-master` | `protectedBranches` | `string[]`,`["main", "master"]` | -| `block-work-on-main` | `protectedBranches` | `string[]`,`["main", "master"]` | -| `prefer-package-manager` | `allowed`、`blocked` | `string[]`,`[]` | -| `warn-large-file-write` | `thresholdKb` | `number`,`1024` | -| `require-push-before-stop` | `remote`、`baseBranch` | `string`,`"origin"`;`string`,`"main"` | -| `require-pr-before-stop` | `baseBranch` | `string`,`"main"` | -| `require-no-conflicts-before-stop` | `baseBranch` | `string`,`"main"` | - -```json -{ - "enabledPolicies": ["block-sudo", "block-push-master"], - "policyParams": { - "block-sudo": { - "allowPatterns": ["sudo systemctl status"] - }, - "block-push-master": { - "protectedBranches": ["main", "release"] - } - } -} -``` - - - 允许模式会扩大代理可执行的操作范围。在将其部署到整个集群之前,请先在目标执行环境中测试确切的令牌化规则和命令变体。 - \ No newline at end of file diff --git a/docs/zh/policies/builtin.mdx b/docs/zh/policies/builtin.mdx deleted file mode 100644 index 89b618529..000000000 --- a/docs/zh/policies/builtin.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "内置策略" -description: "为常见的 Agent 故障模式启用可维护的安全防护。" -icon: "library" ---- - -内置策略涵盖密钥处理、环境文件、破坏性 Shell 命令、受保护分支、云和基础设施工具、软件包发布、重复调用以及任务结束工作流检查。 - -## 启用并验证内置策略 - - - - 1. 通过本地 CLI 在已连接的机器上安装策略。 - 2. 在已插桩的 Agent 中运行一个安全的测试操作。 - 3. 前往 **Observe → policy**,按策略名称、机器环境或决策进行筛选。 - 4. 打开关联的会话,确认匹配的工具输入和返回的原因。 - - - - ```bash - failproofai policies - failproofai policy add block-rm-rf --cli claude --scope project - failproofai config --status - ``` - - 通过 `failproofai policy remove block-rm-rf --cli claude --scope project` 将其移除。 - - - -列出当前已安装版本中可用的策略: - -```bash -failproofai policies -``` - -为某个项目启用一条策略: - -```bash -failproofai policy add block-rm-rf --scope project -``` - -为指定的 Harness 启用多条策略: - -```bash -failproofai policies --install block-sudo block-force-push \ - --cli claude codex --scope project -``` - -部分策略支持参数配置或标记为 Beta 版本。在正式部署前,请仔细阅读其描述、匹配范围和默认行为。保护某个工作流的策略,在另一个工作流中可能会阻止合法操作。 - - - 查看全部 40 条现有策略、其触发条件、推荐基准配置及可用参数。 - - - - 对于仓库特定的需求,建议使用项目范围;对于全机器范围的安全要求,建议使用用户范围。 - \ No newline at end of file diff --git a/docs/zh/policies/custom.mdx b/docs/zh/policies/custom.mdx deleted file mode 100644 index c00346ca9..000000000 --- a/docs/zh/policies/custom.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "自定义策略" -description: "为您的智能体工作流中特有的故障模式编写策略。" -icon: "shield-plus" ---- - -在 `.failproofai/policies/` 目录下创建以 `policies.js`、`policies.mjs` 或 `policies.ts` 结尾的文件。约定文件会在项目和用户作用域下自动加载。 - -## 发布到云端之前测试策略 - - - - 1. 在一台测试机器上安装自定义策略,并分别触发一个匹配的操作和一个合法的非匹配操作。 - 2. 前往 **Observe → policy**,对比两次决策结果。 - 3. 打开各自关联的会话,验证事件载荷中包含足够支撑规则判断的证据。 - 4. 确认行为正确后,将已审查的源代码移入 **Admin → policy editor** 并发布一个版本。 - - - - ```bash - failproofai policies --install --custom ./security.policies.ts \ - --cli claude --scope project - failproofai policies - ``` - - `.failproofai/policies/` 下的约定文件无需 `--custom` 即可加载。当模块损坏时需要让验证失败,请在 CI 中保留显式的安装命令。 - - - -```ts -import { customPolicies, allow, deny } from "failproofai"; - -customPolicies.add({ - name: "protect-production-paths", - description: "Block writes to production configuration", - match: { events: ["PreToolUse"] }, - fn: async (ctx) => { - if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow(); - const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/"); - if (path.split("/").includes("production")) { - return deny("Writes to production configuration require approval."); - } - return allow(); - }, -}); -``` - -该策略会匹配 `production/config.yml`、`/srv/production/config.yml`、`/srv/production` 以及 `C:\\production\\config.yml`,对 `Write` 和 `Edit` 均生效。它不会匹配 `production-backup` 之类的名称,因为 `production` 必须是完整的路径段。 - -验证并安装指定文件: - -```bash -failproofai policies --install --custom ./security.policies.ts -``` - -策略上下文包含事件类型、规范化载荷、工具名称和输入、会话元数据、参数,以及可用时的来源 CLI 信息。 - -## 测试失败路径 - -修改入口文件或其导入的任何本地模块后,请运行验证: - -```bash -failproofai policies --install --custom ./security.policies.ts --scope project -``` - -严格的 CLI 路径在以下情况下会失败:文件缺失、语法错误、未解析的导入、顶层异常以及模块加载超时。在策略执行时,损坏的自定义文件会被记录日志并跳过,以便内置策略可以继续运行。请将任何加载警告视为预期执行能力的丧失,并在生产日志中为其设置告警。 - -在显式策略、约定策略和云端托管策略之间使用全局唯一的名称。保持策略函数的确定性,为外部调用设置较短的超时时间,并在每条执行路径上都返回明确的 allow、instruct 或 deny。 - - - 自定义策略是强制执行代码。请测试缺失字段、不同工具名称和格式错误的输入——而不仅仅是预期的匹配情况。 - \ No newline at end of file diff --git a/docs/zh/policies/fleet.mdx b/docs/zh/policies/fleet.mdx deleted file mode 100644 index fa0417002..000000000 --- a/docs/zh/policies/fleet.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "将策略部署到机器" -description: "了解哪些机器已注册、处于最新状态,并正在执行预期的策略版本。" -icon: "network" ---- - -机队覆盖率回答的是:风险所在之处是否存在对应的策略。通过稳定 ID 和易读标签追踪机器,然后比较其已分配与已上报的部署状态。 - -## 检查覆盖率 - - - - 1. 前往 **Admin → enforcement**,查看"执行中"和"观察中"的总数。 - 2. 按 ID 或标签搜索机器,或筛选缺少策略的机器。 - 3. 展开某一行,比较已分配策略、已上报部署情况、最近签入时间及历史记录。 - 4. 当已应用的部署仍处于待定状态时,等待该机器的轮询间隔后刷新。 - - ![显示策略覆盖率、机器部署状态以及观察和执行分配情况的 Enforcement 机队视图。](/images/dashboard/enforcement-fleet.png) - - - ```bash - failproofai config --status - failproofai config --machine-label checkout-runner-03 - failproofai flush --wait - ``` - - 使用 `fp events --agent-id --since 24h` 确认该机器的代理活动已到达 Cloud。 - - - -使用覆盖率视图可以发现: - -- 从未拉取最新部署的机器 -- 已注册但停止上报活动的机器 -- 分配到错误环境或批次的策略 -- 更新中断后产生的版本漂移 - -在不重新连接的情况下重命名机器: - -```bash -failproofai config --machine-label checkout-runner-03 -``` - -检查本地状态: - -```bash -failproofai config --status -``` - - - 使用能够标识工作负载和环境的标签。在自动扩缩容或机器替换后,仅凭主机名往往是不够的。 - \ No newline at end of file From 888d9db2e91fb38f5a6af04319b364bdc7a7729d Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Sat, 12 Sep 2026 15:16:00 +0530 Subject: [PATCH 8/8] Address the second CodeRabbit review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /built-in-policies redirects in all 15 languages, not just English. The fourteen localized copies of that page were deleted with the English one in #699, so links to them answered 404 rather than landing on each locale's policies/packs — the same shape builtin, builtin-catalog, custom and fleet already redirect in. - rollback.mdx stops claiming a disable can itself be rolled back. The page says ten lines earlier that rollback refuses a generation naming a disabled policy, and every generation from before the disable names that one, so `fp policies enable` is the way back. - reference/evaluator-sdk.mdx says what FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP costs. EvaluatorClient sends FAILPROOFAI_EVALUATOR_TOKEN as an Authorization: Bearer header on every request and the transcripts it fetches are whole sessions, so plain HTTP to a non-loopback host hands both to anyone on the path. Marked for isolated development networks only. The fourth finding — that the policy listing does not validate the installed pack record or digest — is not applied. It does: readInstalledPacks goes through parsePack, which re-hashes the entry file against the recorded sha256 and throws "failed integrity verification", and manager.ts renders every such error as "pack will not load: ". The suggested wording would have replaced a true sentence with a false one. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01QwD4B2kQMixMPmvwApayYu --- CHANGELOG.md | 1 + docs/docs.json | 56 ++++++++++++++++++++++++++++++++ docs/policies/rollback.mdx | 2 +- docs/reference/evaluator-sdk.mdx | 6 +++- 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f97e6097..e27568bf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ - The Policies section follows how a policy is actually made instead of listing every surface side by side. There are two ways to get one — write it (`policies/editor`: from an audit via **generate policy** and **write this policy**, or by hand) or take a pack from the [policy hub](https://befailproof.ai/policy-hub/) (`policies/packs`) — then one path: test (the new `policies/test`, which leads with the editor's backtest), deploy (which now starts with adding a machine), versions and rollback, and finally publishing a pack and failure behavior. `builtin`, `builtin-catalog`, `custom` and `fleet` are folded into `packs`, `editor`, `test` and `deploy` and deleted along with their 56 translations; their URLs redirect in all 15 languages, as does the website's `/built-in-policies`. `local-configuration` moves to the Reference tab and takes the catalog's parameter table with it. What the builtin pages said that still holds moves to `packs`: the Failproof pack's 38 policies and 10 defaults, checked against its published manifest, with a table marking which common guards a plain `policies add` switches on — `block-rm-rf`, `block-force-push` and `block-secrets-write` are not among them. The catalog's claim that the `sanitize-*` policies redact secrets "before the model sees them" goes with it: they match observation-only `PostToolUse`, so they report a secret found in tool output rather than withhold one (#669). `rollback.mdx` also stops calling CLI rollback a dashboard-only workflow — `fp fleet rollback ` exists (#788) - Every command in the Policies pages is checked against both CLIs' source, and 13 claims did not hold. The worst: the "deploy in observe mode" example enforced, because a bare `fp fleet deploy --add ` keeps the machine's effect or defaults to `enforce` — it now passes `:observe`. `fp policies test` takes `--file`, not `--file-path` (fixed in the Cloud CLI reference too, alongside `fp fleet rollback`'s missing `GENERATION`); `compose` is session-only and refuses API keys; a pack policy switches on machine-wide whatever `--scope` says, and a bare name resolves to the pack that declares it, not to the builtin; re-adding a pack at a terminal re-opens the picker and replaces the selection; `failproofai publish` creates the repository before it validates the build, and at a terminal commits for you rather than refusing (#788) - Evaluations get their own section, **Evaluate agents**, at the top of the Find failures tab: the two kinds of evaluator — hosted Python written in the dashboard, and your own worker for LLM judges — then writing one (drafted by the assistant and grounded in your payload keys, or by hand), testing it against real sessions without storing anything, deploying and versioning it (a successor disables its predecessor, rolling back re-enables it, and history is scored on request, up to 90 days at a time), and reading results, which absorbs the old Online evaluations page. The Evaluator SDK reference is rewritten for Evaluator v2's outbound-only worker in `failproofai_sdk.evaluator`: the push-model service it documented — `EVALUATOR_ENDPOINT`, `/evaluate`, `JobPending` — is retired, so every example on that page described an SDK that no longer ships. `evaluations:run`, the permission a worker's key needs, joins the permissions table (#788) +- Three review findings on the Policies rebuild above. `/built-in-policies` redirected in English only, so the fourteen localized copies of that page — deleted with the English one in #699 — kept answering 404 instead of landing on each locale's `policies/packs`; all fourteen redirects are added, matching how `builtin`, `builtin-catalog`, `custom` and `fleet` already redirect. `rollback.mdx` claimed a `fp policies disable` could itself be rolled back, which the same page denies ten lines earlier: `rollback` refuses a generation that names a disabled policy, and every generation from before the disable names that one — `fp policies enable` is the way back, and the page now says so. And `reference/evaluator-sdk.mdx` documented `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` as a plain capability with no cost attached: `EvaluatorClient` sends `FAILPROOFAI_EVALUATOR_TOKEN` as an `Authorization: Bearer` header on every request and the transcripts it fetches are whole sessions, so plain HTTP to a non-loopback host hands both to anyone on the path, and the token keeps working until it is rotated. The flag is now marked for isolated development networks only (#788) ### Dependencies diff --git a/docs/docs.json b/docs/docs.json index a003f8136..2c90430ab 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -2936,6 +2936,62 @@ { "source": "/built-in-policies", "destination": "/policies/packs" + }, + { + "source": "/zh/built-in-policies", + "destination": "/zh/policies/packs" + }, + { + "source": "/ja/built-in-policies", + "destination": "/ja/policies/packs" + }, + { + "source": "/ko/built-in-policies", + "destination": "/ko/policies/packs" + }, + { + "source": "/es/built-in-policies", + "destination": "/es/policies/packs" + }, + { + "source": "/pt-br/built-in-policies", + "destination": "/pt-br/policies/packs" + }, + { + "source": "/de/built-in-policies", + "destination": "/de/policies/packs" + }, + { + "source": "/fr/built-in-policies", + "destination": "/fr/policies/packs" + }, + { + "source": "/ru/built-in-policies", + "destination": "/ru/policies/packs" + }, + { + "source": "/hi/built-in-policies", + "destination": "/hi/policies/packs" + }, + { + "source": "/tr/built-in-policies", + "destination": "/tr/policies/packs" + }, + { + "source": "/vi/built-in-policies", + "destination": "/vi/policies/packs" + }, + { + "source": "/it/built-in-policies", + "destination": "/it/policies/packs" + }, + { + "source": "/ar/built-in-policies", + "destination": "/ar/policies/packs" + }, + { + "source": "/he/built-in-policies", + "destination": "/he/policies/packs" } ] } diff --git a/docs/policies/rollback.mdx b/docs/policies/rollback.mdx index 874d35eb5..9601d4098 100644 --- a/docs/policies/rollback.mdx +++ b/docs/policies/rollback.mdx @@ -48,7 +48,7 @@ fp policies disable # remove it from every deployment carrying it fp policies enable # add it back ``` -Each mints a new generation on every deployment it touches, so both can themselves be rolled back. +Each mints a new generation on every deployment it touches. Rolling one of those generations back is not how you undo a `disable`, though — `rollback` refuses a generation that names a disabled policy, and every generation from before the disable names this one. `fp policies enable` is the way back, and it mints its own generation in turn. ## Roll back a pack diff --git a/docs/reference/evaluator-sdk.mdx b/docs/reference/evaluator-sdk.mdx index 41d771f79..054c7ab2c 100644 --- a/docs/reference/evaluator-sdk.mdx +++ b/docs/reference/evaluator-sdk.mdx @@ -82,9 +82,13 @@ Without the `__main__` block, `python -m failproofai_sdk.evaluator evaluator:app | `FAILPROOFAI_EVALUATOR_CONCURRENCY` | `1` | Sessions this worker scores at once | | `FAILPROOFAI_EVALUATOR_REQUEST_TIMEOUT_SECONDS` | `30` | Timeout for each request to Failproof AI | | `FAILPROOFAI_EVALUATOR_DRAIN_TIMEOUT_SECONDS` | `60` | How long a stopping worker waits for runs in flight | -| `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` | `false` | Allow plain HTTP to a URL that is not loopback | +| `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` | `false` | Allow plain HTTP to a URL that is not loopback — see the warning below | | `FAILPROOFAI_EVALUATOR_MODULE` | none | The `module:attribute` for `python -m failproofai_sdk.evaluator` | + + `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` sends everything in cleartext. The worker carries `FAILPROOFAI_EVALUATOR_TOKEN` as an `Authorization: Bearer` header on every request, and the transcripts it fetches are the sessions themselves — so anyone on the path reads both, and the token they read runs evaluations until you rotate it. Use it only on an isolated development network. Everywhere else the URL must be HTTPS; loopback needs no flag. + + ## Result types | Type | Fields |

    E15@?EftF*wv#w6sclsfw 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 V#mY*Z}07oSX$&z?P0VQ?Tovgf|%) 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 FRalV|@wt-|>i}z| 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
    4-~6i!^KjrN!||quKs? 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