AI code review
on every
pull request.
A reviewer that reads the diff, posts inline findings, and approves clean PRs. Config lives on your default branch — a malicious PR can’t loosen its own rules. Approves clean. Never requests changes.
Native to the tools your team already uses
Three steps from zero to first review
Install once. Commit a tiny config to your default branch. Open a PR.
Install the GitHub App
One-click install on the repos you want reviewed. Permissions scoped to Pull Requests, Checks, Issues, Contents and Metadata.
github.com/apps/destesiOpt in on the default branch
Drop a .destesi.yml with review.enabled: true. Lives on the default branch — a PR can’t loosen its own rules.
review.enabled: trueOpen a PR
Destesi posts a summary, batched inline findings, and a Checks API entry. Clean diff → auto-approves. Findings → comment-only.
queued → reviewing → donecfg.Output when…Talk back to the reviewer.
Reply to any inline comment with @destesi ignore, @destesi explain, or @destesi recheck. An ignored rule stays ignored across re-reviews — no bot commits, no ignore files.
No bot commits, no .destesi-ignore files cluttering your repo. The decision lives where it belongs: with the review record.
Designed to be trusted in production
Default-branch config
Rules are read from the default branch only. A PR’s edits to .destesi.yml are content to review — never policy in effect. Closes the prompt-injection loophole.
Approve on clean
Zero findings → the review is submitted as APPROVE. Findings → COMMENT. We never submit REQUEST_CHANGES — the Checks entry is the gate.
Persistent ignores
Say @destesi ignore once and that finding stays ignored — even after new commits trigger a fresh review. The decision lives with the review record, not in your repo.
Per-file failure isolation
Invalid LLM output for one file drops that file with reason review_failed. Other files continue. The review never fails just because one chunk was odd.
Severity matrix
Per-finding severity drives the Checks API conclusion via a configurable matrix. Block on error, warn on warning, advise on info.
Batched inline review
All findings ship in a single PR review — not N individual comments. Cleaner timeline, atomic notifications, easier to dismiss.
PR summary
A 2-3 sentence digest of what the PR does, posted as a summary comment alongside the inline findings. Re-renders on each new commit.
No duplicate reviews
Re-pushed commits and replayed webhooks don’t trigger duplicate reviews of the same change. @destesi recheck always re-runs when you ask.
Slack notifications
Reviews posted · reviews failed · PRs auto-approved. Configure per-workspace channel; opt out per repo via the same YAML config.
One YAML file. Lives on your default branch.
A second pair of eyes on every PR.
Catch the things humans miss when they’re tired. Keep the things humans care about. Free to start.