GitHub 在 9 月 23 日把「本地沙箱」推进 public preview。它把 Copilot 应用里 agent 执行的命令关进操作系统级沙箱,按项目限制文件、网络和凭据访问。这项能力默认关闭,只作用于本地仓库与工作树会话,云端沙箱和远程主机上的会话不在范围内,应用内的沙箱设置也与 Copilot CLI 的那套分开配置。

对每天用 agent 改代码的人来说,难回答的从来不是「它能不能写」,而是「它刚才那条命令到底动了什么」。工作树(working tree)确实把并发会话各自的分支和文件隔开了,但它不限制命令能碰到什么——一个跑偏的 rm 或者一次意外的 git push,照样会越过工作树的边界。本地沙箱要补的正是这一层。
AI Coding 交流群
如果你也在用 AI 写代码,或者正在研究 Cursor、Claude Code 这些工具,欢迎加入以下交流群。群里平时会聊一些 AI 编程的实际用法、开发工作流,还有各种新工具和新玩法。
发生了什么
按 GitHub Changelog 9 月 23 日的 Release 条目,本地沙箱在 GitHub Copilot 应用里进入 public preview,官方同时标注「可能随时变更」。它的机制不复杂:agent 触发的工具调用被放进操作系统级沙箱执行,访问范围被限制在文件、网络资源和凭据这三个维度上,目的是降低「你没打算跑的命令」造成的损害。
作用范围需要说清楚。它按项目配置,并且只覆盖本地仓库与工作树会话。云端沙箱会话、运行在远程主机上的会话都不在覆盖范围内。另外,Copilot 应用里的沙箱设置和 Copilot CLI 的沙箱设置是两套独立配置,改了其中一边不会同步到另一边。
开启方式分两级。项目级的做法是打开应用设置、选中项目,在 Sandbox 分组下打开「Sandbox new sessions」,这个开关只影响新会话,已经在跑的会话不会改变。如果只想试一次,在会话里输入 /sandbox on,它会产生一个只作用于当前会话的持久覆盖,不动项目默认值。
三组设置和它们各自的默认值
文件系统一侧有三份列表:额外读写(Additional read/write)、额外只读(Additional read-only)和拒绝列表(Denied)。工作区与当前工作目录默认就是读写,所以初始状态下 agent 能直接改你正在写的代码——这是有意为之,否则它没法干活。拒绝列表的优先级设计得比较务实:一条更具体的拒绝条目会压过更宽的父级授权,也就是说你把某个子目录拉黑之后,它不会因为父目录被授权而重新开放。
网络一侧是两个开关:出站互联网(Outbound internet)和本地网络(Local network),默认都允许。凭据一侧也是两个:Git 凭据用于走 HTTPS 的 git 操作,GitHub CLI 凭据用于 gh 命令行认证,默认同样都可用。官方对默认策略的定位是「能装依赖、能跑本地开发服务器、能推分支、能开 PR」,因此建议的做法是先按默认跑一段时间,再针对敏感目录、无网络、无凭据这几类场景各自收紧。
值得注意的是,文件系统、网络和凭据的改动都不会影响正在运行的会话。它们要么等到新会话生效,要么等现有会话重启;不想丢上下文的话,用 /restart-session 可以在保留历史的前提下重启会话。
一个完整场景:新依赖、.env 和一次被拦下的写入
假设你要给一个后端服务加新依赖,而仓库根目录躺着一个 .env。
第一步,你在应用设置里选中这个项目,打开 Sandbox 分组下的「Sandbox new sessions」,其余保持默认。第二步,新建会话,让 agent 装依赖、起本地 dev server——默认策略放行,因为它本来就允许装依赖和跑本地开发服务器。第三步,你回到设置,把 ~/.ssh 和放 .env 的目录加进拒绝列表。第四步,改动不会立刻作用到当前会话,所以你用 /restart-session 重启,历史还在。第五步,如果 agent 之后试图往被拒目录写文件,拦截发生在操作系统层,而不是靠模型自觉。
还有一条容易被忽略的路径:如果遇到「Run outside the sandbox?」提示,你可以取消、放行这一次,或者干脆把本会话的沙箱关掉。临时关闭不会改项目默认值,也不会覆盖已有的会话级设置,重启或重连之后自动失效。企业侧对此有更强的控制——企业所有者可以禁止在沙箱外运行工具。
为什么这会改变工作流
最关键的变化是权限模型换了个底座:从「相信 agent 的判断」变成「由操作系统执行的策略」。这两者听起来差别不大,但出错时的表现完全不同。
本地沙箱的失败方式是明确的。如果操作系统无法强制执行所请求的策略,沙箱 shell 会直接报错——官方文档描述为 unsupported-platform 或 unsupported-policy 消息——而不是静默地无沙箱运行。在 Windows 上还有个更细的取舍:一个被拒绝的路径可以被保存,但如果系统无法保证拒绝生效,命令会直接失败,而不是带着「没生效的拒绝」或者「没有沙箱」继续跑。这个设计把「保护没起作用」和「命令报错」这两件事绑在了一起,对团队来说好判断得多。
策略也可能比配置更严格。企业托管设置可能让实际生效的策略比你在项目里配的更紧。这意味着「我在本地配了宽默认」不等于「企业环境下就是宽的」,配置的预期需要在项目文档里写清楚。
限制与人该接管的地方
Linux 上有一条明确的缺口:沙箱无法对派生进程——比如 shell 命令、本地 MCP 或 LSP 服务器——单独控制本地网络访问。进程内的 web 请求和远程 MCP 仍然受该设置覆盖,但派生出去的子进程不受。如果你的威胁模型里包含「本地服务被 agent 拉起的子进程访问」,这一条就得单独处理。
另外三点:正在运行的会话改不了策略,必须重启;它只覆盖本地会话,云端沙箱和远程主机的隔离要靠各自的机制;沙箱约束的是 agent 触发的命令,不等于对整个仓库做了权限收紧。
需要人来接管的位置有三个。一是决定哪些目录进拒绝列表,这需要你对自己仓库的敏感文件分布有判断——把 .env、密钥目录、CI 凭据放进 Denied 是最小起步。二是决定企业是否禁用沙箱外运行,这直接决定了那条「放行一次」的口子会不会被常态化使用。三是决定临时放行的时机,因为它不会改默认值,很容易在一次调试里被顺手打开、之后忘记恢复。
如何试用
项目级:打开 Copilot 应用设置,选中目标项目,在 Sandbox 分组下启用「Sandbox new sessions」。单会话:/sandbox on 开启、/sandbox off 关闭。改完文件系统、网络或凭据设置后,用 /restart-session 让策略在保留历史的情况下生效。功能处于 public preview,官方说明随时可能变更,建议先在非关键项目上跑一轮,观察 agent 的正常工作流有没有被默认策略挡住。
信息来源
- GitHub Changelog,2026-09-23:Local sandboxing in the GitHub Copilot app(https://github.blog/changelog/2026-09-23-local-sandboxing-in-the-github-copilot-app)
- GitHub Docs:Configuring local sandboxing in the GitHub Copilot app(https://docs.github.com/en/copilot/how-tos/github-copilot-app/configure-local-sandboxing)
开发必备:API 全流程管理神器 Apifox
介绍完上文的内容,我想额外介绍一个对开发者同样重要的效率工具 —— Apifox。作为一个集 API 文档、调试、设计、测试、Mock、自动化测试于一体的工具,Apifox 是目前提升研发效率的首选。
如果你正在开发项目,不妨试试其极其友好的界面设计,它完全兼容 Postman 和 Swagger 数据格式,导入数据非常方便,,即使是新手也能很快上手,点击这里即可注册使用。

值得一提的是,除了个人和常规团队使用,针对有高安全合规要求、或需要在内网环境协作的企业,Apifox 还提供了深度定制的私有化部署方案。
获取专属报价与部署方案
详细的私有化部署系统架构与安全白皮书
针对您公司规模的专属报价单
免费的 1v1 专属产品演示 (Demo) 机会