Skills Update
Refresh externally installed skills listed in skills-lock.json.
Installed copies live under .agents/skills/.
Invocation is explicit only - do not update skills unless the user requests it.
Hard rules
- Never run
npx skills updatewithout at least one skill name. A bare update installs or refreshes every discoverable skill and pollutes.agents/skills/with unwanted content. - Never run
npx skills add <source>without--skill <name>. A bare add installs every skill from the source repo and pollutes.agents/skills/. - Never run
npx skills addunless the user explicitly requests a new skill or a legacy refresh (see below). - Only update skill names present as keys in
skills-lock.json. - One skill name per
npxinvocation. Do not batch multiple skills in a single command unless the user explicitly names them. - Run all commands from the repository root.
- Network access is required.
Workflow
Read
skills-lock.jsonand collectObject.keys(skills)- this is the authoritative list. Do not rely on a stale embedded list.For each name, run a separate command:
npx skills update <skill-name>If a skill reports “cannot be updated automatically (installed before skillPath tracking)”, re-add it from its lockfile
sourcewith--skill:npx skills add <source> --skill <skill-name> -yExample:
npx skills add github/awesome-copilot --skill git-commit -y
Or run the helper script (skips well-known sources such as
stripe-best-practices):
bash .agents/skills/skills-update/scripts/read-legacy-skills.sh
Stop and report on the first failure; do not continue blindly.
Review
git statusandgit diff:- Expect changes under
.agents/skills/<locked-skill>/andskills-lock.json(computedHashupdates). - Flag any new skill directories not in the lockfile.
- Confirm project-local skills (e.g.
monorepo-setup,zod,dependency-audit,lint-autofix) are unchanged.
- Expect changes under
Run cspell on touched paths:
pnpm exec cspell skills-lock.json ".agents/skills/**/SKILL.md"
Helper script
From the repository root:
pnpm skills-update
Equivalent to:
bash .agents/skills/skills-update/scripts/update-locked-skills.sh
The script reads skills-lock.json, runs npx skills update <name> once per
skill sequentially, and exits non-zero on the first failure.
Legacy re-add script
For skills missing skillPath in the lockfile:
bash .agents/skills/skills-update/scripts/read-legacy-skills.sh
After re-add, future refreshes work via npx skills update <name> because the
lockfile gains a skillPath.
Known limitations
stripe-best-practices(sourceType: well-known,docs.stripe.com) cannot be re-added withnpx skills add- the CLI tries to git-clone the source and fails. Leave as-is or refresh manually when the skills CLI supports it.
Output format
Skills Updated
- <skill-name>: <passed/failed>
Skills Skipped
- <skill-name>: <reason, or "None">
Unexpected Paths
- <path or "None">
Commands
- <command>: <result>
Validation
- <command>: <passed/failed>