Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
# Changelog

## 1.0.2-beta.0 — 2026-08-19
## 1.0.2-beta.0 — 2026-08-20

### Docs

- Reposition the project from "runtime failure resolution for coding agents" to observability and enforcement for agent harnesses, across the surfaces that render its identity. The product was never coding-only — `INTEGRATION_TYPES` holds twelve harnesses and two of them (Hermes, a Slack/Telegram gateway; OpenClaw, a self-hosted assistant) were never coding tools — but the strings a stranger reads said otherwise, and the breadth evidence sat under labels that converted it back: README's twelve-logo grid, containing both gateways, was headed "Supported agent CLIs". The README hero, `package.json`'s description and keywords, `SECURITY.md`, `types.ts`, the docs index and quickstart, `reference/harnesses`, the sessions captions, the local dashboard, and the audit share templates now name the harness and define it ostensively on first use, with coding CLIs framed as the class covered deepest rather than the category. `reference/harnesses` is promoted onto the onboarding path in all fifteen locale navs, since it is the only page that answers which kinds of agent are covered and it sat in the last tab. (#731)

- Correct three counts that had rotted silently, and add the test that stops it recurring. README advertised "30 built-in policies" in three places; the real number is 40, and had been for some time. `__tests__/scripts/copy-counts.test.ts` now derives every count in copy — harnesses, policies, canonical events, and the harnesses on which `PreToolUse` and `Stop` blocking is verified — from `types.ts`, `builtin-policies.ts` and `enforcement-capability.ts`, and fails when prose disagrees. It also asserts that the README names no harness absent from `INTEGRATION_TYPES`, which is what makes the twelve-harness claim checkable by the engineer most likely to check it. (#731)

- Stop the harness copy folding the Python SDK into the twelve. The twelve are TWO classes — ten coding CLIs and two chat/assistant gateways — and an SDK-instrumented agent is a separate door, not a third class of the twelve. Worse, the copy said "same events, same policies" of all three: the SDK reports events, it does not sit in the tool-call path, so it delivers observability, sessions and audits **without** enforcement, exactly as `reference/python-sdk` has always said. Blocking an unsafe action on that path needs a hook at the runtime's tool boundary. The drift guard now asserts both the two-class split and that no copy describes the SDK as carrying policies. (#731)

- Point the fourteen translation links at the tree the translation pipeline actually maintains. They resolved to `docs-old/i18n/`, frozen when the Mintlify site replaced it, while `.github/workflows/translate-docs.yml` writes `docs/i18n/` — so every non-English reader got a README that would never be updated again, and the two sets had already diverged. The drift guard asserts the link target. (#731)

### Fixes

- Stop the local audit report claiming it would have blocked things it only detected. `totalHits` folds in `detectorRows` (source `audit-detector`) — replay-only findings with no builtin behind them, whose own fix column renders `audit-only` and which the slipping-through section already labels "caught by audit, not blocked" — yet the TL;DR line users paste publicly said the agent did N things "`failproofai` would have stopped". "Caught" is true of both halves; "would have stopped" was true of one. The same footer also named six integrations when `runAuditInner` defaults to all twelve. (#731)

- Stop the localized navigation referencing pages that were never translated, which is what still discarded a partial run. `--allow-partial` published what succeeded — and then `--update-nav` regenerated the nav from the ENGLISH tree, emitting an entry for the failed page in the language that failed it, so `mintlify validate` rejected the missing file and the job died before its push anyway. The 784 pages that HAD translated went with it, which is precisely the loss `--allow-partial` exists to prevent. Nav generation now omits any localized page whose file is not on disk, prunes a group left with no pages and a tab left with no groups, and keeps an `openapi` group that never had pages to begin with. The check is injected rather than hardcoded, so the pure transform stays testable and the two paths that actually write `docs.json` get the real one. This also closes the same hazard from every other direction it can arrive from — a pruned page, or a translation that only exists on an unmerged branch — because the nav is now derived from what is present rather than from what English says should be. (#725)

- Stop the localized nav crashing on a group that has no pages, and stop it dropping the properties it does have. `buildLanguageNav` rebuilt every group as `{group, pages}` and called `group.pages.map(...)` unconditionally. The docs rebuild added `{group, expanded, openapi}` — a group whose content is an OpenAPI spec and has no pages at all — so `--update-nav` died with `TypeError: undefined is not an object`, **after 784 pages had already been translated**, taking the whole nightly run with it for the second night running. Groups are now rebuilt by spreading the English group, so `expanded`, `icon` and `openapi` survive instead of being silently discarded from every non-English nav; a group with no pages is carried through untouched (the spec is not translated, and dropping it would remove the API reference from thirteen languages); and `pages` entries that are themselves nested groups recurse rather than being prefixed as if they were paths. `pages` is optional on the type now, which is what it always was in the data. (#725)
Expand Down
95 changes: 74 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
[![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai/)
[![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE)

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

**Runtime failure resolution for coding agents.**
Hooks into Claude Code and Codex. Catches loops, dangerous actions, and secret leaks
before they become incidents. Zero latency. Runs locally.
**Observability and enforcement for every harness your agents run in.**
Wherever your agents run, we see it — and we can say no. Failproof hooks 12 agent
harnesses — coding CLIs like Claude Code and Codex, chat gateways like Hermes,
self-hosted assistants like OpenClaw — capturing every run and blocking dangerous
tool calls before they execute. 40 built-in policies. Zero latency. Runs locally.

</div>

Expand All @@ -25,7 +27,15 @@ before they become incidents. Zero latency. Runs locally.

---

## Supported agent CLIs
## 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.

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

<!-- A 6-column table instead of inline <img> runs: table columns never re-wrap,
so the grid stays 2×6 at any window width (scrolling on very narrow screens
Expand Down Expand Up @@ -129,21 +139,27 @@ failproofai policies --install # or just run `failproofai` and accept the firs
failproofai
```

30 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`.
40 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`.

---

## What it stops

| Policy | What it blocks |
|---|---|
| `block-push-master` | Direct pushes to `main` / `master` |
| `block-force-push` | `git push --force` |
| `block-work-on-main` | Commits, merges, rebases on `main` / `master` |
| `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 |
| `warn-destructive-sql` | `DROP`, `TRUNCATE`, unbounded `DELETE` |
| `block-terraform` / `block-kubectl` | Unreviewed changes to live infrastructure |
| `block-rm-rf` | Recursive file deletion |
| `sanitize-api-keys` | API keys leaking into agent context |
| `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` |

→ [All 30 built-in policies](https://docs.befailproof.ai/policies/builtin)
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.

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

---

Expand Down Expand Up @@ -178,24 +194,61 @@ Three decisions available to every policy:

---

## Session visibility
## Observability

Enforcement is one half. The other half is seeing what the agent actually did.

Run `failproofai` with no arguments and it serves a dashboard on `localhost:8020`
reading the run history already on your machine — no account, no signup, nothing
leaving the box. You get the session list, the sequence of model calls, tool calls
and hook decisions inside each run, what was blocked and what the policy told the
agent, and an offline audit (`failproofai audit`) that scans your history for risky
patterns and suggests policies to stop them.

→ [Local dashboard](https://docs.befailproof.ai/reference/local-dashboard) ·
[Read a trace](https://docs.befailproof.ai/sessions/read-a-trace) ·
[Local audit](https://docs.befailproof.ai/audits/local-audit)

**Failproof AI Observability** is the hosted side of the same data model, for teams
running agents across a fleet: every run from every harness in one place, an
execution graph with parallel sub-agents on their own lanes, p50/p95/p99 latency
for models, tools and hooks, per-model cost and context-window tracking, error
tracking, SQL over your own traces with shareable dashboards, evaluations scored by
your own service, scheduled audits that turn recurring failures into evidence-backed
findings, and alerts routed to Slack, email or a signed webhook. Self-hosting in your
own cluster is available on the Enterprise plan.

Every tool call your agent makes is logged locally. The dashboard shows what ran,
what was blocked, and what the policy told the agent — so you're not guessing
when something goes wrong. → [Dashboard guide](https://docs.befailproof.ai/sessions/overview)
→ [Sessions](https://docs.befailproof.ai/sessions/overview) ·
[Audits](https://docs.befailproof.ai/audits/overview) ·
[Book a demo](https://befailproof.ai/get-a-demo)

---

## Documentation

| | |
| Start | |
|---|---|
| [Getting Started](https://docs.befailproof.ai/start/quickstart) | Installation and first steps |
| [Built-in Policies](https://docs.befailproof.ai/policies/builtin) | All 30 policies with parameters |
| [Custom Policies](https://docs.befailproof.ai/policies/custom) | Write your own |
| [Quickstart](https://docs.befailproof.ai/start/quickstart) | Install, connect a harness, see the first run |
| [Concepts](https://docs.befailproof.ai/start/concepts) | How the hook system works |
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All 12, and what each one can enforce |

| Observe | |
|---|---|
| [Sessions](https://docs.befailproof.ai/sessions/overview) | Follow a run: models, tools, errors, latency |
| [Read a trace](https://docs.befailproof.ai/sessions/read-a-trace) | What the execution graph is telling you |
| [Audits](https://docs.befailproof.ai/audits/overview) | Find failure patterns across many sessions |
| [Local dashboard](https://docs.befailproof.ai/reference/local-dashboard) | `localhost:8020`, no account needed |

| Enforce | |
|---|---|
| [Built-in policies](https://docs.befailproof.ai/policies/builtin) | All 40 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 |
| [Dashboard](https://docs.befailproof.ai/sessions/overview) | Session monitor and policy activity |
| [Architecture](https://docs.befailproof.ai/start/concepts) | How the hook system works |

| Instrument your own agent | |
|---|---|
| [Python SDK](https://docs.befailproof.ai/reference/python-sdk) | Report runs from an agent with no harness |
| [Policy SDK](https://docs.befailproof.ai/reference/policy-sdk) | `allow` / `deny` / `instruct` reference |

---

Expand Down
9 changes: 5 additions & 4 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Security Policy

failproofai is an npm package that installs hooks into AI coding agents (Claude
Code, Codex, and others) and runs locally in developers' environments, observing
and gating agent actions. A compromised dependency would therefore run on our
users' machines, inside their agent sessions — so we treat our supply chain as
failproofai is an npm package that installs hooks into AI agent harnesses
(Claude Code, Codex, Cursor, the Hermes and OpenClaw gateways, and others) and
runs locally in the environment the agent runs in, observing and gating agent
actions. A compromised dependency would therefore run on our
users' machines and servers, inside their agent sessions — so we treat our supply chain as
part of our users' trust boundary. This document covers how to report a
vulnerability and how our dependency supply-chain scanning works.

Expand Down
Loading
Loading