
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍三种权限动作基础配置1、全局设置所有权限实例2、按工具名称配置实例细粒度规则对象语法实例通配符规则主目录展开实例外部目录权限external_directory1、允许访问外部目录实例2、允许读取但禁止编辑实例所有可用权限项默认权限说明实例审批提示的三个选项为代理单独配置权限1、在 opencode.json 中配置代理权限实例2、在 Markdown 文件中配置代理权限实例实用配置示例示例一保守模式所有操作都需审批实例示例二开发常用配置读操作放开写操作审批实例示例三允许访问多个项目目录实例OpenCode 的权限系统用于控制哪些操作可以自动运行、哪些需要你手动审批、哪些会被直接阻止。合理配置权限既能让 AI 高效完成任务又能防止误操作破坏代码或泄露敏感文件。从 v1.1.1 开始旧版tools布尔配置已被弃用并已合并到permission中。旧版配置仍然支持以保持向后兼容但建议迁移到新的permission写法。三种权限动作每条权限规则最终会解析为以下三种动作之一动作效果适用场景allow无需审批直接自动运行低风险、高频操作如读取文件、运行测试ask弹出审批提示由你决定是否允许有一定风险的操作如写入文件、执行脚本deny直接阻止不会执行也不会提示明确不允许的危险操作如删除文件、推送代码基础配置权限配置写在仓库根目录或用户配置目录下的opencode.json文件中使用permission字段进行配置。1、全局设置所有权限最简单的写法用一个字符串一次性设置所有操作的权限。适合快速开始或临时调试实例{$schema: https://opencode.ai/config.json,permission: allow // 所有操作都自动运行不弹任何提示适合本地开发、充分信任 AI 时使用}2、按工具名称配置使用对象写法可以对不同工具分别指定权限。*是通配符表示匹配所有操作通常作为兜底默认值实例{$schema: https://opencode.ai/config.json,permission: {*: ask, // 兜底规则所有未单独配置的工具默认都弹出提示bash: allow, // bash执行 Shell 命令直接允许不提示edit: deny // edit修改文件直接阻止}}细粒度规则对象语法对于大多数权限除了设置统一动作还可以用对象语法根据工具的具体输入内容来应用不同规则。例如对bash工具可以区分哪些命令允许、哪些需要审批、哪些直接拒绝实例{$schema: https://opencode.ai/config.json,permission: {bash: {*: ask, // 兜底所有 bash 命令默认需要审批git *: allow, // git 开头的命令如 git status、git log直接允许npm *: allow, // npm 开头的命令如 npm install、npm run build直接允许grep *: allow, // grep 搜索命令直接允许rm *: deny // rm 删除命令直接阻止防止误删文件},edit: {*: deny, // 默认阻止所有文件编辑packages/web/src/content/docs/*.mdx: allow // 只允许编辑文档目录下的 .mdx 文件}}}规则匹配顺序最后匹配的规则优先。建议将通配的*规则放在最前面作为默认值更具体的规则放在后面来覆盖它。这样越具体的规则优先级越高逻辑清晰不易出错。通配符规则权限模式支持简单的通配符匹配规则如下通配符含义示例*匹配零个或多个任意字符不跨目录git *匹配git status、git log --oneline等**匹配跨目录的任意路径~/projects/**匹配 projects 下所有文件和子目录?精确匹配一个任意字符file?.txt匹配file1.txt、fileA.txt其他字符按字面值精确匹配git status只匹配git status不匹配带参数的变体注意对带参数的命令一定要在末尾加*。例如grep *能匹配grep pattern file.txt而单独写grep只匹配没有任何参数的裸命令实际执行时几乎不会命中。主目录展开在模式开头可以使用~或$HOME来引用当前用户的主目录OpenCode 会自动将其展开为完整路径实例// 以下三种写法效果相同都会展开为 /Users/username/projects/*路径因系统而异~/projects/*$HOME/projects/*/Users/username/projects/* // 直接写绝对路径也可以但不推荐不够通用外部目录权限external_directory默认情况下OpenCode 只允许工具访问启动时所在的工作目录及其子目录。如果需要访问项目目录之外的路径例如另一个项目或共享配置目录必须通过external_directory显式授权。主目录展开~/...只是一种路径书写简化方式并不会自动授权访问该路径。工作目录之外的路径仍然必须通过external_directory来允许。1、允许访问外部目录实例{$schema: https://opencode.ai/config.json,permission: {external_directory: {~/projects/personal/**: allow // 允许访问 ~/projects/personal/ 下的所有文件和子目录// ** 匹配任意层级的子路径}}}2、允许读取但禁止编辑被external_directory授权的目录会继承当前工作空间的默认权限。由于read默认为allow授权后该目录下的文件可以被读取。如果需要进一步限制某项操作例如允许读取但禁止编辑可以叠加额外规则实例{$schema: https://opencode.ai/config.json,permission: {external_directory: {~/projects/personal/**: allow // 第一步授权访问该外部目录},edit: {~/projects/personal/**: deny // 第二步在此目录上叠加规则允许读取但禁止编辑}}}所有可用权限项OpenCode 的权限以工具名称为键涵盖文件操作、命令执行、网络访问等所有类型权限项控制的操作模式匹配内容默认值read读取文件内容文件路径如src/index.jsallow.env文件除外edit所有文件修改涵盖 edit、write、patch、multiedit文件路径allowglob文件通配查找如查找所有.ts文件通配模式如**/*.tsallowgrep在文件内容中搜索文本正则表达式模式allowlist列出目录中的文件目录路径allowbash运行 Shell 命令解析后的完整命令如git status --porcelainallowtask启动子代理子代理类型名称allowskill加载技能技能名称allowlsp运行 LSP 语言服务查询当前不支持细粒度配置allowwebfetch获取网络 URL 内容完整 URL如https://example.com/apiallowwebsearch网页搜索搜索查询字符串allowcodesearch代码搜索搜索查询字符串allowexternal_directory访问工作目录之外的路径外部目录路径askdoom_loop同一工具以相同输入重复调用 3 次时触发防止 AI 卡死循环—ask默认权限说明如果你没有配置任何权限OpenCode 会使用以下内置默认值大多数工具权限默认为allow即自动运行不提示doom_loop和external_directory默认为ask需要手动审批read默认允许读取所有文件但对.env相关文件有内置保护实例// OpenCode 内置的 read 默认规则无需手动配置仅供参考{permission: {read: {*: allow, // 默认允许读取所有文件*.env: deny, // 阻止读取 .env 文件防止泄露数据库密码、API 密钥等*.env.*: deny, // 阻止读取 .env.local、.env.production 等变体*.env.example: allow // 允许读取 .env.example示例文件不含真实密钥}}}审批提示的三个选项当某个操作的权限为ask时OpenCode 会弹出审批提示提供以下三种选择选项效果适用场景once仅此一次仅批准本次请求下次相同操作仍会弹出提示临时允许某个操作不想永久放开always始终允许将此操作的匹配模式加入白名单当前会话剩余时间内不再提示确认某类操作安全希望本次会话中自动通过reject拒绝拒绝本次请求操作不会执行发现操作有风险明确不希望执行选择always后OpenCode 会由工具自动提供建议的白名单模式例如批准git status后通常会将git status*加入白名单。白名单仅在当前会话中有效重启 OpenCode 后会重置。为代理单独配置权限如果你的工作流中使用了多个代理agent可以为每个代理单独覆盖权限配置。代理权限会与全局配置合并且代理规则的优先级高于全局规则。1、在 opencode.json 中配置代理权限实例{$schema: https://opencode.ai/config.json,permission: {// 全局权限git 操作允许但禁止 commit 和 pushbash: {*: ask,git *: allow,git commit *: deny,git push *: deny,grep *: allow}},agent: {build: { // 名为 build 的代理permission: {bash: {*: ask,git *: allow,git commit *: ask, // 覆盖全局build 代理允许 commit但需要审批git push *: deny, // 继承全局依然禁止 pushgrep *: allow}}}}}2、在 Markdown 文件中配置代理权限代理也可以通过 Markdown 文件进行配置权限写在文件顶部的 YAML Front Matter 中---之间的部分实例# 文件路径~/.config/opencode/agents/review.md---description: 代码审查代理只分析代码不做任何修改mode: subagentpermission:edit: deny # 禁止所有文件编辑bash: ask # bash 命令需要审批webfetch: deny # 禁止访问外部 URL---Only analyze code and suggest changes.# 以下是代理的系统提示词描述该代理的职责和行为规范实用配置示例示例一保守模式所有操作都需审批适合初次接触 OpenCode 或在重要项目上工作时使用所有操作都需要手动确认实例{$schema: https://opencode.ai/config.json,permission: {*: ask // 所有工具的所有操作都弹出审批提示}}示例二开发常用配置读操作放开写操作审批适合日常开发允许 AI 自由读取和搜索代码但修改文件和执行命令时需要确认实例{$schema: https://opencode.ai/config.json,permission: {*: ask, // 兜底未单独配置的工具默认需要审批read: allow, // 读取文件直接允许glob: allow, // 文件通配查找直接允许grep: allow, // 内容搜索直接允许list: allow, // 列出目录直接允许bash: {*: ask, // bash 命令默认需要审批git status *: allow, // 查看 git 状态允许git log *: allow, // 查看 git 日志允许git diff *: allow, // 查看 git 差异允许npm run *: allow, // 运行 npm 脚本允许npm test *: allow, // 运行测试允许rm *: deny // 删除文件直接阻止}}}示例三允许访问多个项目目录当 AI 需要跨多个项目目录工作时授权外部目录访问权限实例{$schema: https://opencode.ai/config.json,permission: {external_directory: {~/projects/personal/**: allow, // 允许访问个人项目目录~/projects/work/**: allow, // 允许访问工作项目目录~/dotfiles/**: allow // 允许访问配置文件目录},edit: {~/dotfiles/**: deny // 即使允许访问 dotfiles也禁止编辑只读}}}❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧