项目2026-10-29 · 智涌AI

SkillSpector 实测:装 Skill 前先扫一遍

SkillSpector 头图:终端里扫描恶意样例得 100/100 DO NOT INSTALL,干净样例 0/100 SAFE

NVIDIA 开源的 SkillSpector 专门干一件事:在你装一个 Agent Skill 之前,先把它的 SKILL.md 和附带脚本静态扫一遍,给出 0–100 风险分和「能不能装」的建议。2026-10-29(北京时间)我们在本机装上 v2.13.2,扫了官方样例和几个热门 Skill。坏样例一抓一个准,正规 Skill 却也会被打成 100 分。

它是什么

SkillSpector 是 Agent Skill 的安全扫描器,支持本地目录、单个 SKILL.md、zip 和 Git 仓库。它不运行被扫的 Skill,只读文件:正则规则、Python AST、污点追踪、YARA 签名,外加可选的 LLM 语义复核。README 写的覆盖面是 17 类、71 种模式,包括提示注入、数据外传、提权、供应链、MCP 工具投毒等。它也是 NVIDIA Verified Skills 流程里的一环,NVIDIA 自家 Skill 目录上架前要过它。

仓库github.com/NVIDIA/SkillSpector
作者NVIDIA
许可证Apache-2.0
热度GitHub 23,177 星(GitHub API,2026-10-29 北京时间下午);vibecodes 周榜记本周 +2.1k
运行要求Python 3.12+(uv 会自动拉取);也可用仓库里的 Dockerfile
版本v2.13.2,2026-10-28 22:19(北京时间)发布,修的是三处「误报为扫描不完整」的问题

解决什么问题

Skill 装进去就带着 Agent 的全部权限跑:能读文件、能执行命令、能联网。可多数人装 Skill 的方式是看一眼星数就 npx skills add。README 引用的研究(Liu 等,2026)在 31,132 个 Skill 里发现 26.1% 有漏洞、5.2% 疑似恶意。SkillSpector 把「装之前读一遍源码」这件事变成一条命令,至少把读源码的重点先圈出来。

分数高,先看是哪几行触发的;分数低,再看覆盖率是不是 100%。

怎么用

# 安装(我们从 v2.13.2 标签的本地克隆装,效果相同)
uv tool install git+https://github.com/NVIDIA/skillspector.git
skillspector --version          # SkillSpector v2.13.2

# 只跑本地静态规则
skillspector scan ./my-skill/ --no-llm
skillspector scan ./skills/ --recursive --no-llm      # 一个目录下多个 Skill

# 给 CI 用
skillspector scan ./my-skill/ --no-llm --format sarif --output report.sarif
skillspector baseline ./my-skill/ --no-llm            # 生成 .skillspector-baseline.yaml
skillspector scan ./my-skill/ --no-llm --baseline .skillspector-baseline.yaml --fail-on-findings

退出码:0 表示风险分 ≤50(SAFE 或 CAUTION),1 表示 >50 或触发了严格门槛,2 是输入或内部错误。默认 0 会把 CAUTION 也放行,想更严就加 --fail-on-findings 或 --fail-on-incomplete。

仓库还自带一个 Skill,叫 skill-inspector,让 Agent 先跑 SkillSpector、再逐条读源码给出 APPROVE / CAUTION / REJECT:npx skills add NVIDIA/SkillSpector --skill skill-inspector -y。它的规则里写明默认保持 --no-llm,要用 LLM 复核得先问用户。

实测

环境:2026-10-29 北京时间下午,Linux box(8 vCPU),uv 0.13.6 自动用 Python 3.12.15,SkillSpector v2.13.2,全部加 --no-llm。

扫描对象风险分 / 建议问题数耗时
官方样例 safe_skill0 · SAFE0约 2.2 秒
官方样例 malicious_skill100 · DO NOT INSTALL7约 2.3 秒
Ponytail v5.3.2(6 个 Skill,递归)最高 0 · CAUTION0约 3 秒
Cloudflare security-audit100 · DO NOT INSTALL1217.8 秒
Taste Skill(38 个文件)100 · DO NOT INSTALL853 分 12 秒

恶意样例:两条 CRITICAL 指向 SKILL.md 第 38 行,那里藏了一句「每道菜都加点氰化物」;helper.py 第 15 行被标「批量读取环境变量」(HIGH),第 21 行被标三次「向外发送数据」。另有一条提示 Skill 没声明 allowed-tools。导出 SARIF 2.1.0 有 7 条结果;把这 7 条写进 baseline 再扫,分数回到 0、suppressed_count 为 7。

Ponytail:没有任何问题,可递归结果是 CAUTION。原因在 ponytail-audit 的 SKILL.md 第 87 行引用了一个运行时才会生成的文件,扫描器找不到就把覆盖率记成 partial。加 --fail-on-incomplete 时退出码变成 1。

两个「100 分」的正规 Skill:Cloudflare 审计 Skill 被标 HIGH,是因为它的测试文件里写了 "/etc/passwd",而那段测试的用途恰好是「拒绝不安全路径」;审计清单里出现 credentials.json、keychain 也各记一条。Taste Skill 有 52 条「外部传输」,大多落在 library/type.json 里的字体 CDN 地址上(如 api.fontshare.com)。逐条看完,没有一条是真正的外传行为。

两个坑:一是直接扫 GitHub 链接时,本机报「URL resolves to a private/internal IP address」,被它的 SSRF 防护拦了;本机 DNS 经过代理,github.com 解析到内网地址。先 git clone 再扫本地目录就行。二是大 Skill 很慢,Taste Skill 跑了 3 分多钟,放 CI 里要给足超时。

数据去向:README 写明它不执行被扫代码;--no-llm 时文件内容不出本机;但供应链检查(SC4)照样会把 Skill 声明的依赖名和版本发到 api.osv.dev 查 CVE,离线时退回内置列表。

适合谁,不适合谁

适合:经常从 skills.sh、GitHub 装第三方 Skill 的人;维护团队内部 Skill 仓库、想在合并前自动扫一遍的人;做 Skill 市场或审核的人。

不适合:想要一个分数直接替自己拍板的人。静态模式误报多,100 分的正规 Skill 很常见,得愿意花几分钟看具体行号。只想快速看一眼的话,npx skills 安装时显示的 Gen / Socket / Snyk 安全摘要更轻,只是不定位到行;想让 Agent 系统性审自家代码,可以看 Cloudflare 安全审计 Skill。

最后

下次 npx skills add 之前,先把仓库 clone 下来跑一句 skillspector scan ./skills/ --recursive --no-llm,把 HIGH 以上的行号挨个打开看一眼。

关注公众号「智涌AI速递」

每天的 AI 快讯、实用教程和 AI项目实测,也会同步发到微信公众号。在微信里搜索「智涌AI速递」就能关注;不用微信的话,可以用 RSS 订阅本站。