Everyone is collecting prompts. The people getting real results are building something else.
Over the holidays last year, something shifted in how I use Claude Code.
For months I had treated it like a very smart autocomplete. Open the terminal, type a request, read the answer, repeat. It worked. I shipped things. But I kept watching other developers talk about firing several agents at once, walking away, and reviewing finished pull requests when they came back. That was not my experience at all. My experience was babysitting.
So I went looking for what they were doing differently, fully expecting the answer to be "better prompts." I had even started saving the good ones in a note, building my own little prompt library like everyone tells you to.
The prompts were not the answer. That note is still sitting there, mostly unused.
What actually changed my results was realizing Claude Code has five distinct layers, and I was only using one of them.
The one tool problem
When you only use the message box, everything has to go through it. Project conventions, one off requests, reusable workflows, safety reminders, all of it typed fresh every session. It is like running a team by shouting instructions across the room. Fine for a while, then it stops scaling.
Two walls show up. The first is context rot. You pour a refactor, a couple of design docs, and a migration plan into one conversation, and somewhere past 40 percent of the window the model starts losing the thread. It contradicts a decision it made twenty minutes ago. It re-reads a file it already read. A Databricks study I came across put model correctness dropping around 32,000 tokens, well before you hit any advertised limit. That matched what I was feeling exactly.
The second wall is amnesia. The agent does good work, you close the terminal, and tomorrow none of it carries over. Your naming conventions, your banned libraries, the way your team formats commits, gone. You explain it again. And again.
Neither of those is a prompt problem. No sentence fixes them. They are system problems, and they need a system answer.
The five layers, cheapest to most powerful
Here is the model that reframed everything for me. Claude Code is built from five layers, and they run from cheap and always present to powerful and expensive.
CLAUDE.md sits at the top. It is a plain markdown file at your repo root that loads into every session automatically, before you type anything. This is where standing rules live. Your stack, your conventions, the libraries you do not allow, what "done" actually means.
MCP servers come next. They connect the agent to the outside world, your GitHub, a database, a web fetcher. Without them the agent only sees the files in front of it.
Skills are reusable workflows the agent fires on its own. A skill is a tiny folder with a description, and when your request matches that description, Claude pulls it in without being asked. "After you edit a source file, run the linter and fix the warnings" is a skill. You write it once and never remember it again.
Hooks are the rails. Where a skill is something the agent chooses to use, a hook is something the system enforces. "Block any commit that fails the tests" is a hook. It runs whether the agent likes it or not.
Subagents are the team. Each one is a separate instance with its own context window, its own prompt, its own tools. You delegate a code review or a research detour to a subagent, and your main session stays clean and focused while the messy part happens somewhere else.
The pattern that stuck with me: reach for the lightest layer that solves the problem. Most things belong in CLAUDE.md or a skill. You only spin up a subagent when a job genuinely deserves its own room.
The file that did the most
If you only change one thing, make it CLAUDE.md.
I had been treating mine like a README, a friendly description of the project for a human. That was the mistake. It is not documentation. It is operating instructions for the agent, written in the imperative. Do this. Never that. Here is what finished looks like.
Mine is about thirty lines. Stack and versions. The commands to test and lint. A short list of conventions. A "do NOT" section with the four things I was tired of correcting. A definition of done that says a change is not complete until the tests pass and the lint is clean.
That single file removed most of my daily friction before I touched anything else. The agent stopped suggesting the library we had banned. It stopped inventing its own file naming. It started running the tests without being told. None of that came from a clever prompt. It came from thirty lines the agent reads every time.
One thing worth knowing: every line in CLAUDE.md loads each session, so it costs context budget forever. Keep it tight. A focused forty line file beats a sprawling three hundred line one, which quietly eats the window you need for real work.
Skills, or how I stopped repeating myself
After CLAUDE.md, skills were the next jump.
The realization was simple. The things I asked for over and over were not creative decisions. "Run the linter after you edit." "Write the commit in our format." "Check this for injection before you call it done." Those are workflows, and a workflow can be a file.
A skill is just a folder with a SKILL.md inside it. Two parts: a description that tells Claude when the skill is relevant, and a body with the actual instructions. The description is the part that matters most, because Claude reads it to decide whether to fire the skill at all. Vague descriptions never trigger. Precise ones trigger reliably.
I now have a small set that runs almost every session without me thinking about them. Lint after edit. Run the tests. Write the commit properly. Open the PR with a real description. The agent fires each one at the right moment on its own. This was the point where Claude Code stopped feeling like a chatbot and started feeling like a teammate with discipline.
What I would do if I started today
I would not try to install all five layers in one afternoon. That is how you end up with a mess you do not understand.
I would open my most active repo and write the CLAUDE.md first, adapted to that project, around thirty lines. Then I would add three skills: lint after edit, run the tests, write the commit. Start a fresh session, ask it to change something, and watch the linter fire on its own. That moment is when it clicks.
The subagents and hooks come later, once the foundation is habit. A code reviewer and a debugger you can spawn on demand. A hook that refuses to let failing code reach a commit. Each one earns its place when you hit the need for it.
The gap between getting 30 percent of Claude Code and getting the results everyone talks about was never the prompt. It was the system around it. Once I built the system, the prompt became almost an afterthought.
If you want the whole thing ready to paste
I wrote all of this up properly, with the full copy-paste files, in a field manual called The Claude Code Operating System. It includes the battle-tested CLAUDE.md, eight production skills, twelve subagents, and the safety hooks, plus a kit with the actual .claude/ folder so you can drop it into a repo and have it working in minutes.
👉 You can grab it here: https://growthlibstore.gumroad.com/l/TheClaudeCodeOperatingSystem
If you only take one idea from this article, take this one. Stop optimizing the sentence you type, and start building the system the agent runs inside. That is the whole shift.
Top comments (0)