Logo
Published on

拆解 Claude Code 的终端宠物系统

Authors
  • avatar
    Name
    SeanZou
    Twitter

起因

2026年3月31日,Anthropic 的 Claude Code 完整源码被泄露到了网上。我第一时间把代码 clone 了下来——倒不是想去研究什么核心架构,主要是听说里面有个还没上线的 buddy 系统(终端宠物),而我自己最近也在做一个宠物系统,想看看大厂是怎么做的,好做个参照。

源码拉下来之后,我先大概扫了一遍目录结构,找到了 buddy 相关的几个核心文件:types.tscompanion.tssprites.tsCompanionSprite.tsxprompt.tsuseBuddyNotification.tsx。文件不多,但读下来发现里面的设计比我想象中要讲究不少。

这是一个 终端宠物(Companion/Buddy)系统,在 Claude Code CLI 的输入框旁展示一个由 ASCII art 绘制的虚拟宠物,提供趣味性和陪伴感。

它包含了 18 种不同的虚拟宠物(包括鸭子、龙、以及 Anthropic 内部非常喜欢的水豚 Capybara 等)。这些宠物甚至有 "1% 掉落率" 的稀有度设定、可装扮的帽子,以及五维属性(调试能力、耐心、混沌值、智慧、毒舌)。为了防止公司内部的 "防泄露扫描器" 发现他们在不务正业,开发者还故意使用了 String.fromCharCode () 来混淆宠物名字的字符串。

核心功能

  1. 宠物生成与属性系统 (types.ts, companion.ts)
  • 18 种物种:duck、goose、blob、cat、dragon、octopus、owl、penguin、turtle、sn ail、ghost、axolotl、capybara、cactus、robot、rabbit、mushroom、chonk
  • 5 级稀有度:common → uncommon → rare → epic → legendary,按权重随机抽取(legendary 仅 1%)
  • 外观自定义:6 种眼睛样式、8 种帽子(crown/tophat/wizard 等)、1% 概率闪光(shiny)
  • 属性系统:DEBUGGING / PATIENCE / CHAOS / WISDOM / SNARK 五维属性,稀有度决定属性下限
  • 确定性生成:使用 hash(userId) 作为 PRNG 种子(Mulberry32),同一用户永远得到同一只宠物,不可通过编辑配置伪造稀有度
  1. ASCII Art 精灵动画 (sprites.ts)
  • 每个物种有 3 帧动画(idle / fidget / 特殊动作如喷烟、眨眼)
  • 帽子渲染在精灵第一行,根据帧动态显示/隐藏
  • 窄终端下自动切换为单行 emoji 面部表情(如 (·ω·)、[·_·])
  1. 终端实时渲染 (CompanionSprite.tsx)
  • 宠物常驻在输入框右侧,500ms 一帧的 idle 动画序列(休息 → 小动作 → 眨眼)
  • 语音气泡:宠物会说话(reaction),10 秒后自动消失,最后 3 秒渐隐
  • 抚摸动画:/buddy pet 命令触发飘心动画(2.5 秒),精灵兴奋快速切换帧
  • 全屏模式适配:全屏下气泡浮动覆盖在滚屏区上方;窄终端折叠为单行显示
  • 可聚焦/选中(作为 footer 的一个选项)
  1. AI 集成 (prompt.ts)
  • 宠物拥有由 LLM 生成的灵魂(name + personality),通过 companion_intro attachment 注入到对话中
  • 当用户直接对宠物说话时,提示 Claude 不要抢答,让宠物的气泡来回应
  • 用户可通过 companionMuted 配置静音宠物
  1. 营销预告 (useBuddyNotification.tsx)
  • 2026 年 4 月 1-7 日为预告窗口:未拥有宠物的用户启动时显示彩虹色的 /buddy 提示(15 秒)
  • 4 月起功能永久上线
  • 彩虹文字效果:每个字符按位置映射不同颜色

设计亮点与价值

维度价值
用户粘性收集稀有宠物的机制鼓励用户持续使用,稀有度系统带来惊喜感
情感连接宠物有名字、性格、会说话、可以被"抚摸",创造拟人化陪伴感
品牌差异化CLI 工具中罕见的趣味功能,形成独特的记忆点和社交传播话题
防作弊设计属性由 userId 哈希确定性生成,不持久化 bones,用户无法通过编辑配置伪造稀有宠物
终端兼容宽终端完整精灵 + 气泡,窄终端优雅降级为单行面部表情

本质上,这是一个精心设计的 "彩蛋式"用户留存机制——通过在严肃的开发工具中嵌入一个轻量级虚拟宠物系统,在不干扰核心功能的前提下提升产品的趣味性和情感价值。