Your Code, Your Model

Self-hosted AI Code Review agent on your infrastructure

Works with GitLab, Forgejo, and GitHub. Use your local model or any API you want.

Dashboard

Every review run, model, and connected repository in one place.

Integration

Plug into the Git host you already run.

Webhooks and host APIs connect your Git instance to Proval. Proval sends review context to the LLM endpoint you configure — all on infrastructure you control.

Git provider

  • GH

    GitHub

    GitHub App

  • GL

    GitLab

    Access Token

  • Fj

    Forgejo

    Access Token

Proval

Pv

Review Agent

Runs Agent loop

  • Dashboard :7900
  • Webhook :7901

LLM

  • Lc Llama.cpp
  • OA OpenAI-compatible
  • OR OpenRouter
  • An Anthropic

Gitea and Codeberg use the same Forgejo-compatible webhook and API path.

Public webhooks may need nginx or Caddy in front of Proval for HTTPS (TLS).

How agent works

One predictable path, shaped by the mode you pick.

Proval reacts to a repository event and follows the same flow every time. Pick a mode to see how it runs.

01

Load Context

PR Metadata
Git Diff
Existing code
02
Review

Deployment

Start with a small self-hosted deployment.

Proval is designed around a simple Docker-first path: run the service, connect your model, link repositories, and test a real merge request.

Open the Docker guide
docker-compose.yml
services:
    proval:
        image: ghcr.io/seoes/proval:latest
        ports:
            - "7900:7900"
            - "7901:7901"
        volumes:
            - ./data:/data
        environment:
            - ENCRYPTION_KEY=[Encryption Key]

Deploy in a minute with Docker Compose. Full setup guide

FAQ

A few practical answers.

Is Proval a replacement for Cursor, Copilot, or Claude?

No Those tools are strong agents on IDE(or Cli) for individual developers. Proval is a team review layer on your Git host. Reviews and replies appear on pull requests and issues, and you can choose any model API you want.

Does code leave our infrastructure?

Proval does not store your code. It only sends review context to the LLM endpoint you configure. Use a local model if you need to keep everything on your network.