Skip to main content

Static analysis linter for Claude Code plugins, skills, and agents

Project description

skilllint

PyPI version Python versions License CI

Static analysis linter for AI agent plugins, skills, and agents — for Claude Code, Cursor, Codex, and any agentskills.io-compatible platform.


What it does

skilllint validates the structure and content of AI agent files: plugins, skills, agents, and commands. It catches broken references, missing frontmatter, oversized skills, invalid hook configurations, and more — before they cause silent failures at runtime.

$ skilllint check plugins/my-plugin

plugins/my-plugin/skills/my-skill/SKILL.md
  SK006  Token count 14823 exceeds recommended limit of 8192

plugins/my-plugin/agents/my-agent.md
  NR001  Namespace reference 'other-plugin:some-skill' — plugin directory not found

2 errors in 2 files

Installation

pip install skilllint

Or with uv:

uv add skilllint          # add to a project
uv tool install skilllint # install as a global tool

Requires Python 3.11–3.14.


Quick start

# Validate a plugin directory
skilllint check plugins/my-plugin

# Validate a single skill file
skilllint check plugins/my-plugin/skills/my-skill/SKILL.md

# Validate everything and show a summary
skilllint check --show-summary plugins/

# Auto-fix issues where possible
skilllint check --fix plugins/my-plugin

# Count tokens in any markdown file
skilllint check --tokens-only .claude/CLAUDE.md

Exit codes: 0 = all checks passed · 1 = validation errors · 2 = usage error


Pre-commit hook

Add to .pre-commit-config.yaml:

repos:
  - repo: https://github.com/bitflight-devops/skilllint
    rev: v1.0.0
    hooks:
      - id: skilllint

Platform support

skilllint ships with adapters for three platforms and supports third-party adapters via Python entry points:

Platform Adapter ID Bundled
Claude Code claude-code
Cursor cursor
OpenAI Codex codex
OpenCode, Gemini, and others via entry points

Restrict validation to one platform:

skilllint check --platform claude-code plugins/my-plugin

What gets validated

Code Category Description
FM001–FM010 Frontmatter Required fields, valid values, schema compliance
SK001–SK009 Skill Description quality, token limits, complexity, internal links
AS001–AS006 AgentSkills Cross-platform open standard compliance
LK001–LK002 Links Markdown link validity and broken reference detection
PD001–PD003 Progressive disclosure Directory structure for references/, examples/, scripts/
PL001–PL005 Plugin Structure, manifest correctness, subprocess safety
HK001–HK005 Hook Script existence, configuration validity
NR001–NR002 Namespace refs Cross-plugin skill/agent/command references
SL001 Symlinks Symlink hygiene within plugin directory
TC001 Token count Token count reporting and threshold enforcement
PR001–PR005 Plugin registration Capability registration completeness and correctness in plugin.json
PA001 Plugin agent Sub-agent frontmatter restrictions (hooks, mcpServers, permissionMode)

CLI reference

Usage: skilllint [OPTIONS] COMMAND [ARGS]...

Commands:
  check   Validate Claude Code plugins, skills, agents, and commands.
  rule    Show documentation for a validation rule.
  rules   List all available validation rules.

Options:
  --help  Show this message and exit.

check

Usage: skilllint check [OPTIONS] [PATHS]...

Arguments:
  paths              Paths to validate

Options:
  --check            Validate only, don't auto-fix
  --fix              Auto-fix issues where possible
  --verbose, -v      Show detailed output
  --no-color         Disable color
  --tokens-only      Output token count only
  --show-progress    Show per-file status
  --show-summary     Show summary panel
  --filter TEXT      Glob pattern to match files within a directory
  --filter-type TEXT Filter type (skills | agents | commands)
  --platform TEXT    Platform adapter
  --help             Show this message and exit

rules

Usage: skilllint rules [OPTIONS]

Options:
  --platform, -p TEXT  Filter rules by platform
  --category, -c TEXT  Filter rules by category
  --severity, -s TEXT  Filter rules by severity (error, warning, info)
  --help               Show this message and exit

rule

Usage: skilllint rule [OPTIONS] RULE_ID

Arguments:
  rule_id  Rule identifier (e.g., "SK001", "FM002", "AS001")  [required]

Options:
  --help   Show this message and exit

All four command names are aliases for the same tool:

skilllint   # primary
agentlint   # alias
pluginlint  # alias
skillint    # alias

Third-party adapters

Register a custom platform adapter via Python entry points in your pyproject.toml:

[project.entry-points."skilllint.adapters"]
my-platform = "my_package.adapter:MyPlatformAdapter"

Your adapter must implement the AdapterProtocol interface from skilllint.adapters.protocol.


Links


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skilllint-1.3.1.tar.gz (213.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skilllint-1.3.1-py3-none-any.whl (108.1 kB view details)

Uploaded Python 3

File details

Details for the file skilllint-1.3.1.tar.gz.

File metadata

  • Download URL: skilllint-1.3.1.tar.gz
  • Upload date:
  • Size: 213.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilllint-1.3.1.tar.gz
Algorithm Hash digest
SHA256 6d44c51bb0727f80d05645924e5b9b404d07d16b9274957958d9098c5fc932d9
MD5 603269b77a40d4681fae18a032994fa6
BLAKE2b-256 06b9fe02a301c95a84a2012ea58ff24581bec2b13346ac912978d7bb8bbad765

See more details on using hashes here.

File details

Details for the file skilllint-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: skilllint-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 108.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilllint-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 56e5d047370cb690b156080cf2ec53d1a48a905a26430238601489c37b4ea014
MD5 348c6bcae0b73a7d91d127e9bd5799a7
BLAKE2b-256 0ba81296e46c7ea1a694a7865c05d027e9f94800d3d85b4aafe4023a3bef2c2c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page