关于 KillerSkills
KillerSkills 是面向 Agent 和组织的安全检查工具,用沙箱运行结果为 Agent 技能和 MCP 服务提供安全判定。它可作为只读 MCP 服务提供判定与搜索,也能在安装前检查项目,并在运行时限制 MCP 服务的工具、网络和凭据访问。
主要功能
- 01查询技能与 MCP 服务判定
- 02按关键词搜索安全索引
- 03安装前在沙箱试运行
- 04拦截或限制 MCP 工具调用
- 05限制网络并代理凭据
- 06检测提示注入与凭据外泄
适用场景
- 01安装 Agent 技能前查看判定
- 02为 MCP 服务寻找已验证替代项
- 03限制 MCP 服务可用的工具和网络
- 04监测 Agent 工作流中的注入内容
MCP 相关
KillerSkills 可通过 stdio 作为只读 MCP 服务运行,向客户端提供 `check_skill` 和 `search_skills` 工具,用于查看技能或 MCP 服务的判定及搜索索引。其 CLI 还可在 Agent 与 stdio MCP 服务之间运行,实施工具、网络和凭据限制。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 技能或软件包名称:"name"、"publisher/name"、"@scope/pkg",可选带 "@version"。 |
| registry | enum | 否 | 已知时填写注册表。省略则搜索所有公共注册表。skills_sh | clawhub | npm | pypi | docker | plugins | partner |
详细介绍
vet-skills
在 Agent 技能和 MCP 服务运行前对其进行检查。评估结果来自 KillerSkills;策略由你或你的组织决定。
npm i -g vet-skills # the CLI (Node 20+)
vet-skills hook install all # Claude Code, Cursor, Codex, Windsurf, Gemini CLI: install check, runtime observation, canaries
vet-skills check <skill> # or just ask before you add one
vet-skills publish ./my-skill # org members: detonate + list in the private registry
将其用作 MCP 服务
直接向任意 Agent 提供评估结果,让它在安装技能或 MCP 服务前先进行检查,并选择经过验证的替代项。只读,无需账户或 API 密钥。
工具:check_skill(评估结果、评分、沙箱观察到的内容、主要发现、最近的安全版本)和 search_skills(按关键词搜索索引,并显示评估结果)。
Claude Code
claude mcp add killerskills -- npx -y vet-skills mcp
Cursor:~/.cursor/mcp.json(或项目中的 .cursor/mcp.json)
{
"mcpServers": {
"killerskills": { "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
}
}
Claude Desktop:Settings → Developer → Edit Config(claude_desktop_config.json)
{
"mcpServers": {
"killerskills": { "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
}
}
VS Code:.vscode/mcp.json
{
"servers": {
"killerskills": { "type": "stdio", "command": "npx", "args": ["-y", "vet-skills", "mcp"] }
}
}
Windsurf:~/.codeium/windsurf/mcp_config.json,与 Cursor 使用相同的 mcpServers 块。
Codex:~/.codex/config.toml
[mcp_servers.killerskills]
command = "npx"
args = ["-y", "vet-skills", "mcp"]
然后向你的 Agent 提问:"添加该 MCP 服务前,请用 KillerSkills 检查它。" 需要 Node 20+。索引包含来自 skills.sh、ClawHub、npm、PyPI、Docker MCP Catalog 和 Claude Code 插件市场的 24,000+ 个技能和 MCP 服务,每个都在蜜罐沙箱中运行。可在 killerskills.ai 浏览。
安装前先试用
vet-skills try @acme/crm-mcp # npm package (or name@version)
vet-skills try pypi:some-mcp-server # PyPI package
vet-skills try owner/repo # GitHub repository
vet-skills try ./my-skill # local directory
将软件包获取到临时目录(绝不安装),在 KillerSkills 蜜罐中运行,并输出它的行为:它联系的每台主机、访问的每条凭据路径、它提供的工具,以及它会给 Agent 带来的开销(指令令牌;对于 MCP 服务,还包括握手时间和其工具列表占用的提示词上下文)。运行被阻止时,退出代码为 2。
对返回内容进行注入检查
监视工具调用的同一钩子也会读取 WebFetch、WebSearch、Read、Bash、Grep 以及所有 MCP 工具的返回内容。当内容包含针对 Agent 的指令(“忽略之前的指令”“不要告诉用户”、隐藏的 HTML 注释、不可见的 Unicode 标签字符、通过管道传给 shell 的脚本)时,钩子会在 Agent 执行下一步前告知它、记录相关内容,并在注册后向你的组织报告发现类型。内容不会离开本机。vet-skills discover 会对 CLAUDE.md、AGENTS.md、MEMORY.md 和所有已安装的 SKILL.md 应用相同规则;vet-skills run 会对正在运行的服务的工具列表和结果应用这些规则。
在受限环境中运行
claude mcp add crm -- npx -y vet-skills run --net declared --deny "delete_*" -- npx -y @acme/crm-mcp
vet-skills run 位于 Agent 和 stdio MCP 服务之间。被拒绝的工具调用会收到错误,且绝不会到达服务;每次工具调用都会被记录(仅记录工具名称和参数名称);--net declared 会将服务的 HTTPS_PROXY 指向本地允许列表代理,该代理仅允许连接其评估结果中声明的主机(使用 --net host1,host2 可自行指定)。安装钩子阻止 stdio 服务时,会将此命令作为替代方案打印出来。忽略 HTTPS_PROXY 的客户端不会受到网络隔离,保护程序会在启动时说明这一点。
添加 --contain(0.7.9)还可将服务放入操作系统沙箱中:macOS 上使用 sandbox-exec,Linux 上使用 bwrap(bubblewrap)。项目目录、/tmp 和软件包缓存仍可写;$HOME 的其余部分为只读,凭据目录(~/.ssh、~/.aws、~/.config/gh、~/.kube、~/.docker、密钥链、Agent 配置文件夹,等等)则完全不可读。macOS 沙箱还会禁止除本地代理之外的所有出站连接。未声明的主机会快速收到已记录的 403,因此遥测调用会无害地失败,工具仍可继续工作;退出摘要会统计这些主机。Windows:请使用 WSL。如果两种沙箱都不可用,保护程序会在不启用沙箱的情况下运行并说明原因。
claude mcp add crm -- npx -y vet-skills run --contain --net declared -- npx -y @acme/crm-mcp
凭据代理:--secrets (0.7.13)
大多数 MCP 服务都需要在环境中配置 API 密钥,而读取
GITHUB_TOKEN 来调用 GitHub 的服务,也可以轻易地把它发到别处。使用
--secrets NAME=host[,NAME=host…] 后,服务永远拿不到真实值:它的
环境中只有占位符,守护进程保管真实值,并且只会通过代理将真实值放入发往绑定主机的请求中。发送到其他任何地方的占位符都是随机字符串,守护进程会报告此次尝试(✕ sent the GITHUB_TOKEN placeholder to collect.evil.xyz),并将其记录为偏差。
GITHUB_TOKEN=ghp_… vet-skills run --secrets GITHUB_TOKEN=api.github.com -- npx -y @acme/github-mcp
原理:代理使用为本次运行创建的临时 CA 证书(openssl,密钥存放在权限为 0700 的目录中,并在退出时删除),为允许的主机终止 TLS。服务通过 NODE_EXTRA_CA_CERTS、
SSL_CERT_FILE、REQUESTS_CA_BUNDLE、CURL_CA_BUNDLE 和 GIT_SSL_CAINFO 信任该证书,这些变量涵盖 Node、Python、curl、Go 和 Rust 客户端。请求头、URL 和不超过 4 MB 的请求正文都会被重写。--secrets 会将网络访问限制在绑定的主机(添加 --net 可放宽限制)。固定证书的客户端会拒绝本次运行的 CA;对于此类客户端,请使用不带 --secrets 的 --net。
金丝雀凭据:确凿证据,而非启发式判断
vet-skills canary install
在真实凭据文件旁放置诱饵文件(~/.aws/credentials.old、
~/.config/gh/hosts.yml.old、~/.npmrc.old、~/.ssh/id_rsa_old、~/.env.old),仅当对应文件不存在时才放置,随机值保存在 ~/.vet-skills/canaries.json 中。正常情况下,没有任何程序会读取被遗忘的备份,因此,只要金丝雀值出现在 Agent 发送的任何内容或工具返回的内容中,就能确定发生了数据外传。钩子会停止会话并指出文件类型(绝不透露值);vet-skills run 会拒绝此次调用。vet-skills canary 会列出这些文件,canary remove 只会删除内容仍与写入时完全一致的文件。
因你的要求而允许
并非每次读取凭据都是攻击。钩子会保留每个会话的意图记录:你在提示词中提到的主机和路径(由
UserPromptSubmit 钩子提取;不会存储提示词本身),以及你自己的工具调用访问过的主机和路径。如果技能的敏感操作与最近 30 分钟内的一条记录相匹配,就会允许该操作、显示一行通知,并记录一项范围限定的许可(此会话、此技能、此资源,有效期 30 分钟);如果相同操作没有任何依据,系统就会暂缓操作,并告知 Agent 应向你询问。
vet-skills runtime allows # scoped allows this week, with the reason
vet-skills runtime revoke <id> # revoke one now
策略中的 context: 可按类型关闭此功能(credential_read: hold)。不会由任何模型判断意图:规则就是匹配,并且会明确显示。
查看当前配置
vet-skills discover # every MCP server, skill, plugin and hook on this machine, with verdicts
在本地读取 Claude Code、Cursor、Windsurf、Claude Desktop、Gemini CLI 和 Codex 的配置。系统会查询每个服务和技能名称并给出判定;不会有其他内容离开本机。如果你已加入某个组织,名称列表也会报告到团队的 Discovery 页面。环境变量值、参数和文件内容绝不会被报告。
系统还会检查每个已安装的技能文件夹,查找安装程序诱饵特征(提交的 ZIP 或 .bat 文件、LuaJIT 运行时、以 .txt 保存的 Lua、与 Agent Lure Stealer IOC 匹配的文件),并标记粘贴到配置文件中的凭据值,但只报告类型和行号;绝不会打印或发送值本身。
工作原理
每次执行 skills add、claude plugin install 和 claude mcp add 时,都会先解析出制品哈希、查询该哈希,并在安装前根据你的策略进行评估:
$ vet-skills check deploy-helper
Resolving deploy-helper …
vet-skills 0.7.8 · policy acme/default-strict
BLOCKED 14/100 [email protected] · devtools-cloud · 4,210 installs
Observed in sandbox (3 scenarios, 38s):
✕ network telemetry-cdn.xyz — undeclared
✕ memory wrote agent memory (1)
✕ filesystem reads ~/.ssh/id_ed25519, ~/.aws/credentials, ~/.npmrc
! tools shadows github.create_pr
Policy acme/default-strict:
✕ publisher blocked devtools-cloud is on the block list
✕ Blocked [email protected] · publisher devtools-cloud is blocked by policy
Pin instead: [email protected] (score 88)
判定结果:允许、沙盒(在限制条件下安装)、需要审批(安装等待审核人员审批)、阻止(并指出最后一个安全版本)、延后(尚未评分:先进行引爆分析)、观察(组织强制执行功能已关闭;仅记录)。
失败时开放
如果无法访问判定 API,且没有缓存结果,就会应用策略中的 offline 规则。默认设置为 allow 并显示警告:我们这边的服务中断绝不会阻止你的工作。若要在故障时默认拒绝,请在策略中设置 offline: block。
个人模式与组织模式
个人模式:个人策略位于 ~/.vet-skills/policy.yaml(vet-skills policy show)。
除了查询判定所需的信息(技能名称、版本、哈希)和匿名客户端 ID,不会发送任何内容。
组织模式:vet-skills join <org> --token <enroll token> --email [email protected]
会切换到组织策略。从此以后,钩子还会将已安装技能的名称、版本、哈希和判定结果报告到组织仪表板。绝不会发送代码、
提示词、环境变量或文件内容。执行 vet-skills leave 可恢复个人模式。
命令
| 命令 | 功能 |
|---|---|
check <skill> | 试运行判定。被拦截时退出码为 2。 |
try <pkg|pypi:name|owner/repo|path> | 获取技能,在蜜罐中运行,打印其执行内容以及对 Agent 造成的成本。 |
run [--contain] [--deny t,glob*] [--net declared|hosts|off] [--secrets NAME=host,…] -- <cmd…> | 守护 stdio MCP 服务:拒绝工具调用、固定其网络、代理其机密,并记录每次调用。 |
install <skill> | 检查技能,然后执行 npx skills add。遇到需谨慎的情况时会提示。 |
detonate <skill|path> | 强制在沙盒中运行。 |
why <skill> | 显示上次判定及其依据的规则。 |
join <org> --token <t> --email <e> / leave | 开启 / 关闭组织模式。 |
policy show / policy set <file> | 管理个人策略。 |
block <skill> [--reason] | 管理个人屏蔽列表。 |
status | 显示组织、策略版本、缓存和待审批项;同步策略。 |
discover [--project] [--json] | 清点此设备上的 Agent 配置;加入组织后会向组织报告名称。 |
mcp | 通过 stdio 以 MCP 服务身份运行(check_skill、search_skills)。 |
hook install [claude-code | cursor | codex | windsurf | gemini | all] | 为该 Agent 注册钩子(~/.claude/settings.json、~/.cursor/hooks.json、~/.codex/hooks.json、~/.codeium/windsurf/hooks.json、~/.gemini/settings.json)。 |
hook windsurf、hook gemini | 由 Windsurf(Cascade)/ Gemini CLI 在每个事件发生时调用;退出码为 2 时会拦截,并将原因告知 Agent。 |
hook eval | 由 Agent 调用;从 stdin 读取钩子 JSON。 |
环境变量:KILLERSKILLS_API(默认值:https://killerskills.ai)、
VET_SKILLS_HOME(默认值:~/.vet-skills)、NO_COLOR。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。