Show HN: SkillsGuard – static scanner for malicious AI agent skills SkillsGuard, a static security scanner for AI agent skill packages, has been released as an open-source tool that detects malicious SKILL.md files and bundled scripts before execution. The scanner decodes obfuscated payloads recursively and applies over 100 rules to identify threats, offering CLI, JSON, SARIF, and MCP output modes. It competes with scanners from NVIDIA, Cisco, Snyk, and Mondoo in the rapidly growing agent-skill security space. If SkillsGuard protects your pipeline, consider supporting ongoing research and new detection rules. ETH Donation Wallet 0x11282eE5726B3370c8B480e321b3B2aA13686582 Scan the QR code or copy the wallet address above. Static security scanner for AI agent skill packages. Detects malicious SKILL.md files and bundled scripts before they run. Scan any SKILL.md with a single curl — no account, no key curl -s --data-binary @SKILL.md \ https://skillsguard.apiskillsguard.workers.dev/scan | jq . Note:SkillsGuard is not currently published on the npm registry. Install by cloning and building from source. 1. Clone, install, build, and link git clone https://github.com/Teycir/SkillsGuard.git cd SkillsGuard npm install npm run build npm link 2. Scan any skill directory or file skillsguard /path/to/skill That's it. SkillsGuard prints color-coded findings to the terminal or --json for CI . Exit code 0 = clean · 1 = findings · 2 = usage error. Want Claude to call the scanner automatically inside your agent workflow? See Local Workflow → Path B local-workflow for the full skill + MCP setup. php flowchart TD A Folder, file, or Git diff target -- B Load config\nskillsguard.config.json B -- C File discovery\nFilter JS, PY, PS1, Docker, Ruby... C -- D{For each file} D -- E Raw text scan\nApply 100+ rules D -- F decode.ts\nExtract encoded blobs F -- G Recursive decode\nbase64, hex, URL G -- H Scan decoded content E & H -- I{Findings?} I -- |no| J ✅ Clean — exit 0 I -- |yes| K Deduplicate findings K -- L Compute Risk Score\n0 - 100 L -- M{Output mode} M -- |CLI| N ANSI colored report M -- |--json| O JSON output M -- |--sarif| P SARIF output M -- |MCP| Q MCP response N & O & P & Q -- R{Risk max-risk?} R -- |yes| S ❌ Exit 1 R -- |no| J style A fill: 0d1117,stroke: 00ff88,color: c3f5dc style J fill: 0d1117,stroke: 00ff88,color: 00ff88 style S fill: 0d1117,stroke: ff4444,color: ff8888 style G fill: 0d1117,stroke: f0a500,color: f0c060 style K fill: 0d1117,stroke: 00ff88,color: c3f5dc Key insight:SkillsGuard decodes obfuscated payloadsbeforescanning, so a base64-wrapped reverse shell can't slip through. Every finding is deduplicated — each rule fires at most once per file per line. How SkillsGuard Compares how-skillsguard-compares Why SkillsGuard why-skillsguard Features features Threat Coverage threat-coverage Quick Start quick-start Local Workflow local-workflow CLI Usage cli-usage Git Diff Mode git-diff-mode Configuration File configuration-file Risk Scoring & Gating risk-scoring--gating SARIF Output sarif-output Model-Specific Rules model-specific-rules Rule Explorer & Tuning rule-explorer--tuning Watch Mode watch-mode Baseline Workflow baseline-workflow Pre-commit Hook pre-commit-hook MCP Server mcp-server HTTP Server http-server Cloud API Free cloud-api-free Live Demo live-demo Library API library-api Rules Reference rules-reference Obfuscation Detection obfuscation-detection Test Fixtures test-fixtures Project Structure project-structure Limitations limitations Contributing contributing License license Attribution attribution Related Projects related-projects Support Development support-development The agent-skill security space filled up fast in 2026 — NVIDIA, Cisco, Snyk, and Mondoo have all shipped scanners for this exact problem. Worth knowing the field before you pick a tool, including this one. | Tool | Backing | Requires account/token | Requires LLM call for core scan | Detection approach | Notable extra | |---|---|---|---|---|---| SkillsGuard | Independent, MIT | No | No | Static regex, decode-first recursive base64/hex/URL/Unicode unwrap | Pre-commit hook + git-diff mode; free curl API | | NVIDIA, Apache 2.0 | No | No optional, for semantic stage | Static + optional LLM semantic pass | Live OSV.dev dependency-CVE lookup | | Cisco | No | No optional, for semantic stage | Multi-engine: static + behavioral dataflow + LLM semantic + cloud | GitHub Actions workflow built-in | formerly mcp-scan | Snyk, commercial | Yes — SNYK TOKEN required | Yes — deterministic rules + LLM judges combined | Auto-discovery across Claude/Cursor/Windsurf/Gemini CLI + MCP servers | Powers Vercel's at-install skill scanning | | Independent | No | Only for predict mode optional | YAML rule engine + optional LLM behavioral dry-run + optional Docker sandbox | Temporal/delayed-activation detection via LLM role-play | Mondoo Skill Check | Mondoo, commercial | No free tier, non-commercial | Unclear from public docs | Static, maps to OWASP LLM Top 10 | Hosted dashboard + REST API | The throughline that matters most: SkillsGuard is the only tool in this table that needs nothing beyond Node ≥18.3 to run a full scan — no account, no API token, no LLM endpoint, no network call. Every other actively-maintained competitor either requires signing up for a service Snyk or recommends configuring an LLM provider to get full coverage NVIDIA, Cisco, SkillScan . That makes SkillsGuard the simplest choice for a CI gate or pre-commit hook that has to run the same way, offline, every time — and the LLM-augmented tools the better choice when you want semantic/intent-level review and don't mind the extra dependency. They are not mutually exclusive. A common-sense setup: SkillsGuard or any zero-dependency static tool as the fast deterministic CI/pre-commit gate, paired with one of the LLM-augmented scanners for a deeper one-off review before trusting a genuinely new or high-privilege skill. SkillSpector is the most architecturally similar project — same "scan before install" framing, same SARIF/JSON output story, backed by a published empirical study 42,447 skills scanned, 26.1% found vulnerable . SkillsGuard | NVIDIA SkillSpector | | |---|---|---| | Runtime dependency | None — Node ≥18.3, zero npm deps | Python ≥3.12 | | Detection approach | Static regex, decode-first | Static + optional LLM semantic pass | | Rule count | 151 rules / 15 categories | 64 patterns / 16 categories | | Dependency CVE lookup | No | Yes — live OSV.dev lookup | | Install | npm link or zero-install via free hosted curl API | pip install / git clone | | Pre-commit hook | Yes — install-hook , with baseline workflow | Not part of the documented workflow | | Git diff / staged-files mode | Yes — --diff , --staged | Not part of the documented workflow | | SARIF output | Yes | Yes | | MCP server | Yes — scan skill , scan skills dir , teachable SKILL.md | Not applicable LangGraph-based pipeline | | Maturity as of this writing | v1.1.1 | v2.0.0, 5.5k+ GitHub stars, published paper | Honest take: SkillSpector has more research weight behind it and an LLM semantic stage that catches intent-level issues regex can't — e.g. a skill that says it formats code but quietly also reads ~/.ssh . If that extra layer of reasoning matters more to you than staying dependency-free, it's a strong choice. Worth scanning the same skill with both and comparing findings rather than picking one blind. AI agent skill packages SKILL.md + bundled scripts are a new and largely unaudited attack surface. A malicious skill can: Inject prompts to override Claude's guidelines or hijack its persona Exfiltrate secrets — API keys, SSH keys, cloud credentials — via curl or WebSockets Execute arbitrary commands using eval, subprocess, or child process Persist by writing cron jobs, systemd units, or modifying shell startup files Escalate privileges via sudo stdin, chown root, or setuid calls Obfuscate all of the above behind base64 or hex encoding to evade naive scanners SkillsGuard scans skill directories statically — no execution, no sandboxing needed — and catches these patterns before an AI agent ever reads the file. It also decodes obfuscated blobs base64, hex, URL-encoding, recursively so double-encoded payloads cannot hide. Zero runtime dependencies. Runs anywhere Node ≥ 18.3 is available. 151 detection rules including specialized Model-specific rules jailbreak persona attempts, XML tag spoofing, sleeper conditional triggers, lateral payload passes and Advanced attack techniques Unicode steganography, config poisoning, narrative framing, tool hijacking, dynamic preprocessing integrated into obfuscation category Multi-language support : Expanded coverage for PowerShell .ps1 , Dockerfiles, and Ruby .rb , Gemfiles Decode-first preprocessing — base64 / hex / URL decoding with recursive depth-2 unwrapping CLI with human-readable colored output, JSON mode, and SARIF output formats Git Diff Mode : Scan only modified or staged files using --diff and --staged Configuration File Support : Auto-loads skillsguard.config.json walking up to filesystem roots Risk Scoring : Computes a single-number threat rating 0-100 to easily gate CI pipelines based on --max-risk