Decides whether a pull request is worth a maintainer's first look, and keeps the rest out of the review queue.
Source BenchmarkMaintainers lose hours to pull requests nobody should have to read. Agent output that no human checked before submitting. Tutorial floods where hundreds of new accounts send the same change. Drive-by accounts with a trail of closed-as-invalid work elsewhere. Pull requests against repositories that accept none.
Existing tools score one pull request, or one account, inside one repository. Pullsift is built around sharing: repositories in the network exchange campaign signatures and corroborated author verdicts, so the first repository hit by a wave inoculates the rest.
Tier thresholds sit at measured false-positive rates, so the cost of being wrong is a number rather than a hope. Every install starts in dry run: it annotates what it would have done and acts on nothing.
Every signal is a rule with a weight fitted on real pull requests, and every verdict carries the evidence that produced it. Three lanes feed one score:
Whether AI assistance is welcome is a project's call, not a detector's. Pullsift measures whether a human answers for the work; you decide how much the tooling itself matters.
# .github/pullsift.yml ai_policy: welcome # AI involvement carries no weight ai_policy: neutral # the default: markers count for what the data says ai_policy: disclose # fine when disclosed; undisclosed AI prose is penalized ai_policy: forbid # any provenance marker escalates
Under welcome, an agent-written documentation fix from an
account that responds to review passes untouched. Under any policy, no single
text signal can reach the close tier alone.
slopbench is the benchmark Pullsift ships with. Triage bots publish anecdotes. Comparing them needs a shared corpus, a shared split, and a shared metric. Pullsift ships all three: real labeled pull requests, a fixed author-held-out test split, and a scorer with no dependencies.
The headline metric is recall on AI-generated slop at a one percent false-positive budget. Human farming is a solved detection problem; machine output that reads like work is not.
Slop caught at a one percent false-positive budget, on the held-out split, scored out of fold. Numbers are pinned to a corpus revision by fingerprint. The baselines ship with the corpus so a new bot has something honest to beat. Full results and method.
Point the App at a repository and leave dry run on for a week. Read what it would have done. Then decide.
dry_run: false challenge: true exempt_users: [trusted-bot] protected_paths: [README.md, LICENSE]
Free for the first hundred scored pull requests per month, per install. Beyond that it is paid, because the cost of running it scales with volume. Public and private repositories cost the same.