今天早上我把 Claude Code 升到了 v2.1.89,正好赶上 4月1日这波更新。我平时不太追着版本号跑,但这两天社区里关于模型接入、skills 失效的讨论实在太多,加上不少人被 “deepseek-v4-pro is not a model this version of claude code recognizes” 这种报错卡在第一步,我决定升级后把这一版的实际变化和踩坑记录一起整理出来。这篇速览不是官方更新日志,而是我自己实测半天的经验帖:哪些地方值得升级,哪些老问题还在,安装、配置、模型切换这些日常操作里有哪些容易翻车的细节。如果你正在用 Claude Code,或者正打算从 VS Code 插件、桌面端、CLI 三端里挑一个入口,这篇文章应该能帮你省不少时间。
1. v2.1.89 更新内容拆解:改动不算大,但都踩在痛点上
1.1 模型识别表更新,第三方模型报错少了但没绝迹
第一个要聊的是大家最关心的模型识别问题。上一版里,只要你在配置里写了一个 Claude Code 内置列表之外的模型名,启动任务时大概率直接报 “xxx is not a model this version of claude code recognizes”,而且这个报错发生在任何实际请求发出之前,非常劝退。v2.1.89 明显扩充了内置模型识别表,对很多兼容模型的官方 ID 做了显式识别,所以之前靠“先填一个已知模型名,再让网关转发到真实模型”的土办法,现在有一部分已经不需要了。
不过我测试下来,社区里最近热传的 deepseek-v4-pro、deepseek-v4-flash 这类新模型 ID,在这一版里依然没被识别。这事其实不怪 Claude Code 团队偷懒,而是因为模型校验本身就是“静态名单匹配”,第三方模型发版速度又远快于客户端迭代速度,两者之间必然存在时间差。所以如果你接的是刚发布的新模型,别指望更新客户端就能立刻消除报错,更快的路径是配置层绕过。我自己的做法是:在 ccswitch 或环境变量里把对外暴露的模型名固定成一个 Claude Code 已知的 ID,然后在兼容网关侧把该 ID 映射到真实模型。这个方案稳定、不回滚,也不影响同一套配置切回官方模型。
还有一个细节容易被忽略:写模型名时别随手简写。很多模型 ID 是带日期后缀的,比如 claude-sonnet-4-20250514,你写 claude-sonnet-4 虽然看起来一致,但客户端做校验时是按完整字符串匹配的,简写照样报错。真到排查时,先用 claude --version 确认版本号,再打开配置看 model 字段有没有拼写问题,最后才怀疑识别表。按这个顺序来,能省掉大半冤枉路。
1.2 配置目录读取顺序收敛,三端终于能共用一个 settings.json
这版最让我有好感的变化,是配置目录读取顺序做了一次收敛。之前 CLI、桌面版、VS Code 插件各读各的配置,经常出现“在桌面端配好了,CLI 里完全无效”的情况。v2.1.89 把整体顺序统一为:命令行参数、环境变量、项目目录下的 .claude/settings.json(或 settings.local.json)、用户目录下的 ~/.claude/settings.json。优先级从高到低,项目配置覆盖用户配置。
看起来很简单,但实际影响很大。以前很多“我改了 settings.json 为什么不生效”的求助,八成是改错了层级:项目里有一个长期没人维护的 settings.local.json,里面安静地躺着一个旧 key,它会把用户级配置里的新 key 覆盖掉。现在顺序统一后,至少桌面端和 VS Code 插件默认都会去读同一个用户级配置,不用再分别维护三份,出问题的概率明显下降。不过也带来了一个新坑:如果你把 API key 配在用户级 settings.json 里,而某个项目里的 settings.local.json 又写了空 key,项目的空 key 会覆盖用户级配置,导致你在这个项目里反复认证失败。这类问题排查起来很绕,所以我建议敏感信息不要放 settings.json,统一走环境变量或 ccswitch,settings.json 只放模型名、行为开关这类非敏感配置。
另外提醒一句,settings.json 在部分入口支持 JSONC(带注释的 JSON),在部分入口只支持标准 JSON。升级后如果突然出现解析错误,先检查是不是文件里多了注释,或者编码不是 UTF-8 无 BOM。Windows 自带的记事本保存时偶尔会带 BOM,也会让解析器当场翻车。
1.3 skills 扫描顺序调整,同名技能按项目优先
这一版对 skills 的扫描顺序也动了手脚。以前如果你在 ~/.claude/skills 和某个项目目录下放了同名技能,运行时到底加载哪个基本看心情;我甚至遇到过同一个技能在 A 项目里好使、在 B 项目里失效的情况。v2.1.89 把规则改成了“项目目录优先,同名时取修改时间更新的那个”。这个规则更符合直觉:项目里的定制版本应该压过通用的个人版本,而不是被个人版本覆盖。
这个变化对日常用一两个固定技能的人来说无感,但对同时维护多套工作流的人很重要。比如我在家目录放了一套通用的“代码审查”技能,在某个前端项目里又放了一套带团队规范的前端审查技能,新规则会保证我在这个项目里触发的是团队版,而不是通用版。后面我会专门给一个可复用的技能模板,以及命名时的注意事项,这里先记住“项目优先”这条规则就行。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装部署与三端选型:CLI、桌面版、VS Code 插件怎么选
2.1 Windows、Ubuntu、macOS 下的安装与升级
先说最基础的安装。Claude Code 官方推荐的安装方式依然是 npm 全局安装,三平台通用:
bash复制npm install -g @anthropic-ai/claude-code
如果你已经装过旧版本,想升级到 v2.1.89,直接把版本号带上:
bash复制npm install -g @anthropic-ai/claude-code@v2.1.89
装完先确认版本:
bash复制claude --version
输出里能看到 v2.1.89 就算成功。这里我要提醒几个环境相关问题。Windows 下如果终端提示“claude 不是内部或外部命令”,大概率不是安装失败,而是 npm 全局目录不在 PATH 环境变量里。Windows 的 npm 全局目录默认在 %APPDATA%\npm,把这一项加进用户环境变量,重开终端就好。Ubuntu 下则要保证 Node.js 版本在 20 以上,太旧的 Node 会把 CLI 启动时的语法解析直接带崩,表现为“装完一跑就闪退”,查半天查不出原因。macOS 相对省心,但如果你用 nvm 管理 Node,注意当前 shell 是否切到了正确的 Node 版本,我见过不少人升级了 Claude Code,结果 claude 命令还指向旧版本,折腾一下午才发现是 nvm 默认版本的问题。
另外,升级前我强烈建议把 ~/.claude 目录整个压缩备份一次。这不是小题大做,而是大版本升级偶尔会重置配置目录权限、清理部分缓存,你在旧版本里手工改过的 settings.json 和 skills 就有概率被影响。备份完再升级,出问题直接解压覆盖回来,能省出半天排查时间。
2.2 三端入口怎么选:各司其职,配置共用
Claude Code 现在有三个常见入口:终端 CLI、桌面版、VS Code 插件。很多人一开始不知道选哪个,我的建议是不要只选一个,而是按场景切换。
- 终端 CLI:适合批量任务、自动化脚本、SSH 远程跑任务,也是三端里最稳定的入口。如果你主要用 Claude Code 做文件批量操作、跑测试、写脚本,CLI 是首选。
- VS Code 插件:适合在编辑器里边写代码边对话,能直接读取当前文件、选中代码片段、感知报错信息。插件本质上是包装了 CLI,所以配置共用同一套。
- 桌面版:适合不熟悉命令行、或者想要独立窗口看上下文的人,也适合团队里分享屏幕演示。桌面版底层配置目录和 CLI 一致,理论上你 CLI 里配好的 API key、模型、skills 它都能读到。
“桌面版免登录配置”这个说法其实没有那么神秘。桌面版首次运行会引导你登录,但如果你已经在 CLI 里配置好了 API key 和 base URL,桌面版启动时读到的其实是同一份用户级配置,所以不会强制跳登录页。遇到反复要求登录,优先检查 ~/.claude/settings.json 里的配置有没有被项目级文件覆盖。
还有一个容易踩的坑:多个入口共用同一个 ~/.claude 目录,等于共享同一份配置,千万不要在 VS Code 插件里手动去改另一个路径下的配置,否则会出现“CLI 里好的,VS Code 里全失效”的灵异现象。我现在的工作流是:CLI 作为主力,VS Code 插件负责编辑器场景,桌面版只在快速演示时用,三个入口共用一套 ccswitch 配置,切换模型时也只执行一次命令。
2.3 窗口快捷方式、提示音处理与卸载清理
先说 Windows 快捷方式。CLI 版本的 claude 在 Windows 上是个 .cmd 脚本,你完全可以在桌面右键新建快捷方式,目标填 claude.cmd 的完整路径,工作目录填你想启动的默认项目目录。以后双击就能直接进入 Claude Code,比开终端再敲命令快不少。如果你更喜欢 PowerShell,也可以新建一个 profile 函数,把 claude 包一层,自动 cd 到项目目录再启动。
提示音这个事,社区里问得也很多。Claude Code 在任务完成或等待用户输入时,某些版本会播放系统提示音。如果你在办公室里被这个声音搞得尴尬,可以在设置里找声音相关开关,或者直接问会话内的 Claude Code 帮你打开配置面板。不同版本、不同入口的开关位置不完全一致,最省事的办法是启动后用 /help 看当前版本暴露了哪些命令,基本都能找到对应项。
卸载这事,说难不难,但“卸载不干净”确实会影响重装。执行完 npm uninstall -g @anthropic-ai/claude-code 后,建议手动检查三个位置:~/.claude 目录(配置、缓存、技能)、系统 npm 缓存、以及编辑器插件目录。如果你确定不再使用,把 ~/.claude 整个删掉或改名备份都行;如果只是重装,保留这个目录反而能让你装回来之后配置不丢。我个人的习惯是:先备份,再删除,重装完再按需恢复。
3. 模型接入实战:ccswitch、DeepSeek、智谱、本地模型一网打尽
3.1 接入非官方模型的基本逻辑:环境变量是关键
Claude Code 接入非官方模型其实没有很多人想的那么复杂。它的认证和网关设计本来就是通过环境变量控制的,核心就三个:
bash复制ANTHROPIC_BASE_URL=https://你的网关地址
ANTHROPIC_AUTH_TOKEN=你的token或api key
ANTHROPIC_MODEL=模型名
当你设置了这三个变量,Claude Code 会把这些参数透传给指定的网关,并不要求网关必须是 Anthropic 官方。DeepSeek、智谱这类走兼容层的服务,只要它们提供了 Anthropic 兼容接口(或者你本地跑了转换代理),就能正常接入。这就是为什么社区里那么多人讨论“Claude Code 接入 DeepSeek”但不需要改任何代码——本质是配置问题。
这里我想解释一个底层逻辑:Claude Code 的模型识别表和实际可用的模型列表是两回事。识别表只用于客户端启动时的本地校验,而真正能不能用,取决于网关那侧是否支持该模型。所以遇到 “is not a model this version of claude code recognizes” 时,不要立刻认定是模型能力问题,先想想有没有绕过校验的办法。前面提到的“用一个已知模型名占位,网关再做映射”就是这个思路。很多兼容网关或者说 ccswitch 自带模型映射功能,你甚至感觉不到中间有转换层。
3.2 用 ccswitch 管理多套 API 配置
ccswitch 是我现在最依赖的小工具,它的作用简单说就是“Claude Code 配置切换器”。你可以在多个 AI 编程工具之间切换,也可以在同一个工具里维护多套 API 配置。以前我手动改环境变量或 settings.json,一旦配置多了就乱,尤其在不同项目需要不同模型时非常痛苦。ccswitch 解决的就是这个问题:把每套配置(包括 base URL、api key、模型名、网关设置)保存成一个命名配置,要用哪套就切换到哪套。
具体操作上,你可以在 ccswitch 的配置界面或命令行中新增 provider,填入供应商名称、base URL、api key、model 名,保存后执行切换命令,它就会把当前 Claude Code 的配置替换成这套。之后无论是 CLI 还是 VS Code 插件,读到的新配置都是同一套,不用手动区分配置文件。这个工具对习惯多方案并行的人尤其友好,因为很多人会同时备着官方模型、DeepSeek、智谱、本地模型好几套方案,手切配置不仅慢,还容易因为改错字段导致一整天都在折腾 401 和 529。
我用 ccswitch 还有一个小技巧:把“模型映射”也一起做进配置里。比如某套配置面向真实模型 A,但暴露给 Claude Code 的模型名是官方已知名 B,我会在 ccswitch 里把 B 到 A 的映射关系写好。这样既绕过了识别表校验,又能在不同模型之间一键切换,完全不用碰代码。
3.3 高频报错复盘:模型名不识别、settings.json 无效、529
模型名不识别这个问题,前文已经说了不少,这里再说一个典型场景。有些人会直接新建一个 settings.json,往里面写 “model”: “deepseek-v4-pro”,然后发现根本接不上。原因可能有两个:一是这种配置方式本身就需要 base URL 配合,二是模型名在本地校验层过不去。新建 settings.json 之前,先确认你写的是标准 JSON,不要有注释;再确认路径没有被环境变量覆盖。请记住:环境变量的优先级高于 settings.json,如果你同时设置了 ANTHROPIC_MODEL 环境变量,settings.json 里的 model 字段可能在启动时被环境变量覆盖掉,改了文件却没变化就是这个原因。
529 错误也是高频问题。这个状态码表示上游服务过载或限流,不是你的配置写错了。看到 529 后,我的处理顺序是:先等 10 到 30 秒重试一次;如果持续出现,降低任务并发度,比如把同时跑的任务数从 3 降到 1;再不行就换个网关或换个时段,晚高峰出现 529 的概率明显更高。还有一个小概率原因:某些第三方网关对免费额度有限制,额度耗尽后会持续返回 529,这时候换一个可用的 key 或者充值就行。
4. skills 实战:把重复工作固化成可复用技能
4.1 skill 到底是什么,和普通 prompt 有什么区别
不少人是通过“Claude Code skills”这个热词搜过来的,但它其实不是什么高深概念。skill 就是一个带描述的目录,里面一般有一个 SKILL.md 主文件,写这个技能做什么、怎么用、有什么约束;如果有需要,也可以附带脚本、模板、参考资料。当你在会话中触发相关需求时,Claude Code 会根据 skill 的描述决定是否加载它。你可以把它理解成“给 AI 用的可复用提示词包”,比每次复制粘贴 prompt 更稳定,因为它支持结构化描述、参数约定和前置条件,AI 不会每次理解跑偏。
skill 和普通 prompt 最大的区别是:prompt 是一次性消费,skill 是可以沉淀的资产。你在 A 项目里调好的技能,拿到 B 项目里,只要把技能目录复制过去(或者放到用户级技能目录),它就同样生效。而且 skill 可以叠加脚本,能做文件操作、调用本地命令,不止是“说话好听”的提示词。
4.2 制作一个“一键生成 PPT 大纲”的 skill
要理解 skill 怎么工作,最好实际做一个。我拿“一键生成 PPT 大纲”举例,是因为它在社区里问得很多,而且很适合体现 skill 的用法。目录结构可以这样:
text复制~/.claude/skills/ppt-outline/
├── SKILL.md
└── templates/
└── outline_template.md
SKILL.md 的内容大致是:
markdown复制---
name: ppt-outline
description: 根据用户输入的主题和受众,生成适合做 PPT 的章节化大纲。适用于需要快速产出演示文稿结构的场景。
---
# PPT 大纲生成
## 触发场景
当用户要求“做一份 PPT”“生成大纲”“帮我搭演示框架”时使用。
## 执行步骤
1. 先确认 PPT 的主题、受众、页数限制。
2. 按“痛点-方案-展开-落地”的结构生成章节。
3. 每一页给出标题、要点、备注三部分。
4. 输出 Markdown 大纲,页与页之间用 `---` 分隔。
放好之后,在 Claude Code 会话里输入“帮我做一份关于团队提效的 PPT 大纲”,它读到 ppt-outline 的 description 后,就会自动加载这个
