Less to read first
A deduplicated review surface counted in real changed lines, so large generated changes shrink to the parts that touch authentication, payments, validation, dependencies or public APIs.
Open-source CLI · Windows, Linux, macOS
AI assistants write large pull requests fast. SwiftProof tells you which lines to read first: it maps the diff to risk signals, runs your checks in disposable containers, tries to reproduce issues with differential tests, and hands you a focused review plan with traceable evidence.
Latest v0.3.0 · Works without an AI provider · Never auto-approves a pull request.
$ swiftproof lint HEAD~1..HEAD
5 files, +120/-5 lines; 21 risk signals; 0 reproduced issues.
Focused review: 19 / 125 changed lines
(a prioritization aid, not a correctness guarantee).
Changed-line execution: not measured.
Reports: /home/you/shop/.swiftproof
# Read the flagged lines first
$ cat .swiftproof/CONFIDENCE_REPORT.md
Tests, vet, build and coverage all passed on this change. It also dropped the refund amount validation and let the support role issue refunds. SwiftProof put both at the top of the review plan, among 19 flagged lines out of 125.
The expensive part of reviewing an AI-assisted pull request is not the risky lines. It is finding them among the helpers, tests and docs around them, then working out whether a suspicion is real. SwiftProof does that sorting and gathers the evidence before you open the diff.
payment/refund.go, where the report shows the removed validation.A deduplicated review surface counted in real changed lines, so large generated changes shrink to the parts that touch authentication, payments, validation, dependencies or public APIs.
Your test, typecheck, build and coverage commands run in disposable, network-less containers. Nothing of the candidate executes on your machine.
Unverified areas and incomplete checks are listed explicitly, and --ci turns them into an exit code. You know what was covered and what still needs your judgment.
Excerpt of .swiftproof/CONFIDENCE_REPORT.md, produced by swiftproof review HEAD~1..HEAD --reviewer=false --ci (v0.3.0) on a small shop repository. The commit added catalog helpers with tests, reworked refunds and touched authorization. No AI provider was used.
## Change Summary
120 additions / 5 deletions · 5 files changed
Exit code: 2. No confidence percentage is assigned.
## Automated Checks1
- PASS test (check-1; exit 0; 5982 ms)
- PASS typecheck (check-2; exit 0; 4866 ms)
- PASS build (check-3; exit 0; 2835 ms)
- PASS coverage (check-4; exit 0; 6416 ms)
## Reproduced Issues2
No issue was reproduced by a passing baseline
and failing candidate experiment.
## Suggested Human Review3
- high auth/auth.go:7 (new): Authentication or
authorization function body changed
- high payment/refund.go:21–22 (new): Payment-sensitive
function body changed
- high payment/refund.go:25–26 (new): Exported Go
declaration added; Payment-sensitive function body changed
- high payment/refund.go:21 (old): Configured sensitive
path changed; No nearby test file changed;
Possible input validation removed
- medium catalog/format.go:9 (new): Exported Go
declaration added
… 11 more medium signals in catalog/
## Review Surface4
Focused review: 19 / 125 changed lines.
## Changed-line Execution5
Of 67 added Go lines, 44 were executed at least once,
0 were not executed, 23 are not inside any
instrumented block.
Both refs resolve to commit IDs. Renames, deletions, binaries and merge-base semantics are handled; only committed files are reviewed, so local edits never leak into the result.
Go AST comparison, labelled lexical heuristics and sensitive-path rules flag authentication, payments, dependencies, removed validation, unsafe constructs and missing tests.
Your test, typecheck and build commands run as argv arrays in disposable, non-root, network-less containers with CPU, memory, PID and time limits.
An optional reviewer writes temporary tests. A test that passes on the baseline and fails on the candidate supports a reproduced issue; anything else stays UNVERIFIED.
Try it on your last commit with no configuration, no Docker and no API key. When you adopt it, commit a policy to your base branch: it is read from the base, so a pull request cannot loosen its own rules.
# try it: compare with the previous commit
swiftproof lint HEAD~1..HEAD
# adopt it: once, in your repository
swiftproof init
git add .swiftproof.json && git commit -m "Add review policy"
# on every pull request
swiftproof review --base main --ci
Deduplicated review ranges with old and new coordinates, counted in actual changed lines, ranked by severity.
Generated tests run on baseline and candidate in fresh environments. Go execution is verified from structured test events.
Optionally measure which added Go lines a recorded run executed — reported as an observation, never as proof of testing.
Bring any OpenAI-compatible provider. Tools are bounded: redacted file reads, search and test runs. No shell, no URL fetcher.
A reusable GitHub Actions workflow, meaningful exit codes, and JSON reports with commit IDs, evidence and artifact hashes.
Coding agents run lint and review before handing work over, and report what was reproduced and what remains open.
A review tool earns trust by being precise about its limits. SwiftProof assigns no confidence percentages and never approves a pull request on its own.
Single static binary. AGPL-3.0 licensed. Git required; Docker only to execute repository code.