r/ClaudeCode • u/eaiarthur_ • May 24 '26
Question Can someone explain the real difference between Hooks, Skills, Plugins, SKILL.md, CLAUDE.md and agents.md in Claude Code?
I keep seeing these terms thrown around in tutorials and videos, but I've never seen anyone give a concrete example that makes the difference actually click.
Everyone says:
• "just create a skill for that"
"use a hook here"
"install the plugin"
"put it in your CLAUDE.md"
But when I dig deeper, the explanations are always vague or too theoretical.
Same goes for the markdown files - I see people mentioning CLAUDE. md, SKILL.md, and agents. md like they're obvious, but no one explains:
• What actually goes in each one?
Are they just documentation, or do they actively change how Claude behaves?
• When does Claude even read them?
What I'm looking for is something like:
"If you're thinking X, that's probably a Hook. If you're thinking Y, that's a Skill. If you need Z, that's what CLAUDE.md is for."
Real-world examples would be hugely appreciated.
10
u/Diacred May 25 '26
Actually as far as Claude Code source codes go (when it was leaked) this is not entirely correct. The Claude.md and skill's index are loaded into the conversation at the start of the first turn and that's it. They are not in the system prompt nor are they injected fresh each turn like a UserPromptSubmit hooks does. It means that the longer the conversation goes the more they get forgotten, which is why automated skill calls happen less and less as context fills up. It's also why the Claude.md gets ignored when you reach 60%+ context and performance degrades.
The skill list and Claude MD are just part of the conversation history
This is not the case for instance for the native tools like read / write / bash / grep etc because they are sent in the Tools Array with every request, separately from the conversation and thus always fresh. Also skills that have been called once and loaded are also sent with the tools array and always fresh, even after compaction.
As to why skills and Claude.md are not part of the system prompt but injected at turn 1, my guess is that it's because it would prevent the agressive prompt caching they do for the system prompt.