Skip to main content

skillint-py

Python License: MIT

A linter for Claude Code skill files (SKILL.md). Catches malformed YAML frontmatter, missing required fields, thin descriptions, hardcoded secrets, and missing body headings before they ship.

Stdlib-only Python port of @mukundakatta/skillint. No PyYAML required -- the linter only needs to recognize the simple key: value mapping that frontmatter actually uses.

Note: there's a separate claude-skill-check package on PyPI by a different author. This package is the user's own port and uses the -py suffix to disambiguate.

Install

pip install skillint-py

Usage

from skillint import lint

result = lint("path/to/SKILL.md")

result.fatal           # True if frontmatter could not be parsed at all
for issue in result.issues:
    print(issue.line, issue.severity, issue.rule_id, issue.message)

You can also lint an in-memory source string:

from skillint import lint_source

source = """---
name: git-commit
description: Use when the user asks Claude to commit changes; handles co-author trailers.
---

## Triggers
"""
result = lint_source(source, file="<inline>")

Result shape

@dataclass
class Issue:
    rule_id: str
    severity: str           # "error" | "warning" | "info"
    message: str
    suggestion: str = ""
    line: int = 1

@dataclass
class LintResult:
    file: str
    fatal: bool
    issues: list[Issue]

Rules

Rule id Severity Checks
missing-frontmatter error File doesn't start with --- YAML fence.
yaml-parse-error error Frontmatter fails to parse as a mapping.
missing-required error name or description is missing.
empty-required error name or description is empty / whitespace.
kebab-case-name error name is not kebab-case (^[a-z][a-z0-9-]*[a-z0-9]$).
overlong-name warning name exceeds 64 characters.
short-description warning / error Description below 80 chars (or below 20 -> error).
no-trigger-in-description warning Description lacks "when / use / trigger / handle / invoke" language.
no-body-headings warning Body has no ## headings.
hardcoded-secret error Provider-shaped key (OpenAI, Anthropic, GitHub, AWS, Slack, Stripe, Google AI).
unknown-field info Frontmatter field outside the known set.

API differences from the JS sibling

  • Stdlib-only YAML parser handles the flat key: value mapping that frontmatter actually uses. Block scalars and tagged values are not supported -- if your frontmatter needs them, the linter falls back to a yaml-parse-error so you'll see it loud and clear.
  • No --config plugin loading -- this Python port runs the built-in rules.
  • Spec entrypoint is lint(skill_md_path) -> LintResult. lint_source covers the in-memory case.

See the JS sibling's README for the broader rationale.

Metadata

Release files for skillint-py 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skillint-py 0.1.0
File Size Uploaded Provenance Actions
skillint_py-0.1.0.tar.gz 10.3 kB Without provenance Details for skillint_py-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for skillint-py 0.1.0
File Interpreter ABI Platform Actions
skillint_py-0.1.0-py3-none-any.whl Python 3 none any Details for skillint_py-0.1.0-py3-none-any.whl

Total release size: 20.5 kB

Release files / skillint_py-0.1.0.tar.gz

Download URL skillint_py-0.1.0.tar.gz
Size 10.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fe4a150fa3fa009f180bedc5f30c8ef7516845bd42ea6e859c50117972aa28a1
BLAKE2b-256 checksum
How to use checksums
455d73c883ea641281d79eb8275a848d7d6592a206e70bc691f1a3187011f297
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / skillint_py-0.1.0-py3-none-any.whl

Download URL skillint_py-0.1.0-py3-none-any.whl
Size 10.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92c2ab99072dd3f3371862119f5c14db92a2bc8a4edae04eda60b5768c161ffe
BLAKE2b-256 checksum
How to use checksums
9d1562a90b6fc7547a5615fbacb4aeea5603f7cf915a75c814f70ae6bc6f95ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Security for skillint-py 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page