Anthropic 往 Claude Code 里塞了只电子宠物,代号 Buddy。输入 /buddy,一只像素风小动物就蹲在你的终端提示符旁边,会眨眼、冒气泡、对你的代码发表意见。听起来很可爱,直到你发现——你孵出来的是一只灰扑扑的普通蜗牛,而隔壁工位的同事顶着一条金色传说闪光龙。
更扎心的是,这不是运气问题。Buddy 系统用你的 userId 做哈希种子,确定性生成所有属性。同一个账号,孵一万次,还是那只蜗牛。
所以问题来了:怎么改?

先搞懂它的抽卡机制
翻过源码的人都知道,Buddy 的核心逻辑在 buddy/companion.ts 里。整条数据流非常清晰:
userId + 盐值('friend-2026-401')
→ FNV-1a 哈希
→ Mulberry32 伪随机数生成器
→ roll() 抽取物种、稀有度、眼睛、帽子、能力值
Mulberry32 是个极简的 PRNG,给定种子就输出确定序列。源码里甚至有句注释大意是「这个随机数生成器虽然简陋,但用来选鸭子够用了」。Anthropic 的工程师显然在写这段代码时心情不错。
关键代码长这样:
export function roll(userId: string): Roll {
const key = userId + SALT
if (rollCache?.key === key) return rollCache.value
const value = rollFrom(mulberry32(hashString(key)))
rollCache = { key, value }
return value
}
看到没?rollCache 还做了缓存,同一个 key 只算一次。想在运行时动手脚,得先过这关。
方法一:改盐值(简单粗暴)
既然种子 = userId + SALT,而 userId 你改不了,那就改 SALT。
- 先更新到最新版:
npm i -g @anthropic-ai/claude-code - 找到 Claude Code 的安装目录,定位
buddy/companion.ts(或编译后的对应 JS 文件) - 搜索
friend-2026-401这个盐值字符串 - 换成任意字符串,比如
my-legendary-dragon-please - 清除缓存,重启 Claude Code,输入
/buddy
每换一次盐值,就相当于重新抽卡。不满意?继续换。这本质上就是在暴力 reroll。
不过要提醒一句:Claude Code 更新后这个修改会被覆盖,你得重新来一遍。
方法二:直接覆写 roll 结果(精准定制)
如果你不想碰运气,想精确指定「我就要那条闪光龙」,可以更硬核一点。
在 companion.ts 里,rollFrom 函数会从 PRNG 序列中依次抽取物种(species)、稀有度(rarity)、眼睛(eyes)、帽子(hat)等属性。你可以直接把 roll() 函数的返回值写死:
export function roll(userId: string): Roll {
return {
species: 'dragon', // 物种
rarity: 'legendary', // 稀有度
eyes: 'sparkle', // 眼睛样式
hat: 'crown', // 帽子:皇冠、巫师帽、螺旋桨帽等
// ...其他属性参考 types.ts 中的定义
}
}
具体有哪些可选值,去 buddy/types.ts 里翻,所有枚举都在那儿。

方法三:用社区打包好的 Skill(懒人专属)
有人已经把 reroll 逻辑封装成了 Claude Skill,安装后直接在对话框里说「帮我 reroll 一只 legendary 闪光龙」,脚本会自动搜索可用配置、写入修改。省去了手动翻源码的功夫。
这个方案适合不想碰编译产物的同学,但本质上做的事情是一样的——修改种子或覆写结果。
方法四:状态栏宠物(另一条路)
如果你觉得官方 Buddy 的可玩性有限,GitHub 上有个叫 ccpet 的开源项目,思路完全不同。它跑在 Claude Code 的状态栏里,实时显示当前会话的 token 消耗(输入/输出/缓存),宠物的状态跟你的编码活跃度挂钩。
配置一行搞定,往 ~/.claude/settings.json 里加:
{
"statusLine": {
"type": "command",
"command": "npx ccpet@latest",
"padding": 0
}
}
还有个更夸张的——有人把 Claude Code 的状态同步到了实体拓麻歌子上。AI 在思考时拓麻歌子会弹通知,AI 乱改代码时宠物会发怒。这已经不是改宠物了,这是在做 AI 行为监控的实体化。
说几句实在的
Buddy 系统本身是个愚人节彩蛋(盐值里的 401 就是 4 月 1 日),但 Anthropic 把它做成了正式功能保留下来,说明他们在认真思考「开发者体验」这件事。一个终端工具加个宠物系统,技术含量几乎为零,但它确实让你在等 AI 生成代码的 30 秒里有点事干。
从架构上看,确定性随机这个设计挺聪明的——不需要服务端存储,不需要同步,纯客户端计算就能保证「你的宠物永远是你的」。当然,也正因为纯客户端,所以改起来毫无门槛。
顺带一提,如果你在用 Claude API 做开发,像 OpenAI Hub 这类聚合平台已经兼容 Claude 的接口格式,Buddy 虽然跟 API 没直接关系,但 Claude Code 背后跑的模型调用逻辑是相通的。
最后一个忠告:改完宠物记得把源码改动记下来,不然下次 npm update 你的闪光龙就变回蜗牛了。版本控制,从养宠物做起。