CodeWhale v0.8.61 发布 —— Sub-agent 不卡了、路由更智能了,多 agent 协作进入"调度"时代
v0.8.61 的核心目标就是干掉这个 blocker。结果不止修了卡死,顺带把 sub-agent 的运行时架构整体重构了——不夸张地说,这是 CodeWhale 进入"多 agent 调度"时代的第一个版本。

以前:TUI 卡死是常态,sub-agent 像黑盒
如果你用过多个 agent 并行工作的场景(同时发几个探索任务或让一个 agent 验证另一个 agent 的输出),你应该遇到过这些问题:
- TUI 无响应:多 sub-agent 启动后,终端输入泵和渲染线程争 CPU。你敲命令,终端不回应,几秒后突然全部回流。团队甚至专门做了一个六路 stress test 来复现这个场景(#3216)
- 路由不隔离:sub-agent 默认用同一个 provider 和模型,你想让 scout agent 走便宜的快速模型、verifier 走更强的模型——没门。子 agent 启动时就自动继承了父级的路由配置,改不了
- 生命周期不可见:sidebar 里 sub-agent 的状态永远显示 "running",你不知道它在等 provider 回包、在做 tool call、还是已经卡住了。子 agent 想给你报个"我干完了但需要你确认",也找不到入口——只能默默停在某个位置等你下次发消息才被注意到(#3266)
- Provider 冲突:多 agent 共享同一个 provider session,一个 context_length_exceeded 就全挂了。没有自动回退,也没有 session 隔离
这些问题的根因:sub-agent 的运行时就是"从主进程 fork 出去,共享一切"的设计。v0.8.61 用 WhaleFlow 运行时框架彻底改了这一点。
现在:WhaleFlow 运行时 — 子智能体有了自己的"运行态"
WhaleFlow 不是 UI 层的改动,而是 5 个新运行时服务的集合(#3217, #3071, #3072, #3073):
角色画像(Worker Profile):每个 sub-agent 启动时带一份完整的运行时描述——角色(scout / synthesis / verifier)、权限范围、shell 能力、可用工具集、模型路由。子 agent 派生出来的后代 agent,权限只能收缩不能扩张(non-escalating child derivation)。这意味着你可以创建一个只读的 verifier agent,它永远不会打开 shell 执行命令。
跨 Provider 模型注册表:之前模型信息分散在各个 provider 适配器里。现在有一个中心注册表,离线也能查询模型能力和上下文窗口大小。新 provider 只需注册自己的模型规格,路由系统就知道这个模型能做什么、成本多少。
Provider 就绪检测 + 上下文预算 + 资源遥测:三个配套服务,确保 sub-agent 启动前就知道目标 provider 是否可达、预算够不够、当前资源状态如何。如果 provider 不可用,agent 不会傻等着超时,而是直接报"provider 不可用"然后等调度器决定下一个路由。
Per-role 路由:scout 走便宜模型,verifier 走贵的
这是 #2027 和 #1768 合并的结果。sub-agent 现在可以按角色指定模型和 provider:
# 配置示意 - 非实际文件名
[subagents.roles]
scout = { model = "gpt-4o-mini", provider = "openai" }
verifier = { model = "claude-sonnet-4", provider = "anthropic" }
synthesis = { model = "deepseek-chat", provider = "deepseek" }
explore 类任务被文档化为「推荐走快速模型、关闭 thinking」的场景,synthesis 类任务则默认走更强模型。Plan mode 被锁定为只读(没有 shell 工具),确保规划阶段的 agent 不会意外执行命令(#3218)。
Durable Goal Mode:跨轮次的持久化目标
之前 sub-agent 的目标只在单轮生效——agent 完成一个任务后就忘了上下文。v0.8.61 引入了跨轮次的持久目标跟踪(#3215, #891, #1976, #2058, #2029),带 token/时间计量和一个 verifier-as-judge 门控机制:sub-agent 报告"目标达成"之后,系统会用一个独立的 verifier agent 验证是否真的完成了,验证通过才算真正的 complete。
Provider/Model 路由隔离:一个 agent 报错不影响另一个
#3227 修复了最隐蔽的 bug:provider 和 model 状态现在是 session-local 的。两个 sub-agent 各跑各的 provider session,一个 agent 触发 context_length_exceeded 不再影响另一个的运行。系统还会预检上下文窗口,超过限制直接拦下来而不再循环重试(#3204)。
同步工具可取消
file_search、grep_files、list_dir 这些同步工具之前不能取消——你发起一个大范围文件搜索,想在中途取消,没用。它们会一直跑完。v0.8.61 让这些工具变成了可取消的(#1791),不再阻塞 turn 的关闭。
Composer 和 UI:细节打磨
大架构变动之外,这次还修了一堆日常使用中很烦人的问题:
Composer 大修:Ctrl+S 发送替代了之前的模糊键绑定(#3203, #3224),底部加了一个 busy/idle 指示器让你知道当前输入状态(#2982),CJK 文本终于正常换行了不再挤成一团(#963),sidebar 的 stop 按钮变可点击(#3028),还加了实时的 token 吞吐量显示(#3190)。tui 里自动过期的 sub-agent 卡片现在会自己消失而不是一直占着位置(#3078)。
Provider 相关:Provider 列表改为字母排序,不再把 DeepSeek 硬编码在第一位(#3076)。Novita 用户之前 chat completions 直接 404,因为没有对齐到 /openai/v1 端点,现在已经默认正确路由(#3255)。Kimi/Moonshot 的空函数参数问题也修了——不传参数时自动补一个根对象 schema(#3265)。
更新和安装:自更新系统现在会重试瞬时的 GitHub 元数据/资产下载失败,如果 REST API 不行,会自动 fallback 到公开的 releases/latest 重定向(#3232)。Linux glibc 在更新路径中加了预检提示(#3207, #1067)。之前 deepseek update 还会尝试唤起不存在的二进制,现在统一转到 codewhale(#2960, #2924, #2917)。
低频但重要的体验修复:MCP stdio 代理的启动提示不再阻塞非交互式运行(#2475),后台 shell 恢复失败和 sub-agent API 超时都做了可配置处理(#1737, #1786, #1806)。数字键 1-8 现在正常输入文字了,热栏需要用 Alt+1-Alt+8 触发(#3243)。粘贴大量文本后在 composer 中仍然可编辑,提交时自动以文件备份追加给模型存取(#3267)。
升级
# 推荐(已有安装)
codewhale update
# 首次安装
npm install -g codewhale
# 或从源码编译
cargo install codewhale-cli --locked
cargo install codewhale-tui --locked
⚠️ npm 包与 GitHub Release 可能有短暂延迟,codewhale update 直接走 GitHub Release 二进制,不受 npm 滞后影响。
完整更新日志:GitHub Release
📢 关注我,获取最新开源更新日志和开发者工具动态。
#CodeWhale #WhaleFlow #多Agent协作 #AI开发工具 #SubAgent调度