Reviews FastAPI code for routing patterns, dependency injection, validation, and async handlers. Use when reviewing FastAPI apps, checking APIRouter setup, Depends() usage, or response models.
View on GitHubskills/fastapi-code-review/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/existential-birds/beagle/blob/main/skills/fastapi-code-review/SKILL.md -a claude-code --skill fastapi-code-reviewInstallation paths:
.claude/skills/fastapi-code-review/# FastAPI Code Review ## Quick Reference | Issue Type | Reference | |------------|-----------| | APIRouter setup, response_model, status codes | [references/routes.md](references/routes.md) | | Depends(), yield deps, cleanup, shared deps | [references/dependencies.md](references/dependencies.md) | | Pydantic models, HTTPException, 422 handling | [references/validation.md](references/validation.md) | | Async handlers, blocking I/O, background tasks | [references/async.md](references/async.md) | ## Review Checklist - [ ] APIRouter with proper prefix and tags - [ ] All routes specify `response_model` for type safety - [ ] Correct HTTP methods (GET, POST, PUT, DELETE, PATCH) - [ ] Proper status codes (200, 201, 204, 404, etc.) - [ ] Dependencies use `Depends()` not manual calls - [ ] Yield dependencies have proper cleanup - [ ] Request/Response models use Pydantic - [ ] HTTPException with status code and detail - [ ] All route handlers are `async def` - [ ] No blocking I/O (`requests`, `time.sleep`, `open()`) - [ ] Background tasks for non-blocking operations - [ ] No bare `except` in route handlers ## Valid Patterns (Do NOT Flag) These are idiomatic FastAPI patterns that may appear problematic but are correct: - **Pydantic validates request body automatically** - No manual validation needed when using typed Pydantic models as parameters - **Dependency injection for database sessions** - Sessions come from `Depends()`, not passed as function arguments - **HTTPException for all HTTP errors** - FastAPI handles conversion to proper HTTP responses - **Async def endpoint without await** - May be using sync dependencies or simple operations; FastAPI handles this - **Type annotation on Depends()** - This is documentation/IDE support, not a type assertion - **Query/Path/Body defaults** - FastAPI processes these at runtime, not traditional Python defaults - **Returning dict from endpoint** - Pydantic converts automatically if `response_model` is set ## Context-Sensitive