# Boss 系统架构 更新日期:2026-03-23 ## 架构目标 Boss 要解决的问题不是“如何让一个 agent 写代码”,而是“如何让一个主控端持续调度多个运行在不同设备上的编码 agent,并保持对话、状态和审计一致”。 核心目标: - 用户始终只和一个主账号对话 - 主账号能把任务拆给多个 worker - 每个 worker 可以运行在真实 Windows 或 Mac 设备上 - 用户可以随时改变需求 - 系统支持中断、续跑、审批、回滚、审计 ## 总体架构图 ```mermaid flowchart LR User["用户"] --> Chat["聊天入口
Slack / Telegram / 飞书 / 企业微信"] User --> App["独立控制台
Web / Desktop"] Chat --> Gateway["API Gateway"] App --> Gateway Gateway --> Session["Session Service"] Gateway --> Task["Task Service"] Gateway --> Notify["Notification Service"] Session --> Planner["Manager Agent
Codex"] Task --> Planner Planner --> Queue["Queue / Workflow Engine"] Queue --> Scheduler["Scheduler"] Scheduler --> Worker1["Windows Worker A"] Scheduler --> Worker2["Windows Worker B"] Scheduler --> Worker3["Mac Worker"] Worker1 --> Runtime1["Agent Runtime
Codex CLI / Claude Code / MCP Tools"] Worker2 --> Runtime2["Agent Runtime
Codex CLI / Claude Code / MCP Tools"] Worker3 --> Runtime3["Agent Runtime
Codex CLI / Claude Code / MCP Tools"] Session --> Store["Postgres"] Task --> Store Queue --> Store Worker1 --> EventBus["Event Bus"] Worker2 --> EventBus Worker3 --> EventBus EventBus --> Notify EventBus --> Store Planner --> Memory["Project Memory / Vector Store"] Worker1 --> Git["Git Provider"] Worker2 --> Browser["Browser / Playwright"] Worker3 --> IDE["Local IDE / Terminal / Filesystem"] ``` ## 分层设计 ### 1. 入口层 职责: - 接收用户自然语言 - 展示项目进度、任务树、审批请求 - 承载多端对话入口 组成: - Web 控制台 - Desktop 控制台 - Slack / Telegram / 飞书 / 企业微信 Bot 设计原则: - 独立 App 是主控制面 - 聊天工具只做轻入口和通知审批 - 所有入口共享同一个会话和任务状态 ### 2. 会话与任务层 职责: - 维护项目级会话 - 存储用户意图、任务树、依赖关系 - 接收需求变更并触发重规划 核心对象: - `project_session` - `task` - `subtask` - `message` - `approval_request` - `worker_assignment` 设计原则: - 任何需求变更都不是覆盖旧状态,而是追加一条事件 - 主控 agent 根据最新状态决定继续、暂停、取消还是重规划 ### 3. Manager Agent 层 职责: - 读取当前上下文 - 把用户自然语言翻译成任务树 - 给不同 worker 分派工作 - 汇总各 worker 回传结果 - 把技术执行过程重新组织成面向用户的进度播报 建议实现: - 首选 Codex 作为 manager brain - manager 不直接执行重活,主要负责规划、协调和总结 为什么 manager 要单独存在: - 用户说的是需求语言,不是底层执行语言 - 设备 worker 报的是技术状态,不是业务状态 - manager 负责在这两者之间做翻译 ### 4. 调度与工作流层 职责: - 排队 - 优先级控制 - 并发控制 - 超时重试 - 中断恢复 - 审批等待 设计原则: - 长任务必须通过工作流引擎或持久队列驱动 - 不能靠单个进程中的内存状态维持任务 推荐能力: - 任务可挂起 - 任务可人工恢复 - 子任务状态独立 - 支持依赖关系图 ### 5. Worker 层 职责: - 在真实设备上执行具体开发动作 - 拉代码、建 worktree、改文件、跑测试、创建 PR - 上报结构化事件和心跳 部署方式: - 每台设备安装一个 `boss-worker` - worker 持久连接到 control plane - worker 内部再调用 Codex CLI、Claude Code、Playwright、MCP 工具等 为什么 worker 必须是 daemon: - 需要持续在线状态 - 需要接收取消和暂停命令 - 需要中途回传事件 - 需要在主控端丢线后继续执行 ### 6. 工具层 职责: - 提供标准化工具访问 - 屏蔽不同设备的具体环境差异 建议接入: - Git - Filesystem - Terminal - Browser automation - Issue tracker - Chat connector - CI / Test runner 建议协议: - 工具接入优先使用 MCP - agent-to-agent 通信前瞻引入 A2A ### 7. 存储与审计层 职责: - 保存消息、任务、事件、状态快照 - 为用户提供会话恢复与审计追踪 必须保存的内容: - 用户消息 - manager 规划结果 - worker 事件流 - 审批记录 - 高风险工具调用 - Git 变更摘要 ## 关键交互路径 ### 路径 1:用户发起新任务 1. 用户在 Web 或聊天入口发起需求 2. Session Service 追加消息 3. Manager 生成任务树 4. Task Service 创建主任务和子任务 5. Scheduler 根据设备能力分配 worker 6. worker 执行并回传事件 7. manager 定期汇总进度给用户 ### 路径 2:用户中途改需求 1. 用户说“先暂停 A,改成先修登录问题” 2. 新消息进入当前 project session 3. manager 读取活动中的任务树 4. manager 标记哪些子任务失效,哪些继续保留 5. Task Service 下发 `pause / cancel / replan` 6. worker 接收并安全停止当前步骤 7. manager 输出新的计划和最新进度 ### 路径 3:高风险审批 1. worker 申请执行高风险操作 2. control plane 生成审批请求 3. 用户在 App 或聊天入口确认 4. 工作流恢复执行或终止 ## 协同开发模式 ### 模式 A:独立开发 - 一个子任务绑定一个 worker - worker 自己完成从理解、编码到测试的闭环 - manager 只做验收和汇总 适合: - 低耦合功能开发 - 单一 bug 修复 ### 模式 B:协同开发 - manager 先做任务拆解 - 不同 worker 分别负责不同模块或阶段 - 通过 shared context 和中间产物衔接 适合: - 横跨前后端的需求 - 需要并行研究和实现 ### 模式 C:研究先行 - 多个 worker 先做调研、复现、定位 - manager 再决定由哪台设备进入实现 适合: - 不确定问题根因 - 风险较高的问题 ## 设备调度策略 推荐调度维度: - OS 能力 - 当前负载 - 工具能力 - 项目亲和性 - 上下文热度 - 风险等级 示例: - 需要 Xcode 的任务优先给 Mac - 需要 Windows 原生应用自动化的任务优先给 Windows - 同一 repo 的后续任务优先分给最近处理过该 repo 的 worker ## 为什么不建议一开始就做的东西 - 不建议一开始做跨团队多租户 SaaS - 不建议一开始做复杂计费系统 - 不建议一开始就做完整 A2A 联邦网络 - 不建议一开始支持太多聊天平台 第一阶段只要把下面几件事跑通: - 主账号持续对话 - 三台机器在线 - 子任务拆分 - 实时进度回传 - 可暂停、可继续、可取消 - 可审批高风险操作 ## 当前推荐架构决策 - 主控面:Web 优先,后续补 Desktop - Manager:Codex - Worker runtime:Codex CLI + Claude Code 混合 - 工具协议:MCP - 任务编排:持久队列或工作流引擎 - 存储:Postgres - 事件流:Redis Streams 或消息队列 ## 架构风险 ### 风险 1:多个 worker 改同一仓库互相踩踏 规避方式: - 每个任务独立 worktree - 每个任务独立分支 - 合并前必须做 diff 汇总和冲突检查 ### 风险 2:需求变化导致长任务上下文混乱 规避方式: - 所有需求变化事件化 - manager 在重规划前必须读取当前状态快照 ### 风险 3:聊天入口承载太多复杂交互 规避方式: - 长会话、文件树、终端流只放在独立 App - 聊天入口只承担轻操作 ### 风险 4:worker 执行权限过大 规避方式: - 把危险命令纳入审批 - 工具分级授权 - 关键操作记录审计日志