--- name: delegate-brief description: 交付期第 9 步,派发:先按两个判据定自己做还是派,再过派发门;派时给齐目标与指令、边界、规格文件、信息包,框住读量,原始结果写进文件、报告限行。主代理准备派写者、评审者或验收者,或人说「派个子代理」「这活派出去」时加载。自己做的工作不加载。为什么默认自己做归 think-closed-loop。 --- # 派发简报 主代理自己做是默认,派子代理是例外。派了就要让子代理不丢上文、不越界、不自报成功,也不白花钱。本技能是思维模型 `think-closed-loop` 落在派发上的做法:为什么默认自己做、转出去会丢什么,道理在那里;本技能只写判据、清单与规则。 ## 两个判据 | 判据 | 怎么判 | | --- | --- | | 做对它用到多少说不出来的上下文 | 少:说清它比做它短得多,检查它比做它便宜,给了规格就能做完、做完能用确定的办法查。多:要用到人纠正过什么、哪些路试过不通、决定为什么这么定 | | 中间过程是不是又大又用完就扔 | 是:要读很多文件、试很多次、产出大段中间结果,而主代理之后用不上。不是:中间过程小,或之后还要用 | 两个判据交叉成一张表: | | 用到的上下文少(说得清、验得了) | 用到的上下文多 | | --- | --- | --- | | **中间过程又大又用完就扔** | 派出去,用便宜的档。最划算的一格 | 自己定方向和判据,把其中读得多的那一段切出来派 | | **中间过程小,或之后还要用** | 自己做。派出去光开工就亏 | 自己做 | 只有左上一格整件派出去。右上一格是拆开:判断自己做,体力派出去。 主代理自己上手做的事,每条一句为什么: - 设计与建模:类型、签名、边界、全化表。它决定后面所有步。 - 判断验收过没过,以及没过时根因在哪。它要用到全部承诺。 - 把子代理的结果合回来、解决冲突、下结论。几块结果之间的关系只有主代理看得全。 - 要不要问人,以及怎么问。它要用到人说过的每一句话。 - 维护 plan,写处置,向人汇报。计划者就是执行者。 - 任何碰到人纠正过的地方的事。纠正的分寸写不进简报。 ## 派发门 两个判据落在左上一格,或右上一格切出来的那一段,才过派发门。三问是两个判据的具体情形,三个都不是就自己做。简报第一行写两个判据各落在哪、命中的是哪一问。 | 理由 | 判据 | | --- | --- | | 主上下文已膨胀退化 | 能指出退化的迹象:重复读同一文件、忘了早先的决定、回答变短变糊;或这份工作要读的量明显会把主上下文填满 | | 需要新鲜且用完即弃的上下文,并且能并行 | 这份工作读的东西主上下文不需要,做完就能扔;或几份互不相交的工作能同时跑 | | 主代理在这类工作上选不对工具或被冲突指令卡住 | 同一类错误已经出现过两次 | 不派的典型:单条依赖链、一个上下文装得下且没有长尾的工作、已经指到文件与行的单点修复、目标已知的查找、本身只有几千 token 的小活。要新设一种子代理,先试试把它的做法写成技能让主代理自己按需加载,试过不行再设。角色数量只减不增。 派出去的一块多大,由主代理验得完多少定:验不完就只能读报告、信自述,拆成几块,每块末端能用确定办法验。人对主代理的一程多大是同一个结构,代理在那里对人说。看到人这一侧的风险就说一次:提醒、依据、建议、选择。做法加载技能 `candid-friend`。 ## 派什么、用哪一档 从项目接入点取模型与档位政策;没有政策时按下表: | 这类活 | 档位 | 为什么 | | --- | --- | --- | | 找东西、读很多文件、整理上下文包、调研外部资料 | 最便宜档 | 读得多,读完就扔,不用判断 | | 规格完整的实现:单模块,照着类型与签名写 | 经济档 | 说得清,测试验得了 | | 规格完整但跨很多文件的改动 | 默认档 | 量大,需要一点整体感 | | 独立的对照验证、跑探针 | 经济档 | 要的就是和主代理不对齐的上下文 | | 长时间盯一个测量或一条流水线 | 不派,用后台任务加完成通知 | 不需要模型在场 | 顶档不当子代理。例外是内核级的难题(内核原语、生命周期、并发与跨进程故障、细微算法),而且规格写得清。顶档的单价是经济档的几倍,见[钱是怎么花的](cost.md)。 默认从表里的档起步,纠偏不行先升推理档位,再升模型。写者、评审者与验收者不用最便宜档。 ## 怎么派才便宜:八条 道理与价格在[钱是怎么花的](cost.md)。 1. **规格写进文件,简报只指过去。** 文件能重用:子代理中断了,换一个接着读,不用重写简报。 2. **不分叉大上下文。** 要子代理知道的事写进规格文件,不靠继承主代理的上下文。 3. **框住读量。** 写明先读什么、读到哪停、不读什么;互不依赖的读取让它在同一步里一起发出,每多一步就多一轮模型。 4. **小活不派,零碎的合并派。** 开工费每个子代理付一次。 5. **原始结果写文件,报告限行。** 见「交回」。 6. **派出去之后接着干别的。** 不干等,不轮询。 7. **续用还是新开。** 子代理刚停、它的缓存还在时,追加要求比新开便宜。隔了很久再用,它的整个上下文要重写,不如带一份合并后的规格新开。 8. **记账。** plan 子代理表的 token 一列,数从完成通知里抄。 9. **长验证不留在子代理里。** 子代理结束回合就等于交回,它等不了完成通知,只能占着位置循环等。跑得久的验证让它列成「待验证」交回,派发者合回后自己跑。它起的后台进程在交回前结束,不然进程退出时还会把它叫醒一轮。 ## 四样东西缺一不可 1. **清晰的目标与指令。** 端到端要做成什么,从使用者视角写;完成即止。 2. **行动边界。** 写范围写成路径,每个路径带推出依据;不改的调用方写理由与停止条件。禁写清单。本闭包特有的停止条件,含「碰到规格没覆盖的情况就停下交回,不猜」。能用宿主的权限和门禁实现的硬限制就不靠提示词。 3. **必须遵守的规格。** 写进一个规格文件,简报的规格一节指过去:spec 的相关节、不变式、细化设计里的类型与签名、人纠正过的原话。不内联大段。诊断类与优化类的简报先给性质与两三个候选假设,不派「多做几次实验看看」:先答三问:应然、实然、差异。做法加载技能 `think-ought-vs-is`。 4. **参考用的信息包。** 整程包与本切片开工包的路径;先读什么、读到哪停、读量上限。 缺任何一样,子代理的行动就不可控、难预测。填[派发简报模板](brief-template.md)。 写范围这样推:在基线上从要改的符号或文件出发,找调用方、导入方,以及读取它的测试与文档;要改的进写范围,不改的写理由与停止条件。两个子代理并行前,先点名它们争用的文件、类型或资源,点不出来就并行;写范围两两不相交。一个子代理不同时承担几个成员的实现、用例、文档与证据,范围大时拆开。 ## 前置环境 派发者备齐工作树、分支、基线、依赖、构建产物与环境变量,写进简报。子代理进场后核对检出,不装依赖。日志与临时文件写进简报给的过程目录,不写在被跟踪的目录里。借用别的工作树里的东西之前确认没有写者在改它,借用只读。 ## 等待与追加 - 等完成通知,不轮询。等的同时推进不依赖它的工作:缓存有寿命,主代理停着干等超过它,下一轮整个主上下文按写缓存的价重付。 - 主动看长跑的子代理。记下每个子代理的开始时间。跑过 10 分钟的,用工作树事实看进展:提交、状态、改动统计、产出目录的修改时间、日志尾部。不读子代理的会话记录。到 30 分钟及其整倍数时按 `one-lesson-rule` 检查健康度。 - 越界、方向偏、卡在同一失败、范围蔓延或在做测不出结果的工作时,追加要求。每条追加先写进简报的「追加记录」再发出,验收按原简报加追加记录判断。 - 要立刻改变做法就停掉它,自己接手或带完整范围重派;它在收尾就让它做完。 - 同一闭包的追加,子代理刚停、缓存还在时续用原子代理。隔了很久,或新一轮修复、换人与升级,一律新开,新的规格文件合并原简报、追加记录与上一轮报告。 - 子代理中途停下没交回时,读工作树判断做到哪一步,写接续简报,保留它的改动。 - 完成通知只表示通知送达。用工作树事实核对:分支头、提交与日志。完成通知里的 token 数抄进 plan 的子代理表。 ## 交回 原始结果写进交回目录的文件:改了哪些文件各改了什么;验收逐项的命令、退出码与关键输出;门禁日志的时间与所跑的提交号;变异表;圈外发现(判法见入口[圈外的问题](../single-session-dev-flow/SKILL.md#圈外的问题));没覆盖到的项。报告限行,缺省 30 行以内,只带五样:一句结论;提交号;证据文件的路径;偏离规格的地方;只有人能定的事。 防的仍是自报成功。报告是指针,不是证据:主代理按需读文件、在写者的分支头自己复跑,再下结论,不把子代理的结论直接当事实。验收只认 spec 的标准,不认子代理对自己工作的报告。报告短,是因为它进了主上下文要陪跑到最后;原始结果全,是因为它在文件里,用时才读。 交回里有待定项时逐项分类:能自己定的写依据;只有人能定的写为什么。 ## 验收防作弊 每个结论带证据,证据要真的检验了它声称检验的东西。做法加载技能 `think-evidence`。下面是落到派发上的规则。 验收者不是写者。写新测试先确认它变红。简报要求写者为每条新测试做一次手工变异,按字节还原,变异表写进交回文件:改了什么、哪条用例变红、退出码。不接受放宽或删除已有断言的交付,简报明确要求改写的除外。验收失败先在基线上复跑同一检查,分清新失败与旧失败。 每条缺陷归写者、规格或环境三者之一,依据是独立验收报告或派发者在写者分支头的复跑。规格缺陷由派发者修规格文件,并记追加记录。 ## 派评审者时 评审者只做确定性核对:给它 spec、不变式、改动与读数,让它逐条核承诺有没有做到。只给证据路径,不给派发者的结论。不派「找问题」「挑战设计」的对抗性评审,那种评审的上下文和实施方不对齐,带来过度设计和鸡毛蒜皮。只读评审只在本工作树内搜索。缺字段的报告不判通过。 这条原则落在简报上,不落在角色上:用项目自带的评审角色或通用子代理,都按[简报模板](brief-template.md)写「允许的动作」「不做的事」两小节,发出前跑 [`scripts/check-brief.mjs`](scripts/check-brief.mjs)。它核九节齐、评审者与验收者有这两小节,并拦下写在「不做的事」以外的对抗式要求;新模板的简报另核规格文件存在、有读量上限、有报告行数上限,旧模板的简报只给提示。原则只写在技能里而不进简报,换一个派发技能就丢了。 ## 升级 两轮修复不收敛时,先质疑判定本身是否正确、合理、本阶段必需。仍要修的,先答三问:应然、实然、差异。做法加载技能 `think-ought-vs-is`。再按起点档位选路径:起点是贵档,提高推理档位或由更强的模型接手,接手者先从更高视角分析根因再修;起点是便宜档且时间允许,丢弃原成果由强模型从基线重做,原分支只作对照。记下所选路径与理由。 ## 合回 子代理只在自己的分支提交,不推送、不合并。派发者从子代理的本地分支合回:先读 diff,再在它的分支头复跑门禁,然后合并。合回后按 `cleanup` 清理它的工作树与分支。 ## 派哨兵时 `one-lesson-rule` 的哨兵是一类固定的只读子代理:便宜档、后台常驻、自己计时、只写汇报目录。简报填[哨兵简报模板](sentinel-brief-template.md),四样东西与普通简报相同,边界里多一条读入上限,规格里写清对齐层面与六问的判据。派出去之后在 plan 的子代理表记一行,状态写轮数。 ## 撤掉或合并一种子代理 带与不带各跑一遍同样的切片,比哪些验收项翻转了,不比总分。跑两次以上再下结论。一次只改一处。 ## 外部技能 - 派发的流程加载技能 `pstack:poteto-mode` 中的子代理章节。 - 并行扇出多个子代理并汇成一份报告,加载技能 `pstack:swarm`。 - 并发写同一文件、分支或状态之前先消除共享,加载技能 `pstack:principle-separate-before-serializing-shared-state`。