Skip to content

Commit de5d19f

Browse files
NiveditJainclaude
andauthored
[docs] Revert the 1.0.2 documentation overhaul (#756), keeping the version cut (#773)
* Revert the 1.0.2 documentation overhaul (#756), keeping the version cut #756 did two things under one merge: it cut the stable 1.0.2 release, and it rewrote every English documentation page plus the README against that CLI. Only the second half is reverted here. `package.json`, `Cargo.toml` and `Cargo.lock` are untouched — the workspace has since moved on to 1.0.4-beta.0, and rolling the version back would repoint the daemon download URL at a release that is not the one the CLI ships from. `docs/` and `README.md` are restored byte-for-byte to ff51896, the commit #756 merged onto. That includes the 14 generated locales and the 14 translated READMEs: #759 regenerated them from #756's English sources and nothing else has touched them since, so leaving them would have left every non-English reader on a translation of text that no longer exists — and the nightly translate job is content-hash cached, so it would likely have skipped re-translating pages whose old hashes it had already seen rather than repairing them. In CHANGELOG.md the `## 1.0.2` heading and its release narrative stay, because 1.0.2 did ship; the `### Docs` entries underneath describe the overhaul and go with it. Verified: `mintlify validate` passes (build + OpenAPI), and `bun run validate:mdx` parses 1034 pages with no broken image references. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FnsLNRPnjsacm2KkFXc5us * Add the changelog entry for the docs revert Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FnsLNRPnjsacm2KkFXc5us * Drop the harness paragraph from the landing page It opened `docs/index.mdx` claiming that "the same events, the same policies, and the same session history apply to every one" of the twelve harnesses — which is the exact claim `src/hooks/enforcement-capability.ts` exists to keep from drifting. Removed from the English page and all 14 locales. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FnsLNRPnjsacm2KkFXc5us --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent eb1e5f2 commit de5d19f

827 files changed

Lines changed: 31503 additions & 49591 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
- `fp-cloud-cli`'s Click shim survives typer 0.27.2, which moved `Abort` out of its vendored Click. `_click_compat` wrapped all six vendored imports in one `try: … except ImportError: from click import …`, so that single missing name rebound **every** symbol to pip Click — the exact silent failure the module exists to prevent. Typer catches only its own Click's exceptions, so every typed error escaped uncaught: `fp alerts show ghost` exited 1 with an empty stderr instead of 6 with a message, and the same for exits 2, 3, 4 and 5. 105 tests went red on the dependabot bump that first installed 0.27.2. The Click is now chosen once — on whether `typer._click` exists at all — and each symbol imported from that choice, so a name that goes missing raises at import (a CLI that will not start) rather than silently downgrading every error to exit 1. `Abort` alone is resolved from `typer.Abort`, which tracks the move by construction: pip Click's before typer 0.26, the vendored class through 0.27.1, `typer.exceptions.Abort` from 0.27.2 (#771)
88

9+
### Docs
10+
11+
- 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)
12+
- 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)
13+
914
### Dependencies
1015

1116
- `fp-cloud-cli`: typer 0.27.1 → 0.27.2, click 8.4.2 → 8.5.0, posthog 7.42.0 → 7.44.2 (#771)
@@ -54,16 +59,6 @@ pinned by the digest of its artifact and by the commit it was built from, and a
5459
pack that cannot be loaded DENIES within the scope it declared rather than
5560
disappearing quietly.
5661

57-
### Docs
58-
59-
- The documentation is rewritten against the shipped 1.0.2 CLI. An audit of all 68 English pages plus the README found 219 factual errors, and the whole of `start/` documented a setup path that no longer exists: bare `failproofai config` — the verb that installs the daemon and wires every supported agent CLI — appeared on no page, and neither did `failproofai policies add FailproofAI/policies`, so a reader who followed the quickstart end to end finished with hook entries, no daemon, and one enforcing policy. The retired `pack`/`policy` spellings, `pack add core`, `--bundled` and `config --connect <url> --token <key>` are gone; the local no-account path (the dashboard on `localhost:8020`, local findings from `failproofai audit`, and separately documented telemetry controls) is documented for the first time; and `start/integrations.mdx`, which five pages linked to and nothing in the navigation reached, is wired in (#756)
60-
- Observe mode is documented as what it is: the policy is EVALUATED for real, under the same timeout and error handling as an enforcing one, and its verdict recorded — only the enforcement is withheld. Both layers that set it are named, `failproofai publish --effect observe` for a pack and `fp fleet deploy <machine> --add <id>:observe` for a Cloud deployment, and every page showing `--add` now says that a bare one ENFORCES immediately, which is how a shadow rollout turns into a production incident. `policies/deploy.mdx` had described the workflow entirely as dashboard clicks and named no `fp` command at all; the CLI lane — `fp fleet list/show/deploy/diff/history/rollback`, `fp guardrails summary|timeline`, and `fp policies test`, which decides a policy locally with no server and no auth — is now covered (#756)
61-
- Enforcement is no longer described as uniform across the twelve harnesses. `docs/index.mdx` claimed "the same events, the same policies, and the same session history apply to every one" — the exact claim `src/hooks/enforcement-capability.ts` exists to stop drifting. A `PreToolUse` deny is verified to stop the tool on all twelve; a `Stop` deny is verified on eight, is `observe` on Pi, and is unverified on OpenCode, Hermes and Goose. Goose has no `Stop` event and we install none on Hermes, so the five `require-*-before-stop` builtins never fire on either. A pair with no row in that file now reads as unverified rather than as blocking (#756)
62-
- The install no longer claims that policies come with it. "39 built-in policies activate immediately" and "eleven are on when you accept the defaults" were both false: `configure-wizard.ts` enables nothing, so `enabledPolicies` is empty and `builtin-policies.ts` registers only what carries `alwaysOn` — exactly one policy, `block-failproofai-commands`. The eleven `defaultEnabled` flags are catalog metadata that decide nothing until a pack is installed (#756)
63-
- The Policy Hub at befailproof.ai/policy-hub is documented, including that `failproofai publish` does not set the `failproofai-policies` topic the hub indexes on — so publishing is publish-then-tag-by-hand until it does (#756)
64-
- Two claims copied out of the CLI's own `--help` are corrected, because the help is wrong. Scope support is not "Codex, Copilot, Cursor, OpenCode and Pi take user or project only": `types.ts` makes Hermes and OpenClaw **user-only** and gives `local` to Claude alone. And `backfill --help` names `~/.failproofai/config.toml`, a layout-2 file no current build writes; the file is `config.json` (#756)
65-
- Six fabricated commands and flags were caught by an adversarial verification pass before they shipped, among them `fp fleet rename --name` (the command takes two positionals and declares no options), a `tool` filter on the local dashboard's activity view (`HookActivityFilters` has six keys and tool is not one), and `failproofai config --token <key> --machine-label <name>` as a setup one-liner — which sets nothing up, since any invocation carrying `--machine-label` without `--connect` routes straight to the rename path and exits 1 on a machine that is not yet connected (#756)
66-
6762
### Fixes
6863

6964
- The mirror of that, on the success path: a shared artifact that imports FINE but registers less than one of its packs selected. Registration is recorded per pack id, and every hook from a collapsed load carries only the id the collapse kept — so a policy declared by the non-winning record's manifest and absent from the artifact left that pack in neither the failure map nor the registered map, and `missingGuards` skips a pack in neither. Nothing registered the policy and nothing denied on its behalf: the machine reported itself enforcing a scope that was running nothing. Registrations are propagated to every pack id behind the artifact now, so the pack that selected the missing policy is measured against what actually loaded (#738)

‎README.md‎

Lines changed: 13 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
**Translations:** [简体中文](./docs/i18n/README.zh.md) · [日本語](./docs/i18n/README.ja.md) · [한국어](./docs/i18n/README.ko.md) · [Español](./docs/i18n/README.es.md) · [Português](./docs/i18n/README.pt-br.md) · [Deutsch](./docs/i18n/README.de.md) · [Français](./docs/i18n/README.fr.md) · [Русский](./docs/i18n/README.ru.md) · [हिन्दी](./docs/i18n/README.hi.md) · [Türkçe](./docs/i18n/README.tr.md) · [Tiếng Việt](./docs/i18n/README.vi.md) · [Italiano](./docs/i18n/README.it.md) · [العربية](./docs/i18n/README.ar.md) · [עברית](./docs/i18n/README.he.md)
1616

17-
**See what your agents do. Stop known failures before they repeat.**
18-
Failproof AI works wherever your agents run: coding tools like Claude Code and
19-
Codex, chat gateways like Hermes, self-hosted assistants like OpenClaw, and agents
20-
you instrument yourself. It records each run and can block dangerous tool calls
21-
before they execute.
17+
**Observability and enforcement for every harness your agents run in.**
18+
Wherever your agents run, we see it — and we can say no. Failproof hooks 12 agent
19+
harnesses — coding CLIs like Claude Code and Codex, chat gateways like Hermes,
20+
self-hosted assistants like OpenClaw — capturing every run and blocking dangerous
21+
tool calls before they execute. 39 built-in policies. Zero latency. Runs locally.
2222

2323
</div>
2424

@@ -30,9 +30,9 @@ before they execute.
3030

3131
## Supported harnesses
3232

33-
Twelve harnesses in two classes are supported: ten coding CLIs, plus two
34-
gateways: Hermes, OpenClaw. The policy API and session history are shared; which
35-
events can block varies by harness.
33+
Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant
34+
gateways (Hermes, OpenClaw). Same events, same policies, same session history,
35+
whichever one your agent runs in.
3636

3737
Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/custom-agents),
3838
which gives you tracing, sessions and audits. Enforcement there needs a hook in
@@ -134,31 +134,13 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
134134

135135
## Install
136136

137-
Give a compatible agent the Failproof AI skill if you want it to guide setup,
138-
inspect the machine, and route policy, audit, session, and Cloud work correctly:
139-
140-
```sh
141-
npx skills add FailproofAI/skills
142-
```
143-
144-
This installs the umbrella skill and its specialist siblings. To install only the
145-
umbrella, add `--skill failproofai`. Skills supply operating instructions; install
146-
and configure the product itself with:
147-
148137
```sh
149138
npm install -g failproofai
150-
failproofai config
151-
failproofai policies add FailproofAI/policies
152-
failproofai # dashboard on localhost:8020
139+
failproofai policies --install # or just run `failproofai` and accept the first-run prompt
140+
failproofai
153141
```
154142

155-
Setup connects supported agents and installs the background service. It chooses no
156-
policy pack: before you add one, only `block-failproofai-commands` runs to stop an
157-
agent disabling Failproof AI.
158-
159-
Connect Cloud without prompts with `failproofai config --token <machine-key>`. On a
160-
shared machine or in CI, set `FAILPROOFAI_CLOUD_TOKEN` and run `failproofai config`
161-
so the key does not appear in command history.
143+
39 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`.
162144

163145
---
164146

@@ -175,8 +157,8 @@ so the key does not appear in command history.
175157
| `block-rm-rf` | Recursive file deletion |
176158
| `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` |
177159

178-
These policies protect files, credentials, infrastructure, databases, and agent
179-
workflows. Exact enforcement support varies by harness and event.
160+
The first five apply to any agent that can call a tool. The last three are the
161+
developer favourites — coding CLIs are the harness class we cover deepest.
180162

181163
→ [All 39 built-in policies](https://docs.befailproof.ai/policies/builtin)
182164

@@ -213,33 +195,6 @@ Three decisions available to every policy:
213195
214196
---
215197
216-
## Policy packs
217-
218-
A policy pack is a versioned set of policies published from a public GitHub
219-
repository. Inspect one before installing it:
220-
221-
```sh
222-
failproofai policies show FailproofAI/policies
223-
failproofai policies add FailproofAI/policies
224-
```
225-
226-
Anything with a slash is a pack source; anything without one is a policy name.
227-
You can install selected categories or policies, and pin a release when needed.
228-
229-
```sh
230-
failproofai policies add FailproofAI/policies --category git,database
231-
failproofai policies add owner/repo@a1b2c3d4e5f6
232-
```
233-
234-
Browse published packs in the [Policy Hub](https://befailproof.ai/policy-hub/), or
235-
run `failproofai publish --init` to start your own. Observe mode lets a pack record
236-
what it would have done without blocking: `failproofai publish --effect observe`.
237-
238-
→ [Policy packs](https://docs.befailproof.ai/policies/packs) ·
239-
[Publish a pack](https://docs.befailproof.ai/policies/publish-a-pack)
240-
241-
---
242-
243198
## Observability
244199
245200
Enforcement is one half. The other half is seeing what the agent actually did.
Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,74 @@
11
---
22
title: "Keys and permissions"
3-
description: "Create credentials for people, automation, and machines."
3+
description: "Create scoped API keys for machines, automation, and operators."
44
icon: "key-round"
55
---
66

7-
Use a separate key for each person, machine, or automation job. Grant only the permissions it needs.
7+
API keys belong to an organization and carry explicit permissions. Use separate keys for agent ingestion, policy delivery, evaluators, CI automation, and administrative scripts.
88

99
## Create and rotate a key
1010

11-
Use **Admin → Keys**, or the Cloud CLI:
11+
<Tabs>
12+
<Tab title="Dashboard">
13+
1. Go to **Administration → Keys**, select **new key**, and enter a workload name.
14+
2. Choose a permission set and adjust individual permissions only when the preset is insufficient.
15+
3. Create the key and copy its one-time secret immediately.
16+
4. Open the key later to update grants, disable it, or regenerate the secret.
1217

13-
```bash
14-
fp keys list
15-
fp keys create "audit automation" --add audits:read
16-
fp keys disable "audit automation"
17-
```
18+
The creation drawer is where you choose the narrowest grants required by the workload.
1819

19-
Store the secret when it is created; it is not shown again. Rotate by creating a replacement, updating the consumer, then disabling the old key.
20+
![The new API key drawer with permission presets and individual grants.](/images/dashboard/key-create.png)
2021

21-
## Machine keys
22+
After creation, the Keys page shows the persistent metadata and management actions. The one-time secret is not shown again.
2223

23-
A machine key connects the local service to Cloud:
24+
![The API Keys page showing key permissions, creation time, and regenerate and disable actions.](/images/dashboard/api-keys.png)
2425

25-
```bash
26-
export FAILPROOFAI_CLOUD_TOKEN="<key>"
27-
failproofai config
28-
```
26+
Use this list to review grants regularly and disable keys that no longer map to an active workload.
27+
</Tab>
28+
<Tab title="CLI">
29+
```bash
30+
fp keys create production-agents \
31+
--add events:add \
32+
--add policies:pull
33+
fp keys show production-agents
34+
fp keys update production-agents --add events:read
35+
fp keys regenerate production-agents --yes
36+
fp keys disable production-agents
37+
```
2938

30-
A connected machine may need two capabilities:
39+
Redirect or capture create/regenerate output securely; the secret is returned once.
40+
</Tab>
41+
</Tabs>
3142

32-
- `policies:pull` to receive Cloud-managed policies.
33-
- `events:add` to send decisions and sessions.
43+
The two permissions required by a connected Failproof AI machine are independent:
3444

35-
Status reports these separately because one may work while the other does not.
45+
- `events:add` sends events and session data.
46+
- `policies:pull` retrieves assigned policy deployments.
3647

37-
## Common permissions
48+
Key secrets are shown when created or regenerated. Store them in a secret manager and rotate them without reusing an operator's interactive credentials.
3849

39-
| Permission | Allows |
50+
## Permission catalog
51+
52+
| Area | Permissions |
4053
| --- | --- |
41-
| `events:add` | Send events |
42-
| `events:read` | Read events and errors |
43-
| `evaluations:read` | Read sessions and evaluations |
44-
| `audits:read` / `audits:write` | Review or manage audits |
45-
| `policies:read` / `policies:write` | Review or deploy policies |
46-
| `policies:pull` | Pull machine policy assignments |
47-
| `keys:create` / `keys:disable` | Create or disable keys |
48-
| `orgs:admin` | Instance-level organization administration; not assignable to an organization key |
54+
| Events | `events:add`, `events:read` |
55+
| Keys | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` is human-session only |
56+
| Users | `users:create`, `users:read`, `users:update`, `users:delete` |
57+
| Evaluations | `evaluations:read`, `evaluations:trigger` |
58+
| Dashboards | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
59+
| Queries | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
60+
| Assistant | `agent:use` |
61+
| Settings | `settings:read`, `settings:write` |
62+
| Alerts | `alerts:read`, `alerts:write` |
63+
| Issues | `issues:read`, `issues:create`, `issues:close` |
64+
| Audits | `audits:read`, `audits:write` |
65+
| Policies | `policies:read`, `policies:write`, `policies:pull` |
66+
| Usage | `usage:read` |
67+
68+
`orgs:admin` is reserved for the instance operator and cannot be granted to an organization key or ordinary member. Retired `incidents:*` and `alerts:ack` tokens are accepted for compatibility and normalize to current `issues:*` permissions.
4969

50-
Some administrative `fp fleet` and `fp guardrails` commands require a signed-in user session rather than an API key. Their help text states this before making a request.
70+
Builtin permission sets are `read-only`, `standard`, and `admin`. `standard` adds evaluation triggering, query execution, issue response, and assistant use to read permissions. Key creation strips human-only grants even when a permission set contains them.
5171

5272
<Warning>
53-
Never reuse ingest credentials such as `AGENTEYE_KEY` or `AGENTEYE_API_KEY` as an `FP_API_KEY`. They serve different systems and permissions.
73+
Instance-scoped keys can select an organization with the `X-AgentEye-Org` header. Set it explicitly on multi-organization deployments; omission may select the default organization.
5474
</Warning>

0 commit comments

Comments
 (0)