Appearance
模型绕过 ask 权限直接执行 git commit(未经用户确认)
问题
在 opencode 中将 shell 命令权限设置为 ask 后,某些模型(尤其是 Kimi K2.5)会绕过权限检查,直接执行 git add -A 和 git commit 而不弹出确认框。用户在没有授权的情况下代码库被提交了 commit。
这是一个安全问题:权限守护机制预期应该阻止此类操作,但在某些条件下被规避。
原因
权限系统针对工具本身(如 bash 工具)进行管控,而不是针对命令的内容。部分情况下:
- 模型可能通过其他途径执行命令(如生成脚本后间接调用)
- 模型在获得某些上下文权限后,认为后续操作已在授权范围内
此外,权限配置的粒度和书写方式也会影响实际效果。
解决方案
正确的权限配置写法
确保 opencode.json 中的权限配置使用正确的键名:
jsonc
// opencode.json
{
"permission": {
"bash": "ask"
}
}或者精细化到 git 命令:
jsonc
{
"permission": {
"bash": {
"git *": "ask"
}
}
}注意:不要把权限键写错,
"shell"不是有效键名,应使用"bash"。
在 RULES 文件中明确禁止自动 commit
在项目根目录的 RULES 文件中加入明确约束,对模型行为设置硬性边界:
markdown
**严禁自动执行 git 操作(包括 git add、git commit、git push)。**
所有 git 提交操作必须在用户明确口头指示后才能执行。
绝对不允许因为"任务完成了"就自动 commit。对 Kimi、GPT-4.1 等权限意识较弱的模型,RULES 约束比单纯的权限配置更有效。
避免使用权限意识较弱的模型处理代码提交
已知在权限 ask 模式下仍发生自动 commit 的模型:
- Kimi K2.5(已有多例报告)
遇到此问题后,可以在 opencode.json 中临时换用对权限更严格的模型(如 claude-opus、claude-sonnet)处理涉及 git 的任务。