跑的是一支团队,而不是一个助理

像管理容器一样管理 AI 团队。

fleetmux 把一个监工(supervisor)agent 和 N 个 worker agent 作为看得见的终端会话跑起来。监工只判断、只派活;worker 只执行;任务什么时候算完成,由 daemon 判定,而不是由模型说了算。上下文快满的会话会写一份交接单,换一个新会话接着干,所以一个任务可以跨很多个模型会话连续跑几个小时。

一段会动的终端:监工拆活派工,两个 worker 逐行执行,daemon 逐项核验声明的产物;worker-1 写交接单并在同一窗格换代为 worker-1.1,最后任务 COMPLETED。

你实际得到的布局:左上监工,左下 history 与 daemon,右侧是 worker 标签。

项目经理

项目经理,而不是秘书

个人助理类 agent 已经能派子 agent、跑定时任务、在模型之间故障切换。fleetmux 补上的是项目经理做的事:

合盖也在跑

合上盖子,换个地方,打开,它接着跑。

把 MacBook 合上,带到别处,再打开,连上网,run 接着跑。daemon 分得清「机器睡了」和「连接断了」:空档超过两个心跳续期周期时,它先给每个会话三个周期的时间重新发心跳,之后才判定掉线。启动时撞上网络错误也不判死:先等 30、60、120 秒,之后每 300 秒再试一次。离线时什么都不重启——重启任何会话之前先探网络,没网就只等,不消耗重试次数,也不换代。run 不暂停,不用人工恢复,网络一回答问题就继续。

01

交付由程序验收

产物是否存在、是否包含必需内容、测试是否通过,由 daemon 判定,不采信模型的自述。

02

会话可以无限接续

上下文接近上限时,会话写交接单,由新会话接替;卡死的会话原位重启;daemon 与监工互相看护。

03

按能力矩阵派工

每次派工前,顾问依据能力矩阵(领域 × 任务类型 × 模型,每格附证据)选定模型与推理强度,所选结果须通过该矩阵的校验;撞上用量墙时,该槽位沿其角色的模型链换到下一个可用模型,或者暂停。

04

全程可见

每个 agent 都是一个看得见的终端会话,随时可以旁观、随时可以介入。

05

官方 CLI,你自己的登录

每个 agent 都在厂商自己的 CLI 里、以你本人的登录运行;不抽取凭证、不伪装客户端、不经代理转发 API 调用。

06

每个任务一份预算

预算卡限定调用次数、轮数、小时数和每个账号的额度;撞墙表决定是降一档模型,还是暂停运行、留待之后续跑。

07

团队套团队

一个 worker 可以成为它自己子 fleet 的组长,因此一个常驻 fleet 能同时跑几条业务线,每条线按自己的时钟起停。

怎么运转

一个任务怎么流转

任务自带「完成」的定义:必须产出哪些文件、每份多长、必须包含什么。

任务 目标与声明产物 监工 拆活、派工 worker 每次执行一步 daemon 字面验收 COMPLETED 产物全部核验通过 打回 — 三次打回判任务阻塞
监工只能声明要核对的文件,不能声明要执行的命令。
worker-1 上下文 60% worker-1.1 交接单 worker-1.2 同一标签
接班者占用前任的标签位置;退役的屏幕和交接单进 history 页。

上下文换代,而不是压缩

上下文窗口用到 60% 时,会话写一份三段式交接单,旧屏幕进 history 页,接班者在同一位置启动并读这份交接单。模型没写时用机器生成的骨架;单单缺交接单不会阻止换代。

卡死的会话原位重启;daemon 与监工互相看护。

混用 CLI

把你在用的 CLI 混进同一个 fleet

同一个 fleet 里可以混用官方 Claude Code、官方 Codex CLI、Pi(Codex 模型与本地模型)和 opencode。下表按配对表列出全部「监工 × worker」组合,task 与 service 两种模式分开标。

监工 × worker 组合,task 模式。配对表里没有的组合一律不支持。
监工 ↓ / worker → Claude Code Codex CLI Pi opencode dsh
Pi 已通过 不支持 已通过 仅冒烟模式 已通过
Codex CLI 已通过 仅冒烟模式 已通过 已通过 不支持
Claude Code 已通过 不支持 已通过 不支持 不支持
监工 × worker 组合,service 模式。配对表里没有的组合一律不支持。
监工 ↓ / worker → Claude Code Codex CLI Pi opencode dsh
Pi 已通过 不支持 已通过 已通过 不支持
Codex CLI 已通过 不支持 已通过 仅冒烟模式 不支持
Claude Code 已通过 不支持 已通过 不支持 不支持
已通过真跑冒烟(1 个监工 + 2 个 worker,4 项检查) 仅冒烟模式(要带 --lifecycle smoke 才能启动) 不支持(配对表里没有)

Codex worker(codex+codex)仍未验证;opencode 只做 worker,dsh 只做 worker 且只有 task 模式。配对与状态(verified / unverified = 只能 --lifecycle smoke / 直接拒绝)都在 fleetmux/config/fleet.yaml#cli_pairs 里,表里没有的组合会在开跑前带原因被拒绝。

夜间组合:Pi 监工 + Pi worker
fleetmux start --supervisor-cli pi --worker-cli pi \
  --supervisor-pi-model openai-codex/gpt-6-astra --supervisor-pi-thinking high \
  --pi-model flashnext/<local-model> --workers 2 --lifecycle <mode> \
  --allow-unsandboxed-pi --allow-development-v2

应用场景

它面向的几类场景

每次 start 都要指定 --lifecycle,它规定「完成」的含义以及运行如何收尾。

01

只允许使用本地模型的运维场景

有些环境只允许调用部署在自己机器上的模型,而本地模型很不擅长协作。fleetmux 把协作从模型手里拿走,交给 daemon:监工只决定下一步,worker 只执行这一步;回合何时结束、结果是否存在、会话何时换代,都由 daemon 决定。--max-busy 把并发请求控制在推理服务的内存上限以内;私有 Redis 只监听 Unix socket,不开任何端口。

02

交易盯盘:把策略交给 AI,触发时复盘

价格与指标由你自己的程序盯着;触及某个档位或指标参数被越过时,程序发出一条请求,由负责该角色的 worker 做一次完整复盘并用 JSON 作答。指定了 to 的请求不经监工回合,回复字段先由 daemon 校验,你的程序再去读。fleet 不下单,也不认交易日历。

03

定时研究报告

调用方自己的定时器在工作日的固定时点启动 fleet:一个监工加两个 Claude Code worker,研究用的 skill 和网络搜索 MCP 一并载入。任务目标里声明报告文件及其必含章节;daemon 按字面验收,给这次运行设硬性时限,结束时关闭工作区。

04

常驻判定服务

另一个程序发 JSON 请求;指定了 to 的请求直接交给该角色的 worker。daemon 按 reply.required 与 reply.allowed 校验每条回复,调用方在非工作时段用 pause 与 resume 把 fleet 挂起。

快速上手

三步跑起来

打开一个 cmux 终端,配置好你的 Pi provider/model,并替换下面的 local/my-model。

  1. 确认依赖

    • macOS + cmux ≥ 0.64.25(new-surface --command);start 要在 cmux 终端里跑。
    • 用 Codex agent 时需 Codex CLI ≥ 0.156。
    • PATH 上要有 redis-server(brew install redis);每个 run 起自己的私有实例,不碰 localhost:6379。
    • Python 3.14 与 requirements.txt 里的包。
  2. 安装

    安装
    git clone https://github.com/justindbca/fleetmux && cd fleetmux
    pip install -e .
  3. 起第一个 fleet

    第一个 fleet
    fleetmux start --workers 2 --supervisor-cli pi --worker-cli pi --lifecycle <mode> \
      --pi-model local/my-model --allow-unsandboxed-pi --allow-development-v2
    echo '{"goal": "Survey the three most-cited papers on X and write a comparison",
           "hours": 4,
           "artifacts": [{"path": "worker-1/report.md", "min_chars": 800, "contains": ["Conclusion"]}]}' \
      | fleetmux task -                           # hand the goal to the supervisor
    fleetmux status                               # task + per-agent state, context usage, inbox depth
    fleetmux stop                                 # cancel; confirm runtime retirement before Redis shutdown

    新的启动要求 Redis v2 并需显式的开发许可;这是开发期的接线,不是生产验收。

    已知限制