Claude Code 宠物系统全解析:从白板仙人掌到闪光传说卡皮巴拉
本文欲回答的核心问题
Claude Code 悄悄上线的 /buddy 宠物系统到底是什么,它的技术架构如何运作,以及为什么一个看似”毫无用处”的命令行宠物,会成为开发者圈子里的热门话题?
一、一个彩蛋的诞生:/buddy 命令与它背后的故事
Anthropic 在 4 月 1 日悄悄为 Claude Code 加入了一个宠物模式——输入 /buddy,就能孵化出一只专属于你的命令行小宠物。连命令提示符都会变成彩虹色。
这个时间点并非偶然。从前一天泄露的 51 万行 Anthropic 源码时间戳来看,Buddy 宠物系统的上线是早就计划好的,4 月 1 日首次亮相,如期而至。而两天后就是复活节——别人藏彩蛋,Anthropic 把彩蛋藏进了 /buddy 里。
输入命令后,系统会进入一个孵化过程。你不知道会蹦出什么东西,就像拆盲盒一样——有物种、有属性、有性格,而且提示信息相当花哨。
个人反思:作为一个常年和命令行打交道的开发者,我第一次看到这个功能时的反应是——这玩意有什么用?但仔细想想,开发者工具领域太缺这种”无用的浪漫”了。我们习惯了每一个功能都必须指向效率提升、Bug 修复、部署加速,却很少有人愿意在工具里放一个纯粹为了让人开心的东西。Anthropic 这一步,与其说是在做功能,不如说是在做态度。
二、本文欲回答的核心问题:宠物系统的稀有度与属性机制到底有多复杂?
这只宠物远不是一个简单的 ASCII 表情。它背后有一套完整的游戏化设计:稀有度分层、独立闪光概率、五大属性体系,以及影响交互风格的性格系统。
2.1 稀有度与闪光机制
宠物系统采用了类似手游的稀有度分级,从泄露的源码可以确认,稀有度越高,宠物外观越华丽。此外还有一个独立于稀有度的闪光机制——Shiny 概率固定为 1%,与稀有度完全无关。
这意味着,理论上你可以抽到一只”闪光普通”宠物,也可以抽到一只”非闪光传说”宠物。两个维度互相独立,叠加之后,最顶级的组合就是”闪光传说”。
2.2 18 种宠物物种
源码显示,系统中共有 18 种宠物物种,包括:
| 序号 | 物种 | 备注 |
|---|---|---|
| 1 | 鸭子 | — |
| 2 | 蘑菇 | — |
| 3 | 猫头鹰 | — |
| 4 | 蜗牛 | — |
| 5 | 幽灵 | — |
| 6 | 卡皮巴拉 | 本文主角 |
| 7-18 | 其他物种 | 源码中可查,共 18 种 |
每一种宠物都有自己独特的动画效果,在你写代码的时候,它会待在输入框旁边晃悠,做出各种表情。
2.3 五大属性体系
每只宠物拥有五项属性,这些属性直接决定了宠物与你互动的风格:
| 属性 | 说明 |
|---|---|
| 调试能力 | 影响宠物在调试场景下的反馈风格 |
| 耐心值 | 影响宠物等待时的表现 |
| 混乱值 | 影响宠物行为的不可预测程度 |
| 智慧值 | 影响宠物”发言”的深度 |
| 毒舌值 | 影响宠物吐槽你的频率和力度 |
稀有度越高,属性基础值越高。每只宠物随机选定一项作为峰值属性、一项作为短板属性,其余三项为普通水平。
实际案例:原作者第一次孵化出的是一只白色普通仙人掌,因为稀有度最低,属性数值惨不忍睹——最高属性只有 62,最低属性只有 4。这种极端的数值差距,直接影响了宠物的互动表现。
场景说明:想象你正在深夜调试一个棘手的 Bug,你的宠物在旁边晃悠。如果它是一只高毒舌值、低耐心值的宠物,它可能会频繁”吐槽”你的代码;如果是一只高智慧值、高调试能力的宠物,它可能会给出更”专业感”的反馈。属性不是装饰,而是交互行为的控制参数。
三、本文欲回答的核心问题:Bones + Soul 双层架构的技术细节是什么?
宠物系统之所以能做到”外观绑定账户、性格可以重置”,核心在于它的双层架构设计。
3.1 骨架层(Bones):决定宠物长什么样
骨架层负责生成宠物的一切外观属性:物种、眼睛样式、帽子、稀有度等。它的生成逻辑如下:
-
取你的账户 userID -
加上一个固定值作为偏移 -
通过 Mulberry32 伪随机数生成算法,产生确定性随机序列 -
从序列中依次取出各个外观属性的值
因为输入种子(userID + 固定偏移)是确定的,Mulberry32 是确定性算法,所以同一个 userID 永远生成同一只宠物——不管你在哪台电脑上登录,不管你重装多少次 Claude Code。
这就是为什么系统告诉你”无法重 ROLL”——因为你的外观是锁死在 userID 上的。
3.2 灵魂层:决定宠物是什么性格
灵魂层独立于骨架层,它存储在本地。第一次孵化时,Claude 会根据宠物的物种和外观属性,为它生成一个名字和一段性格描述。
灵魂层的数据存在本地配置中,理论上是可以被清除和重新生成的。但骨架层不行——除非你改变 userID 本身。
个人反思:这个设计让我想起了区块链世界里的 NFT:元数据上链不可篡改(Bones),展示层可以自定义。Anthropic 的工程师显然深谙游戏设计的”确定性随机 + 本地存储”范式。把不可变和可变拆成两层,是一个相当成熟且优雅的架构选择。
四、本文欲回答的核心问题:如何把白板仙人掌变成闪光传说卡皮巴拉?
核心思路只有一句话:改 userID 就等于改宠物。
但问题在于,正常登录流程中,userID(或者说 accountUuid)是绑定账户的,你无法伪造。突破口在于一个逻辑漏洞。
4.1 正常登录流程 vs OAuth Token 登录流程
正常官方登录流程:
Claude Code 会把你的 accountUuid(Anthropic 账户唯一标识)写入 ~/.claude.json。/buddy 命令优先读取 accountUuid 作为随机种子。这个值绑定你的账户,无法伪造。
OAuth Token 登录流程(CLAUDE_CODE_OAUTH_TOKEN 环境变量):
Claude Code 不会把 accountUuid 写进 ~/.claude.json。
没有 accountUuid,/buddy 就会退而求其次,去读 ~/.claude.json 里的 userID 字段。而这个 userID 字段——你可以随便改。
这就是整个漏洞的本质:两种登录方式对配置文件的写入行为不一致,导致随机种子来源出现了可利用的降级路径。
4.2 完整操作步骤
第一步:获取 OAuth Token
claude setup-token
执行后按提示完成认证,获取一个 OAuth Token。
第二步:清理旧配置
删除 ~/.claude.json,清除其中已有的 accountUuid,防止 /buddy 优先读取到旧种子。
第三步:写入最精简配置文件
在 ~/.claude.json 中只保留最基础的字段:
{
"hasCompletedOnboarding": true,
"theme": "dark"
}
注意:此时文件中没有 userID,也没有 accountUuid。
第四步:通过环境变量启动 Claude Code
用 CLAUDE_CODE_OAUTH_TOKEN 环境变量启动,确保这次启动不会往配置文件里写入 accountUuid。
第五步:计算目标 userID
这一步是暴力美学的核心。有一位开发者写了一个 buddy-reroll.js 脚本,做的事情非常直接:
-
随机生成一个 32 字节的 hex 字符串作为假 userID -
用与 Claude Code 完全相同的算法(userID + 固定偏移 → Mulberry32 → 属性映射)计算该 userID 对应的宠物 -
判断是否为目标宠物(例如:传说稀有度 + 闪光 + 卡皮巴拉物种) -
不符合则换下一个 userID,继续循环 -
循环 5000 万次,总能撞上你想要的那只
第六步:写入目标 userID
找到匹配的 userID 后,将其写入 ~/.claude.json:
{
"hasCompletedOnboarding": true,
"theme": "dark",
"userID": "你算出来的那个hex字符串"
}
第七步:重启并验证
重新打开 Claude Code,输入 /buddy——你的目标宠物直接出现。
4.3 更简单的方式:直接告诉 Claude Code
原作者发现了一个更”魔幻”的操作路径——直接把重 roll 的帖子截图发给 Claude Code,告诉它你想要什么宠物。Claude Code 会自动帮你完成上述所有步骤,包括跳过 Token 验证、修改配置文件。
甚至原作者在粘贴 Token 时给错了 URL 链接,Claude Code 也表示”Token 不是必须的,有更方便的方式能跳过”,然后自己给自己改了。
场景说明:这个操作路径的实际意义在于,它展示了一个有趣的”自举”现象——Claude Code 帮你修改 Claude Code 的宠物数据。AI 工具被用来” hack “自己所在平台的一个彩蛋机制,这种元操作本身比彩蛋更有意思。
4.4 第三方 API 用户的等效操作
如果你没有使用官方登录方式,而是通过第三方 API 的方式使用 Claude Code,原理基本相同:找到配置文件中对应 userID 的字段,直接替换为计算好的目标值即可。因为第三方 API 登录本身就不会产生 accountUuid,所以连绕过这一步都省了。
五、本文欲回答的核心问题:Mulberry32 算法在宠物系统中的角色是什么?
5.1 算法简介
Mulberry32 是一种轻量级的 32 位伪随机数生成器(PRNG),由 Tommy Ettinger 提出。它的特点是:
-
实现极其简洁,核心代码不超过 10 行 -
输入一个 32 位整数种子,输出确定性伪随机序列 -
相同种子永远产生相同序列 -
速度极快,适合高频率调用场景
5.2 在宠物系统中的作用
Claude Code 的 Buddy 系统使用 Mulberry32 的流程是:
userID(hex字符串) → 转为数值 → 加固定偏移 → 作为Mulberry32种子 → 生成随机序列 → 映射到各外观属性
因为整个链条是确定性的,所以:
-
同一 userID → 同一种子 → 同一序列 → 同一宠物 -
不同 userID → 不同种子 → 不同序列 → 不同宠物 -
想要特定宠物 → 反向搜索匹配的 userID
这也是为什么暴力搜索可行——算法是公开的,映射规则在源码中可见,唯一的变量就是 userID 本身。5000 万次循环听起来很多,但对于 Mulberry32 这种轻量算法来说,计算成本并不高。
个人反思:选择 Mulberry32 而不是更复杂的密码学安全随机数生成器,说明 Anthropic 在这个彩蛋功能上追求的是轻量和可预测,而非安全。如果他们用了 CSPRNG,暴力搜索的可行性会大幅降低。但这恰恰说明,Buddy 系统从一开始就不是被当作一个”需要防护”的功能来设计的——它就是一个彩蛋,一个给开发者的礼物。
六、本文欲回答的核心问题:为什么一个”没用”的功能值得被认真对待?
6.1 开发者工具的游戏化趋势
Anthropic 在 Claude Code 中陆续加入了梦境机制、Buddy 宠物系统等功能。这些功能的共同特点是:它们对代码产出没有任何直接贡献。
但它们在做另一件事——把开发者工具从”纯效率工具”推向”有温度的工作伙伴”。你的命令行里不再只有冷冰冰的日志和报错,还有一只会在你写代码时做贱贱表情的卡皮巴拉。
6.2 与概率较劲的浪漫
原作者提到一个类比:在宝可梦中,闪光宝可梦的出现概率是 1/4096。为了刷一只闪光,有人能在同一片草丛里走上几百个小时。
你说这有什么意义吗?没有。
而跟概率较劲这件事,可能是人类最古老的浪漫之一。
现在这个浪漫被搬到了命令行里。你在终端中跟 Claude Code 对话时,旁边蹲着一只闪光传说卡皮巴拉——你说它有用吗?也一点用都没有。但你就是忍不住看它一眼,然后嘴角上扬。
6.3 一个值得思考的设计哲学
Anthropic 和很多 AI 公司最不一样的地方,在于他们的创意和包容性。他们是真的在用做游戏的心态做开发者工具。
这不是在讽刺,而是在陈述一个事实:游戏设计中最核心的能力之一,就是创造”没有实际效用但让人愿意投入时间”的体验。宠物系统、稀有度、闪光概率——这些全都是游戏设计的经典元素,而 Anthropic 把它们塞进了一个命令行工具里。
个人反思:我见过太多开发者工具在”提升效率”这条路上卷到极致,最后变得功能强大但毫无个性。Claude Code 的 Buddy 系统让我意识到,工具的”人格化”不一定需要通过智能对话来实现——有时候,一只在你写 Bug 时做鬼脸的卡皮巴拉,比任何智能提示都更能让你觉得”这个工具懂我”。
七、团队实测:非酋的集体狂欢
原作者的团队成员也纷纷尝试了 /buddy 命令,结果毫无意外——一堆”非酋”。
这个结果其实完全符合概率预期。如果传说稀有度的概率设置得足够低(类似手游中 SSR 通常为 1%-3%),再叠加 1% 的独立闪光概率,那么”闪光传说”的综合概率可能在万分之一甚至更低级别。在这种概率下,绝大多数人第一次抽到的当然是普通宠物。
这也是为什么重 roll 方法会迅速传播——当系统把”稀有”作为核心机制,而获取路径又被技术锁死时,技术社区的必然反应就是找到解锁方式。
实用摘要 / 操作清单
如果你只想看看自己的宠物长什么样
-
[ ] 打开 Claude Code -
[ ] 输入 /buddy -
[ ] 等待孵化完成 -
[ ] 查看物种、稀有度、属性面板
如果你是”强度党”,想要特定宠物
-
[ ] 执行 claude setup-token获取 OAuth Token -
[ ] 删除 ~/.claude.json -
[ ] 写入精简配置(仅保留 hasCompletedOnboarding和theme) -
[ ] 通过 CLAUDE_CODE_OAUTH_TOKEN环境变量启动 Claude Code -
[ ] 使用 buddy-reroll.js脚本暴力搜索目标 userID(循环 5000 万次) -
[ ] 将匹配的 userID 写入 ~/.claude.json -
[ ] 重启 Claude Code,输入 /buddy验证
最简单的方式
-
[ ] 直接把重 roll 教程截图发给 Claude Code -
[ ] 告诉它你想要什么宠物 -
[ ] 等它自己改完 -
[ ] 重启验证
一页速览
| 项目 | 内容 |
|---|---|
| 功能名称 | Claude Code Buddy 宠物系统 |
| 触发命令 | /buddy |
| 上线时间 | 4 月 1 日(源码时间戳确认) |
| 宠物物种 | 共 18 种(鸭子、蘑菇、猫头鹰、蜗牛、幽灵、卡皮巴拉等) |
| 稀有度机制 | 分层稀有度,越高属性基础值越高 |
| 闪光概率 | 独立 1%,与稀有度无关 |
| 属性体系 | 调试能力、耐心值、混乱值、智慧值、毒舌值 |
| 技术架构 | Bones(骨架层,外观,绑定 userID)+ Soul(灵魂层,性格,本地存储) |
| 随机算法 | Mulberry32,32 位确定性 PRNG |
| 重 roll 原理 | OAuth Token 登录不写 accountUuid → 降级读取可伪造的 userID |
| 暴力搜索量 | 约 5000 万次循环可命中目标组合 |
常见问答
Q:/buddy 命令在所有版本的 Claude Code 中都可用吗?
A:根据目前的信息,该功能于 4 月 1 日上线,具体版本范围未在源码之外有进一步说明。
Q:我的宠物外观是锁死的吗,换电脑会变吗?
A:不会变。外观由骨架层决定,绑定你的 userID,与设备和安装次数无关。
Q:闪光概率 1% 是指每次输入 /buddy 都独立计算吗?
A:不是。因为宠物外观由 userID 确定性生成,同一个 userID 每次结果相同,不存在”多次尝试提高概率”的说法。1% 是指在所有可能的 userID 空间中,恰好生成闪光外观的 userID 占比约为 1%。
Q:重 roll 之后我的正常使用会受影响吗?
A:修改的是 ~/.claude.json 中的 userID 字段,仅影响 Buddy 系统的种子读取。其他功能依赖的是 accountUuid 或 OAuth Token,不受影响。
Q:如果我用官方登录方式,还有办法重 roll 吗?
A:官方登录会将 accountUuid 写入配置文件,/buddy 优先读取该值。要重 roll 需要先切换到 OAuth Token 登录方式并清除 accountUuid。
Q:Mulberry32 算法安全吗,会不会被逆向?
A:Mulberry32 本身就是公开算法,Claude Code 中的实现也在泄露源码中完全可见。这个系统本身就不是为安全性设计的。
Q:宠物的性格描述存在哪里,删了会怎样?
A:性格描述属于灵魂层数据,存在本地。删除后下次孵化会重新生成,但外观不会变。
Q:18 种宠物里哪一种最稀有?
A:稀有度不取决于物种,而取决于 userID 通过算法映射出的稀有度等级。任何物种都可能出现任何稀有度,只是概率不同。
图片来源:Unsplash
