OpenCode: OpenCode权限配置与格式化工具
最后更新:2026-08-31
权限配置是 OpenCode 安全使用的核心,格式化工具则确保代码风格一致。
1. 你将学到
- 权限配置三级体系
- Bash 命令精细控制
- 代理级权限覆盖
- 格式化工具配置
2. 权限三级体系
| 权限值 | 说明 | 适用场景 |
|---|---|---|
allow |
直接允许 | 安全操作,如 git status |
ask |
需要用户确认 | 有风险的操作,如文件编辑 |
deny |
直接拒绝 | 危险操作,如 rm -rf |
3. 全局权限配置
在 opencode.json 中配置:
JSON
{
"permission": {
"edit": "ask",
"write": "ask",
"bash": {
"*": "ask",
"git status *": "allow",
"git diff *": "allow",
"git log *": "allow",
"npm test": "allow",
"grep *": "allow"
},
"webfetch": "ask"
}
}
(1) Bash 命令精细控制
Bash 权限支持 Glob 模式匹配:
JSON
{
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm run *": "allow",
"rm *": "deny",
"sudo *": "deny"
}
}
}
规则: 最后匹配的规则优先。建议将 * 通配放前面,具体规则放后面。
(2) 代理级权限覆盖
JSON
{
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
},
"review": {
"permission": {
"edit": "deny",
"bash": {
"*": "deny",
"git diff": "allow"
}
}
}
}
}
(3) Task 权限
控制代理可以调用哪些子代理:
JSON
{
"agent": {
"orchestrator": {
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
4. 工具权限
| 工具 | 权限项 | 建议设置 |
|---|---|---|
| read | — | 默认允许 |
| write | write | ask(确认后写入) |
| edit | edit | ask(确认后编辑) |
| bash | bash | ask(确认后执行) |
| webfetch | webfetch | ask(确认后访问) |
| task | task | allow |
5. 格式化工具
(1) 配置格式化工具
在 opencode.json 中指定格式化工具:
JSON
{
"formatter": {
"command": "prettier",
"args": ["--write"]
}
}
(2) 支持的格式化工具
| 工具 | 语言 | 配置示例 |
|---|---|---|
| Prettier | JS/TS/CSS/HTML | "command": "prettier", "args": ["--write"] |
| Black | Python | "command": "black" |
| gofmt | Go | "command": "gofmt", "args": ["-w"] |
| rustfmt | Rust | "command": "rustfmt" |
| clang-format | C/C++ | "command": "clang-format", "args": ["-i"] |
(3) 工作流程
AI 修改文件后,OpenCode 自动运行格式化工具,确保代码风格一致:
graph LR
A[AI 修改文件] --> B[运行格式化工具]
B --> C[代码风格统一]
C --> D[输出结果]
6. 安全最佳实践
| 场景 | 建议配置 |
|---|---|
| 日常开发 | edit: ask, bash: ask, write: ask |
| 代码审查 | edit: deny, write: deny, bash: 只允许 git 读操作 |
| CI/CD | edit: allow, bash: allow(受限命令) |
| 新手体验 | 所有权限设为 ask |
❓ 常见问题
Q 权限设为 ask 会不会太麻烦?
A 第一次会感觉麻烦,但这是安全的代价。习惯后你会发现 ask 权限能防止很多意外修改。对于信任的操作,可以配置 allow 减少确认。
Q 格式化工具执行失败怎么办?
A OpenCode 会继续执行任务,格式化失败不会阻断流程。你可以在任务完成后手动运行格式化。
Q Alice 把所有权限设为 allow,Bob 全设为 ask,谁的做法更合理?
A Bob 更合理。allow 虽然效率高,但缺乏安全网;ask 在效率和安全之间取得了平衡。对于生产项目,建议至少 edit 和 write 设为 ask。
📖 小节
- 权限三级:allow、ask、deny
- Bash 权限支持 Glob 模式精细控制
- 代理级权限可覆盖全局设置
- 格式化工具确保 AI 修改后代码风格一致
- 建议至少将 edit 和 write 设为 ask
📝 作业
-
基础题:配置全局权限,将 edit 和 bash 设为 ask。
-
进阶题:为 Bash 权限配置 Glob 规则,允许 git 读取操作,拒绝危险命令。
-
挑战题:配置 Prettier 作为格式化工具,让 OpenCode 修改文件后自动格式化代码。