权限
权限决定了 AI 在动手前要不要先问你。合理的权限配置是”敢放手让 AI 干活”的前提。
三种动作
| 动作 | 行为 |
|---|---|
allow | 直接执行,不询问 |
ask | 执行前弹出确认,可选择”仅此一次”或”始终允许” |
deny | 拒绝执行,且不弹窗 |
被 deny 的工具不会出现在给模型的工具清单里,因此模型根本不会尝试调用它。
配置语法
简写形式
直接给一个动作,等价于对该权限的所有目标生效:
{
"permission": {
"read": "allow",
"edit": "ask",
"webfetch": "deny"
}
}
按目标细分
用对象把 glob 模式映射到动作:
{
"permission": {
"edit": "ask",
"bash": {
"*": "ask",
"git *": "allow",
"npm test": "allow",
"rm *": "deny"
}
}
}
模式书写要点:
*匹配任意字符,作为兜底规则- 具体规则优先于通配规则 —— DuoDuoCode 会把带
*的权限名排在前面,匹配时取最后一条命中的规则,所以bash: { "*": "ask", "git *": "allow" }中git命令会被放行 - 路径支持
~/与$HOME展开,例如"~/secrets/*": "deny" - 多个会话级”始终允许”的选择会累积到本次会话的放行清单中,重启后失效
可用权限项
| 权限项 | 控制范围 |
|---|---|
read | 读取文件 |
edit | 修改文件。同时覆盖写入与打补丁两种改法 |
bash | 执行 shell 命令 |
grep | 文本搜索 |
glob | 文件名匹配 |
list | 列目录 |
webfetch | 抓取网页 |
todowrite | 维护待办清单 |
task | 派生子任务 |
skill | 加载技能 |
symbol_search | 单文件符号查询 |
graph_query | 知识图谱查询 |
lsp | LSP 诊断、跳转、补全 |
code_comment | 写入代码注释 |
search_modifications | 查询文件改动(快照检索) |
plan_enter / plan_exit | 进入 / 退出计划模式 |
plan_confirm | 确认计划 |
question | 向用户提问 |
doom_loop | 检测到循环空转时的保护性提示 |
external_directory | 访问项目目录之外的路径 |
edit一个权限同时管理edit、write、apply_patch三种改法,不需要分别配置。
内置默认值
build Agent 开箱即用的策略是”读取自由、写入确认”:
{
"*": "allow",
"doom_loop": "ask",
"edit": { "*": "ask" },
"read": {
"*": "allow",
"*.env": "ask",
"*.env.*": "ask",
"*.env.example": "allow"
}
}
注意 .env 系列文件默认需要确认——读取密钥文件会弹窗,而 .env.example 不视为敏感文件。
只读类 Agent(如 explore)会把 "*" 设为 deny,再逐个放行只读工具。这个约束是结构性的:即使用户配置写了 {"permission": {"*": "allow"}},只读 Agent 依然不能写文件。
会话内的临时放行
弹窗确认时选择”始终允许”,该规则会写入本次会话的放行清单:
- 只影响当前会话,重启后清空
- 若放行的是项目外的目录,DuoDuoCode 会同步把该路径加入运行时的路径白名单,否则底层安全策略仍会拦截
环境变量
DUODUO_PERMISSION='{"edit":"allow"}' duoduocode
可用于 CI 等无人值守场景临时放宽权限。
推荐配置
保守(默认上手)
{
"permission": {
"edit": "ask",
"bash": "ask"
}
}
信任常用命令,其余仍确认
{
"permission": {
"read": "allow",
"edit": "ask",
"bash": {
"*": "ask",
"git *": "allow",
"npm run *": "allow",
"pnpm *": "allow",
"cargo test*": "allow"
}
}
}
无人值守 / CI
{
"permission": {
"*": "allow",
"bash": { "*": "allow", "rm -rf *": "deny", "sudo *": "deny" }
}
}
把危险命令显式 deny 掉,比依赖模型判断可靠得多。