管理权限
基于官方 OpenCode Permissions 教程,面向新手讲清 allow、ask、deny、外部目录和 Agent 级权限边界。
权限配置是 OpenCode 新手最应该认真理解的一页。它决定模型能不能读文件、改文件、跑命令、访问外部目录或调用子代理。
官方教程列出了完整字段和对象语法。这里重点讲:新手应该从什么安全基线开始,遇到审批弹窗怎么判断,以及为什么不要直接全部放开。
先理解:权限解决什么问题
AI 编程工具的能力越强,越需要边界。OpenCode 权限系统把动作分成三类:allow 直接允许,ask 执行前询问,deny 直接拒绝。
新手的目标不是把所有弹窗关掉,而是让高风险动作必须经过确认,让低风险动作不要打断工作流。
怎么判断新手基线
读文件、搜索、查看项目结构,可以先允许。它们通常是理解项目所必需的低风险动作。
改文件、跑命令、访问网页,先设置为 ask。等你知道 OpenCode 通常会运行哪些命令、会改哪些文件,再逐步放开高频安全动作。
删除文件、访问敏感外部目录、运行危险 shell,一开始应该拒绝或至少 ask。
真实项目里不要依赖默认值。OpenCode 默认相对宽松,.env 等敏感文件会有保护,但你仍然应该显式写出项目权限边界。
不要一开始全部 allow
官方支持把权限整体设为 allow,但这不是新手默认选择。全部允许意味着模型可以在没有确认的情况下执行大部分动作。
个人玩具仓库可以临时用;真实项目、公开仓库、生产代码、包含凭据的目录,不建议这样开。
更稳的做法是:先 ask,观察一段时间,再把你完全看懂且高频安全的动作改成 allow。
细粒度规则怎么理解
bash 可以做细粒度规则。常见做法是先让所有命令 ask,再明确允许 git status、git diff 这类只读命令,明确拒绝删除类命令。
不要只写一个宽泛的 git。带参数的命令通常需要更具体的匹配。你要允许的是“这个具体动作”,不是“这个工具的一切能力”。
外部目录要单独批准
OpenCode 默认工作在启动目录内。访问工作目录外的路径时,会触发 external_directory。
能访问不等于能编辑。你可以允许读取某个外部目录,同时拒绝编辑这个目录。这个区分很重要,尤其是当你把个人资料、其他项目或凭据目录放在工作区外时。
新手不要为了省事允许整个 home 目录。允许范围越大,模型误读或误改的成本越高。
Ask 弹窗怎么判断
看到审批时,默认选一次性批准。只有你完全理解这个动作、安全性和后果时,才选择后续同类动作都批准。
如果你看不懂命令,不要批准。让模型解释它要做什么、为什么需要、会影响哪些文件,再决定。
如果请求访问外部目录,先问清它为什么不能在当前工作区完成。
和 Agent 配合
权限可以按 Agent 覆盖。审查 Agent 应该只读;执行 Agent 才允许改文件;联网研究 Agent 可以访问 web,但不一定能 edit。
这比在提示词里写“不要修改文件”更可靠。提示词会被上下文影响,权限配置不会因为模型理解偏差而失效。
新手常见坑
- 为了省弹窗直接全开 allow。
- 只限制 bash,忘记 edit 也能改文件。
- 允许外部目录后忘记限制编辑权限。
- 把宽泛命令当安全命令,例如允许所有
git *后又忘了 git 也能改状态。 - 只靠 Agent 提示词约束行为,没有配权限。
- 看不懂审批内容却点 always。
怎么验收
让 OpenCode 读一个普通文件,应该不打断。
让它改一个文件,应该出现审批或按规则拒绝。
让它运行只读命令,应该符合你的 bash 规则。
让它访问工作区外路径,应该触发 external directory 规则。
让审查 Agent 尝试改文件,应该被拒绝。