The .claude/ directory is where Claude Code stops being a command you run and becomes something you configure. Hooks, subagents, MCP servers, skills, path-scoped rules — all live here, all check into git, all compound across your team. Most engineers never look inside .claude/. The ones who do ship 5x faster.
Markdown-based invocable workflows. Invoked via /skill-name. (Full detail in the Slash Commands & Skills lesson.)
markdown
---
name: deploy-staging
description: Deploy to staging environment with health checks
---
Walk through these steps:
1. Run npm run build
2. Run pytest
3. Push to staging branch
4. Verify deploy via curl staging.example.com/health
Path-scoped CLAUDE.md fragments. The frontmatter declares which paths trigger them.
markdown
---
applyTo: "api/**/*.py"
---
# API Conventions
- All endpoints use Pydantic for request/response
- All endpoints emit OpenTelemetry spans
- All errors use the StandardError schema in api/lib/errors.py
Auto-saved memory entries written by Claude during conversations. Indexed by MEMORY.md. Personal — gitignored. (Full detail in CLAUDE.md lesson — memory complements the persistent rules in CLAUDE.md.)
Tests · Verify settings.json is committed and settings.local.json is gitignored. Run 'git status' to confirm. Verify Claude auto-approves common npm commands but prompts on unusual Bash.
Your team uses Claude Code on a shared codebase. You want everyone to auto-approve `npm run *`, but YOU also want to auto-approve `open *` (for opening simulator) without forcing it on others. How?
Quick check
A teammate commits `settings.local.json` 'because it has nice defaults.' What's the actual cost?
The .claude/ ecosystem is the foundation. Next: how to use it safely — Claude Code permissions and safety models.