Vibe Coding Agent 路径与资源所有权:在共享现场划清写入边界
并行 Agent 即使修改不同功能,也可能同时重写公共类型、占用测试端口或共享浏览器状态。本文用读集、写集、共享集和资源表分配责任,并以实际补丁反查越界。
本文要点
- 主题聚焦:Vibe Coding、AI Agent、DevOps、开源
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
“A 做 API,B 做 UI”并不能证明两者互不干扰。A 可能更新共享响应类型和生成客户端,B 可能同时整理同一 import;两人虽写不同主文件,却都要运行占用 3100 端口的测试服务。路径冲突只会产生明显 diff,端口、浏览器 profile、测试账号和代码生成器的冲突则可能表现成随机失败或污染证据。
本文的所有权是一次 Vibe Coding 任务里的责任分区,不是 多 Agent Task Claim 的租约和 fencing,也不是并行编程 Agent 的 Worktree 所有权围栏所处理的独立 worktree 生命周期。即使所有 Agent 共用一个工作目录,也要先回答谁可写什么、谁只能读、哪些资源必须串行。
从四个路径集合开始
为每个子任务声明四个集合:
readSet:形成判断必须读取,但不得顺手修改的路径;writeSet:该任务预期拥有的文件或窄 glob;sharedSet:多个任务都可能需要的接口、注册表或清单;protectedSet:用户已有修改、秘密、生成产物或明确禁区。
writeSet: src/** 没有协调价值。应尽量收窄到模块或具体文件,并记录为何需要写。未知影响面先放在 readSet;勘察证明需要扩大时,先更新分配,再编辑。脏工作树安全改码负责保护任务开始前已有的修改;本表进一步区分本任务内部多个执行者的增量。
task: profile-api
writeSet:
- src/api/profile/route.ts
- src/api/profile/route.test.ts
sharedSet:
- src/contracts/profile.ts
protectedSet:
- src/generated/**
resourceNeeds:
- integration-port: exclusive
共享文件不应被“最后写入者”拥有。先指定一个接口维护者,其他 Agent 提交变更请求或等待冻结 revision。若两项工作必须改同一函数或同一配置键,就把对应节点串行化;用 hunk 级乐观约定硬撑并行,通常只是把语义冲突推迟到集成阶段。
生成文件按源头分配
生成产物看似是普通路径,实际写权限属于 schema 和生成命令。一个 Agent 修改 OpenAPI,另一个直接修生成客户端,会造成下一次生成覆盖手补丁。资源表应记录 generatedBy、源文件 owner、允许的生成命令和预期产物集合;只有源契约已接受后才运行生成。
生成代码所有权与再生成边界解释源与产物关系。协调层还要保证同一生成器同一时刻只有一个执行者,并在完成后核对它没有触碰分配外文件。无法预测输出范围的生成命令,不应在共享现场由任一子任务试跑。
非文件资源同样需要分区
常见资源至少包括端口、浏览器 user-data-dir、临时目录、测试数据库 schema、fixture 名称、外部沙箱账号、API 配额和人工审批窗口。为每项标注:
immutable:所有 Agent 可读,例如冻结的规范快照;partitioned:按 worker 或任务派生唯一名称;exclusive:同一时刻只给一个任务;forbidden:当前任务没有使用权。
Playwright 的并行文档强调 worker 进程彼此隔离,并提供 worker index 用于派生独立数据;关键不在照搬某个测试框架,而在于共享资源必须有确定性命名。若无法隔离浏览器状态或测试账号,就把相关节点串行执行,不要用重试掩盖竞争。
权限边界与协调所有权也不同。编程 Agent 的 Sandbox 与权限设计决定进程技术上能访问什么;任务所有权决定即使能访问,当前 Agent 是否获准修改。两者都要满足,不能因为沙箱允许写全仓就把全仓视为 writeSet。
用实际变化反查声明
每个 Agent 交付时提供预计路径与实际路径的差集。Git diff 可以展示 tracked 内容的差异,但 staged、unstaged 与 untracked 要分别盘点;二进制、rename 和文件模式变化也不能漏。结果分为:
expected:落在 writeSet 且符合任务意图;shared-approved:共享路径变更已有接口 revision 或维护者接受;unexpected:声明外变化,阻止交接;concurrent:读取后磁盘又变化,需要重新基线化。
只比较文件名仍不够。格式化器可能重排 shared 文件却不改变行为,也可能让另一任务的精确补丁失去上下文;这两种都算协调成本。对 shared 路径保留开始时的内容摘要和既有 hunk,交付时证明没有覆盖他人改动。
释放所有权需要完成交接
“Agent 已结束”不等于路径立即空闲。只有补丁、证据、未决冲突和资源清理均被接收方确认,写集才能重新分配。服务进程应停止,临时 profile 应按政策删除,测试账号恢复到约定状态;未知副作用则把资源标为 quarantined,而不是直接交给下一个任务。
最终验收看三件事:任一实际写入都有唯一授权来源,任一共享接口变化都有显式接受,任一稀缺资源的使用区间都不重叠。做到这些,多 Agent 并行才是可解释的工作分配,而不是让多个模型同时碰运气。
延伸阅读
Related