///// CI

Fail the deploy that breaks sign‑in.

Run it in CI. The first run writes a baseline. After that, the job fails only when a check gets worse.

Example runexit 1
$ npx backwatch your-site.com --ci --baseline .backwatch.json

1 check regressed against .backwatch.json:
x oauth-protected-resource     pass → fail

Error: Process completed with exit code 1.
- uses: backwatch/backwatch@v0
  with:
    url: your-site.com
    baseline: .backwatch.json

///// Output

What a run prints

Real output, trimmedexample.com · 4 Nov 2026
backwatch https://example.com/  FAIL 48FAIL     48  Readability      can agents read you?                15/20 resolvedUNKNOWN   –  Discoverability  can agents find your server?        4/9 resolvedUNKNOWN   –  Connectability   can agents sign in and call tools?  0/12 resolvedUNKNOWN   –  Presence         are you listed where agents look?   no checks applyx markdown-url-fallback   No usable /index.md with Markdown MIME and an initial H1x markdown-negotiation    No usable Markdown from homepage negotiation or /index.mdx agent-ua-markdown       GPTBot/1.0 requesting HTML: not Markdown, HTTP 200~ agent-friendly-404      Nonexistent path: HTML HTTP 404; explanation 0/20 charactersrun with --md for fix prompts

///// How it works

A baseline, then only regressions

  1. 01

    First run

    Backwatch checks the site and writes .backwatch.json. Commit it.

  2. 02

    Every run after

    It checks again and compares. The job fails only when a check gets worse, so existing gaps don't block you.

  3. 03

    In the job summary

    The Markdown report, with a fix prompt for each failure, lands in the run's summary.

///// GitHub Actions

A complete workflow

.github/workflows/backwatch.yml
name: backwatch
on:
  push:
    branches: [main]
  pull_request:

jobs:
  agents:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: backwatch/backwatch@v0
        with:
          url: your-site.com
          baseline: .backwatch.json
          badge: backwatch.svg

Inputs

urlSite to check, for example your-site.com · default none (required)
baselineBaseline file. Written on the first run, so commit it; the job fails on any check that got worse · default .backwatch.json
min-scoreFail below this overall score (0–100). Empty fails on a FAIL verdict · default empty
badgeOptional badge path: .svg, or .json for a shields.io endpoint · default empty
versionThe backwatch npm version to run · default 0.1

Exit codes

0Nothing got worse
1Below the threshold, or a check regressed
2Usage error
3The scan could not run

Inputs reach the shell only through environment variables, so a crafted URL or path cannot inject commands.