Pruvo

For teams on self-managed GitLab

Merge request review you can prove, on your own GitLab.

Pruvo is a self-hosted GitLab bot for teams whose coding agents write most of the code. Every finding comes with an evidence line, and a finding it can't prove is never posted.

Your code can't leave your network. Your reviewers can't keep up.

AI review usually means someone else's cloud

If your GitLab is self-managed for a reason (compliance, customer contracts, security policy), sending every diff to a hosted reviewer is off the table. Pruvo runs next to your GitLab, and your code goes only to the model provider you configure, with your own key.

Agents write more code than people can read

When coding agents open most merge requests, a reviewer that guesses adds noise. Pruvo checks each finding before it posts it, and tells people what to check by hand and what is safe to skim.

How it works

  1. Install with Docker Compose

    Run docker compose up on your server, then a setup wizard: GitLab URL and bot token, model provider and key, projects, and a test on one merge request.

  2. Push a merge request

    On every push, Pruvo reads the diff, sorts files into skip, skim and deep, scores the risk, and analyzes the risky files with your model.

  3. Only proven findings are posted

    Each finding runs a deterministic evidence check, then a second verify pass. Unproven ones are dropped. The rest are posted inline, each with its evidence line.

What lands on the merge request

pruvo posted the summary card

High risk · 1 proven finding · 2 places to check manually

What changed and why

Adds percentage discounts to the checkout total and a coupon field to the cart.

Check manually

  • src/checkout/discount.ts lines 4–12, applyDiscount()
  • src/checkout/cart.ts lines 30–41

Safe to skim

src/checkout/strings.ts

Review cost $0.21 · slop flags: none

High correctness src/checkout/discount.ts:9

The discount can exceed the order total

A percentage above 100 makes the total negative; nothing clamps it before the payment call.

Evidence: src/checkout/discount.ts:9 in applyDiscount()

- return total - total * pct / 100;+ return total - total * Math.min(pct, 100) / 100;

An illustration of the summary card and an inline finding.

Why you can trust it

On every merge request

FAQ

Does it work with gitlab.com?

Yes. Self-managed GitLab comes first, and gitlab.com works too.

Which model providers does it support?

Anthropic first, with a base URL override for compatible endpoints. You bring the key; Pruvo never uses a key of its own for your reviews.

What leaves our network?

Calls to your GitLab and to your model provider, and package registry lookups for new dependencies (package names only, and they can be turned off). An anonymous precision stat is sent only if your admin opts in.

Is our code stored?

No. Code is held in memory for one review, or in a temporary clone that is deleted when the review ends, also when it fails. Pruvo keeps findings, which may quote a few lines, and metadata.

Does Pruvo run our code?

Not unless your admin turns code execution on. It is off by default; when on, type checks and tests run only in a sandbox container with no network, a read-only root and CPU, memory and time limits.

Does it replace human review?

No. It tells your reviewers what to check by hand and what is safe to skim, and they sign off each item, with an audit trail. It doesn't block merges.

Join the waitlist or ask for a free pilot

Tell us your GitLab URL and version, your team size, and whether you want a pilot now or a place on the waitlist. We reply by email.

Opens your mail app with a short message to fill in. Or write to hello@pruvo.dev.