OpenCode: OpenCode权限配置与格式化工具

最后更新:2026-08-31

权限配置是 OpenCode 安全使用的核心,格式化工具则确保代码风格一致。

1. 你将学到


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 自动运行格式化工具,确保代码风格一致:

100%
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。

📖 小节


📝 作业

  1. 基础题:配置全局权限,将 edit 和 bash 设为 ask。

  2. 进阶题:为 Bash 权限配置 Glob 规则,允许 git 读取操作,拒绝危险命令。

  3. 挑战题:配置 Prettier 作为格式化工具,让 OpenCode 修改文件后自动格式化代码。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏