AI code reviews.
Right in your terminal.

A provider-agnostic, local-first CLI that reviews your staged changes, a historic range, or a whole GitHub pull request —before your colleagues do. Zero telemetry. No server.

Zero telemetry Local response cache Ten providers GPL-3.0
orbital-api — commitbrief --staged — 100×34
zsh
commitbrief --staged×
git status
● running

works with every provider you already pay for

Anthropic · Claude Opus 4.8 / Sonnet 4.6 / Haiku 4.5
OpenAI · GPT-5.5 / 5.4-mini / 5.5-pro
Google · Gemini 3.5 Flash / 3.1 Pro / Flash-Lite
DeepSeek · deepseek-chat / reasoner
Mistral · large / codestral
Cohere · command-r / command-a
Ollama · local, no API key
Claude Code CLI · subscription-backed
Gemini CLI · subscription-backed
OpenAI Codex CLI · subscription-backed
Anthropic · Claude Opus 4.8 / Sonnet 4.6 / Haiku 4.5
OpenAI · GPT-5.5 / 5.4-mini / 5.5-pro
Google · Gemini 3.5 Flash / 3.1 Pro / Flash-Lite
DeepSeek · deepseek-chat / reasoner
Mistral · large / codestral
Cohere · command-r / command-a
Ollama · local, no API key
Claude Code CLI · subscription-backed
Gemini CLI · subscription-backed
OpenAI Codex CLI · subscription-backed
// principles

Built like a real CLI.
Not a SaaS in disguise.

Four guarantees we won't compromise on. Read the source — it's~11k lines of Go.

01 · Privacy

Privacy-first & local-only

No telemetry, no analytics endpoint, no account. Config is plain YAML on disk. Pair with Ollama for a fully offline review loop — no API key, no network egress.

# ~/.commitbrief/config.yml
provider: ollama
providers:
  ollama:
    model: qwen2.5-coder:14b
output:
  lang: en
cache:
  ttl_days: 7
02 · Rules

Project rules in plain markdown

Drop a COMMITBRIEF.md next to your README. No DSL, no YAML schema — just the words you'd say in a code review, used as the system prompt.

# COMMITBRIEF.md
## Rules
- Block any new use of database/sql; use pgx.
- Flag log lines containing PII (email, phone).
- Prefer table-driven tests in _test.go.
03 · Cost

Engineered for cheap tokens

SHA-256 response cache skips reviews you've already run. Provider prompt caching (Anthropic, OpenAI, Gemini) cuts repeated input cost.--verbose tells you what you saved.

# commitbrief --staged --verbose./.commitbrief/cache
cachelocal cache hit0 mstokensin 1,840 · out 612 · provider cached: 1,400Saved$0.0042no call
# Saved: shown when the run was a local cache hit
04 · Providers

Truly provider-agnostic

Swap between ten providers — seven API backends plus subprocess wrappers around Claude Code, Gemini CLI, and OpenAI Codex — withcommitbrief providers use or per-run--provider. Keep an alternate configured so a 429 is one command away.

anthropicclaude-opus-4.8default
openaigpt-5.4-minicloud
geminigemini-3.5-flash1M ctx
deepseekdeepseek-chatlow-cost
mistralcodestral-latestEU
coherecommand-r-pluscompat
ollamaany local modeloffline
claude-clihost CLI subprocesssubscription
gemini-clihost CLI subprocesssubscription
codex-clihost CLI subprocesssubscription
// 90 seconds, total

From zero to first review
before your coffee finishes brewing.

Three commands. No browser tab. No "log in to your dashboard." Config lives in~/.commitbrief/config.yml.
1$ commitbrief setup

Pick provider, paste key

An interactive wizard cycles through Anthropic, OpenAI, Gemini, DeepSeek, Mistral, Cohere, and Ollama; pings the provider to confirm the key works.

┌─ commitbrief setup ──────────────────────────┐
? Pick a provider │
openai │
anthropic
gemini │
ollama (local) │
│ │
↑↓ move select ⌃c quit │
└──────────────────────────────────────────────┘
2$ commitbrief init

Optional: your own rules

Embedded defaults ship in the binary, so day-one runs work without this step. init writes COMMITBRIEF.md + an OUTPUT.md template you can edit.

┌─ COMMITBRIEF.md ──── 24 lines ─┐
# orbital-api review rules
 
## Critical
- No raw SQL outside /db
- Always wrap context
 
## Style
- Use slog, not log
3$ commitbrief

Review before you commit

Default scope is your staged diff. Reach any historic range via commitbrief diff <args>, or review a whole PR with commitbrief remote pr <id> — it posts inline comments and a verdict back to GitHub. Gate CI with commitbrief guard against a policy file, or expose the same review to an agent over MCP with commitbrief mcp. Output in terminal, plain markdown, or strict JSON.

~/repos/orbital-apicommitbrief
analyzing 4 files · cache: 3/7 hit
Critical
SQL injection in session.go:142
Medium
N+1 query in rank.go:78
Done in 4.7s · $0.0042
// measured, not claimed

It actually finds the bugs.
And stays quiet on the clean ones.

Scored against a 23-fixture known-answer corpus — 23 planted defects + 3 clean controls. Reproduce any row withmake eval-live.
securitycorrectnessconcurrencyresource-leakerror-handlingperformance
Model
Recall
dev · held
False positives
dev · held
Precision
dev · held
Runs
Claude Haiku 4.51.00 · 1.000.00 · 0.000.70 · 0.625
Claude Sonnet 4.61.00 · 1.000.00 · 0.500.68 · 0.483
Claude Opus 4.80.94 · 1.000.00 · 0.000.61 · 0.533
Gemini 2.5 Flash0.96 · 1.000.44 · 0.000.84 · 0.563
OpenAI GPT-4o0.85 · 1.000.44 · 0.330.79 · 0.753
Recall

Share of planted defects caught. Every model recalls the full held-out slice; even the cheapest, Haiku, misses none.

False positives

Findings landing on a clean-control line — flagging a benign change. Haiku and Opus stay silent on every control.

Precision

A conservative floor — many "extra" findings on these small diffs are legitimate secondary observations, not noise.

dev · held — about a quarter of the corpus is a held-out slice that prompt and corpus tuning never inspect, so a change that overfits the corpus (dev up, held-out flat) is visible rather than hidden. The two slices aren't difficulty-matched; the split exists to catch overfitting in future tuning, not for a direct dev-vs-held comparison. Captured 2026-05-29.

// commitbrief compress

Your rules file,
on a token diet.

Three embedded prompts rewrite COMMITBRIEF.md into a denser, equivalent instruction set. Backs up the original under.commitbrief/backups/, applies atomically, and refuses to overwrite when the result isn't actually smaller.

↳ shows tokens before/after + cost, asks [y/N], then overwrites in place. --out path writes elsewhere.
light
conservative trim
balanced
default
aggressive
maximum savings
denser, equivalent
before · COMMITBRIEF.md
verbose prose
1# Code Review Rules for orbital-api
2 
3Please review the changes carefully. Make sure
4to consider performance, security, and style.
5 
6## Security
7We have had issues with SQL injection in the
8past, so please flag any use of string
9concatenation when building queries. We prefer
10parameterized queries with the pgx library.
11 
12## Performance
13We run on small instances, so please flag any
14N+1 query patterns, unnecessary allocations in
15hot paths, and any blocking I/O in handlers...
16 
17## Style
18Use slog over the standard log package, prefer
19table-driven tests, and avoid global state...
after · balanced
same intent, fewer tokens
1# orbital-api review rules
2 
3SEC: flag string-concat SQL; require pgx params.
4PERF: flag N+1, hot-path allocs, blocking I/O.
5STYLE: slog over log, table-driven tests,
6 no globals.
// backup at .commitbrief/backups/COMMITBRIEF-<timestamp>.md

Catch the bug before
your colleague does.

One install. No account. Free forever — because it's open source.

Read the docs