Use when checking skill quality, validating frontmatter before commit, or diagnosing validator warnings. Runs the plugin validator on a skill, agent, or plugin directory — reports token complexity, broken links, frontmatter issues, and structural problems. Pass the path as an argument.
Installs into .claude/skills of the current project.
Are you the author of Lint?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/jamie-bitflight-lint)
---
name: lint
description: Use when checking skill quality, validating frontmatter before commit, or diagnosing validator warnings. Runs the plugin validator on a skill, agent, or plugin directory — reports token complexity, broken links, frontmatter issues, and structural problems. Pass the path as an argument.
argument-hint: <path-to-skill-or-plugin>
user-invocable: true
---
If the user's intent does not match this skill, route through `/plugin-creator:plugin-lifecycle`.
<provided_path>
$ARGUMENTS
</provided_path>
Run `uvx skilllint@latest check <path>` via Bash, using the exact literal path in <provided_path/>. Never splice <provided_path/> directly into a `` !`...` `` injection line or any other shell-interpreted string — it is caller-supplied text and may contain characters (`;`, `` ` ``, `$()`, `|`) that corrupt shell parsing on contact.
Read the findings straight from the command output. Each one carries its error code, severity, the
field or path it applies to, and the suggested fix. Report those to the user and act on them; do
not look up a code anywhere else. Re-run with `--fix` to apply the auto-fixable ones.
## Runtime escapes
When <provided_path/> is a plugin directory, also run:
```bash
uv run "${CLAUDE_PLUGIN_ROOT}/skills/lint/scripts/audit_runtime_escapes.py" --plugin-dir <path>
```
It reports every path, markdown link, and cross-plugin reference in the plugin's runtime files
that resolves only in the authoring repo, with file:line for each. Exit 0 means clean; exit 1
means findings. Pass `--all` instead of `--plugin-dir` to sweep every plugin and get one count
each.
A finding is real when the text tells the runtime agent to act on something an installed
consumer does not have. Fenced blocks are exempt, because an anti-pattern shown in a fence is an
illustration rather than an instruction; angle-bracket placeholders are exempt for the same
reason. Move an illustrative real path into a fence, and write a generic one as
`<plugin>/skills/<name>/SKILL.md`.
The test behind each finding: a path, command, fact, or cross-plugin reference is present in
every environment, bundled and reached by a relative path inside the plugin, or inlined;
otherwise inline, bundle, guard, or delete it. A harness variable counts only where that harness
substitutes it. The scanner never reports a path built on `${CLAUDE_PLUGIN_ROOT}` or
`${CLAUDE_SKILL_DIR}`, so check those by hand against the same test.