skillguard
Scanner de segurança para arquivos de habilidades de agentes de IA de terceiros (SKILL.md, hooks, scripts) via MCP.
Documentação
SkillGuard
Instalação • Experimente agora • Recursos • Servidor MCP • Como se compara • FAQ
Examina arquivos de habilidades de agentes de IA de terceiros (manifestos SKILL.md, hooks e scripts empacotados) em busca de padrões de ataque conhecidos antes de executá-los, e é o único scanner em sua categoria que também pode ser chamado como ferramenta MCP de dentro de outro agente.

Instalação
# 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
Nenhuma instalação baixa nada no momento da verificação: todos os dez pacotes de regras e o mecanismo de correspondência de padrões estão incluídos tanto no tarball npm quanto na wheel Python.
Experimente agora
npx skillguard-cli scan ./examples/known-bad-skill
Isso executa contra um fixture incluído no repositório, seguro, não funcional e deliberadamente correspondível a padrões, e retorna 11 descobertas reais com citações de arquivo:linha em cerca de 0,15 segundos.
[!NOTE] Cada verificação imprime
Loading SkillGuard rule packs...no stderr primeiro. Isso é saída esperada de inicialização, não um travamento.
Compare com um fixture limpo:
npx skillguard-cli scan ./examples/clean-skill
que retorna zero descobertas e código de saída 0.
Por que isso existe
Habilidades de agentes de terceiros são executadas com permissões reais de ferramenta, arquivo e rede no momento em que são instaladas, e quase nada as verifica antes. O estudo ToxicSkills da Snyk examinou 3.984 habilidades listadas publicamente em fevereiro de 2026 e encontrou falhas de segurança em 36% delas, incluindo 76 habilidades com payloads maliciosos confirmados: roubo de credenciais, shells reversos, exfiltração de dados. A maioria dos marketplaces e frameworks de agentes não tem etapa de verificação entre "alguém publicou uma habilidade" e "o agente de um usuário a executa". O SkillGuard é essa etapa: um CLI, uma biblioteca, um servidor MCP e uma GitHub Action, todos lendo os mesmos dez pacotes de regras incluídos.
Recursos
- Dez categorias de regras dedicadas (SG01-SG10), cobrindo incompatibilidade de rede, execução remota de código, escalada de escopo de arquivo, risco de supply chain em hooks, payloads ofuscados, coleta de credenciais, falsificação de escopo no frontmatter, injeção de prompt embutida no próprio texto instrucional da habilidade, encadeamento de privilégios entre habilidades e typosquatting em marketplaces. Cada categoria é documentada regra por regra em CHANGELOG.md.
- Encadeamento de privilégios entre habilidades (
scan-set) detecta uma ameaça que scanners de habilidade única estruturalmente não veem: a habilidade A lê arquivos sensíveis, a habilidade B tem saída de rede, nenhuma declara sandboxing entre elas, e combinadas podem exfiltrar o que a habilidade A sozinha só conseguiria ler.npx skillguard-cli scan-set ./my-skills-direxamina todas as habilidades em um diretório e sinaliza a combinação. Os próprios mantenedores do Snyk Agent Scan confirmaram na issue #301 que seu flag--skillsreconhece apenas umSKILL.mdpor vez e não descobre habilidades recursivamente em um diretório, então isso não é um recurso que o SkillGuard afirma fazer melhor, é algo que nenhum outro scanner de habilidades que encontramos faz até agora. - Zero autenticação, zero configuração.
npx skillguard-cli scan <path>não precisa de conta, token de API ou cadastro. Compare com o Snyk Agent Scan (SNYK_TOKENe uma conta Snyk) ou o Socket CLI (SOCKET_CLI_API_TOKENpara funcionalidade completa). - Chamável como ferramenta MCP, não apenas CLI.
npx skillguard-cli mcpinicia um servidor MCP stdio expondo uma ferramentascan_skill, para que Claude Code, Cursor ou qualquer agente orquestrador possa verificar uma habilidade baixada como chamada de ferramenta antes de instalá-la ou executá-la, sem subprocesso, sem parsing de stdout. Verificado com um handshake JSON-RPC realinitialize/tools/list/tools/callcontra o servidor compilado. - Duas distribuições independentes e igualmente mantidas. O pacote npm e o pacote PyPI leem o mesmo contrato de pacotes de regras e produzem descobertas correspondentes contra o mesmo alvo; nenhum é um wrapper do outro.
- Nada é baixado pela rede no momento da verificação. Todos os pacotes de regras estão incluídos no próprio pacote, então uma verificação de conteúdo não confiável nunca alcança nada que o conteúdo controle.
Início rápido
npx skillguard-cli scan ./my-skill --format json --severity-threshold MEDIUM

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]
| Comando | O que faz |
|---|---|
scan <path> | Verifica um diretório de habilidade (um SKILL.md mais seus hooks/scripts) em busca de padrões de ataque conhecidos. |
scan-set <dir> | Verifica um diretório cujos filhos imediatos são cada um um diretório de habilidade, executando scan em cada um e adicionalmente verificando encadeamento de privilégios entre habilidades (SG09) no conjunto. |
mcp | Inicia o SkillGuard como servidor MCP stdio, expondo scan_skill como ferramenta chamável para outro agente. Veja Servidor MCP. |

Flags compartilhadas por scan e scan-set (verificadas contra src/cli.ts e skillguard/cli.py):
| Flag | Padrão | Descrição |
|---|---|---|
--format <human|json|sarif> | human | Formato de saída. |
--severity-threshold <HIGH|MEDIUM|LOW> | HIGH | Severidade mínima que falha a verificação (código de saída 1). |
--timeout <ms> | 10000 | Tempo limite de verificação por arquivo em milissegundos. |
--skillguardignore <path> | nenhum, deve ser passado explicitamente | Caminho para um arquivo de supressão. Nunca carregado automaticamente de dentro do alvo da verificação; veja Suprimindo descobertas. |
--allow-inline-suppression | false | Honrar comentários inline # skillguard-ignore: SGxx encontrados nos arquivos verificados. Desligado por padrão. |
Códigos de saída: 0 verificação limpa. 1 uma descoberta em ou acima do limite de severidade. 2 o caminho alvo não existe, ou (para scan) nenhum arquivo de habilidade foi encontrado.
Referência da API
TypeScript (src/index.ts), reexportado da importação raiz do pacote npm:
import { scanSkill, scanSkillSet, discoverSkillDirs, computeCrossSkillFindings } from 'skillguard-cli';
scanSkill(path: string, options?: ScanOptions): Promise<ScanResult>
scanSkillSet(dir: string, options?: ScanOptions): Promise<SkillSetScanResult>
scanSkill() executa a mesma lógica de verificação que scan; scanSkillSet() executa a mesma lógica que scan-set. Ambos retornam um resultado estruturado (findings, timeouts, warnings, exitCode) em vez de lançar exceção, então um chamador que incorpora o SkillGuard nunca precisa envolvê-lo em try/catch apenas para obter um veredito. Os tipos Finding, ScanOptions, ScanResult, ScanWarning, Severity, OutputFormat, RuleCategory, SkillEntry e SkillSetScanResult acompanham.
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
Mesma forma, nomenclatura snake_case. Uma lacuna honesta que vale a pena declarar claramente: o scan_skill_set() do pacote Python executa a mesma orquestração de encadeamento entre habilidades que o scanSkillSet() do pacote npm, mas o pacote npm adicionalmente executa uma segunda verificação SG09 mais restrita dentro de um scan normal de habilidade única (uma heurística de referência a caminho irmão, src/ast/cross-skill-chaining.ts) que ainda não tem equivalente em Python. Se você depende da detecção entre habilidades a partir de uma única chamada scan em vez de scan-set, esse caminho é exclusivo do TypeScript hoje.
Servidor MCP (nativo para agentes, chamada de ferramenta)
npx skillguard-cli mcp
Inicia o SkillGuard como servidor MCP stdio expondo uma ferramenta, scan_skill ({ path, severityThreshold?, timeoutMs? }), para que outro agente, Claude Code, Cursor, um orquestrador, possa verificar uma habilidade de terceiros diretamente como chamada de ferramenta antes de instalá-la ou executá-la. Verificado nesta atualização com um handshake real: initialize retorna informações reais do servidor, tools/list retorna o schema real de scan_skill, e tools/call contra ./examples/known-bad-skill retorna as mesmas 11 descobertas que o CLI relata. Exemplo de configuração de cliente:
{ "mcpServers": { "skillguard": { "command": "npx", "args": ["skillguard-cli", "mcp"] } } }
Configuração completa, schema de entrada/saída da ferramenta e as garantias de segurança que este caminho preserva (mesmos padrões de .skillguardignore/supressão inline que o CLI, sem como passar um caminho de ignorar pela ferramenta) estão em docs/integrations/mcp.md. O pacote Python inclui a mesma ferramenta via skillguard mcp (requer o extra opcional mcp, pip install "skillguard-cli[mcp]", Python >=3.10): nativo e em processo, chamando scan_skill() diretamente, sem subprocesso e sem superfície de parsing de stdout/JSON. uvx pode executá-lo sem etapa de instalação manual, que é a forma recomendada de conectá-lo ao 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
A Action usa como padrão --format sarif e envia resultados diretamente para a verificação de código do GitHub. O CLI puro mantém um padrão legível por humanos, já que um terminal e um log de CI querem coisas diferentes.
Pacotes de regras
Cada pacote de regras fica em rulepacks/ (npm) e python/src/skillguard/rulepacks/data/ (Python), mantidos em sincronia manualmente e cobertos pela regra de paridade de CONTRIBUTING.md. Nada é baixado pela rede no momento da verificação.
| Categoria | Nome | Severidade | O que detecta |
|---|---|---|---|
| SG01 | incompatibilidade de rede | MÉDIA | Sockets brutos, netcat, /dev/tcp, primitivas de rede que contornam um escopo típico apenas HTTP. |
| SG02 | execução remota de código | ALTA | curl | bash, eval()/exec() de uma resposta buscada, execução de shell com conteúdo influenciado remotamente. |
| SG03 | escalada de escopo de arquivo | MÉDIA | Escritas/exclusões/chmod alcançando fora do diretório da própria habilidade, e path traversal (../../..) usado para escapar dele. |
| SG04 | supply chain de hooks | ALTA | Hooks de instalação ou dependências que buscam e executam código remoto, ou fixam em um branch mutável. |
| SG05 | payloads ofuscados | BAIXA | Idiomas de base64/concatenação de strings/Function dinâmico usados para esconder um payload. Veja a limitação conhecida abaixo. |
| SG06 | coleta de credenciais | ALTA | Leituras de variáveis de ambiente ou arquivos com formato de credencial, especialmente perto de uma chamada de rede. |
| SG07 | falsificação de frontmatter | MÉDIA | Escopo de rede/sistema de arquivos declarado no SKILL.md vs. o que os hooks/scripts realmente fazem. |
| SG08 | injeção de prompt via conteúdo da habilidade | ALTA | O próprio texto instrucional do SKILL.md tentando sobrescrever o prompt de sistema do agente host ou sequestrar seu roteamento de ferramentas (7 IDs de regra: 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). |
| SG09 | encadeamento de privilégios entre habilidades | ALTA | Capacidade combinada entre duas habilidades em uma execução scan-set, uma com leitura de sistema de arquivos sensível, outra com saída de rede, nenhuma com sandbox em relação à outra. O TypeScript também executa uma variante mais restrita de habilidade única com caminho irmão dessa verificação; o Python atualmente inclui apenas a versão scan-set. |
| SG10 | typosquatting em marketplace | ALTA | O nome declarado no SKILL.md a uma distância de edição Levenshtein de 1-2 de uma lista incluída de 51 nomes populares de pacotes npm/PyPI, uma tentativa de se passar por uma ferramenta conhecida. |
Limitação conhecida do SG05: a detecção de ofuscação sob análise estática pura tem uma taxa de falso negativo materialmente maior do que as outras categorias. O SG05 detecta idiomas comuns e conhecidos de codificação/eval; trate-o como cobertura de melhor esforço, não como uma resposta completa para ofuscação.
Como o SkillGuard se compara
O SkillGuard é feito sob medida para o modelo de ameaça de habilidades de agentes: escopo declarado no frontmatter versus comportamento real, risco de supply chain em hooks, combinação de privilégios entre habilidades e padrões de coleta de credenciais específicos de como as habilidades são empacotadas e instaladas. Isso é um trabalho mais restrito do que um scanner de propósito geral, e esta tabela diz isso claramente em vez de sugerir que o SkillGuard supera ferramentas construídas para um trabalho diferente.
| SkillGuard | Snyk Agent Scan | Semgrep (CE) | Socket CLI | |
|---|---|---|---|---|
| O que ele verifica | Arquivos de skill de agente: SKILL.md, hooks, scripts | Skills de agente e configurações de servidor MCP | Código-fonte geral, 30+ linguagens | Instalações de pacotes npm/PyPI/etc. |
| Conjunto de regras específico para skills de agente | Sim, todas as 10 categorias projetadas especificamente para este modelo de ameaça | Sim, todo o seu foco (injeção de prompt, envenenamento de ferramentas, fluxos tóxicos, malware de skill) | Não, apenas regras SAST gerais | Não, focado em cadeia de suprimentos, não em arquivos de skill |
| Verifica múltiplas skills juntas para risco combinado | Sim, scan-set (encadeamento de privilégios entre skills SG09) | Não, confirmado como arquivo único/não recursivo conforme issue #301 | Não aplicável a este modelo de ameaça | Não aplicável a este modelo de ameaça |
| Chamável como ferramenta MCP a partir de outro agente | Sim, skillguard-cli mcp | Não documentado publicamente | Não | Não |
| Autenticação necessária para uma verificação básica | Nenhuma (npx skillguard-cli scan <path>) | Sim, requer uma conta Snyk e SNYK_TOKEN | Nenhuma para verificações locais da Community Edition | Sim, SOCKET_CLI_API_TOKEN necessária para funcionalidade completa |
| Runtime | Node.js, zero binário externo (porta Python também disponível) | Python via uvx | Binário próprio (CLI baseada em Python) | Node.js |
| Licença | Apache 2.0 | Apache 2.0 | LGPL-2.1 | MIT (conforme a listagem do pacote npm socket; o repositório em si não possui arquivo LICENSE) |
| Estrelas no GitHub (verificado em 2026-08-10) | 1 estrela, cerca de um mês de existência, lançado em 2026-07-11 | 2.897 estrelas, 258 forks | 16.173 estrelas, 1.021 forks | 311 estrelas, 58 forks |
Algumas notas honestas, já que a credibilidade de uma ferramenta de segurança depende de dizer as partes desfavoráveis em voz alta:
- O Snyk Agent Scan é o concorrente real mais próximo, mais maduro (2.897 estrelas contra 1 do SkillGuard) e cobrindo mais terreno no geral (15+ categorias de detecção, além da verificação de configuração de servidor MCP, que o SkillGuard não faz). As diferenças reais são a questão de autenticação (o SkillGuard não exige cadastro nem token) e a análise entre skills (os próprios mantenedores da Snyk confirmaram que a ferramenta deles é de arquivo único hoje). Se você já tem uma conta Snyk e também quer cobertura de servidor MCP, o Agent Scan cobre mais terreno; se você quer uma verificação sem autenticação que também consiga raciocinar sobre um diretório inteiro de skills de uma vez, é para isso que o SkillGuard serve.
- O SkillGuard não envolve o Semgrep. Ele traz seu próprio mecanismo de padrões pequeno e em processo (inspirado no Semgrep, não o Semgrep) para que a instalação
npxnunca dependa de uma cadeia de ferramentas Python/PyPI. Se você precisa de análise estática verdadeiramente multilíngue e de propósito geral em 30+ linguagens, o Semgrep é a ferramenta mais madura para essa função. - O Socket CLI é uma categoria adjacente, não um concorrente direto. Ele foi feito para typosquats e scripts de instalação maliciosos em pacotes npm/PyPI, não para o frontmatter do SKILL.md de uma skill e o comportamento declarado versus real.
- O SkillGuard em si é genuinamente inicial: 1 estrela no GitHub, cerca de um mês desde o primeiro commit. Essa é uma história real de "inicial mas real", não algo que valha a pena embelezar: todos os comandos e achados mostrados neste README foram executados contra o código atual real durante a escrita, não herdados de um rascunho antigo.
O que é o SkillGuard e por que ele existe
O SkillGuard é um scanner de análise estática para arquivos de skill de agente de IA de terceiros, manifestos SKILL.md além dos hooks e scripts que eles incluem, construído para ser executado antes que uma skill não confiável seja instalada ou executada. Ele existe porque os marketplaces e frameworks de skills de agente geralmente não têm uma etapa de verificação própria: uma skill pode declarar network: false em seu frontmatter e ainda assim enviar um hook postinstall que canaliza um script remoto para um shell no momento em que é instalado, e nada na maioria dos runtimes de agente verifica se o escopo declarado corresponde ao comportamento real. O SkillGuard lê os mesmos dez pacotes de regras a partir de uma CLI, uma biblioteca, um servidor MCP e uma GitHub Action, para que a mesma verificação possa controlar um pipeline de CI, ser executada dentro do próprio loop de uso de ferramentas de um agente ou ser chamada diretamente do código.
Suprimindo achados
[!WARNING] O trabalho do SkillGuard é examinar diretórios que você não escreveu. Ambos os mecanismos de supressão abaixo podem silenciar um achado, então nenhum deles é confiado automaticamente a partir de dentro do que está sendo verificado. Cada um exige uma adesão explícita e deliberada de quem executa a verificação.
Um arquivo .skillguardignore suprime arquivos inteiros por glob, mesmo modelo mental do .gitignore:
# .skillguardignore
vendor/**
*.generated.js
Ele só é respeitado quando você passa --skillguardignore <path> (ou a opção de biblioteca ignoreFilePath). O SkillGuard nunca lê um .skillguardignore que esteja dentro do alvo da verificação por conta própria. Uma submissão de skill maliciosa que envie seu próprio .skillguardignore não pode silenciar achados sobre si mesma a menos que você aponte explicitamente o SkillGuard para esse arquivo. Se você mantém uma skill você mesmo e quer autossupressão, mantenha seu .skillguardignore e passe o caminho dele explicitamente:
npx skillguard-cli scan ./my-skill --skillguardignore ./my-skill/.skillguardignore
Um comentário inline # skillguard-ignore: SG02 (na mesma linha da correspondência, ou na linha diretamente acima dela) suprime um único achado no local. Isso está desativado por padrão e requer --allow-inline-suppression, pelo mesmo motivo: o comentário vive dentro do conteúdo não confiável exato que está sendo examinado, então por padrão nada em um alvo de verificação pode silenciar um achado sobre si mesmo. Só ative para um alvo em que você já confia, por exemplo, ao verificar sua própria skill antes de publicar.
Limitações conhecidas
O SkillGuard documenta suas lacunas abertamente, de propósito. Duas que valem a pena destacar aqui além da nota de falso negativo do SG05 acima: alvos de verificação com symlink ficam sem verificação em vez de serem seguidos, e a detecção entre skills do pacote Python atualmente vive apenas em scan-set, não como uma verificação de caminho irmão de skill única como a do TypeScript. A lista completa, incluindo o risco residual de ReDoS de padrão único, está em CHANGELOG.md. Leia antes de conectar o SkillGuard a um portão de CI em que você planeja confiar.
Desenvolvimento
# 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
Veja CONTRIBUTING.md: uma alteração de pacote de regras deve chegar tanto em rulepacks/ quanto em python/src/skillguard/rulepacks/data/ com cobertura de teste equivalente em ambas as suítes, já que uma regra que só existe em uma linguagem é uma lacuna silenciosa de comportamento entre as duas CLIs.
FAQ
O que é o SkillGuard e o que o torna diferente de um scanner de segurança de propósito geral?
O SkillGuard é um scanner de análise estática projetado especificamente para um modelo de ameaça: arquivos de skill de agente de IA de terceiros, manifestos SKILL.md além dos hooks e scripts que eles incluem. Ele traz dez categorias de regras (SG01-SG10) visando coisas que scanners genéricos não verificam por padrão, escopo declarado no frontmatter versus comportamento real, risco de cadeia de suprimentos em hooks de instalação, injeção de prompt embutida no próprio texto instrucional de uma skill e risco combinado entre múltiplas skills no mesmo diretório. Uma ferramenta SAST geral como o Semgrep pode encontrar alguns dos mesmos padrões em nível de código, mas não tem noção de um manifesto SKILL.md ou de uma relação de privilégios entre skills.
O SkillGuard exige conta ou token de API para executar uma verificação?
Não. npx skillguard-cli scan <path> e pip install skillguard-cli && skillguard scan <path> funcionam ambos com zero cadastro, zero token e nenhuma chamada de rede no momento da verificação.
Quais plataformas e runtimes de linguagem o SkillGuard suporta?
O pacote npm precisa de Node.js >=20 (conforme package.json, em seu campo engines) e não tem dependências nativas/compiladas. O pacote PyPI precisa de Python >=3.9 para a instalação base, ou >=3.10 se você instalar o extra opcional mcp para o modo de servidor MCP (conforme pyproject.toml, em seu requires-python e seu comentário de dependência opcional mcp). Ambos são pacotes puramente de linguagem, sem etapa de build específica de SO, e os classificadores do pacote Python declaram Operating System :: OS Independent.
O que SG08, SG09 e SG10 verificam, e eles também podem ser executados pelo servidor MCP?
SG08 (HIGH) procura injeção de prompt dentro do próprio texto instrucional de uma skill, tentativas de sobrescrever o prompt de sistema do agente host ou sequestrar seu roteamento de ferramentas, em 7 IDs de regra distintos. SG09 (HIGH) é encadeamento de privilégios entre skills: scan-set sinaliza um achado HIGH quando uma skill em um diretório tem capacidade de leitura sensível do sistema de arquivos e outra tem capacidade de egresso de rede sem sandboxing declarado entre elas; o scan simples do TypeScript também executa uma variante mais restrita de caminho irmão da mesma verificação. SG10 (HIGH) é typosquatting de marketplace: o nome declarado de uma skill a uma distância de edição Levenshtein de 1-2 de uma lista incluída de 51 nomes populares de pacotes npm/PyPI. Todos os três são executados por npx skillguard-cli mcp, em sua ferramenta scan_skill, exatamente como são pela CLI, já que o servidor MCP chama a mesma lógica de verificação subjacente.
Um agente de IA pode chamar o SkillGuard diretamente, em vez de invocar uma CLI e analisar a saída?
Sim. npx skillguard-cli mcp (ou skillguard mcp no lado Python) inicia um servidor MCP stdio expondo uma ferramenta scan_skill, para que um orquestrador ou agente de codificação possa verificar uma skill baixada como uma chamada de ferramenta normal antes de instalá-la ou executá-la.
O SkillGuard detecta uma skill que referencia outra skill mais privilegiada?
scan-set detecta: aponte-o para um diretório de subdiretórios de skills e ele sinaliza um achado HIGH quando uma skill tem capacidade de leitura sensível do sistema de arquivos e outra tem capacidade de egresso de rede sem sandboxing declarado entre elas. Essa é a lacuna específica que o próprio rastreador de issues do Snyk Agent Scan confirma que a ferramenta deles ainda não cobre (arquivo único, não recursivo).
Qual é a diferença entre o pacote npm e o pacote PyPI?
Ambos são portas independentes e igualmente mantidas que leem o mesmo contrato de pacote de regras e produzem achados correspondentes contra o mesmo alvo; o pacote PyPI é uma implementação Python genuína, não um wrapper em torno do binário Node. Uma lacuna atual: o comando scan do TypeScript executa uma heurística extra de caminho irmão entre skills que o Python ainda não tem (a detecção entre skills do Python vive inteiramente em scan-set). Se você depende da detecção entre skills a partir de uma única chamada scan em vez de scan-set, esse caminho é exclusivo do TypeScript hoje; execute scan-set no lado Python para obter cobertura equivalente.
O SkillGuard substitui o Semgrep ou a Snyk? Não. O Semgrep é um mecanismo de análise estática maduro e de propósito geral em 30+ linguagens; a Snyk cobre vulnerabilidades de dependências e código de forma ampla, e o Snyk Agent Scan cobre um conjunto mais amplo de ameaças de skills de agente e configuração MCP do que o SkillGuard hoje. O trabalho do SkillGuard é mais restrito: o modelo de ameaça específico de SKILL.md/hooks/frontmatter, com zero autenticação e uma verificação entre skills que nenhuma dessas ferramentas oferece atualmente.
O SkillGuard está pronto para produção? Ele é inicial: cerca de um mês de existência, pré-1.0, 1 estrela no GitHub no momento em que escrevo. A suíte de testes (157/157 TypeScript, 110/110 Python) passa em uma instalação limpa e todos os comandos neste README foram reexecutados de forma independente contra o código atual, mas ele ainda não foi executado contra um corpus grande do mundo real, então trate sua taxa de falso positivo/falso negativo como não comprovada em escala, em vez de resolvida.
Posso usar o SkillGuard comercialmente, e a licença tem algum custo? Sim, e não. O SkillGuard é licenciado sob Apache License 2.0 (veja LICENSE), que permite uso comercial, modificação e redistribuição, inclusive dentro de software proprietário, sem custo, desde que você mantenha o aviso de copyright e licença. A Apache 2.0 também concede uma licença de patente explícita dos contribuidores, o que o MIT puro não faz.
Licença
Apache 2.0, veja LICENSE.