work / vibecheck

Vibecheck

Paste a GitHub repo, get a security report a non-engineer can actually act on — then one click opens a pull request that fixes the top issues.

Real static analysis finds the bug. The language model only translates it, and writes the fix. Never the other way round.

Status
Shipped · friends-only test mode
Live
vibecheck-delta-pink.vercel.app ↗
Stack
Next.js · FastAPI · Semgrep · Gitleaks · OSV · Claude · Upstash
Source
github.com/rushjais/vibecheck ↗

01  The problem

A generation of founders is shipping products built largely by AI coding agents, and a lot of that code goes to production without anyone who could recognise a hardcoded key reading it.

The existing tools do not help these people. Semgrep output assumes you know what a taint source is. The gap is not detection, it is translation.

Vibecheck runs the real scanners — Semgrep, Gitleaks, OSV — and uses an LLM only for the parts LLMs are good at: explaining what a finding means in business terms, and writing the patch. The model is never the thing deciding whether a vulnerability exists.

02  How it works

Repo URLpublic or privateNext.js APIrate-limit + queueScan engineshallow clone,read-only, size-cappedSemgrepGitleaksOSVraw_findingsclone deletedClaudededupe → top 8Reportplain English“Fix it for me” → opens a PRengine never executes the target repo
The engine clones and reads; it never runs the code it is scanning. Scanners are bounded subprocesses, the clone is deleted as soon as findings are written, and only then does an LLM see anything. Schematic — boxes illustrative, not to scale.

03  Scan some code

The heuristic pass, ported line-for-line from engine/app/scanners/heuristics_scanner.py and running in your browser. Paste code — this is the cheap regex layer that runs alongside Semgrep, Gitleaks and OSV, not a replacement for them.

heuristics_scanner · per-line rules · nothing executed

Deliberately lower-confidence: these are candidate findings. In the real pipeline an LLM dedupes everything down to the top eight and writes the plain-English explanation.

04  The parts that were actually hard

  • Never execute the target repository. A scanner that runs untrusted code is a remote code execution service with extra steps. Vibecheck only clones and reads, with size and file-count caps, and runs each scanner as a bounded subprocess.
  • Deduping to eight findings. Semgrep on a real repo returns hundreds of results, most of them noise to this audience. Ranking down to the eight that matter — and being willing to drop the rest — is most of the product.
  • Writing for someone who cannot read a stack trace. Each finding gets what is wrong, why it matters in real-world terms, and a copy-pasteable prompt for an AI coding agent to fix it.
  • Private repos without holding the keys longer than needed. Signed-in users connect GitHub and the engine clones with the user’s token, scoped to that scan.

Honest limits. Static analysis has a false-positive rate and this pipeline inherits it, then compounds it by having an LLM write confident prose about each finding. The auto-fix PR is a starting point that a human must review — I would not merge one unread, and the product should say that louder than it currently does. It is in free test mode with the billing code present but ungated.