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.
- Runs on your server with
docker compose up - Your own model key
- Code never stored
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
-
Install with Docker Compose
Run
docker compose upon your server, then a setup wizard: GitLab URL and bot token, model provider and key, projects, and a test on one merge request. -
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.
-
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
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.tslines 4–12,applyDiscount() src/checkout/cart.tslines 30–41
Safe to skim
src/checkout/strings.ts
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
-
Self-hosted
Install with
docker compose upon your own server, next to your GitLab. Caddy can serve it over HTTPS. -
Bring your own key
Pruvo calls the model provider you configure, with your key, only to review merge requests. Anthropic first, compatible endpoints too.
-
Code never stored
Diffs and files are held in memory for one review, or in a temporary clone deleted when it ends. Only findings and metadata are kept.
-
Your code isn't run
Code execution is off by default. Only if your admin turns it on do checks run, in a sandbox with no network and strict limits.
-
Precision first
A finding without a passing evidence check, or that the verifier calls unproven, is dropped and never posted.
-
No telemetry by default
The only telemetry is an opt-in, anonymous precision stat: counts per finding type, no code and no names.
On every merge request
-
Risk level
From paths, diff size and changed public APIs, tuned per repository in
.pruvo.yml. -
Slop flags
Duplicated functions, unused new code, new dependencies checked against the registry, weakened tests.
-
Your rules
A review contract read from the target branch: comment limits, tone, language, ignored paths, a spend budget.
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.