G5|协作模式:改的是怎么说话,不是再开一套 Agent
先别把三件「协作」焊成一个开关
读完 C5 和 D5,下一件错事是把 Collaboration Mode、Feature::Collab、/side 当成同一个按钮。然后关掉 multi_agent 以为 /plan 没了,或把 Plan 模式理解成 spawn 了一个计划员。
判断先说清楚:模式是会话级 developer instructions 预设。 模板进模型目录,world_state 按差量注入 <collaboration_mode>。它不注册工具,不 spawn Thread,不改 B3 的沙箱。/plan 只是切到 Plan 这份预设;/goal 仍是完成条件(C5);子代理仍是显式工具(D5);旁路对话仍是 ephemeral fork(A2 第 5 节)。
1. Default / Plan 是说明书人格,不是 slash 本身
ModeKind 只有两个 TUI 可见值(protocol/src/config_types.rs:673-685):Default(默认,还认 code / execute 等旧别名)和 Plan。allows_request_user_input() 默认只给 Plan(:699-701)。DefaultModeRequestUserInput 是另一个 UnderDevelopment flag(G4),开了才在 Default 里也能问人。
内置预设在 models-manager/src/collaboration_mode_presets.rs:7-28:Plan 带上 Medium effort 和 Plan 模板;Default 带 Default 模板。instructions 来自 collaboration-mode-templates crate,不是你仓库根上那份可选的 plan.md。
/plan 在 TUI 里只做一件事:取出 plan_mask,set_collaboration_mask_from_user_action(slash_dispatch.rs:86-96)。协作模式开关已经是 Removed 恒开(G4);那条「Collaboration modes are disabled」分支是旧配置的残骸,不是你能关的产品闸。
没有「预设 ≠ slash」会怎样?每个前端自己拼一段「请先计划」,和模型目录里的官方模板分叉;或者把 /plan 做成新的 TaskKind,和 Regular turn 抢循环。
2. Plan 拒突变;update_plan 是另一件工具
Plan 模板自己切开两件事(templates/plan.md:7-15):
- 模式: 直到一条 developer 消息明确结束,一直停在 Plan;用户说「快去改」也只当成规划这次执行。
update_plan: Default 模式下的 checklist / 待办工具。它 不 进入或退出 Plan;在 Plan 里调用会报错。
C5 已经写过 Plan 的三阶段和「先调查再改」。G5 只钉机制:模式改的是 developer 说明书,工具改的是 Event 清单。不要给 Plan 再注册一套「计划员 Agent」。
没有这层隔离会怎样?模型在 Plan 里用 update_plan 假装自己在执行;或 Default 里一份待办清单 被理解成已经切到 Plan,仓库被先改了。
3. 注入走 world_state 差量,不是每轮重贴全文
CollaborationModeState::from_collaboration_mode(core/src/context/world_state/collaboration_mode.rs:24-78)先问模型目录有没有这个 mode 的官方文案,没有再用 mask 上的 override。若 update_plan 工具没广告出去,内置预设会 without_update_plan_instructions 剥掉那一段——避免说明书教一件模型看不见的工具。
快照带上 mode、model、instructions 的 hash。WorldStateSection 的 render_diff 没变就 不注入;变了才追加带 <collaboration_mode> 标记的 fragment(开闭标签在 protocol 常量里)。切回 Default,是再追加一份替换通知,不是 rewrite 旧 item。这是 B4 同一条差量纪律。
没有差量会怎样?每次 /plan 都把整份模板灌进历史,prompt cache 全 miss;切回去还留着「你仍在 Plan」的旧块,模型和 UI 各执一词。
4. 对照:模式、子代理、旁路、Goal 不是一层
| 改什么 | 不改什么 | |
|---|---|---|
| Collaboration Mode | 这轮怎么合作(说明书) | 工具表、Thread 数、沙箱 |
Feature::Collab(multi_agent) | 子代理工具在不在 Router | Plan / Default 文案 |
/side /btw | 开一条不污染主线的 ephemeral fork | 主 thread 的 mode |
/goal | thread 上的完成条件 | 先调查还是先改 |
实现确认弹窗(turn runtime 里「Plan 做完了,要不要动手」)是模式退出时的 UX,不是新的 TaskKind。C5 继续讲 Goal 的寿命和并行 worktree。
没有这张表会怎样?关 multi_agent 以为 Plan 没了;开 /side 以为进入了 Plan;给 Goal 再套一份 Plan 模板当「更长的计划」。四件事正交,才能各自抄。
5. 结语:带走一句话
协作模式改的是模型这轮怎么合作——一份可差量替换的 developer 说明书——不是再开一条 Thread,也不是 multi_agent 那个工具门闩。