Constant / provided by Bravos
Surface
How you and your team drive it.
- Terminal
- Dashboard
- MCP
- CI gate
- Team server
commandssetup doctor config dashboard mcp ci push
Bravos: whitebox pentesting, free to start
Point Bravos at a repository. It writes a threat model into your code with GuardLink, attacks a running copy of your app through Cert-X-Gen with real logins, and ends every threat confirmed, refuted or not tested, with the reason.
Bravos reads your brief and your repository, prints a plan you can argue with, then runs round after round until it can say why it stopped.
pipx install bravosFree, with no account. Python 3.11 or later. Install guide (opens in a new tab)
Bravos is a continuous SAST and whitebox pentest orchestrator. It is built on two open-source projects: GuardLink, threat model as code through code annotations, and Cert-X-Gen (CXG), pentest as code through executable templates in 12 languages.
Constant / provided by Bravos
How you and your team drive it.
commandssetup doctor config dashboard mcp ci push
Constant / provided by Bravos
The state every run reads and writes back.
commandsmodel annotate inspect ledger template graph diff sast
Constant / provided by Bravos
Where approved probes run.
commandsintake plan auto run round env replay resume
Changes over time / bring your own
Bring the coding agent you already use. Bravos calls it only at judgment points: annotation, lab recipes, goals and write-back.
Changes over time / bring your own
Your repository and the running target you are authorised to test.
flags--target --attestation
annotateintake · planrun · autoledger · replayci · diffNot a list of suspicions. Each result says what was attacked, as whom, and what happened.
Every threat ends confirmed, refuted, mitigation held or not tested, and each verdict carries its reason. A threat Bravos could not reach stays open instead of reading as clean. See a sample ledger
Each confirmed finding becomes an advisory written like a GitHub security advisory, with the exact Cert-X-Gen probe that proved it.
Confirmed findings become @confirmed annotations beside the vulnerable line, on a bravos/run branch with one commit per phase, so every round can be reviewed or reverted.
bravos ci judges a run’s ledger against the policy file in your repository: pass, warn or fail. It needs no target and no agent, and it is free.
A tool that folds “we could not reach the target” into “we found nothing” reports a cleaner app than it measured. Bravos keeps the two apart.
Only a confirmed or a clean probe moves a verdict. Timeouts, dead sessions and scans that stopped early leave the threat open.
Unauthenticated, mitigation audit, standard user, cross-tenant, admin and chained. Each round looks at the code from a different side.
A @mitigates annotation hides an exposure from the export. The mitigation-audit lens puts it back and asks whether the control actually holds.
An agent that writes @accepts halts the run, an unproven @mitigates is recorded as suppressed, and any edit that is not an annotation is reverted.
Bravos signs in with its own headless login and re-authenticates when a session expires. It pauses only when a login needs a person.
After several healthy rounds in a row find nothing new, when every lens is retired, or at a budget ceiling. The reason is recorded with the run.
A run keeps the probes it fired beside your code, in .bravos/sessions, with no secrets in them. After a fix, bravos replay fires the same probes at the same target. Nothing is generated again, so no AI runs.
The result goes back into the run's ledger. A probe that confirmed before and is refuted now closes the finding. A probe that could not run leaves it open.
# after the fix is merged $ bravos replay <run-id> # fire every stored probe again $ bravos replay <run-id> --threat gl-… # only the threats you just fixed $ bravos ci # judge the updated ledger
The Bravos extension puts the threat map and the verdicts beside your code, in the editor you already use. Free, and the same build everywhere.
Or open the Extensions panel (⌘⇧X on macOS, Ctrl+Shift+X elsewhere), search Bravos, and install. The identifier is bravos.bravos.
Bravos drives two open-source tools we build, and the template library they share.
GuardLink holds the threat model. Cert-X-Gen runs the probes. Bravos decides what to test next, as whom, and records what each test proved.