ARTICLE · 1058601
两个 AI 搭档,一句话就能交接
不靠聊天,不靠传话,状态活在文件里,不活在对话里。
—— 李林
一个干活的,一个查错的,中间只靠一本共享笔记。新会话开起来,说一声“去执行”,它就知道该干什么。不靠聊天,不靠传话。
你有没有遇到过这种情况:跟一个 AI 聊了两小时,把需求、踩的坑、做到哪一步全交代清楚了。然后换了一个新会话,它又从头问你一遍。你气得想摔键盘。
问题不是 AI 笨,是状态活在对话里。对话一断,什么都没了。
我跑了 41 张任务卡、56 份裁决,两个 AI 角色换了 3 次模型和供应商,全程零重复交代。核心就一句话:
状态活在文件里,不活在对话里。

状态写在笔记本里,不写在聊天里——换人、换班,翻开这一页就能接着干。
本文看点
球权只有一个变量、两个值:谁拿到棒谁干,没拿到的等
四层读取预算:每个会话最多读几 KB,省 token 全看这一节
骨架不动,新项目五步、约十分钟搬过去
01人只说三句话
两个 AI 角色一个叫“执行”,一个叫“评审”。人不用当传话筒,只说三句口令:

这三句永远不变——不含卡号、不含路径、不含阶段。
去执行
去检查
只看,别发卡
“去执行”(对干活的 AI):翻开共享笔记里写着的那一步,照做就行,不用从头讲背景。
“去检查”(对查错的 AI):把上轮交回来的东西重新核一遍,签字,把棒交回去。
“只看,别发卡”(对查错的 AI):就回一段话告诉我现状,别写文档、别做交接动作。这里的“卡”就是任务卡——发卡,是写一张新任务卡把活交出去,看一眼用不着这个动作。
口令一旦需要改,说明方案出了问题。三句永远不变,这是铁律。
顺带说清标题里那个“一句话”:每一次交球,人说的其实只是这三句里的一句。
02球权:谁拿到棒谁才干
两个 AI 之间只有一个状态变量叫 turn,只有两个值:执行方 / 评审方。
规则极其简单:不是自己的球就停,不做任何事,也不问用户。

拿到棒才干,没拿到就等——不打架,不抢活。
评审方 ──签裁决、发卡、turn=执行方──▶ 执行方
执行方 ──交汇报、turn=评审方────────▶ 评审方
三种异常情况,一律停下报对面,不许自行推断:卡文件不存在 / 汇报已交但 turn 没翻 / 状态与现实矛盾。
03读取预算:省 token 全看这一节
把所有内容分成四层,每层定一个“最多读多少”的限额,超了就该拆,别硬塞:
第一层(L0,开机自动塞的):客户端一开就自动加载的那几条铁律,每个会话只加载一次,控制在 2KB 以内。正文都挪到别的层,这里只留指针和最要紧的规矩。
第二层(L1,开工必读):现在轮到谁、干哪张卡、这轮要做什么,每个会话读一次,控制在 1KB 以内——读这一段就该知道“这轮干什么”。
第三层(L2,用到才读):当前这张任务卡、上一轮的汇报、最近一份裁决,用到哪份才读哪份,只读当前那一份,单份控制在 10KB 以内。太长的卡就该拆,别写巨卡。
第四层(L3,平时别碰):历史归档、需求设计文档、旧汇报,只在你要追溯“当初为什么这么定”时按编号去查,没有上限,但绝不在开工时默认读。
一条纪律:不许 cat 状态文件。用一行命令只打出需要的字段。一个会话只读一次,不重读。比如这样一行:
jq -r '.turn, .awaiting' STATE.json
04活文件 vs 归档:笔记本不会长胖的唯一办法
任何随时间单调增长的字段,都不许留在“开工必读”的文件里。
典型的增长型字段:history(每轮追加)、log、changelog、已完成清单。它们不删——只是搬到归档文件,状态文件里只留最近 2~3 条 + 一个指针。
警戒线:状态文件 > 8KB 就该拆。拆之前先量一下各字段占比,占比最大的那个基本就是该搬走的那个。
05换会话检查单
交球前(离场方,5 条)
1 状态文件与磁盘现实一致(卡在、汇报在、turn 翻了)
2 该提交的都提交了,工作树干净
3 本轮结论写进 history(append 到归档,状态文件只留最近 3 条)
4 若这轮有“下一任接不住就会出事”的东西,单独写一份交接手册,在 awaiting 第一句点名它
5 手册里每条复核命令自己真跑过,文中数字与产物里的数字相等
接手后(进场方,3 条)
1 先读 L0,再用一行命令读 L1(不许 cat)
2 turn 不是自己 → 停,回一句“球不在我这儿”
3 背景只读两份:自己那份入口须知 + 最近一份裁决。不要通读全仓
06已知失效模式与兜底
这套方案也会坏,但坏的方式是固定的,所以每种都有兜底:
1 开机注入没被加载(工作目录不对、客户端不支持)——新会话不知道该读什么。兜底:准备一句固定开场白“读入口文件,然后去执行”,不含任务号,永远不用改。
2 读了却不照做(小模型更容易跳过读状态直接动手)。兜底:对面每轮独立复核,所有改动都在 git 里,出了问题能回滚。
3 状态文件长胖(每轮读它比读代码还贵)。兜底:用第四节说的警戒线,超过就拆,把增长型字段搬进归档。
4 两边对“事实”说法不一(各说各的)。兜底:判断“在不在库”只认 git 命令的结果;判断“在不在盘上”必须写清楚哪台机器哪个目录、贴上绝对路径。
5 标签和现实对不上(写着已完成,其实没做)。兜底:按实际产物核对,不按标签信;关掉一项就同步改状态。
07搬到新项目:五步,约十分钟
1 建目录骨架(STATE.json + 指令/ + 汇报/ + 裁决链)
2 建状态文件,turn 先给评审方
3 两端 L0:执行侧写 AGENTS.md,评审侧填进客户端自定义指令(记得写绝对路径)
4 各写一份入口须知:规矩、红线、踩过的坑
5 空会话验一次:只说口令,看它第一个动作是不是去读状态文件
不要改的是骨架:三句口令、四层读取预算、球权二态机、活文件/归档分离。要改的只有:角色叫法、目录名、红线清单、绝对路径。