skillguard

by rudrendupaul

Not rated
GitHub

About

Security scanner for third-party AI agent-skill files (SKILL.md, hooks, scripts) via MCP.

Details

Author
rudrendupaul
Categories
Developer Tools

Setup

Install skillguard in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/rudrendupaul/skillguard

Follow the installation instructions in the repository README, then restart your MCP client.

What is SkillGuard, and why does it exist

SkillGuard is a static-analysis scanner for third-party AI agent-skill files,SKILL.mdmanifests plus the hooks and scripts they bundle, built to run before an untrusted skill is installed or executed. It exists because agent-skill marketplaces and frameworks generally have no scan step of their own: a skill can declarenetwork: falsein its frontmatter and still ship apostinstallhook that pipes a remote script into a shell the moment it's installed, and nothing in most agent runtimes checks that the declared scope matches the actual behavior. SkillGuard reads the same ten rule packs from a CLI, a library, an MCP server, and a GitHub Action, so the same check can gate a CI pipeline, run inside an agent's own tool-use loop, or be called directly from code.

](https://github.com/RudrenduPaul/skillguard/blob/HEAD/CONTRIBUTING.md)[!WARNING] SkillGuard's job is to vet directories you didnotwrite. Both suppression mechanisms below can silence a finding, so neither is ever trusted automatically from inside the thing being scanned. Each requires an explicit, deliberate opt-in from whoever runs the scan.

A.skillguardignorefile suppresses whole files by glob, same mental model as.gitignore:

# .skillguardignore vendor/ .generated.js

It isonly honored when you pass--skillguardignore <path>(or theignoreFilePathlibrary option). SkillGuard never reads a.skillguardignoreliving inside the scan target on its own. A malicious skill submission that ships its own.skillguardignorecannot silence findings about itself unless you explicitly point SkillGuard at that file. If you maintain a skill yourself and want self-suppression, keep your.skillguardignoreand pass its path explicitly:

npx skillguard-cli scan ./my-skill --skillguardignore ./my-skill/.skillguardignore

An inline# skillguard-ignore: SG02comment (on the same line as the match, or the line directly above it) suppresses a single finding in place. This isoff by defaultand requires--allow-inline-suppression, for the same reason: the comment lives inside the exact untrusted content being vetted, so by default nothing in a scan target can silence a finding about itself. Only enable it for a target you already trust, e.g. self-scanning your own skill before publishing.

SkillGuard documents its gaps in the open, on purpose. Two worth calling out here beyond SG05's false-negative note above: symlinked scan targets are left unscanned rather than followed, and the Python package's cross-skill detection currently lives only inscan-set, not as a single-skill sibling-path check the way TypeScript's does. The full list, including the residual single-pattern ReDoS risk, lives inCHANGELOG.md. Read it before wiring SkillGuard into a CI gate you plan to trust.

# TypeScript npm install npm run build npm test # Python cd python python3 -m venv .venv && source .venv/bin/activate pip install -e ".[dev,mcp]" pytest

SeeCONTRIBUTING.md: a rule-pack change must land in bothrulepacks/andpython/src/skillguard/rulepacks/data/with equivalent test coverage in both suites, since a rule that only exists in one language is a silent behavior gap between the two CLIs.

What is SkillGuard, and what makes it different from a general-purpose security scanner?SkillGuard is a static-analysis scanner purpose-built for one threat model: third-party AI agent-skill files,SKILL.mdmanifests plus the hooks and scripts they bundle. It ships ten rule categories (SG01-SG10) targeting things generic scanners don't check for by default, frontmatter-declared scope versus actual behavior, install-time hook supply-chain risk, prompt injection embedded in a skill's own instructional text, and combined risk across multiple skills in the same directory. A general SAST tool like Semgrep can find some of the same code-level patterns, but it has no notion of aSKILL.mdmanifest or a cross-skill privilege relationship.

Does SkillGuard require an account or API token to run a scan?No.npx skillguard-cli scan <path>andpip install skillguard-cli && skillguard scan <path>both work with zero signup, zero token, and no network call at scan time.

What platforms and language runtimes does SkillGuard support?The npm package needs Node.js >=20 (perpackage.json'senginesfield) and has no native/compiled dependencies. The PyPI package needs Python >=3.9 for the base install, or >=3.10 if you install the optionalmcpextra for MCP server mode (perpyproject.toml'srequires-pythonand itsmcpoptional-dependency comment). Both are pure-language packages with no OS-specific build step, and the Python package's classifiers declareOperating System :: OS Independent.

What do SG08, SG09, and SG10 check, and can they run through the MCP server too?SG08 (HIGH) looks for prompt injection inside a skill's own instructional text, attempts to override the host agent's system prompt or hijack its tool routing, across 7 distinct rule IDs. SG09 (HIGH) is cross-skill privilege chaining:scan-setflags a HIGH finding when one skill in a directory has sensitive-filesystem-read capability and another has network-egress capability with no declared sandboxing between them; TypeScript's plainscanalso runs a narrower sibling-path variant of the same check. SG10 (HIGH) is marketplace typosquatting: a skill's declared name sitting Levenshtein edit-distance 1-2 from a bundled list of 51 popular npm/PyPI package names. All three run throughnpx skillguard-cli mcp'sscan_skilltool exactly as they do through the CLI, since the MCP server calls the same underlying scan logic.

Can an AI agent call SkillGuard directly, instead of shelling out to a CLI and parsing output?Yes.npx skillguard-cli mcp(orskillguard mcpon the Python side) starts a stdio MCP server exposing ascan_skilltool, so an orchestrator or coding agent can scan a downloaded skill as a normal tool call before installing or running it.

Does SkillGuard catch a skill that references another, more privileged skill?scan-setdoes: point it at a directory of skill subdirectories and it flags a HIGH finding when one skill has sensitive-filesystem-read capability and another has network-egress capability with no declared sandboxing between them. This is the specific gap Snyk Agent Scan's own issue tracker confirms their tool doesn't cover yet (single-file, non-recursive).

What's the difference between the npm package and the PyPI package?Both are independent, equally maintained ports reading the same rule-pack contract and producing matching findings against the same target; the PyPI package is a genuine Python implementation, not a wrapper around the Node binary. One current gap: TypeScript'sscancommand runs an extra sibling-path cross-skill heuristic that Python doesn't have yet (Python's cross-skill detection lives entirely inscan-set). If you rely on cross-skill detection from a singlescancall rather thanscan-set, that path is TypeScript-only today, runscan-seton the Python side instead to get equivalent coverage.

Does SkillGuard replace Semgrep or Snyk?No. Semgrep is a mature, general-purpose static-analysis engine across 30+ languages; Snyk covers dependency and code vulnerabilities broadly, and Snyk Agent Scan covers a wider set of agent-skill and MCP-config threats than SkillGuard does today. SkillGuard's job is narrower: the specific SKILL.md/hooks/frontmatter threat model, with zero auth and a cross-skill check neither of those tools currently ships.

Is SkillGuard production-ready?It's early: about a month old, pre-1.0, 1 GitHub star as of this writing. The test suite (157/157 TypeScript, 110/110 Python) passes on a clean install and every command in this README was independently re-run against the current code, but it hasn't been run against a large real-world corpus yet, so treat its false-positive/false-negative rate as unproven at scale rather than settled.

Can I use SkillGuard commercially, and does the license cost anything?*Yes, and no. SkillGuard is Apache License 2.0 (seeLICENSE), which permits commercial use, modification, and redistribution, including inside proprietary software, at no cost, provided you keep the copyright and license notice. Apache 2.0 also grants an explicit patent license from contributors, which plain MIT does not.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Create crafted UI components inspired by the best 21st.dev design engineers.

Bring agent evaluations, observability, and synthetic test set generation directly into your IDE for free with Galileo's new MCP server

An MCP server to help AI assistants to answer questions and generate AccelByte Extend SDK code more effectively .

MCP server for AI Diagram Maker — generate beautiful software engineering diagrams directly inside Cursor, Claude Desktop, Claude Code, or any MCP-compatible AI agent

ALAPI MCP Tools,Call hundreds of API interfaces via MCP

AI-powered SVG animation generator that transforms static files into animated SVG components using the Allyson platform

MCP server that gives AI assistants on-demand access to 1,500+ amCharts docs, ~300 code examples, and 1000+ class API references.

APIMatic MCP Server is used to validate OpenAPI specifications using APIMatic. The server processes OpenAPI files and returns validation summaries by leveraging APIMatic’s API.

One shared context layer for AI agents and humans — live API specs, DB schemas, and versioned contracts across repos so every agent and teammate works from the same source of truth.

Build and deploy full-stack Next.js apps with 98 tools for React, AWS, and MongoDB

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.