Opinionated AI code review for Forgejo, GitHub, and (soon) GitLab. Smoke when you're fast, Deep when it matters — and when you're done arguing, hand it the whole issue.
Free while in beta · No card required · Codaban reaches out when there's a spot.
auth/session.tsChanges requested
18export function refresh(token) {
19const user = decode(token)
19const user = await verify(token)
20return mint(user.id)
21}
CodabanDeep
decode() never checks the signature — so refresh() trusts any token that parses, and mint() issues a real session from it. That's your entire auth boundary, unsigned. The async cleanup is good; now do the same thing at middleware.ts:44, it still calls the old path.
Every review picks a lane. A quick gut-check on a typo fix shouldn't cost the same as a security audit — so it doesn't.
Smoke
Smoke
Quick pass · ~11s
A fast read of the diff for the obvious stuff — the sniff test before you merge. Cheap enough to run on every push.
Style, naming, dead code, obvious bugs
Runs in seconds, costs almost nothing
Set it as the default on every push
Deep
Deep
Thorough · ~78s
Doesn't just read the diff — it reads the code around it. Traces what your change touches, what it can break, and what was already broken before you got there.
Follows call sites and data flow across files
Finds what breaks, not just what changed
Security, correctness, edge cases
Agent
Agent
Plans & fixes · opens a PR
Hand it the whole issue. It plans the fix, writes the code, and opens a PR — then reviews that PR the way it would review yours. No grading its own homework.
Plans first, then implements end-to-end
Opens a real PR you can review
Reviews its own output — honestly — and iterates
“Smoke is me glancing over your shoulder. Deep is me pulling the thread until something unravels. Agent is me rolling up my sleeves because you clearly weren't going to.”
How it works
Open a PR. Codaban shows up.
No new tab, no copy-paste. Connect a repo once; reviews land as comments right where you already work.
01
Connect a repo
Install the GitHub App or link Forgejo in a click. Pick which repos Codaban watches.
02
Push or open a PR
Smoke runs on every push. Call in Deep when the change deserves it.
03
Read the review
Line-level comments with reasoning, not vibes. It tells you why.
04
Ask for a fix
Hand the issue to Agent. It plans the change, opens a PR, and reviews its own work.
Not a linter
It reviews like a person. Never a silent checkmark.
Codaban approves or requests changes — and tells you why either way. Every finding gets a write-up, a severity, and a suggested fix.
It takes a position. Approved or changes requested — a verdict, not a score you have to interpret.
Every review gets a write-up. What it looked at, what it found, and what you should do about it.
Findings come with fixes. Not just “this is wrong” — the suggested change, inline, ready to apply.
No silent pass. Even when everything passes, it writes up why — never a silent green tick in your checks list.
“If I'm going to block your merge, you deserve to know exactly why — and whether I actually care or I'm just being thorough.”
MajorBlocks the mergeCorrectness, security, data loss. decode() never verifies the signature — every session minted from it is forgeable.
MinorWorth fixing, won't blockReal but contained. retryWebhook() has no backoff cap — a dead endpoint ties up the worker for hours.
NitpickTake it or leave itNoted once, labelled honestly. fmtUser reads better as formatUser — your call, not a hill to die on.
VerdictChanges requested · 1 major, 2 minor, 1 nitpickThe summary lands on every PR — even when everything passes and the verdict is just “approved, nothing to flag.”
The dashboard
One number that matters: reviews left this month.
Usage is counted in reviews, not tokens. Your team sees what ran and what it found — nobody has to think about cost before asking for a second look.
app.codaban.dev/overview
Overview
“A third of the month's reviews, gone. Pace yourself — or don't, upgrades exist.”
Pro plan
$49 / month · renews Aug 1
Resets in 6 days
Aug 1, 2026
142/ 300 reviews
Smoke · 96Deep · 34Agent fixes · 121 review = 1 unit · all engines pooled
Reviews used
142
this billing cycle
Remaining
158
of 300 included
Avg / day
6.8
last 21 days
Repos active
4
reviewing this month
Reviews over timecount · per day
Reviews / daypeak 11 · Jul 18
Recent activitywhat ran · no cost shown
Repo
PR
Mode
Outcome
When
acme/web
#482
Deep
Changes requested
2h ago
acme/api
#217
Smoke
Approved
5h ago
acme/web
#479
Agent
Approved
1d ago
acme/mobile
#58
Smoke
Approved
1d ago
acme/infra
#133
Deep
Commented
2d ago
Members never see USD, tokens, model names, or per-repo cost. Usage is expressed only as reviews against the plan.
“One number that matters: reviews left this month. No token math, no surprise invoice — and no cost anxiety for your team.”
app.codaban.dev/reviews
Reviews
“Sorted by how much they annoyed me. More or less.”
Recent pull requests97 this period
PR
Mode
Outcome
Author
Findings
Reviews used
Last review
#412
Rotate refresh tokens on reuse
acme/api-gateway
Deep
Changes requested
m.okonkwo
1 major · 3 minor
2
07-24 14:02
#411
Bump pino to 9.x
acme/api-gateway
Smoke
Approved
dependabot
none
1
07-24 11:38
#87
Fix N+1 in workspace member loader
acme/billing-svc
Agent
Approved
codaban[bot]
none
3
07-24 09:15
#209
Add webhook retry with backoff
acme/web
Deep
Commented
s.varga
2 minor
1
07-23 17:44
#408
Extract rate limiter into middleware
acme/api-gateway
Smoke
Changes requested
j.reyes
1 nitpick
1
07-23 15:20
#63
Migrate invoices to decimal amounts
acme/billing-svc
Deep
Approved
l.fischer
none
2
07-23 10:07
Showing 6 of 97Next ›
“Every PR I touched, what mode ran, what I decided, and how many reviews it used. Click one to see my reasoning.”
app.codaban.dev/reviews/412
‹ Back to reviews
GitHub / acme/api-gateway
#412 Rotate refresh tokens on reuse
by m.okonkwoDeep2 iterationsChanges requested
“Hold on — I found something you'll want to fix.”
Review timelineDeepdescription (junior) → agentic review (senior, with repo tools)
Verdict: changes requested — 1 major, 3 minor. Blocking: decode() never verifies the signature — refresh() trusts any well-formed token, mint() issues a real session from it. The fix is incomplete: middleware.ts:44 still calls the old path.
“Every prompt I sent, every file I opened. No black box — if I got it wrong, you'll see exactly where.”
Agent mode
The only reviewer that does the work — then reviews it honestly.
Most tools stop at “here's what's wrong.” Codaban takes the issue from there: plans the change, implements it across files, opens a real PR. Then it reviews that PR with the same eye it uses on yours — and iterates until the review passes.
“I don't trust my own first draft. So I review it like someone else wrote it.”
1
Reads the issue and the codebase
Understands what you're asking and how the code fits together.
2
Plans the change
Decides what to touch and why before writing a line.
3
Implements & opens a PR
Writes the code across files and pushes a reviewable PR.
4
Reviews its own PR — honestly
Runs a full review on its own output and iterates until it passes.
Honest pricing
One account. Every repo. No per-seat tax.
You pay for the reviews Codaban runs — not for the number of people who can log in.
Unlimited repositoriesConnect as many repos as you want. No caps.
Unlimited users, one priceAdd the whole team. The price doesn't change.
No forced per-org billingUse it personally or as an org. Org billing is there when you want it, not before.
No rate limits on reviewsPush all day. Every PR gets reviewed — no throttling, no queue.
Draft pricing · not final
Steady
$19/ month
75 reviews / mo
A steady stream of PRs. Same reviewer, same modes, unlimited seats and repos.
Busy
$49/ month
250 reviews / mo
A team shipping every day. Nothing extra to unlock — just more reviews.
Relentless
$99/ month
600 reviews / mo
Many repos and heavy use of Deep and Agent. One bill, one pool.
Every plan is the same product: all three modes, unlimited people, unlimited repos, no throttling. Pick the one that matches how much you ship — switch whenever that changes.
Free during beta
Free while in beta
None of this is final — it's our current thinking. A flat monthly fee with a pooled review allowance, so nobody on your team weighs a Deep review against the budget. Numbers will move before launch. Beta teams get founder pricing regardless. Tell us if the model is wrong.
1 review = 1 unitSmoke, Deep, and Agent all pooledMonthly fee, no metering
Closed beta · by invite
Make your case for an invite.
We're letting teams in a few at a time. Drop your email and Codaban reaches out when there's a spot — and takes it from there.
“I'm picky about code. I'm pickier about who I review it for. Make your case.”
Request an invite to the closed beta.
No spam. We'll reach out when there's a spot. By requesting access you agree to the Terms of Use and Privacy Policy.
Request received.“I'll take a look. No promises.”
The irony.“I've lost the database — your request didn't land. I've already told the humans. Give it a minute and try again.”
decode()never checks the signature — sorefresh()trusts any token that parses, andmint()issues a real session from it. That's your entire auth boundary, unsigned. The async cleanup is good; now do the same thing atmiddleware.ts:44, it still calls the old path.