Skip to content
grayhat
Esc
↑↓navigate↵open⌘Jpreview
On this page

How it works

A persistent security index tells the hacker exactly what changed. It ranks what to attack, but never decides what to skip.

Every review runs the same four-stage loop. The first stage is deterministic code; the rest is an agent working inside a sandbox that holds your code and nothing else.

1. Index

ghh-index reads the repository without running it and records security facts: entry points and the guards on them, untrusted sources, dangerous sinks and the call paths between them, what each module is capable of, and supply-chain facts from lockfiles and CI config.

The index persists between runs. On a new commit it only re-reads changed files, so a review starts from a full map of the repo in seconds.

2. Diff

Instead of a raw text diff, grayhat compares the index before and after the change and ranks what moved in security terms:

{
  "kind": "guard_removed",
  "route": "GET /invoices/:id",
  "guard": "requireOwner",
  "reach": "authenticated",
  "rank": 0.97
}

A removed guard, a new route that reaches a sink, a dependency that gained network access: each becomes a first-class event at the top of the target list.

3. Hunt

An open-weight model with its refusal training removed reads the ranked targets and writes exploits for them: IDORs, broken auth, races, business-logic abuse. A second, skeptical pass throws out anything it can’t justify.

Then it boots your app in an isolated virtual machine and runs each exploit. A lead becomes a finding only if the attack works.

4. Fix

For each confirmed finding, grayhat writes a patch and re-runs two checks in the same sandbox:

Check Must be
The original exploit Failing
Your test suite Passing

Only then does the fix PR open. If either check fails, you still get the finding and its reproduction, without a patch.

Was this page helpful?