Compare
Plugins vs skills: one runs code, one runs words
These two get confused constantly, and the confusion is expensive. A skill can only tell the model what to do. A plugin can do things whether or not you asked — it runs inside your session with your permissions. That difference is the whole reason to care which one you are installing.
The short version: if it ships instructions, it is a skill and it cannot hurt you beyond a bad answer. If it ships code that hooks into events, it is a plugin, and it can.
| Plugin | Skill | |
|---|---|---|
| What it is | A package that can run code: hooks, tools, panes | A markdown file of instructions the model reads |
| Can touch your files | Yes, with your permissions | No — it can only ask the model to do things |
| Can reach the network | Yes, if it declares $.http.fetch | No |
| Can spend your usage | Yes, if it calls $.model.complete | Only as part of your normal turn |
| Install | Two commands, from a marketplace | Drop it in .claude/skills/ |
| Where it runs | Inside Claude Code, every session that loads it | Read into context when relevant |
| Fails how | Silently, in the background, on files you did not name | Visibly, as a bad answer |
| Best for | Seeing something, blocking something, saving tokens | Teaching the model your conventions |
When to pick a plugin
When the thing you want cannot be described to the model — it has to be done to the session. Showing a cost meter above the prompt, holding back the fifth subagent in ten minutes, keeping the prompt cache warm while you make coffee. No amount of instructions does those; something has to watch the event and act on it.
When to pick a skill
When what you want is judgement applied consistently — how you want tests written, which patterns to follow, what to never touch. A skill is a note that rides along in context. It cannot enforce anything, which is exactly why it is safe to install a dozen of them.
The trap worth knowing
People install a plugin expecting skill behaviour — they think it will "help the model write better code". It will not. It will run code at event boundaries. If a plugin's page does not say which events it hooks, that is a reason to open the repository, not a reason to skip reading it.