权限模式
CodeBuddy Code 的 default / acceptEdits / auto / dontAsk / plan / bypassPermissions / delegate 模式、切换方式,以及权限判定的先后顺序。
权限模式决定 CodeBuddy 在编辑文件、运行命令、访问网络或调用高风险工具前,是自动继续、询问还是直接拒绝。注意模式只是权限系统的一层:每次工具调用先后经过 hooks 和交互型工具的特殊处理、deny 规则、可信 allow 规则、命令安全检查(仅交互式)、ask 规则、bypassPermissions 短路、不可信 allow 规则、当前模式的基线策略、非交互兜底与 auto/dontAsk 的最终收口。所以 deny 永远比模式更强;auto 只接管「最后仍然会 ask 的动作」;dontAsk 不是更宽松,而是「不弹框,直接拒绝未预批准动作」;bypassPermissions 也不是绝对放行,前面的 deny/ask 规则与危险命令检查仍可能拦住它。
| 模式 | 不询问就能做的事 | 适用场景 |
|---|---|---|
default | 信任目录内的 Read | 默认;敏感工作 / 上手期 |
acceptEdits | 信任目录内的 Read 与 Edit 系列 | 边写边用 git diff 复核 |
auto | 原本会 ask 的动作交给分类器判定 allow/deny | 想减少打断但保留安全边界 |
dontAsk | 仅已预批准的动作;其余直接拒绝 | 非交互自动化 / 固定白名单 |
plan | 委托给进入 plan 前的模式;额外允许写入会话计划文件 | 动手前先摸清代码 |
bypassPermissions | 跳过绝大多数审批 | 仅用于沙箱容器、VM、离线 dev container |
delegate | 仅协调类工具(Agent、TaskCreate、SendMessage 等) | 主代理只拆分派发,执行交给子代理 |
切换:会话中按 Shift+Tab 循环:default → bypassPermissions → acceptEdits → auto(可用时)→ plan → delegate;dontAsk 不在循环里,只能通过命令行、settings 或 SDK/IDE 控制信号进入。启动时 codebuddy --permission-mode <mode>;非交互也可用,如 codebuddy -p --permission-mode dontAsk "…";-y / --dangerously-skip-permissions 等价于 --permission-mode bypassPermissions。持久化默认值写在 ~/.codebuddy/settings.json 或项目 settings 的 permissions.defaultMode。IDE 集成还有 fullAccess、work 等程序化模式,不在循环里。完整的规则求值顺序见官方「权限规则」。