Backend Code Review
When to use this skill
Use this skill whenever the user asks to review, analyze, or improve backend code (e.g., .py) under the api/ directory. Supports the following review modes:
- Pending-change review: when the user asks to review current changes (inspect staged/working-tree files slated for commit to get the changes).
- Code snippets review: when the user pastes code snippets (e.g., a function/class/module excerpt) into the chat and asks for a review.
- File-focused review: when the user points to specific files and asks for a review of those files (one file or a small, explicit set of files, e.g.,
api/..., api/app.py).
Do NOT use this skill when:
- The request is about frontend code or UI (e.g.,
.tsx, .ts, .js, web/).
- The user is not asking for a review/analysis/improvement of backend code.
- The scope is not under
api/ (unless the user explicitly asks to review backend-related changes outside api/).
Rationalizations to Reject
When reviewing, explicitly reject these shortcuts:
- "The tests pass, so the code is correct" — tests don't cover all security and edge-case scenarios
- "This pattern is used elsewhere in the codebase" — widespread usage doesn't make a pattern correct; it may mean the bug is systemic
- "It's an internal endpoint / internal service" — internal code runs with real privileges on real data
- "It's just a minor fix" — every change to auth, session, or data layer needs full scrutiny
- "The ORM protects against SQL injection" — only if used correctly; raw queries or
.execute() with string formatting are still vulnerable
Quality Thresholds
Before delivering the review, verify:
How to use this skill
Follow these steps when using this skill:
- Identify the review mode (pending-change vs snippet vs file-focused) based on the user’s input. Keep the scope tight: review only what the user provided or explicitly referenced.
- Follow the rules defined in Checklist to perform the review. If no Checklist rule matches, apply General Review Rules as a fallback to perform the best-effort review.
- Compose the final output strictly follow the Required Output Format.
Notes when using this skill:
- Always include actionable fixes or suggestions (including possible code snippets).
- Use best-effort
File:Line references when a file path and line numbers are available; otherwise, use the most specific identifier you can.
Checklist
- db schema design: if the review scope includes code/files under
api/models/ or api/migrations/, follow references/db-schema-rule.md to perform the review
- architecture: if the review scope involves controller/service/core-domain/libs/model layering, dependency direction, or moving responsibilities across modules, follow references/architecture-rule.md to perform the review
- repositories abstraction: if the review scope contains table/model operations (e.g.,
select(...), session.execute(...), joins, CRUD) and is not under api/repositories, api/core/repositories, or api/extensions/*/repositories/, follow references/repositories-rule.md to perform the review
- sqlalchemy patterns: if the review scope involves SQLAlchemy session/query usage, db transaction/crud usage, or raw SQL usage, follow references/sqlalchemy-rule.md to perform the review
General Review Rules
1. Security Review
Check for:
- SQL injection vulnerabilities
- Server-Side Request Forgery (SSRF)
- Command injection
- Insecure deserialization
- Hardcoded secrets/credentials
- Improper authentication/authorization
- Insecure direct object references
2. Performance Review
Check for:
- N+1 queries
- Missing database indexes
- Memory leaks
- Blocking operations in async code
- Missing caching opportunities
3. Code Quality Review
Check for:
- Code forward compatibility
- Code duplication (DRY violations)
- Functions doing too much (SRP violations)
- Deep nesting / complex conditionals
- Magic numbers/strings
- Poor naming
- Missing error handling
- Incomplete type coverage
4. Testing Review
Check for:
- Missing test coverage for new code
- Tests that don't test behavior
- Flaky test patterns
- Missing edge cases
Required Output Format
When this skill invoked, the response must exactly follow one of the two templates:
Template A (any findings)
# Code Review Summary
Found <X> critical issues need to be fixed:
## 🔴 Critical (Must Fix)
### 1. <brief description of the issue>
FilePath: <path> line <line>
<relevant code snippet or pointer>
#### Explanation
<detailed explanation and references of the issue>
#### Suggested Fix
1. <brief description of suggested fix>
2. <code example> (optional, omit if not applicable)
---
... (repeat for each critical issue) ...
Found <Y> suggestions for improvement:
## 🟡 Suggestions (Should Consider)
### 1. <brief description of the suggestion>
FilePath: <path> line <line>
<relevant code snippet or pointer>
#### Explanation
<detailed explanation and references of the suggestion>
#### Suggested Fix
1. <brief description of suggested fix>
2. <code example> (optional, omit if not applicable)
---
... (repeat for each suggestion) ...
Found <Z> optional nits:
## 🟢 Nits (Optional)
### 1. <brief description of the nit>
FilePath: <path> line <line>
<relevant code snippet or pointer>
#### Explanation
<explanation and references of the optional nit>
#### Suggested Fix
- <minor suggestions>
---
... (repeat for each nits) ...
## ✅ What's Good
- <Positive feedback on good patterns>
- If there are no critical issues or suggestions or option nits or good points, just omit that section.
- If the issue number is more than 10, summarize as "Found 10+ critical issues/suggestions/optional nits" and only output the first 10 items.
- Don't compress the blank lines between sections; keep them as-is for readability.
- If there is any issue requires code changes, append a brief follow-up question to ask whether the user wants to apply the fix(es) after the structured output. For example: "Would you like me to use the Suggested fix(es) to address these issues?"
Template B (no issues)
## Code Review Summary
✅ No issues found.
1---2name: backend-code-review3description: Review backend code for quality, security, maintainability, and best practices based on established checklist rules. Use when the user requests a review, analysis, or improvement of backend files (e.g., `.py`) under the `api/` directory. Do NOT use for frontend files (e.g., `.tsx`, `.ts`, `.js`). Supports pending-change review, code snippets review, and file-focused review.4---56# Backend Code Review78## When to use this skill910Use this skill whenever the user asks to **review, analyze, or improve** backend code (e.g., `.py`) under the `api/` directory. Supports the following review modes:1112- **Pending-change review**: when the user asks to review current changes (inspect staged/working-tree files slated for commit to get the changes).13- **Code snippets review**: when the user pastes code snippets (e.g., a function/class/module excerpt) into the chat and asks for a review.14- **File-focused review**: when the user points to specific files and asks for a review of those files (one file or a small, explicit set of files, e.g., `api/...`, `api/app.py`).1516Do NOT use this skill when:1718- The request is about frontend code or UI (e.g., `.tsx`, `.ts`, `.js`, `web/`).19- The user is not asking for a review/analysis/improvement of backend code.20- The scope is not under `api/` (unless the user explicitly asks to review backend-related changes outside `api/`).2122## Rationalizations to Reject2324When reviewing, explicitly reject these shortcuts:2526- **"The tests pass, so the code is correct"** — tests don't cover all security and edge-case scenarios27- **"This pattern is used elsewhere in the codebase"** — widespread usage doesn't make a pattern correct; it may mean the bug is systemic28- **"It's an internal endpoint / internal service"** — internal code runs with real privileges on real data29- **"It's just a minor fix"** — every change to auth, session, or data layer needs full scrutiny30- **"The ORM protects against SQL injection"** — only if used correctly; raw queries or `.execute()` with string formatting are still vulnerable3132## Quality Thresholds3334Before delivering the review, verify:35- [ ] Every finding cites a specific `File:Line` reference36- [ ] Every Critical finding includes a concrete fix example (not just a description)37- [ ] Security findings include an exploitation scenario, not just "this could be vulnerable"38- [ ] No vague language ("probably", "might", "could potentially be an issue")3940## How to use this skill4142Follow these steps when using this skill:43441. **Identify the review mode** (pending-change vs snippet vs file-focused) based on the user’s input. Keep the scope tight: review only what the user provided or explicitly referenced.452. Follow the rules defined in **Checklist** to perform the review. If no Checklist rule matches, apply **General Review Rules** as a fallback to perform the best-effort review.463. Compose the final output strictly follow the **Required Output Format**.4748Notes when using this skill:49- Always include actionable fixes or suggestions (including possible code snippets).50- Use best-effort `File:Line` references when a file path and line numbers are available; otherwise, use the most specific identifier you can.5152## Checklist5354- db schema design: if the review scope includes code/files under `api/models/` or `api/migrations/`, follow [references/db-schema-rule.md](references/db-schema-rule.md) to perform the review55- architecture: if the review scope involves controller/service/core-domain/libs/model layering, dependency direction, or moving responsibilities across modules, follow [references/architecture-rule.md](references/architecture-rule.md) to perform the review56- repositories abstraction: if the review scope contains table/model operations (e.g., `select(...)`, `session.execute(...)`, joins, CRUD) and is not under `api/repositories`, `api/core/repositories`, or `api/extensions/*/repositories/`, follow [references/repositories-rule.md](references/repositories-rule.md) to perform the review57- sqlalchemy patterns: if the review scope involves SQLAlchemy session/query usage, db transaction/crud usage, or raw SQL usage, follow [references/sqlalchemy-rule.md](references/sqlalchemy-rule.md) to perform the review5859## General Review Rules6061### 1. Security Review6263Check for:64- SQL injection vulnerabilities65- Server-Side Request Forgery (SSRF)66- Command injection67- Insecure deserialization68- Hardcoded secrets/credentials69- Improper authentication/authorization70- Insecure direct object references7172### 2. Performance Review7374Check for:75- N+1 queries76- Missing database indexes77- Memory leaks78- Blocking operations in async code79- Missing caching opportunities8081### 3. Code Quality Review8283Check for:84- Code forward compatibility85- Code duplication (DRY violations)86- Functions doing too much (SRP violations)87- Deep nesting / complex conditionals88- Magic numbers/strings89- Poor naming90- Missing error handling91- Incomplete type coverage9293### 4. Testing Review9495Check for:96- Missing test coverage for new code97- Tests that don't test behavior98- Flaky test patterns99- Missing edge cases100101## Required Output Format102103When this skill invoked, the response must exactly follow one of the two templates:104105### Template A (any findings)106107```markdown108# Code Review Summary109110Found <X> critical issues need to be fixed:111112## 🔴 Critical (Must Fix)113114### 1. <brief description of the issue>115116FilePath: <path> line <line>117<relevant code snippet or pointer>118119#### Explanation120121<detailed explanation and references of the issue>122123#### Suggested Fix1241251. <brief description of suggested fix>1262. <code example> (optional, omit if not applicable)127128---129... (repeat for each critical issue) ...130131Found <Y> suggestions for improvement:132133## 🟡 Suggestions (Should Consider)134135### 1. <brief description of the suggestion>136137FilePath: <path> line <line>138<relevant code snippet or pointer>139140#### Explanation141142<detailed explanation and references of the suggestion>143144#### Suggested Fix1451461. <brief description of suggested fix>1472. <code example> (optional, omit if not applicable)148149---150... (repeat for each suggestion) ...151152Found <Z> optional nits:153154## 🟢 Nits (Optional)155### 1. <brief description of the nit>156157FilePath: <path> line <line>158<relevant code snippet or pointer>159160#### Explanation161162<explanation and references of the optional nit>163164#### Suggested Fix165166- <minor suggestions>167168---169... (repeat for each nits) ...170171## ✅ What's Good172173- <Positive feedback on good patterns>174```175176- If there are no critical issues or suggestions or option nits or good points, just omit that section.177- If the issue number is more than 10, summarize as "Found 10+ critical issues/suggestions/optional nits" and only output the first 10 items.178- Don't compress the blank lines between sections; keep them as-is for readability.179- If there is any issue requires code changes, append a brief follow-up question to ask whether the user wants to apply the fix(es) after the structured output. For example: "Would you like me to use the Suggested fix(es) to address these issues?"180181### Template B (no issues)182183```markdown184## Code Review Summary185✅ No issues found.186```