self-hosted code review

the code reviewer tailored for you

peep is a framework for code-review agents. Author a bot in one TypeScript file, run it on your own hardware, and bring your own GitHub App and model keys.

  • Self-hostable
  • Your keys, your models
  • MIT licensed
peep.config.ts
import { defineBot } from "peep"

export default defineBot({
  name: "strict-bot",
  model: "anthropic/claude-sonnet-4",
  provider: "openrouter",

  // review only what matters
  include: ["src/**/*.ts"],
  exclude: ["**/*.test.ts"],

  review(pr) {
    return {
      blockOn: ["security", "correctness"],
      tone: "direct",
    }
  },
})
how it works

Your review bot. Your rules. Your hardware.

Existing review bots are opinionated and one-size-fits-all. peep is the opposite: a small framework you extend, so the bot fits your codebase instead of the other way around.

One config file

A bot is a single TypeScript file. Define the model, the file globs, and the review logic. Extend it with your own functions.

Bring your own keys

Connect a GitHub App and a model provider — OpenRouter, or any API you control. peep stores neither your code nor your keys.

Run it anywhere

Self-host the bot on your own hardware. Or hand it to us to host — same bot, your choice, no lock-in.

Unopinionated

No baked-in style guide, no forced workflow. peep gives you the framework; the taste is yours to encode.

from clone to first review

Three steps to a roosting bot

No dashboard to learn and no platform to adopt. The whole loop lives in your repo and your infrastructure.

  1. 01

    Author the bot

    Define one TypeScript file: the model, the file globs, and the review logic. Extend it with your own functions.

  2. 02

    Bring your keys

    Connect a GitHub App and a model provider. peep stores neither your code nor your keys — both stay with you.

  3. 03

    Point it at a repo

    Open a PR and the bot reviews the diff inline. Block on the rules you set, in the voice you configured.

strict-bot reviewed #482 · add token guard 1 blocking
11 export function review(pr: PR) {
12 - return pr.files.map(scan)
12 + const token = pr.token
13 + return pr.files.map(f => scan(f, token))
14 }
strict-bot blocking just now
pr.token can be undefined on private repos — guard it before passing to scan(), or the run will throw.
reviews that read like your best reviewer

Inline comments, on the exact hunk

peep posts inline comments on the diff, blocks on the rules you set, and suggests concrete changes — in the voice you configured.

  • Inline & threaded — comments land on the exact hunk, with suggested edits you can commit.
  • Blocks on your rules — fail the check only on what you decide is blocking.
  • Models you pick — swap providers and models per bot, no redeploy of peep itself.
models & providers

You choose the model. Per bot.

peep is provider-agnostic. Point a bot at OpenRouter, at a first-party API, or at anything that speaks the OpenAI protocol. Run a cheap model on docs and a strong one on security-critical paths — set it per bot, no redeploy.

OpenRouterAnthropicOpenAIGoogleGroqTogetherany OpenAI-compatible API

Keys live in your environment. peep never stores them, and never sees your code unless you ask us to host.

route by path
export default defineBot({
  model(file) {
    if (file.path.startsWith("src/auth"))
      return "anthropic/claude-opus-4"
    return "anthropic/claude-haiku-4"
  },
})
deploy

Self-host it, or let peep host it

The same bot runs both ways. Start on your own hardware and hand it over later, or the reverse — there's no lock-in either direction.

Self-hosted

Run the bot on your own hardware. Your code and keys never leave your network. peep is just the framework it runs on.

  • Code stays in your network
  • Bring your own GitHub App
  • Free and MIT licensed
Self-hosting guide

Hosted by peep

Hand us the same config and we run it for you — managed updates, no infrastructure to maintain. You still bring your own model keys.

  • Managed runtime & updates
  • Same config, no rewrite
  • You keep your model keys
See pricing

Give your bots a place to roost

Clone the framework, write one config file, and point it at a repo. Self-host it, or let peep host it for you.