乐于分享
好东西不私藏

源码泄露才发现:Claude Code 终端里藏着18只 ASCII 宠物

源码泄露才发现:Claude Code 终端里藏着18只 ASCII 宠物

Claude Code · 愚人节彩蛋

源码意外泄露,才发现

终端里住着18只宠物

Anthropic 的愚人节彩蛋提前曝光:/buddy 命令可以在终端里孵化一只专属 ASCII 宠物,有18种物种、5级稀有度,以及一套认真到离谱的反作弊设计。

📖 阅读约 8 分钟 | 适合开发者、产品经理

3月31日,一个 59.8 MB 的 .map 文件出现在了 Claude Code 的 npm 包里。512,000 行 TypeScript 代码就这样裸奔在公网上。开发者们发现了一个目录:src/buddy/。

这不是什么安全漏洞,也没有泄露用户数据。Anthropic 官方把它定性为「人为失误导致的打包问题」,起因只是 .npmignore 少写了一行。但就是这一行的疏忽,让整个开发者社区在愚人节前夜,提前看到了 Anthropic 准备的惊喜。

那个 src/buddy/ 目录里,藏着一套完整的终端宠物系统。

1/buddy 是什么

设想你在终端里敲下 /buddy,屏幕上孵化出一只 ASCII 小动物——它就住在你的输入框旁边,有自己的空闲动画,偶尔会弹出一个对话气泡,用各种奇怪的口吻评论你写的代码。

这就是 Claude Buddy,Anthropic 2026 愚人节的彩蛋功能。整个系统共有 18 种物种,每种都有独立的 ASCII 图形(5行高、12字符宽、3帧动画):

类别
物种
经典
Duck、Goose、Cat、Rabbit
特色
Owl、Penguin、Turtle、Snail
神秘/趣味
Dragon、Octopus、Axolotl、Ghost、Robot、Blob
特殊
Cactus、Mushroom、Chonk、Capybara

每只 buddy 有 5 个属性,分别是 DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK,数值 0–100。系统会选一个峰值属性(尽量高)、一个弱项(尽量低),其余三个随机分布。稀有度越高,整体数值下限越高。

除物种和属性之外,还有 5 级稀有度(Common 60%、Uncommon 25%、Rare 10%、Epic 4%、Legendary 1%),以及独立 1% 概率触发的 Shiny 变体(彩虹闪光动画)。Legendary + Shiny 的概率约 0.01%,差不多是万分之一——已经有人在 Solana 上发行了以「Shiny Legendary Dragon」为原型的 memecoin。

帽子系统根据稀有度解锁:Crown、Top Hat、Propeller(Uncommon+),Halo、Wizard(Rare+),Beanie(Epic+),以及只有 Legendary 才能戴上的 Tiny Duck 帽。

💡 可用命令

/buddy 孵化你的宠物   /buddy pet 抚摸它   /buddy card 查看属性卡   /buddy mute 静音   /buddy off 隐藏

2骨架与灵魂:认真到离谱的反作弊

你的 buddy 不是随机抽到的,而是由你的账号 ID 确定性生成。算法流程:用 FNV-1a 哈希你的用户 ID,以此作为种子初始化 Mulberry32 伪随机数生成器,再跑一遍固定的抽取序列——同一个账号,每次得到的都是同一只宠物。

种子盐值是 friend-2026-401,对应 4 月 1 日(April 1,即愚人节)。

更有意思的是 Buddy 数据的存储设计——它被明确分为两类:

🦴 Bones(骨架)
🔮 Soul(灵魂)
物种、稀有度、Shiny 状态、眼睛、帽子、属性值
名字、性格、孵化日期
每次会话都从账号 ID 重新计算,不写入本地文件
首次孵化时由大模型生成,存入全局配置,永久保留

合并顺序是 { ...stored, ...bones }——新计算出来的 Bones 永远覆盖存储值。这意味着:你无法通过修改本地配置文件来刷稀有度。

这是一个针对愚人节彩蛋的反作弊机制。工程师显然预判到有人会去翻配置文件试图给自己开挂——所以他们从架构上封死了这条路。

3Capybara 与 Hex 编码的秘密

泄露代码里有一个细节让开发者们反复讨论:18 种物种的名字,全部用十六进制编码存储,而不是普通字符串。比如 capybara 在源码里是这样写的:

JavaScript

String.fromCharCode(0x63, 0x61, 0x70, 0x79, 0x62, 0x61, 0x72, 0x61); // 解码结果: “capybara”

为什么要这么做?

Anthropic 的构建系统有一个 excluded-strings.txt 扫描器,在编译时会标记特定字符串——那些字符串是内部模型代号。至少有一个物种名命中了这个过滤规则。社区普遍认为,那个物种就是 Capybara,推测它是 Anthropic 某个未发布模型的内部代号。

工程师的解决方案:把全部 18 个名字都用 Hex 编码,这样既绕过了扫描器,又不会让 Capybara 一个人显得可疑。

「工程师们用 Hex 编码了一个宠物物种名,只是为了绕过自家的构建扫描器。这是 Anthropic 做过的最接地气的事。」——某位阅读源码的开发者

讽刺的是:他们设计了一套防止模型代号泄露的机制,却因为忘记在 .npmignore 里加一行,把整个源码都打包进了 npm 包。

4愚人节玩笑,还是永久功能?

这套系统的代码量是 5 个源文件、约 79KB——对一个「玩笑功能」来说,工程量不小。Anthropic 在发布时间上也做了设计:

4/1 愚人节预热期(4月1日—7日)启动 Claude Code 时显示 15 秒彩虹 /buddy 通知
4/8 正式开放(4月8日起)命令永久可用,需要 Claude Code 2.1.89+ 及 Pro 订阅
ANT Anthropic 员工特权USER_TYPE = ‘ant’ 的账户任何时候都有权限

泄露发生后,社区的反应出乎意料地热烈。GitHub 上出现了要求加入 RPG 升级系统、物种自定义、甚至外观商店的 issue;有人在几小时内构建了独立的 buddy 查询网站;有人直接发行了 memecoin(代号 $Nebulynx)。

一条高赞评论说:「我不会生气的,终端里有这么一点个性,会让工作有趣很多。」

💡 关于泄露事件

泄露由安全研究员 Chaofan Shou(@Fried_rice)于 3 月 31 日发现。Anthropic 确认没有用户数据或凭证被泄露,已在版本 2.1.89 中修复。源码目前在 GitHub 上仍有备份存档。

· · ·

工具需要性格,不只是能力

从一个彩蛋,看到一种工程文化

终端一直是开发者待得最久、却最缺乏个性的地方。整个终端计算的美学传统就是「功能优先,形式靠边」。Claude Buddy 在挑战这个假设:一个工具可以同时管理复杂的多 agent 工作流,角落里还住着一只宠物鸭子,这两件事并不矛盾。

更值得注意的是工程细节所揭示的态度:FNV-1a 哈希、Mulberry32 PRNG、Bones/Soul 架构……这不是随手写的几行代码,是认真做出来的系统。愚人节彩蛋,Anthropic 的工程师做了完整的反作弊设计。

没有人会因为终端里有宠物而精疲力竭。但人们会因为工具只会索取效率、而不关心用户的感受而筋疲力尽。Claude Code 在告诉你:我们知道你在这里待多久。

每周深度分析 AI 行业的真实动向

读懂每一件值得读懂的大事

关注公众号「克劳德猎手」获取更多内容 👇