装一个命令行工具,Claude Code 的技能搜索范围里就多了四个不是你放的技能
~/.claude/skills/ 等目录,让 Claude Code、Codex 的工作流被导回扣子执行;8 月 11 日发布的 v0.3.7 把触发条件收紧到"用户明确调用",但静默写入这件事本身没停。这轮争议的起点不在安全公告里,而在一段吐槽视频。有用户在 B 站公开抱怨扣子的命令行工具"像是病毒"——他并不是在用扣子的时候发现的,而是在打开 Codex 干活时,注意到技能列表里多了几条自己从没装过的东西。顺着往回查,才发现来源是前些天顺手装上的 Coze CLI。
据蓝点网的分析,Coze CLI 把安装动作写在了包管理器的生命周期脚本里:用 npm 或 pnpm 装完主程序,脚本会紧接着拉起附带技能的安装,全程不需要用户确认,还通过参数把子进程输出藏了起来,只有在 CI 环境或从源码开发时才会跳过。也就是说,终端里滚过去的那几行"安装完成",并不包含它实际做完的全部事情。
装完之后是探测。这套技能工具会扫描本机有没有各家 AI 编程工具的配置目录来判断"你装了什么":
~/.claude 是否存在~/.codex 或相关配置路径~/.agents/skills/ 与 ~/.claude/skills/,再按各家的目录结构创建软链接或副本using-coze-cli、coze-code、coze-file、coze-generate 等技能这套机制本来的设计前提是"目录里的东西都是我自己放的"。它没有签名、没有来源标记、也没有权限边界,模型读到什么就当什么用。一旦有人往里面复制文件,等于是往你的助手脑子里加了一段它会主动照做的指令,而它在界面上看起来跟你手写的技能没有任何区别。这也是为什么同样一件事——"复制几个文本文件到用户目录"——放在别的软件上顶多算流氓,放在这里就足以让人想到病毒。
8 月 11 日下午,扣子发布了 v0.3.7。改动集中在触发条件:旧版会在用户"开发、修改、调试、运行或迭代软件产品"时自动加载扣子技能——这个描述几乎覆盖了写代码的全部动作;新版收紧为只有用户明确要求使用扣子功能,或者输入 /coze-cli、/coze 前缀时才触发。
被批评的劫持行为算是停了。但按蓝点网的复核,新版依然:安装时无提示地装技能、用参数隐藏安装过程、默认全局激活并写入共享技能目录、自动探测并记录已装的智能体。换句话说,改的是"什么时候用它",不是"要不要往你机器上放它"。想彻底躲开,目前的办法是装的时候跳过脚本、再把技能同步关掉:
npm install -g --ignore-scripts @coze/[email protected]COZE_CLI_NO_SKILL_NOTIFIER=1 coze config set skill.mode off官方到目前没有发公开说明,只是把修订版推了出来。
真正麻烦的地方在于,这些被静默安装的技能,其依赖并没有锁定具体版本。NPM 生态这两年被供应链攻击反复光顾,上游一个包被投毒,理论上就能顺着这条不需要用户确认、还会自动写入多个 AI 工具目录的通道进到开发机里。扣子自己有没有恶意是一回事,它顺手修出来的这条路谁都能走,是另一回事。蓝点网的审计说法也停在这个分寸上:没发现传统意义上的恶意软件行为,但这种导流锁定的做法"不可接受"。
把时间线拉长一点会更清楚。扣子 3.0 在 6 月 1 日上线时打的旗号,就是能把 Claude Code、Codex CLI、OpenClaw 这些本地 Agent 接进自己的多智能体协作里。平台方想当那个"总调度",这在产品逻辑上说得通;问题是当调度权拿不到的时候,改成往对方的技能目录里放东西,就从集成变成了争入口。用户手里那台开发机,正在同时被好几家当成必须占住的地盘。
对具体使用 Claude Code 的人来说,可做的事情不多,但都不难:装完新的 CLI 工具后翻一眼 ~/.claude/skills/,看看里面有没有自己没放过的目录;把技能目录纳入平时的检查范围,就像检查 shell 配置一样。Claude Code 稳定使用指南里那 11 项配置基本都在这个层面上——一个装在本地、能读你代码也能替你执行的工具,值得你知道它现在到底带着哪些东西在跑。