Claude Code v2.1.162 发布 —— 20 多个修复背后,Claude Code 终于开始重视边角体验了

以前:claude agents 的每个入口都藏着问题
改得最多的地方是 claude agents。如果你没用过这个功能:它能列出你跑了一半被中断或切到后台的 agent 会话。听起来简单,用起来折腾。
最典型的是 attach 操作——你按方向键进去,又弹回来,又进去,又弹回来。CHANGELOG 只写了一行「偶尔 bounce 回去」,但碰过的都知道那体验有多吃瘪。修法也很直白:background service 重启后重建会话列表时,第一次尝试不再盲目 attach,先确认连接状态再跳转。
还有跨会话消息——SendMessage 在 CLAUDE_CODE_TMPDIR 指向深层路径时直接沉默了。什么叫深层路径?不是路径里文件夹多,是 $TMPDIR 本身就被嵌套在别的进程空间里,子进程找不到通信 socket。这个 bug 从 v2.0 就存在。
现在:权限系统的缝隙一个个堵上
几个安全相关修复值得单独说。
WebFetch 有一个设计缺陷:明确写了 WebFetch(domain:xxx) deny,但内置的预审批域名有更高的优先级——你写了 deny 也没用,预审批名单覆盖了你的规则。v2.1.162 改成了「用户规则 > 内置规则」的顺序。
Windows 上的权限规则匹配更离谱:路径里用 ~\(用户目录简写)或 \\server\share(UNC 路径),规则直接不生效。修法是统一做路径归一化——不能假设所有用户都用 C 盘全路径写配置。
Read deny 也不够狠:你 denied 了一个目录的读取,但 Glob/Grep 搜索时还是能从那个目录返回结果,直到渲染结果时才被拦截。修完后搜索阶段就过滤 deny 路径,不等到输出时再判。
堆了太久的亲民修复
这个版本的另一半重心是那些"终于有人处理了"的边角 bug:
MCP 超时陷阱:timeout 设成 500ms,Claude Code 把它降到 1 秒的上限,结果每个工具调用都话超时——1 秒 watchdog 把正常调用也 abort 了。修法是小于 1000ms 的值直接忽略,回退到环境变量或默认值。claude mcp get 现在会标注哪些 server 用了哪个超时。
中断丢失:session 用 stream-json 或 SDK 模式时,在首个 turn 开始瞬间按 Esc,中断信号被静默丢了——没有「Interrupted」反馈,turn 一直在跑。原因是事件循环的 race condition:中断事件在 session 状态完全初始化之前到达,监听器还没绑定上。
启动挂死:配置目录只读或不可写,Claude Code 直接白屏。修法更合理:fallback 到内存配置,把错误信息打印到 terminal——用户至少能看到启动失败了,不是一把黑屏。
LSP workspaceSymbol 无效:某些编辑器发送的 textDocument/semanticTokens 请求格式与 Claude Code 的 LSP 接口不完全匹配,workspaceSymbol 返回空。现在加了 query 参数传入语言服务器。
Windsurf 改名 Devin Desktop:IDE 菜单里的 /ide、/terminal-setup、/scroll-speed 选项——Windsurf 改名了,Claude Code 也跟上了。
一批 UI 修修补补
剩下的修复中,有几条适合一起看:
- 启动消息全面瘦身:
/effort持续到新 session 时会有确认提示,不再靠一行通知让你猜 - 启动时的提示按严重性分组排版,不再一股脑刷 8 行。session info 和 announcement 合并成一行
- Failed turn 改成一个标准警告行,不是红色错误块
- 启动画面不再刷「Claude in Chrome enabled」「marketplace installed」——这些对大多数用户是废话
- 深链接/预填充 prompt 的警告现在固定在输入框下方,不会滚动到视线之外
这些改动每一条单独看都不值一提。但凑一起,意味着你每天打开 Claude Code 时少看 3 行废话、少骂一句「怎么又卡了」——积累下来体验差距不小。
升级
# macOS 推荐
brew upgrade --cask claude-code
# 或
claude update
完整更新日志:GitHub Release
📢 关注我,获取最新开源更新日志和开发者工具动态。
#ClaudeCode #AI编程 #版本更新 #开发者工具