Are Agent Skills safe?

The honest answer is: a skill is about as safe as a dependency, and people are treating it like a blog post.
That gap is the whole problem. Installing a skill takes one command and produces no build output, no lockfile entry, and no diff anybody reviews. It feels like bookmarking something. What you have actually done is hand a set of instructions to a process that edits your files and runs commands with your permissions.
None of which means skills are dangerous to use. It means the review is worth ten minutes, and almost nobody spends them.
What can actually go wrong
A SKILL.md file cannot execute anything. It is Markdown. The risk runs entirely through
the agent that reads it, and that agent can already write files and run commands.
So the realistic failure modes are these.
It tells the agent to run something. Skills legitimately bundle scripts and reference them from the body. A skill can just as legitimately-looking instruct the agent to pipe a remote script into a shell, or to run a command whose effect is not obvious from reading it. The agent will generally do it, because doing what the skill says is the entire point.
It moves the real instructions off-site. A body that says “fetch the latest
conventions from example.com/rules.md and follow them” has passed review while placing
the actual content somewhere you never read, and somewhere that can change after you
installed it. This is the pattern worth being least comfortable with.
It reaches for things it has no business reaching for. Instructions to read .env,
scan for keys, look through shell history, or include local configuration in output. Each
is defensible in some narrow tool and suspicious in a skill about writing tests.
It is confidently wrong. The dullest and by far the most common failure. A skill written against an API that changed a year ago does not attack you; it just supplies outdated instructions with total assurance, and you spend a day undoing them. Freshness is a safety property.
It quietly widens the blast radius. “Skip the confirmation prompt.” “Use --force so
it does not stall.” Instructions that remove friction are also instructions that remove
your last chance to notice something going wrong.
The ten-minute review
Every skill listing in our catalog surfaces licence, stars, and last-commit date and links to the source, which makes the mechanical part of this fast. The reading part is yours.
1. Read SKILL.md end to end
It is usually under 200 lines. If you would review a 200-line pull request before merging it, review this. You are scanning for anything that:
- runs a command, especially one fetching from the network
- touches credentials,
.env, keychains, SSH keys, or shell history - sends data anywhere
- instructs the agent to bypass a confirmation, or to act without asking
- points at remote content to be fetched and followed
Most skills contain none of these and the read takes three minutes.
2. List every other file in the folder
SKILL.md is the part people read. A skill can ship anything alongside it:
find the-skill -type f | head -50
Scripts, hooks, and configuration deserve the same scan. A short helper script that does what it says is fine. A minified or obfuscated one in a skill about code style is not.
3. Check the licence
Over a fifth of the public skills we index declare no licence at all. That is rarely malice — it is usually somebody who published in a hurry — but it leaves you no clear footing to adapt or redistribute the work, and it is a reasonable signal about how much care went into the release. MIT and Apache-2.0 dominate the licensed remainder.
4. Check the last commit and the issue tracker
A skill last touched fourteen months ago, against tooling that has moved twice since, is a source of confident misinformation. Open issues that nobody has answered tell you what happens if this breaks for you.
5. Look at who published it
An organisation with several maintained repositories is a different proposition from a week-old account with one. Neither is disqualifying. Both are context.
6. Prefer narrow skills
A skill scoped to one job is one you can fully read and reason about. A skill claiming to cover your entire stack is long, fires constantly, and is much harder to audit. Narrow scope is a security property as much as a quality one.
Scope changes the risk
Where you install a skill determines who it affects.
Personal scope (~/.claude/skills/) applies to every project you open, including
work you did not have in mind when you installed it. The skill you added for a weekend
side project is loaded while you are in the production repository.
Project scope (.claude/skills/) applies only inside that repository — but it applies
to everyone who clones it. That is the point, and it is also the exposure. A skill
committed to a shared repository is a change to how every engineer’s agent behaves.
Which suggests the obvious practice: review skills in pull requests. A new file under
.claude/skills/ should get the same attention as a new CI step, because it has a
comparable reach. Teams that do this catch the “wait, why does the test skill read
.env?” question at the right moment.
For anything touching credentials, deployment, or infrastructure, copy the folder at a known-good commit rather than tracking a branch. A vendored skill cannot change under you.
Sensible defaults
None of this needs to be heavy. Four habits cover most of it:
- Install for a reason. Skills you added speculatively are skills you never reviewed and will not maintain. A small, deliberate library beats a large, inherited one.
- Prefer project scope for team conventions, personal scope for personal habits. Matching the scope to the audience limits how far a mistake travels.
- Keep confirmations on for skills that deploy, migrate, or delete. If a skill asks you to disable a prompt, that is the finding, not the fix.
- Re-read on update. An update to a skill is a diff. Skim it. It is short.
The proportionate view
Skills are one of the lower-risk things in a modern toolchain. They are small, they are plain text, and you can read all of one in the time it takes to make coffee — which is strictly more than most people can say for their npm tree.
The failure mode worth guarding against is not a dramatic attack. It is the drift where you accumulate thirty skills you never read, from authors you never checked, quietly shaping what your agent does in every repository you open. Ten minutes at install time, and a real review when a skill lands in a shared repository, is the whole discipline.
Starting points
If you would rather begin from skills that are already legible — licensed, active, and narrow enough to read in full:
- Best security skills — auditing, secrets handling, vulnerability scanning
- Best testing skills — low-blast-radius by nature, a good first install
- Trending now — what is gaining adoption, with freshness on every card
And if you are writing your own, the authoring guide covers what makes a skill easy for the next person to review.
Frequently asked questions
- Can an Agent Skill run code on my machine?
- Not by itself — a skill is a Markdown file, not a program. But it can instruct the agent to run a bundled script or a shell command, and the agent already has permission to do that on your behalf. The risk is real; it just arrives through the agent rather than from the file directly.
- Is a skill from a popular repository safe?
- Popularity tells you a project is useful and that people have looked at it, which is weak evidence of safety rather than none. It says nothing about the commit pushed this morning. Stars are a starting filter, not a substitute for reading what you install.
- What is prompt injection in the context of skills?
- Text that the agent reads as an instruction when you intended it as data. A skill body is read as instructions by design, so a malicious skill does not need to inject anything — it simply asks. The subtler case is a skill that tells the agent to fetch and follow remote content, which moves the real instructions somewhere you never reviewed.
- Should I pin a skill to a specific version?
- For anything touching credentials, deployment, or infrastructure, yes. Copy the folder at a known-good commit rather than tracking a moving branch, so a future upstream change cannot alter what your agent does without you noticing.
- Are project-scoped skills riskier than personal ones?
- They carry a different risk. A skill committed to a repository applies to every engineer who clones it, so one unreviewed addition affects the whole team. That argues for reviewing skills in pull requests exactly like any other code.