Appearance
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