Skip to content
// AI code review + pentest

Code at machine speed. Security at machine speed.

Zolt reviews every pull request for security. It follows each change from where input enters to where it could do damage, tells you whether the issue is exploitable, and hands you the fix.

14-day free trial · no credit card · GitHub, GitLab and Bitbucket Works with GitHub Actions and any CI
critical · idor on /v2/invoices · exploitable · patch attached high · jwt alg=none accepted · exploitable · patch attached critical · ssrf via image proxy · exploitable · patch attached secret · aws key in ci logs · revoked · rotated high · race in coupon redeem · exploitable · patch attached
01 / the volume problem

Code is written faster than anyone can read it

AI made writing code cheap. Reviewing it is still a person reading a diff, and that person's week did not get longer. Review capacity stayed flat while output went vertical, so review quietly turned into sampling.

The question is no longer whether you can find issues. It's which ones are worth an engineer's afternoon.

Volume

Agents merge in an hour what a team used to merge in a month. Every diff is a place a vulnerability can enter.

Latency

The annual pentest arrives once a year against a codebase that changes every day. Most of what it finds is already in production.

Noise

Scanners answer volume with more volume: hundreds of unranked alerts and no one to say which one matters.

Code generated vs. code reviewedper week
30k20k10k0 the unreviewed gap agent-written code review capacity is flat
Generated Reviewed by a human
Illustrative, not a measurement
02 / one pull request, start to finish

What happens to a diff between push and merge

Follow one real change through the four things Zolt does to it. Click a step, or walk through with Next.

01 · connectpr #482 · acme/api
githubacme/webreviewing
gitlabacme/apireviewing
bitbucketacme/adminpaused
priya-acme opened pull request #482 · "export reports per tenant" @zolt review 3 files · +41 −6
03 / integrations

Plugs into where your code already lives

Connect a repository in under two minutes. Findings show up where your team already works: the pull request, the ticket, the channel, the editor, the coding agent.

10+ Integrations
SOURCE
GitHub
Review comments, merge checks and one-click suggestions on every pull request.
review comments → merge gate
SOURCE
GitLab
Merge request notes and pipeline status, self-managed runners included.
pipeline status · your runner
SOURCE
Bitbucket
Pull request reports and build status for Cloud and Data Center.
pr report · build status
pull requests in ›‹ findings & fixes out
GitHubsourceGitLabsourceBitbucketsourceGitHub ActionsciAny CIci
JiratrackingLineartrackingSlackalertsClaude CodeagentsCopilotagentsAny agentagents
04 / made for code that agents write

The fix goes back to whatever wrote the bug

Most of the code Zolt reviews was written by a coding agent. So every finding ships with a prompt written for one: the file, the line, what is wrong, and what a correct fix looks like. Hand it over and the loop closes without anyone retyping anything.

Agent writes the changeClaude Code · Copilot · any agent Zolt reviews the PRsource to sink · exploitable? Prompt goes backfile · line · what · how to fix the diffthe prompt
zolt-securityPR #12
High · path traversal in invoice export · 95% confidence
Prompt for a coding agent
In src/routes/invoices.js around line 15, fix this path-traversal vulnerability: req.query.filename flows into path.join(config.uploadDir, filename) unvalidated. Use path.basename on the user-supplied name and reject any resolved path outside config.uploadDir. Keep the existing response shape.
Claude Code · acme/apiready
waiting for a prompt…
05 / why it is not a scanner

A scanner asks what the code looks like. Zolt asks where the data goes.

Static scanners match insecure code patterns. The pattern is real, but most matches are not reachable by anyone outside your team, and the scanner has no way to tell. Zolt starts from the input, follows it through the codebase, and reports only when it arrives somewhere an attacker could use.

A pattern scanner

Looks at each line on its own. If the shape matches a known-bad pattern, it alerts, and it does that twelve times on this PR.

src/routes/invoices.js 13router.get('/:id/export', auth, async (req, res) => {14 const filename = buildFilename(req.query.filename)15 const out = path.join(config.uploadDir, filename)16 fs.writeFile(out, pdf) pattern matched: path.join(<dir>, <variable>) nothing about where the variable comes from alerts emitted for PR #12 SQL injection?eval() usedSlow regexHard-coded secret?Insecure randomPath traversal?No rate limitOpen redirect?Proto pollutionOld crypto APIData in logsWeak TLS (dev) 12 alerts · 1 reachable · you find out which
Zolt

Starts at the input and follows it. Three places could have stopped the value; none did, so the finding is real and it is the only one posted.

req.query.filenamesource · set by the callerbuildFilename()invoices.js:14path.join()invoices.js:15fs.writeFile()sink · writes to disk ✕basename()?✕allow-list?✕validated? three checkpoints on the way · none of them stops the value Decision exploitable · path traversal · High · 95% confidence · 1 finding posted, with the path and the fix
pull requests in
GitHub
GitLab
Bitbucket

Every PR. Every host. One reviewer.

Zolt reviews every pull request on every host, then routes the finding — and the fix — to where your team works.

See all integrations
findings & fixes out
Slack
Linear
Claude Code

Pentest your app today

Set up in minutes. Instant results.

Run a pentest See pricing →