Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review your own local code changes before pushing or creating a PR. Use when: the user wants to self-review staged or unstaged changes, check code quality before committing, or get feedback on work-in-progress. Covers readability, patterns, error handling, performance, and security. Do NOT use when: reviewing an existing pull request (use pr-review), reviewing code you didn't write, or when changes are already pushed to remote.
.claude/skills/marco-souza-code-review/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 69% | 75 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-12 | ✓→✓ | = Same ✓ | 71% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 53% | 0% |
Perform a thorough self-review of local code changes before pushing. Catch issues early when they're cheap to fix.
pr-review)No special tools required. Optionally, ensure you have a diff viewer available:
bash# Verify git is available git --version # Optional: check if diffstat is available which diffstat
bash# Review all uncommitted changes (staged + unstaged) git diff HEAD # Or review only staged changes (ready to commit) git diff --cached # Review specific files git diff HEAD -- path/to/file.go path/to/other.js # See what files changed git diff --stat HEAD
Work through each changed file systematically:
Use the review checklist below to evaluate each file.
For each file in the diff:
bash# View the full file for context (not just the diff) git show HEAD:path/to/file # Or open in your editor git diff HEAD -- path/to/file
Ask yourself:
When flagging issues, categorize by severity:
| Level | Meaning | Action | |-------|---------|--------| | blocker] | Must fix before push | Security flaw, data loss risk, broken logic | | warning] | Should fix now | Code smell, poor pattern, missing error handling | | nit] | Nice to fix | Style, naming, minor optimization |
Provide a structured review summary:
markdown## Code Review: [brief description] ### Files Reviewed - file1.go (added) - file2.ts (modified) ### Summary [1-2 sentence overview of the changes] ### Findings - [blocker] file:line — Description of issue and why it matters - [warning] file:line — Description and suggested fix - [nit] file:line — Minor improvement suggestion ### What Looks Good - [Positive observations about the code] ### Suggestions (Optional) - [Non-blocking improvements for consideration]
markdown## Code Review: User authentication flow ### Files Reviewed - src/auth/login.ts (added) - src/middleware/auth.ts (modified) - src/types/user.ts (modified) ### Summary Implements JWT-based login with refresh tokens. Generally well-structured, but has a security concern and missing input validation. ### Findings - [blocker] src/auth/login.ts:45 — JWT secret hardcoded as string literal. Move to environment variable: `process.env.JWT_SECRET`. - [warning] src/auth/login.ts:67 — No rate limiting on login attempts. Consider adding rate limit middleware. - [warning] src/middleware/auth.ts:23 — Missing null check on token payload. Add guard: `if (!decoded.userId) return res.status(401)`. - [nit] src/types/user.ts:12 — `User` type exported but unused in this PR. ### What Looks Good - Clean separation of auth concerns - Proper token expiry handling - Good TypeScript types ### Suggestions - Consider adding refresh token rotation for better security - Add integration test for full login → protected route flow
For small changes, run through this quick check:
bash# 1. Any secrets exposed? git diff HEAD | grep -iE '(password|secret|token|key).*=.*["\x27]' # 2. Any console.log or debug statements? git diff HEAD | grep -E '(console\.log|fmt\.Print|debugger|TODO|FIXME)' # 3. Any large functions (>50 lines)? git diff HEAD | grep -c '^+' | head -1
git diff --stat to identify the most-changed filesbash# See the commit history leading to this point git log --oneline -10 # See the full file for context git show HEAD:path/to/file
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 7,401 | 5,545 | -25% | 1 | 1 | 0% | 1,430 | 2,441 | +71% | 0 | 0 | — |
case-01 | fail→pass | 16,948 | 16,264 | -4% | 1 | 1 | 0% | 2,770 | 4,765 | +72% | 0 | 0 | — |
case-02 | fail→fail | 7,592 | 2,604 | -66% | 1 | 1 | 0% | 1,558 | 1,942 | +25% | 0 | 0 | — |
case-03 | pass→pass | 10,651 | 8,794 | -17% | 1 | 1 | 0% | 2,154 | 3,291 | +53% | 0 | 0 | — |
case-04 | pass→pass | 8,112 | 5,259 | -35% | 1 | 1 | 0% | 1,666 | 2,671 | +60% | 0 | 0 | — |
case-05 | pass→pass | 6,818 | 2,197 | -68% | 1 | 1 | 0% | 1,231 | 2,017 | +64% | 0 | 0 | — |
case-06 | pass→pass | 7,730 | 5,305 | -31% | 1 | 1 | 0% | 1,594 | 2,808 | +76% | 0 | 0 | — |
case-07 | pass→pass | 8,449 | 4,102 | -51% | 1 | 1 | 0% | 1,692 | 2,370 | +40% | 0 | 0 | — |
case-08 | pass→pass | 2,411 | 2,243 | -7% | 1 | 1 | 0% | 467 | 2,028 | +334% | 0 | 0 | — |
case-09 | pass→pass | 3,645 | 3,075 | -16% | 1 | 1 | 0% | 760 | 2,068 | +172% | 0 | 0 | — |
case-10 | pass→pass | 4,612 | 1,530 | -67% | 1 | 1 | 0% | 951 | 1,938 | +104% | 0 | 0 | — |
case-11 | pass→pass | 2,868 | 3,269 | +14% | 1 | 1 | 0% | 602 | 2,249 | +274% | 0 | 0 | — |
case-13 | fail→pass | 8,538 | 4,391 | -49% | 1 | 1 | 0% | 1,564 | 2,444 | +56% | 0 | 0 | — |
case-14 | pass→pass | 7,061 | 2,034 | -71% | 1 | 1 | 0% | 1,442 | 2,050 | +42% | 0 | 0 | — |
case-15 | fail→pass | 10,759 | 9,339 | -13% | 1 | 1 | 0% | 2,047 | 3,471 | +70% | 0 | 0 | — |
case-16 | pass→pass | 9,058 | 8,875 | -2% | 1 | 1 | 0% | 1,761 | 3,306 | +88% | 0 | 0 | — |
case-17 | pass→pass | 14,086 | 15,750 | +12% | 1 | 1 | 0% | 2,718 | 4,697 | +73% | 0 | 0 | — |
case-18 | pass→pass | 11,929 | 11,519 | -3% | 1 | 1 | 0% | 2,226 | 3,868 | +74% | 0 | 0 | — |
case-19 | pass→pass | 15,041 | 16,996 | +13% | 1 | 1 | 0% | 2,953 | 4,703 | +59% | 0 | 0 | — |
case-20 | pass→pass | 10,793 | 9,632 | -11% | 1 | 1 | 0% | 2,037 | 3,379 | +66% | 0 | 0 | — |
case-21 | pass→pass | 11,254 | 7,101 | -37% | 1 | 1 | 0% | 2,126 | 3,074 | +45% | 0 | 0 | — |
case-22 | pass→pass | 4,909 | 4,454 | -9% | 1 | 1 | 0% | 961 | 2,455 | +155% | 0 | 0 | — |
case-23 | pass→pass | 9,479 | 10,548 | +11% | 1 | 1 | 0% | 1,816 | 3,590 | +98% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.