Skill Readiness Analyzer
Production readiness scanner for AI Agent Skills - Quality gates, best practices compliance, and operational excellence for the Agent Skills ecosystem.
Beyond security: Ensure your skills are production-ready, efficient, and follow best practices.
Why Skill Readiness Analyzer?
Security scanning catches malicious code. Readiness scanning ensures skills are production-quality:
- Token Efficiency - Keep skills under context limits
- Best Practices - Follow Anthropic/Cursor guidelines
- Cross-Platform - Work on Claude, Cursor, Codex, and more
- Documentation Quality - Clear descriptions and triggers
- Script Reliability - Error handling in utility scripts
Complementary to security scanning: This tool focuses on operational quality and best practices. For security analysis (prompt injection, data exfiltration, malicious code), use dedicated security scanners.
Quick Start
Installation
pip install skill-readiness-analyzer
Scan a Skill
# Scan single skill
skill-readiness scan /path/to/my-skill/
# Scan all skills in directory
skill-readiness scan-skills /path/to/skills/
# Output as SARIF for GitHub Code Scanning
skill-readiness scan /path/to/skill --format sarif --output results.sarif
Example Output
============================================================
Skill: my-project-skill
============================================================
Readiness Score: 72/100 (NEEDS IMPROVEMENT)
HIGH: SRDNS-005 - Description missing activation context
→ Description lacks "Use when..." clause
→ Location: SKILL.md:description
→ Remediation: Add trigger scenarios to description
MEDIUM: SRDNS-001 - SKILL.md exceeds recommended length
→ SKILL.md has 847 lines (recommended: <500)
→ Location: SKILL.md
→ Remediation: Use progressive disclosure with file references
MEDIUM: SRDNS-003 - No progressive disclosure utilized
→ Large skill with no file references found
→ Remediation: Consider splitting detailed content into reference.md
Readiness Categories
| Category | Description | Severity |
|---|---|---|
token-footprint |
SKILL.md exceeds size limits | MEDIUM |
progressive-disclosure |
Content not split into references | MEDIUM |
description-quality |
Missing triggers, wrong person | HIGH |
platform-compatibility |
Uses platform-specific features | MEDIUM |
dependency-completeness |
Missing tool/MCP declarations | HIGH |
instruction-clarity |
Ambiguous or conflicting | MEDIUM |
metadata-validation |
Invalid frontmatter | HIGH |
reference-depth |
Nested references | LOW |
terminology-consistency |
Mixed terminology | LOW |
script-reliability |
Scripts lack error handling | MEDIUM |
Heuristic Rules
15 built-in checks based on Anthropic/Cursor best practices:
| Rule | Check |
|---|---|
| SRDNS-001 | SKILL.md exceeds 500 lines |
| SRDNS-002 | Token count exceeds 2000 |
| SRDNS-003 | No file references for large skills |
| SRDNS-004 | Large code blocks inline (>50 lines) |
| SRDNS-005 | Description missing "Use when..." |
| SRDNS-006 | Description uses first/second person |
| SRDNS-007 | Description too short (<50 chars) |
| SRDNS-008 | Missing required name field |
| SRDNS-009 | Missing required description field |
| SRDNS-010 | Invalid name format |
| SRDNS-011 | Nested references detected |
| SRDNS-012 | Mixed terminology |
| SRDNS-013 | Conflicting instructions |
| SRDNS-014 | Python script missing try/except |
| SRDNS-015 | Shell script missing set -e |
Readiness Score
Skills are scored 0-100 based on findings:
| Score | Label | Meaning |
|---|---|---|
| 90-100 | Production Ready | Ship it! |
| 70-89 | Needs Improvement | Fix high-severity issues |
| 50-69 | Significant Issues | Major rework needed |
| 0-49 | Not Ready | Start over or fix critical issues |
Penalties:
- CRITICAL: -25 points
- HIGH: -15 points
- MEDIUM: -8 points
- LOW: -3 points
CI/CD Integration
GitHub Actions
name: Skill Readiness
on: [push, pull_request]
jobs:
readiness:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install skill-readiness-analyzer
run: pip install skill-readiness-analyzer
- name: Scan skills
run: |
skill-readiness scan .cursor/skills/my-skill \
--format sarif \
--output results.sarif \
--fail-on high
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Using the Action
- uses: nik-kale/skill-readiness-analyzer@v1
with:
path: .cursor/skills/my-skill
fail-on: high
Output Formats
Summary (default)
Human-readable console output with colors and emojis.
JSON
skill-readiness scan /path/to/skill --format json
Markdown
skill-readiness scan /path/to/skill --format markdown
SARIF
For GitHub Code Scanning integration:
skill-readiness scan /path/to/skill --format sarif --output results.sarif
CLI Reference
# Scan single skill
skill-readiness scan PATH [OPTIONS]
--format, -f [summary|json|markdown|sarif]
--output, -o FILE
--verbose, -v
--fail-on [critical|high|medium|low]
# Scan multiple skills
skill-readiness scan-skills PATH [OPTIONS]
--glob, -g PATTERN # Default: */SKILL.md
--format, -f [summary|json|markdown]
--output, -o FILE
--verbose, -v
# List categories
skill-readiness list-categories
# List providers
skill-readiness list-providers
# Generate config file
skill-readiness init [--format toml|yaml]
Configuration
Create .skill-readiness.toml:
[scan]
timeout_seconds = 30.0
[output]
format = "summary"
verbose = false
[heuristic]
max_lines = 500
max_tokens = 2000
min_description_length = 50
[fail]
severity = "high"
Programmatic Usage
from skillreadiness.core.orchestrator import get_orchestrator
from skillreadiness.reports import render_markdown
orchestrator = get_orchestrator()
result = orchestrator.scan_skill_sync("/path/to/skill")
print(f"Score: {result.readiness_score}/100")
print(f"Status: {result.readiness_label}")
for finding in result.findings:
print(f"[{finding.severity.value}] {finding.title}")
report = render_markdown(result, verbose=True)
print(report)
Best Practices Reference
This tool implements checks based on:
- Anthropic's Agent Skills Guidelines - Progressive disclosure, token efficiency
- Cursor's create-skill SKILL.md - Description quality, metadata validation
- Agent Skills Specification - Schema validation, compatibility
Key best practices enforced:
- Keep SKILL.md under 500 lines
- Write descriptions in third person
- Include "Use when..." activation context
- Use file references for detailed content
- Add error handling to scripts
- Declare all dependencies
Contributing
Contributions welcome! Areas of interest:
- Additional heuristic rules
- Platform compatibility checks
- YARA rules for pattern detection
- LLM-based semantic analysis
License
MIT License - see LICENSE for details.
Ecosystem
This tool is part of a broader quality ecosystem for AI agents:
| Tool | Focus | Use Case |
|---|---|---|
| skill-readiness-analyzer | Operational quality | Best practices, efficiency, compatibility |
| mcp-readiness-scanner | MCP operational quality | Production readiness for MCP tools |
For security-focused analysis of Agent Skills and MCP servers, the community has developed dedicated security scanning tools.
Metadata
Release files for skill-readiness-analyzer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| skill_readiness_analyzer-0.1.0.tar.gz | 1.6 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| skill_readiness_analyzer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.6 MB
Release files / skill_readiness_analyzer-0.1.0.tar.gz
| Download URL | skill_readiness_analyzer-0.1.0.tar.gz |
|---|---|
| Size | 1.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cfe0ad38e9382734978bf9671738e48bafc4cea657f00785bb03b8edda108b26
|
|
BLAKE2b-256 checksum How to use checksums |
995c86366e2433ff688c66bdec8a36e949a454390a923b41622d18c98ef6de2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / skill_readiness_analyzer-0.1.0-py3-none-any.whl
| Download URL | skill_readiness_analyzer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a0fe9cadab2e44f27c696e56dbc01496ba1002e65c9f60b2fbca15d4aadde080
|
|
BLAKE2b-256 checksum How to use checksums |
7cf21e4c854bd7de7dd73dd307e43ea059dfa031a7394f005c5c3a4c3e50fb2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for skill-readiness-analyzer 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.