跳到主要内容

CodeWhale v0.8.58 发布 —— Claude 直连、钩子升级决策树、侧栏终于能点了

· 阅读需 8 分钟

v0.8.58 把这几根骨头一次性掰正了。

CodeWhale v0.8.58 封面


以前:走 OpenAI shim 的 Claude,每个请求都在妥协

回头看 v0.8.58 之前的「Claude 支持」——本质上是一个 OpenAI-compatible 通道,把 Anthropic Messages API 的结构硬塞进 /v1/chat/completions 的壳里。这在 LLM 生态早期没什么问题:大家都在学 OpenAI 的接口格式,多一层 shim 总比没有强。

但 Claude 的 Messages API 有自己的灵魂——thinking 参数、prompt caching 的断点机制、签名 replay 的 signature_delta、分布式的 cache hit/miss 用量报告——这些都和 OpenAI 的 chat completions 接口对不上。shim 层只能做减法:把 Claude 的特性裁掉,只留下和 OpenAI 重叠的部分。

结果就是你用 Claude 时永远拿不到它的完整能力:adaptive thinking 无法精细控制、prompt cache 断点无法配置、thinking signature 没法回放验证、用量统计只能看到一个笼统的数字。这不是 Claude 不行,是中间那条 shim 通道成了瓶颈。

现在:Native Anthropic provider,每个特性都对上了

#3014 把 Anthropic 从「二等公民」提到了 first-class provider。新加的 Native Anthropic provider 走 /v1/messages 接口配 x-api-key 认证,直接对话 Messages API,不再经过任何 OpenAI 包装层。

三个你现在能完整体验到的能力:

Adaptive thinking 的 effort 控制output_config.effort 让你在 claude-opus-4-8、claude-sonnet-4-6、claude-haiku-4-5 上按需调节思考深度——从快速应答到深度推理之间不再是「有或无」的二元选择,而是一条连续的滑轨。

Prompt caching 断点策略。最多 4 个断点,最早的自动丢弃——这意味着你可以把系统提示、对话历史、工具定义分别设置缓存断点,长上下文对话的延迟从秒级降到位级。之前的 shim 层根本不知道 cache_control 的存在。

Signed-thinking 回放signature_delta 让每次思考都能被签名校验和回放验证——对合规场景(审计、安全审查、敏感决策追溯)不是噱头,是真刚需。

我的判断:Native Anthropic provider 上线后,之前用 OpenAI-compatible 通道跑 Claude 的用户应该尽快迁移。不是 shim 不能用,而是你多等一天就多损失一天的 thinking 精控能力。CodeWhale 这次保留了两个通道并存,但 Native 通道才是第一优先级维护的。


以前:钩子只有 exit code 2,像个红绿灯只有红灯

CodeWhale 的工具调用钩子(hooks)此前一直是「二元制」:你的钩子脚本跑完,exit code 2 表示拒绝,其他任何 code 都表示放行。这种设计在早期够用——你可以在工具执行前插一个安全检查,通不过就打回。

但真正的安全策略不是「过与不过」这么简单:

场景理想决策
代码审计提示「这段代码含 AWS key」拒绝 + 说明理由
敏感操作前需要用户确认挂起 + 请求人工确认
Shell 命令预处理后发现参数可以优化修改参数后放行
多道安全检查叠加综合所有检查的结果

exit code 2 只能覆盖第一种。后面的「ask」「modify」「aggregate」全部做不了。

现在:Hooks v2,一个 JSON 对象取代一个 exit code

#3026 把 hooks 从「exit code 时代」推进了「JSON 决策树时代」。tool_call_before 钩子现在返回一个 JSON 对象:

{
"decision": "allow | deny | ask",
"reason": "这段代码包含硬编码的 API key,需要用户确认",
"updatedInput": { "command": "echo sanitized" },
"additionalContext": "安全策略规则 #12"
}

三个核心变化值得展开:

优先级链:多个钩子可以叠加执行。deny 优先级最高,ask 居中,allow 最低——这保证了安全策略不会因为某个宽松的钩子而被绕过。如果你的安全钩子返回 deny,后置的开发环境钩子不会 override 它。

Last-writer-wins 输入重写:当多个钩子的 updatedInput 字段冲突时,最后一个执行的钩子覆盖前面的修改。这听起来像个细节,但实际意义很大——你可以用前置钩子做「安全消毒」(移除敏感参数),用后置钩子做「格式适配」(调整参数顺序),两者互不干扰。

全局匹配 + 项目本地配置:globs 全局匹配模式和新加的 .codewhale/hooks.toml 配置让钩子不再是团队项目中心的「一份共享文件」,而是每个项目可以自定义的本地配置。全局钩子和本地钩子不是覆盖关系,是叠加关系——全局的安全策略始终生效,本地的行为调整在此基础上叠加。

我个人觉得 Hooks v2 是 v0.8.58 里最被低估的改动。Native Anthropic 是面子工程(很亮眼),但 hooks 的改造才是里子——它让 CodeWhale 从「个人开发者的玩具」向「团队协作的安全平台」迈进了一大步。企业级落地最需要的就是这种策略可编程性。


以前:路由硬编码 DeepSeek,连 sub-agent 都是 DeepSeek 的形状

这是 CodeWhale 最深层的「基因问题」:从项目命名到模型路由,一切都是围绕 DeepSeek 的 API 特性设计的。当你配置一个 sub-agent 时,系统在背后帮你选的「大模型/小模型」其实是「DeepSeek V4 Pro / DeepSeek V4 Flash」的固定映射。即便你配了 Anthropic 的 key,sub-agent 启动时还是会去 DeepSeek 的路由表里找模型。

现在:Provider-aware 路由,每个 provider 有自己的梯队

#3018 做了两件事:

第一,模型验证不再硬编码 DeepSeek model ID。每个 provider 现在有自己的 big/cheap 候选列表——Anthropic 的 big 候选是 claude-opus-4-8,cheap 候选是 claude-sonnet-4-6 或 claude-haiku-4-5。sub-agent 启动时会根据你实际在用的 provider 去查它自己的模型表,而不是去 DeepSeek 的模型表中翻。

第二,网络路由器在 provider 没有 cheap 梯队时会自动跳过。以前不管有没有便宜模型,路由器都会尝试找一个——找不到就报错,整个 spawn 流程卡住。现在没有 cheap 梯级的 provider 直接不走路由器,sub-agent 不会因为「找不到底价模型」而崩溃。

#3025 从 system prompt 层面同步做了清理:context window、sub-agent 定价、thinking 注意事项、架构特征这些「模型专属事实」现在是每个模型独立模板化的——base.md 和 constitution.md 里的内容不再暗示「你只用 DeepSeek V4」。这个改动看似只是 prompt 工程层面的「修词」,实际上代表了 CodeWhale 的自我认知变化:它不再是一个 DeepSeek CLI 工具,而是一个真正 provider-agnostic 的 AGI agent 框架。


其他值得关注的

  • TUI 卡死修复(#3033):sub-agent 负载下的快速 AgentProgress 事件之前会占满渲染循环,导致终端输入完全无响应。现在以 100ms 为间隔做 throttled repaint——这是那种你不说用户就不会注意、但一旦注意就极其烦躁的 bug。
  • Clickable sidebar(#3028):后台任务行可以直接点按显示/取消,Ctrl+K 提示行现在跑 /jobs cancel-all,agent 行打开 /subagents。所有行操作和渲染在同一个 pass 内完成,避免了点击错位。
  • Windows hooks 修复:cmd.exe 的 CRT 参数传入方式会往 JSON 字符串里注入 \" 字面量,导致 JSON 决策永远 parse 失败。修复方式是改用 raw_arg 让命令原样传给 cmd.exe。
  • Transcript 精简(#3031、#3030):紧凑的 tool-call 单元格、内部 turn/agent ID 隐藏到稳定标签之后、Ctrl+B 直接背景化前台 shell 而非弹出菜单——这些是少有人夸但每天都受益的 UX 优化。

升级方式

# 已安装用户(推荐,走 GitHub Release 二进制,不经过 npm 滞后)
codewhale update

# 首次安装(推荐 — npm)
npm install -g codewhale

# Docker
docker run --rm -it -e DEEPSEEK_API_KEY="***" -v ~/.deepseek:/home/codewhale/.deepseek ghcr.io/hmbown/codewhale:v0.8.58

# Cargo (Linux / macOS)
cargo install codewhale-cli codewhale-tui --locked

完整更新日志:GitHub Release

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

#CodeWhale #Anthropic #HooksV2 #模型路由重构 #AI编程工具