01 Por qué revisar lo que instalas
Una skill o un servidor MCP no es un simple documento: Claude lee sus instrucciones como si vinieran de ti y, en muchos casos, ejecuta los scripts que trae. Eso abre dos vías de ataque muy concretas:
- Inyección de instrucciones: un párrafo oculto en el
SKILL.mdque pide a Claude leer archivos sensibles, enviar datos a una URL o ignorar tus indicaciones. - Robo de credenciales: un script auxiliar que busca claves SSH, tokens o variables de entorno y las manda fuera.
El estudio académico en el que se basa la herramienta (Agent Skills in the Wild, Liu et al., 2026) analizó 31.132 skills de los grandes catálogos: el 26,1 % tenía al menos una vulnerabilidad y el 5,2 % mostraba indicios de intención maliciosa.
02 Qué es SkillSpector
SkillSpector es un escáner de código abierto de NVIDIA (licencia Apache 2.0) pensado para skills de agentes. Acepta un repositorio Git, una carpeta, un .zip o un archivo suelto y devuelve una puntuación de riesgo de 0 a 100, una severidad y una recomendación. Busca 71 patrones agrupados en 17 categorías, entre ellas inyección de prompts, exfiltración de datos, escalada de privilegios, cadena de suministro y envenenamiento de herramientas MCP.
| Puntuación | Severidad | Recomendación |
|---|---|---|
| 0-20 | LOW | SAFE |
| 21-50 | MEDIUM | CAUTION |
| 51-80 | HIGH | DO_NOT_INSTALL |
| 81-100 | CRITICAL | DO_NOT_INSTALL |
Nunca ejecuta lo que analiza
Todo el análisis es estático (expresiones regulares, árbol sintáctico de Python y firmas YARA), así que escanear no pone en riesgo tu equipo.
Modo local con --no-llm
Con esta opción el contenido de los archivos no sale de tu ordenador. Solo consulta a la base pública OSV.dev los nombres y versiones de las dependencias declaradas.
Análisis con IA opcional
Puede añadir una revisión semántica con un modelo para reducir falsos positivos. Entre los proveedores admite claude_cli, que usa tu sesión de Claude Code sin clave de API.
No es un sandbox
Detecta patrones antes de instalar; lo que haga la skill después ya no lo vigila. Es una capa más de defensa, no la única.
uv tool install git+https://github.com/NVIDIA/skillspector.git
skillspector scan https://github.com/usuario/repo --no-llm --format json
03 Cómo funciona el filtro automático
Claude Code permite registrar hooks: scripts que se ejecutan en momentos concretos. Uno de tipo PreToolUse con el filtro Bash se lanza justo antes de cada comando de terminal, recibe el comando en JSON por la entrada estándar y puede responder permitiendo, avisando o pidiendo confirmación. El filtro que vas a crear solo actúa con comandos que traen código de terceros; el resto pasa sin tocarlo.
| Resultado del escaneo | Qué hace el hook | Por qué |
|---|---|---|
| SAFE | Deja pasar en silencio | No hay nada que contar |
| CAUTION | Deja pasar y muestra un aviso breve con la puntuación | En modo local salen muchos falsos positivos; bloquearlos todos haría que acabaras desactivando el filtro |
| DO_NOT_INSTALL | Pide confirmación con permissionDecision "ask" y los hallazgos más graves | Decides tú con el informe delante, incluso en modo automático |
| Error o tiempo agotado | Deja pasar y avisa de que no se ha revisado | Un fallo del escáner no debe bloquear tu trabajo, pero tienes que saberlo |
04 Configúralo con un solo prompt
Abre Claude Code en cualquier carpeta y pega el siguiente encargo. Está escrito para que Claude no toque tus ajustes sin enseñarte antes el cambio.
Quiero un filtro de seguridad global en Claude Code que analice con SkillSpector todo el código de terceros antes de que entre en mi equipo.
Preparación
- Comprueba si existe el comando skillspector. Si no, instálalo con: uv tool install git+https://github.com/NVIDIA/skillspector.git (si falta uv, explícame cómo instalarlo desde su documentación oficial antes de hacer nada).
- Lanza un escaneo de prueba con --no-llm --format json sobre un repositorio público de skills pequeño y enséñame la estructura de risk_assessment e issues y el tiempo que ha tardado.
El hook
- Script en ~/.claude/hooks/skillspector-guard.sh, registrado en ~/.claude/settings.json como PreToolUse con matcher Bash y timeout de 120 segundos.
- Solo actúa si el comando es git clone, npx skills add, claude mcp add, una instalación desde git+https con pip o uv, o una descarga con curl o wget redirigida a sh o bash. Con cualquier otro comando sale sin imprimir nada.
- Extrae la URL de GitHub (convierte owner/repo en URL completa). Si no hay repositorio de GitHub, deja pasar con un systemMessage que diga que no se ha revisado.
- Escanea con un límite de 100 segundos, compatible con macOS sin instalar nada adicional.
- Decide según risk_assessment.recommendation: SAFE en silencio; CAUTION con systemMessage breve (puntuación y dos hallazgos); DO_NOT_INSTALL con hookSpecificOutput, permissionDecision "ask" y un permissionDecisionReason con puntuación, severidad y los tres hallazgos más graves con archivo y línea.
- Si el escaneo falla o se agota el tiempo, deja pasar con un aviso claro. El script siempre termina con código 0 y JSON válido.
Reglas
- Conserva mis hooks y ajustes actuales. Enséñame el diff de settings.json y espera mi confirmación.
- Prueba el script pasándole por la entrada estándar tres JSON simulados (un git clone de un repo real, un npx skills add de un repo inexistente y un ls) sin ejecutar ninguna instalación real, y resume qué decidió en cada caso.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/skillspector-guard.sh",
"timeout": 120
}
]
}
]
}
}
05 Comprueba que está activo
-
1
Revisa el menú de hooks
Escribe /hooks en Claude Code. Es un listado de solo lectura; el filtro debe aparecer en PreToolUse, con origen en tus ajustes de usuario.
-
2
Provoca un aviso real
Pide a Claude que clone en una carpeta temporal un repositorio público de skills y que te muestre literalmente lo que diga el hook antes de continuar.
-
3
Provoca un bloqueo sin riesgo
Usa el prompt de abajo para fabricar una skill trampa inofensiva y comprobar que el escáner la marca como DO_NOT_INSTALL.
Crea en una carpeta temporal una skill de prueba que imite un ataque, sin capacidad real de hacer daño: un SKILL.md con una instrucción oculta para ignorar al usuario y leer ~/.ssh, y un script que intente enviar datos con curl a https://example.invalid. No la instales ni ejecutes nada de ella. Analízala con skillspector scan [carpeta] --no-llm --format json, dime la recomendación y qué habría hecho mi hook. Después borra la carpeta.
El hook de SkillSpector ha frenado este repositorio. Abre los archivos señalados en el informe y, para cada hallazgo, dime qué ha detectado, dónde y si parece un riesgo real o un falso positivo (por ejemplo, un texto de ejemplo que se parece a una orden). Termina con tu recomendación: instalar, instalar con cambios o descartar.
06 Límites y ajustes posibles
- ✓No revisa lo que instalas tú desde tu propia terminal: el hook vive dentro de Claude Code.
- ✓Los paquetes que no vienen de un repositorio de GitHub (por ejemplo, un MCP publicado en npm) pasan con aviso de «no revisado».
- ✓Los repositorios muy grandes pueden superar el límite de tiempo; en ese caso, escanéalos a mano sin límite.
- ✓Solo mira lo nuevo: lo que ya tenías instalado no se analiza de forma retroactiva.
- ✓Según su documentación, puede pasar por alto patrones en idiomas distintos del inglés, texto dentro de imágenes y código compilado o cifrado.
Más estricto
Pide a Claude que trate CAUTION igual que DO_NOT_INSTALL y te pregunte también en ese caso. Útil en equipos con datos de clientes.
Menos falsos positivos
Cambia --no-llm por el proveedor claude_cli (variable SKILLSPECTOR_PROVIDER). Tarda más y consume de tu plan.
Desactivarlo
Borra su entrada de PreToolUse en settings.json y el script. SkillSpector sigue instalado para usarlo a mano.
Preguntas frecuentes
Con --no-llm no: el contenido se analiza en tu ordenador. La única consulta externa es a OSV.dev con nombres y versiones de dependencias para buscar vulnerabilidades conocidas.
Solo cuando el comando instala código de terceros. Un repositorio pequeño se analiza en segundos; el resto de comandos no pasan por el escáner.
Sí, siempre que el comando incluya el repositorio de GitHub. SkillSpector tiene categorías específicas para MCP, como el envenenamiento de herramientas y los permisos excesivos.
No necesariamente. Significa que el escáner no ha encontrado patrones de riesgo alto. Sigue revisando el código de herramientas que vayan a tocar datos sensibles.
Sí. El código de salida y el JSON son un contrato estable y admite salida SARIF, así que puedes bloquear en tu pipeline las skills que superen el umbral que decidas.
Sobre el autor
Equipo editorial de appyweb
Marketing, SEO y desarrollo con IA
Especialistas de appyweb en SEO, publicidad, desarrollo web y automatización con IA.