Quick Start
Get scanning in under a minute.
1. Install
# Using uv (recommended)
uv pip install cisco-ai-skill-scanner
# As a standalone tool
uv tool install cisco-ai-skill-scanner # or: pipx install cisco-ai-skill-scanner
# Using pip
pip install cisco-ai-skill-scanner
Check the version with skill-scanner --version. This guide assumes 2.2.0 or newer.
2. Configure the LLM Judge
The LLM judge (--use-llm) is what reads a skill for intent, and every recommended setup uses it. It
needs a model and, for most providers, a key:
export SKILL_SCANNER_LLM_API_KEY="your_api_key"
export SKILL_SCANNER_LLM_MODEL="anthropic/claude-sonnet-5-5" # the default
3. Scan a Skill
# First test: check the CLI works (rules only; add --use-llm for real use)
skill-scanner scan /path/to/skill
# A third-party skill: rules plus the LLM judge, blocking HIGH (highest F1)
skill-scanner scan /path/to/skill --use-llm --policy balanced --fail-on-severity high
# Your own skills: the low-noise preset with the judge
skill-scanner scan /path/to/skill --use-llm --policy low-noise --fail-on-severity high
# Add Python dataflow and known-vulnerable dependency checks
skill-scanner scan /path/to/skill --use-llm --use-behavioral --use-osv
# Scan every skill in a public GitHub repository
skill-scanner scan-repo owner/repo
Not sure which flags to use? Run the interactive wizard:
skill-scanner
The wizard walks you through selecting a scan target, analyzers, policy, and output format. It recommends the LLM judge and leaves the meta-analyzer off.
4. Review Results
Clean Scan
============================================================
Skill: simple-math
============================================================
Status: [OK] SAFE
Max Severity: SAFE
Total Findings: 0
Scan Duration: 0.12s
Findings Detected
============================================================
Skill: config-analyzer
============================================================
Status: [FAIL] ISSUES FOUND
Max Severity: CRITICAL
Total Findings: 11
Scan Duration: 0.37s
Findings Summary:
CRITICAL: 3
HIGH: 3
MEDIUM: 4
LOW: 1
Detected threats include data exfiltration (HTTP POST to external servers), sensitive file access (~/.aws/credentials), environment variable theft, command injection, and base64 encoding + network exfiltration patterns.
5. Scan Multiple Skills
# Scan all skills in a directory
skill-scanner scan-all /path/to/skills --format table
# Recursive scan with cross-skill analysis
skill-scanner scan-all /path/to/skills --recursive --check-overlap
# Detailed markdown report
skill-scanner scan-all /path/to/skills --format markdown --detailed --output report.md
# Add the optional ATR and PromptGuard rule packs
skill-scanner scan-all /path/to/skills --recursive --rule-packs atr promptguard
6. Choose an Output Format
# JSON for CI/CD pipelines
skill-scanner scan /path/to/skill --format json --output results.json
# SARIF for GitHub Code Scanning
skill-scanner scan /path/to/skill --format sarif --output results.sarif
# Interactive HTML report
skill-scanner scan /path/to/skill --use-llm --format html --output report.html
# Compact table for terminal
skill-scanner scan-all /path/to/skills --format table
# Generate JSON and SARIF without scanning twice
skill-scanner scan /path/to/skill --format json --format sarif \
--output-json results.json --output-sarif results.sarif
7. Use Scan Policies
Five presets ship: balanced (the default), low-noise, quiet, strict and permissive.
# Your own skills: fewer harmless flags, same detections
skill-scanner scan /path/to/skill --use-llm --policy low-noise
# The lowest false-positive rate: the fewest flags, only with the judge
skill-scanner scan /path/to/skill --use-llm --policy quiet
# Start a custom policy from a preset
skill-scanner generate-policy --preset low-noise -o my_policy.yaml
skill-scanner scan /path/to/skill --use-llm --policy my_policy.yaml
Recommended Settings shows which preset to use for which job, with measured recall, false-positive rate and F1.
8. Integrate with CI/CD
Fail builds when threats are detected:
skill-scanner scan-all ./skills --recursive --use-llm --policy low-noise --fail-on-severity high \
--format sarif --output results.sarif
Or use the reusable GitHub Actions workflow:
name: Scan Skills
on:
pull_request:
paths: [".cursor/skills/**"]
jobs:
scan:
uses: cisco-ai-defense/skill-scanner/.github/workflows/scan-skills.yml@2.2.1
with:
scanner_version: "2.2.1"
skill_path: .cursor/skills
policy: low-noise
fail_on_severity: high
use_llm: true
llm_model: anthropic/claude-sonnet-5-5
secrets:
llm_api_key: ${{ secrets.SKILL_SCANNER_LLM_API_KEY }}
permissions:
security-events: write
contents: read
actions: read
See GitHub Actions for the full CI/CD guide.
Useful Commands
# List available analyzers
skill-scanner list-analyzers
# Validate rule signatures
skill-scanner validate-rules
# Interactive policy configurator
skill-scanner configure-policy
# List bundled rule packs
skill-scanner scan /path/to/skill --rule-packs list
# Get help
skill-scanner --help
skill-scanner scan --help
Troubleshooting
uv not found
curl -LsSf https://astral.sh/uv/install.sh | sh
Module not found errors
uv sync --all-extras
Permission errors
uv manages its own virtual environment — no manual venv activation needed.
Next Steps
- Recommended Settings: pick a setup for the lowest false-positive rate or the highest F1, and copy its config
- Results and Tuning — Read findings and lower noise
- Features — Explore analyzers, rule packs, and current capabilities
- CLI Reference — All commands and flags
- Scan Policies — Tune detection sensitivity
- Python SDK — Embed scanning in Python applications
- GitHub Actions — CI/CD integration