AI 编程工具接进你的 Git 之后,权限到底开到多大

本文要点

  • 「读权限」和「写权限」是两件事,而多数工具的默认位置只到读。Cursor 官方文档写明「Reading files and searching code don’t require approval」,但「By default, terminal commands need your approval」;Claude Code 的 default 模式在官方表里被描述为「Reads only」
  • Cursor 官方承认 .cursorignore 挡不住终端和 MCP。原文是「The terminal and MCP server tools used by Agent cannot block access to code governed by .cursorignore」——你排除掉的文件,Agent 换个入口照样能读到
  • Claude Code 沙箱的默认读范围是「整台电脑」。官方原文承认这个默认「still allows reading credential files such as ~/.aws/credentials and ~/.ssh/」
  • Devin 的仓库级隔离是 Enterprise 专属。官方定价页把自定义 Git 提供商、Teamspace 隔离、部署在你自己的 VPC、SAML/OIDC SSO 都列在 Enterprise 之后
  • 两家官方都把自己的默认防护定义成「不是硬边界」。Cursor 说 Run Modes 是「best-effort guardrails rather than a hard security boundary」,Claude Code 说沙箱「reduces risk but is not a complete isolation boundary」

把 AI 编程工具接进代码库,通常被当成一个连接问题处理:支不支持 GitHub,要装什么插件,OAuth 点几下。但真正决定风险的不是「连没连上」,而是「连上之后它拿到了多大的权限」。

权限不是一个开关。把 Cursor、Claude Code、Devin 三家的官方文档摊开,会看到同一条从「只读补全」到「可读可写可执行可外联」的连续带,而各家默认停在的位置并不一样。更麻烦的是,「默认」这个词在官方文档里的含义差异很大:有的默认指的是「不问你就做」,有的默认指的是「问了你再说」,还有的默认指的是「沙箱边界之外它照样够得着」。

这篇把三家的安全文档、权限模式文档和忽略文件文档拼在一起,回答两个问题:接进代码库时实际授出去的是多大权限,以及有哪些「你以为限制了、其实没限制」的地方。数据于 2026 年 9 月 24 日重新核对各厂商官方文档。

本文方法:官方公开数据交叉核对,未做本地实测。所有数字均标注来源,核对日期见文末。

Claude Code 沙箱默认预允许域名
0 个
官方原文:pre-allows no domains by default
Claude Code 权限模式
6 种
从「只读」到「全部放行」
Devin 的 Git 相关隔离能力
4 项 · Enterprise 专属
自定义 Git 提供商 / Teamspace 隔离 / VPC 部署 / SSO

一、权限不是开关,是一条从「只读」到「可外联」的带子

先把「接进代码库」这件事拆开。三个厂商的官方文档用的词不一样,但描述的行为可以归到同一条带子上,一共四层:

  • 第一层,只读补全。读你正在编辑的文件和邻域上下文,产出建议,不落盘。
  • 第二层,读全仓。索引整个仓库并做检索问答,仍然不写任何东西。
  • 第三层,写工作区。直接改磁盘上的文件,改动立即生效。
  • 第四层,执行与外联。跑终端命令,发起网络请求,把改动推到远端。

前三层是「读多少」的问题,第四层是「能动多少」的问题。绝大多数安全讨论都停在第一层和第二层——「它会不会把我的代码拿去训练」——而真正的风险增量发生在第三层到第四层之间:从「它能看」变成「它能改」,再变成「它能以你的名义对外动作」。

把三家的官方默认值填进这四层,差别立刻显出来:

权限层级 Cursor 官方默认 Claude Code 官方默认
读文件与搜索代码 免批准 免批准(default 模式唯一允许的事)
改工作区文件 免批准(配置文件除外) 需批准;acceptEdits 模式下免批准
执行终端命令 需批准 需批准;acceptEdits 只放行 7 个文件系统命令
网络外联 只允许 GitHub、直链抓取、搜索提供商 沙箱默认不预允许任何域名
MCP / 第三方工具调用 连接需批准,之后每次调用仍需单独批准 官方未在该页披露

这张表里最值得单独说的是第二行。Cursor 的默认设置里,Agent 改你的工作区文件是不需要批准的,官方原文是「Agents can modify workspace files without approval, except for configuration files. Changes save immediately to disk.」官方在同一页给出的建议很直接:始终使用版本控制,以便回退。它还额外提醒了一句容易被忽略的风险:「If you have auto-reload enabled, agent changes might execute before you can review them.」——开了自动重载,改动可能在你看到之前就已经跑起来了。

对照 Claude Code,同一件事的默认值完全不同:在 default 模式(CLI 界面里显示为 Manual)下,官方描述是「Claude Code stops and asks you before most actions that edit files, run shell commands, or reach the network」。也就是说,「改文件」这一层在 Cursor 里默认是开放的,在 Claude Code 里默认是关着的。这是两家在权限哲学上最实质的分歧,而它不会出现在任何一句宣传文案里。

二、三家的默认位置分别停在哪一层

把上表转成一张分层图,各家的默认位置就一目了然:

AI 编程工具的权限分层,以及各厂商默认位置停在哪一层。越往下,授权越大。
AI 编程工具的权限分层与各家默认位置 权限从浅到深分五层:第 1 层只读补全、第 2 层读全仓并检索、第 3 层改工作区文件、第 4 层执行终端命令、第 5 层网络外联与 Git 推送。Claude Code 的 default 模式默认停在第 2 层,Cursor 默认免批准到第 3 层,执行终端命令需批准即第 4 层;Claude Code 的 bypassPermissions 模式、Devin 与 GitHub Copilot 的云端 Agent 落在第 5 层。 第 1 层 · 只读补全 所有工具的起点;没有工具的默认停在这里 第 2 层 · 读全仓并检索 Claude Code default 模式:Reads only 第 3 层 · 改工作区文件 Cursor 默认免批准 · Claude Code acceptEdits 第 4 层 · 执行终端命令 Cursor 默认需批准 · Claude Code 沙箱边界 第 5 层 · 网络外联与 Git 推送 Devin 与 Copilot Agent 建 PR · bypassPermissions

Claude Code 这一侧的分层最细,因为它把「默认停在哪一层」做成了可切换的档位。官方文档给了一张完整的模式表,本文把它原样搬过来:

模式 不经询问就会执行什么 官方建议用途
default(界面显示 Manual) 只读 逐个审查每个动作、敏感工作
acceptEdits 只读、文件编辑,以及常见文件系统命令 迭代你自己正在审查的代码
plan 只读,加上分类器批准的命令 改动前先探索代码库
auto 全部,但带后台安全检查 长任务、减少确认疲劳
dontAsk 只读和预批准的工具;任何需要询问的动作一律拒绝 锁死的 CI 和脚本
bypassPermissions 全部 仅限隔离的容器和虚拟机

这张表里有两处细节,读快了会漏掉。第一,acceptEdits 不只是放行文件编辑。官方原文列出它同时自动批准一批文件系统命令:「mkdir, touch, rm, rmdir, mv, cp, and sed」——注意里面有 rm 和 sed。但官方紧接着划了两条线:自动批准只对工作目录或 additionalDirectories 之内的路径生效;指向关键路径的 rm/rmdir,以及只读命令集之外的其他 Bash 命令,仍然会弹确认。

第二,即使你把模式调到最松,仍有一类动作不会被自动放行。官方原文是「Claude Code doesn’t auto-approve the following in any mode, including bypassPermissions.」具体做法是维护一份受保护路径清单,写入这些路径永不自动批准。这份清单里包含 .git、.config/git、.vscode、.idea、.husky、.claude 等目录,以及 .gitconfig、.bashrc、.npmrc、.mcp.json 等文件。官方还堵了一个绕过口子:「There is no way to exempt one of these paths: an allowWrite entry or an Edit allow rule that covers the path doesn’t lift the protection.」

对「接进 Git」这件事来说,.git 出现在受保护清单里是关键信息:它意味着无论 Claude Code 跑在哪种模式下,改 Git 内部状态这件事都不会被静默批准。这和 Cursor 的默认值是同一个方向——两家都把「改代码」和「改代码的版本控制元数据」当成了两件不同的事。

三、三个「你以为限制了、其实没限制」的地方

坑一:.cursorignore 挡不住终端和 MCP,官方原文就是这么写的

Cursor 官方忽略文件文档开头先说明它挡得住什么:.cursorignore 里列出的文件,「Cursor blocks access to files listed in .cursorignore from」——Agent、Tab 与 Inline Edit 能访问的代码,以及通过 @ 引用能访问的代码。

紧接着下一句就是那个必须知道的事实:「The terminal and MCP server tools used by Agent cannot block access to code governed by .cursorignore」。把两句话连起来读,结论是:.cursorignore 限制的是「索引与引用」这条通路,不是「Agent 能碰到什么」这个集合。Agent 通过终端跑一条 cat,或者通过某个 MCP 工具去读文件,都不受这份清单约束。

官方在同一页也给了自己的定性:「While Cursor blocks ignored files, complete protection isn’t guaranteed due to LLM unpredictability.」——这句话是厂商自己写的,不是第三方评测的推断。把密钥文件写进 .cursorignore 是一个好习惯,但它不等价于「Agent 读不到这个文件」。真正的边界是操作系统的文件权限,或者把密钥移出工作目录。

坑二:Claude Code 沙箱的默认「读」范围是整台电脑,官方点名了凭证文件

沙箱是 Claude Code 用来减少确认弹窗的机制。它有两层:文件系统隔离管「能读写哪些路径」,网络隔离管「能连哪些域名」。官方对默认读行为的描述是这样的:

「Default read behavior: read access to the entire computer, except certain denied directories. Note that this default still allows reading credential files such as ~/.aws/credentials and ~/.ssh/.」

也就是说,沙箱默认收紧的是「写」,不是「读」。写权限被限制在工作目录、--add-dir 追加的目录和会话临时目录之内;读权限则覆盖整台电脑,官方自己把 ~/.aws/credentials 和 ~/.ssh/ 举成了例子。官方给的收紧办法是 sandbox.credentials,或者把这些路径加进 denyRead。

顺带一条容易忽略的范围说明:官方明确沙箱只隔离 Bash 子进程,内置的 Read、Edit、Write 文件工具「use the permission system directly rather than running through the sandbox」。所以沙箱的路径规则和权限系统的规则是两套东西,收紧其中一套不会自动收紧另一套。

坑三:两家官方都明说自己的默认防护「不是硬边界」

这一点值得单独强调,因为采购时最容易把它当成安全控制项来写进文档。

Cursor 在 Agent 安全文档里说得很清楚:终端命令的自动放行规则「range from a simple allowlist to the Auto-review classifier, and they’re best-effort guardrails rather than a hard security boundary」。

Claude Code 的沙箱文档用的是同一类措辞:「Sandboxing reduces risk but is not a complete isolation boundary. Review the limitations below before relying on it as a hard security control.」它列出的具体局限里,最值得注意的是这一条——默认的代理不检查加密流量,而放行判断只基于客户端提供的主机名,因此官方提示沙箱内的代码「can potentially use domain fronting or similar techniques to reach hosts outside the allowlist」。此外 bypassPermissions 模式官方直接写明「offers no protection against prompt injection or unintended actions」。

这条不影响结论的方向,但影响你怎么写内控文档:把这些机制写成「降低风险的技术控制」是准确的,写成「阻止数据外泄的边界」是不准确的——厂商自己都没这么说。

四、接进 Git 之后,写权限是在哪一步交出去的

前三层讨论的是本地。真正把权限交到远端的是第四层的最后一步:让工具能对仓库写。这一步不是通过某个「允许写」的开关完成的,而是通过授予仓库访问权完成的——工具拿到仓库访问权之后,改代码、建分支、提 PR 都只是这个访问权的自然延伸。

Devin 的官方文档把这件事讲得最直白。集成总览页对源码控制集成的用途定义是:「Connect Devin to your source control platform to enable repository access, pull request creation, and code contributions.」注意这里的三个词——仓库访问、创建 PR、代码贡献。也就是说,在 Devin 的模型里,「连上 Git」和「能写」是同一件事,不存在「只给读」的中间档。官方定价页把 GitHub、GitLab、Bitbucket 列为原生集成。

而 Devin 用来限制这个访问范围的手段,全部在 Enterprise 档之后:

能力 官方定价页的档位归属 它限制的是什么
GitHub / GitLab / Bitbucket 原生集成 接入哪些托管方
自定义 Git 提供商 Enterprise 专属 内网自建 Git 能不能接
Teamspace 隔离 Enterprise 专属 按仓库或团队切分可见范围
部署在你自己的 VPC Enterprise 专属 代码与执行环境落在哪张网里
SAML/OIDC SSO Enterprise 专属 谁能登录、以什么身份登录

这张表值得连着读一遍:Devin 把「接入能力」放在所有档位,「限制接入范围的能力」全部放在 Enterprise。Teams 档的官方描述是「$80/month for team plan + $40/mo per full dev seat」,上限 200 人,包含集中计费、管理看板与优先支持——但仓库级隔离不在其中。如果你的合规要求是「同一个 Agent 只能看到一个仓库」,那在 Devin 这一侧,能实现它的最低档位是 Enterprise。

Cursor 的路径不同:它把「Agent 会不会长期持有你的代码」做成了一个可以关掉的开关。官方隐私与数据治理文档写得非常明确:

「Cloud Agents are the only feature that requires Cursor to store code. Unlike LLM requests, Cloud Agents need access to your repository over time to make changes.」

官方同时公布了存储的边界:Agent 跑在隔离的虚拟机里,每个 Agent 有独立环境,与其他 Agent 和用户隔离;存的是「Encrypted copies of repositories that Cloud Agents work on」,在 Agent 运行期间临时保存,完成后删除。而且 Cloud Agents 是可选功能,官方给的建议是:「If your security policy prohibits code storage, don’t enable Cloud Agents. You can still use all other Cursor features.」

这里有一个很容易搞混的地方需要点出来。「代码被用于训练」和「代码被存储」是两件事,Cursor 把它们放在了两个不同的机制里。前者由 Privacy Mode 管,官方原文是「With Privacy Mode enabled your code is never used for training by Cursor or other AI model providers」,而且团队级可以强制开启——Teams 档的功能列表里就有「Team-wide privacy mode enforcement」这一项。后者只由 Cloud Agents 决定,关掉它不影响其他任何功能。做安全评审时,这两个问题要分开问、分开答。

还有一层是「推送这一步走哪张网」。Claude Code 的沙箱把网络出口也管住了,官方原文是「Claude Code pre-allows no domains by default. The first time a command needs a new domain, Claude Code prompts for approval」。这意味着一条 git push 涉及的域名不会天然放行,需要走批准流程。对应的收紧选项有两个:strictAllowlist 设为 true 后,白名单之外的域名直接拒绝而不弹窗;托管设置里的 allowManagedDomainsOnly 则让非允许域名自动阻断,且只认托管设置里的规则。

五、按场景怎么选

  • 只要补全和问答,不要它动文件:把工具留在第 1 到第 2 层。Claude Code 用 default 模式(官方描述「Reads only」),这个模式是它的默认值,不需要额外配置。
  • 要 Agent 改代码,但不放心它跑命令:Cursor 的默认值正好落在这个区间——改工作区文件免批准,终端命令默认需批准。配套动作是把配置文件改动的批准保持开启,并注意官方的提醒:开了自动重载,改动可能在你看之前就执行了。
  • 要 Agent 改代码并允许它跑命令:Claude Code 用 acceptEdits,但要清楚它同时放行了 rm、sed 这类命令;配合 deny 规则收紧更实际,因为官方明确「Deny rules block in every mode, including bypassPermissions」。
  • 要限制它能访问哪些域名:Claude Code 用 strictAllowlist 或托管设置里的 allowManagedDomainsOnly。注意官方对网络隔离强度的提示:默认代理不检查加密流量,放行只看客户端声明的主机名,所以宽泛放行大域名「can create paths for data exfiltration」。
  • 要它直接提 PR:这时你已经把写权限交到了远端。Devin 与 GitHub Copilot 的 Agent 都以「创建 PR」为原生能力(Copilot 官方计划页的表述是「Assign work to Copilot and it creates a pull request」)。建议在仓库侧用分支保护和必审规则收口,而不是指望 Agent 侧的限制。
  • 代码不能出内网:Devin 侧需要 Enterprise 才有自定义 Git 提供商和 VPC 部署;Cursor 侧可以只关掉 Cloud Agents,其余功能不受影响。这一层差别在数据政策对比里更细。
  • 团队要统一收口:Cursor 的 Teams 档已包含团队级隐私模式强制与 SAML/OIDC SSO;Claude Code 侧可以用托管设置把 bypassPermissions 模式整体禁用(官方提供 permissions.disableBypassPermissionsMode 这个开关)。档位与功能的对应关系可以对照企业版与席位计费那一篇。
  • 要按仓库做隔离:目前只有 Devin 的 Teamspace 是官方文档里明确的仓库级隔离机制,且最低档位是 Enterprise。其余两家的隔离粒度是「用户」或「工作目录」,不是「仓库」。

最后回到方法上。这篇和本站其他几篇做的是同一件事——把订阅价格拉平、把数据保留期限拉平。这一篇拉平的是「权限」:先把权限拆成读、写、执行、外联四层,再分别问每一层的默认值是什么。拆完之后会发现,那些最容易被当成「已经限制住了」的机制——忽略文件、沙箱、自动放行规则——厂商自己都在文档里标了同样的注脚:它们降低风险,但不构成边界。

数据来源与核实说明

文中权限模型与数据流机制于 2026 年 9 月 24 日复核更新,来源为各厂商官方文档。本文未做本地实测,所有机制描述均转述官方文档的原文表述,不含实测行为。需要说明四处口径:

  • 「四层权限」是本文为便于比较而做的归类,不是任何厂商的官方框架。各家的原始划分方式不同:Cursor 分「第一方工具调用 / 第三方工具调用 / 网络请求」,Claude Code 分「权限模式 / 权限规则 / 沙箱」三个互相独立的机制。
  • Devin 未按权限层级披露细节。官方文档把源码控制集成的用途定义为仓库访问、创建 PR 与代码贡献,但未公布沙箱边界、命令执行白名单或网络出口规则,本文不提供推测值。
  • Devin 的原生 Git 集成未标注最低档位。官方定价页把 GitHub、GitLab、Bitbucket 列为原生集成,把自定义 Git 提供商、Teamspace 隔离、VPC 部署、SAML/OIDC SSO 列为 Enterprise 能力;原生集成三项未在该页标注适用档位,本文不作推断。
  • Sourcegraph 的定价页在本环境下被 WAF 拦截(HTTP 403),因此本文不引用其任何数字。Claude Code 的 MCP 工具权限细节分布在多个页面,本文仅引用 code.claude.com 权限模式与沙箱两页中可直接核对的内容。

权限模型随版本迭代变化较快,请以官网文档为准。发现错误欢迎联系我们。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注