代码审查 Agent 也要有自己的沙箱:GitHub 把配置、网络和反馈拆开了章节1×0:08更新发生了什么1:15这条循环以前缺什么2:23配置拆开以后,工程上多了什么3:43团队今天可以怎么落地0:005:050:08hostGitHub 在 2026 年 7 月 17 日更新了 Copilot code review。重点不是多几个设置项,而是把代码审查 Agent 的指令、运行环境、网络权限和执行机器拆了出来。 第一,审查 Agent 改为从 Pull Request 的头分支读取自定义指令,支持 `copilot-instructions.md`、路径规则文件、`AGENTS.md`,以及一些常见的模型说明文件。团队可以在功能分支里改规则、先试跑,再决定是否合并。 第二,新增专门的 `copilot-code-review.yml`,用于安装依赖、配置工具和仓库级 runner。没有这个文件时,才回退到 `copilot-setup-steps.yml`。 第三,审查默认经过防火墙,组织或仓库可以单独配置 Internet access。自托管 runner 目前不支持这套防火墙。第四,code review 和 Copilot cloud agent 的 runner 配置分开了,可以分别指定执行类型。 这四件事合在一起,说明 code review 已经开始拥有自己的运行时边界。1:15host代码审查 Agent 表面上只是在读 diff、找问题,实际跑的是一条循环:理解变更,检索上下文,调用工具,判断证据够不够,然后继续搜索、写评论,或者停止。 以前容易混在一起的是四类输入。审查规则和 Cloud Agent 的指令不一定相同;审查所需的依赖和完整开发环境不一定相同;审查通常不需要任意访问互联网;最后,质量也不能只看评论数量,还要看它查了什么、工具是否失败、上下文有没有越搜越宽。 GitHub 7 月 10 日的工程文章给了一个很具体的例子:共享代码探索工具接入 code review 后,Agent 一度更贵,抓到的问题却更少。团队从 trace 里看到它把审查做成了全仓库漫游,于是把指令改成「从 diff 提问,先收窄搜索,再读最小证据区间」。调整后,平均审查成本大约降低百分之二十,同时保持了相同的审查质量。 这里的教训很实在,工具没坏,循环的行为模型错了。对审查任务来说,少读一点不是偷懒,而是少让无关上下文进入后续推理。2:23host从 Loop Engineering 的角度看,这是控制面分离。你至少应该能回答四个问题:这条评论用了哪版规则,运行在哪种环境,能访问哪些地址,重跑时为什么会变。 头分支指令让规则进入可审查的代码变更。专用 setup 让审查环境不再隐含依赖 Cloud Agent。防火墙把网络边界变成显式配置。独立 runner 则让团队能按风险选择执行位置。过去藏在平台默认值里的条件,现在变成可以版本化、比较和回滚的输入。 有一个文档冲突需要留意。GitHub 当前帮助页在一处仍写着审查使用 base branch 的指令,但 7 月 17 日更新公告明确写的是 head branch。公告还说,这样可以在功能分支里测试指令。两者不是措辞差异,而是发布策略差异,落地前应该在实际仓库验证。 帮助页还说明,code review 通过 GitHub Actions runner 执行 Agent 能力,MCP 工具有单独的允许开关,审查评论只是 Comment,不会代替人工批准,也不会阻止合并。 这也提醒我们,权限边界和质量反馈要放在同一张运行记录里。一次审查即使没有泄露数据,也可能因为读了过多文件、重复调用工具或访问了不必要的地址而变得昂贵。只看最后的评论,定位不到这些浪费发生在哪一步。3:43host如果你正在部署代码审查 Agent,可以先做四项检查。 第一,把 review 指令从通用编码指令里分出来,写清楚从 diff 开始、什么时候继续检索、什么时候停止,以及评论必须引用什么证据。 第二,给审查任务单独定义 setup 和网络允许清单,并确认自托管 runner 是否绕过了默认防火墙。 第三,把 trace 纳入评估,至少记录工具调用、搜索范围、失败重试、输入输出 token 和最终评论,区分「没找到问题」与「找到后没写出来」。 第四,用一组已知答案的 Pull Request 做回归测试,比较有效评论率、重复评论率、成本和异常网络访问,不要只看评论数量。再把失败样本按类型留存:是规则没覆盖,工具没找到证据,还是权限策略让它无法验证。下一次修改指令或 runner 时,先重跑这些样本,才能知道改动到底改善了哪一段循环。 最后留一个判断标准:如果你说不清一条评论是在什么指令、什么环境和什么网络权限下产生的,这条 Agent 循环还没有真正进入工程管理。下次看到质量变化,先调出执行路径和运行边界,再考虑换模型。