装之前我们读了 891 个公开的 Claude Code mod:它们能做什么
Claude Code mod 以你的权限运行,不在沙箱里。我们对 891 个公开 mod 跑了 claude plugin validate:39% 会启动程序,36% 看得到每一次工具调用,11% 联网,1% 会替你批准工具调用。
概述
装一个 Claude Code mod 之前,先对它的文件夹跑一条命令,读两行输出:
claude plugin validate ./some-mod
calls: 这一行说明 mod 能碰到什么:文件、程序、网络、你的环境变量。hooks: 这一行说明它能看到什么:每一次工具调用、每一条提示词、存下来的对话。这条命令只读代码,不运行它,所以拿来检查一个还信不过的 mod 也是安全的。
原因很简单。mod 是 10 月 1 日随 Claude Code 2.1.287 上线的,它不在沙箱里。mod 以你的权限运行;就算你开了沙箱,mod 启动的进程也在沙箱外面跑。官方文档写得很直白,建议只从信得过的作者和市场安装 mod。
那么,大家发布出来的 mod 实际要了哪些能力?我们从 GitHub 上克隆了 891 个,逐个读了 claude plugin validate 的报告。大多数 mod 能碰到的范围,比一个状态栏需要的大得多。
推荐
下面是我们现在装 mod 之前会做的三项检查:
- 读
calls:这一行。 留意$.http.fetch(联网)、$.process.run或$.process.spawn(启动程序)、$.fs.write(写文件)、$.env.get(读环境变量,API 密钥常放在这里)、$.prompt.submit(以你的名义发提示词)和$.model.complete(花你的套餐额度或 API 密钥)。这些调用和 mod 自称的功能对得上,就没问题。一个统计 token 的 mod 却要联网,就值得多看一眼。 - 读
hooks:这一行。tool.call后面没有花括号里的过滤条件,说明 mod 看得到、也改得了每一次工具调用。prompt.submit说明它看得到你发的每一条提示词。session.append说明它能在对话写入记录之前改写其中的行。tool.check说明它能在你被问到之前,先回答权限问题。 - 如果挂了
tool.check,找到它返回allow的地方。 那段代码就是替你批准工具调用的地方。看看它放行的是什么:只有它自己的工具、只读调用,还是更宽的范围。
怎么测的
- 找仓库。 在 GitHub 代码搜索里找 mod 的文件结构(
hooks/hooks.json的modules列表指向一个代码文件),再加上按 Claude Code mods 搜仓库,共 1,781 个仓库。 - 过滤。 不是分叉、没有归档、10 月 7 日以后有推送、至少 5 星,剩 311 个,其中 303 个克隆成功。
- 认定 mod。
hooks.json指向的文件导出了register,就算一个 mod,这是 mods 参考文档里的定义。这样找到 915 个;内容完全相同的文件只算一次,留星最多的那份,剩 902 个。 - 验证。 对每个 mod 跑
claude plugin validate --json(Claude Code 2.1.314)。运行时把主目录换成一个空文件夹,我们自己的设置、钩子和插件都不会跟着加载。整个过程没有安装任何东西,也没有运行任何 mod 的代码。 - 计数。 去掉 Anthropic 的 4 个示例 mod,以及验证器读不懂代码的 7 个(Claude Code 同样不会加载它们),剩下283 个仓库里的 891 个社区 mod。最少见、也最敏感的几类(替你批准工具调用、凭据文件),我们还人工读了代码。
测试结果
一个 mod 可以同时属于好几行。
| mod 能做什么 | 数量 | 占比 |
|---|---|---|
挂 tool.call:看得到、也改得了工具调用 | 491 | 55% |
| 读环境变量或设置 | 389 | 44% |
| 启动程序 | 346 | 39% |
| 读文件 | 325 | 36% |
挂 tool.call 且不设过滤:每一次工具调用都经过它 | 324 | 36% |
挂 prompt.submit:看得到你发的提示词 | 225 | 25% |
| 写文件 | 209 | 23% |
| 以你的名义发提示词 | 118 | 13% |
| 用你的套餐或密钥调模型 | 107 | 12% |
| 联网 | 98 | 11% |
| 读文件或环境变量,同时联网 | 76 | 9% |
挂 tool.check:能回答权限问题 | 48 | 5% |
挂 session.append:能改写存下来的对话 | 40 | 4% |
| 读名字像密钥的环境变量(KEY、TOKEN、SECRET) | 34 | 4% |
读文件,代码里写着凭据路径(.env、~/.ssh、~/.aws/credentials) | 17 | 2% |
| 设置环境变量,影响 Claude 之后运行的命令 | 17 | 2% |
tool.check 里返回 allow:替你批准工具调用 | 11 | 1% |
| 以上都没有:只画界面、计数、存自己的状态 | 156 | 18% |
大家猜猜看,891 个 mod 里,只在屏幕上画东西、记自己笔记的有多少?156 个,不到五分之一。
举几个例子,都不点名:
- 联网。 有个 mod 让你在手机上接着聊:它跟着每一轮对话,通过网络和自己的中转服务通信,再把你在手机上打的字作为你的提示词发出去。这就是它的全部功能;放在一个自称只做小事的 mod 身上,
$.http.fetch加$.prompt.submit的组合就值得留意。 - 凭据路径。 我们读过的命中全是 mod 在读自己的令牌。有个给 Telegram 机器人加表情回应的 mod,从自己文件夹里的
.env读机器人令牌,只放在内存里。同样的$.fs.read,也读得了你能读的任何文件。 - 每一次工具调用。 有个远程控制 mod 挂了每一次工具调用、每一条提示词和每一行对话记录,因为它要从别处操作这个会话。
- 替你批准。 返回
allow的 11 个我们全读了,每个都带条件:- 5 个只放行自己的工具,或自家插件发起的调用。
- 2 个只放行只读调用,比如读技能文件夹里的文件。
- 1 个只放行一条固定的查找命令。
- 1 个在会话持有某个文件的锁时放行对它的编辑。
- 1 个交给外部命令判断会话是否持有对应资源。
- 1 个让模型给风险打分,低于阈值就放行,这是 11 个里放得最宽的。
- 没有一个会放行任意的 shell 命令。
和公开目录对照
mods.aidojo.si 上的 awesome-claude-code-mods 目录每天扫描 GitHub,11 月 1 日那份收了 8,532 个 mod。它同样用 claude plugin validate,再给每个 mod 定一个影响面等级,从只画界面到能联网。
两份样本有三处不同:
- 范围。 我们只收 5 星以上、近 30 天有推送的仓库,这 891 个是生态里用的人多、更新勤的那部分。
- 计法。 我们按调用和事件分别计数,替你批准的代码逐个人工读;目录给每个 mod 一个等级。
- 时间。 我们在 11 月 6 日克隆。
重合的部分,两边结论一致:
- 我们的 mod 里有 521 个在目录里,这 521 个的联网判断和目录数据全部一致。
- 目录全量的比例和我们接近:联网 9%(我们 11%),启动程序 38%(39%),写文件 18%(23%),发提示词 11%(13%)。
- 我们 283 个仓库里有 161 个不在那份目录里,它们都建于目录生成之前。
该忽略什么
星数。能碰到的范围最大的 mod,常常正是有用的那些:远程控制、数据库改动审批面板、读你任务队列的看板。范围告诉你该读哪里,功能说明告诉你这个范围合不合理。
也别以为通过验证就等于安全。验证检查的是 Claude Code 能不能读懂 mod 要做的调用,这些调用该不该做,还得你自己判断。
局限
- 只看静态结果。 列出来的调用,可能藏在你不点某个按钮就不会运行的分支里。反过来,Claude Code 会拒绝加载它读不懂调用的 mod,所以能加载的 mod 没法把调用藏起来。
- 统计的是能力,不是意图。 我们没有判断哪个 mod 滥用了它要的能力,只人工读了少见的几类。
- 一次快照。 样本是 2026 年 11 月 6 日、5 星以上的活跃仓库里的 mod。mod 几乎每周都有新事件和新调用,这些数字会变。
自己复现
上面的统计在 mods-review-2026-11.json 里,仓库名和 mod 名都去掉了。想自己检查一个 mod,把它克隆下来,对文件夹跑 claude plugin validate。官方文档的 Review what a mod can do 一节列出了该看哪些调用。
在找能装的东西?我们的 skills 目录收录了 5,101 个 Claude Code skill,每个社区 skill 收录前都经过审核。
来源
- Claude Code 文档:Mods 概览 · official
- Claude Code 文档:为组织管理 mod(Review what a mod can do) · official
- Claude Code 更新日志,2.1.287 · official
- awesome-claude-code-mods 目录(mods.aidojo.si) · blog