Skip to content
Zulqarnain Haidar
All issues
Issue No. 018 min read

I have 795 Claude skills. I've used seven.

Anthropic deleted 80% of Claude Code's system prompt and the model got better. So I sat down to delete my own setup. My instruction file turned out to be fine — the waste was in a folder I'd stopped looking at.

Zulqarnain Haidar

When it’s worth sending

A fine-line drawing of a branch heavy with hundreds of faintly outlined leaves. Only a handful at the tip are filled in clay. More clay leaves lie pruned on the ground beneath it.

Boris Cherny built Claude Code. On stage at Y Combinator's Startup School he said Anthropic deleted 80% of the system prompt shipping inside the product. The model came out smarter without it.

Then he turned it on the rest of us:

"For people that aren't building agentic products, but you're using Claude Code, every 6 months delete your Claude MD. Delete your skills. Delete your hooks. See what the model does and it might surprise you."

So I sat down to do it. I measured everything first. It surprised me, but not in the way I expected — my instruction file was fine, and the waste was somewhere I hadn't looked in months.

First, the five pieces

Most of the confusion here is vocabulary. There are five things, and the only real difference between them is when each one loads.

Five stacked rows ordered by when each part of a Claude Code setup loads. CLAUDE.md is highlighted at the top: loaded in full every session, costing tokens every time. Below it, auto memory loads every session but is capped. Hooks fire on an event, skills load when called, and subagents run in their own context — none of which cost anything until they fire.
Only the top row is paid for on every single session.

In plain words:

  • CLAUDE.md — a text file of instructions you write. Claude reads it at the start of every session, before it reads your message.
  • Auto memory — the same idea, except Claude writes it, from your corrections.
  • Hooks — a command that runs on an event. Not a request. It runs whether Claude feels like it or not.
  • Skills — a workflow you saved and gave a name to.
  • Subagents — a second, empty context window sent off to do one job.

One correction, because I had this wrong for months: your CLAUDE.md is not the system prompt. The docs are blunt about it — it "is delivered as a user message after the system prompt, not as part of the system prompt itself." That sounds like trivia. It isn't, and I'll come back to it.

What the audit actually found

My global CLAUDE.md is 61 lines. Anthropic's own ceiling: "target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence."

So it passed. Nothing to cut. I'd been maintaining the one thing that didn't need maintaining.

Then I counted the skills folder.

7 of 795Skills I have ever actually invoked

795 installed. Seven that I have ever once used. That count comes from the session history sitting on this machine, so seven is a floor rather than a census — but you could double it and the number would still be ridiculous.

A grid of 795 small squares, one per installed skill. All but seven are a faint grey; exactly seven are filled in clay and scattered across the grid. Labelled 795 skills installed on the left and 7 ever invoked on the right, with the seven named underneath: diagram-design, karpathy-guidelines, saas-mvp-playbook, taste-skill, ui-ux-pro-max, zulqarnain-agent-builder and a web app pen-test skill.
One square per installed skill. The seven clay ones are every skill I have ever actually called.

Here's the part that nearly let me off the hook: a skill's body only loads when you call it. 788 unused skills are not quietly burning tokens on every session.

They're doing something subtler. Every skill you install still has to announce itself — a name and a one-line description — so the model knows it exists at all. At 795, that roll call is not nothing. And it makes the choosing worse: when a hundred descriptions overlap, picking the right one stops being obvious. A short list of skills I actually use beats a long list I might.

Why long instructions get skimmed

Models read the beginning and the end of a long context carefully. They skim the middle. The paper that named it is called Lost in the Middle, and it's the strongest argument against a bloated instruction file.

A U-shaped curve of how carefully a model reads each position in its context window: high at the start, sagging through the middle, rising again at the end. Your instruction file is marked near the start, with an arrow showing it sliding into the sag as the session grows — same file, twenty turns later, nothing changed but its position. What you just typed sits at the far right, always read closely.
Shape of a documented effect, not measured data — which is why the axis has no numbers.

Here's the bit I had backwards. Your CLAUDE.md loads at the start, which is the well-read end. On turn one it's in a good seat. It's turn twenty that costs you: the file hasn't moved, but the conversation has grown around it, and now it's sitting in the sag.

So a long file charges you three ways at once:

  1. Tokens. Every line, every session, relevant or not.
  2. Accuracy. In Anthropic's words, "if two rules contradict each other, Claude may pick one arbitrarily." You never find out which one won.
  3. Attention. Every line you add pushes everything else deeper into the middle.

And none of it is enforced. "Claude treats them as context, not enforced configuration." They're strong suggestions competing with each other.

The one thing that is enforced

That sentence in the docs has a second half: to block something regardless of what Claude decides, use a hook.

I have exactly one. It refuses any command that would print the contents of a credentials file.

It fired while I was writing this issue. I asked for a file to be read, Claude reached for cat on a path inside .claude/, and the hook stopped it dead. Claude shrugged and used a different tool. I didn't intervene.

That's the whole distinction. A rule in your CLAUDE.md asks. A hook blocks.

What I'm doing instead of deleting

You type a message from whatever folder. One arrow goes up to a 61-line CLAUDE.md that points rather than holds, in a zone marked every session. A second arrow, labelled trigger word, goes down into a zone marked only when a word fires it: a hook matches the word, pulls in the heavy 800-line project file, and the skill runs.
The 800-line file never enters a session it isn't needed in.

Keep the always-loaded file short, and let it point instead of hold. The heavy material lives in project files and skills that only get pulled in when a word in my message makes them relevant.

I never start in the right folder either. I open Claude wherever I happen to be. The routing does the walking, so I get the right instructions anyway.

Three prompts to run on yourself

Most audit prompts I've seen for this run to thirty-plus lines, which is a strange thing to hand someone in an article about instructions being too long. These are six each.

Audit my CLAUDE.md against Anthropic's current guidance.
Fetch the live docs first — don't answer from memory.
One verdict per line: keep, rewrite, or delete, with the reason.
Quote the guidance behind every delete. No quote, no delete.
Flag any two rules that contradict each other.
End with the count: lines in, deletes, rewrites, additions.
Audit my skills folder. Change nothing yet.
Group them by the job they do, not by their name.
For each group of two or more, say which to keep and what I lose.
List every skill I have never once invoked.
List every skill pointing at a file that no longer exists.
Then write out the merged version of the biggest group, in full.
List every hook I have: trigger, when it fires, what it does.
Mark the ones that run on every single message.
Flag any trigger word common enough to fire by accident.
Flag any two that can fire at once, and say what happens then.
Tell me which ones I've probably forgotten I set up.
Verdict each: keep, fix or remove. Change nothing yet.

What I'd tell you

The advice is right, but it isn't really about deletion. It's about checking, because the answer moves every time a model ships — and the thing you've been carefully pruning is rarely the thing that's gone wrong.

Mine had gone wrong in the folder I'd stopped thinking about. The file I babysat was fine at 61 lines. The 795 skills I'd collected because installing them was free turned out to have a cost after all — just not the one I was watching for.

I'm not deleting my setup. I'm deleting most of that folder.

— Zulqarnain

Get the next one

New teardowns as they land. Prompts, costs, and the parts that didn’t work.

You’ll get one confirmation email, then the newsletter. No tracking, no sharing, unsubscribe in one click. See the privacy policy.

Free forever. Unsubscribe in one click.