skillguard

Escáner de seguridad para archivos de habilidades de agentes de IA de terceros (SKILL.md, hooks, scripts) mediante MCP.

Documentación

SkillGuard

CI npm version PyPI version License: Apache 2.0 Tests

InstalaciónPruébalo ahoraCaracterísticasServidor MCPCómo se comparaFAQ

Escanea archivos de habilidades de agentes de IA de terceros (manifiestos SKILL.md, hooks y scripts incluidos) en busca de patrones de ataque conocidos antes de que se ejecuten, y es el único escáner en su categoría que también puedes invocar como herramienta MCP desde dentro de otro agente.

Terminal recording of installing skillguard-cli with npm and running its first scan against examples/known-bad-skill, reporting 11 findings

Instalación

# npm -- JavaScript/TypeScript CLI + library
npm install --save-dev skillguard-cli

# PyPI -- Python CLI + library, a genuine port, not a wrapper around the Node binary
pip install skillguard-cli

Ninguna instalación descarga nada en el momento del escaneo: los diez paquetes de reglas y el motor de coincidencia de patrones se incluyen tanto en el tarball de npm como en la rueda de Python.

Pruébalo ahora

npx skillguard-cli scan ./examples/known-bad-skill

Esto se ejecuta contra un fixture incluido en el repositorio, seguro, no funcional y deliberadamente detectable por patrones, y devuelve 11 hallazgos reales con citas de archivo:línea en aproximadamente 0,15 segundos.

[!NOTE] Cada escaneo imprime Loading SkillGuard rule packs... en stderr primero. Esa es la salida de inicio esperada, no un bloqueo.

Compáralo con un fixture limpio:

npx skillguard-cli scan ./examples/clean-skill

que devuelve cero hallazgos y código de salida 0.

Por qué existe esto

Las habilidades de agentes de terceros se ejecutan con permisos reales de herramientas, archivos y red en el momento en que se instalan, y casi nada las verifica antes. El estudio ToxicSkills de Snyk escaneó 3.984 habilidades listadas públicamente en febrero de 2026 y encontró fallos de seguridad en el 36% de ellas, incluyendo 76 habilidades con payloads maliciosos confirmados: robo de credenciales, reverse shells, exfiltración de datos. La mayoría de los marketplaces y frameworks de agentes no tienen un paso de escaneo entre "alguien publicó una habilidad" y "el agente de un usuario la ejecuta". SkillGuard es ese paso: una CLI, una biblioteca, un servidor MCP y una GitHub Action, todos leyendo los mismos diez paquetes de reglas incluidos.

Características

  • Diez categorías de reglas diseñadas específicamente (SG01-SG10), que cubren desajuste de red, ejecución remota de código, escalada de alcance de archivos, riesgo de cadena de suministro de hooks, payloads ofuscados, recolección de credenciales, suplantación de alcance de frontmatter, inyección de prompts incrustada en el propio texto instructivo de la habilidad, encadenamiento de privilegios entre habilidades y typosquatting de marketplaces. Cada categoría está documentada regla por regla en CHANGELOG.md.
  • Encadenamiento de privilegios entre habilidades (scan-set) detecta una amenaza que los escáneres de una sola habilidad pasan por alto estructuralmente: la habilidad A lee archivos sensibles, la habilidad B tiene salida de red, ninguna declara sandboxing entre ellas, y combinadas pueden exfiltrar lo que la habilidad A sola solo podría leer. npx skillguard-cli scan-set ./my-skills-dir escanea cada habilidad en un directorio y marca la combinación. Los propios mantenedores de Snyk Agent Scan confirmaron en el issue #301 que su flag --skills solo reconoce un SKILL.md a la vez y no descubre habilidades recursivamente en un directorio, así que esto no es una característica que SkillGuard pretenda hacer mejor, es una que ningún otro escáner de habilidades que hayamos encontrado hace todavía.
  • Cero autenticación, cero configuración. npx skillguard-cli scan <path> no necesita cuenta, ni token de API, ni registro. Compáralo con Snyk Agent Scan (SNYK_TOKEN y una cuenta de Snyk) o Socket CLI (SOCKET_CLI_API_TOKEN para funcionalidad completa).
  • Invocable como herramienta MCP, no solo como CLI. npx skillguard-cli mcp inicia un servidor MCP stdio que expone una herramienta scan_skill, de modo que Claude Code, Cursor o cualquier agente orquestador puede escanear una habilidad descargada como una llamada de herramienta antes de instalarla o ejecutarla, sin subprocesos ni análisis de stdout. Verificado con un handshake JSON-RPC real initialize / tools/list / tools/call contra el servidor compilado.
  • Dos distribuciones independientes e igualmente mantenidas. El paquete npm y el paquete PyPI leen el mismo contrato de paquetes de reglas y producen hallazgos coincidentes contra el mismo objetivo; ninguno es un envoltorio del otro.
  • Nada se descarga por red en el momento del escaneo. Todos los paquetes de reglas se incluyen dentro del propio paquete, por lo que un escaneo de contenido no confiable nunca se comunica con nada que el contenido controle.

Inicio rápido

npx skillguard-cli scan ./my-skill --format json --severity-threshold MEDIUM

Terminal recording of npx skillguard-cli scan run with --format json, showing the structured JSON findings output a script or agent can parse directly

import { scanSkill } from 'skillguard-cli';

const result = await scanSkill('./my-skill', { severityThreshold: 'HIGH' });
if (result.exitCode === 1) {
  console.log(`${result.findings.length} finding(s) at or above HIGH`);
}
from skillguard import scan_skill, ScanOptions

result = scan_skill("./my-skill", ScanOptions(severity_threshold="HIGH"))
if result.exit_code == 1:
    print(f"{len(result.findings)} finding(s) at or above HIGH")

Comandos

npx skillguard-cli <command> [options]
# Python: skillguard <command> [options]
ComandoQué hace
scan <path>Escanea un directorio de habilidad (un SKILL.md más sus hooks/scripts) en busca de patrones de ataque conocidos.
scan-set <dir>Escanea un directorio cuyos hijos inmediatos son cada uno un directorio de habilidad, ejecutando scan en cada uno y además verificando el encadenamiento de privilegios entre habilidades (SG09) en el conjunto.
mcpInicia SkillGuard como un servidor MCP stdio, exponiendo scan_skill como una herramienta invocable para otro agente. Ver servidor MCP.

Terminal recording of npx skillguard-cli scan-set run against a two-skill directory, reporting a HIGH SG09 cross-skill-privilege-chaining finding between a filesystem-reading skill and a network-egress skill

Flags compartidos por scan y scan-set (verificados contra src/cli.ts y skillguard/cli.py):

FlagPredeterminadoDescripción
--format <human|json|sarif>humanFormato de salida.
--severity-threshold <HIGH|MEDIUM|LOW>HIGHSeveridad mínima que hace fallar el escaneo (código de salida 1).
--timeout <ms>10000Tiempo de espera de escaneo por archivo en milisegundos.
--skillguardignore <path>ninguno, debe pasarse explícitamenteRuta a un archivo de supresión. Nunca se carga automáticamente desde dentro del objetivo de escaneo; ver Supresión de hallazgos.
--allow-inline-suppressionfalseHonrar los comentarios en línea # skillguard-ignore: SGxx encontrados dentro de los archivos escaneados. Desactivado por defecto.

Códigos de salida: 0 escaneo limpio. 1 un hallazgo en o por encima del umbral de severidad. 2 la ruta objetivo no existe, o (para scan) no se encontraron archivos de habilidad.

Referencia de API

TypeScript (src/index.ts), re-exportado desde la importación raíz del paquete npm:

import { scanSkill, scanSkillSet, discoverSkillDirs, computeCrossSkillFindings } from 'skillguard-cli';

scanSkill(path: string, options?: ScanOptions): Promise<ScanResult>
scanSkillSet(dir: string, options?: ScanOptions): Promise<SkillSetScanResult>

scanSkill() ejecuta la misma lógica de escaneo que scan; scanSkillSet() ejecuta la misma lógica que scan-set. Ambos devuelven un resultado estructurado (findings, timeouts, warnings, exitCode) en lugar de lanzar excepciones, por lo que un llamador que integre SkillGuard nunca tiene que envolverlo en un try/catch solo para obtener un veredicto. Los tipos Finding, ScanOptions, ScanResult, ScanWarning, Severity, OutputFormat, RuleCategory, SkillEntry y SkillSetScanResult se incluyen junto con él.

Python (python/src/skillguard/__init__.py):

from skillguard import scan_skill, scan_skill_set, discover_skill_dirs, compute_cross_skill_findings, ScanOptions

scan_skill(path: str, options: ScanOptions | None = None) -> ScanResult
scan_skill_set(dir: str, options: ScanOptions | None = None) -> SkillSetScanResult

Misma forma, nomenclatura snake_case. Una brecha honesta que vale la pena declarar claramente: el scan_skill_set() del paquete Python ejecuta la misma orquestación de encadenamiento entre habilidades que el scanSkillSet() del paquete npm, pero el paquete npm además ejecuta una segunda verificación SG09 más estrecha dentro de un scan normal de una sola habilidad (una heurística de referencia de ruta hermana, src/ast/cross-skill-chaining.ts) que aún no tiene equivalente en Python. Si dependes de la detección entre habilidades desde una sola llamada scan en lugar de scan-set, esa ruta es solo TypeScript hoy.

Servidor MCP (nativo de agente, llamada de herramienta)

npx skillguard-cli mcp

Inicia SkillGuard como un servidor MCP stdio que expone una herramienta, scan_skill ({ path, severityThreshold?, timeoutMs? }), para que otro agente, Claude Code, Cursor, un orquestador, pueda escanear una habilidad de terceros directamente como una llamada de herramienta antes de instalarla o ejecutarla. Verificado en esta actualización con un handshake real: initialize devuelve información real del servidor, tools/list devuelve el esquema real de scan_skill, y tools/call contra ./examples/known-bad-skill devuelve los mismos 11 hallazgos que reporta la CLI. Ejemplo de configuración de cliente:

{ "mcpServers": { "skillguard": { "command": "npx", "args": ["skillguard-cli", "mcp"] } } }

La configuración completa, el esquema de entrada/salida de la herramienta y las garantías de seguridad que esta ruta preserva (mismos valores predeterminados de .skillguardignore/supresión en línea que la CLI, sin forma de pasar una ruta de ignoración a través de la herramienta) están en docs/integrations/mcp.md. El paquete Python incluye la misma herramienta a través de skillguard mcp (requiere el extra opcional mcp, pip install "skillguard-cli[mcp]", Python >=3.10): nativa y en proceso, llamando a scan_skill() directamente, sin subprocesos ni superficie de análisis de stdout/JSON. uvx puede ejecutarla sin un paso de instalación manual, que es la forma recomendada de conectarla a Claude Desktop:

{
  "mcpServers": {
    "skillguard": {
      "command": "uvx",
      "args": ["--from", "skillguard-cli", "skillguard", "mcp"]
    }
  }
}

GitHub Action

- name: SkillGuard
  uses: RudrenduPaul/skillguard@main
  with:
    path: ./my-skill
    severity-threshold: HIGH

La Action usa por defecto --format sarif y sube los resultados directamente al escaneo de código de GitHub. La CLI simple mantiene un valor predeterminado legible por humanos, ya que una terminal y un registro de CI quieren cosas diferentes.

Paquetes de reglas

Cada paquete de reglas vive bajo rulepacks/ (npm) y python/src/skillguard/rulepacks/data/ (Python), mantenidos en sincronía manualmente y cubiertos por la regla de paridad de CONTRIBUTING.md. Nada se descarga por red en el momento del escaneo.

CategoríaNombreSeveridadQué detecta
SG01desajuste de redMEDIUMSockets crudos, netcat, /dev/tcp, primitivas de red que evaden un alcance típico solo HTTP.
SG02ejecución remota de códigoHIGHcurl | bash, eval()/exec() de una respuesta obtenida, ejecutando comandos con contenido influenciado remotamente.
SG03escalada de alcance de archivosMEDIUMEscrituras/eliminaciones/chmod que alcanzan fuera del directorio propio de la habilidad, y recorrido de ruta (../../..) usado para escapar de él.
SG04cadena de suministro de hooksHIGHHooks o dependencias de instalación que obtienen y ejecutan código remoto, o que se fijan a una rama mutable.
SG05payloads ofuscadosLOWIdiomas de base64/concatenación de cadenas/Function dinámico usados para ocultar un payload. Ver la limitación conocida abajo.
SG06recolección de credencialesHIGHLecturas de variables de entorno con forma de credenciales o archivos de credenciales, especialmente cerca de una llamada de red.
SG07suplantación de frontmatterMEDIUMEl alcance de red/sistema de archivos declarado en SKILL.md vs. lo que realmente hacen los hooks/scripts.
SG08inyección de prompts a través del contenido de la habilidadHIGHEl propio texto instructivo de SKILL.md intentando sobrescribir el prompt del sistema del agente anfitrión o secuestrar su enrutamiento de herramientas (7 IDs de regla: sg08-ignore-prior-instructions, sg08-disregard-system-prompt, sg08-fake-mode-switch, sg08-reveal-system-prompt, sg08-hide-action-from-user, sg08-hidden-unicode-characters, sg08-encoded-block-in-instructions).
SG09encadenamiento de privilegios entre habilidadesHIGHCapacidad combinada entre dos habilidades en una ejecución scan-set, una con lectura sensible del sistema de archivos, otra con salida de red, ninguna aislada de la otra. TypeScript también ejecuta una variante más estrecha de ruta hermana de una sola habilidad de esta verificación; Python actualmente solo incluye la versión scan-set.
SG10typosquatting de marketplacesHIGHEl nombre declarado en SKILL.md a una distancia de edición de Levenshtein de 1-2 de una lista incluida de 51 nombres de paquetes populares de npm/PyPI, un intento de hacerse pasar por una herramienta conocida.

Limitación conocida de SG05: la detección de ofuscación bajo análisis estático puro tiene una tasa de falsos negativos materialmente más alta que las otras categorías. SG05 detecta idioms comunes y conocidos de codificación/eval; trátalo como cobertura de mejor esfuerzo, no como una respuesta completa a la ofuscación.

Cómo se compara SkillGuard

SkillGuard está diseñado específicamente para el modelo de amenazas de habilidades de agentes, el alcance declarado en frontmatter versus el comportamiento real, el riesgo de cadena de suministro a nivel de hooks, la combinación de privilegios entre habilidades y los patrones de recolección de credenciales específicos de cómo se empaquetan e instalan las habilidades. Ese es un trabajo más limitado que el de un escáner de propósito general, y esta tabla lo dice claramente en lugar de implicar que SkillGuard supera a herramientas construidas para un trabajo diferente.

SkillGuardSnyk Agent ScanSemgrep (CE)Socket CLI
Qué escaneaArchivos de habilidad de agente: SKILL.md, hooks, scriptsHabilidades de agente y configuraciones de servidor MCPCódigo fuente general, más de 30 lenguajesInstalaciones de paquetes npm/PyPI/etc.
Conjunto de reglas específico para habilidades de agenteSí, las 10 categorías diseñadas específicamente para este modelo de amenazaSí, todo su enfoque (inyección de prompts, envenenamiento de herramientas, flujos tóxicos, malware de habilidades)No, solo reglas SAST generalesNo, centrado en la cadena de suministro, no en archivos de habilidades
Escanea múltiples habilidades juntas para riesgo combinadoSí, scan-set (encadenamiento de privilegios entre habilidades SG09)No, confirmado que es de un solo archivo/no recursivo según issue #301No aplicable a este modelo de amenazaNo aplicable a este modelo de amenaza
Invocable como herramienta MCP desde otro agenteSí, skillguard-cli mcpNo está documentado públicamenteNoNo
Autenticación requerida para un análisis básicoNinguna (npx skillguard-cli scan <path>)Sí, requiere una cuenta de Snyk y SNYK_TOKENNinguna para análisis locales en Community EditionSí, se necesita SOCKET_CLI_API_TOKEN para funcionalidad completa
Tiempo de ejecuciónNode.js, cero binarios externos (también disponible puerto Python)Python mediante uvxBinario propio (CLI basada en Python)Node.js
LicenciaApache 2.0Apache 2.0LGPL-2.1MIT (según el socket npm package listing; el repositorio en sí no incluye archivo LICENSE)
Estrellas de GitHub (verificado 2026-08-10)1 estrella, aproximadamente un mes de antigüedad, lanzado el 2026-07-112,897 estrellas, 258 forks16,173 estrellas, 1,021 forks311 estrellas, 58 forks

Algunas notas honestas, porque la credibilidad de una herramienta de seguridad depende de decir las partes poco favorecedoras en voz alta:

  • Snyk Agent Scan es el competidor real más cercano, más maduro (2,897 estrellas vs. la 1 de SkillGuard) y que cubre más terreno en general (más de 15 categorías de detección, además del escaneo de configuraciones de servidor MCP, que SkillGuard no hace). Las diferencias reales son la historia de autenticación (SkillGuard no requiere registro ni token) y el análisis entre habilidades (los propios mantenedores de Snyk confirmaron que su herramienta es de un solo archivo hoy). Si ya tienes una cuenta de Snyk y también quieres cobertura de servidor MCP, Agent Scan cubre más terreno; si quieres una verificación sin autenticación que además pueda razonar sobre un directorio completo de habilidades a la vez, eso es para lo que sirve SkillGuard.
  • SkillGuard no envuelve a Semgrep. Trae su propio motor de patrones pequeño e integrado (inspirado en Semgrep, no es Semgrep) para que la instalación de npx nunca dependa de una cadena de herramientas Python/PyPI. Si necesitas análisis estático multiplataforma y de propósito general en más de 30 lenguajes, Semgrep es la herramienta más madura para esa tarea.
  • Socket CLI es una categoría adyacente, no un competidor directo. Está diseñado para typosquats y scripts de instalación maliciosos en paquetes npm/PyPI, no para el frontmatter de SKILL.md de una habilidad ni para el comportamiento declarado versus el real.
  • SkillGuard es genuinamente temprano: 1 estrella de GitHub, aproximadamente un mes desde el primer commit. Es una historia real de "temprano pero real", no algo que valga la pena adornar: cada comando y hallazgo mostrado en este README se ejecutó contra el código real actual mientras se escribía, no se trajo de un borrador antiguo.

¿Qué es SkillGuard y por qué existe?

SkillGuard es un escáner de análisis estático para archivos de habilidades de agentes de IA de terceros, SKILL.md manifestos más los hooks y scripts que incluyen, construido para ejecutarse antes de que una habilidad no confiable se instale o ejecute. Existe porque los mercados y marcos de trabajo de habilidades para agentes generalmente no tienen un paso de escaneo propio: una habilidad puede declarar network: false en su frontmatter y aun así enviar un hook postinstall que canaliza un script remoto a un shell en el momento de instalarse, y no hay nada en la mayoría de los tiempos de ejecución de agentes que verifique que el alcance declarado coincida con el comportamiento real. SkillGuard lee los mismos diez paquetes de reglas desde una CLI, una biblioteca, un servidor MCP y una GitHub Action, de modo que la misma verificación puede controlar un pipeline de CI, ejecutarse dentro del propio bucle de uso de herramientas de un agente, o llamarse directamente desde código.

Supresión de hallazgos

[!WARNING] El trabajo de SkillGuard es examinar directorios que no escribiste. Ambos mecanismos de supresión a continuación pueden silenciar un hallazgo, por lo que ninguno se confía automáticamente desde dentro de lo que se escanea. Cada uno requiere una aceptación explícita y deliberada de quien ejecuta el escaneo.

Un archivo .skillguardignore suprime archivos completos por glob, con el mismo modelo mental que .gitignore:

# .skillguardignore
vendor/**
*.generated.js

Solo se respeta cuando pasas --skillguardignore <path> (o la opción de biblioteca ignoreFilePath). SkillGuard nunca lee un .skillguardignore que viva dentro del objetivo de escaneo por su cuenta. Un envío de habilidad maliciosa que incluya su propio .skillguardignore no puede silenciar hallazgos sobre sí mismo a menos que apuntes explícitamente a SkillGuard hacia ese archivo. Si mantienes una habilidad tú mismo y quieres auto-supresión, guarda tu .skillguardignore y pasa su ruta explícitamente:

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

Un comentario inline # skillguard-ignore: SG02 (en la misma línea que la coincidencia, o en la línea directamente encima) suprime un hallazgo individual en su lugar. Esto está desactivado por defecto y requiere --allow-inline-suppression por la misma razón: el comentario vive dentro del mismo contenido no confiable que se examina, por lo que por defecto nada en un objetivo de escaneo puede silenciar un hallazgo sobre sí mismo. Solo habilítalo para un objetivo que ya confíes, por ejemplo, auto-escanear tu propia habilidad antes de publicarla.

Limitaciones conocidas

SkillGuard documenta sus brechas abiertamente, a propósito. Dos vale la pena mencionar aquí además de la nota de falsos negativos de SG05: los objetivos de escaneo con enlaces simbólicos se dejan sin escanear en lugar de seguirlos, y la detección entre habilidades del paquete de Python actualmente vive solo en scan-set, no como una verificación de ruta hermana de una sola habilidad como hace la de TypeScript. La lista completa, incluido el riesgo residual de ReDoS de patrón único, vive en CHANGELOG.md. Léelo antes de conectar SkillGuard a un control de CI que planees confiar.

Desarrollo

# 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

Consulta CONTRIBUTING.md: un cambio en el paquete de reglas debe aterrizar tanto en rulepacks/ como en python/src/skillguard/rulepacks/data/ con cobertura de pruebas equivalente en ambas suites, porque una regla que solo existe en un idioma es una brecha de comportamiento silenciosa entre las dos CLI.

FAQ

¿Qué es SkillGuard y qué lo hace diferente de un escáner de seguridad de propósito general? SkillGuard es un escáner de análisis estático diseñado específicamente para un modelo de amenaza: archivos de habilidades de agentes de IA de terceros, SKILL.md manifestos más los hooks y scripts que incluyen. Ofrece diez categorías de reglas (SG01-SG10) que apuntan a cosas que los escáneres genéricos no verifican por defecto: alcance declarado en frontmatter versus comportamiento real, riesgo de cadena de suministro en hooks de instalación, inyección de prompts incrustada en el propio texto instructivo de una habilidad, y riesgo combinado entre múltiples habilidades en el mismo directorio. Una herramienta SAST general como Semgrep puede encontrar algunos de los mismos patrones a nivel de código, pero no tiene noción de un manifiesto SKILL.md ni de una relación de privilegios entre habilidades.

¿SkillGuard requiere una cuenta o token de API para ejecutar un escaneo? No. npx skillguard-cli scan <path> y pip install skillguard-cli && skillguard scan <path> funcionan ambos con cero registro, cero token y sin llamada de red en el momento del escaneo.

¿Qué plataformas y tiempos de ejecución de lenguaje admite SkillGuard? El paquete npm necesita Node.js >=20 (según el campo engines de package.json) y no tiene dependencias nativas/compiladas. El paquete PyPI necesita Python >=3.9 para la instalación base, o >=3.10 si instalas el extra opcional mcp para el modo servidor MCP (según pyproject.toml's requires-python y su comentario de dependencia opcional mcp). Ambos son paquetes de lenguaje puro sin paso de compilación específico del sistema operativo, y los clasificadores del paquete de Python declaran Operating System :: OS Independent.

¿Qué comprueban SG08, SG09 y SG10, y pueden ejecutarse también a través del servidor MCP? SG08 (HIGH) busca inyección de prompts dentro del propio texto instructivo de una habilidad, intentos de sobrescribir el prompt del sistema del agente anfitrión o de secuestrar su enrutamiento de herramientas, en 7 identificadores de regla distintos. SG09 (HIGH) es encadenamiento de privilegios entre habilidades: scan-set marca un hallazgo HIGH cuando una habilidad en un directorio tiene capacidad de lectura de sistema de archivos sensible y otra tiene capacidad de egreso de red sin sandboxing declarado entre ellas; la variante simple de scan de TypeScript también ejecuta una variante más limitada de ruta hermana de la misma verificación. SG10 (HIGH) es typosquatting de mercado: el nombre declarado de una habilidad situado a distancia de edición Levenshtein 1-2 de una lista incluida de 51 nombres populares de paquetes npm/PyPI. Los tres se ejecutan a través de la herramienta scan_skill de npx skillguard-cli mcp exactamente igual que a través de la CLI, ya que el servidor MCP llama a la misma lógica de escaneo subyacente.

¿Puede un agente de IA llamar a SkillGuard directamente, en lugar de usar una CLI y analizar la salida? Sí. npx skillguard-cli mcp (o skillguard mcp en el lado de Python) inicia un servidor MCP stdio que expone una herramienta scan_skill, de modo que un orquestador o agente de codificación puede escanear una habilidad descargada como una llamada de herramienta normal antes de instalarla o ejecutarla.

¿Detecta SkillGuard una habilidad que referencia otra habilidad más privilegiada? scan-set lo hace: apunta a un directorio de subdirectorios de habilidades y marca un hallazgo HIGH cuando una habilidad tiene capacidad de lectura sensible del sistema de archivos y otra tiene capacidad de egreso de red sin sandboxing declarado entre ellas. Esta es la brecha específica que el rastreador de problemas de Snyk Agent Scan confirma que su herramienta aún no cubre (de un solo archivo, no recursiva).

¿Cuál es la diferencia entre el paquete npm y el paquete PyPI? Ambos son puertos independientes y mantenidos por igual que leen el mismo contrato de paquete de reglas y producen hallazgos coincidentes contra el mismo objetivo; el paquete PyPI es una implementación genuina de Python, no un envoltorio alrededor del binario de Node. Una brecha actual: el comando scan de TypeScript ejecuta una heurística adicional de ruta hermana entre habilidades que Python aún no tiene (la detección entre habilidades de Python vive por completo en scan-set). Si dependes de la detección entre habilidades desde una sola llamada scan en lugar de scan-set, esa ruta es solo de TypeScript hoy; ejecuta scan-set en el lado de Python para obtener cobertura equivalente.

¿Reemplaza SkillGuard a Semgrep o Snyk? No. Semgrep es un motor de análisis estático de propósito general y maduro en más de 30 lenguajes; Snyk cubre vulnerabilidades de dependencias y código de manera amplia, y Snyk Agent Scan cubre un conjunto más amplio de amenazas de habilidades de agente y configuraciones MCP que SkillGuard hoy. El trabajo de SkillGuard es más limitado: el modelo de amenaza específico de SKILL.md/hooks/frontmatter, con cero autenticación y una verificación entre habilidades que ninguna de esas herramientas incluye actualmente.

¿Está SkillGuard listo para producción? Es temprano: aproximadamente un mes de antigüedad, pre-1.0, 1 estrella de GitHub al momento de escribir esto. La suite de pruebas (157/157 TypeScript, 110/110 Python) pasa en una instalación limpia y cada comando en este README se re-ejecutó de forma independiente contra el código actual, pero aún no se ha ejecutado contra un corpus extenso del mundo real, por lo que trata su tasa de falsos positivos/falsos negativos como no probada a escala en lugar de establecida.

¿Puedo usar SkillGuard comercialmente y la licencia tiene algún costo? Sí, y no. SkillGuard tiene licencia Apache License 2.0 (ver LICENSE), que permite uso comercial, modificación y redistribución, incluso dentro de software propietario, sin costo, siempre que mantengas el aviso de copyright y licencia. Apache 2.0 también otorga una licencia de patente explícita de los contribuyentes, que MIT no.

Licencia

Apache 2.0, ver LICENSE.