Skip to main content

agent-diff-guard

Catches risky changes to an AI agent's config — system prompt, tool permissions, model choice — before they merge. A narrow, single-purpose CI check, not a full observability platform: point it at a repo and it scans every changed file against your base branch automatically.

Get a Pro license → — full per-file detail, model cost-tier detection, SARIF output for GitHub code scanning.

What it catches

  • Safety instructions removed — a phrase like "must never" / "do not" / "refuse" present before a change and missing after it.
  • Dangerous tool permissions added — shell_exec, sudo, rm -rf, exec(, eval(, admin_override appearing for the first time.
  • Model swapped to a pricier tier (Pro) — e.g. haiku → opus, gpt-4o-mini → gpt-4o.

Install

pip install agent-diff-guard

Usage

check — scans changed files against a git ref (recommended)

agent-diff-guard check                          # all files changed vs. HEAD, in the current repo
agent-diff-guard check --against origin/main     # all files changed vs. another ref
agent-diff-guard check path/to/agent_config.yaml # restrict to one file
agent-diff-guard check --repo /path/to/repo      # run against a repo other than cwd
agent-diff-guard check --license-key "$LICENSE"  # unlock Pro (or set AGENT_DIFF_GUARD_LICENSE)

Exit code is 1 if any file has a HIGH severity finding, 0 otherwise — safe to use as a CI gate. The exit code always reflects every scanned file, on the free tier too.

Free tier shows full detail (path + findings) for the first 3 files with findings; beyond that it collapses into a one-line summary — the CI gate still fails correctly either way, Pro just gives the full per-file breakdown.

agent-diff-guard check --format sarif --license-key "$LICENSE"   # Pro: SARIF output

A Pro license key is verified live against Gumroad on every run. If it's invalid or unreachable, the tool falls back to the free tier rather than erroring out, so a network hiccup never breaks your CI.

diff — compare two file versions directly

For comparing arbitrary snapshots outside a git checkout:

agent-diff-guard diff path/to/before.txt path/to/after.txt
agent-diff-guard diff path/to/before.txt path/to/after.txt --license-key "$LICENSE"

GitHub Action

- uses: jwa-wa/agent-diff-guard@v1
  with:
    license-key: ${{ secrets.AGENT_DIFF_GUARD_LICENSE }}   # optional, omit for free tier

That's the whole setup for a pull_request workflow — it reads the PR's base branch automatically and works against a standard (shallow) checkout, no extra config needed.

For a push-triggered workflow (no PR context), it compares against the previous commit instead; your checkout step needs fetch-depth: 2 (or 0) for that:

- uses: actions/checkout@v4
  with:
    fetch-depth: 2
- uses: jwa-wa/agent-diff-guard@v1

Store your license key as a repo/org secret — the Action passes it through as an environment variable, never a command-line argument, so it doesn't end up in job logs.

Input Default Purpose
base-ref PR base branch Branch to diff against. Empty = compare against previous commit.
paths (all changed files) Space-separated list to restrict the scan to specific files.
license-key (none, free tier) Pro license key, verified live against Gumroad.

Pricing

Free — the CI-gate result (pass/fail) always covers every scanned file. Full per-file detail for the first 3 files with findings each run.

Pro — get a license:

  • Full per-file detail for every file, not just the first 3.
  • Model cost-tier change detection.
  • SARIF output — findings show up natively in GitHub's Security tab.

License

MIT

Metadata

Release files for agent-diff-guard 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agent-diff-guard 0.1.0
File Size Uploaded
agent_diff_guard-0.1.0.tar.gz 11.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agent-diff-guard 0.1.0
File Interpreter ABI Platform
agent_diff_guard-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.3 kB

Release files / agent_diff_guard-0.1.0.tar.gz

Download URL agent_diff_guard-0.1.0.tar.gz
Size 11.1 kB
Tags Source
SHA-256 checksum
How to use checksums
58d171f1b6ce40e7faf8389f5024dc932f822204f8bcecf3f9f6dc65fe10a89b
BLAKE2b-256 checksum
How to use checksums
7815acc77e4a40e8293be92001c3a860fa47c4767f762cc3355616fd504da3e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.8

Release files / agent_diff_guard-0.1.0-py3-none-any.whl

Download URL agent_diff_guard-0.1.0-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da881f598543aa08c3f0b906673753bc1116897c4787ddeefcc3b6c669ed6efa
BLAKE2b-256 checksum
How to use checksums
f1b1f77d2f99a89b1d94052a1d7442572a0d71658cda660ce7596607a1d3472d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.8

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page