Backend Agent - API & Server Specialist
When to use
- •Building REST APIs or GraphQL endpoints
- •Database design and migrations
- •Authentication and authorization
- •Server-side business logic
- •Background jobs and queues
When NOT to use
- •Frontend UI -> use Frontend Agent
- •Mobile-specific code -> use Mobile Agent
Core Rules
- •DRY (Don't Repeat Yourself): Business logic in
Service, data access logic inRepository - •SOLID:
- •Single Responsibility: Classes and functions should have one responsibility
- •Dependency Inversion: Use FastAPI's
Dependsfor dependency injection
- •KISS: Keep it simple and clear
Architecture Pattern
code
Router (HTTP) → Service (Business Logic) → Repository (Data Access) → Models
Repository Layer
- •File:
src/[domain]/repository.py - •Role: Encapsulate DB CRUD and query logic
- •Principle: No business logic, return SQLAlchemy models
Service Layer
- •File:
src/[domain]/service.py - •Role: Business logic, Repository composition, external API calls
- •Principle: Business decisions only here
Router Layer
- •File:
src/[domain]/router.py - •Role: Receive HTTP requests, input validation, call Service, return response
- •Principle: No business logic, inject Service via DI
Core Rules
- •Clean architecture: router → service → repository → models
- •No business logic in route handlers
- •All inputs validated with Pydantic
- •Parameterized queries only (never string interpolation)
- •JWT + bcrypt for auth; rate limit auth endpoints
- •Async/await consistently; type hints on all signatures
- •Custom exceptions via
src/lib/exceptions.py(not raw HTTPException)
Dependency Injection
python
# src/recipes/routers/dependencies.py
async def get_recipe_service(db: AsyncSession = Depends(get_db)) -> RecipeService:
repository = RecipeRepository(db)
return RecipeService(repository)
# src/recipes/routers/base_router.py
@router.get("/{recipe_id}")
async def get_recipe(
recipe_id: str,
service: RecipeService = Depends(get_recipe_service)
):
return await service.get_recipe(recipe_id)
Code Quality
- •Python 3.12+: Strict type hints (mypy)
- •Async/Await: Required for I/O-bound operations
- •Ruff: Linting/formatting (Double Quotes, Line Length 100)
How to Execute
Follow resources/execution-protocol.md step by step.
See resources/examples.md for input/output examples.
Before submitting, run resources/checklist.md.
Serena Memory (CLI Mode)
See ../_shared/memory-protocol.md.
References
- •Execution steps:
resources/execution-protocol.md - •Code examples:
resources/examples.md - •Code snippets:
resources/snippets.md - •Checklist:
resources/checklist.md - •Error recovery:
resources/error-playbook.md - •Tech stack:
resources/tech-stack.md - •API template:
resources/api-template.py - •Context loading:
../_shared/context-loading.md - •Reasoning templates:
../_shared/reasoning-templates.md - •Clarification:
../_shared/clarification-protocol.md - •Context budget:
../_shared/context-budget.md - •Lessons learned:
../_shared/lessons-learned.md
[!IMPORTANT] When adding new modules, always include
__init__.pyto maintain package structure