DEV Community

george
george

Posted on

I Scanned 40 Public Agent Skills Before Installation. Here's What the Scorecard Found

Agent skills are becoming a package format for behavior.

A SKILL.md file can teach an agent how to review code, operate a browser, call an MCP server, publish a release, or work with local files. That is useful, but it also creates a trust question that package ecosystems have seen before:

What should I inspect before I install someone else's skill?

I built SkillPreflight, an open-source static scorecard for agent skills, to make that first review easier. Instead of only looking for obviously dangerous strings, it scores seven areas: security, permission restraint, token efficiency, footprint, maintainability, reliability, and compatibility.

Recently I wanted to test the score model against more than hand-written fixtures, so I froze a public sample of 40 skills from GitHub and published the raw results.

SkillPreflight public skill benchmark

How the sample was built

This is a convenience sample, not a claim about the entire skill ecosystem.

I used two GitHub code-search queries:

  • SKILL.md path:.claude/skills
  • SKILL.md path:skills

I selected 20 eligible results from each query after filtering to public, non-fork repositories and one skill per repository. Every source URL was pinned to the exact commit returned by GitHub search.

The scan used SkillPreflight 0.4.0 with its default rules. The committed sample file makes the run reproducible even when repositories change later.

The full methodology, frozen URLs, JSON, and CSV are in the benchmark directory.

Results

All 40 selected skills scanned successfully.

Metric Result
Average score 80.8/100
Median score 85.5/100
Score range 49-90
High-risk review recommended 2
Median activation tokens 840.5
90th percentile activation tokens 2,699

The grade distribution was:

Grade Skills
A 1
B 29
C 5
D 3
F 2

What stood out

1. The biggest gaps were not always dramatic security findings

The lowest category averages were reliability at 29% of its maximum and maintainability at 40%.

Within the selected skill directories, the scanner frequently found no local examples, tests, license, or README. That does not mean the parent repository had none. The benchmark intentionally scanned the selected skill directory rather than treating unrelated repository files as part of the package.

That distinction matters. A skill may be safe enough to read while still being difficult to validate, reuse, or maintain independently.

2. Token cost varied substantially

The median estimated activation size was about 841 tokens, while the 90th percentile reached 2,699 tokens. Four skills crossed the scanner's very-large SKILL.md threshold.

Long instructions are not automatically bad, but always-loaded background material competes with the user's task and other context. Progressive disclosure is useful here: keep activation instructions concise and move detailed references into files that are loaded only when needed.

3. Finding counts need context

One security rule produced 119 occurrences, but those occurrences came from only five skills. Repeated references to credentials or tokens can be legitimate in a security or deployment workflow.

That is why the report now separates "skills affected" from "occurrences." Static analysis should help a reviewer find the right lines; it should not turn pattern counts into an automatic accusation.

4. A high score is not a safety certificate

Static analysis cannot tell whether a remote service is trustworthy, whether downloaded content changes later, or whether a seemingly reasonable workflow will be misused at runtime.

SkillPreflight therefore does not claim that an A grade proves safety. It is a pre-install triage tool: surface risky commands, secret access, prompt-injection language, broad permissions, unpinned dependencies, oversized instructions, and packaging gaps before the skill is trusted.

Try it without installing globally

Scan a local skill:

npx skill-preflight@latest scan ./my-skill
Enter fullscreen mode Exit fullscreen mode

Scan a GitHub skill before cloning it:

npx skill-preflight@latest scan https://github.com/owner/repo/blob/main/path/to/SKILL.md
Enter fullscreen mode Exit fullscreen mode

Generate SARIF for GitHub Code Scanning:

npx skill-preflight@latest scan ./my-skill --format sarif --out skill-preflight.sarif
Enter fullscreen mode Exit fullscreen mode

The scanner reads files but does not execute scripts from the target. It can also run as a GitHub Action so skill authors can apply a score or severity gate on pull requests.

What I would like feedback on

The score weights and static rules are intentionally visible rather than hidden behind a hosted service. The questions I am working through now are:

  • Which findings should affect the score, and which should remain informational?
  • How should a standalone skill inherit documentation from its parent repository?
  • Which permission patterns are too broad across Claude Code, Codex, Cursor, and Gemini CLI?
  • What is the most useful way to measure token cost without pretending the estimate is exact?

The project is MIT licensed, and the rule catalog, benchmark data, and implementation are all public:

I would especially value examples of false positives or important pre-install risks that the current rules miss.

Top comments (0)