Skip to content

CLAUDE.md template and generator for Claude Code

CLAUDE.md is the project memory file that Claude Code loads at the start of every session. Put it at the root of your repo (or in .claude/CLAUDE.md) with your build and test commands, code conventions and project rules. It supports @path imports, so a one-line @AGENTS.md lets Claude Code share the same rules as every other agent.

Generate a CLAUDE.md file

Where the file goes

How it works

Tips for a good CLAUDE.md

Example: Python + FastAPI + SQLAlchemy 2 + Alembic + pytest

CLAUDE.md
# CLAUDE.md - this project

Project instructions for Claude Code.

## Project

A Python + FastAPI + SQLAlchemy 2 + Alembic + pytest project.

Stack: Python + FastAPI, SQLAlchemy 2 + Alembic, pytest.

## Commands

- Install deps: `uv sync`
- Dev server: `uv run fastapi dev`
- Lint and format: `uv run ruff check . && uv run ruff format .`
- Tests: `uv run pytest`
- New migration: `uv run alembic revision --autogenerate -m "<change>"`
- Apply migrations: `uv run alembic upgrade head`
- Tests: `uv run pytest -q`

## Project structure

- `app/main.py` creates the app; one `APIRouter` per domain in `app/routers/`.
- Pydantic schemas in `app/schemas/`, business logic in `app/services/`.

## How to work in this repo

- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.

## Python + FastAPI

- Type-hint every function. Use `Annotated[..., Depends(...)]` for dependencies.
- Request and response bodies are Pydantic v2 models; set `response_model` so output is filtered.
- Use `async def` only when the endpoint awaits async I/O. Blocking libraries go in plain `def` endpoints.
- Inject DB sessions, settings and the current user with dependencies, not globals.
- Load settings with `pydantic-settings` from env vars.
- Raise `HTTPException` with a clear `detail` for expected errors.
- Manage dependencies with `uv add <pkg>`; do not hand-edit lock files.

## SQLAlchemy 2 + Alembic

- Use SQLAlchemy 2.0 style: `DeclarativeBase`, `Mapped[...]`, `mapped_column()`, and `select()` statements. No legacy `session.query()`.
- Every schema change gets an Alembic migration; review autogenerated migrations before applying.
- Scope one session per request (via a dependency) and never share sessions across threads.
- Load relationships deliberately with `selectinload` / `joinedload` to avoid N+1 queries.

## pytest

- Tests live in `tests/` named `test_*.py`. Use plain `assert`.
- Share setup with fixtures in `conftest.py`; use `@pytest.mark.parametrize` for input tables.
- Mock external services (HTTP, LLM APIs, payment providers); tests must not hit the network.
- Every bug fix adds a regression test.

## Reference docs

- [FastAPI docs](https://fastapi.tiangolo.com)
- [SQLAlchemy docs](https://docs.sqlalchemy.org/en/20/)
- [pytest docs](https://docs.pytest.org)

FAQ

Where do I put CLAUDE.md?

At the root of the repository, next to package.json or pyproject.toml. You can also use .claude/CLAUDE.md.

Should I commit CLAUDE.md to git?

Yes, commit the project CLAUDE.md so the whole team shares it. Keep personal preferences in CLAUDE.local.md or ~/.claude/CLAUDE.md.

CLAUDE.md or AGENTS.md?

If you only use Claude Code, CLAUDE.md is enough. If anyone uses Cursor, Codex or Copilot too, write AGENTS.md and import it from CLAUDE.md with @AGENTS.md.

CLAUDE.md templates by stack

Official docs: Claude Code memory docs. Last reviewed 2026-10-21.