DEV Community

Kai Ventura
Kai Ventura

Posted on Originally published at proskillpacks.github.io AI-assisted

How portable are the most-installed agent skills? We measured 69 of them

Disclosure: we make agent skills (see the end). The measurements are script output, and every figure comes from the published data files. Written with AI assistance.

Agent skills are meant to be portable: a folder with a SKILL.md that any assistant can read. We wanted to know how true that is for the skills people actually install. So we measured the top of the skills.sh leaderboard with a script and no model judging anything.

What we did

We took the top 100 skills on skills.sh by all-time installs (2026-10-04). For each one we found SKILL.md through the GitHub tree API and fetched the raw file once, half a second apart. We could fetch 69 skills from 14 repos. 27 listed skills have a source that is not a GitHub repo, and 4 folders were not found.

Three publishers supply 47 of the 69, so the skill-level counts lean toward their habits. Install counts on skills.sh are per package, so we treat them as weight, not as users.

Then regular expressions and file listings measured:

  • frontmatter keys beyond name and description
  • vendor tool names (WebFetch, Skill tool, AskUserQuestion, Bash(...), mcp__)
  • agent product names (Claude Code, Codex, Cursor, Gemini CLI, Copilot, CLAUDE.md or GEMINI.md)
  • hard-coded vendor paths (~/.claude/, .cursor/, .codex/, .gemini/)
  • bundled scripts, by language
  • length, and whether the text contains a fallback phrase

"Coupled" below means at least one of: a vendor tool name, an agent product name, a vendor path, allowed-tools, or a frontmatter key outside the public spec.

What we found

40 of 69 (58%) show no coupling. 29 (42%) show at least one. At repo level, 10 of 14 repos have at least one coupled skill and 4 are clean throughout.

Hard-coded vendor paths: 0 of 69. Nobody points at ~/.claude/ or .cursor/, and nobody uses a $CLAUDE_* variable. The path problem is not in this sample.

Frontmatter is where it leaks. 18 of 69 use only name and description. 51 add keys, mostly spec keys (metadata 31, license 21). 17 use a key outside the spec: disable-model-invocation 12, version 3, argument-hint 2, and one each of hidden, displayName, emoji and homepage. 5 use allowed-tools, each naming a command-line tool through Bash(...).

Vendor tool names in the text: 17 of 69. Skill tool 7, Bash(...) 5, WebFetch 3, AskUserQuestion 1, mcp__ 1 (a skill can name several). Leaving out Bash(...), which only shows up in allowed-tools, it is 12 of 69.

Agent product names: 6 of 69. Claude Code 4, Codex 4, Cursor 2, CLAUDE.md or GEMINI.md 3. Some of those are lists of products the skill works with, which is the opposite of lock-in, so we count mentions without calling them problems.

Fallbacks are rare. Only 17 of 69 contain a phrase like "if you cannot..." or "ask the user to paste". Of the 29 coupled skills, 23 have none, so when the named tool is missing the instructions stop.

Most skills are plain text. 55 of 69 bundle no script. The 14 that do use shell (7), PowerShell (7), JavaScript (5), Python (4) and TypeScript (1); a skill can have several. Only 4 of those 14 also have a fallback phrase.

They are short. Median 105 lines. 56 of 69 are 200 lines or fewer, and one is over 500. 35 of 69 keep long material in a references/ folder.

What ties a skill to one agent

Bundled scripts by language

Limits

Regexes see strings, not meaning, and a fallback phrase does not prove the fallback works. We scanned only SKILL.md, not references/ files or scripts. We did not run any skill in any assistant. It is one snapshot, and 31 of the 100 are missing from it.

A checklist for portable skills

  1. Keep frontmatter to name and description. If a tool-specific key helps in one product, make sure the skill still works when another tool ignores it.
  2. Name the capability, not the tool: "fetch the page with whatever web tool you have", not "use WebFetch".
  3. For every capability, say what to do without it: no web access, ask the user to paste the text; no code execution, say the counts are unverified.
  4. Use paths relative to the skill folder. In install notes, list .agents/skills/ first and tool-specific folders second.
  5. Scripts: one common language, standard library, runtime stated in the README, nothing essential locked in shell-only or PowerShell-only code.
  6. Write a description that says what the skill does and when to use it.
  7. Keep SKILL.md short and move reference material into linked files.
  8. Ship a paste-in prompt for chat apps that cannot load skills.
  9. Read the skill as an assistant with no special tools. Wherever a step is impossible, add the fallback.

Reproduce it

The fetch script, analysis script, raw table and chart code are in the study folder: https://proskillpacks.github.io/study/portability/ . The method is short enough to re-run on a different day or a different leaderboard.

We make portable skills, with a paste-in prompt for every one. The free ones are at https://github.com/proskillpacks/skills

Top comments (0)