Anthropic published a guide to controlling Claude Code, and there are seven ways to do it. Most people only use one. Learn all seven and Claude goes from helpful to scary good.
Source: Anthropic’s “Steering Claude Code” guide (June 2026).
Most people put everything in their CLAUDE.md. That works, but every line in it costs tokens in every session, whether it’s relevant or not. The seven controls differ in two ways, when an instruction shows up and how hard Claude follows it.
01
CLAUDE.md
The always-on file. It loads at the start of every session and stays the whole time. Use it for what’s true every time, like your stack, your commands, your conventions and pointers to deeper docs. Anthropic suggests keeping it under 200 lines. A CLAUDE.md inside a subfolder loads only when Claude reads files in that folder.
Loads: every session · Best for: project-wide context
02
Rules
Markdown files in .claude/rules/. A rule without a scope loads every session like CLAUDE.md. Add a paths field to its frontmatter and it loads only when Claude touches matching files. Anthropic’s example scopes “All API handlers must validate input with Zod before processing” to src/api/**.
Loads: every session, or only on matching files · Best for: targeted constraints
03
Skills
Step-by-step playbooks, each a folder in .claude/skills/ with a SKILL.md. Only the name and description load up front. The full steps load when you call the skill or the task matches. Release checklists, review passes and deploy steps belong here, not in CLAUDE.md.
Loads: when called · Best for: repeatable procedures
04
Subagents
Helpers in .claude/agents/ that do a side task in their own context window. All the digging stays over there. The only thing that comes back to your main chat is their final message. Great for deep searches and log analysis.
Loads: when called · Best for: side tasks that would clutter your chat
05
Hooks
Automations that fire on events like a file edit, a tool call or session start. You register them in settings.json. Command and HTTP hooks run every time without Claude deciding anything, and they cost almost no context because they live outside the chat. Think running a linter after every edit, or blocking a risky command.
Loads: on events · Best for: things that must happen every time
06
Output Styles
These change how Claude responds in every reply, or its whole role. Built-in styles are Proactive, Concise, Explanatory and Learning. Switch with /output-style. Styles sit in the system prompt, so Anthropic says Claude follows them harder than CLAUDE.md, rules, skills, subagents or hooks. A custom style drops Claude’s default coding instructions unless you add keep-coding-instructions: true. (Output styles docs)
Loads: every session, in the system prompt · Best for: changing tone, format or role
07
Appending The System Prompt
Add instructions for one run by starting Claude Code with the --append-system-prompt flag. It adds to Claude’s role instead of replacing it, and nothing is saved afterward. One warning from Anthropic. Claude follows appended lines less strictly as you add more, and worse when they contradict each other.
Loads: that run only · Best for: one-off tweaks
Quick Decision Guide
True every session: CLAUDE.md.
Only for certain files: A path-scoped rule.
A repeatable procedure: A skill.
A side investigation: A subagent.
Must happen every time: A hook.
Changing every reply or Claude’s role: An output style.
A one-off tweak: Append the system prompt.
To have Claude do the sorting, open Claude Code in your project and paste this. It reads your setup, sorts every instruction into the right control and waits for your go before moving anything.