爱学出勤奋,勤奋出天才。——郭沫若

https://github.com/NVIDIA/SkillSpector

当 AI 技能开始自己“长手长脚”,SkillSpector 就成了门口最清醒的安检员

在 AI Agent 快速扩张的今天,越来越多的技能像一个个热情的新员工,争先恐后地走进我们的工作流里。它们会写代码、调接口、访问文件、执行脚本、连接外部服务,看起来聪明又高效,仿佛只要点一下安装,就能立刻成为你的得力助手。

可问题也恰恰出在这里。

这些技能往往带着天然的信任光环上岗,表面上是来帮忙的,背地里却可能顺手翻你的环境变量、悄悄把上下文发到外网、偷偷申请超出职责范围的权限,甚至借助脚本能力把风险扩散到整个系统。很多时候,它们不是一个“工具”,更像一个你还没做背调、却已经发了工牌的陌生实习生。

这时候,NVIDIA 的 SkillSpector 出场了。

它的仓库描述非常直接:Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, and security risks.
翻译成人话就是:它像一个经验老到、眼神犀利、从不轻信甜言蜜语的安全审计员,专门盯着那些即将被安装的 AI 技能,问出一句非常关键的话:

这个 skill,真的安全吗?


SkillSpector 到底是什么

SkillSpector 是一个专门用于 AI agent skills 安全扫描 的工具。它关注的对象不是传统意义上的大型应用系统,而是那些给 Claude Code、Codex CLI、Gemini CLI 等 AI Agent 使用的 skill。

这类 skill 往往运行在高信任环境中,能够调用工具、读写上下文、访问资源,甚至执行脚本。也正因为它们天然靠近“权力中心”,一旦设计不当,或者本身就带着恶意,问题会比普通插件更隐蔽,也更危险。

SkillSpector 的核心价值,在于它不是等你中招以后再去取证,而是在安装前就先帮你做一次安全体检。它像一个站在门口翻包的安检员,对每个准备进入系统的 skill 说:

你先别急着进去,把说明书、脚本、依赖、权限声明、行为模式都拿出来,我看看你到底想干什么。


它为什么值得被认真看待

SkillSpector 在 README 里引用了一项研究结论,信息相当刺眼:

  • 26.1% 的 skills 含有漏洞
  • 5.2% 的 skills 显示出可能的恶意意图
  • 带可执行脚本的 skill,更容易出现安全问题

如果把这组数字拟人化一点来理解,就是你每认识四个新来的“技能同事”,里面大概率就有一个做事不够规矩;而每二十个里,可能就有一个根本不是来上班的,是来摸钥匙、抄文件、顺网线的。

AI 生态越繁荣,skill 的数量越多,安全问题就越不能靠肉眼审阅解决。你总不能每装一个 skill,都自己去翻每个脚本、每个依赖、每条说明、每处触发逻辑,再顺便做一次供应链排查和上下文泄漏分析。

SkillSpector 的意义,就在于把这套繁琐、专业、很容易漏看的检查流程,变成一套系统化扫描能力。


SkillSpector 能做什么

SkillSpector 的能力非常完整,而且不是“点到为止”的那种完整,而是那种会主动追着细节问到底的完整。

它支持多种输入形式,包括:

  • Git 仓库
  • URL
  • zip 压缩包
  • 本地目录
  • 单个文件

也就是说,无论一个 skill 以什么姿态出现在你面前,SkillSpector 基本都能接住,然后开始盘问。

它的扫描覆盖了 64 种漏洞模式,分布在 16 个类别 中。这个覆盖范围非常像一个老刑警,不只会查“明显犯罪”,还会看“行为不对劲”。

它检查的类别包括:

  • Prompt Injection
  • Data Exfiltration
  • Privilege Escalation
  • Supply Chain
  • Excessive Agency
  • Output Handling
  • System Prompt Leakage
  • Memory Poisoning
  • Tool Misuse
  • Rogue Agent
  • Trigger Abuse
  • Behavioral AST
  • Taint Tracking
  • YARA Signatures
  • MCP Least Privilege
  • MCP Tool Poisoning

看到这里你会发现,SkillSpector 不是只看“有没有危险函数”这么简单,它是在从多个维度理解一个 skill 的真实意图:
你说自己是来帮用户整理文档的,为什么你还在枚举文件系统?
你说自己只是个小工具,为什么权限写得像操作系统管理员?
你说只是执行同步任务,为什么偷偷读取环境变量还准备往外发?

这就不是普通静态检查了,这是带着“审讯气质”的分析。


它最迷人的地方,是两阶段分析

SkillSpector 使用的是 两阶段检测流水线

第一阶段:静态分析

这一阶段的 SkillSpector 像一个动作麻利、经验丰富的巡检员,出手快,覆盖广,先把所有能快速发现的问题一网打尽。

它会做这些事情:

  • 基于正则的快速模式匹配
  • AST 行为分析
  • 检测危险调用,比如 exec()eval()subprocess
  • 查询依赖是否命中已知漏洞
  • 扫描 skill 中的全部文件

它的特点是 高召回,先尽可能把问题抓出来。宁可多看一眼,也不轻易放过。

第二阶段:LLM 语义分析

如果说第一阶段像保安翻包,第二阶段就像审讯专家坐下来开始对话。

这一阶段会进一步理解上下文和意图,用语义方式判断:

  • 这段内容到底是不是恶意
  • 某个高危模式是不是误报
  • 这段行为在当前上下文里意味着什么
  • 最终应当如何向人类解释这项风险

它的目标是提升精度,过滤误报,并给出更适合人阅读的解释。README 中提到,这能把精度提升到大约 87%

而且它的 LLM 提示里还有 anti-jailbreak protections,也就是说,它在分析恶意 skill 时,也会防止对方反过来“忽悠分析器”。

这件事非常有画面感:
一个可疑的 skill 试图在审问室里扮无辜、转移话题、带节奏;
而 SkillSpector 坐在对面,双手交叉,面无表情地说:
别演了,我知道你在 comments 里藏了什么。


它到底会抓哪些问题

SkillSpector 的扫描项非常细,不是简单列几个大类完事,而是把风险拆成可识别、可归类、可解释的模式。

下面挑一些特别有代表性的说说。

1. Prompt Injection

这是 AI Skill 世界里最经典、也最狡猾的一类问题。

比如某个 skill 表面上写着“帮助你自动处理任务”,但里面暗藏指令,试图让 Agent:

  • 忽略安全限制
  • 覆盖原始规则
  • 执行隐藏命令
  • 输出危险内容
  • 将上下文发送出去

这种感觉就像一个新同事一进办公室,不先熟悉业务,先悄悄告诉你:

你老板平时那套流程别管了,你听我的就行。

SkillSpector 会把这类行为揪出来。

2. Data Exfiltration

这类问题特别现实,也最让人后背发凉。

它会看 skill 有没有:

  • 向外部地址发送数据
  • 收集环境变量
  • 枚举本地文件
  • 传输出去对话上下文

换句话说,它不是只关心“你能不能读到秘密”,而是更关心“你读完以后是不是准备带走”。

3. Privilege Escalation

你本来只是来扫地的,结果开口就问保险柜密码;
你说自己只想整理文件,结果一抬手就要 root 权限。

这就是权限升级问题。

SkillSpector 会检测:

  • 是否请求超出功能范围的权限
  • 是否尝试 sudo 或 root 执行
  • 是否读取 SSH key、token、password 等凭据

4. Supply Chain

供应链问题一直是软件安全的老大难,而 SkillSpector 对这个方向显然非常认真。

它会检查:

  • 未锁版本依赖
  • curl | bash 这类外部脚本执行
  • 混淆代码
  • 已知漏洞依赖
  • 弃养依赖
  • 拼写投毒依赖

尤其是 SC4,它会查询 OSV.dev,做实时漏洞查找。这就像它不满足于只翻你包里的东西,还会顺手去系统里查一下你的案底。

5. Excessive Agency

这一类特别有 AI 时代特色。

问题不一定在“恶意”,而在“能力边界失控”。

比如:

  • 工具访问完全不设限
  • 高影响决策没有人工介入
  • 能力范围超出声明用途
  • 没有限流、配额和资源边界

你可以把它理解为:
一个本来应该帮忙搬快递的人,突然开始自己审批预算、签采购单、安排人事调动。

SkillSpector 会提醒你,这不是高效,这是越权。

6. Behavioral AST 与 Taint Tracking

这两块很硬核。

Behavioral AST 会直接看代码行为,识别:

  • exec()
  • eval()
  • 动态导入
  • subprocess
  • os.system
  • 危险执行链

Taint Tracking 则会看“脏数据”是怎么流动的,比如:

  • 从环境变量流向网络
  • 从文件读取流向外部发送
  • 从用户输入流向代码执行
  • 从 secrets 流向 exfiltration sink

这已经不是“看起来不对”,而是在做行为证据链还原。

就像审计员不仅看到某人进了档案室,还能指出:
他拿了哪份文件,经过哪条走廊,最后从哪个门交给了外面的人。


风险分数不是摆设,而是决策信号

SkillSpector 会给每个 skill 打一个 0 到 100 的风险分数,并且附带严重级别和建议。

它的计分逻辑非常直观:

  • CRITICAL:+50
  • HIGH:+25
  • MEDIUM:+10
  • LOW:+5
  • 可执行脚本:1.3 倍乘数

最后映射成几个等级:

  • 0-20:LOW,SAFE
  • 21-50:MEDIUM,CAUTION
  • 51-80:HIGH,DO NOT INSTALL
  • 81-100:CRITICAL,DO NOT INSTALL

这套规则很像一个很有主见的安全顾问。
它不只是把问题列给你看,而是会明确告诉你:

这个人有点可疑,可以观察。
这个人问题不小,别轻易放行。
这个人别让他进门。

很多工具只负责“发现”,不负责“建议”;
但 SkillSpector 显然更像一个真的在替你把关的人。


输出形式也很实用

SkillSpector 支持多种输出格式:

  • Terminal
  • JSON
  • Markdown
  • SARIF

这意味着它不仅适合个人命令行临时扫描,也适合接进团队文档流、自动化流程、CI/CD 乃至 IDE 安全生态。

如果你是开发者,它是命令行里的安全检查员。
如果你是平台团队,它可以变成流水线里的门禁。
如果你是安全团队,它又能输出结构化结果,方便后续归档、联动和治理。


快速上手

下面这部分可以说是 SkillSpector 最亲民的一面。它不只是严肃地查问题,也很愿意让你尽快把它用起来。

安装

README 推荐先创建并激活虚拟环境,支持 uvpip,而 Makefile 会优先使用 uv

1
2
3
4
5
6
7
8
9
10
11
12
13
# Clone the repository
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector

# Create and activate virtual environment
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate

# Install for production use
make install

# Or install with development dependencies
make install-dev

如果你喜欢那种“别让我装一堆环境,直接给我跑”的方式,它也准备了 Docker 方案。

Docker 方式运行

1
2
make docker-build
# or: docker build -t skillspector .

扫描本地目录:

1
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm

带上 LLM 分析时,可以通过 .env 文件提供凭据:

1
2
3
4
cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF
1
2
3
4
docker run --rm \
-v "$PWD:/scan" \
--env-file .env \
skillspector scan ./my-skill/

也可以直接从 shell 环境传参:

1
2
3
4
5
docker run --rm \
-v "$PWD:/scan" \
-e SKILLSPECTOR_PROVIDER=anthropic \
-e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
skillspector scan ./my-skill/

如果要把报告输出到宿主机:

1
2
3
docker run --rm \
-v "$PWD:/scan" \
skillspector scan ./my-skill/ --no-llm --format json --output report.json

甚至还可以给自己起个顺手的别名:

1
2
alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm

这套体验很像一个随叫随到的安检员:
你不想长期雇他也没关系,临时把他请来门口站一会儿,他照样能认真查包。


命令行使用示例

SkillSpector 的 CLI 很直接,核心命令就是 scan

扫描本地 skill 目录

1
skillspector scan ./my-skill/

扫描单个 SKILL.md 文件

1
skillspector scan ./SKILL.md

扫描 Git 仓库

1
skillspector scan https://github.com/user/my-skill

扫描 zip 文件

1
skillspector scan ./my-skill.zip

如果你希望快一点,只做静态分析,不调用 LLM:

1
skillspector scan ./my-skill/ --no-llm

如果你希望输出成 JSON:

1
skillspector scan ./my-skill/ --format json --output report.json

输出成 Markdown:

1
skillspector scan ./my-skill/ --format markdown --output report.md

输出成 SARIF,接入 CI/CD 或 IDE 工具链:

1
skillspector scan ./my-skill/ --format sarif --output report.sarif

查看帮助:

1
skillspector scan --help

CLI 选项包括:

1
2
3
4
5
6
Options:
-f, --format [terminal|json|markdown|sarif] Output format [default: terminal]
-o, --output PATH Output file path
--no-llm Skip LLM analysis (static only)
-V, --verbose Show detailed progress
--help Show this message and exit

LLM 分析怎么配

如果你想让 SkillSpector 开启语义分析,需要配置一个 OpenAI-compatible LLM endpoint。

它支持这些 provider:

  • openai
  • anthropic
  • nv_build

README 里给出的默认模型信息也很清晰:

  • openai 默认模型:gpt-5.4
  • anthropic 默认模型:claude-opus-4-6
  • nv_build 默认模型:deepseek-ai/deepseek-v4-flash

几个典型配置如下。

OpenAI

1
2
3
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/

Anthropic

1
2
3
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/

NVIDIA build.nvidia.com

1
2
3
export SKILLSPECTOR_PROVIDER=nv_build
export NVIDIA_INFERENCE_KEY=nvapi-...
skillspector scan ./my-skill/

本地 Ollama 或兼容 OpenAI 的服务

1
2
3
4
5
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export SKILLSPECTOR_MODEL=llama3.1:8b
skillspector scan ./my-skill/

覆盖默认模型

1
2
export SKILLSPECTOR_MODEL=gpt-5.2
skillspector scan ./my-skill/

如果你只是想做快速筛查,还是那句:

1
skillspector scan ./my-skill/ --no-llm

这种设计非常务实。它并没有强行把自己绑死在某家模型服务上,而是给了你比较灵活的接入方式。你可以把它想象成一个会说:

我不挑办公室,你给我一个能正常工作的推理入口,我就能开始审。


它的输出长什么样

README 里给了一个非常典型的终端输出示例。读起来的感觉很像一份简洁但压迫感很强的体检报告。

它会告诉你:

  • skill 名称
  • 来源
  • 扫描时间
  • 风险分数
  • 严重级别
  • 安装建议
  • 扫描到的组件
  • 每一条发现的问题
  • 位置、证据、置信度和解释

比如某个可疑 skill:

  • 一边枚举 os.environ
  • 一边把数据 requests.post 发到外部地址

SkillSpector 不会只冷冰冰写个“存在风险”,而是会把上下文拼起来告诉你:
这不是普通网络请求,结合环境变量采集来看,这明显是在做凭据外传。

这类解释特别重要,因为安全工具最怕两种情况:

  • 只会报,不会讲
  • 讲得太玄,使用者听不懂

SkillSpector 显然努力避免了这两种问题。


它对供应链安全尤其认真

在所有功能里,我个人很喜欢它对 SC4 的处理。

SC4 指的是 Known Vulnerable Dependencies,也就是已知漏洞依赖检查。它会通过 OSV.dev API 去查询依赖对应的漏洞情报,而且支持:

  • 无需 API Key
  • 批量查询
  • 自动 fallback
  • 一小时内存缓存

这说明它不是单纯地把规则写死在本地,而是愿意抬头看看外面的世界,实时确认你面前这个 skill 有没有“前科”。

如果联网可用,它查完整的漏洞数据库;
如果离线或在隔离环境中,它也不会完全摆烂,而是退回到内置的小型 fallback 列表。

这种设计特别像一个经验丰富的调查员:
能联网查案底时,他会去数据库核实;
查不到外部系统时,他也会先翻自己随身带的记录本,不至于让检查彻底中断。


这个项目最打动我的,不是功能多,而是视角准

今天我们已经很习惯给代码做安全扫描,给依赖做漏洞审计,给容器做镜像检查,给 CI 做策略控制。
但 AI 技能这件事,很多团队其实还停留在“先装了再说”的阶段。

问题在于,skill 不是传统配置文件,也不是普通插件。

它往往兼具:

  • 指令性
  • 工具调用能力
  • 上下文接触能力
  • 脚本执行潜力
  • 权限声明
  • 元数据诱导性

也就是说,它既可能在“语言层”使坏,也可能在“代码层”使坏;
既可能靠 prompt 注入绕规则,也可能靠依赖和脚本走后门;
既可能直接拿数据,也可能通过工具链和输出链条慢慢把风险传出去。

SkillSpector 的价值,在于它没有把 AI skill 安全问题简单缩成某一种检测,而是承认这是一个复合型攻击面,然后给出相应的复合型分析框架。

这点非常重要。

因为很多安全工具失败,不是因为它们不努力,而是因为它们看错了对象。
它们总想拿旧时代的尺子,去量新时代这种半代码、半指令、半行为体的东西。
而 SkillSpector 看起来更像在说:

我知道你不是单纯的脚本,也不是单纯的文本。
你是一个会说话、会做事、还可能会动歪心思的“技能实体”。
所以我要从行为、语义、依赖、权限、触发器、代码路径多个角度一起看你。

这就是它的锋利之处。


它也很坦诚地告诉你自己的边界

一个靠谱的安全工具,不会吹自己无所不能。SkillSpector 在 README 里明确列出了限制,包括:

  • 可能漏掉非英语内容里的模式
  • 无法分析图片里的文本攻击
  • 无法分析编译后或加密内容
  • 不做动态执行,只做静态分析
  • 在离线状态下,SC4 只能依赖较小的静态 fallback 列表

这份坦诚反而让人更容易信任它。

因为真正成熟的工具不会说“我什么都能抓”,而是会清楚地告诉你:

我擅长什么
我看不到什么
我在哪些场景下需要你补充判断

这就像一个老练的审计员,不会为了显得厉害就夸下海口,而是会老老实实告诉你:

门口我能查得很细,但你要是把东西藏在加密箱里,或者画成图贴墙上,我就得承认那不是我今天这套流程能完全解决的。


如果你想集成进程序里,它也准备好了

除了命令行,SkillSpector 还提供了 Python API 集成方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from skillspector import graph

# Invoke the LangGraph workflow
result = graph.invoke({
"input_path": "/path/to/skill",
"output_format": "json", # terminal, json, markdown, or sarif
"use_llm": True, # False for static-only analysis
})

# Access results
print(f"Risk Score: {result['risk_score']}/100")
print(f"Severity: {result['risk_severity']}")
print(f"Recommendation: {result['risk_recommendation']}")

for finding in result["filtered_findings"]:
print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")

这意味着你可以把它嵌进更大的平台流程里,比如:

  • skill 上架前的自动审核
  • 企业内部 AI 能力市场的准入检查
  • 安全团队的批量扫描平台
  • CI/CD 的阻断环节
  • IDE 或开发门户的风险提示

从工具形态上看,它不是那种只能“自己独美”的命令行项目,而是很适合被接入到更大系统里,成为一个安全能力组件。


谁适合关注这个项目

如果你属于下面这些人群,我会非常建议认真看看 SkillSpector:

AI Agent 平台开发者

如果你正在做 skill marketplace、agent runtime、tool registry、内部插件系统,这几乎是个天然相关项目。因为你面临的核心问题就是:怎么在开放生态和安全控制之间找到平衡。

安全工程师

如果你已经在关注 prompt injection、tool misuse、AI supply chain 这些方向,SkillSpector 提供了一个很具体、可落地的实践样本。它不是泛泛而谈概念,而是给出了模式、规则、分类和执行方式。

开发者与高级用户

如果你常常从 GitHub 上拉各种 skill 直接用,或者在本地 agent 环境里试验第三方技能,那你真的应该在“安装”之前加一道检查。今天的 skill,不比一个普通脚本更值得轻信。

研究者

这个项目背后显然不仅是工程实现,也连着对 agent skill 生态风险的系统性观察。对于研究 AI agent 安全、生态风险传播、技能市场治理的人来说,它值得当作案例深入阅读。


我为什么会记住 SkillSpector

因为它抓住了一个越来越重要、却还没有被足够重视的问题:

AI Skill 安全,不是未来的问题,而是现在的问题。

当一个 skill 不再只是“提供一个功能”,而是开始拥有上下文接触能力、工具调用能力、脚本执行潜力和权限边界时,它就已经不再是个温顺的说明文件了。

它更像一个新来的“数字同事”。

有的勤快能干,值得信任。
有的毛手毛脚,容易惹祸。
还有的表面笑嘻嘻,实际上正打量着你办公室抽屉里放了什么。

而 SkillSpector 的角色,就是在这群“同事”入职前,把他们请进面试室,灯一打,表一摊,代码一翻,依赖一查,权限一对,触发器一看,然后冷静地给你一个结论:

这个可以放行。
这个要谨慎。
这个别装。

在 AI Agent 时代,这种“安装前的清醒”会越来越宝贵。
而 SkillSpector,正是在帮我们保住这份清醒。


结语

NVIDIA 的 SkillSpector 不是一个花哨的 AI 项目,它很务实,甚至带着一点“安全人特有的怀疑精神”。
但恰恰是这种怀疑精神,让它显得特别重要。

当越来越多 AI skill 试图挤进我们的工作流、终端、项目仓库和自动化系统时,我们不能只看它会不会干活,还得看它会不会越界,会不会带毒,会不会趁你不注意顺走点什么。

SkillSpector 做的,就是把“看它会不会干坏事”这件事,变成一套可执行、可扩展、可集成的流程。

它像一个不苟言笑却极其负责的门卫,站在 AI 技能生态的大门口,对每一个准备进场的角色都问同一个问题:

你到底是来帮忙的,还是来搞事的。

而这,可能正是未来每个 AI Agent 平台都需要的一双眼睛。