Skip to content

v1.0.1: scheduled audits

Latest

Choose a tag to compare

@NiveditJain NiveditJain released this 19 Aug 09:06
· 6 commits to main since this release
ce5116c

Your machine can now audit itself on a timer and email you what it found, configured from the terminal, so a headless box, a detached tmux session or a CI runner can be told to watch itself without anyone opening a browser.

Scheduled audits, from the command line

  • Put the audit on a timer with failproofai audit --schedule [days] --email you@yourdomain.com. Signing in is one command and then the code from your inbox; the interval defaults to 7 days and accepts 1–90.
  • Turn it off with failproofai audit --no-schedule, which leaves you signed in. An expired session must never trap you into keeping a feature you are trying to disable.
  • Ask a headless machine where it stands with failproofai audit --status: whether scheduling is on, where reports go, whether the daemon is up, and when the next scan is due. There was no way to ask before.
  • Get a digest when a scheduled scan finds something harmful, instead of being asked to go and look. Counts and redacted examples only, plus the machine's name, enumerated on the settings page in the same order the email uses.
  • Configure the same thing from the dashboard at /settings, reached by a gear in the header. It is server-rendered from the config, so a page whose whole job is to say whether a security feature is on no longer spends its first frame saying the opposite.
  • Every write goes through the same updateConfig the dashboard uses and the same session file, so the CLI and the dashboard agree by construction rather than by promise.

Fixes

  • Telemetry actually reaches PostHog. The dashboard server was stranding its own events and printing Error while flushing PostHog while doing it.
  • The digest no longer ships assigned secrets verbatim. export DATABASE_PASSWORD=…, npm config set _authToken=… and inline URL credentials are masked by name, keeping which credential was exposed while removing the value.
  • Redaction stops inventing credentials and deleting hostnames. An unanchored sk- matched inside ordinary words, and path shortening was deleting a URL's host, which is the entire security decision in a finding.
  • The digest stops going quiet on the machines with the most to report. A policy straddling the report window scored zero and was dropped from every later report too. Not a delayed digest: a feature that stopped working the longer you used it.
  • A first digest no longer covers all of history. Against a real machine that meant 5,815 findings in the opening email; it is bounded to one interval now, and the same run reports 17.
  • failproofai audit --help is readable again, down from four sections and forty lines to two lines saying what the command is and one aligned usage block.
  • The daemon is warned about on the command that strands it, rather than after the fact.

Docs

  • A rebuilt documentation site at docs.befailproof.ai, organised around tracing agent runs, auditing failures, evaluating live quality and deploying policies.
  • The audit and dashboard pages now document what actually shipped. docs/cli/audit.mdx had been telling people to enable scheduling by hand-editing audit.auto: true, the exact key whose meaning this release changes.
  • The HTTP API reference generates request examples again, and light mode is pink rather than blue.

Upgrading

  • A machine that already had scheduled audits on will keep scanning locally and send nothing until you opt in again. Through 1.0.0 audit.auto meant "scan this machine on a timer" and needed no account and no network, so reading it as agreement to upload redacted transcript excerpts would have started every already-scheduled machine mailing on upgrade, having agreed to nothing of the kind. Consent is now recorded separately, and the CLI tells you how to turn digests on.
  • The audit's files move under ~/.failproofai/audit/ automatically on first run. Nothing is deleted; the session file keeps its 0600 mode.
  • No API, policy or hook-configuration changes. Every integration behaves exactly as it did on 1.0.0.

Dependencies

  • Pin nanoid to 3.3.18, closing GHSA-2v37-7h3g-55p8 (CVSS 8.2).
  • Bump h2 to 0.4.16 in Cargo.lock, clearing RUSTSEC-2026-0258.
  • Bump sql.js to 1.14.2, posthog-node to 5.49.1, and rusqlite.

Full Changelog: v1.0.0...v1.0.1