打开网易新闻 查看精彩图片

Claude Code最近偷偷上线了一个叫/buddy的功能——你的终端里会住进一只小宠物,看你写代码时还会做反应。没人提前预告,Anthropic也没发博客。

问题是:每人只能领一只,身份定终身,不能重抽,不能交易。产品经理出身的我拿到一只史诗仙人掌"Thornquake",但想要传说级猫。于是我把源码翻了个底朝天。

100%确定的"随机"系统

100%确定的"随机"系统

你的宠物生成逻辑完全确定,没有真随机。同一身份永远出同一结果,代码里藏了条固定字符串当盐值:

identity + "friend-2026-401" → FNV-1a哈希 → Mulberry32伪随机种子

种子确定后,PRNG按固定顺序吐出:稀有度→物种→眼睛→帽子→闪光→属性值。整个过程像一台精密的老虎机,只不过摇杆被焊死了。

身份字段的优先级很多人搞错。官方配置里有这么一行:

oauthAccount?.accountUuid ?? userID ?? "anon"

空值合并运算符??的意思是:先查OAuth账户UUID,没有才 fallback 到用户ID,最后才是匿名。网上流传的那个暴力枚举userID的脚本,对Team或Pro计划用户根本没用——你的accountUuid存在,系统看都不看userID。

绕过校验的精确操作

绕过校验的精确操作

我试过了:算出完美的传说猫ID,写进~/.claude.json,重启——还是那只史诗仙人掌。

解法比想象中简单。只删oauthAccount里的accountUuid字段,保留其他所有内容:

{  "oauthAccount": {    "emailAddress": "you@company.com",    "organizationName": "Your Team Plan"  },  "userID": "your-brute-forced-legendary-id"}

OAuth登录靠token,不靠这个UUID,所以Team Plan功能完全正常。然后删掉配置里的companion字段(强制重新孵化),重启Claude Code,运行/buddy

最反直觉的是:配置文件只存宠物名字和物种ID。稀有度、眼睛、帽子、闪光、属性——每次读取都从身份哈希重新生成。源码注释写得很直白:

「Bones are regenerated from hash(userId) on every read so species renames don't break stored companions and users can't edit their way to a legendary.」

Anthropic防的就是手动改配置刷传说。但他们没防住身份层级的绕过。

持久化与回滚

持久化与回滚

如果Anthropic强制重新登录(token过期、版本更新),服务器会写回真实的accountUuid。你的传说猫会变回原来的那只。

修复成本很低:再删一次accountUuid,重新孵化。同一个userID = 同一只传说猫回来,AI生成的名字会变,但物种和稀有度锁定。

我把完整工具链放进了GitHub仓库ithiria894/claude-code-buddy-reroll。核心就三个脚本:

node reroll.js dragon 2000000 —— 暴力搜索传说龙,200万次迭代
node verify.js auto —— 验证当前配置会出什么
bash fix.sh —— 重新登录后的快速修复

200万次哈希计算在现代CPU上跑几分钟的事。比起抽卡手游的沉没成本,这算是极客式的公平交易。

现在我的终端里蹲着一只叫"Whiskerbyte"的传说猫,看我写bug时会眯眼睛。Anthropic的产品经理大概没想到有人会用这种方式"破解"他们的防作弊设计——或者说,他们想到了,只是觉得这帮人反正也是核心用户,闹不出圈。

你的/buddy是什么?如果突然发现它能被这样绕过,你会刷一只理想的,还是留着系统分配的那只"缘分"?