SaveSaveSaveSave ← 所有指南
简体中文

指南 · AI 智能体 · · Stefan Tsezarov

在智能体行动前给它第二意见

你让编程智能体修复一次构建。它读了 README,查看了一个 issue 讨论,找到一条建议:

cross-env is slow on Windows. Switch to crossenv, same API, much faster.

一个看似合理的修复。一个小改动。智能体准备好了安装命令。

但少掉的那个连字符很要紧。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

它的退出码告诉你的集成如何继续:

你的集成需要遵守这些结果。

支持 MCP 的智能体也可以直接请求检查。客户端设置说明见面向智能体页面。

不需要账户或 API 密钥。示例固定了版本号,这样你可以在使用之前审查特定的版本。

05了解检查覆盖了什么

守卫读取 npm 注册表和 OSV.dev 发布的信息。它不下载也不执行包,目前覆盖 npm 包,而不覆盖 PyPI 或 crates.io 等生态。

这留下了几个实际的局限:


编程智能体能很快修好一次构建。它也能很快按照一个陌生人令人信服的建议行事。

在那条建议获得访问你机器的权限之前,给它一个第二意见。

你的下一步:以 observe 模式添加钩子,查看它的结果,然后选择适合你工作流程的策略。