作为一名一线做业务、画原型、写 PRD,同时日常高强度调度多个 Coding Agent(Cursor、Claude Code、Codex、Antigravity 等)独立开发工具的 AI 产品经理,我日常几乎每天都在和复杂、多阶段的长任务打交道。
在调度这些大模型辅助编码的过程中,最让人头疼的往往不是从零起步写一段崭新的功能,而是长任务进行到中后期的“接续与交接”问题。
不知道大家在日常使用 Agent 推进复杂模块时,是否经历过类似的尴尬困境:
前几天我在重构一个包含复杂审批状态机的权限流转模块:
- 前期的推导很充分:我在一个 Claude Code 窗口里,和 AI 深入推演了一个多小时,针对“多级审批、并行会签、超时自动驳回”这三种边界条件,最终排除了最初粗糙的方案 A,确定了状态机方案 B,并且已经把底层的核心数据模型和两组关键单测写好了;
- 会话开始变慢:随着代码和日志逐渐增多,对话轮次走到了第 18 轮。此时终端里的 Agent 响应开始明显卡顿,更要命的是,它开始出现“注意力衰减”——甚至把两轮前提到的“驳回后保留审批历史”的约束抛到了脑后;
- 换新会话却迎面翻车:看当前窗口已经疲态尽显,我果断新起了一个清爽的终端窗口,输入了一句自以为很清晰的指令:“继续完成刚才的审批流转功能,把前端配置抽屉补齐。”
结果接下来发生的事情让我极其崩溃: 新窗口里的 Agent 根本不知道前一个窗口经历过的漫长推演与方案抉择。它凭着大模型的默认偏好,自作主张又把方案 A 重新写了一遍!更离谱的是,它为了“完成任务”,竟然直接把前一个 Agent 刚刚写好并测通的核心数据模型全盘推翻、强行覆盖!
我盯着 Git status 里那一堆红红绿绿的冲突代码,关掉终端叹了一口气: 为什么两个能力完全相同的顶级 Coding Agent,仅仅因为换了一个新会话,彼此之间的工作就完全接不上了?
一、长任务协作中,为什么传统做法全在踩坑?
复盘了我自己在多 Agent 协作中踩过的几十次坑,我发现很多开发者在长任务遇到瓶颈时,常见的应对手段普遍存在不可调和的逻辑漏洞:
- 死磕单个长会话:直至模型彻底“智商滑坡”:
很多人的本能是不敢开新窗口,试图在一个窗口里把整个大任务从头做到尾。但无论厂商宣称上下文窗口有多大,随着上下文不断膨胀,模型的“信噪比”呈现断崖式下跌(注意力机制中的“大海捞针”困境)。聊到最后,Agent 越来越健忘、改东墙倒西墙,不仅响应极其迟钝,还会产生严重的指令漂移。 - 粗暴复制整屏历史聊天记录:把噪音当成上下文:
意识到需要新起窗口的人,往往习惯把上一个窗口里几千行的对话、测试报错、客套废话整屏复制贴给新 Agent。但这种做法无异于“饮鸩止渴”——新窗口一开局就被海量历史噪音灌满,真正的业务决策依然被淹没在冗余信息中,新 Agent 依然会抓偏重点。 - 依赖外部外挂向量记忆库:缺乏版本生命周期,幽灵背刺:
还有一部分开发者寄希望于外部向量记忆插件(Memory MCP)。但正如我之前复盘过的,扁平的向量库根本没有分支和版本意识,它无法感知方案 A 已经被方案 B 正式废弃,极容易在关键时刻把过时的草稿捞出来当成真理,反向污染代码库。
说到底,大模型需要接续,但绝不能靠“搬运聊天记录”或“依赖黑盒记忆”。严肃工程的接力,必须像人类工程师交接班一样,依赖项目仓库内白纸黑字的代码正文与一份结构化的「最小交接契约」。
基于这个思考,我在开源项目 Context Continuity (v0.1.1) 中,系统化沉淀了一套面向 Coding Agent 的「6 要素最小交接契约」。
二、传统交接 vs Context Continuity:混乱返工 vs 确定性接力
| 维度 | 传统做法 A(死磕单个长会话) | 传统做法 B(粗暴复制聊天记录) | Context Continuity(6 要素交接包 + 单一维护源) |
|---|---|---|---|
| 会话状态 | 极度臃肿(20+ 轮次),模型严重疲劳 | 新会话一开局就吃满几万 token 噪音 | 轻量清爽:新会话从零起步,无历史包袱 |
| 方案一致性 | 容易发生指令漂移,改错历史代码 | 历史废案与现行规则混杂,AI 左右互搏 | 100% 确定性:明确记录“采纳方案 B、废弃方案 A”,断绝复活可能 |
| 资产落盘 | 决策散落在聊天框内,未沉淀为代码 | 依赖外部临时记录,无法代码审计 | 单一维护源原则:前一棒必须先落盘代码/PRD,后一棒核对后再写 |
| 交接耗时 | 无交接(但排错与返工耗费几小时) | 复制、排版、修饰耗费 10~15 分钟 | 10 秒传递结构化交接包,新 Agent 1 秒定位目标 |
| 执行命中率 | 随着轮次增加,错误率直线上升 | 容易被旧报错带偏,反复尝试错误路径 | 首轮命中率极高,直奔剩余未完成项 |
三、面向 Coding Agent 的「6 要素最小交接契约」实战
在 Context Continuity 的项目治理规范(遵循 context-continuity/SKILL.md)中,当一个长任务需要切会话、换工具(例如从 Claude Code 切换到 Cursor,或者单会话轮次超过 10 轮)时,我们坚决要求:前一个 Agent 必须把本轮成果写回代码库,并在当次消息中传递标准的 6 要素交接包。
这份交接包完全摒弃无意义的寒暄与推导过程,只保留支撑继续工作所必需的 6 个核心要素:
【任务接续契约 (Handoff Context)】
1. 当前目标与授权:完成审批流转模块的前端配置抽屉与联动状态机;
2. 已采纳决定及依据:采用方案 B(状态机驱动模式),已否决方案 A(方案 A 无法支撑后续超时自动驳回扩展);
3. 实际可访问维护源:src/services/approvalEngine.ts 与 docs/prd/审批流程.md#状态机定义;
4. 当前进度与责任:后端计算核心与单元测试已全绿落盘,本次任务仅负责开发 src/components/ApprovalDrawer.vue;
5. 验证边界:运行 npm test 保持全绿,无需启动本地网络服务,待人工界面走查;
6. 不可触碰的禁区:严禁修改现有的数据持久化结构与接口字段命名。
这 6 个要素为什么缺一不可?
- 目标与授权:限定本次行动边界,防止 Agent 自作主张扩大修改范围;
- 已采纳决定及依据:最关键的一环。必须讲清选了什么、否决了什么、依据是什么,直接掐死 AI 想要“重写方案 A”的念头;
- 实际维护源路径:指引接手者直接打开代码正文,杜绝翻阅旧摘要或凭空想象;
- 进度与责任切分:讲清上一棒做到哪里、这一棒由谁负责什么,防止重复劳动;
- 验证边界:明确当前用什么命令核验,不搞形式主义的大范围回归;
- 禁区黑名单:立起底线红线,防止 Agent 顺手改掉无关的核心底层。
接手者的第一铁律:先读当前源文件核对真实代码
在 Context Continuity 规范下,新接手的 Agent 拿到交接包后,严禁凭空直接敲代码。它的第一动作必须是:
- 按照交接包提供的源文件路径,读取当前的最新代码;
- 核对上一棒留下的函数签名、单测断言与 PRD 对应章节;
- 确认事实无误后,只在本次授权的责任范围内动笔。
四、时间账与总结:确定性是多 Agent 协同的生命线
自从把“6 要素交接契约”沉淀为日常调度 Agent 的标准动作后,我算了一笔极其鲜明的时间账:
- 以前:死磕长会话或者换窗口后 AI 乱写,每次都要花 40~60 分钟 去 Git diff 里挑错、拉扯纠偏,甚至经常需要
git reset --hard推倒重来; - 现在:会话聊到 8~10 轮后,花 10 秒钟 整理出 6 要素交接包,新开清爽窗口直接喂入。新 Agent 读完源文件后一击即中,不仅 token 消耗锐减,而且彻底终结了“AI 换会话就推倒重来”的顽疾。
大模型的能力上限取决于模型本身,但多 Agent 协同的效率下限却取决于我们的工程纪律。
换个窗口不是重头开始,而是有据可依的接力。守住单一信源,用最小交接契约传递关键判断,工作才能跨会话、跨工具稳健延续。
Context Continuity 现已全面开源,规范与模板开箱即用:
- 一键安装 Skill:
npx skills add JasperLin2333/context-continuity --skill context-continuity - GitHub 开源仓库:github.com/JasperLin23…