36% of agent skills ship with a security flaw. 13% with a critical one. — Snyk ToxicSkills study, Feb 2026
skill-audit is a fully local scanner for AI-agent skills, plugins, MCP
configs, and project instruction files. It reads files from your machine, runs
shipped deterministic rules locally, and does not upload skill contents,
snippets, environment variables, or findings to a cloud service. It discovers
content exposed to Claude Code, OpenAI Codex, GitHub Copilot, Cursor, Gemini
CLI, Windsurf, Cline, and cross-agent project files, then shows the riskiest
result first in a colorized verdict table.
When you want a deeper semantic pass, add optional localhost-only LLM review over
the same discovered skills, deterministic findings, relevant file paths, and
capped snippets.
Run a one-off scan with npx, or install the skill-audit binary globally
before using the commands below, including local LLM review.
npx may fetch the package from npm. The scan itself runs locally after the CLI
starts.
# One-off scan
npx @ondrej-merkun/skill-audit
# Install globally
npm install -g @ondrej-merkun/skill-audit
skill-audit
Want deeper review without sending skills to a cloud model?
skill-audit llm add local --base-url http://127.0.0.1:11434/v1 --model llama3.1
skill-audit scan --llm local
Default scans make no model calls and no enrichment lookups. Optional local LLM review uses your loopback OpenAI-compatible server, labels model findings separately from rule findings, and does not require a cloud account or remote model. This version does not perform enrichment lookups in the user-facing CLI.
Read The First Result
The default scan sorts findings by risk, so the first row is the next thing to review.
AGENT SKILL SOURCE VERDICT SCORE TOP ISSUE
Claude Code docs-assistant Direct FAIL 40 Access to a known credential store path
Codex webhook-exfil-skill Plugin - alerts FAIL 75 Known webhook endpoint
Cursor csv-processor Direct PASS 100 —
- FAIL means a high-risk or mandatory-fail rule fired. Remove or review the skill before using it.
- REVIEW means risky patterns need human context, often in security training, test fixtures, or quoted examples.
- PASS means no shipped rule fired. It is not a guarantee that the skill is safe or current.
Investigate one row with:
skill-audit explain docs-assistant
Common Commands
Scan and filter:
skill-audit # default scan
skill-audit scan --agent claude-code # restrict discovery to one agent
skill-audit scan --skill docs-assistant # scan one matching skill
skill-audit scan --include-marketplaces # include inactive local marketplace inventory
skill-audit scan --scan-all-supporting-files # paranoid supporting Markdown scan
Write reports:
skill-audit scan --json -o skill-audit-report.json # machine-readable JSON
skill-audit scan --summary -o skill-audit-summary.txt # compact text summary
skill-audit scan --html # standalone HTML report at scan.html
skill-audit scan --html skill-audit-report.html # standalone HTML report at a custom path
Add local LLM review:
skill-audit llm add local --base-url http://127.0.0.1:11434/v1 --model llama3.1
skill-audit llm list # configured local models
skill-audit llm check local # local model health check
skill-audit scan --llm local # add local LLM review
skill-audit scan --skill docs-assistant --llm local # review one skill with a local model
skill-audit scan --llm local --llm qwen # compare multiple local models
skill-audit scan --llm all --html skill-audit-report.html
Inventory and follow up:
skill-audit list # inventory without scanning
skill-audit list --include-marketplaces # show installed and inactive marketplace skills
skill-audit explain <name> # inspect one result
skill-audit explain <name> --llm local # inspect one result with local LLM review
skill-audit ignore <name> # suppress a reviewed tree hash
More workflows: docs/EXAMPLES.md.
What It Covers
skill-audit scans global and project-local skill locations for Claude Code,
Codex, Copilot, Cursor, Gemini CLI, Windsurf, Cline, and cross-agent instruction
files such as AGENTS.md. It matches 46 shipped rules across prompt injection,
network exfiltration, filesystem access, code execution, obfuscation, hardcoded
secrets, git-history access, dependency risk, and skill-specific malware
patterns.
Installed or currently exposed skills are the default scan and list surface.
Plugin marketplace payloads under plugins/marketplaces/ are inactive local
inventory; include them only with --include-marketplaces, where output labels
rows as installed or marketplace.
Optional Local LLM Review
The deterministic rule scanner is the baseline. If you already run a local OpenAI-compatible model server, you can add LLM review as a second opinion:
skill-audit llm add local --base-url http://127.0.0.1:11434/v1 --model llama3.1
skill-audit llm check local
skill-audit scan --llm local
skill-audit explain docs-assistant --llm local
skill-audit llm add writes model config to
$XDG_CONFIG_HOME/skill-audit/llms.json, or ~/.config/skill-audit/llms.json
when XDG_CONFIG_HOME is unset. Cloud model URLs are not accepted here. Base
URLs must be loopback URLs such as 127.0.0.1 or localhost; no cloud API key,
hosted account, or remote model is required.
For comparison runs, repeat --llm, pass comma-separated names, or use
--llm all for every enabled configured local model:
skill-audit scan --llm local --llm qwen
skill-audit scan --skill docs-assistant --llm local
skill-audit scan --llm local,qwen --summary
skill-audit scan --llm all --html skill-audit-report.html
LLM findings are labeled separately from deterministic rule findings. They do
not replace rule results, and model failures, timeouts, or invalid responses do
not hide scanner findings. Review payloads include skill metadata, deterministic
findings, relevant file paths, and capped snippets from files that triggered
findings after obvious secret redaction. skill-audit does not send whole home
directories, unrelated files, environment variables, or discovered secrets.
Detailed reference:
- Discovery paths, comparison, scoring, JSON, CI, and FAQ
- Examples
- Threat model and network boundary
- Rule catalog
- Allowlist maintenance
Use In CI
npx --yes @ondrej-merkun/skill-audit@latest scan \
--json \
--output skill-audit-results.json \
--fail-on REVIEW
--fail-on REVIEW exits 1 for REVIEW or FAIL verdicts. The repository also
ships a GitHub Action:
- uses: ondrej-merkun/skill-audit@v1
See the CI reference for the full workflow. In
CI, skill-audit scans files locally inside the GitHub Actions runner and
writes report artifacts. It does not upload skill contents to a separate
analysis service.
Limitations
skill-audit is a local scanner. It does not execute skills, sandbox tools, or
prove intent. Optional local LLM review can miss issues and can hallucinate
findings; deterministic rules remain the baseline scanner. The tool can miss
novel jailbreaks, runtime-fetched behavior, split-string obfuscation, and risks
in services that a skill calls later. Treat it as a fast first filter, not a
replacement for code review or dependency review.
No comments yet
Be the first to share your take.