Use when asked to install, add, or evaluate a third-party skill for this repo, or when deciding whether a skill under .agents/skills/ is safe to run. Use before following instructions from any skill that did not originate in this project — a URL, a package, another repo — and before adding an entry to skills-lock.json.
Installs into .claude/skills of the current project.
Are you the author of Find Skills?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/robotostudio-find-skills)
---
name: find-skills
description: Use when asked to install, add, or evaluate a third-party skill for this repo, or when deciding whether a skill under .agents/skills/ is safe to run. Use before following instructions from any skill that did not originate in this project — a URL, a package, another repo — and before adding an entry to skills-lock.json.
---
# Installing third-party skills safely
A skill is not documentation — it's instructions an agent will *follow*.
Installing one from outside this project is the same trust decision as adding
a dependency, and deserves the same review: read the whole thing before you
run any part of it. An unreviewed `SKILL.md` is arbitrary instruction
injection with a friendly YAML header.
## Provenance convention
- Skills authored **for this project** live under `.agents/skills/<name>/` with
no special marking — `compose-page`, `sync-changes`, and this skill are all
project-authored. They are not listed in `skills-lock.json`.
- Skills installed **from elsewhere** also live under `.agents/skills/<name>/`
(the agentskills.io spec's skill directory), but they
must additionally:
1. Carry `metadata.source` in their own frontmatter naming the origin repo,
e.g. `metadata: { source: "https://github.com/org/repo" }` — the spec's
`metadata` field is exactly this: an open string map for facts the spec
itself doesn't define.
2. Have a matching entry in `skills-lock.json` at the repo root (see below).
A skill under `.agents/skills/` with no `skills-lock.json` entry and no
`metadata.source` should be treated as unreviewed, regardless of how it got
there.
## Installing one
1. **Read it in full** before copying anything in — the `SKILL.md` body, and
every file under its `scripts/`, `references/`, and `assets/` directories.
A skill can defer most of its content to files loaded "on demand"; that
deferral is exactly what an agent skimming only the frontmatter would miss.
2. **Copy** the skill directory into `.agents/skills/<name>/`, keeping its
`SKILL.md` name field matching the new parent directory name (required by
the agentskills.io spec).
3. **Run `pnpm harness`** from the repo root. `.agents/skills/` is mirrored
into `.claude/skills/` for Claude Code (AGENTS.md §2) — skip this and the
new skill is invisible to Claude Code cloud sessions, and CI's
`harness:check` (AGENTS.md §5) fails on a gate this step never warned
about.
4. **Hash it.** Compute a content hash over the installed `SKILL.md` (and any
bundled files), e.g. `shasum -a 256 .agents/skills/<name>/SKILL.md`.
5. **Add an entry to `skills-lock.json`** — source repo, the path within that
repo, the ref/commit it was installed from, and the hash from step 4. See
the worked example already in that file.
6. **Re-verify before trusting an update.** If the upstream skill changes,
its hash changes — that mismatch is the signal to re-review before
re-installing, the same way a lockfile mismatch flags a changed dependency.
## Verifying `skills-lock.json` itself
```sh
node -e "JSON.parse(require('fs').readFileSync('skills-lock.json','utf8'))"
```
confirms the lockfile is at least valid JSON. It does not substitute for
actually reading the skill it describes.