Skip to content

Plan Mode 下模型意外直接修改文件(应只规划不执行)

问题

在 opencode Plan mode 下工作时,提供了计划反馈后,模型直接开始修改文件,而不是更新计划内容。预期行为是 Plan mode 下只规划、不执行——但某些模型会忽略这个限制。

主要复现场景:

  • 使用 Gemini 3 Pro 系列模型
  • 使用 claude-opus-4-6 时偶发
  • 接受了模型提出的计划中某一步骤后,模型跳过剩余规划直接实施

原因

Plan mode 是通过 system prompt 层的指令实现的,部分模型对"只规划不执行"的指令遵从性较差,在感知到用户的"同意"信号时会直接切换到执行模式。这是模型行为差异,不是配置缺陷,但可以通过权限限制规避。

解决方案

方案一:通过权限配置限制文件编辑为 ask

opencode.json 中将文件写入权限设置为 ask,使模型在修改文件前必须显式获得确认:

jsonc
// opencode.json
{
  "permission": {
    "write": "ask",
    "edit": "ask"
  }
}

即使模型尝试在 Plan mode 下修改文件,也会触发用户确认弹窗,起到保护作用。

方案二:在 RULES 文件中明确禁止

RULES 文件(项目根目录)中加入明确约束:

markdown
# 规划模式规则

**在 Plan mode 下,严禁修改任何文件。**
只允许:
- 描述计划步骤
- 列出将要修改的文件和方式
- 请求确认

不允许:
- 执行任何文件写入
- 运行任何 shell 命令
- 调用任何会产生副作用的工具

规则文件对大多数模型有约束作用,但对 Gemini 系列效果可能有限。

方案三:将 write/edit 权限设为 deny,Plan mode 后手动切换

如果需要严格的 Plan mode 隔离,可以临时将所有写入操作设为 deny,确认计划无误后再手动调整:

jsonc
{
  "permission": {
    "write": "deny",
    "edit": "deny"
  }
}

来源:GitHub #7292