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.
Where the file goes
./CLAUDE.mdor./.claude/CLAUDE.md: project instructions, committed to git../CLAUDE.local.md: personal project notes, keep it out of git.~/.claude/CLAUDE.md: your personal rules for all projects.- CLAUDE.md files in subfolders load when Claude works on files there.
How it works
- Claude Code reads CLAUDE.md files from the working directory and its parents at startup.
- Lines like
@AGENTS.mdor@docs/testing.mdimport other files into context. - Running
/initin Claude Code drafts a CLAUDE.md from your codebase; a stack template gives it a better starting point. - If a repo has AGENTS.md but no CLAUDE.md, newer Claude Code versions read AGENTS.md directly.
Tips for a good CLAUDE.md
- Lead with commands Claude should run to verify its work.
- Use emphasis sparingly ("IMPORTANT:") for the one or two rules that must never be broken.
- Keep shared rules in AGENTS.md and only Claude-specific workflow notes in CLAUDE.md.
- Prune it regularly: stale rules confuse the model more than missing ones.
Example: Python + FastAPI + SQLAlchemy 2 + Alembic + pytest
# 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
- Next.js (App Router) + Tailwind CSS v4 + shadcn/ui + Supabase + Zod validation CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + Prisma + Stripe payments + Zod validation CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + Drizzle ORM + Clerk auth + Zod validation CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + shadcn/ui + Vercel AI SDK + Zod validation CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + Supabase + Stripe payments + Zod validation + Vitest CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + Firebase CLAUDE.md
- Next.js (App Router) + Tailwind CSS v4 + Vitest + Playwright E2E CLAUDE.md
- React + Vite + Tailwind CSS v4 + TanStack Query + Vitest + Zod validation CLAUDE.md
- React + Vite + Tailwind CSS v4 + Supabase + Zustand CLAUDE.md
- React + Vite + Tailwind CSS v4 + Firebase + Vitest CLAUDE.md
- Astro + Tailwind CSS v4 CLAUDE.md
- SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation CLAUDE.md
- SvelteKit (Svelte 5) + Tailwind CSS v4 + Drizzle ORM + Vitest CLAUDE.md
- Nuxt (Vue 3) + Tailwind CSS v4 + Zod validation CLAUDE.md
- Nuxt (Vue 3) + Tailwind CSS v4 + Supabase CLAUDE.md
- Expo (React Native) + Supabase + Zod validation + Jest CLAUDE.md
- Expo (React Native) + TanStack Query + Zustand + Jest CLAUDE.md
- Node.js + Express + Prisma + Zod validation + Vitest + Docker CLAUDE.md
- Node.js + Express + Drizzle ORM + Zod validation + Docker CLAUDE.md
- Python + FastAPI + SQLAlchemy 2 + Alembic + pytest + Docker CLAUDE.md
- Python + FastAPI + LLM / agent SDKs (Python) + pytest CLAUDE.md
- Python + FastAPI + Supabase + pytest CLAUDE.md
- Python (scripts, agents, libraries) + LLM / agent SDKs (Python) + pytest CLAUDE.md
- Python + Django + pytest + Docker CLAUDE.md
- Python + Django + Tailwind CSS v4 + pytest CLAUDE.md
- Ruby on Rails + Tailwind CSS v4 + Docker CLAUDE.md
- PHP + Laravel + Tailwind CSS v4 + Stripe payments CLAUDE.md
- Go + Docker CLAUDE.md
- Rust + Axum + Docker CLAUDE.md
- Java + Spring Boot + Docker CLAUDE.md
- Flutter (Dart) + Firebase CLAUDE.md
- Flutter (Dart) + Supabase CLAUDE.md
- Swift + SwiftUI CLAUDE.md
- Unity (C#) CLAUDE.md
- Godot 4 (GDScript) CLAUDE.md
- Phaser (TypeScript web games) + Vitest CLAUDE.md
- Chrome Extension (MV3) + Tailwind CSS v4 + Zustand + Vitest CLAUDE.md
Official docs: Claude Code memory docs. Last reviewed 2026-10-21.