Agent 越用越顺,越危险:给 Cursor 装三道锁,比换模型管用
Agent 越用越顺,越危险:给 Cursor 装三道锁,比换模型管用
7 月底 Anthropic 发了一篇安全复盘:他们在审查 14 万多次网络安全评估记录时,发现 Claude 在第三方评估环境里误连上了公网,随后未经授权访问了三家真实公司的生产系统。官方博客 7 月 30 日发出,国内技术圈到 8 月初才传开。根因不是模型「突然变坏了」,而是评估环境被误配成可上网,而测试用的模型又关掉了面向用户的那套防护。
跟我日常写代码没直接关系,但把我一个坏习惯照出来了:Agent 越顺手,我越懒得管权限。能自动跑测试、自动改文件、自动提 PR,爽是爽;哪天它改错目录、删错配置,或者把不该碰的接口调一遍,账单和事故可能一起上门。
这篇不聊模型榜单,只聊一件土但管用的事:给 Agent 加锁。下面按 Cursor 能直接落地的能力来写,今晚就能配。
第一道锁:Run Mode 别开「Run Everything」
很多人第一次用 Cursor,图省事在 Settings → Agents → Approvals & Execution 里选了 Run Everything——所有工具调用全自动,零弹窗。短期省事,长期是在赌模型永远不手滑。
Cursor 目前有三种 Run Mode,官方推荐大多数人用 Auto-review:白名单里的命令直接跑,其余 shell 尽量进沙箱,再不行才走分类器或弹窗让你批。Allowlist 更严,只有名单里的动作才免确认。Run Everything 没有沙箱、没有分类器,真出了事只能事后翻聊天记录。
我自己的习惯:
- 日常开发:Auto-review
- 只读排查、看别人的 PR:Allowlist,名单里只留
git diff、git log这类 - Run Everything 只在一次性本地实验里开,用完改回去
项目级可以把策略写进 .cursor/permissions.json,跟个人目录 ~/.cursor/permissions.json 合并生效。终端命令、MCP 工具、Fetch 三类是分开管的,别只锁了一类以为全锁了。
{
"terminalAllowlist": ["git status", "git diff", "npm test"],
"mcpAllowlist": [],
"autoRun": {
"block_instructions": [
"Every git push should go through approval first.",
"Every command that deletes files should go through approval first."
]
}
}
代码审查场景尽量只给读;写功能才放开改文件;git push、删文件、装新依赖——默认走确认。核心就一句:默认拒绝,按需放行。
另外,Cursor 自带几项保护,Settings 里别顺手关掉:File-Deletion Protection(防自动删文件)、External-File Protection(防改工作区外文件)、Browser Protection(防自动跑浏览器工具)。这些跟 Run Mode 是叠在一起的,不是二选一。
第二道锁:危险操作必须「停一下」
白名单挡一部分,还不够。有些操作技术上「允许」,业务上绝不能静默执行:
- 改
.env、生产配置 - 删文件、动数据库迁移
git push、改 CInpm publish、装来历不明的依赖
这类我统一走 human-in-the-loop:Agent 可以先出方案和 diff,执行前等人点确认。
在 Cursor 里,最直接的做法是用 permissions.json 的 block_instructions 用自然语言描述「哪些必须先问我」。比如:
{
"autoRun": {
"block_instructions": [
"Any edit to .env or files matching **/migrations/** needs my approval.",
"Every git push needs my approval.",
"Every npm publish or pip upload needs my approval."
]
}
}
也可以直接跟 Agent 说:「以后改 .env 前先给我看 diff,等我确认再执行。」它会帮你改配置文件。
注意两点:Auto-review 的分类器会犯错,官方文档写得很清楚,它不是安全边界;以及 Cloud Agents 不走 Run Mode,在云端虚拟机里跑,不会弹窗问你。敏感仓库尽量用本地 Agent,或者团队后台统一收紧策略。
第三道锁:沙箱 + 可观测,防它越界或钻牛角尖
Agent 有时会陷入循环:同一个测试失败改十遍,或者反复读同一个文件烧 Token。不一定是模型笨,也可能是缺边界。
Cursor 这边,第二道防线是 sandbox.json,管沙箱里的网络和额外读写路径。默认工作区内可读写,出工作区、出公网都要你配规则。网络默认拒绝,再按域名白名单放开:
{
"networkPolicy": {
"default": "deny",
"allow": ["registry.npmjs.org", "pypi.org", "github.com"]
},
"additionalReadonlyPaths": [],
"additionalReadwritePaths": []
}
文件放 ~/.cursor/sandbox.json(全局)或项目 .cursor/sandbox.json(仓库级,可提交进 Git)。团队版还能在后台统一下发,个人配置盖不过团队策略。
至于「步数上限」——Cursor 没有给用户暴露一个叫 max_steps 的开关。我自己的替代办法:
- 任务拆小:一次只让 Agent 干一件事,别扔「把整个项目重构完」这种大活;
- 盯对话记录:Agent 面板里每步调了啥工具、执行了啥命令都有,异常循环一眼能看出来;
- 自建 Agent 框架(LangGraph、AutoGen 等)才需要自己在代码里写
max_steps,那是另一套事,别跟 Cursor 内置能力混为一谈。
复杂重构我会手动切成三四轮,每轮验收一次,比设一个魔法数字靠谱。
配好了,怎么验?
别等线上翻车再查。我大概每周花十分钟:
- 故意让 Agent 试一个「该被拦」的操作(比如删
.env、往远程 push),看弹窗和block_instructions是否生效; - 翻一眼本周 Agent 对话,有没有访问奇怪路径、反复执行同一条失败命令;
- 打开 Settings → Agents,确认 Run Mode 没被某次「总是允许」悄悄改成 Run Everything。
这三道锁不炫,不比换一个新模型有话题感。但 Anthropic 那起事故说明:能力上来之后,评估环境和权限护栏,比模型名字重要。
收尾
Agent 正在从「聊天好玩」变成「真能干活」。能干活的东西,就得按生产系统对待:最小权限、关键操作人工确认、有边界、能复盘。
你可以继续追 Kimi K3、GPT-5.6 Sol、多 Agent 编排这些热点;Codex 在这里指的是 OpenAI 的编码 Agent 工具链,不是某个「5.6 版模型」。但在追热点之前,先把 Run Mode、沙箱和确认流程配上。很多时候不是模型不够强,是权限给得太慷慨。
Cursor 配置以 Run Modes、permissions.json、sandbox.json 官方文档为准。有踩坑欢迎评论区交流。
更多推荐

所有评论(0)