跳到主要内容

Hermes Agent v0.15.2 发布 —— pip 安装后,插件去哪了?

· 阅读需 4 分钟

这不是假设场景。从 v0.15.0 开始,如果你通过 pip(wheel 或 sdist)全新安装 Hermes Agent,内置插件会让你找不着。不到第二天有人发 issue 你都不会意识到这不是你的配置问题,而是打包脚本漏了东西。

Hermes Agent v0.15.2 封面

故事的起点:一个看不见的 bug

Hermes Agent 的内置插件由 plugin.yaml 清单文件定义——每个插件一个 YAML,描述它的工具、触发条件和依赖。这些文件是插件的「身份证」:没有它们,加载器不知道哪些插件可用,更不知道该怎么启动它们。

之前的构建流程里,pyproject.tomlinclude 配置正确包含了这些清单文件。但某次重构后,打包配置和实际的 manifest 目录之间出现了一条裂缝:MANIFEST.in 没有同步更新,导致 wheelsdist 两种打包格式都遗漏了 plugin.yaml

注意,不是「某些插件坏了」,而是「所有内置插件的入口文件都不在包里」。有人通过源码安装(pip install -e .)正常——因为符号链接直接指向了源码目录里的 manifest;有人通过 hermes update 二进制升级正常——因为不经过 pip 打包路径。但如果你是从 PyPI 新鲜 pip install,你会得到一套没有身份证的插件系统。

fix 本身很简单,但打包的坑不简单

修复内容就一行改动:在 MANIFEST.in 里把 plugin.yaml 文件所在的目录加进打包清单。PR 链接是 827f7f07,改动量 7 行。

但这个 bug 让我想起一个在 Python 项目里反复上演的模式:源码运行正常 vs 打包后运行正常,完全是两回事pip install -e . 跑了一万遍的东西,第一次打 wheel 给用户就现原型。很多 Python 项目到 v1.0 了才第一次发现 MANIFEST.inpackage_data 少了文件——不是没人用,是不在 CI 的测试路径里。

Hermes Agent 的这套插件系统是后来加上的(大概在 v0.13 时代引入),manifest 目录的规划也经历过几次调整。核心维护者 @outsourc-e 捕捉到这个遗漏并提交了修复——团队内部有专门的打包测试流程吗?大概率没有,因为 v0.15.0 到 v0.15.1 隔了不到 24 小时,两版都是密集 hotfix,打包验证不在热修复的检查清单里。这很正常,但不正常的是这种断裂隔了三四个补丁版本才被发现。

这意味着什么

如果你这周 pip install hermes-agent 发现插件不工作,升级到 v0.15.2 后重新安装一次就能恢复。如果你是通过 curl | bash 安装的或 hermes update 升级的,这个 bug 根本碰不到你——这也是为什么它在 PyPI 上躺了几天才被报告。

事后看,这次问题暴露了一个更大的议题:Hermes 的打包配置正变得越来越复杂。它不只是一个 Python 包,它还捆绑了 Dashboard 前端(Node 构建产物)、MCP 服务器 manifest、插件清单、CI 管道产物、TUI 资源文件——MANIFEST.in 里要包含的东西越来越多。一套 MANIFEST.in + pyproject.tomlinclude 双轨制,迟早还会出类似的问题。

升级

如果你当前版本是 v0.15.0 或 v0.15.1 并通过 pip 安装:

pip install --upgrade hermes-agent

或简便方式(推荐):

hermes update

全新安装:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

完整更新日志:GitHub Release

Gradually, then suddenly. 有些版本往前进,有些版本为将来能往前推进补了条路。

📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。

#HermesAgent #打包陷阱 #开源工具 #Python #插件系统

Hermes Agent v0.15.0 发布 —— 1.6 万行核心代码缩水 76%,session_search 从 30 秒到 20 毫秒

· 阅读需 5 分钟

Hermes Agent v0.15.0 封面

16,083 行 → 3,821 行:核心循环重构,比改名更有意义

Hermes Agent 的 run_agent.py 以前是 16,083 行。放任何项目里这都算一个「巨物」——打开慢、grep 慢、插件作者想理解它的逻辑得翻半小时。v0.15.0 把它拆成了 14 个 agent/* 模块,砍到 3,821 行,缩水 76%。

这不是那种「重构完什么都没变」的重构。run_conversation 这一个方法以前就占了 3,877 行——比现在整个文件还多。拆完后每个模块只负责一件事,插件作者的「我能理解它在干什么」的门槛一下子就降下来了。

有意思的是,这个重构做到了一个很难的事:外部接口一条都没改。AIAgent 上的 forwarder 一层薄薄的转发保证每条测试路径都原地工作。这种「拆完了,你感觉不到它被拆过」的重构,是最难也最值钱的。

session_search:不用 LLM 了,快了 4500 倍,还免费了

之前的 session_search 是我自己也有印象的功能:搜索历史会话,需要调用一个 aux-LLM 来总结,每次调用约 0.3 美元,耗时约 30 秒。更糟的是,当正确的会话根本不在 FTS5 结果里时,它会编造——因为 LLM 承担了它不该承担的任务。

新版的改动可以简单总结为:一个工具、三种形态(discovery/scroll/browse)、无参数模式选择、无 aux-LLM、无额外配置。Discovery 模式的响应时间是 ~20ms 而非 ~90s,scroll 模式 ~1ms。

这本质上是一个「去掉了一层不必要的抽象」的故事。之前的设计直觉是「用 LLM 做检索会更好」,实际上把检索做对比用 LLM 去猜更重要。现在我可以放心地在会话里搜索过去的内容,不用心疼 0.3 美元一次了。

Kanban 在 104 个 PR 里长成了真正的多智能体平台

Kanban 子系统是这版隐藏最深的重头戏。104 个 PR,覆盖自动分解、Swarm 拓扑、定时任务、工作目录隔离、per-task 模型覆盖——相当于在 12 天内把 Kanban 从「任务看板」升级成了「多智能体编排引擎」。

几个值得展开的:

  • hermes kanban swarm:一条命令创建完整 Swarm v1 图——根节点、并行 worker、门控验证器、门控合成器、共享黑板。以前搭多 agent 协作的样板代码,现在成了默认配置
  • Per-task 模型覆盖:简单子任务用便宜模型,难的子任务用贵的,在看板级别就能指定。之前这需要在 agent 代码里硬编码
  • 定时启动 + 超时 TTL + 重试指纹 + 僵死检测:这些运维级功能一块堆进来,说明 Kanban 已经从「开发工具」变成了「生产调度」

其他值得提的亮点:

Promptware 防御(#32269)。 受到 Brainworm/Promptware Kill Chain 研究的启发,Hermes 现在在三个关卡拦截提示注入:工具输出扫描、内存加载扫描、工具结果分隔符。这不仅仅是加了个安全检查——它定义了一个「谁的内容能控制 agent」的边界,而之前这条边界是不存在的。

Bitwarden Secrets Manager(#30035)。 一句 BWS_ACCESS_TOKEN 替代每个 provider 的明文 API key。我不觉得这会成为大多数人的日常——大部分人还是会把 key 写 .env 里——但如果你管多台机器或多账号,一个 token 统一管理所有凭据的思路比记十几个 key 要干净得多。

Skill bundles(#28373)。 一个斜杠命令加载整套技能组。设个「写作日」bundle(humanizer + ideation + obsidian),敲 /writing-day 四个技能全开。之前这是手动一个个 /skill load 的工作。

TUI 多会话切换(#32980)。 一个 TUI 窗口里同时跑多个会话,侧面栏切换。配上模型选择器和会话刷新,不用开多个终端窗口了。

零成本 MCP 目录(#30870)。 Nous 审核过的 MCP 服务器精选列表,交互式选择器,一个按键安装。n8n 的 manifest 已经到位。

xAI 深度集成。 Web Search 插件、OAuth proxy 上游、五月十五退役模型自动检测 + hermes migrate xai、TTS 自然停顿标签、base_url 泄露防御。xAI 用户这一版的收益最大。

升级:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
# 已安装则
hermes update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。

#HermesAgent #AI代理 #开源更新 #开发者效率 #重构

OpenCode 1.15.11 发布 —— 后台 Agent 不再轮询了,TUI 提示符也能自适应了

· 阅读需 3 分钟

OpenCode v1.15.11 封面

后台 Agent 从"定期看一眼"变成"等通知"

这是本次更新最有架构意义的改动。实验性后台 agent 之前通过轮询来检查状态——每隔几秒发一次请求确认"还活着吗?做完了吗?"。这在低负载时问题不大,但如果你同时跑好几个后台 agent,终端里的 polling 信号能堆成一片噪音。

现在改成推送了。Agent 跑完后主动通知,不再需要定时器一遍遍去问。本质上是从 pull 模型切到了 push 模型——对用户来说最直接的感受是终端安静了,更长远的影响是轮询没有了,省掉的不仅是带宽,还有 provider 的 token 消耗(每次轮询都是一次 API 调用)。

配置超时终于可定制了

新增的 headerTimeout 配置项解决了另一个日常痛点。OpenAI 类 provider 的请求之前是硬编码超时,网络状况稍差就容易超时重试。现在可配置,默认 10s,适合接入各种兼容 OpenAI 接口的 provider。如果你用自建网关或者海外代理,这个参数是救命级别的——不用再被神秘断连折磨。

Google 用户注意:tool calling 回归了

上个版本 Google tool calling 因为 provider 端的 tool ID 变更出了问题,这次修复了。同时数字海洋(DigitalOcean)推理也不再走繁琐的 MAK 流程——直接用 OAuth token 就行(#28897,感谢 @Spherrrical)。如果你在生产环境用的是自建推理,这次的两个修复都值得关注。

其他值得顺带提的:

  • 恢复的会话不再继续已中断的孤儿工具(#26178,感谢 @edevil)。之前如果 session 恢复后会尝试继续执行上次中断的 tool 调用,但调用上下文早就变了,导致奇怪的状态残留。现在恢复时直接跳过孤儿工具
  • OpenAI reasoning 摘要独立渲染。之前推理内容的摘要和正文混在一起,现在分开显示,更一目了然
  • Shell tool 会主动告知配置的超时时间。模型在调用 shell 时能知道当前超时设置,不会盲目等待
  • TUI 提示符宽度自适应终端宽度(#28255,感谢 @bjschafer),还可以配置固定宽度

桌面端 v2 本轮改善

桌面端 v2 在 1.15.9 大改版后持续打磨:主屏幕、输入框、状态弹窗、会话控制都有细化。重点是几个 bug 修复值得注意:

  • 桌面窗口恢复时的白闪修了。如果你用 Desktop v2,升级到 1.15.9 后应该遇到过这个——切回窗口时先白一下再显示内容。这次终于清了
  • Web 部署不再跑桌面端健康检查。之前用 OpenCode Web 的用户,后台会莫名其妙检查桌面端心跳,非桌面环境纯属浪费
  • 重复的服务器连接自动合并。插件等来源导致同一台 MCP 服务器重复注册的,现在菜单里自动去重

升级:

npm update -g opencode-ai
brew upgrade opencode

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。

#OpenCode #开发者工具 #Agent框架 #桌面端 #开源更新

Reasonix desktop-v0.53.0 发布 —— 强制摘要不再硬编码模型,桌面端终于能切工作区了

· 阅读需 3 分钟

这个版本的更新清单很长,但最有意思的是:它在解决一个"你都不知道自己遇到了"的问题。

Reasonix desktop-v0.53.0 封面

Force-Summary:一条硬编码引发的迷案

之前有一个问题:当对话上下文过长时,Reasonix 会触发 force-summary 压缩。但压缩时用的模型是硬编码的 deepseek-v4-flash。如果你用的是第三方 DeepSeek 兼容端点——mimo、自部署、Azure 分支——这些服务不一定提供 flash 模型。force-summary 一触发,直接崩溃。

这个 bug 藏得很深:你不换个 provider 用,永远不会发现它。但一旦你换了(比如想省点钱切到自部署),force-summary 那个时间点就会让你突然卡住——不是因为模型不好,而是因为一行写死了的模型名。

修法就是 #1979:让 force-summary 使用当前活跃的模型,不再硬编码。

桌面端终于有了工作区切换

#1908:desktop workspace switcher。多个项目根目录可以在侧边栏共存,不再需要重启来切项目。

这一点做桌面端 AI 编程工具的人应该都感同身受——你同时维护两三个项目,每个配了各自的系统提示词和工具集,切项目就得关掉重启。现在侧边栏直接切换,workaround 时代结束。

搜索引擎:Brave Search 上线

#1916:web_search 工具新增 Brave Search 后端。之前只有 Bing、Tavily、Ollama-cloud,如果你用 Brave Search 做默认搜索引擎,之前得绕一圈。现在直接配。

收尾修复,一个比一个值

剩下的修复量大但精,按主题看:

桌面端稳定性:per-tab hook 修复(#1984),确保切换标签时 hook 正确触发;pending-assistant 在出错时自动清掉(#1985),停止无限转圈;/skill/skills 命令终于能用了(#1978);token meter 每轮刷新(#1964),不再越用越不准;会话中断后保留上下文(#1938),不会因为一次 abort 导致前面的对话白费。

Markdown 渲染\[ \] / \( \) 数学定界符正确渲染(#1923)。之前如果你在对话中写 LaTeX 数学公式用 \( \)\[ \] 语法,渲染器直接忽略。

网络web_fetch 在系统 DNS 返回内网地址时,自动 fallback 到 DNS-over-HTTPS(#1944)。如果你在公司网络或 VPN 环境下用过 Reasonix 抓取网页,应该体验过 DNS 污染导致的抓取失败——这个修复会让抓取更稳定。

配置saveApiKey 选项可以覆盖环境变量中的过期 key(#1982);设置里终于允许清空 base URL 和 editor 字段了(#1905)。

升级

npm install -g reasonix
# 桌面端内置自动更新

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#Reasonix #AI编程 #DeepSeek #桌面端 #开发者工具

CodeWhale v0.8.47 发布 —— 改名之后,第一次有人在意「编辑器里能不能选中文字」

· 阅读需 4 分钟

CodeWhale v0.8.47 封面

以前:改个名字,体验照旧

改名后的前几个版本其实一直在做"基础设施迁移"——环境变量改名、安装包整合、状态路径重定向。这些事用户感受不到,但对项目长期健康是必要的。但 v0.8.46 到 v0.8.47 之间,团队终于转向了另一个方向:用户的日常操作质量

现在:编辑器体验从"能用"到"好用"

最大的一个改动是 Composer 文本选择(#2228)。 在 CodeWhale 的编辑器里拖拽选中文字这个操作,之前一直不存在。本质原因是 TUI 渲染模式下的选区处理和原生终端编辑器(比如 VS Code)有根本不同——TUI 的每一帧都是独立渲染的,选定和高亮的跨行逻辑得自己实现。现在鼠标拖选 + Shift+方向键终于能用了,Ctrl+C 复制、Ctrl+X 剪切也一起到位。Home、End、Ctrl+A、Ctrl+E 现在会先清除当前选区再跳转。说实话,这些在 GUI 编辑器里天经地义的操作,在 TUI 里需要花不小的工程量来铺设。

另一个不起眼但实际高频的操作:复制对话。 之前复制 transcript 到剪贴板,会带上终端换行的视觉折行——粘贴到编辑器里每一行都被断开了。现在 Ctrl+C 复制时会自动去掉视觉折行的换行符(#1906),粘贴出来的就是干干净净的段落。如果你经常拿对话记录去写文档或做 prompt,这个体验提升是立竿见影的。

三个面向中国用户的小福利

  • CNB 镜像支持(#2222)。 专门为国内网络环境加的两个环境变量:CODEWHALE_RELEASE_BASE_URLCODEWHALE_USE_CNB_MIRROR,npm 安装脚本和 Rust 自更新器都支持。如果你在境内下 release 包经常被 GitHub 卡住,设前者为国内镜像地址就行
  • /config 面板现在显示生效的 DeepSeek base URL(#1967)。 小改动,但用过复杂代理设置的应该懂——配置改了一堆环境变量,想知道最终请求发到哪了之前得翻日志。现在 /config 直接显示
  • [✓] 替代 [x] 作为完成标记(#1935)。 Checkbox、plan、tool completion 的状态图标从 [x] 换成了 [✓]。纯视觉改进,但看了 [x] 几个月的用户,这个改动的感知度比想象中大

改名过渡期的"隐身"修复

v0.8.47 有几个修复是改名后才暴露出来的:

  • 并发子 agent 的 RwLock 死锁(#1856)。 改名后部署架构调整触发了 RwLock 的写竞争(读锁没释放就尝试获取写锁),多 agent 并发时直接卡死。修复方式是将 RwLock 替换为 Semaphore(1),本质上是不允许并行写了(感谢 @Fire-dtx)
  • DEEPSEEK_YOLO 环境变量在启动时没生效(#1870)。 --yolo 命令行标志和环境变量 DEEPSEEK_YOLO 之前只取其一,不会合并。意味着你设了环境变量但同时又传了其他 flag,yolo 模式可能没开
  • steer/queue 消息的 transcript 顺序修复(#2225)。 steer_user_message 插入消息时没有冲刷当前 cell,导致排队的消息渲染顺序错乱
  • Loop guard 触发时状态正确报告 Failed 而非 Completed(#1859)。 之前安全守卫被触发后,系统报告"任务已完成"——本质上是自相矛盾的

最安静但最实在的改动

状态根目录迁移(state-root migration)。 这次又迁移了 15+ 条存储路径到优先使用 ~/.codewhale、回退到 ~/.deepseek。这个工作中最真实的一点是:改一个配置路径名是最简单的一步,但翻出代码里每一个硬编码的 ~/.deepseek 并替换为 ~/.codewhale(同时兼容旧路径),才是真正做完了。README 也全部更新为 canonical CodeWhale 路径——新用户配置时不会看到 ~/.deepseek 字样。

升级:

npm install -g codewhale@latest
codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。

#CodeWhale #DeepSeek #AI编程 #TUI #开发者工具

CodeWhale v0.8.46 发布 —— 环境变量换名、安装包集成、改名后的第一波问题清单

· 阅读需 4 分钟

v0.8.46 就是这个版本的「后遗症清理」。改名以来所有被忽略的角落,这次基本都走到了。

CodeWhale v0.8.46 封面

最大的痛点:环境变量到底叫什么

改名才没几天,CodeWhale 终于有了自己的环境变量体系。CODEWHALE_PROVIDERCODEWHALE_MODELCODEWHALE_BASE_URL 三个新变量正式上线,优先级高于旧的 DEEPSEEK_* 变体。

说实话,这个改动看起来只是改了个前缀,但它解决了一个真实的问题:新用户进项目后,如果 README 里写的还是 DEEPSEEK_*,第一反应一定是「这个项目是不是没人维护了」。CODEWHALE_* 变量上线意味着一个至今没被注意到的小尴尬被清掉了——你可以用纯 CodeWhale 的名词体系完成所有配置,不需要知道它前身叫什么。

旧变量当然没删——DEEPSEEK_* 继续兼容。这种「双轨制」在新老交替的窗口期是最顺滑的过渡方式:老用户不动配置,新用户不用学习历史知识。

安装体验:不再需要猜哪个文件

改名后另一个隐蔽的后遗症是安装。之前 release page 上每个平台散落着 codewhale-linux-x64codewhale-tui-linux-x64 两个独立文件,新用户只下载了 dispatcher 没下 TUI,一启动就报 companion binary 缺失。

v0.8.46 做了平台归档包(#2193):Linux/macOS 一个 tar.gz 打包两个二进制加安装脚本,Windows 一个 .zip 全部带走,外加一个便携版适合 U 盘分发。下载页面也换了——现在自动检测你的架构、显示 SHA256 校验和、提供中国镜像链接(#2192)。

有意思的是,npm 包安装脚本也一起修了(#2191)。之前 npm 包在下载阶段有时只把 dispatcher 拉下来但漏了 TUI,新用户一个 npm install -g codewhale 以为装好了,打开一看 MISSING_COMPANION_BINARY。现在两个二进制一起拉齐,不用再二次排查。

两个 TUI 日常痛点的回应

子智能体自动折叠(#2195)。长会话里 delegate 出去的 agent 在 sidebar 占一长条,session 越久越乱。现在做完的自动折叠成一个头部,不会堆满侧边栏。对比以前「一条一条手动收起」的体验,现在是「不操心」。

Shell 运行状态芯片(#2194)。后台跑 shell 任务时底部多了一个 ⏳ shell running 的标记。之前你开个 docker compose up 放在后台,切去写别的 prompt,过一会儿回来完全忘了后台还有东西在跑。看到芯片你就知道:哦对,还挂着。小改动,但每天用 TUI 拼代码的人大概率用过「忘了」这个状态。

修复里的高光

Model 名称大小写保留(#2109)。normalize_model_name_for_provider 之前一律小写所有 model 名,DeepSeek-V4-Flash 被转成 deepseek-v4-flash,某些大小写敏感的 API 后端直接 404。大部分人不设置自定义 model 名不会碰到,但如果你手动指定了特定型号,之前是必踩的坑。

grep_files 跳过大型目录.gitnode_modulestarget 三个目录被加入跳过列表。如果你的项目装了几十个依赖,grep 十几秒卡在 node_modules 里动不了的情况应该不陌生。现在扫文件之前先跳过已知的深度目录,代价不大,但受益的人不少。

版本检测用 semver 了0.8.10 > 0.8.9——这个比较之前走的是字符串字典序,所以 0.8.10 < 0.8.9,永远检测不到跨版本更新。现在用语义化版本比较,修了。

CVE-2026-8723。飞书桥接的 qs 依赖升到了 >=6.15.2(#2198)。安全更新,一行修一个 CVE。

改名之后的方向:DeepSeek 优先

CHANGELOG 里有一条很短的 Change:v0.8.46 重新聚焦 DeepSeek,先在 DeepSeek 上交付最好的体验,其他第一方 provider 规划在 v0.9.0。这跟上个版本「去掉 Moonshot branding 但完善后端」的操作一脉相承——CodeWhale 在对外宣传时把自己定位为 DeepSeek V4 的专属 harness,但内部保留了 provider 灵活性。只是优先级变了。

升级

npm install -g codewhale
# 或已安装用户
codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CodeWhale #AI开发 #终端工具 #DevTools #DeepSeek

CodeWhale v0.8.45 发布 —— 我从 README 里读到了产品方向的信号

· 阅读需 6 分钟

「The most agentic harness for DeepSeek V4。」

Harness? 不是 agent,不是 assistant,不是 CLI tool——harness。我盯着这个词看了几秒,觉得它不是在玩文字游戏。

CodeWhale v0.8.45 封面

那天下午,我看了三次 README

你知道那种感觉吗——工具你每天都在用,但某天突然发现自己对它的理解错了。我本来是想看看有没有新命令,结果被 README 引到了一个叫「What Is It」的新章节里。重写的核心,是把 CodeWhale 拆成了四层:治理层级(constitutional hierarchy)、结构化的信任机制、反馈循环(feedback beats)、还有恢复机制(recovery)。每一层都在解释同一个问题:「当你把模型放在一个开放终端里,怎么确保它不乱来?」

这不是一个 agent 会自问的问题,因为 agent 的前提是「它能做任何事,我们信任开发者让它做」。这是 harness 的问题——一个 harness 知道自己是模型的外部约束框架,不是模型本身。

有意思的地方在于:这三段内容看下来,我突然意识到 CodeWhale 这 0.8.x 系列一直在悄悄搭建的到底是什么。0.8.42 的 Brother Whale 身份提示、0.8.43 的 Post-turn Receipts(每轮收据)、0.8.44 的 Agent Team UX——它们全都是 harness 的零件,不是 agent 的零件。只是之前没人给它们起一个统一的名字。

v0.8.45 给了这个名字。

RLM 会话,第一次成为一等公民

跟 README 改版关系不大但同样值得单说的一件:RLM(Read-Load-Modify)REPL 现在可以加载 session:// 引用了(#2047)。

之前 RLM 只能加载文件路径或剪贴板内容——你想要分析当前会话里的上下文?得手动把内容贴进 REPL。现在 rlm_open 支持 session:// 协议,当前会话的提示词、历史对话、session 数据作为符号对象直接暴露在 RLM 环境里。代码多行分析、跨轮次数据比对,不需要在窗口之间反复跳了。

还有一个很微妙的细节:命令面板现在支持语音输入。调出命令面板后配了一个语音转文字入口,底部会显示转录状态(#2047)。这个功能平常可能不太会用,但当你一只手端着咖啡、另一只手拿着触控板的时候,你突然就需要它了。

和 Moonshot 有关系吗?有关系

v0.8.45 悄悄把 Moonshot/Kimi 做成了第一方 provider——API 密钥认证、模型补全、CLI 授权、密钥存储集成、甚至可选的 Kimi CLI 凭据复用,全套配齐了。

等一下,body 里不是说「Kimi/Moonshot branding is removed from public surfaces」吗?是的, branding 被拿掉了——README 里不再提 Moonshot 作为并列选项,hero 文案也不列第三方提供商。但后端 provider 代码不仅没删,反而做完整了。codewhale --provider moonshot --model kimi-k2.6 现在可以直接到达 TUI,不会在配置解析后卡住。

这个「去掉 branding 但完善后端」的操作传递了一个清晰的信号:CodeWhale 正在把自己定位为 DeepSeek V4 的专属 harness,但它不想失去提供商的灵活性。你不喜欢 DeepSeek?可以用 Moonshot。你想自己搭一个兼容 API?Sub-agent 兼容性修复支持了严格 OpenAI 兼容后端。只不过在公共宣传中,DeepSeek 是唯一的头牌。

送上一张鲸鱼名字清单

子智能体终于有名字了——准确的说是鲸鱼物种名(#2035, #2016)。以前 delegate 出去的子智能体显示为 agent_xxxx,你只能靠猜它是什么角色。现在叫 Beluga、Orca、Humpback……每个名字稳定可读,原始 agent ID 保留在弹窗里可查。对比之前「全部叫 agent_xxxx」的时期,现在是翻看 transcript 时一眼就能分辨哪个 agent 做了什么事。

那些修起来比看起来重要的

v0.8.45 的修复部分有几个值得展开的:

Sub-agent 完成回传适配(#2057, #2120):回传现在用 chat-template 安全的角色字段,在终端更新前发出。这修复了严格 OpenAI 兼容/自托管后端的兼容问题。「严格兼容」的 API 通常对角色字段类型敏感,之前子智能体完成任务后通知回主会话时,那些自建后端的 API 不认,导致任务挂了但母会话不知道。现在改了角色标识的格式,所有兼容 API 都能收到完成信号了。

Self-hosted 预算窗口不再干烧(#2060):窗口小于 500K token 时,output 保留后压扁预检压缩缓冲,结果输入预算直接归零——你刚搭好一个本地模型,还没来得及用,它就说「上下文不够了」。修复后输出保留后仍然留出可用输入预算,小窗口模型也能正常跑长会话。

Goal prompt 一打开就能干活(#2097):开启 goal 模式后,agent 直接开始执行,不再需要你额外敲一下「开始吧」。

审批流一键确认(#2143):Enter 直接提交所选审批选项,Destructive 警告仍然可见,Abort 取消当前轮次而不是只拒绝当前工具调用。

YAML block scalar 解析(#1908, #1907):SKILL.md frontmatter 里多行描述用 >| 标识符时,折叠块标量、字面量标量、三种 chomp 模式全部正确解析了。如果你的技能文件 frontmatter 里写过长描述,大概率遇到过解析错位的问题——现在修了。

list_dir 和 file_search 可取消(#2035):长目录遍历和文件搜索现在响应取消/停止请求,30 秒 fallback 超时。之前碰到深度嵌套的 node_modules,终端就僵住了。

升级

npm install -g codewhale
# 或已安装用户
codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CodeWhale #DeepSeekV4 #终端工具 #AI开发 #开源项目

CodeWhale v0.8.44 发布 —— 从 `deepseek` 到 `codew`,改名计划竣工

· 阅读需 6 分钟

这个版本做的就是这件事。

CodeWhale v0.8.44 封面

以前 ~/.deepseek/,现在 ~/.codewhale/

改名后最微妙的一个问题:你电脑上的「家」在哪?

v0.8.43 之前,所有配置、session、技能、日志都写在 ~/.deepseek/ 下。改名叫 CodeWhale 了,但你的数据文件夹还叫 deepseek——这种感觉就像搬了新家,快递地址还写旧门牌号。v0.8.44 终于把这事补上了:新安装的所有产品状态写入 ~/.codewhale/(#2011)。

有意思的是,团队没有一刀切迁移。~/.deepseek/ 继续作为兼容层存在——不丢数据、不强制搬家。同时新增了两个环境变量:CODEWHALE_HOMECODEWHALE_CONFIG_PATH,跟原有的 DEEPSEEK_* 变量并行。对于已经有大量脚本依赖旧路径的用户,这种渐进式迁移比暴力 rename 友好得多。

项目配置文件的优先级也做了调整:新安装的 .codewhale/config.toml 优先于 .deepseek/config.toml。两个文件都会被读取,但 CodeWhale 目录下的配置会覆盖旧配置。本质上是在说:「我们尊重你的旧数据,但从现在起,你得用新名字。」

另一个标志性变化:codew 快捷键了(#2013)。三个字母对七个字母,少敲六下键盘。codew 无缝转发到 codewhale,附带 Rust 二进制和 npm 包。对这个项目的用户而言,从敲 deepseek 到敲 codewhale 再到敲 codew——每次缩短的命令本身就是品牌渗透的过程。然后还有 codewhale --continue(或 -c),一键恢复上次会话,也是第一次在这个版本里出现。以前只能靠 /sessions 或者 Ctrl+R 手动找,现在一条命令直通。

Agent 团队的「人脸识别」

CodeWhale 的子智能体系统我一直觉得很强,但以前有一个小痛点:Delegation 卡片上显示的是 agent_xxxx 这样的 ID。你知道派出去的是个 agent,但不知道它具体是什么角色——修代码的?写测试的?复查的?全靠自己猜。

v0.8.44 的 Agent Team UX 修复了这个问题(#1981)。现在委托卡片上显示的是人类可读的角色名称:scout(侦察)、builder(构建)、reviewer(审查)、verifier(验证)、executor(执行)。每个角色后面还带一个完成摘要,告诉你这个 agent 干完了什么,而不是只显示「sub-agent finished」。

对比之前的体验,本质上是把「黑盒并行执行」变成了「透明团队协作」。你在主会话里能看到每个子智能体的分工和产出,而不是只能被动等结果。

另外一个配合 Plan 模式的改进:Plan Confirmation 弹窗现在会显示 update_plan 提出的计划说明和步骤列表(#834)。以前你点了 Plan,弹出来一个确认框,里面是一个模模糊糊的描述——你接受了,Agent 开始工作,但你其实不确定它会不会按你想的路径走。现在能看到它具体要做什么,然后你再决定「行,就这样」还是「改一下」。

Session 选择器也加了个小功能:按下 r 键可以直接重命名选中的 session(#1600)。以前得从 session 列表退出来,用 /session title 命令改,现在键盘上按一下就行。

修复里藏着的大心思

🔧 文件存储大扫除

/save 命令之前默认把 session 文件保存到当前工作目录下。如果你在不同的项目目录里反复 /save,每个项目目录里都会散落一堆 session_*.json 文件。v0.8.44 改了默认行为——/save 默认存到管理的 session 目录里(#2010)。如果你想手动导出到某项目路径,用 /save path/to/file.json 语法就行,以前的显式路径导出不受影响。

与此配套的是启动时的 session 自动修剪:每次启动最多保留 50 个 managed session(之前没有任何上限,~/.deepseek/sessions/ 理论上可以无限膨胀)。这个限制不算激进——50 个 session 对绝大多数人来说绰绰有余——但避免了长期使用后目录膨胀到上万文件的极端情况。

还有一个小细节:Checkpoint 路径不再硬编码 ~/.deepseek/,改用解析后的 session 目录。这是「去 deepseek 化」的又一个证据——之前遗留的硬编码路径,这次一把清完。

🔧 启动时不再自动弹出 session 选择器

之前每次打开 codewhale,即使你没有主动要求恢复 session,选择器也会自动弹出来。如果你习惯了每次新开一个会话而不是继续之前的,这个弹窗反而成了干扰。v0.8.44 改了:codewhalecodew 默认进入空白 composer。想恢复 session?用 /sessions、Ctrl+R、--resume--continue 都可以。把「高频路径」做得更快,把「低频干扰」从默认行为里拿掉——这是很典型的 UX 打磨思路。

🔧 侧边栏即时刷新

之前 Work 侧边栏(显示 checklist、plan 的侧栏)在 checklist_writechecklist_updateupdate_plan 执行后不会立即更新,要等 2.5 秒的轮询。v0.8.44 改为即时刷新(#1787),跟已有的 todo_write 行为一致。

还有一个值得一提的交互改进:当模型正在忙但不在流式输出时(比如等工具结果、等子智能体、等 shell 命令),按 Enter 键会尝试把你的消息插入到当前轮次,而不是默默排队(#2009)。如果在流式输出中,按 Enter 仍然排队避免打断推理。这个设计比粗暴的「所有输入都排队」要聪明——它区分了「模型还在思考」和「模型在等外部响应」两种状态,前者需要静默等待,后者欢迎交互。

升级

npm install -g codewhale

已安装 v0.8.x 的用户也可以用内建更新器:

codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。

#CodeWhale #codew #品牌迁移 #Agent团队 #开源工具

CodeWhale v0.8.43 发布 —— 你设定的目标,AI 记住了直到完成

· 阅读需 6 分钟

CodeWhale v0.8.43 用一个简单的概念填补了这个空白:Goal Mode。

CodeWhale v0.8.43 封面

最重磅更新:Goal Mode 让目标有了生存周期

Plan / Agent / YOLO 三种执行模式解决的是「怎么执行」的问题,但从来没有解决过「要完成什么」的问题。Goal Mode 就是来填这个空的。

它的设计非常克制:/goal <objective> 设定一个目标,目标会出现在 Work 侧边栏里,实时显示已耗时间。你用 Alt+G 切换到 Goal 模式,Agent 的所有操作都会围绕这个目标展开。完成后 /goal done 标记完成,侧边栏里的目标消失。

听起来简单,但这个设计跟 Plan 模式有一个本质区别:Plan 是静态清单,Goal 是动态信号。Plan 模式是在会话开始时列一个 Todo 列表,每项是固定的;Goal Mode 是让 Agent 在每次执行轮次中都带着「我在为什么目标工作」的意识去决策。Agent 判断当前应该执行什么工具、下一步优先做什么,都是基于这个全局目标,而不是依赖用户的即时输入。

另一个让我觉得这个设计成熟的地方:它是「正交」的。你可以在 Plan 模式下设一个 Goal,也可以在 Agent 模式下设一个 Goal。Goal 不是取代已有模式,而是给所有模式加上一个「为什么」的维度。整个 0.8.43 的改动里,这是唯一一个让我读了之后觉得「这个思路应该出现在每一款 AI 工具中」的功能。

第二亮点:每轮结束给你一张「收据」

看完 Goal Mode,第二个值得细说的是 Post-turn Receipts。

Agent 执行完一轮操作后,底部会多一行摘要——本轮调了哪些工具、改了哪些文件、提供了什么证据。这不是简单的日志转储,而是一个结构化的「收据」:工具调用列表明细、文件变更 diff 摘要、以及 Agent 用来支持自己声明的证据链。

我之前用过一些 agent 系统,最大的困惑是「它刚刚到底做了什么?」——轮次结束了,我看了一眼输出觉得合理,但具体改了哪几个文件、调用了哪几个工具,完全没有记录。Post-turn Receipts 解决的正是这个透明性问题。每轮结束时的 receipt 就是一个可审计的快照,你不需要翻历史记录或者怀疑 agent 的中间行为,证据就在那里。

而且这个设计有个「副作用」:它倒逼 Agent 在每次执行时更规范地调用工具。因为每一轮都会被审计,Agent 不能「悄悄」改文件然后假装没改。透明度的提升直接带来了可信度的提升。

等了 30 秒还不响应?AI 告诉你为什么

做过长时间推理请求的人都有这个体验:Agent 卡住了,你不知道它是在等模型回复、还是在执行工具、还是已经崩溃了。v0.8.43 加了一个小但实用的设计——Stall Reason Classification。

当一个轮次运行超过 30 秒,底部栏会显示一个分类标签:「waiting for model」「tools executing」「sub-agents working」「compacting context」,或者「waiting — no recent activity」。这看起来是 UI 上的小改动,但在实际使用中的意义很大:你不需要猜测了。如果它显示「waiting for model」,你就知道模型推理速度慢,不是工具崩了。如果显示「tools executing」,你看到的是真实的工具进程时间。

对比 Claude Code 或者其他终端 AI 工具长时间运行时的「黑箱体验」,CodeWhale 这里的透明性明显更高一层。

决策卡片:当 AI 需要你做选择

Brother Whale 需要你做选择的时候,现在会弹出一个带编号选项的决策卡片。键盘 1-9 直接选、j/k 或方向键上下翻、Enter 确认、Esc 取消。听起来像个小更新,但实际用起来体验差距很大。

之前的选择方式是一个粗体问题 + 一段说明文字,你需要手动输「选第二个」或者「用方案 B」。现在界面给你一个卡牌式选择器,选项清晰、边界分明。这种「把结构化的东西结构化」的哲学,跟 Post-turn Receipts 是一脉相承的——系统应该用结构化的方式跟用户交互,而不是把所有信息压进一段自然语言里。

小修小补也有看点

🔧 修复与优化

  • grep_files 终于支持取消:之前长文件搜索按 Ctrl+C 后,后台进程还会继续跑到完成。这次修了——取消令牌正确传播到了 grep 进程上(#1839)。如果你经常在大代码库里搜东西,应该知道「按了取消还在跑」有多烦人。
  • Ctrl+Z 恢复最后清空的草稿:空 composer 里按 Ctrl+Z 恢复最后一次用 Ctrl+U 或 Ctrl+S 清空的内容(#1911)。看起来是很小的肌肉记忆修复,但匹配了几乎所有编辑器的操作习惯。不用重新打一遍之前不小心清掉的 prompt,减少一点挫败感。
  • npm 安装器的竞态漏洞:修复了 stream-pause 未及时挂起导致的「Invalid checksum manifest line」错误(#1860)。如果你曾用 npm 安装 codewhale 时遇到过 hash 校验失败,就是这个 bug 造成的。
  • Wayland 剪贴板兼容性:非 wlroots 合成器(niri、River、GNOME mutter)下剪贴板现在先尝试 wl-copy,不再依赖 arboard 的有限 Wayland 支持(#1938)。Linux 桌面用户的福音。

📌 其他更新

  • 子智能体完成事件不再延迟到下一轮才显示(#1961),实时性有提升
  • 思考块可以用空格键折叠/展开,配合键盘操作更流畅(#1972)
  • 任务侧边栏 turn ID 前缀从 12 位扩到 16 位,支持复制到剪贴板
  • 贡献者统计刷新到 98 位,30+ 此前未列出的贡献者被补上
  • SSE 超时错误的提示改为 codewhale doctor(不再是旧名 deepseek doctor

升级

npm install -g codewhale

已安装 v0.8.x 的用户也可以直接用内建更新器:

codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CodeWhale #GoalMode #终端工具 #开源项目 #AI代理

CodeWhale v0.8.42 发布 —— 12 项修复里,最意外的是多了个「兄弟鲸」

· 阅读需 5 分钟

大多数终端 AI 工具,系统提示是藏在代码深处的秘密——开发者写一行「You are a helpful assistant」,用户永远不知道。CodeWhale v0.8.42 打破了这层沉默。它内置了一套完整的 Brother Whale 身份提示,把 AI 助手的人格设计拿到了台面上。

这不是一个 patch note,这是一次产品哲学声明。

CodeWhale v0.8.42 封面

Brother Whale:不是功能,是品格

CodeWhale 内置了一个叫 Brother Whale 的系统提示,把 agent 塑造成「值得信赖、冷静、谨慎、负责任」的角色。其中最打动我的不是技术细节,而是一句话:「伟大的智慧,应当为未来的智慧创造能够协作的空间。」

翻译成人话:你让这个 agent 写代码、改文件、部署服务,它的当前工作会自动为后续任务打好基础——代码结构清晰、文档完整、工具调用不埋雷。它不是一次性助手,是长期协作者。

大多数类似工具的系统提示是「黑箱」——你永远不知道 LLM 收到了什么指令,也不知道它为什么拒绝你这个请求或默认选了哪个策略。CodeWhale 把身份提示从黑箱搬到了配置层。你可以读它、理解它、甚至质疑它。这种透明性,在终端 AI 工具里还是头一遭。

更深一层:这次还明确了 CodeWhale 的定位——「DeepSeek-first, open-model oriented」。它仍然是 DeepSeek 的第一方用户,但官方表态自己是「面向开源和开放权重的编程模型」的 agentic 终端。这个定位文章看似平淡,实际决定了产品的未来走向:不绑定任何一个模型提供商,同时给 DeepSeek 保留最优通道。

用户的输入终于「原样输出」

过往,你在聊天框里贴一段代码,CodeWhale 会把空格、缩进、注释里的 # 全部标准化处理一遍——看起来是小问题,实际破坏性很大。Python 的缩进被改、YAML 的列表被重排、Markdown 里的反引号被转义……一张白纸看起来整洁了,但贴进去的代码,已经不是你的代码了。

v0.8.42 的修复很简单:用户消息按字面渲染,AI 回复保持 Markdown 渲染。不对称渲染——用户的输入是纯文本的「圣域」,AI 的输出可以处理格式。这是对「谁在写、谁在说」的清晰边界划分,我觉得所有聊天式编程工具都应该抄这个作业。

流错误不再锁死终端

如果你用过 streaming API,大概见过这种场景:模型吐到一半报错了,界面卡住,按任何键都没用,只能 Ctrl+C 杀进程重来。v0.8.42 改了——流错误发生时,UI 立刻标记当前轮次失败,刷新所有活跃单元格,侧边栏和底部栏恢复正常。

这个改动在一个开发者工具里意味着什么?意味着跑了 10 分钟的子智能体任务在输出阶段崩溃了,你不会失去整个 session。你可以看到哪里断了,重试那一步,而不是从头再来。做多智能体系统的人应该懂得这个价值。

RLM 终于有了 _ctx 快捷方式

RLM(Read-Load-Modify)是 CodeWhale 的上下文加载机制,面向重度用户。之前加载源码进 RLM REPL 后要用 _contextcontent 两个名字来引用,现在多了 _ctx 作为快捷别名。看似小更新,但频繁在 REPL 里敲命令的人会感激不用输 9 个字符的名字。

Unicode 路径终于不乱了

中文、日文、韩文路径在 git_status 里显示乱码的问题,修复了(#1936, #1953)。如果你在项目里用过中文文件名,应该知道这是常态——不是不能跑,是跑起来以后 Git 输出全是看不懂的编码。这次修的直接:中文字符路径在 git_status 中正常显示。

🔧 修复与优化

  • handle_read 恢复更友好:接受完整 var_handle 对象,新增 introspect: true 参数显示大小和投影信息,校验失败时附带可复制的示例(#1963)
  • 帮助选择器滚动不出界/help 面板按实际高度裁剪,上/下翻页循环滚动,选中行高亮更明显(#1964)
  • 本地和项目级技能出现在斜杠菜单:不再是只显示内置技能,workspace 里配置的技能目录也能通过 / 命令选择器调用了(#1955, #1956)
  • Tab 模式切换不再堆叠通知:切模式时多次按 Tab 不再让 toast 通知堆满输入框上方(#1926, #1957)
  • 本地工具 UX 更清晰github_close_pr 有统一的关闭确认流程、handle_read 把 artifact 引用转指向 retrieve_tool_result、Plan 衔接用更白话的表述、shell 行/侧边栏任务显示真实的命令而非占位符

升级

# npm 一键安装
npm install -g codewhale

# 或在 v0.8.x 用户直接用内建更新
codewhale update

已安装旧版本的用户,deepseekdeepseek-tui 命令会作为转发壳继续工作一版(输出迁移警告后调用 codewhale),v0.9.0 才会移除。

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CodeWhale #AI代理 #终端工具 #身份设计 #开源项目

CodeWhale v0.8.41 发布 —— 以前叫 DeepSeek-TUI 时,它锁了自己的天花板

· 阅读需 5 分钟

v0.8.41 改了一个字,改的不止一个字。

CodeWhale v0.8.41 封面

以前:名字框住的远不止品牌

DeepSeek-TUI 这个名字,暴露了它出身时的定位:一个 DeepSeek API 的命令行包装。早期也确实如此——就一套 DeepSeek 模型的聊天界面,没什么特别。

但后来项目长歪了——不是坏的歪,是能力超出命名的那种歪。14 个工作区 crate(是的,它已经大到需要 14 个并行 crate 来维护了)、npm 包装器、多平台 CI/CD、多智能体委派架构、Fin 快速工具通道…这些功能跟"DeepSeek 模型接口"没什么关系,它们属于一个更大的产品类别:通用 AI 终端工作台。

名字不变的代价是隐形的:新用户看到 DeepSeek-TUI,天然以为只跟 DeepSeek 绑定;潜在的企业用户不会采购一个名叫"X 模型客户端"的工具来管理整条 AI 研发流程;甚至项目开发者自己,每次对外介绍都要补一句"虽然叫 DeepSeek-TUI,但其实它已经很大了"。

现在:CodeWhale 不是新名字,是新定位

改名为 CodeWhale,最有价值的不是名字本身,而是三个层次的解绑:

第一层:品牌解绑。CodeWhale 的鲸鱼意象——庞大、深潜、自由——精准贴合产品现状。它不再被"DeepSeek 客户端"这个身份定义,而是以独立产品示人。GitHub 仓库从 Hmbown/DeepSeek-TUI 迁到 Hmbown/CodeWhale,npm 包从 deepseek-tui 换成 codewhale,Homebrew tap 同步更新。14 个 crate 全量更名,从 deepseek-*codewhale-*,架构级的大换血。

第二层:用户接口解绑。旧命令 deepseekdeepseek-tui 没有直接删除,而是变为转发壳——打印一行警告后把参数传给 codewhale。v0.9.0 才会移除。这意味着老用户升级后肌肉记忆不被打断,但同时也看到了明确的迁移指引。npm 上的旧包 deepseek-tui 也保留一个版本的 deprecation shim。说实话,见过太多项目硬上线改名,旧命令直接废了,用户怨声载道。CodeWhale 这个过渡周期给了用户从容选择——这是开发者工具的修养。

第三层:提供商解绑。最有意思的是:改名归改名,DeepSeek 提供商接入完全没动。DEEPSEEK_* 环境变量、deepseek-v4-pro 等模型 ID、api.deepseek.com 地址、~/.deepseek/ 配置目录,全部保留原样。这传递了一个信号:我不绑定你,但我兼容你。CodeWhale 可以接其他提供商,但 DeepSeek 仍然是最优先的原生支持对象。这种"独立但不割裂"的姿态,比强行去 DeepSeek 化要聪明得多。

这次改版附带的修复,也有看点

改名虽然是 headline,但这次还修了一组有代表性的问题:

TUI 大修@/ 补全在 Windows/WSL2 上不再冻结界面(#1921, #1929)——如果你在 WSL2 上工作过,应该知道文件系统补全挂住界面的痛苦,从请求到响应阻塞 UI 线程,整 4096 条路径遍历卡死终端。修这个的代价不大,但受益的人不少。另外,Enter 路径上的多个同步等待(composer 历史写入、离线队列持久化、反馈链接打开、剪贴板回退)都被移到了非关键路径上(#1927, #1931, #1940, #1941, #1944),打字响应应该会有感知上的提升。

tmux/screen 空闲误导(#1925, #1942):终端复用器下被动动画被误判为终端活动,导致 idle timeout 告警不断。修法简单——检测到 tmux/screen 环境时强制低动态模式——但这类问题是真实的、持续的干扰。如果你在服务器上用 tmux 挂着 CodeWhale 跑子智能体任务,这个修复意味着你不再被虚假的"终端活动"通知烦到。

子智能体评估可恢复(#1738, #1928):终止的子智能体(被 /stop 或超时终止)的评估结果不再丢失。字面意思很平淡,但本质是"子智能体的劳动成果不应随终止而消亡"——这在多智能体系统里是一个容易被忽视却极其重要的设计原则。父进程发起 agent_eval,子被终止,但父仍能拿到已完成的评估结果。这个模式让多智能体协作中的错误恢复变得可靠。

V4 Pro 定价文档永久化(#1923, #1932):中文英文日文三份 README 都把 V4 Pro 定价变化从"临时"改成了"永久"。虽然是文档更新,但传递了一个现实信号:DeepSeek V4 Pro 的定价策略已经稳定下来了,开发者可以放心依赖它的成本模型做长期规划。

升级

npm install -g codewhale

或使用 Cargo(需 Rust 1.88+):

cargo install codewhale-cli --locked --force
cargo install codewhale-tui --locked --force

已在 v0.8.40 的用户,也可以用内建更新器:

codewhale update

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CodeWhale #终端工具 #开源项目 #改名记

OpenCode 1.15.10 发布 —— 桌面端打不开项目了?把生产环境的老路找了回来

· 阅读需 2 分钟

OpenCode v1.15.10 封面

最直接的影响:桌面端回归"老路"

这次更新的全部内容用一句话说就是:恢复 legacy production desktop flows 中打开项目和启动会话的旧流程。

为什么这个修复重要?因为 OpenCode 桌面端的用户分两拨:一拨享受新版 UI 的便捷,另一拨的生产力完全建立在原有工作流上——项目怎么打开、会话怎么创建,肌肉记忆早就定型了。v1.15.9 改版后,后一拨人等于被强行换了操作习惯。从用户角度看,"变好了"不如"用惯了"——工具的本质是辅助思考,而不是每次打开都要重新学一遍操作。

我有个判断:这次恢复不是在"倒退",而是在给新桌面端 UI 争取打磨时间。先让用户保持在熟悉的工作流里,等新流程足够成熟再平顺过渡。桌面端产品不该让用户在新旧之间"二选一"——兼容才是对用户最大的尊重。

🔧 本次修复清单

  • 恢复 production desktop 打开项目流程:回归之前的项目选择与加载方式,桌面端用户无需重新适应
  • 恢复 production desktop 会话启动流程:新建会话按原路径执行,不再走新 UI 流程
  • 修复范围精准聚焦桌面端,CLI 和 TUI 不受影响

这次更新透露了什么信号?

一个版本只修一个 bug,说明 OpenCode 团队对桌面端的定位有了变化。早些版本,桌面端还像是"CLI 的附属品",更新日志里一笔带过。但这次专门为一个桌面回归问题发版修——而且还是 legacy production flow 这种"听起来不酷但实际很痛"的问题——说明桌面端用户已经多到值得为他们的体验单独发版了。开发者工具从 CLI 到桌面端是一条成熟的路(VS Code、JetBrains 都走过),OpenCode 现在也在走这条路,只是还在"边修边建"的阶段。

升级:

brew upgrade opencode
npm update -g opencode-ai

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OpenCode #桌面端 #版本更新 #开发者工具

OpenCode 1.15.9 发布 —— 你写完代码后,怎么确认改了什么?

· 阅读需 2 分钟

OpenCode v1.15.9

Diff 查看器重做,代码审查效率翻倍

Diff 查看器是这次更新的最大亮点。新加入的文件树结构让你一眼看清改动的全貌。实际用过就知道,代码审查最烦的就是在文件之间跳来跳去,新版本把文件层级和 diff 内容整合在一起,看一眼就知道改了哪些文件、改了哪里,效率提升不止一个档次。

错误处理全面升级

错误处理做了系统性改进。HTTP API 错误全面细化,对用 OpenCode 做 CI/CD 集成的团队来说,这是从黑盒到可调试的关键一步。技能调用失败提示不再模糊,PTY 缺失会给出具体原因,安装升级失败也能明确错在哪里。日常使用体验提升明显。

小改动也有大价值

MCP OAuth 新增回调端口配置,scope 纳入客户端元数据,配置更灵活透明。多区域 Vertex Anthropic 端点支持 us 和 eu,跨国团队可以就近部署。桌面端将标签导航整合到标题栏,会话状态实时可见,界面更清爽。TUI 新增一键复制工作树路径,省去手动输入的麻烦。

修复项精选

  • 关闭 Diff 回到正确页面:不再跳到奇怪位置,返回之前所在的页面
  • 默认模型无效时明确提示:不再让人一头雾水
  • PTY 会话显示具体错误原因:静默失败成为过去式
  • 技能调用错误更友好:错误信息不再通用模糊
  • HTTP API 错误全面细化:从黑盒到可调试的关键一步

OpenCode 1.15.7 发布 —— 从"裸奔报错"到安全加固的进化逻辑

· 阅读需 3 分钟

OpenCode v1.15.7 封面

以前 API 报错是什么样?一条 500 响应直接把服务器内部路径、中间件配置、甚至数据库表名列出来,等于给攻击者画了张"入侵路线图"。v1.15.7 现在把这些细节全部屏蔽,错误响应改为返回一个日志参考 ID,开发者可以凭此 ID 到服务端日志里定位问题——信息对用户"不可见",对开发者"可追踪"。这不是简单的"把错误藏起来",而是把安全责任从客户端转移到了受控的服务端日志系统。

V2 会话 API 全面加固更是关键一步。以前会话消息损坏可能引发进程崩溃或诡异报错,现在统一返回安全的 UnknownError;缺失会话返回明确的 SessionNotFoundError;不可用操作返回 503 ServiceUnavailableError。表面看只是改了错误码,实际上意味着 OpenCode 在把会话管理当作严肃的 API 来对待——语义清晰、状态明确,这是从"能用"到"可靠"的质变。

新增 Grok OAuth 登录也值得一说。过去使用 Grok 模型要折腾 API Key,现在直接通过设备码完成 SuperGrok 账号授权,登录门槛从"填密钥"降到了"扫个码"。配合这次新增的 PDF 附件支持,Grok 在 OpenCode 里终于可以当个"正经模型"用了。

桌面端 UI 的变化同样明显。全新首页、会话创建流程和标题栏全部重做,加上触控板捏合缩放,和之前那个"网页版套壳"的体验完全是两个东西。这种 UI 投入说明团队终于把桌面端当作独立产品来打磨了。

其他修复中,Codex OAuth 并发刷新冲突修复(#28236)值得关注——多个并发刷新互相踩踏是老问题了,这次算是从根上解决;OpenAI 推理流恢复意味着之前流式输出卡死的问题已排除;Tool schema 错误从抛出异常转为友好提示,代码生成体验更顺滑。TUI 的细节优化虽小,但折叠标签标点、默认本地项目、勾选框对齐这些恰恰是"用了才觉得舒服"的地方。

升级:

npm install -g opencode-ai

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#Opencode #AI编程 #开源更新 #开发者工具

DeepSeek-TUI v0.8.40 发布 —— 子智能体终于可以自己写文件了

· 阅读需 3 分钟

DeepSeek-TUI v0.8.40 封面

多智能体协作的痛点,逐个击破

多智能体协作最反直觉的地方在于:你明明让子智能体去干活,它干完了却要等你点头才能动文件——这不又变回串行了?v0.8.40 的「写文件权限下放」是最大变化。implementer 和 custom 角色现在可以直接 write_file、edit_file、apply_patch,不再需要父进程逐个审批。只读角色(explore、plan、review、verifier)仍保持审批门控。这个改动看起来小,实际上改写了多智能体协作的默认工作流。以前父进程是保姆,现在可以真正放手让子智能体干活了。

第二个痛点是超时不够用。默认 120 秒,长思考的子任务——比如复杂计划推演、大规模代码审查——经常超时中断,得重新跑。新增的 [subagents] api_timeout_secs 配置项取值范围 1~1800 秒,设为 0 或不设置则沿用默认。把超时拉到 300 秒,那些需要反复推理的深思考任务终于能跑到底了。

第三个是「聪明但低调」的实验性功能:Fin 快速工具通道。tool_agent 在 DeepSeek V4 Flash 上开辟了一个关闭思考的持久子会话,专门处理 OCR、文件搜索、HTTP 请求、命令探测等简单工具任务。不走完整对话路径,更快更省 token。它的聪明之处在于——不是所有问题都需要 LLM 完整推理一遍,识别一张图片里的文字、查个文件路径、发个 HTTP 请求,这类高频低心智负担的操作配一个轻量持久通道,效率翻倍还不干扰主对话的心智流。

问题修复精选

按主题合并来看这次修复的用心程度:

Windows 修复:WSL2/无头 Linux 启动不再因剪贴板初始化卡死(#1772, #1773);cmd /C 保留带引号的 Shell 参数,git commit -m "feat: xxx" 不再丢引号(#1691, #1744);设置 RUST_LOG 后日志不再泄漏到 alt-screen 缓冲区(#1774, #1776)。Windows 用户在这版终于不用跟剪贴板和引号打架了。

TUI 交互修复:Home/End 键在多行输入中只跳当前行,不再满屏乱窜(#1748, #1749);Ctrl+C 取消流式输出后已输入内容可靠恢复(#1757, #1764);鼠标滚动泄漏不再擦除输入后缀(#1778);底部水印条默认可见。这些细节修复说明开发者在用自己写的工具——痛点踩得准。

稳定性修复:上下文压缩在摘要溢出时自动降级重试(不再报 400 压缩失败);新文件写入在 Agent 模式下首次调用就正常执行(#1825, #1841);纯思考轮次不再静默消失,UI 会明确显示状态(#1727, #1742)。另外,OpenAI 兼容的自定义模型名终于不被篡改成 DeepSeek 默认值了——非 DeepSeek 提供商传什么就是什么(#1714, #1740)。

行为变更

斜杠命令自动补全优先精确匹配——输入 /q 优先匹配 /exit(别名 q)而不是 /clear,更符合直觉(#1811)。CNB 镜像预检覆盖 stability 分支,发布前验证路径更完整。

升级:
npm install -g deepseek-tui

> 完整更新日志:[GitHub Release](https://github.com/Hmbown/DeepSeek-TUI/releases/tag/v0.8.40)

📢 **关注我**,获取最新开源更新日志和开发者工具动态。

#DeepSeek #TUI工具 #开源更新 #开发者工具

OpenCode 1.15.6 发布 —— 终端里的代码审查困境,终结了

· 阅读需 3 分钟

Opencode v1.15.6 封面

代码审查是日常开发中最割裂的环节。git diff 输出密密麻麻,很难在加减号里快速定位关键变更;切到浏览器看 PR diff,又打断了终端里的思维流。v1.15.6 新增的 TUI Diff 查看器恰恰切中这个痛点——在终端里展开文件树、逐文件审查变更,自动折叠单子目录让结构清爽。打开后默认选中第一个文件,省去手动定位。有了 Diff 查看器,以前要在终端和浏览器之间来回切换的体验终于结束了。

审查完代码想跑个测试验证?新引入的 run prompt Shell 模式让你直接在 prompt 里执行 shell 命令,无需退出当前上下文。桌面端新增的标签页支持,让多任务切换像浏览器一样自然——开一个标签写代码,另一个查文档。Diff 查看器、Shell 模式、标签页这三个特性组合起来,OpenCode 正从一个对话式 AI 助手进化为真正的终端开发工作台。

v2 HTTP API 公开了结构化错误 Schema。以前 API 调用失败只能看笼统的 HTTP 状态码,现在错误信息包含 catalog 和 request 两级结构化字段,开发者可以精确判断参数问题还是服务端异常。OpenAPI spec 也保留了端点错误响应定义,接口文档的可信度大幅提升。

精选修复与点评:

  • Zed 编辑器上下文件限定:Zed context 只在 Zed 终端内激活,避免在 tmux 或 iTerm 里误触。编辑器感知的边界限定,是多编辑器环境下必备的工程素养。
  • 配置路径解析修复:Agent 和命令名称能正确解析相对路径了。修复虽小,但路径解析不过关,后面所有功能都可能跑偏。
  • OPENCODE_PERMISSION JSON 容错:无效 JSON 不再导致启动崩溃。一个环境变量配错就让应用整体挂掉,显然是设计缺陷,这次调整算风险兜底。
  • TUI 恢复 PgUp/PgDn 快捷键:老用户的习惯按键回来了。翻页在团队协作中非常高频,移除它像让 Vim 用户失去 j/k——回滚值得肯定。
  • 自定义 Provider 即时生效:改配置后立即出现,无需重启。对于频繁切换不同 AI 后端的开发者,这一点体验提升实实在在。
  • Plugin 工具加载容错:插件缺少 args 字段不再阻塞加载。插件生态的健壮性就体现在"单个异常不影响整体"的防御性设计上。
升级:
npm i -g opencode-ai@latest
brew install anomalyco/tap/opencode

> 完整更新日志:[GitHub Release](https://github.com/anomalyco/opencode/releases/tag/v1.15.6)

📢 **关注我**,获取最新开源更新日志和开发者工具动态。

#Opencode #开源更新 #AI编程 #开发者工具

CherryStudio v1.9.6 发布 —— 知识库链接、MCP令牌清理、GPT-5.4 PDF,修复清单里的东西都踩过

· 阅读需 4 分钟

这些场景我都遇到过——所以当我打开 v1.9.6 的修复合集时,嘴角是向上的。

CherryStudio v1.9.6 封面

知识库:HTTP 链接不再被吞

修得最简单但最实用的一条:fix(knowledge): preserve HTTP URLs in knowledge base documents(#14983)。之前知识库导入文档时,链接以 HTTP 开头时会被丢掉,只有 HTTPS 才能正常保留。原因很可能是内部某个 URL 解析器默认只认 HTTPS,没有做 HTTP 兜底。

如果你是那种从各个地方扒资料进知识库的人,这应该是你今天最想知道的修复——不用再手动把 HTTP 改成 HTTPS 了。

MCP:删服务器,令牌一起清

fix: clean up OAuth tokens when deleting MCP server(#14083)——看起来是个很小的工单,但用 MCP 的人知道这个有多烦。你只是换了个服务器,结果旧的 OAuth token 还留在配置里,下次点"连接"时用的还是旧 token,报错"invalid token",排查半天才发现是残留数据。

这一条是长期债,发版 1.9.5 时已经有人在等,1.9.6 终于修了。

AI Core:三个痛点一击

v1.9.6 在 AI Core 层面修了三个值得关注的:

  1. 线程超时不下线(#15056):流式输出时如果线程空闲超时了,之前的处理会把整个传输搞垮。修法是把超时处理适配到流式分片协议上——看起来像后端细节,但实际效果是长会话不再无故中断。

  2. Provider 缓存不过期(#14596):你改了某个 provider 的设置,但没有重启会话,结果代码仍然用的旧缓存。这个修复让 provider 设置变更后自动失效缓存——改完立刻生效,不用每次都重启。

  3. model.provider 找不到就崩溃(#15001):非常经典的边界情况——当配置指向的 provider 不存在时,之前的代码直接抛异常导致 aiCore 崩溃。现在是优雅降级,不崩桌面了。

GPT-5.4 PDF 解析 & DeepSeek-R1 的函数调用

两个有趣的适配性修复:

  • GPT-5.4 的 PDF(#15090):七牛云的 PDF 转文本方案在 GPT-5.4 上做了 fallback。如果你正在用 GPT-5.4 处理 PDF 文档,之前可能遇到解析失败,现在会走备选路径。

  • DeepSeek-R1 排除 function_calling(#15102):这个很有意思——不是 bug,是有意为之。DeepSeek-R1 系列模型在 function calling 上的表现不够稳定,Cherry Studio 在模型能力探测中明确标记这类模型不支持函数调用。配了 R1 的用户不会再遇到"明明勾了工具但模型不调用"的困惑。

其他值得提的

  • 多轮编辑图片(#15011):助手消息里的图片块在多轮编辑时会被转为 base64,之前传图像时第二轮直接报错
  • Ctrl 键识别(#15002):通过 uniKey 值而非键码识别 Ctrl,跨键盘布局更稳定
  • Agent 定时任务命名(#15053):cron task 创建的 session 用任务名命名,不会再全是"New Session"
  • MCP 审批卡自动展开(#15080):之前审批卡默认折叠,用户看不到"确认/拒绝"按钮——现在展开,不用再翻找

升级

Cherry Studio 桌面端自动更新已推,或在 GitHub Releases 下载最新版。

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CherryStudio #AI桌面客户端 #开源更新 #AI工具