AI writes your code.
slopGrade decides: it passes or it blocks.
A GitHub Action that blocks PRs adding a cross-tenant leak or PHP echo/print XSS before they reach main. Secrets and other injection findings are advisory. It judges only what the PR adds, so legacy code never turns it red.
Paste a public repo. See what the detectors find.
The same free detectors the GitHub Action runs on every pull request — SQL & command injection, XSS, SSRF, path traversal, XXE, unsafe deserialization, weak crypto, CORS and cross-tenant leaks — on any public GitHub repo, in about a second.
Public code only · nothing is stored · secrets are never reported · free-tier detectors (the paid Firewall runs the full catalog).
Your team merges code no human wrote.
AI agents open PRs faster than review can keep up. Slop slips through, queries forget the org filter, a key leaks into a log. At volume, human review catches nothing — you need a deterministic gate, not an opinion.
One loop: detect → block → verify
The gate lives in your GitHub Actions CI. It reads each PR's diff, decides, and writes its verdict as a required check. On a private repo only a fingerprint leaves your runner, unless you opt in to the deep scan (heisen-slop) on a paid repo. On a public repo the deep scan runs by default.
Copy the snippet
One GitHub Actions workflow pasted into your repo. Keyless OIDC — nothing to store.
- uses: maxor-tech/slopgrade-firewall@f18a953e15e84ff0f9e457da4a056ddea3548d46 # v0.13.6The PR opens
The gate reads the diff on the runner and checks it for cross-tenant leaks and the security classes your plan covers.
$ node isolation-gate.mjs --print-payloadPass / block verdict
One required check, true or false. Red → merge is disabled by the branch ruleset.
slop · blocked → merge disabledThe fix goes green
The agent fixes, re-pushes, the gate re-runs. Green → the PR is mergeable again.
slop · pass → ready to merge125 classes detected. 5 layers. Blocking requires blind evidence.
The cross-tenant leak — a query with no org filter — is our flagship class. A class, or a specific shape within it, blocks only after public blind evidence shows at least 80% precision on at least 10 blind-labelled blocking rows. Until then, it reports findings without blocking. You turn on the rulepack; you don't write it.
Tenant isolation
Every org-scoped query must carry its filter. The #1 cross-tenant leak in prod, caught before merge.
Secrets & injection
Hardcoded keys, SQL/command/XXE/SSRF, deserialization — the bulk of the catalog.
Crypto & auth
Weak algorithms, short keys, RSA padding, reflected CORS, missing access control.
Deep scan
Cross-file dataflow (heisen-slop) across 6 languages by default on public repos, by opt-in on paid private repos — advisory by default, blocking only if you choose.
Fingerprint by default
On a private repo, by default only a structural fingerprint — file paths, {file, line, kind} and the table and column names the cross-tenant check needs is sent — never file contents. The deep scan (heisen-slop), on by default on public repos and opt-in on private repos, sends at most 80 sink files, analysed in memory and dropped. Enterprise can run that engine on your network.
Every class, with the code it detects.
A sample of the 125 classes — grouped by category, each with the exact pattern it catches before it reaches main. Detection runs on your runner; this is what it looks for.
✗ db.from('invoices').select('*')✗ create view billing as select * … security definer✗ User.create(req.body) // is_admin passes through✗ db.query('select * from u where id = ' + req.params.id)✗ exec('convert ' + req.query.file)✗ fetch(req.query.url) // hits 169.254.169.254✗ libxml.parseXml(body, { noent: true })✗ jwt.verify(t, key, { algorithms: ['none'] })✗ const stripe = 'sk_live_4eC39Hq…'✗ app.use(csrf({ ignoreMethods: ['POST'] }))✗ crypto.createHash('md5').update(password)✗ new https.Agent({ rejectUnauthorized: false })✗ createCipheriv('aes-256-cbc', key, ZERO_IV)✗ uses: some/action@main # not a SHA✗ "lodahs": "*" // typo'd name, floating range✗ cidr_blocks = ["0.0.0.0/0"] # port 22✗ FROM node:latest✗ DEBUG = TrueNot another scanner. A turnkey gate.
CodeQL and Semgrep are engines you configure and tune. Human review doesn't scale to agent-speed PRs. slopGrade is the curated rulepack you turn on — 125 classes detected, 3 blocking on paid slots after passing the public blind-evidence bar. All other classes report without blocking.
Deterministic by design · open-source client, auditable · we run it on slopGrade itself before it ships to you.
Free advisory forever. Solo $49/mo for you, Team $299/mo for your team — both block the merge and prove the flaw.
One price per plan, never per head. Solo: 10 private repos, one person. Team: 50 private repos, unlimited users. Both block on 3 classes, and Deep Scan follows the value from the request to the sink. Agents, API keys and MCP clients never count as seats.
The gate recognizes the flaw. Deep Scan proves the path.
It follows a value from the request to the sink — through variables, calls and imported files — and reports only the flows it can prove, each step with its file:line.
- Proven flows
- source → sink, step by step, on every PR of your Team repos.
- Library mode
- public parameters as sources — candidates to triage, never a verdict.
- Proof oracle
- /api/verify: send the alert of any tool, get back a replayable proof or an honest abstain.
Straight answers.
QWhat is slopGrade?
A deterministic CI gate for AI-written code: on every GitHub pull request it decides pass or block before the code reaches main. No score, no debate.
QDoes my code leave my CI?
Not by default. The client reads your files on your GitHub Actions runner and sends only a structural fingerprint — file paths, {file, line, kind} and the table and column names the cross-tenant check needs, for classification. `--print-payload` shows the exact bytes. The exceptions are Deep Scan (heisen-slop) on a public repo, on by default, and the opt-in Deep Scan on a paid private repo: at most 80 sink files, analysed in memory and dropped, advisory unless you set deep-scan-block. A free private repo never sends source.
QHow much does it cost?
Advisory (scan without blocking) is free forever on all your repos, and blocking is free on public repos and one private repo. Team is $299 per month — 50 private repos included, Deep Scan on every PR, unlimited users — then $4 per repo up to 100 and $3 beyond. Enterprise is a negotiated contract.
QIs there a free trial?
Yes: Team is free for 14 days on your first Team plan, with no credit card. Without a card on day 14, the account pauses — repos, settings and history are kept — until you pay.
QWhat does the firewall detect?
Cross-tenant leaks and PHP echo/print XSS block on every public repo and 1 private repo. For XSS, only unescaped PHP echo/print of request input ($_GET / $_POST / $_REQUEST / $_COOKIE) blocks. The 22 open-source detector packs still run on every repo; other findings report without blocking. Paid slots detect 125 classes. 3 classes block on paid slots: cross-tenant leaks, PHP echo/print XSS from unescaped request input, and HMAC/signature comparisons using == when a request can reach the comparison. Other XSS shapes (DOM sinks, Node reflected XSS, taint) and every other class report without blocking. Blocking requires public blind evidence showing at least 80% precision on at least 10 blind-labelled blocking rows, measured per class or shape.
Put a gate between the AI and your main branch.
Create an account, paste the snippet, protect your first repo in two minutes. Team: 14 days free, no card.