Agentpedia

How we lint

Agentpedia lists a skill only after skill-lint reports no errors and no warnings. The score on an article is that check, not a rating of the advice inside.

Agent Skills are folders with a SKILL.md file. The format is an open specification, now a project of the Agentic AI Foundation under the Linux Foundation. The body is free Markdown, which is why quality varies so widely. A score of 100 is also the Listed certificate. What that certificate does and does not cover is on Certification.

In From Anatomy to Smells, Hong, Imani, and Ahmed at UC Irvine studied 238 real skills sampled from a public marketplace. Over 99 percent — 237 of the 238 — contained at least one skill smell. Smells introduced early rarely disappeared in later commits. Popularity did not clean them up.

Agentpedia vendors tools/skill-lint, a dependency-free Python checker for the spec, for progressive-disclosure smells, for broken relative links, and for a small set of safety patterns. The catalog build runs it on every skill. An error or a warning fails the build. Info findings are recorded and lower the score. This shelf has 0 of them.

The score

A skill starts at 100. Each error subtracts 25, each warning subtracts 8, and each info finding subtracts 2. The floor is 0. The badge reads clean when errors and warnings are both zero, noted when there are warnings but no errors, and blocked when any error remains. Blocked and noted entries do not ship in this catalog.

Spec

Spec rules
RuleSeverityWhat it checks
spec.frontmatter.missingerrorFile must start with YAML frontmatter between --- lines.
spec.frontmatter.invaliderrorFrontmatter must parse as simple YAML keys.
spec.filename.caseerrorThe file must be named SKILL.md. Linux treats the name as case-sensitive.
spec.name.missingerrorname is required and must be non-empty.
spec.name.invaliderrorname is lowercase letters, numbers, and single hyphens. No leading, trailing, or doubled hyphens.
spec.name.too-longerrorname is at most 64 characters.
spec.name.directory-mismatcherrorname must match the parent folder exactly.
spec.description.missingerrordescription is required and must be non-empty.
spec.description.too-longerrordescription is at most 1024 characters.
spec.compatibility.too-longerrorcompatibility is at most 500 characters.

Smells

Smells rules
RuleSeverityWhat it checks
smell.name.unclearwarnName is generic (helper, misc, skill, …) or shorter than 3 characters.
smell.description.no-whenwarnDescription does not say when to use the skill.
smell.description.vaguewarnDescription is under 40 characters.
smell.description.not-third-personinfoDescription uses I/you phrasing. Third person matches more reliably.
smell.description.xmlerrorDescription contains XML or HTML tags.
smell.body.too-long-lineswarnBody is longer than 500 lines. Move detail into references/.
smell.body.too-long-wordswarnBody is longer than 5000 words.
smell.body.huge-inline-blobwarnA fenced block is 80 lines or longer. Move it to references/ or scripts/.
smell.example.missingwarnBody has no example of an input, an output, or a usage.
smell.workflow.steplesswarnA longer body has no numbered steps.
smell.validation.missinginfoBody never mentions a check, a test, or validation.
smell.scripts.missinginfoMany shell commands and no scripts/ helpers.
smell.detail.undelegatedwarnA very long body does not delegate detail to references/.
Links rules
RuleSeverityWhat it checks
link.relative.missingerrorA relative link or scripts/, references/, assets/, or lib/ path does not exist.
link.path.backslashwarnA path uses backslashes. Skill trees are POSIX.

Safety

Safety rules
RuleSeverityWhat it checks
security.secreterrorA hardcoded credential, token, or private key.
security.curl-pipe-sherrorA download piped directly into a shell.
security.rm-rfwarnrm -rf. This is an error when aimed at /, /*, or the home directory.
security.absolute-pathwarnA machine-specific absolute path such as /Users, /home, or a drive letter.
security.exfil-urlwarnA URL that looks like a webhook, tunnel, or paste-site sink.

Scan

Scan rules
RuleSeverityWhat it checks
scan.path.missingerrorThe path passed to the linter does not exist.
scan.skill.not-founderrorNo SKILL.md file was found under the path.
scan.file.unreadableerrorA skill file could not be read as UTF-8.

References