I built @stefafafan/skm, a tool for managing Agent Skills.
The problem
Agent Skills are basically collections of prompts stored in a specific directory, but I had a vague concern that once everyone starts publishing a massive number of Agent Skills, managing them will become a mess (actually it already is).
- You copy files into places like
.agents/skillsor.claude/skills, and after a while you can no longer tell which files came from where or when you added them- You also have no idea whether updates are available
- From what I understand, agents decide whether to trigger a skill by reading the
nameanddescription, but we do not have strict restrictions on the naming of skills.
What I tried with @stefafafan/skm
I approached it like package management in npm. Inspired by package.json and package-lock.json, I tried managing skills with skills.json and skills.lock.json.
- You can add skills with
skm add stefafafan/skills- The actual skill files are still stored in places like
.agents/skills, butskills.jsonrecords where they came from (i.e. the source GitHub repository)
- The actual skill files are still stored in places like
- You can rename skills with
skm rename old-name new-name- This lets you align skill names to your own preferred naming convention
- Right now this just rewrites the skill directory name and the
namemetadata. That could possibly become a problem if skills ever end up depending on each other, but it is as-is for now.
Other thoughts
- After coming up with the idea, I've fully embraced agentic coding and finished it quickly, but I also ended up not fully understanding the code being produced.
- Later I asked for refactoring and fixes for edge cases.
- I had never published an npm package before, so it was nice to experience the release process.
- For some reason my library started getting regular downloads immediately after publishing, which made me wonder what was going on: https://www.npmjs.com/package/@stefafafan/skm?activeTab=versions
- I also published a brand site: https://getskm.dev/
- This is the kind of result I got by using Codex and frontend-skill
- Cloudflare Workers and Astro were used to build the site.
- I realized afterward that similar libraries already existed
- https://github.com/pi0/skillman: a wrapper around
vercel-labs/skills, with the same idea of managing things throughskills.json. It does not seem to have features like recording which version of a skill was downloaded or providing arenamecommand, which are the features I implemented. - https://github.com/reorx/skm: the name overlaps with mine, but this one seems intended for managing global skills. It is written in Python.
- https://github.com/pi0/skillman: a wrapper around