14.1 — Project initialization
It all starts with an empty folder and three fundamental decisions: the repository structure, the content of CLAUDE.md, and the permissions in settings.json. These three elements determine the quality of everything Claude Code will produce afterwards.
Run /init in a new folder. Claude analyzes the repo (empty for now) and generates a base CLAUDE.md. This skeleton is a starting point, not a deliverable. Enrich it immediately with your technical stack (Node.js + TypeScript + Express + Prisma for the backend, React + Vite for the frontend), your build and test commands, your code conventions (strict TypeScript, Zod validation, no any), and the target architecture (routes, services, prisma).
Next, create .claude/settings.json to define the trust zone. Allow common commands (npm, npx, node, git) and block destructive commands (rm -rf /, sudo). Since the current version of Claude Code, you can also configure the file at .claude/CLAUDE.md, both locations are recognized.
mkdir todo-fullstack && cd todo-fullstack && git init
claude
# in Claude Code:
/init
CLAUDE.md is read at every new conversation. Each instruction you put there is an investment: it avoids repeating the same directives, reduces errors, and steers Claude toward the right architectural decisions. Five minutes of initialization are worth hours of corrections.
Key takeaways
• CLAUDE.md is the most powerful lever of the project, it guides every future interaction.
• /init gives you a base, but the real work is the manual enrichment with your conventions.
• Settings define what Claude can do without asking: it's your safety perimeter.