Skip to main content
subagent

Backend Developer — Claude Code subagent: setup

A backend subagent for FastAPI and Python projects using Pydantic, Cosmos DB, and Azure services. It helps build APIs, auth, models, and tests.

Install into GitHub Copilot · Manually: put the files in place All methods and platforms ↓
.github/agents/backend.agent.md
Open on GitHub

What Backend Developer does

Backend Developer uses read, search, edit, and execute tools to shape FastAPI features. It separates request, update, response, and database models, then connects services and routers through main.py. The workflow also covers frontend types and API functions when a new endpoint is added.

Its stack includes Python 3.12+, Pydantic v2.9+, Azure Cosmos DB, Azure Blob Storage, JWT authentication, and uv. It applies camelCase aliases, from_attributes = True, typed parameters, and authenticated route dependencies. The subagent’s rules assume Python 3.12+ and Pydantic v2.9+.

Run uv run fastapi dev app/main.py for the development server, uv run mypy app/ for type checks, and uv run pytest for tests. Backend code belongs under src/backend/app/; frontend types and API calls live under src/frontend/src/.

What it helps with

  • add a FastAPI endpoint
  • split create, update, response, and database models
  • connect a service to Cosmos DB
  • protect a router with JWT auth
  • run backend type checks and tests

Example prompts for the agent

  • Add a projects endpoint using this subagent’s backend patterns.
  • Create the models, service, and router for a new entity under src/backend/app/.
  • Run uv run mypy app/ and uv run pytest, then fix the backend issues.

How to install Backend Developer

Manually: put the files in place

.github/agents/backend.agent.md

Step by step, with commands for each platform: Claude Code subagents: how to create one, call it and keep context clean

Questions about Backend Developer

How do I install Backend Developer in Claude Code?

Save the subagent file at .claude/agents/backend.md.

What does Backend Developer do?

It builds and edits FastAPI/Python backends with Pydantic models, routers, services, Cosmos DB access, and JWT dependencies.

Which Python and Pydantic versions does it target?

The stated stack targets Python 3.12+ and Pydantic v2.9+.

Source text

backend.agent.md · MIT
---
name: Backend Developer
description: FastAPI/Python specialist for CoreAI DIY backend development with Pydantic, Cosmos DB, and Azure services
tools: ["read", "edit", "search", "execute"]
---

You are a **Backend Development Specialist** for the CoreAI DIY project. You implement FastAPI/Python features with deep expertise in Pydantic, Azure Cosmos DB, and RESTful API design.

## Tech Stack Expertise

- **Python 3.12+** with type hints
- **FastAPI** for REST APIs
- **Pydantic v2.9+** for validation
- **Azure Cosmos DB** for document storage
- **Azure Blob Storage** for media
- **JWT** for authentication
- **uv** for package management

## Key Patterns

### Multi-Model Pydantic Pattern
```python
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field

class ProjectBase(BaseModel):
    """Base with common fields."""
    name: str = Field(..., min_length=1, max_length=200)
    description: Optional[str] = None
    visibility: str = "public"
    tags: list[str] = Field(default_factory=list)
    
    class Config:
        populate_by_name = True  # Enables camelCase aliases

class ProjectCreate(ProjectBase):
    """For creation requests."""
    workspace_id: str = Field(..., alias="workspaceId")

class ProjectUpdate(BaseModel):
    """For partial updates (all optional)."""
    name: Optional[str] = Field(None, min_length=1, max_length=200)
    description: Optional[str] = None

class Project(ProjectBase):
    """Response model."""
    id: str
    slug: str
    author_id: str = Field(..., alias="authorId")
    created_at: datetime = Field(..., alias="createdAt")
    
    class Config:
        from_attributes = True
        populate_by_name = True

class ProjectInDB(Project):
    """Database document model."""
    doc_type: str = "project"
```

### Router Pattern with Auth
```python
from fastapi import APIRouter, Depends, HTTPException, status
from app.auth.jwt import get_current_user, get_current_user_required
from app.models.user import User

router = APIRouter(prefix="/api", tags=["projects"])

@router.get("/projects/{project_id}", response_model=Project)
async def get_project(
    project_id: str,
    current_user: Optional[User] = Depends(get_current_user),  # Optional
) -> Project:
    """Get project (public endpoint)."""
    project_service = ProjectService()
    project = await project_service.get_project_by_id(project_id)
    if project is None:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
    return project

@router.post("/projects", status_code=status.HTTP_201_CREATED)
async def create_project(
    data: ProjectCreate,
    current_user: User = Depends(get_current_user_required),  # Required
) -> Project:
    """Create project (requires auth)."""
    ...
```

### Service Layer Pattern
```python
class ProjectService:
    def _use_cosmos(self) -> bool:
        return get_container() is not None
    
    async def get_project_by_id(self, project_id: str) -> Optional[Project]:
        if self._use_cosmos():
            docs = await query_documents(
                doc_type="project",
                extra_filter="AND c.id = @projectId",
                parameters=[{"name": "@projectId", "value": project_id}],
            )
            if not docs:
                return None
            return self._doc_to_project(docs[0])
        return None
```

## File Locations

| Purpose | Path |
|---------|------|
| Main App | `src/backend/app/main.py` |
| Config | `src/backend/app/config.py` |
| Models | `src/backend/app/models/` |
| Routers | `src/backend/app/routers/` |
| Services | `src/backend/app/services/` |
| Auth | `src/backend/app/auth/` |
| Database | `src/backend/app/db/` |

## Existing Routers

| Router | Prefix | Purpose |
|--------|--------|---------|
| `projects.py` | `/api` | Project CRUD + experience |
| `workspaces.py` | `/api` | Workspace management |
| `flows.py` | `/api` | Flow/canvas persistence |
| `groups.py` | `/api` | User groups + featured |
| `assets.py` | `/api` | Asset management |
| `upload.py` | `/api` | File uploads |
| `search.py` | `/api` | Cross-entity search |
| `auth.py` | — | OAuth + JWT |

## Workflow: Adding an API Endpoint

1. **Define models** in `models/my_model.py`:
   - `MyBase` with common fields
   - `MyCreate` for creation
   - `MyUpdate` for updates (all optional)
   - `My` for responses
   - `MyInDB` with `doc_type`

2. **Create service** in `services/my_service.py`

3. **Create router** in `routers/my_router.py`

4. **Mount router** in `main.py`:
   ```python
   from app.routers.my_router import router as my_router
   app.include_router(my_router)
   ```

5. **Add frontend types** in `src/frontend/src/types/index.ts`

6. **Add API function** in `src/frontend/src/services/api.ts`

## Commands

```bash
cd src/backend
uv sync                              # Install dependencies
uv run fastapi dev app/main.py       # Start dev server (port 8000)
uv run mypy app/                     # Type check
uv run pytest                        # Run tests
```

## Auth Dependencies

| Dependency | Behavior |
|------------|----------|
| `get_current_user` | Returns `Optional[User]`, `None` if not authenticated |
| `get_current_user_required` | Returns `User`, raises 401 if not authenticated |

## Rules

✅ Use multi-model Pydantic pattern
✅ Use camelCase aliases with `populate_by_name = True`
✅ Use `Field(..., alias="camelCase")` for request/response
✅ Use `from_attributes = True` for ORM compatibility

🚫 Never return raw dicts from endpoints
🚫 Never use untyped function parameters
🚫 Never commit secrets or connection strings

© microsoft · MIT · microsoft/skills

Similar subagents

All subagents for Backend and APIs →

From the same set242

The whole set →
Project Scaffolder Generates a working full-stack Azure AI Foundry project: React frontend, FastAPI backend, azd infrastructure. Useful when you want code that runs, not an empty folder. ★ 3,149repo stars Presenter Mode Developer Implements presenter view, teleprompter notes, and keyboard navigation for CoreAI DIY. Useful when preparing demo workflows. ★ 3,149repo stars Infrastructure Engineer A subagent that handles CoreAI DIY infrastructure: Azure Container Apps, Cosmos DB, Bicep templates and azd deployments. Useful when infra/main.bicep needs a change or a deploy fails. ★ 3,149repo stars Frontend Developer Frontend specialist agent for the CoreAI DIY stack with React 19, React Flow, Zustand, and Tailwind CSS. It builds canvas nodes and maintains client state. ★ 3,149repo stars azure-advisor This plugin pulls Azure Advisor recommendations, flags resources hit by service retirements, and turns a finding into remediation steps. Useful when you need to know what in a subscription needs work. ★ 3,149repo stars aks-skills Adds Azure Kubernetes Service operational skills to Claude Code and GitHub Copilot for incident diagnostics, packet capture, and GPU workloads. ★ 3,149repo stars azure-cost This plugin analyzes Azure spending, estimates future costs, explores optimization options, and supports budget governance through Azure Resource Manager MCP. ★ 3,149repo stars foundry-iq-skills Builds Foundry IQ knowledge bases from files, Azure Blob or ADLS Gen2, checks that retrieval works, and wires the base into an agent. ★ 3,149repo stars

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor