跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt

Use this file to discover all available pages before exploring further.

权限系统用于控制 Agent 在无需你批准的情况下可以执行哪些操作。你可以预先批准安全操作,阻止危险操作,并始终对敏感操作发出提示。

默认权限行为

Devin CLI 使用分层权限系统,在功能性与安全性之间取得平衡。默认行为取决于当前的模式
工具类型示例NormalAccept EditsBypassAutonomous (sandbox)
只读文件读取、grep、glob
FetchHTTP 请求
Bash 命令Shell 执行
通过 edit/write 进行文件编辑编辑/写入文件否 (在 工作区 内)
Normal 模式 (默认模式) 下,只读操作会自动获批,而写入和 shell 命令则需要你明确批准。每次批准某个操作时,你都可以选择仅允许一次、在当前 会话 期间允许,或永久允许该项目执行。 Accept Edits 模式下,工作区 内的文件编辑会自动获批,但 shell 命令以及对 工作区 外的写入仍然会触发提示。 Bypass 模式下,所有工具调用都会自动获批,不再提示。 Autonomous 模式下,shell 命令和网络抓取会自动获批,因为操作系统级沙箱会限制它们可访问的范围。通过 edit/write 工具进行的直接文件编辑仍会触发提示,因为这些工具在沙箱之外运行。只有在操作系统级沙箱处于启用状态时,才可使用 Autonomous。
Bypass 和 Autonomous 模式不会覆盖组织级权限。通过 团队设置 配置的、由 Admin 强制执行的拒绝和询问规则,无论用户使用哪种权限模式,都会继续生效。详情请参阅优先级

Autonomous 模式

Autonomous 是与 --sandbox 标志配套的权限模式。从概念上说,它大致相当于“接受当前工作区中的编辑”,再加上可运行任意 shell 命令,并且这两种行为都受到操作系统级沙箱的约束。当 sandbox 处于激活状态时:
  • 这是唯一可用的权限模式。 在 sandbox 会话中,Normal、Accept Edits 和 Bypass 都会被隐藏。Plan mode 仍然可用。
  • Shell 命令和抓取操作会自动获批,而不是弹出提示,因为沙箱会限制它们可读取、写入的内容,以及可通过网络访问的范围。
  • 通过 editwrite 工具直接编辑文件时仍会弹出提示。 这些工具运行在 CLI 进程内,而不是沙箱内,因此无法受到沙箱约束。在提示中授予 Write(...) 作用域后,沙箱会动态扩展,使后续 shell 命令也能在该位置写入。
  • 在会话中途授予的作用域会动态扩展沙箱,以便后续命令使用。
devin --sandbox --permission-mode autonomous
如果你希望在不进行操作系统级隔离的情况下不受限制地执行,请使用 Bypass;如果你希望在操作系统强制限制文件系统和网络访问的前提下进行无人值守执行,请使用 --sandbox (会选择 Autonomous) 。有关可写/可读根目录和域过滤的详细信息,请参阅沙箱配置参考;有关企业级控制,请参阅团队设置 → 沙箱强制执行

权限的工作方式

当 Agent 调用工具时,权限系统会按优先级顺序检查你的规则:
  1. 拒绝规则 — 优先检查。如果匹配,操作会立即被阻止。
  2. 询问规则 — 其次检查。如果匹配,系统总会提示你确认 (会覆盖任何允许规则) 。
  3. 允许规则 — 最后检查。如果匹配,操作会直接继续,不会提示。
  4. 默认 — 如果没有任何规则匹配,系统会提示你批准。
由于系统会先检查拒绝规则,再检查询问规则,最后检查允许规则,因此拒绝规则始终优先。如果同一作用域同时匹配拒绝规则和询问规则,则以拒绝规则为准。

配置

在配置文件的 permissions 部分中添加权限:
在 Windows 上,用户配置文件路径为 %APPDATA%\devin\config.json (通常是 C:\Users\<you>\AppData\Roaming\devin\config.json) ,而不是 ~/.config/devin/config.json。详情请参阅配置文件
// .devin/config.json
{
  "permissions": {
    "allow": [
      "Read(src/**)",
      "Exec(npm run)"
    ],
    "deny": [
      "Exec(rm)"
    ]
  }
}

权限语法

权限匹配器分为两种类型:基于作用域的 (控制可访问的路径/命令/URL) 和 基于工具的 (控制可使用哪些工具) 。

基于作用域的权限

Read(glob)

控制文件读取权限。glob 模式用于匹配文件路径。
"allow": [
  "Read(src/**)",           // src/ 下的所有文件
  "Read(~/.config/**)",     // 主目录中的配置文件
  "Read(/tmp/**)"           // 临时目录
]
目录路径会自动匹配其中的所有文件。
控制文件写入/编辑权限。
"allow": [
  "Write(src/**)",          // 可写入 src/ 下的任意位置
  "Write(tests/**)"         // 可写入测试文件
],
"deny": [
  "Write(*.lock)",          // 不能修改 lock 文件
  "Write(.env*)"            // 不能修改 env 文件
]
控制 shell 命令执行权限。匹配以给定前缀开头的命令。
"allow": [
  "Exec(git)",              // git、git status、git commit...
  "Exec(npm run)",          // npm run test、npm run build...
  "Exec(python)"            // python、python script.py...
],
"deny": [
  "Exec(rm)",               // 阻止 rm、rm -rf 等命令
  "Exec(sudo)"              // 阻止 sudo 命令
]
Exec(git) 会匹配 “git”、“git status”、“git commit -m ‘msg’“,但不会匹配 “gitk” 或 “github-cli”。该前缀必须作为完整单词匹配。
使用 URL 模式控制 HTTP fetch 权限。
"allow": [
  "Fetch(https://api.github.com/*)",    // GitHub API
  "Fetch(https://*.example.com/*)",     // 所有 example.com 子域名
  "Fetch(domain:npmjs.org)"             // npmjs.org 上的任意 URL
]
URL 模式遵循 WHATWG URL Pattern 标准。domain: 简写会匹配该精确域名下的任意路径。

基于工具的权限

按工具名称匹配,以控制整个工具:
{
  "permissions": {
    "deny": [
      "edit",       // 阻止所有文件编辑
      "exec"        // 阻止所有命令执行
    ],
    "allow": [
      "read",       // 允许所有文件读取
      "grep",       // 允许所有搜索
      "glob"        // 允许所有文件查找
    ]
  }
}
可用工具名称: read, edit, grep, glob, exec

MCP 工具权限

管理对 MCP 服务器工具的访问:
{
  "permissions": {
    "allow": [
      "mcp__github__list_issues",     // 特定服务器上的特定工具
      "mcp__github__*",               // GitHub 服务器上的所有工具
      "mcp__*"                        // 所有 MCP 工具
    ],
    "deny": [
      "mcp__github__delete_repo"      // 禁止特定危险工具
    ]
  }
}
模式匹配
mcp__server__tool某个特定工具
mcp__server__*某个 server 上的所有工具
mcp__*所有 server 上的全部 MCP 工具

路径匹配模式

Read()Write() 支持以下 Glob 模式:
模式含义
*单个路径段中的任意字符
**跨多个路径段的任意字符 (递归)
~主目录展开
示例:
"allow": [
  "Read(**)",                    // 所有位置的所有文件
  "Read(src/**/*.ts)",           // src/ 下的所有 TypeScript 文件
  "Write(~/projects/myapp/**)"   // 写入指定项目
]
当你想匹配系统中的所有文件时,请使用绝对路径前缀 (例如 Read(/**)) 。不带前导 /Read(**) 会相对于你当前的工作目录解析,因此它只会匹配该目录下的文件,而不会匹配通过其他位置的绝对路径访问的文件。

持久化选项

当 Agent 在会话期间请求权限时,你可以选择如何保存你的决定:
选项保存位置与团队共享?
允许一次不保存
在当前会话中允许仅保存在内存中
对项目允许.devin/config.json
对项目允许 (本地).devin/config.local.json
全局允许~/.config/devin/config.json (Windows 上为 %APPDATA%\devin\config.json)

MCP 服务器级授权

当系统就某个特定 MCP 工具请求授权时 (例如 Figma 服务器上的 list_issues) ,权限提示还会提供范围更广的服务器级选项:
选项作用
允许此工具 (本次会话)在当前会话中授予对此特定工具的访问权限
始终允许此工具将对此特定工具的授权持久保存到配置中
允许此服务器上的所有工具 (本次会话)在本次会话中授予对此服务器上所有工具的访问权限
始终允许此服务器上的工具将对此服务器上所有工具的访问权限持久保存到配置中
这样,你就可以快速向受信任的 MCP 服务器授予整体访问权限,而无需逐个批准每个工具。

优先级

当多个权限来源定义了规则时,会按以下优先级进行合并 (从高到低) :
  1. 组织/团队设置 (若为 Enterprise)
  2. 会话级授权 (交互式批准)
  3. 项目本地配置 (.devin/config.local.json)
  4. 项目配置 (.devin/config.json)
  5. 用户配置 (~/.config/devin/config.json;Windows 上为 %APPDATA%\devin\config.json)
组织级拒绝规则不能被项目配置或用户配置覆盖。这可确保企业策略得到强制执行。

示例

最小开发设置

允许常见的只读操作,其他一律提示:
{
  "permissions": {
    "allow": [
      "Read(**)",
      "Exec(git status)",
      "Exec(git diff)",
      "Exec(git log)"
    ]
  }
}

项目完全信任

自动批准该项目中的大多数操作:
{
  "permissions": {
    "allow": [
      "Read(**)",
      "Write(src/**)",
      "Write(tests/**)",
      "Exec(npm)",
      "Exec(git)",
      "Exec(node)"
    ],
    "deny": [
      "Exec(rm -rf)",
      "Exec(sudo)",
      "Write(.env*)"
    ]
  }
}

严格管控的企业版

仅限特定的安全操作,所有写入前一律提示:
{
  "permissions": {
    "allow": [
      "Read(src/**)",
      "Exec(git status)",
      "Exec(git diff)",
      "Exec(npm run lint)"
    ],
    "deny": [
      "Exec(rm)",
      "Exec(sudo)",
      "Write(.env*)"
    ],
    "ask": [
      "Write(**)",
      "exec"
    ]
  }
}
在此示例中,对 .env* 的写入会被直接拒绝,所有其他写入都会提示用户,且只有少数只读命令会被自动批准。由于 deny 会先于 ask 进行检查,因此对 .env* 的拒绝优先于 Write(**) 的 ask 规则。