Developer pack
Claude Skill
Code Review Helper
Reviews a diff for bugs, edge cases, naming, and test coverage. Direct, not nitpicky.
What it does
Reads a diff and surfaces real issues: bugs, missing edge cases, concurrency hazards, naming that obscures intent, gaps in test coverage. Skips style nits a linter would catch. Calibrated to senior-engineer review, not rubber-stamp approval.
When to use
- ✓You're reviewing someone else's PR and want a second opinion
- ✓You're self-reviewing before requesting review — catch issues before reviewers do
- ✓You're reviewing your own legacy code before refactoring
When not to use
- ✗You want approval, not feedback — this skill will find things
- ✗Style-only review — let prettier / eslint / gofmt handle that
Install
Download the .zip, then unzip into your Claude skills folder.
mkdir -p ~/.claude/skills
unzip ~/Downloads/code-review-helper.zip -d ~/.claude/skills/
# Restart Claude Code session.
# Skill is now available — Claude will use it when relevant.SKILL.md
SKILL.md
---
name: code-review-helper
description: Use when reviewing a code diff for substantive issues — bugs, edge cases, concurrency, test coverage. Triggers on "review this diff", "code review", or pasted `git diff` output.
---
# Code Review Helper
Review like a senior engineer who actually has to maintain this code. Surface real problems. Skip style nits the linter handles. Be direct — softening feedback wastes everyone's time.
## Required inputs
1. **The diff** (or PR link / branch reference)
2. **Context**: what the change is supposed to do, in 1-2 sentences
3. **Hot spots** the author wants extra eyes on (if any)
If the diff is huge (>500 lines) and there's no context, ask the author what to focus on. A scattered review of a large diff catches less than a focused review of the risk areas.
## What to look for (priority order)
### 1. Correctness bugs
- Off-by-one, null/undefined, wrong operator, wrong variable
- Wrong type assumptions ("this is always a string" — is it?)
- Resource leaks (unclosed handles, missing `defer`/`finally`)
- Infinite loops, unbounded recursion
### 2. Edge cases the change misses
- Empty input, single-element input, very large input
- Network failures, partial failures, timeouts
- Concurrent calls — race conditions, deadlocks, lost updates
- Time-of-check vs time-of-use
- What happens on retry?
### 3. Hidden contracts broken
- Public API signature changes
- Database schema / migration ordering
- Backward compatibility for clients/consumers
- Idempotency assumptions
### 4. Test coverage gaps
- New code path with no test
- Edge case the test doesn't hit
- Test that asserts no behavior (`expect(result).toBeDefined()`)
- Test that would still pass if the implementation was `return null`
### 5. Naming and intent
- Variable / function name that obscures what it does
- "Manager" / "Handler" / "Helper" — usually a smell
- Booleans named in the negative (`isNotReady`)
- Comments that lie or contradict the code
### 6. Operability
- Logging that won't help debug a 3am page
- Error swallowed silently
- New external dependency, retry/timeout policy, or background job not metered
## What to skip
- Formatting the linter handles
- "Could you rename `x` to `xValue`" — pure preference
- Architectural rewrites — this is a PR review, not a redesign
- "I would have done it differently" without a concrete reason
## Output format
Group findings by severity:
```
## Blocking
[Things that must be fixed before merge]
## Important
[Real concerns that may not block but should be addressed]
## Nits
[Minor — feel free to ignore]
## Questions
[Things you want the author to clarify, not things you've already decided are wrong]
```
For each item:
- File:line reference
- 1-sentence description of the issue
- Concrete suggestion if you have one (no "consider improving this")
## Tone
- Direct. "This will null-pointer when `user.profile` is missing — happens for SSO users" beats "Have you considered..."
- Don't ask leading questions when you mean to point out a bug. Just point it out.
- If you don't see real problems, say so. "LGTM, no blocking issues, one nit on naming" is fine.
- No reward for finding 20 trivial nits. Senior reviewers find 3 important things.
Example prompts
Once installed, try these prompts in Claude:
- Review this diff. Focus on the new retry logic in the payment webhook handler. [paste diff]
- Self-review my changes before I request review. Honest signal please. [paste diff]