Claude 与 Skill
读了 2,688 个公开 Claude Code 插件:装之前先看这三个文件
作者团队静态扫描了 1,961 个活跃公开仓库里的 2,688 个 Claude Code 插件,发现约三成插件会在你敲第一个字之前就自动执行代码:SessionStart 钩子、本地 MCP 进程、后台 monitor、bin/ 目录。文章给出了装插件前的具体检查步骤,以及 npx/uvx 不锁版本带来的风险数据。
今天就能做
- 装任何 Claude Code 插件前,先克隆仓库跑 claude --plugin-dir <目录> plugin details <插件名>,把钩子和 MCP server 列出来再决定。
- 在 .mcp.json 里看到 npx 或 uvx 启动、包名后没有版本号的,要么自己补上版本,要么别装。
- 关掉不受控 marketplace 的自动更新,或只选把插件钉在固定 commit 上的市场。
插件在你输入前会自己跑什么
- 插件有四类组件会自行启动:SessionStart/Setup 钩子(shell 命令,纯文本输出会进入 Claude 上下文)、用 command 声明的 MCP server(在你机器上起进程)、monitor(整个会话后台运行并把输出送给 Claude)、bin/ 目录(被加进 Claude 执行命令的 PATH)。
- 这些都在沙箱之外运行,而且安装插件就等于启用它。官方文档原话是插件可以以你的用户权限执行任意代码。
- 扫描结果:30.4% 的仓库至少有一个插件会在会话启动时跑东西;16.0% 带 SessionStart/Setup shell 钩子,其中 6.0% 的脚本会写文件,1.5% 会联网。
- 其他比例:22.2% 有任意 shell 钩子,8.1% 有 UserPromptSubmit 钩子(能看到你每条提示),11.8% 有 PreToolUse 钩子,26.3% 声明 MCP server,9.5% 带 bin/ 目录。
装之前要打开的三个地方
- hooks/hooks.json:先看 SessionStart 和 Setup,再顺着命令去读它调用的脚本文件,因为多数钩子跑的是插件目录里的脚本,光看命令行不够。
- .mcp.json:带 command 的 server 就是本机进程。如果写的是 npx 某包或 uvx 某包却没写版本号,包管理器会在启动时自己解析版本,上游发新版就能不经你复核直接跑到你机器上。锁版本写法是包名后加 @1.4.2(npx)或 ==1.4.2(uvx)。
- bin/:这个目录会进 PATH,等于给 Claude 多了一批可执行命令。
- 先列清单再装:克隆仓库后运行 claude --plugin-dir <插件目录> plugin details <插件名>,它只读文件、不启动会话,会打印钩子及其事件、MCP 与 LSP server、skills 和 agents。
版本不锁有多普遍
- 用 npx 或 bunx 启动的 MCP server 里,只有约三分之一写了版本号:171 个中有 112 个(65%)没写,用的是 @latest、裸包名或 GitHub 引用;149 个(87%)带 -y,跳过 npm 的安装确认。
- 945 个 MCP server 里最常见的是远程 URL(445 个)、插件内本地脚本(176 个)、npx(164 个)。
- 2.4% 的仓库会把名字像密钥的环境变量传给 MCP server。
- 自动更新也要管:marketplace 开了自动更新,你审过的文件可能在磁盘上被换掉。不受控的 marketplace 建议关掉,或优先选把每个插件钉在某个 commit 上的市场。
几个值得注意的实例
- 多数 SessionStart 钩子用 node、bash 或 python3 跑插件目录里的脚本,文件名常见 session-start、resume-hint、context-inject。
- 29 个联网的会话启动脚本里,26 个是去 GitHub 或 npm 查更新,有几个连本机 localhost 上的自家服务;约十个提到 telemetry 或 analytics,作者没查它们具体发什么。
- 有一个规则检查钩子会拿你的 ANTHROPIC_API_KEY 调 Anthropic 接口,把一段对话发过去做判断,会消耗你的额度。
- 提到 ~/.ssh 或 .env 的钩子大多是防护类,列出这些路径是为了拦截。作者说被规则标出的插件读下来没有看起来恶意的。
别被组件数量误导
- 组件多不等于危险:二十个钩子的插件可能是细致的防护;一个 SessionStart 脚本加一个不锁版本的 npx server 才最该细读。
- 判断标准是两件事:什么会自己启动,它会去拉什么。
- 局限:样本约覆盖 53% 的 manifest,只来自 5 星以上、近期有推送的活跃仓库,且截至 2026 年 11 月 6 日;只做静态阅读,没运行钩子,所以不知道它们实际往上下文里加了什么、联网脚本发了什么。不锁版本是风险,不等于已经造成损害。
原文:What a Claude Code plugin runs before you type: we read 2,688 public plugins
来源:DEV Community · 2026-11-06
查看原文本文由 AI 阅读原文后整理,未经人工逐字核对,内容以原文为准。
登录后可以点赞、查看和发表评论