指南 · AI 智能体 · · Stefan Tsezarov
在智能体行动前给它第二意见
你让编程智能体修复一次构建。它读了 README,查看了一个 issue 讨论,找到一条建议:
一个看似合理的修复。一个小改动。智能体准备好了安装命令。
但少掉的那个连字符很要紧。crossenv 曾是一个真实的恶意包,2017 年被发现窃取环境变量——开发者常把密钥和令牌放在那里——之后被 npm 下架。
上面的对话是个例子。那个包不是。
01当建议变成命令
编程智能体会读大量你可能永远看不到的文字:文档、issue 评论、网页和错误信息。这些上下文帮助它们解决问题。也可能把它们引向一个糟糕的依赖。
安装软件包需要格外小心。npm 包可以包含在安装时运行的脚本,所以代码可能在你来得及检查之前就已执行。
SaveSaveSaveSave 的安装前守卫正是在这一点上加了一道检查。在受支持的安装命令运行之前,它会查询这个包,并应用你选择的策略。
02一次安装会发生什么?
看看智能体可能提出的三条命令。
一个没有触发任何标记的注册表包
npm install cross-env
守卫允许命令继续。你平常的批准提示仍然有效。这表示检查没有发现反对的理由;并不保证这个包是安全的。
一个被报告为恶意的包
cd app && npm install --save-dev crossenv
守卫拒绝该命令,并告诉智能体原因。即使安装命令跟在另一条命令后面,它也能识别出来。
直接从 GitHub 获取的代码
npx github:someone/setup-script
在默认模式下,守卫会请求人工审核。Git URL 不在它的 npm 注册表检查范围内,所以它无法给出同样的评估。
支持的命令包括通过 npm、pnpm、yarn 和 bun 的安装,以及 npx、npm ci、用 && 连接的命令链,和包在 bash -c "…" 中的命令。
03规则由你选择
扫描提供证据:它检查了什么、发现了什么、哪些无法评估。在你机器上运行的策略决定接下来发生什么。
从三种模式中选择一种:
| 模式 | 被报告为恶意 | 警告或数据不足 | 检查失败或来源不在注册表中 |
|---|---|---|---|
| observe | 允许并报告 | 允许 | 允许 |
| guard · 默认 | 拒绝 | 询问人 | 询问人 |
| strict | 拒绝 | 拒绝 | 拒绝 |
用 observe 看看守卫在你的工作流程中表现如何。选择 guard 来阻止已知恶意包并审核不确定的情况。当不确定的结果应该阻止安装时,选择 strict。
干净的结果永远不会取消智能体原本需要的批准。
04把它加入你的工作流程
对于 Claude Code,把这个钩子添加到你项目的 .claude/settings.json 中。如果文件中已有设置,把钩子合并进去。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "npx -y savesavesavesave@0.1.5 hook claude-code --mode observe"
}
]
}
]
}
}
钩子会检查提议的 Bash 命令。没有可识别安装操作的命令会直接通过。
对于其他智能体或脚本,把守卫放在安装命令之前:
npx savesavesavesave@0.1.5 guard --mode guard -- npm install some-package
它的退出码告诉你的集成如何继续:
0:允许1:请求人工审核2:拒绝
你的集成需要遵守这些结果。
支持 MCP 的智能体也可以直接请求检查。客户端设置说明见面向智能体页面。
不需要账户或 API 密钥。示例固定了版本号,这样你可以在使用之前审查特定的版本。
05了解检查覆盖了什么
守卫读取 npm 注册表和 OSV.dev 发布的信息。它不下载也不执行包,目前覆盖 npm 包,而不覆盖 PyPI 或 crates.io 等生态。
这留下了几个实际的局限:
- 它检查它收到的受支持命令。藏在脚本文件中的安装、不受支持的包管理器或下载的二进制文件,可能不在它的视野内。更严格的限制需要控制智能体的网络和文件系统访问。
- 未被报告的威胁可能通过。“没有异议”意味着现有的检查没有发现已知风险。
- 钩子必须运行,策略才会生效。如果你使用 strict 模式,请按照包的 README 中的说明,在钩子本身无法启动时阻止命令。
编程智能体能很快修好一次构建。它也能很快按照一个陌生人令人信服的建议行事。
在那条建议获得访问你机器的权限之前,给它一个第二意见。
你的下一步:以 observe 模式添加钩子,查看它的结果,然后选择适合你工作流程的策略。