Six layers, one system
Claude Code's customisation system is not a flat list of features. It is a hierarchy where each layer serves a distinct purpose, loads at a distinct time, and solves a distinct class of problem. Understanding this hierarchy is the single most important thing you will learn in this course, because every configuration mistake developers make comes from putting the right content in the wrong layer.
Here is the hierarchy, from broadest to most targeted:
| Layer | What it is | When it loads | What it solves |
|---|---|---|---|
| CLAUDE.md | Permanent project context | Every session, at startup | Universal standards and project overview |
| Rules | Modular, scopeable extensions | Startup or on-demand by file path | Domain-specific standards without bloating CLAUDE.md |
| Skills | On-demand task recipes | When Claude detects relevance or you invoke /skill | Repeatable workflows and task-specific knowledge |
| Agents | Isolated execution contexts | When Claude delegates or you request it | Heavy tasks, parallel work, restricted access |
| Hooks | Deterministic automations | Automatically at lifecycle events | Enforcement, validation, formatting, audit |
| MCP | External tool integrations | Session startup | Database, API, and service access |
The hierarchy flows from always-on to event-driven. CLAUDE.md is always in context. Rules may or may not load depending on which files you touch. Skills load when a task matches. Agents spin up when work needs isolation. Hooks fire when specific events occur. MCP tools are available when Claude decides to use them.