Local AI code reviewer for GitHub and BitBucket PRs — uses Claude or Gemini CLI to review pull requests and post structured comments
Project description
reviewd
The review daemon — local AI code reviewer for GitHub and BitBucket pull requests, powered by Claude Code / Gemini CLI subscriptions.
- Watches your repos for new PRs, reviews them using Claude or Gemini CLI, and posts structured comments
- All from your machine — no CI pipeline, no cloud service, no new accounts
- Secure by default — can only access repos you already have locally, as secure as your machine
If you already have
claudeorgeminiCLI and local git clones, you're 5 minutes away from automated code reviews.
Features
- Reuses what you already have — your local git repos, your Claude/Gemini CLI subscription, your existing credentials. Nothing new to install or pay for.
- Full codebase context — reviews run on your actual local repos, not shallow CI clones. The AI can read any file, follow imports, and understand the full picture.
- Fast via git worktrees — isolated checkouts that share
.git. No re-cloning. Reviews start in milliseconds. - Runs real commands — configure linters, type checkers, and test suites to run during review. Failures are included in the AI's analysis.
- Structured output — severity-tagged findings with inline comments on specific lines and a summary comment.
- Daemon or one-shot — background polling across all repos, or single PR reviews on demand. Dry-run mode to preview.
- Multi-repo, multi-AI — different repos can use different AI backends, models, and review instructions.
- Smart re-reviews — new commits on a PR trigger a fresh review; old comments are deleted automatically.
- Draft-aware — skips draft PRs by default. Add
[review],[claudiu],[ask], or[bot review]to the title to request a review anyway. - Critical tasks — optionally creates a BitBucket PR task on critical findings to block merge.
- Spam protection — configurable diff size thresholds, cooldowns, and title/author skip patterns.
Quick Start
1. Install
git clone https://github.com/simion/reviewd.git
cd reviewd
uv tool install -e .
Requires Python 3.12+ and uv. You also need claude or gemini CLI installed and authenticated.
2. Configure
reviewd init # creates ~/.config/reviewd/config.yaml
GitHub setup
- Create a Personal Access Token with the
reposcope. - Export it:
export GITHUB_TOKEN=ghp_... - Config:
github:
token: ${GITHUB_TOKEN}
repos:
- name: my-repo
repo_slug: owner/my-repo
path: ~/repos/my-repo
provider: github
BitBucket setup
- Create an App Password with Pull requests: Read and Write.
- Export it:
export BB_AUTH_TOKEN=ATCTT3x... - Config:
bitbucket:
your-workspace: ${BB_AUTH_TOKEN}
repos:
- name: my-project
path: ~/repos/my-project
provider: bitbucket
workspace: your-workspace
Both providers can be used in the same config.
3. Review
reviewd pr my-project 42 # one-shot
reviewd pr my-project 42 --dry-run # preview
reviewd watch -v # daemon mode
How It Works
Poll API → Check State (SQLite) → Fetch & Worktree → AI Review (Claude/Gemini) → Parse JSON → Post Comments → Cleanup
- Fetches open PRs from GitHub/BitBucket
- Skips already-reviewed commits, drafts, cooldowns, and small diffs
- Creates a git worktree, runs configured test commands
- Invokes the AI CLI with a structured prompt and JSON output schema
- Posts inline comments + summary comment, tracks state in SQLite
Configuration
Global (~/.config/reviewd/config.yaml)
poll_interval_seconds: 60
github:
token: ${GITHUB_TOKEN}
bitbucket:
your-workspace: ${BB_AUTH_TOKEN}
other-workspace: ${OTHER_BB_TOKEN}
cli: claude # or "gemini"
# model: claude-sonnet-4-5-20250514
# review_title: "Code Review by Nea' ~~Caisă~~ Claudiu"
# footer: "Automated review by ..."
# skip_title_patterns: ['[no-review]', '[wip]', '[no-claudiu]']
# skip_authors: []
instructions: |
Be concise and constructive.
Every issue must include a concrete suggested fix.
repos:
- name: gh-backend
repo_slug: owner/gh-backend
path: ~/repos/gh-backend
provider: github
- name: bb-frontend
path: ~/repos/bb-frontend
provider: bitbucket
workspace: your-workspace
cli: gemini
model: gemini-2.5-pro
Per-project (.reviewd.yaml in repo root)
instructions: |
Python 3.12+, Django 5.x.
Check for missing select_related/prefetch_related.
test_commands:
- uv run ruff check .
- uv run pytest tests/ -x -q
skip_severities: [nitpick] # options: critical, suggestion, nitpick, good
inline_comments_for: [critical] # rest goes in summary
# max_inline_comments: 5 # skip all inline if exceeded
# min_diff_lines: 0 # initial review threshold (0 = disabled)
# min_diff_lines_update: 5 # re-review threshold for pushed commits
# review_cooldown_minutes: 30
# approve_if_no_critical: false
# critical_task: true # create PR task on critical findings (BitBucket)
CLI Reference
reviewd init # create config file
reviewd ls # list repos and open PRs
reviewd watch -v # daemon mode
reviewd watch -v --dry-run # preview, no posting
reviewd watch -v --review-existing # review not-yet-reviewed open PRs
reviewd pr <repo> <id> # one-shot review
reviewd pr <repo> <id> --force # re-review (bypasses draft/skip)
reviewd status <repo> # review history
Architecture
- Polling, not webhooks — no tunnel or public endpoint needed
- Git worktrees — near-instant isolated checkouts
- Full AI tool access — the AI reads files, runs commands, explores code
- JSON schema — structured findings, the tool just parses and posts
- SQLite state — tracks
(repo, pr_id, commit)to avoid duplicates - Provider abstraction — GitHub and BitBucket, extensible
Security
reviewd gives the AI CLI full tool access in git worktrees on your machine. Only watch repos where you trust the contributors.
Disclaimer
This project is 100% vibe-coded — written entirely through AI-assisted development with Claude Code. Why is that fine? It's a read-only tool that posts PR comments. The worst it can do is post a bad review.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reviewd-0.1.0.tar.gz.
File metadata
- Download URL: reviewd-0.1.0.tar.gz
- Upload date:
- Size: 44.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a84baec30d2a146c6eff1ddddcd15b5207c540baa7b8c186506c32b987fab804
|
|
| MD5 |
8fa3bc5c13c8c1df160047fe421f7629
|
|
| BLAKE2b-256 |
b40ef0adef0071fc0d6dc5956363bd7e17432a036063af4533e39aa2160bc409
|
File details
Details for the file reviewd-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reviewd-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97ccbb9ba0baffffcf25b7f5f2f780a1eda2ad6b48f6c5aff3fcf5878093ae9d
|
|
| MD5 |
4b2b878c1b2f3552b85f2b579a670e82
|
|
| BLAKE2b-256 |
da62aa9ec90c773686d114f108c5e2b6d8e6519f798d049ef69e80ad9c9c17a7
|