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.
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",
}
},
}) 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.
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.
- 01
Author the bot
Define one TypeScript file: the model, the file globs, and the review logic. Extend it with your own functions.
- 02
Bring your keys
Connect a GitHub App and a model provider. peep stores neither your code nor your keys — both stay with you.
- 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.
pr.token can be undefined on private repos — guard it before passing to scan(), or the run will throw.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.
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.
Keys live in your environment. peep never stores them, and never sees your code unless you ask us to host.
export default defineBot({
model(file) {
if (file.path.startsWith("src/auth"))
return "anthropic/claude-opus-4"
return "anthropic/claude-haiku-4"
},
}) 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
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
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.