Hardcoded secrets, IDOR, SQL injection, missing auth checks. Gitsentry finds them on the pull request, before anything merges.
Secures code written with
// setup guide
Watch this short tutorial to learn how to set up and use Gitsentry.dev to automatically scan your code for vulnerabilities on every pull request.
The problem
AI tools ship code that works. Nothing in them checks how it holds up against someone trying to break it.
The output reads clean, the tests pass, a teammate approves it in ninety seconds. The IDOR ships with it.
The solution
The review comment shows up the moment your push lands, right where your team already works.
🔐 Gitsentry.dev Security Scan
Found 2 issues in this PR (1 critical, 1 high)
🔴 CRITICAL — Hardcoded Secret
File: src/services/payment.js · Line: 12
const stripeKey = "sk_live_abc123...";Issue: Live Stripe secret key hardcoded in source. Anyone with repo access can use this key.
Fix: Move to process.env.STRIPE_SECRET_KEY and rotate the exposed key immediately.
Powered by Gitsentry.dev · View full report · False positive?
Threat coverage
37 categories in six families, written against the mistakes AI coding assistants make rather than ported from generic SAST rules.
critical
Live keys and tokens committed into source. Matched by format rules, so these never come back as a model's guess.
critical
A route lands with no authentication check, or a PR deletes the one that was guarding it.
critical
A user-controlled ID reaches a query with nothing verifying who owns the record.
critical
User input shaping SQL, NoSQL query operators, shell commands, templates, or an LLM prompt.
critical
Two changes that each look fine and combine into a path an attacker can walk.
high
A check and the action it guards sitting far enough apart for a second request to slip between them.
Full coverage
All 37, on every plan, in PR scans and sweeps alike
Gitsentry drops the categories your project type rules out before the scan runs.
Signal over noise
Six layers sit between a model's guess and your pull request.
Each finding has to name the untrusted source, the sink it reaches, and the control that is missing. “This function doesn’t check ownership” gets thrown out. “This route is reachable without an ownership check” gets reported.
One call hunts. Another re-reads the same diff and tries to disprove every candidate. Findings it cannot pin to your code get dropped before the comment posts.
AWS keys, GitHub tokens, Stripe live keys, and private key blocks are caught by pattern rules. No model gets a vote on those, and they outrank it when both flag the same line.
Gitsentry classifies your project first (API service, static frontend, CLI, library) and drops the categories that cannot apply. A static site never gets asked about SQL injection.
Mark a category as a false positive twice in one repo and Gitsentry demands proof of an exploitable path before raising it there again.
When a scan breaks on our side, we refund the credit and label it failed. A scan that never finished never shows up in your dashboard as clean.
Security sweeps
A PR scan reads one diff. A sweep reads your recent history on the default branch as one body of work: attacker profiles, entry points, trust boundaries, then the paths that run through several commits.
You get a threat model and named attack chains alongside the findings. Sweeps run on a stronger model than PR scans. Run one after a big refactor or the week before a launch.
Every plan includes sweeps. Free gets one to try, Starter one a month, Pro ten. Compare plans.
// threat model
Attacker: authenticated tenant user
Entry: POST /api/invites, PATCH /api/orgs/:id
Asset: org membership rows
// attack chain
1. invite accepts a role field from the body (a1b2c3d)
2. role is written straight to memberships (e4f5g6h)
3. the org guard trusts that same role column
→ any member invites themselves an owner
Neither commit is a finding on its own.
// how it works
From install to first finding in under two minutes.
One click, no config files.
Gitsentry reads the diff, the lines around it, and what your repo already does for auth.
Exact line, severity, and a concrete fix, posted in the PR. Push again and Gitsentry edits the same comment.
Comment /gitsentry rescan to re-run on the current HEAD. Put auth that lives outside the repo in .gitsentry/context.md and every scan reads it.
Read the prompts, run the scanner on your own infrastructure, keep findings in your own database. Point it at Gemini, an OpenAI-compatible endpoint, or a model you host. Your diffs go to the AI endpoint you configure and nowhere else.
View source on GitHubGet started
Free for public repos, forever. No config required. Most teams see their first finding within two minutes of opening a PR.