# 主 Agent 线程状态文档与增量同步设计 日期:`2026-04-04` ## 1. 背景 当前 Boss 已经具备: - 新设备导入时,主 Agent 会主动理解活跃线程的项目目标、当前进度、技术架构、阻塞点和建议下一步。 - 已导入设备上的活跃线程一旦继续活动,系统会自动同步项目理解,并在主 Agent 会话里补轻量提醒。 - 主 Agent 当前已经能读取最近的活跃项目理解,并基于这些理解给出下一步建议和接手提示。 当前问题也很明确: 1. **主 Agent 为了跟上线程进展,仍然会在不少场景重新向线程发起完整理解请求。** - token 消耗偏高 - prompt 体积偏大 - 当活跃线程很多时,成本会快速放大 2. **如果只依赖“完整项目理解快照”,实时性又不够。** - 用户继续在电脑上操作 Codex 线程时,主 Agent 可能落后一段时间 - 主 Agent 接手时,需要重新拉很多上下文 3. **把状态写回线程项目工作区作为文档文件不可取。** - 会污染工作区 - 容易制造脏 diff - 容易被误提交 - 多线程并行时容易冲突 因此,这个设计的目标是: - 让主 Agent 平时更多依赖结构化状态,而不是反复扫整段聊天历史 - 保持接近实时的项目进展同步 - 只在关键时刻多花 token - 不污染线程项目工作区 ## 2. 目标与非目标 ### 2.1 目标 1. 为每个真实线程建立一份 **线程状态文档**,作为主 Agent 理解线程的主入口。 2. 为每个线程建立一组 **线程进展事件**,用于记录最近的轻量增量变化。 3. 主 Agent 默认改为基于: - 线程状态文档 - 最近几条线程进展事件 - 项目记忆 来理解活跃线程。 4. 仅在关键时刻再向线程发起完整深拉,以保持高实时性。 5. 让“新设备导入”和“已导入设备的持续同步”共用同一套机制。 6. 在线程详情或会话信息里提供一个只读的 `线程状态` 入口,便于用户查看主 Agent 当前掌握的状态。 ### 2.2 非目标 1. 不把线程状态文档写入用户项目仓库。 2. 不把线程状态文档开放成默认可编辑内容。 3. 不引入向量数据库、复杂 embedding 检索或多级知识库系统。 4. 不重写现有群聊审批、设备导入或主 Agent 记忆架构。 5. 不把所有线程活动都升级成完整项目理解请求。 ## 3. 设计概览 本设计采用三层结构: 1. **线程状态文档** - 稳定快照 - 代表“当前线程现在是什么状态” 2. **线程进展事件** - 轻量增量 - 代表“最近发生了什么变化” 3. **关键时刻深拉** - 只在主 Agent 真要接手、真要调度、真要做关键判断时触发 - 用更高 token 成本换取更高准确度 主 Agent 后续默认读取路径为: 1. 当前用户指令 2. 对应线程/项目的线程状态文档 3. 最近 3 到 5 条线程进展事件 4. 项目记忆 5. 必要时再向线程发起一次深拉 ## 4. 数据模型 ### 4.1 ThreadStatusDocument 新增线程级状态文档模型。 建议字段: - `documentId` - `projectId` - `threadId` - `threadDisplayName` - `folderName` - `deviceId` - `projectGoal` - `currentPhase` - `currentProgress` - `technicalArchitecture` - `currentBlockers` - `recommendedNextStep` - `keyFiles: string[]` - `keyCommands: string[]` - `updatedAt` - `sourceTaskId` - `sourceKind` 说明: - `currentPhase` 用于把线程从“当前在做什么阶段”抽出来,例如: - 需求梳理 - 架构设计 - 功能实现 - 联调验证 - 修复回归 - 部署上线 - `keyFiles` 和 `keyCommands` 不追求完整,只保留主 Agent 接手时最需要知道的关键点。 ### 4.2 ThreadProgressEvent 新增线程增量进展事件模型。 建议字段: - `eventId` - `projectId` - `threadId` - `threadDisplayName` - `deviceId` - `eventType` - `phase_changed` - `progress_updated` - `blocker_added` - `blocker_resolved` - `next_step_changed` - `architecture_updated` - `handoff_ready` - `summary` - `phase` - `blockerDelta` - `nextStepDelta` - `createdAt` - `sourceTaskId` - `sourceMessageId` 说明: - 这层的目标不是完整审计,而是为主 Agent 提供低 token 的“最近变化摘要”。 - 事件数量需要限流和裁剪,例如每线程只保留最近 20 条。 ### 4.3 与现有模型的关系 当前已有: - `ProjectUnderstandingSnapshot` - `MasterAgentMemory` - `threadContextSnapshots` 本次关系建议: - `ProjectUnderstandingSnapshot` 继续保留,用于兼容现有项目级理解视图。 - `ThreadStatusDocument` 成为线程级主结构化状态。 - 项目级 `projectUnderstanding` 继续作为“项目展示层聚合结果”,但底层来源应逐步转向线程状态文档。 - `MasterAgentMemory` 继续负责长期记忆,不负责替代线程当前状态。 - `threadContextSnapshots` 继续负责上下文预算和风险状态,不负责承载项目理解正文。 ## 5. 同步策略 ### 5.1 全量理解刷新 触发场景: 1. 新设备导入后的首次理解 2. 已导入设备中,主 Agent 第一次接触某个线程 3. 用户明确要求主 Agent 接手当前项目 4. 检测到线程进入明显新阶段 5. 距离上一次全量理解已经超过阈值 行为: - 向目标线程发起一次结构化“线程状态理解”任务 - 更新整份 `ThreadStatusDocument` - 必要时同步更新 `ProjectUnderstandingSnapshot` - 对主 Agent 会话补一条轻量进展提醒 ### 5.2 轻量增量同步 触发场景: 1. heartbeat 检测到线程最近活跃 2. 线程刚回写了新执行结果 3. 但当前还没有进入需要完整深拉的关键阶段 行为: - 不重做完整线程理解 - 只抽取一条轻量 `ThreadProgressEvent` - 必要时更新 `ThreadStatusDocument` 中的少数字段: - `currentProgress` - `currentBlockers` - `recommendedNextStep` - `updatedAt` ### 5.3 关键时刻深拉 触发场景: 1. 主 Agent 要真正接手当前项目 2. 主 Agent 要发起线程调度或群聊协作 3. 主 Agent 要给出指导性的下一步开发建议 4. 当前线程状态文档和最近事件不足以支撑判断 行为: - 向线程发起一次完整深拉 - 允许在这个关键时刻多花 token - 更新线程状态文档并刷新主 Agent 的接手上下文 ## 6. Prompt 组装策略 主 Agent 以后默认不再反复扫线程完整聊天历史。 新的理解顺序为: 1. 用户当前消息 2. 线程状态文档 3. 最近 3 到 5 条线程进展事件 4. 项目级长期记忆 5. 当前线程上下文预算和风险信息 6. 必要时才深拉线程 这样做的收益: - token 成本更稳定 - 主 Agent 理解更连续 - 接手时不需要每次从零重新扫历史 ## 7. 主 Agent 与线程的交互变化 ### 7.1 线程状态理解 Prompt 全量理解时,线程不再返回泛化的“项目理解 JSON”,而是更明确地返回线程状态文档字段。 要求: - 只返回结构化 JSON - 不返回无意义内部字段 - 不重复线程 ID、目录路径、设备 ID - 只保留主 Agent 接手真正需要的事实 ### 7.2 轻量事件 Prompt 增量同步时,线程不需要重写整份文档,只需返回: - 是否进入新阶段 - 最近完成了什么 - 是否出现新阻塞 - 下一步是否变化 这类 prompt 需要尽量短,并显式禁止输出冗长总结。 ## 8. 前台体验 ### 8.1 主 Agent 会话 继续保留轻提醒,但来源改成“线程状态文档 + 最近进展事件”。 可见文案示例: - `已同步线程状态:...` - `最新进展:...` - `建议下一步:...` - `主 Agent 可接手:...` ### 8.2 线程详情 / 会话信息 新增一个只读入口:`线程状态` 展示内容: - 当前目标 - 当前阶段 - 当前进度 - 技术架构 - 当前阻塞 - 建议下一步 - 关键文件 - 关键命令 - 最近更新时间 默认不可编辑。 ### 8.3 已导入设备与新导入设备 两者统一走同一套机制: - 新导入设备:首次理解 - 已导入设备:活跃线程持续增量同步 - 主 Agent 最终都读取同一套线程状态文档和最近进展事件 ## 9. 约束与风险 ### 9.1 不能把线程状态文档写进项目仓库 原因: - 污染工作区 - 容易制造脏 diff - 容易被误提交 - 多线程并行修改时易冲突 所以文档必须由 Boss 自己维护,并保存在 Boss 状态层。 ### 9.2 不能完全放弃深拉 如果完全变成“只查文档”,主 Agent 会因为文档滞后而接手失败。 所以深拉仍然保留,但只在关键时刻触发。 ### 9.3 增量事件必须限流 如果线程每次活动都写大段事件,最终只是把 token 压力从“全量理解”转移成“事件堆积”。 因此: - 每线程只保留最近有限数量事件 - 重复事件应合并 - 明显无价值事件不写入 ## 10. 分期实现建议 ### 第一批 1. 新增 `ThreadStatusDocument` 2. 新增 `ThreadProgressEvent` 3. 新增线程状态文档的全量刷新任务 4. 主 Agent prompt 默认改为读取“线程状态文档 + 最近事件” ### 第二批 1. 新增轻量事件同步任务 2. 为 heartbeat / thread reply 增加“轻量事件优先、全量理解兜底”的策略 3. 主 Agent 会话补更稳定的轻提醒 ### 第三批 1. 在线程详情或会话信息增加 `线程状态` 2. 对主 Agent 接手场景补更明确的接手卡片 3. 对阶段切换、阻塞变化做更强的事件归并 ## 11. 验收标准 1. 主 Agent 平时不再因为线程每次活动都重跑完整项目理解。 2. 活跃线程继续推进时,主 Agent 仍能在较短时间内获得最新进展。 3. 当用户明确要求主 Agent 接手项目时,主 Agent 能依赖线程状态文档与最近事件快速进入正确上下文。 4. 不会向线程项目工作区写入状态文档文件。 5. APP 中能查看线程状态,但默认不可编辑。