Cursor YOLO 模式不弹确认就跑命令

YOLO 已经关了,Agent 还在没弹确认就执行 shell 命令。多半是 allowlist 太宽、设置缓存没更新、或者 workspace 配置覆盖。逐项排查。

你把 YOLO 模式关了(或者压根没开过),打开 Agent 模式让 Cursor 做点无害的小事,下一秒就看到集成终端里 rm -rf node_modules 在跑,没有任何确认弹窗。又或者一口气 pip install 一长串包。又或者直接 push 到分支。设置里明明写着「Require confirmation」,可命令还是一条条往下跑。根因几乎都是这三件之一:allowlist 比你以为的宽很多、设置文件还残留了旧 key、或者 workspace 级别的设置盖过了 user 级别。判断准了,改一分钟就好。

常见原因

按命中率从高到低。

1. 命令 allowlist 太宽

Cursor 允许你把某些命令或前缀加到 allowlist,跳过确认。如果 npmgit、甚至 * 在列表里,匹配到的命令就直接跑。很多人一次加了 npm install 后就忘了——它会把所有 npm 开头的全部带过。

怎么判断:设置 → Cursor Settings → Features → Agent → 「Allowed commands」。看到任何宽前缀或 *,就是它。

2. Workspace 级别设置覆盖 user 级别

仓库里的 .vscode/settings.json.cursor/settings.json 可能写了 cursor.agent.yoloMode: true,把你的全局偏好盖掉。你改错了层。

怎么判断:在 workspace 里搜 yoloModeagent.confirm。workspace JSON 一旦设了,user 那边就拗不过它。

3. 升级后旧设置没清

Cursor 版本一升,设置 schema 偶尔会变。UI 里新开关显示是关的,但 settings.json 里旧 key(名字不一样)还在授予 auto-run 权限。

怎么判断:打开 ~/.cursor/settings.json(Windows 上是 %APPDATA%\Cursor\User\settings.json)。搜任何包含 yoloautoRunconfirmCommands 的 key。

4. Rules 文件里授权自动执行

.cursorrules.cursor/rules/*.mdc 里写了「always run shell commands without asking」这种话,Agent 把它当成指令解析,那一轮就绕过 UI 的拦截。

怎么判断:在 rules 文件里 grep 「without asking」「no confirmation」「auto run」。命中任何一条都可能是它。

5. 命令排在多步计划里

Agent 模式经常先制定一个多步计划,整批一起跑。第一步可能弹确认,同一个计划里后面的步骤继承同意、不再单独弹。

怎么判断:看聊天记录。如果一开始有「Plan: 1, 2, 3」这种 block,你点了一次 Approve,后面的每一步都不再问。

6. 某个版本本身有 bug

Cursor 0.42 和 0.45 早期几个 build 确认有 bug:对包含 cd ...&& 链式的命令,确认开关失效。

怎么判断:Help → About。命中那几个版本,升级就完了。

开始前

  • 想清楚要的是「零 auto-execute」还是「小白名单」,修法不一样。
  • 改设置前先把正在跑的 Agent 任务停掉——设置下一轮才生效,跑到一半改没用。
  • 改之前给 settings.json 备一份。

需要收集的信息

  • Cursor 版本(Help → About)。
  • OS 和默认 shell(Cursor 集成终端用的是你的默认 shell)。
  • 那条没弹就跑的命令原文。
  • ~/.cursor/settings.json(或 %APPDATA%\Cursor\User\settings.json)内容。
  • 项目里有没有 .cursorrules.cursor/rules/*.mdc
  • workspace 里有没有 .vscode/settings.json
  • ~/.cursor/logs/ 最近那条日志。

一步一步修复

Step 1:审一遍 allowlist

设置 → Cursor Settings → Features → Agent → 「Allowed commands」。一条不留全删掉。保存。后面真要加,加完整字符串(比如 npm test),不要加前缀。

Step 2:在 user 设置里硬写关闭

Command Palette → 「Preferences: Open User Settings (JSON)」加:

{
  "cursor.agent.yoloMode": false,
  "cursor.agent.allowedCommands": [],
  "cursor.agent.requireConfirmation": true
}

保存、reload 窗口(Cmd+Shift+P → 「Developer: Reload Window」)。

Step 3:查 workspace 有没有覆盖

项目根目录看一下 .vscode/settings.json.cursor/settings.json。把里面 cursor.agent.* 相关 key 全部删掉,或者把它挪到 user 级别。workspace JSON 永远赢 user JSON。

Step 4:清 rules 文件

grep 一下仓库里有没有 rule 在授权 auto-execute:

grep -ri "without asking\|no confirmation\|auto.run\|skip prompt" .cursor .cursorrules 2>/dev/null

命中的都删掉或重写。rules 是被当指令解析的,激进的 rule 会把 UI 拦截打掉。

Step 5:升级 Cursor

Help → Check for Updates。0.42 和 0.45 早期那个绕过 bug 在 0.46+ 修了。一时升不了的话,先别用 Agent 模式,用 Composer(每一步 shell 都会弹)顶着。

Step 6:拿一条已知危险命令验证

随便找个 scratch 仓库问 Agent:「Run echo TEST && false」。能弹确认就是回来了。还是静默跑,回到 Step 1 再审 allowlist。

Step 7:实在不放心,给 shell 套个 sandbox

确认门还是不可信的话,把 Cursor 集成终端指向一个 sandbox 包装脚本——所有不在安全列表里的命令都强制 stdin 输 yes/no。设置 → Terminal → Integrated → Default Profile。重了点但绝对兜底。

怎么验证修好了

  • 重新让 Agent 跑一个需要 shell 的 prompt,确认弹窗必须出现。
  • 让 Agent 跑一个多步计划,每一步 shell 都要弹,不是只弹第一步。
  • reload 窗口再试一遍——设置要扛得住 reload。
  • 打开 ~/.cursor/settings.json 确认你写进去的 key 还在。

长期预防

  • cursor.agent.allowedCommands 默认就保持空,没强理由不要加。
  • .cursorrules 当代码看待——改了要走 PR review,别让 auto-run 那种 rule 偷偷溜进来。
  • 团队里把 Cursor 钉在一个公认稳定的 minor 版本上,一起升级。
  • 新人 onboarding 时把 user 和 workspace 设置都查一遍,share 仓库的人会继承 workspace 设置。
  • 涉及风险的分支(rebase、deploy)用 Composer,Agent 留给从零写代码的场景。

容易踩的坑

  • 为了 npm test 不弹,把 npm 加进 allowlist,忘了 npm uninstall 也算 npm 开头。
  • user 设置改了半天,workspace 设置在默默盖掉。
  • 只看 UI 开关,不看下层 JSON。
  • 以为 Cursor 升级会重置设置——并不会。
  • 老版本上以为确认弹窗能拦住 && 链式命令——不能。

常见问答

  • YOLO 模式到底是什么? Cursor Agent 的一个设置,允许模型不逐条问就执行 shell 命令。脚本化任务方便,默认上有风险。
  • 能只白名单安全命令吗? 能。用完整字符串如 npm testpnpm build,别用前缀或通配符。
  • 确认弹窗也拦文件编辑吗? 不拦。文件编辑走 diff review 流程。确认弹窗专门给 shell 命令用。
  • 为什么 Agent 没问就 push 到 main 了? 要么 git 在 allowlist 里,要么你批准了一个包含 push 的多步计划。
  • 有没有紧急停止键? 点正在跑的任务上的 stop,或 Cmd+Shift+P → 「Cursor: Stop Agent」。失控进程直接 kill 集成终端。

相关

标签: #Cursor #排查 #agent #排查