用途
version-check 是一个 Claude Code 技能,用于就 Claude Code 的版本选择给出建议:保持当前版本、执行更新,还是固定(pin)到某个特定版本。它的目标是给出一个推荐结论,而不是罗列一堆版本号。
Claude Code 的发布非常频繁,通常每天 1 至 2 次,因此“最佳版本”是一个不断移动的目标,答案通常是一个区间,而非某一个具体构建。
启发式判断规则(首先阅读)
- stable 落后于 latest,并且不是 LTS。npm 的 stable dist-tag 只是一个指向 latest 之后若干个补丁版本的指针。它甚至可能落后于一个重要修复版本,因此“stable”并不意味着“修复了最多 bug”。不要盲目推荐 @stable。
- 安静的版本是好信号。如果没人抱怨某个近期发布,这是一个正面信号。针对某个具体构建出现大量集中抱怨,才是需要避开的情况。
- 版本对比是最强的信号。人们比较构建的帖子(“X 破坏了 Y,我回滚到 Z”)能确切告诉你该避开哪个发布。
- 与最前沿保持约一天的差距。避开只发布了几小时的版本,让他人先发现当天的回归问题。
- 但在追踪器安静且该版本修复了你正在承受的问题时,当天发布也可以接受。如果已过去几小时且没有集中的问题群,同时 changelog 显示它修复了你已安装范围内存在的回归,那么采用它通常比等待更好。此时要明确说明你交换的是什么:几小时的现场观察时间,而不是一整天。
- 真正的杠杆是“何时更新”,而不是 stable 与 latest 之争。Claude Code 默认会自动持续更新到 latest,这正是你漂移到当天回归版本的原因。
一、已安装版本与已发布版本
可通过以下命令查看已安装版本与已发布版本:
claude --version
npm view @anthropic-ai/claude-code dist-tags --json
dist-tags 会显示 latest、stable 和 next。将其与已安装版本对比,即可看出各指针领先/落后多少。
查看近期发布及时间戳(以了解发布速度):
npm view @anthropic-ai/claude-code time --json | python3 -c "import sys,json;d=json.load(sys.stdin);print('\n'.join(f'{k}: {v}' for k,v in list(d.items())[-8:]))"
二、扫描 changelog,查找区间内的回归
获取 changelog 并阅读已安装版本与 latest 之间的条目。寻找“Fixed ... regression in X”这类行——如果某个近期构建引入了尚未修复的回归,那就是应当避开的版本。
curl -sL https://raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md | awk '/## <LATEST>/,/## <INSTALLED>/'
(将两个版本号替换进去。)在一个噪点较多的版本之后,主要由“Fixed …”组成的发布通常是一个安全的落点。
三、社区情绪(很有价值——请务必执行,不要跳过)
GitHub issues(主要来源——可靠且可抓取)
这是最可靠的信号。按 reactions 排序,搜索近期开放的 bug 报告:
gh api -X GET search/issues \
-f q="repo:anthropics/claude-code is:issue is:open created:>=<DATE> label:bug" \
-f sort=reactions -f per_page=25 \
--jq '.items[] | "\(.created_at[:10]) +\(.reactions.total_count) c\(.comments) #\(.number) \(.title)"'
(将 <DATE> 设为今天前约 3 天。)版本回归表现为某个发布之后立即出现的一批高 reaction issue。0 至 1 个 reaction 的单个报告是噪声,不是信号——追踪器一直都有这类零散报告。
将标题与 changelog 区间交叉比对:如果某个高排名 issue 已被 latest 中的修复/开关解决,那么该构建更安全,而不是更危险。大多是次要问题或服务端问题(API 500/529)= 安静的发布 = 好信号。
要判断只发布了几小时的版本,去掉 label:bug 和 is:open,并把日期设为今天——你需要的是它发布以来提交的一切,在任何人分类或打标签之前。
还要检查这些 issue 是否与 CLI 有关。关于 Claude Desktop 或 VS Code 扩展的集中报告,并不能说明 Claude Code CLI 构建是否安全。
Reddit(次要来源——可通过 DuckDuckGo 跳转访问)
r/ClaudeAI 上的版本对比帖子很有价值,但 Reddit 现在硬性屏蔽所有直接自动化途径——curl(主机和容器)、WebSearch 爬虫(被 user-agent 拒绝),以及冷启动的 Playwright 导航(网络安全质询页面)。可靠的进入方式是 reddit-fetch 技能的 DuckDuckGo-hop 解锁:用 Playwright 导航到 html.duckduckgo.com/html/?q=site:reddit.com/r/ClaudeAI+... 结果重定向一次,这会设置会话 cookie,之后直接 .json 导航即可工作:
https://www.reddit.com/r/ClaudeAI/search.json?q=claude+code+update+broke+OR+regression&restrict_sr=on&sort=new&t=week&limit=25
应用上述启发式规则:近期更新帖正面或安静令人安心;高分“X 坏了”的帖子则指出了应跳过的构建。
四、测试断言,而不是争论
当问题是“我是否真的需要这个版本来获得 X”(通常是新模型)时,直接运行它即可。新模型是服务端的,因此它通常能在旧客户端上工作;旧客户端做错的是围绕它的元数据。
claude -p "Reply with exactly: ok" --model <model-id> --output-format json 2>&1 \
| python3 -c "import sys,json;u=json.load(sys.stdin)['modelUsage'];print(json.dumps({m:{'contextWindow':v['contextWindow'],'costUSD':v['costUSD']} for m,v in u.items()},indent=2))"
modelUsage 是诚实的答案:它会指明实际服务该轮次的模型(忽略 Haiku 行,那是后台辅助),并报告客户端正在应用的 contextWindow。一个新模型在旧客户端上响应,但显示 200000 窗口,而 changelog 承诺 1000000,意味着模型可用,但客户端对其设了上限——这是一个具体、可核查的更新理由,而不是模糊的理由。
更新后重新运行同一命令,确认数字发生了变化。
五、给出建议
- 如果已安装版本处于近期、评价良好的区间,且区间内没有回归:保持现状,不要追逐只发布了几小时的版本。
- 如果某个构建存在已知回归,推荐最后一个良好版本,并固定/回滚到该版本。
- 对于曾被坑过的用户:禁用自动更新器,改为有意识地更新(仓库的安装脚本会这样做),而不是机械地追踪 @stable。
安装特定版本——先确认它当初是如何安装的
npm install -g @anthropic-ai/claude-code@X.Y.Z
上述命令并非通用。在原生安装上,它会失败并报 EEXIST: file already exists /Users/<you>/.local/bin/claude,因为该路径是指向 ~/.local/share/claude/versions/ 的符号链接,npm 不会覆盖它。不要用 --force 强行通过——那会用 npm shim 替换原生启动器。
ls -la "$(command -v claude)" # 指向 ~/.local/share/claude/versions/ 的符号链接 = 原生安装
- 原生安装 →
claude install X.Y.Z(回滚使用同一命令) - npm 安装 →
npm install -g @anthropic-ai/claude-code@X.Y.Z
无论哪种方式,之后都用 claude --version 确认——包管理器报告成功,并不等于启动器已指向新构建。
适用场景
- 询问哪个 Claude Code 版本最好或最安全
- 询问是否应当立即更新
- 怀疑某个版本存在回归或问题
- 需要回滚或固定到特定版本
- 需要确认某版本是否值得为之更新(如新模型支持)
限制
本文档中的版本号、时间戳、命令输出与社区反馈均为示例或需替换的占位符,实际执行时须替换为真实值。技能不保证任何特定版本的稳定性,也不保证社区追踪器始终可用。部分命令依赖特定工具(npm、gh、curl、python3、Playwright)的可用性,Reddit 访问依赖 DuckDuckGo-hop 绕过。收费、价格与平台支持信息暂未提供。