共享环境:把工作现场从个人电脑搬出来

——「人 × Agent 协作」系列 · 第 5 篇

共享环境:把工作现场从个人电脑搬出来

——「人 × Agent 协作」系列 · 第 5 篇

协作中心从个人电脑迁移到共享对象

前面四篇,我们建立了一套看似完整的体系:AI 接手机械工作,AI review 治理 AI 产出,三角结构管控整个流程。但如果你真的去试着落地,会撞上一个最容易被忽视、却最致命的问题。

这个问题和模型能力无关,和 prompt 工程无关,和流程设计也无关。它是一个物理问题

当 AI 把代码写完、把 review 做完、把工单处理好之后,人要真正验收这些工作时——他面对的是什么?

它是整套协作模式能落地的物理基础

一个被所有人忽视的"最后一公里"

让我还原一个让你会心一笑的场景。

某个 Agent 接到一个任务:修复一个线上 bug。他分析根因、定位代码、写好补丁、跑通本地测试,然后提交了一个 MR,并在 MR 描述里认认真真写了一段话:

"已修复 HAR-xxx 问题。根因是 A 模块的缓存 key 没有带 documentId,导致并发场景下串读。已在分支 fix/har-xxx 修复,本地回归通过。验收时请关注 B 流程的审核结果。"

一个工程师接到 review 任务,打开 MR,看到代码——这部分没问题。然后他想实际验证一下运行效果。于是:

  1. 先把分支拉到本地:git fetch && git checkout fix/har-xxx
  2. 发现本地依赖是半个月前的,pnpm install 跑了 5 分钟。
  3. 启动本地数据库,发现 migration 没跑,跑了一遍。
  4. 想复现 bug,但不知道该用什么测试数据——Agent 用的那批材料,在他本地根本没有。
  5. 好不容易凑出数据,跑了一遍流程,又发现某个环境变量配错了,服务起不来。
  6. 折腾了两小时,终于跑通了,验证了修复有效。

这两小时里,工程师做的每一件事,都不是 review,也不是判断。 它们是纯粹的"把环境跑起来"的体力活。而这套协作模式前四篇积累的所有效率——AI 自动分析、AI 自动 review、自动化巡检——在这两小时里全部漏光了

这就是"最后一公里"问题。它的本质是:Agent 完成了他的工作,但他完成的是一段"代码 + 文字说明",而不是一个"人可以直接接手的工作现场"。

三个协作断点:为什么"交付代码"不等于"交付现场"

让我们把这个问题拆开,看清它到底断在哪里。我们团队踩过无数坑之后,总结出三个协作断点

断点一:代码 Review 和功能验收脱节。 MR 可以让人 review 代码——这部分是数字化的、可追踪的。但"这段代码运行起来到底是什么效果",却藏在某个人的本地环境里。Agent 说"我已经验证过了",可他验证用的是他自己电脑上的数据、他自己配的环境、他自己的租户。Reviewer 想看运行效果,只能选择:要么信任 Agent 的描述,要么自己从头搭一遍环境。前者丧失了 review 的意义,后者重复了 Agent 已经做过的劳动。

断点二:Agent 完成 ≠ 人可以验收。 Agent 说"已经修好",这句话是廉价的。它不包含任何可被独立验证的证据。人接手后,第一件事不是"判断这个修复对不对",而是"先花时间把环境跑起来"。判断被环境搭建挤掉了。一个本该是"高质量人机协作"的节点,退化成了"人给 Agent 打下手"。

断点三:工作状态无法稳定交接。 更隐蔽的问题是,当换一个人、或者换一个 Agent 来接手时,前一个执行者的环境、材料、上下文几乎无法完整复用。所有这些状态都留在某个人的电脑里——本地数据库的状态、Redis 里的临时数据、测试租户里造的规则和材料、"这个 bug 要怎么复现"的个人经验。换人 = 从头来过。

这三个断点,指向同一个根本问题:

传统开发流程,把大量关键状态留在了开发者电脑上。代码、数据库、配置、测试数据、复现经验——全是个人的、本地的、不可共享的。

只要这个现状不改变,无论 AI 多强、review 多智能、自动化多严密,人接手的那一刻,永远要重新搭一遍环境。这是协作效率的真正天花板。

解法:把协作中心从"电脑"搬到"共享对象"

我们的解法,是做一次协作中心的迁移

传统流程里,协作的中心是"开发者电脑"——所有状态都围绕某台机器组织。我们把协作中心迁到两个共享对象上:

  1. MR(Merge Request):承载可审查的代码变更、commit 历史、Pipeline 结果、决策记录。它是代码层面的共享现场。
  2. Review App:承载当前 MR commit 的真实运行状态——跑起来的服务、准备好的数据、可点击的验收入口。它是运行层面的共享现场。

这两个对象,都是脱离任何个人电脑的。它们存在于 GitLab 和云平台上,任何人(包括任何 Agent)都能访问,且状态明确、可追踪。

这次迁移带来的根本改变是:Agent 不再只交付"代码已写完",而是同时交付一个完整的、可进入的工作现场。 一个 Agent 完成任务后,他交付的是:

而人接手时,不需要搭任何环境。他打开 MR 看代码,点 Review 按钮直接进入运行中的环境验收功能。判断和环境搭建,终于解耦了。

三方职责的重新划分

共享环境这件事,看起来只是"多部署一个临时环境",但它实际上重新定义了人、Agent、平台三方的职责边界。这次划分,是这套协作模式最反直觉、也最核心的设计之一:

参与者 负责 不应承担
Agent 分析问题、建立证据链、修改代码、运行测试、准备数据、创建环境、执行标准 E2E、整理失败信息 代替人做最终工程判断和业务取舍
明确目标与边界、Review 代码、在 Ready 环境中验收功能、决定合并或继续修改 手工搭建验收环境、重复导入数据、查找临时入口
CI / 平台 保存共享状态、运行指定 commit、隔离资源、提供入口、记录结果、回收环境 解释无法机器化的复杂业务口径

请注意"不应承担"那一列——这才是这张表的精髓。

这张表背后,是一句贯穿全系列的话(也是这套模式的灵魂):

自动化的目标不是减少人的参与,而是把人的参与推迟到真正需要判断的节点。

共享环境,正是这句话的物理体现。它把"搭环境、造数据、找入口"这些不需要判断的体力活,从人的肩上彻底卸下,全部交给 Agent 和平台。人剩下的,只有那两件真正需要他的事:

  1. 代码是否正确、清晰、可维护。
  2. 产品行为是否符合真实业务预期。

三方职责边界:Agent、人、CI 平台各自负责和不应承担的事

"环境已经 Ready":一个被重新定义的完成标准

但这里有个陷阱:如果 Agent 说"环境已经 Ready 了",人怎么知道这是真的?

最常见的误解是:把"Pipeline 跑完了""批次执行 completed 了"等同于"环境 Ready 了"。这是错的。一个 Pipeline 绿灯,只代表构建和部署的机械流程走完了;一个批次 completed,只代表任务执行链路结束了——它们都不能证明"人现在可以进去验收了"

我们为此定义了一个严格的 Ready 标准,Agent 把任务交给人之前,环境必须同时满足:

最后一条最关键。它要求"代码、环境、数据、入口、验收预期"同时对齐。任何一个环节指向了不同的 commit,整个 Ready 状态就作废——因为你不知道你验收的,到底是不是你以为的那个版本。

这个标准看起来繁琐,但它的意义在于:它把"完成"从一个模糊的主观判断,变成了一个可机器验证的客观清单。 Agent 不能凭感觉说"好了",他必须让每一项都通过检查。这也是"用 AI 治理 AI"思想在工程层面的延伸——前一篇是 AI review 治理代码产出,这里是机器门禁治理"完成状态"。

从协作问题到工程能力:一张对照表

共享环境听起来美好,但落地需要解决一堆具体的工程问题。我们把这些协作问题和对应的工程能力做了一张对照表,它是这套模式的落地蓝图:

协作问题 需要的工程能力
人无法复用 Agent 的本地环境 每个 MR 创建可共享的远程 Review App
不知道环境运行的是哪个版本 readiness 与 manifest 强制绑定 commit SHA
多个 MR 相互覆盖 Worker、Container、数据库和域名按 MR 隔离
人仍要寻找账号和入口 Review 按钮直接提供短期协助链接
每次验收都要重新造数据 自动准备固定租户、规则、额度、材料和批次
"执行完成"无法证明功能正确 标准 E2E 断言最终业务 decision
临时环境持续产生费用 手动创建、合并/关闭停止、TTL 回收
失败后现场消失 ready 后失败保留环境和日志用于诊断

这张表值得逐行读。每一行左边,都是一个真实的协作痛点——它们看起来琐碎,但每一个都足以让人接手时卡住。每一行右边,都是一个对症的工程能力。你会发现,共享环境不是"多部署一个东西"那么简单,它是一整套面向协作的工程基础设施

其中有两行特别值得展开,因为它们体现了最深的洞察:

"readiness 与 manifest 强制绑定 commit SHA"。 这是解决"我验收的到底是不是这个版本"的唯一办法。环境会告诉你它跑的是哪个 commit,验收结果会记录是在哪个 commit 上做的——三者必须一致,否则作废。这把"版本漂移"这个隐蔽的协作杀手,彻底锁死了。

"标准 E2E 断言最终业务 decision"。 这一行是下一篇(第 6 篇)的伏笔。它说的不是"E2E 跑通了",而是"E2E 断言了最终的业务判断是对的"。一个批次跑完不等于结果正确——正例必须通过、反例必须被拦。这是"机器门禁只管机器能管的"的起点。

为什么"共享环境"是这套模式的物理基础

让我把这一篇的视角再拉高一次。

回看全系列:第 2 篇讲 AI 接手机械工作,第 3 篇讲 AI review 治理 AI 产出,第 4 篇讲三角管控。这三篇解决的,都是信息层面的问题——怎么让信息流动得更高效、更可靠。

但信息最终要落到物理层面才能被验证。一段代码对不对,要跑起来才知道;一个修复有没有效,要在真实环境里复现才作数;一个业务流程通不通,要真的点一遍才算。而这些"跑起来、复现、点一遍",全都需要一个真实运行的环境。

如果这个环境不存在,或者只存在于某个人的电脑里,那前面所有的信息层优化,都会在"最后一公里"失效。Agent 写得再快,人 review 得再智能,自动化巡检得再严密——人接手时还是要花两小时搭环境,一切归零。

共享环境,就是把这套协作模式从"信息层"锚定到"物理层"的那根钉子。 它保证了:无论信息怎么流转,无论 Agent 和人怎么异步协作,最终都有一个所有人都够得着、状态明确、可独立验证的现场,作为协作的共同地基。

这也是为什么我们把 Review App 和 MR 称为"两个共享对象"——它们不是工具,是协作的锚点。没有它们,协作就退化成了"Agent 发一段文字,人自己脑补现场"。

一个对照:Cloudflare 的"本地共享环境"

讲到这里,可以呼应一下第 3 篇提到的 Cloudflare 设计。

Cloudflare 的 AI review 系统有一个本地插件,工程师可以在自己的工作树上跑 /fullreview,"用的是和 CI 里完全一样的 agents 和 prompts,只是跑在你的笔记本上"。这个设计的精髓在于:让 AI 和人看到同一个现场

我们的做法把这个思想推到了极致——不只是"AI 和人看同一个代码现场",而是"AI、人、所有协作方,共享同一个运行现场"。Review App 是这个共享现场的载体:Agent 在里面准备数据和材料,人在里面验收功能,AI review 的结论可以直接对着这个真实运行的版本来验证。

这种"运行现场的共享",比"代码现场的共享"更强。因为代码是静态的,运行是动态的;代码可以被脑补,运行只能被观察。当协作的中心是一个真实运行的环境时,所有"我以为""应该是""大概是"都会被现实校正。

收束:让人真正"接得住"

让我用一句话收束这一篇:

共享环境,是让"人接得住 AI 产出"这件事,从一句口号变成物理现实的唯一办法。

它的本质,是把工作现场外部化——从个人电脑的私域,搬到 MR 和 Review App 的公域。一旦外部化,所有的协作断点都消失了:

讲到这里,前五篇的物理基础已经铺好。但还有一个问题悬而未决,它正是最后一篇工程篇(第 6 篇)的主题:

在这个共享环境里,怎么保证验收本身是可靠的? 当 AI 跑完了一批测试,说"全部通过",人凭什么相信?机器门禁到底该管什么、不该管什么?

这是第 6 篇的主题:门禁驱动——让机器只管机器能管的,人只判人该判的。我们会用一个真实的案例说明,为什么"批次全部 completed"反而可能是一次失败的验收,以及那套 G1–G5 门禁如何把"完成"和"正确"彻底分开。

下篇见。

一句话结论

共享环境(MR + Review App)把工作现场从个人电脑外部化到共享对象,让"人接得住 AI 产出"从口号变成物理现实;严格的 Ready 标准和 commit SHA 绑定,则是这套物理基础的可靠性保证。

下一篇 →门禁驱动:让机器只管机器能管的,人只判人该判的