How to Customise Claude Code: Settings, Hooks, Commands, and Skills

Claude Code is customised in layers: a CLAUDE.md file for project knowledge, settings for permissions and defaults, hooks that run your scripts at points in the agent's loop, custom slash commands, subagents and skills for specialised tasks, and MCP servers for external tools. Start with CLAUDE.md and permissions, then add the rest as needs appear.

Layer 1: CLAUDE.md

CLAUDE.md is a markdown file Claude Code reads as project memory. Put in it what the agent cannot infer from the code: the commands that build and test the project, conventions that matter, and hard constraints. Files can exist at user level for personal preferences and at project level for team rules, and project files can import others.

Keep it short. It is part of the context on every request, so a long file costs tokens constantly and buries the rules that matter among the ones that do not.

Layer 2: settings and permissions

Settings files at user, project, and local levels control what the agent may do without asking, which tools are allowed or denied, environment variables, and defaults such as the model. Project settings can be committed so the whole team shares them; local settings stay on your machine.

Permissions are the most valuable setting to get right early. Allow the routine, safe commands your project uses, such as the test runner and linters, so sessions are not interrupted constantly, and keep destructive operations behind approval.

Layer 3: hooks

Hooks run your own scripts at defined points in the agent's loop, for example before or after a tool is used, or when a session ends. Because they are deterministic code rather than instructions to a model, they suit rules that must always hold: formatting files after every edit, blocking writes to protected paths, running a quick check before a commit, or logging tool use.

Instructions in CLAUDE.md are followed most of the time. Hooks are followed every time. Use hooks for the rules you cannot afford to have skipped.

Layer 4: commands, subagents, and skills

These three package work you would otherwise re-explain in every session. They differ in how they are triggered and how much context they carry.

Custom slash commands

Saved prompts invoked by name, such as a command that reviews the current diff against your checklist or prepares a release note. They turn a paragraph you type repeatedly into one word.

Subagents

Specialised agents with their own instructions and tool access, such as a test writer or a reviewer. Work delegated to a subagent runs in its own context, which keeps the main session focused.

Skills

Packaged instructions and resources the agent loads when a task calls for them, such as how to produce a document in your house format. They extend capability without loading everything into every session.

Layer 5: MCP servers

MCP servers connect Claude Code to external systems: issue trackers, databases, documentation, design tools, and knowledge bases. Each server's tools are visible to the agent, so each one adds context and choice. Add servers for things you use weekly, not everything that sounds useful, and prefer servers that return small, relevant results.

A retrieval server over your documentation, decisions, and codebase is often the highest-value addition, because it replaces pasting background into prompts with fetching exactly what a task needs.

An order that works

  1. Write a short CLAUDE.md with commands and constraints.
  2. Set permissions so routine commands run without prompts.
  3. Add one or two hooks for rules that must always apply.
  4. Turn your most repeated prompts into commands.
  5. Add MCP servers one at a time, starting with knowledge you currently paste.
  6. Introduce subagents and skills when specific tasks keep recurring.

Commit the team-wide parts to the repository so everyone, and every new session, starts from the same setup.

Frequently asked questions

Where are Claude Code settings stored?
In settings files at several levels: a user-level file for personal defaults across projects, a project-level file that can be committed for the team, and a local project file for personal overrides that are not committed. More specific levels take precedence. Check the current documentation for exact file locations on your platform.
What is the difference between a hook and a CLAUDE.md instruction?
A CLAUDE.md instruction is guidance the model reads and usually follows. A hook is a script that runs automatically at a defined point, such as after every file edit, regardless of what the model decides. Use instructions for preferences and context, and hooks for rules that must apply every time.
Can I share my Claude Code setup with my team?
Yes. Commit project-level CLAUDE.md, settings, custom commands, subagent definitions, and MCP configuration to the repository, and keep personal preferences in user-level or local files. Plugins can also package a set of commands, agents, hooks, and servers for reuse across repositories.
Do more customisations make Claude Code better?
Only up to a point. Every instruction, tool, and server adds context and choice. A short CLAUDE.md, well-chosen permissions, a few reliable hooks, and a handful of focused servers usually outperform a large collection of everything available. Add customisations in response to real friction, and remove ones you stop using.
What are Claude Code output styles and status lines?
They are presentation customisations. Output styles change how responses are formatted and the agent's default behaviour for different kinds of work, while a custom status line shows information such as the current model, directory, or branch at the bottom of the terminal. Both are optional conveniences that matter less than permissions, hooks, and project memory.