Verdict memory for vulnerability triage

Your scanners will change.
Your verdicts won't.

VerdictGit stores every triage decision as a human-readable YAML file in your own git repo — then auto-applies those decisions to every future scan, from any scanner, forever. Dismiss a false positive once; it stays dismissed through every migration, renewal and re-scan.

4.5s to ingest 100,000 findings, end to end
0 wrong auto-applies on the public benchmark corpus
100% offline — verdicts never leave your network
verdictgit — the film · 0:21 · 1080p
The film, in 21 seconds: triage once — every future scan inherits the decision. The console itself is below, in How it works.

Works with the scanners you already run

Trivy Grype OSV-Scanner Semgrep SARIF Snyk export · SARIF Jira two-way sync

Native report formats for Trivy, Grype and OSV-Scanner; SARIF 2.1.0 for everything else. If a scanner can export it, VerdictGit can remember your verdicts on it.

The problem

Every scanner change re-opens
every old argument.

Your team has already decided most of these findings. The decisions just live in the wrong place — inside a tool you won't keep.

The migration tax

Switch scanners — or let one change its pricing, terms or roadmap — and every false positive, every accepted risk, every "we already looked at this" evaporates. Your team re-triages thousands of findings from a blank page, for weeks.

Verdicts held hostage

In every incumbent platform, your triage history is a feature of their database. An export button is not a memory: it gives you a spreadsheet, not decisions that keep applying themselves to tomorrow's scans.

The knowledge walks out

Ask why a finding is still open and the honest answer is often a person — the engineer who investigated it in March, who left in June. When verdicts live in tickets and heads, audits take days. When they live in git, they take seconds.

How it works

Triage once. Every future scan
inherits the decision.

01

Ingest any scanner's report

Point VerdictGit at a Trivy, Grype or OSV-Scanner report — or any SARIF 2.1.0 export. Findings are canonicalised against a local OSV alias snapshot, so the same vulnerability is recognised no matter which scanner, or which ID scheme, reported it.

  • Native JSON for Trivy · Grype · OSV-Scanner, SARIF for the rest
  • Damaged reports fail loudly — never a silent empty queue
  • 100,000 findings ingested in 4.5 seconds, fully offline
Delta — what changed in this run
VerdictGit delta view for a Trivy run, grouping findings by disposition and counting auto-applied, suggested, resurfaced and orphaned verdicts
02

Decide once — with a reason, in git

Mark a finding false positive, confirmed, or accepted-risk with an expiry. The verdict is written as a readable YAML file and committed to your repository, under your name, with your reasoning. Click any applied verdict and VerdictGit shows its evidence: the match basis, the version check, the history, the commits.

  • Reason required — the audit trail is the product
  • Bulk verdicts land as a single commit
  • Every verdict reviewable as a pull request
Finding — match evidence & history
Finding detail in VerdictGit showing why a verdict was auto-applied: identical canonical ID, version check, the verdict's reason and author, and the git commits that recorded it
03

It applies forever — carefully

Every new scan is reconciled against your verdict store before a human sees it. Matches are tiered: only EXACT matches auto-apply. Anything less certain arrives as a suggestion for one-click confirmation, expired accepted-risks resurface on schedule, and a verdict can never silently land on the wrong finding.

  • EXACT applies automatically — PROBABLE asks first
  • Accepted risks resurface the day they expire
  • 0 wrong auto-applies on the benchmark corpus
Settings — licence & CI tokens
VerdictGit settings showing the signed-in admin, the offline licence status and CI ingest tokens
Migration mode

Switching scanners?
Take your verdicts with you.

Run both scanners in parallel and VerdictGit reports exactly how much of your triage history carries over — before you sign, renew or cancel anything.

80.0% of verdicts earned on Trivy carried over to Grype in the run below — 3 applied automatically, 1 flagged for confirmation, 1 honestly lost (an expired accepted-risk, resurfaced for re-triage instead of silently reused).
  • Carried (EXACT) — same canonical finding; the verdict applies itself.
  • Carried with confirmation — alias evidence is strong but not exact (e.g. a multi-CVE advisory group); a human confirms in one click.
  • Lost — no counterpart, or the verdict expired. Reported, never papered over.

On the full benchmark corpus, cross-scanner matching recall measured 97.8–100% depending on direction — with zero verdicts ever applied to the wrong finding.

verdictgit migrate-report — real output
$ verdictgit migrate-report --from trivy --to grype

COVERAGE: 80.0% of verdicts earned on trivy carry over to grype (4 of 5)
  from run: 0fab7c6354e971bfe6473ef8 (trivy, 180 findings)
  to run:   c5b4b2f4900ace8e140d335f (grype, 180 findings)
  verdicts considered:              5
  carried (EXACT auto-apply):       3
  carried with confirmation (PROBABLE): 1
  lost (no counterpart):            1
  carried_with_confirmation    7cfc6738ce3c CVE-2023-4863 in pkg:pypi/pillow@8.2.0 — alias group contains multiple CVEs — confirm the verdict covers this advisory
  carried                      8f3d0b37ddb7 CVE-2020-28500 in pkg:npm/lodash@4.17.20
  carried                      969fbc7a6530 CVE-2021-23437 in pkg:pypi/pillow@8.2.0
  carried                      bd199246c4b1 CVE-2021-23337 in pkg:npm/lodash@4.17.20
  lost                         cc67cf367f05 CVE-2021-31542 in pkg:pypi/django@3.2.0 — accepted_risk expired before the target run — resurfaces for re-triage instead of carrying

Unedited output from a real run on the benchmark corpus that ships in the product's test fixtures — the same Trivy and Grype reports, five verdicts written against Trivy. No staging, no mock data: reproduce it yourself.

Security & privacy

Built for the teams who
read egress reports for fun.

VerdictGit is bought by security teams, so it is engineered to survive their review — starting with the fact that there is no VerdictGit cloud.

Self-hosted, single binary

One 19.6 MB binary for Linux, macOS or Windows — console included, no runtime dependencies, no agents phoning home. Run it on a small VM inside your network, or fully air-gapped with a local OSV snapshot.

Your git is the database

Verdicts are YAML files in a repository you own, in an open, documented format. If VerdictGit disappeared tomorrow, you keep every decision, every reason, every author — readable by humans and by any tool that reads YAML.

Zero egress by default

The product can print its complete network inventory: verdictgit egress-report. On a default install it lists zero destinations. Your findings data has nowhere to go, because there is no vendor server for it to go to.

Offline licence keys

Licences are signed Ed25519 keys, verified locally — no activation servers, no telemetry. And enforcement is never hostage-taking: reads, history and exports always work; only new verdict writes pause, after expiry plus a 30-day grace period.

Everything included

One product. One tier.
No governance paywall.

The features enterprise platforms charge extra for — SSO, audit, access control — are simply in the product, at every price.

Cross-scanner alias matching

CVE, GHSA, PYSEC, vendor IDs — canonicalised through a local OSV snapshot so a verdict follows the vulnerability, not one scanner's naming.

Conservative match tiers

EXACT auto-applies. PROBABLE becomes a suggestion with its evidence attached. CONFLICT goes to a human. A wrong silent apply is treated as the worst failure this product can have.

Expiry resurfacing

Accepted risks must carry an expiry date. When it passes, the finding resurfaces in the queue automatically — via the built-in scheduler or a one-shot cron run.

Jira two-way sync

Confirmed verdicts become Jira issues; when an issue closes as Done, VerdictGit proposes the verdict — a human approves before anything is written. Sync never silently authors a decision.

Bulk verdicts, one commit

Select fifty findings, give one reason, land one auditable commit. The five-second path from "we know this one" to "it never bothers us again".

Audit history from git

Every verdict is a commit: author, timestamp, reason, evidence. Answer "why is this still open?" with a link, not a week of archaeology — and export the whole history for auditors as a self-contained bundle.

OIDC SSO & roles

Sign in through your identity provider with just-in-time provisioning; admin, triager and viewer roles; local admin retained as break-glass. Included, not an enterprise add-on.

Open format, proprietary engine

The verdict format is an open specification with a published JSON Schema — your exit is guaranteed by design. The matching engine is the product you pay for.

Specifications

The numbers, before you ask.

Downloads, system requirements, input formats, the security model and the licensing states — everything a serious evaluation asks, on one page.

~8 MB download per platform — one static binary, console embedded
4.5s to ingest 100,000 findings on a 4-core VM, fully offline
0 network destinations on a default install — no cloud, no telemetry
194 packages in the published SBOM, with checksums + Ed25519 signature
Linux x86-64 · 8.1 MB Linux ARM64 · 7.4 MB macOS Intel · 8.2 MB macOS Apple Silicon · 7.5 MB Windows · 8.2 MB Docker image · 19.8 MB
Pricing

Flat price. No meters.
No surprises at renewal.

No per-seat, per-scan or per-finding arithmetic — the pricing-model unpredictability that drives teams off other platforms is the thing we refuse to ship.

Standard

$349/ month

The complete product for one company — every feature, every scanner, governance included.

  • Complete product — no feature tiers
  • Unlimited findings, scans and verdicts at your install
  • SSO, roles and full audit history included
  • Jira sync, migration mode, auditor export included
  • Flat per company — no per-seat or per-scan meters
  • Stop paying and your verdict files remain yours, readable forever
Start with Standard

Prefer annual? Standard is also available as a yearly licence key — same flat logic, issued the same offline way.

FAQ

Asked by every AppSec lead.
Answered straight.

No. VerdictGit is a self-hosted binary that runs inside your network. There is no VerdictGit cloud and no telemetry. Run verdictgit egress-report on your install and it prints every network destination the product can talk to — on a default install, that list is empty.

Your team's triage decision on a finding: false_positive, confirmed, accepted_risk (always with an expiry date), fixed, duplicate_of or needs_review — stored with a mandatory reason, the author's identity and the date, as a human-readable YAML file committed to your git repository.

Trivy, Grype and OSV-Scanner through their native report formats, plus anything that exports SARIF 2.1.0 — including Semgrep and Snyk exports. Jira is supported as a two-way sync: verdicts out, human-approved proposals back in.

Nothing. The verdict files live in your repository, in an open format with a published schema. Reads, history and auditor exports always work — even with an expired licence, only new verdict writes pause, and only after a 30-day grace period. Founding licences are one-time, so there is nothing to lapse in the first place.

Because git is the audit system your engineers already trust: immutable history, named authors, review by pull request, and backups you already have. The verdict format is deliberately open — the format is the guarantee, the matching engine is the product.

Those are scanners and platforms: they find vulnerabilities, and your triage history lives inside their cloud, on their terms. VerdictGit is not a scanner at all — it is the memory layer above whichever scanners you run, keeping the history in your repo so the scanner underneath becomes replaceable. Keep your scanner. Lose the lock-in.

A one-time payment of $999 for a lifetime licence for your company: the complete product, all future updates included, delivered as a signed offline licence key. It is limited to the first 50 companies — when the cohort fills, Standard ($349/mo) is the only way in.

Download one binary (Linux, macOS, Windows) or run the container image, point it at a git repository and a data directory, and ingest your first report — about ten minutes, end to end. It runs happily on a small VM and works air-gapped with a local vulnerability snapshot.

Contact

Founding enquiries

Founding licences are issued personally, not through a web store. Here is exactly how it works — three steps, no sales call.

01

Write to us

Tell us your company name and which scanner you run today. That is all we need to start.

02

We run your free verdict-coverage check — together

We run VerdictGit's migration report on two of your own scanner reports, with you, and show you exactly how many of your past verdicts would carry over. Your reports never leave your network — the check runs on your machine, in your environment.

03

Invoice + signed lifetime key delivered

If the numbers convince you, our payment provider invoices you, and your signed lifetime licence key is delivered. Install takes about ten minutes — and the 30-day money-back guarantee starts the day your key arrives.

Founding cohort opens with the first announcement — the enquiry address will be published here.

Decide it once.
Never triage it again.

Join the founding cohort: $999 once, a lifetime licence, every update included — for the first 50 companies only. Founding licences are issued personally, as signed offline keys — no store, no account, no sales call.