Starter Kits¶
Full, copyable claude_internal/ directories plus a matching CLAUDE.md for common
stacks. Drop one into a fresh (or existing) project and Claude Code comes up
pre-configured with sensible permissions, formatters on write, secret blocking,
and a couple of opinionated skills that match the stack's idioms.
Available kits¶
| Kit | Stack assumption | What you get |
|---|---|---|
| react | Vite or Next.js app, TypeScript, ESLint + Prettier | CLAUDE.md, claude_internal/settings.json, skills: /component-new, /test-component, shared hooks |
| nextjs | Next.js 15 App Router, TypeScript, RSC defaults | CLAUDE.md with server-vs-client conventions and Prisma/auth hooks |
| python | FastAPI or Django, ruff + pytest, pyproject.toml |
CLAUDE.md, claude_internal/settings.json, skill: /api-endpoint, shared hooks |
| go | Go modules, standard go test, optional golangci-lint |
CLAUDE.md, claude_internal/settings.json, skill: /add-handler, shared hooks |
Each kit is ~5 files. They're meant to be read in full before dropping in — not every team wants every rule.
Install into your project¶
From your project root:
```bash
Copy the kit that matches your stack.¶
STARTER=react cp -r path/to/claude-code-best-practices/starters/$STARTER/CLAUDE.md ./CLAUDE.md cp -r path/to/claude-code-best-practices/starters/$STARTER/claude_internal ./claude_internal ```
Then:
- Read
CLAUDE.mdtop to bottom and edit the sections marked<!-- edit -->. - Read
claude_internal/settings.jsonand trim the permission allowlist to what your project actually uses. - Commit both files to the repo. The whole team picks up the same setup on next pull.
Conventions used across all kits¶
- Hooks live in
claude_internal/hooks/, not vendored from this repo. Each kit ships a copy ofblock-secrets.shandformat-on-write.shso the starter is self-contained — no outside dependency. - Permissions are an allowlist, not a deny list. If Claude asks for a tool that isn't allowed, you'll see a prompt. Add it deliberately rather than opening access wide.
git pushis denied in every kit. Uncomment if your team is comfortable.- No emojis in the
CLAUDE.mdfiles — matches the repo-wide convention in CONTRIBUTING.md. - Skills are lean. Two skills max per kit. Add more as you discover workflows your team repeats.
Adding a new starter¶
- Create
starters/<stack>/with aCLAUDE.md,claude_internal/settings.json,claude_internal/hooks/(copy fromstarters/react/claude_internal/hooks/), and one or twoclaude_internal/skills/<skill>/SKILL.mdfiles. - Keep the total to under ~300 lines across all files. The point of a starter is to be read, not to be exhaustive.
- Add a row to the table above.
- Run
bash tools/lint-claude-md.sh starters/<stack>/CLAUDE.md— should pass with zero errors.
See also¶
- examples/ — stack-specific
CLAUDE.mdtemplates (noclaude_internal/) - guides/claude-md-guide.md — how to write a
CLAUDE.md - guides/hooks.md — the hook events and exit-code contract
- claude_internal/ — how this repo dogfoods the same pattern on itself