Code review is one of the highest-leverage uses of Claude Code. A thorough review of a 300-line PR that normally takes 30-45 minutes happens in under 5 minutes — and Claude finds bugs that human reviewers miss because it reads the full codebase context rather than just the diff.
This guide covers code review workflows: reviewing your own code before pushing, automated PR review setup, security-focused review, and architecture review for larger changes.
Why Claude Code for Code Review
Human code review has a real fatigue curve — reviewers find bugs in the first 100 lines at high rates, then miss things increasingly past that. Claude Code doesn’t have reviewer fatigue. It reads the full diff plus context files at the same quality whether it’s line 5 or line 305.
More importantly, Claude Code does something human reviewers often skip: it reads the code the diff touches, not just the diff itself. If you change how a function processes user input, Claude checks all the callers of that function, not just the change.
Pre-Push Self-Review
Before pushing, have Claude review your own changes:
Review my staged changes (the output of `git diff --cached`).
Look for:
1. Bugs — logic errors, edge cases, null pointer risks, off-by-one errors
2. Security issues — injection risks, auth bypass, data exposure
3. Performance problems — N+1 queries, unnecessary loops, missing indexes
4. Code quality — dead code, wrong naming, overly complex logic
5. Missing error handling
Be specific about file and line. Only flag real issues — not style nits.
The “only flag real issues” instruction matters. Without it, Claude will include style comments alongside critical bugs, and you’ll start ignoring the output. If you want style feedback too, ask for it separately.
For even faster pre-push reviews, add this as a git hook — automatically trigger the review on git commit and show the results before the commit completes.
PR Review Automation
For teams, setting up Claude Code to review PRs automatically is high-value work. The basic setup via GitHub Actions:
# .github/workflows/claude-review.yml
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get diff
run: git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff
- name: Claude Review
run: |
claude --no-interactive "
Review this PR diff and provide code review feedback.
Focus on: bugs, security issues, missing error handling.
Skip style comments.
Diff: $(cat /tmp/pr.diff)
" > /tmp/review.txt
- name: Post comment
uses: actions/github-script@v7
with:
script: |
const review = require('fs').readFileSync('/tmp/review.txt', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## Claude Code Review\n\n${review}`
});
For a more sophisticated setup with GitHub Actions and CI/CD, see the CI/CD guide.
Security-Focused Review
Security review is where Claude Code’s full codebase context matters most. With a security focus:
Do a security review of the changes in this PR.
Context: this is a multi-tenant SaaS — every query must filter by organization_id.
Check for:
- SQL injection (we use raw queries via pg in some places)
- Missing tenant isolation (queries that don't filter by org_id)
- Authentication bypass (endpoints that should require auth but don't)
- Sensitive data in logs or error messages
- IDOR vulnerabilities (using user-controlled IDs without ownership checks)
Diff: [paste diff]
Claude reads both the diff and the files it touches to look for patterns like:
SELECT * FROM orders WHERE id = $1withoutAND organization_id = $2- Error messages that expose internal system details
req.params.idused directly in queries without checking if the user owns that resource
This is the kind of review that’s hard for humans to do consistently — it requires holding the whole data access pattern in mind while reading individual changes.
Architecture Review
For larger changes, architecture review is valuable:
Review this PR from an architecture perspective.
The PR adds a new payments module.
Questions to answer:
1. Does this follow our existing module pattern (handlers → services → repositories)?
2. Is there anything that should be abstracted that isn't?
3. Will this create circular dependencies?
4. Is the error handling strategy consistent with the rest of the codebase?
5. Any concerns about testability?
Here's the PR: [link or paste]
Here's our existing payments module for comparison: [paste]
Architecture review is particularly effective when you show Claude the existing code pattern alongside the new code — it can identify divergences and flag where the new code might create technical debt.
Reviewing Test Coverage
Review the test coverage in this PR.
For every new function added, check if a test exists.
For modified functions, check if existing tests cover the modification.
List: functions without tests, and what you'd test if you were adding them.
Claude scans the diff for new/modified functions and cross-references with the test files touched. It lists precisely what’s untested. This takes human reviewers much longer because they have to mentally track what the diff changed and what the test file now covers.
Reviewing Database Migrations
Database migrations deserve particularly careful review:
Review this database migration for production safety.
Check:
1. Is this backwards compatible? (old code still works while migration runs)
2. Does it lock tables? (ALTER TABLE can lock in Postgres)
3. If it locks, is there a safer alternative (add nullable column, then fill, then make required)?
4. Does it have a rollback strategy?
5. Any data loss risk?
Migration: [paste]
Claude correctly identifies that ALTER TABLE ... ADD COLUMN NOT NULL without a default is dangerous (table lock + every existing row fails), while ALTER TABLE ... ADD COLUMN (nullable) + UPDATE ... SET + ALTER TABLE ... ALTER COLUMN ... SET NOT NULL is the safe migration path.
Reviewing for Performance
Review this change for performance implications.
Database context: PostgreSQL, ~500K rows in the orders table.
Check for:
- New queries that might be slow without an index
- N+1 query patterns (query inside a loop)
- Full table scans
- Missing pagination
Here's the change: [paste]
Claude provides specific feedback: “Line 45 calls findOrdersByUser(userId) inside a loop over users. This is O(n) database calls. Consider batching: findOrdersByUsers(userIds) with a single query.”
The Review Workflow That Works
For individual developers, the most effective code review workflow:
- Before pushing: Self-review with Claude Code covering bugs and security
- Commit the fix if Claude finds something real
- After CI builds: Human review focusing on product/business logic
- Automated review: Claude comments on the PR covering security and coverage gaps
The automated review catches mechanical issues (missing error handling, potential null dereferences, test gaps) so human reviewers can focus on higher-level concerns (is this the right approach, are the abstractions right, does this match the product requirements).
Custom Review Checklists
If your team has specific quality standards, encode them:
## In CLAUDE.md — Review Standards
When reviewing code, always check:
- All DB queries filter by organization_id (multi-tenant requirement)
- All API endpoints have authentication middleware applied
- Error messages don't expose internal stack traces
- External API calls have timeout configuration
- New environment variables are documented in .env.example
With these in your CLAUDE.md, every review Claude does will check these items. You don’t have to remind it — the checklist runs automatically. See the CLAUDE.md guide for setting up persistent review standards.
Using Skills for Repeated Review Patterns
If you do the same kind of review repeatedly — security review, performance review, migration review — define it as a Claude Code skill. Instead of writing the full prompt every time, you invoke /security-review or /migration-review and Claude knows exactly what to check.
Claude Skills 360 includes a code review skill set with:
- Security review (OWASP top 10, auth/authz patterns)
- Database query review (performance, safety)
- API review (consistency, security, error handling)
- Migration review (safety, rollback, locking)
These are practiced patterns built from reviewing real production code, not generic checklists. Try the free tier to see how the review skills work on your actual codebase.