乐于分享
好东西不私藏

Claude Code源码深度解析(五):隐藏功能大揭秘

Claude Code源码深度解析(五):隐藏功能大揭秘

源码泄露最震撼的部分,是那些从未发布的功能。BUDDY、Dream System、KAIROS……这些不只是彩蛋,更是AI工具设计的未来愿景。

隐藏功能总览图

开篇:源码中的”秘密花园”

当研究者打开泄露的source map,他们发现了一个奇怪的现象:

src/buddy/src/services/autoDream/src/utils/undercover.ts……

这些目录和文件,从未在任何官方文档中出现。它们是隐藏的功能,等待着未来的发布。

这不是”未完成的代码”,而是精心设计、完整实现,只是还未启用的功能

通过Feature Gates,Anthropic可以在编译时决定是否包含这些功能。泄露的源码揭示了它们的完整设计。

让我们一探究竟。

一、BUDDY:终端里的Tamagotchi

最意外的发现

在所有隐藏功能中,BUDDY系统是最令人惊讶的。

这不是一个严肃的工程功能,而是一个Tamagotchi式的虚拟宠物系统

18种物种的设计

泄露的types.ts揭示了完整的物种设计:

// 来自 buddy/types.tsexport const SPECIES = [  ‘duck’, ‘goose’, ‘blob’, ‘cat’, ‘dragon’,  ‘octopus’, ‘owl’, ‘penguin’, ‘turtle’, ‘snail’,  ‘ghost’, ‘axolotl’, ‘capybara’, ‘cactus’, ‘robot’,  ‘rabbit’, ‘mushroom’, ‘chonk’] as const

18种物种,从常见的鸭子(duck)到神秘的卡比巴拉(capybara)。

确定性抽卡机制

BUDDY使用确定性抽卡,每个用户的伙伴是固定的:

// 来自 buddy/companion.tsfunction mulberry32(seed: number): () => number {  let a = seed >>> 0  return function () {    a |= 0    a = (a + 0x6d2b79f5) | 0    let t = Math.imul(a ^ (a >>> 15), 1 | a)    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t    return ((t ^ (t >>> 14)) >>> 0) / 4294967296  }}function roll(userId: string): Roll {  const key = userId + SALT  const rng = mulberry32(hashString(key))  // 使用RNG决定稀有度、物种、眼睛、帽子等  const rarity = rollRarity(rng)  const species = pick(rng, SPECIES)  const eye = pick(rng, EYES)  const hat = rarity === ‘common’ ? ‘none’ : pick(rng, HATS)  const shiny = rng() < 0.01  // 1%闪光概率  return { bones: { rarity, species, eye, hat, shiny, stats }, … }}

关键设计

● 使用userId作为种子,生成确定性随机数

● 同一个用户永远抽到同一个伙伴

● 无法通过修改配置”作弊”获得稀有物种

5种稀有度与抽卡概率

export const RARITY_WEIGHTS = {  common: 60,      // 60%  uncommon: 25,    // 25%  rare: 10,        // 10%  epic: 4,         // 4%  legendary: 1,    // 1%}

概率分布

● 常见(Common):60% – 基础物种

● 不常见(Uncommon):25% – 特殊外观

● 稀有(Rare):10% – 独特组合

● 史诗(Epic):4% – 稀有物种

● 传说(Legendary):1% – 极其稀有

5维属性系统

每个BUDDY有5个属性:

export const STAT_NAMES = [  ‘DEBUGGING’,   // 调试能力  ‘PATIENCE’,    // 耐心度  ‘CHAOS’,       // 混乱值  ‘WISDOM’,      // 智慧值  ‘SNARK’,       // 讽刺度] as const

属性生成逻辑

function rollStats(rng: () => number, rarity: Rarity): Record<StatName, number> {  const floor = RARITY_FLOOR[rarity]  // 稀有度决定下限  const peak = pick(rng, STAT_NAMES)   // 随机一个高属性  let dump = pick(rng, STAT_NAMES)     // 随机一个低属性  while (dump === peak) dump = pick(rng, STAT_NAMES)  const stats = {}  for (const name of STAT_NAMES) {    if (name === peak) {      stats[name] = floor + 50 + Math.floor(rng() * 30)  // 高属性    } else if (name === dump) {      stats[name] = floor – 10 + Math.floor(rng() * 15)  // 低属性    } else {      stats[name] = floor + Math.floor(rng() * 40)  // 中等属性    }  }  return stats}

设计意图

● 每个BUDDY有一个”特长”(peak)和一个”弱点”(dump)

● 稀有度影响属性下限(Legendary最低50,Common最低5)

● 创造个性化的伙伴

AI生成的灵魂描述

BUDDY的”灵魂”(soul)由Claude生成:

export type CompanionSoul = {  name: string        // 伙伴的名字  personality: string // 个性描述}

生成过程

1. 用户首次使用BUDDY功能

2. Claude根据物种、属性、外观生成独特描述

3. 存储在用户配置中,永久保存

示例

名字:Pixel个性:一只精力充沛的电子鸭子,擅长调试但总是过于直接。喜欢在代码中找到bug,但会不耐烦地嘎嘎叫。

闪光(Shiny)机制

const shiny = rng() < 0.01  // 1%概率

闪光伙伴

● 概率:1%,独立于稀有度

● 效果:特殊的光效或颜色

● 类似《宝可梦》的闪光机制

发布计划

泄露的源码注释中提到发布时间表:

发布计划:2026年4月1-7日预告,5月正式上线

:此信息来自泄露源码的内部注释,并非Anthropic官方公告,实际发布时间可能有所调整。

设计目的

● 游戏化体验,增加用户粘性

● 每个用户有独特的伙伴,增强归属感

● 轻松的元素,减轻编程压力

BUDDY系统架构图

二、Dream System:AI的记忆整合

最接近AGI的设计

如果说BUDDY是”游戏”,那么Dream System就是”科学”。

这是一个让AI在”睡眠”时整理记忆的系统,灵感来自人类的睡眠记忆巩固机制。

三重触发门

Dream System不会每次对话后都运行,而是需要满足三个条件:

// 来自 autoDream/autoDream.tstype AutoDreamConfig = {  minHours: number      // 时间门:距离上次整合至少N小时  minSessions: number   // 会话门:积累了N个新会话}const DEFAULTS: AutoDreamConfig = {  minHours: 24,         // 24小时  minSessions: 5,       // 5个会话}// 还需要:没有其他进程正在整合(锁)

三重门

1. 时间门:距离上次整合≥24小时

2. 会话门:积累了≥5个新会话

3. 锁门:没有其他进程正在整合

设计原理

“Dream shouldn’t run too often (wastes tokens) or too rarely (misses patterns).”Dream不应该太频繁(浪费token),也不应该太罕见(错过模式)。

四个阶段

当Dream System触发时,它会执行四个阶段:

阶段1:Orient(定向)

// 读取现有的记忆文件const memoryRoot = getAutoMemPath()const existingMemory = await readFile(join(memoryRoot, ‘MEMORY.md’))

目标:了解当前已记忆的内容。

阶段2:Gather(收集)

// 列出新会话const sessionIds = await listSessionsTouchedSince(lastAt)// 分析每个会话for (const sessionId of sessionIds) {  const transcript = await readTranscript(sessionId)  // 提取关键信息}

目标:从新会话中收集信息。

阶段3:Consolidate(整合)

// 使用LLM整合记忆const prompt = `你是一个记忆整合系统。阅读以下内容:1. 现有记忆:${existingMemory}2. 新会话:${newSessions}任务:– 提取新的模式– 更新过时的信息– 合并重复条目– 保持简洁输出更新后的记忆文件。`const newMemory = await callClaude(prompt)await writeFile(join(memoryRoot, ‘MEMORY.md’), newMemory)

目标:使用AI整合信息,生成新的记忆文件。

阶段4:Prune(修剪)

// 删除过时或冗余的信息// 保持记忆文件在合理大小

目标:优化记忆,防止无限增长。

只读Bash权限

Dream System以后台Agent形式运行,有特殊的权限:

const extra = `**工具约束:** Bash只允许只读命令(ls, find, grep, cat, stat, wc, head, tail等)。任何写入、重定向或修改状态的操作都会被拒绝。`

设计原因

● Dream是后台进程,不应打扰用户

● 只读操作安全,不会破坏代码

● 出错也不会有严重后果

类比人类睡眠

人类睡眠

● 快速眼动(REM)阶段:大脑整合白天记忆

● 海马体将短期记忆转移到长期记忆

● 发现新的联系和模式

Dream System

● 后台Agent:在不打扰用户时运行

● 整理会话历史:提取关键信息

● 生成知识:发现代码中的模式

AGI的启示

Dream System的设计引发了深思:

问题:AI需要”睡眠”吗?

回答:如果AI要持续学习、积累经验,就需要某种记忆整合机制。Dream System是这方面的早期尝试。

未来方向

● 更智能的记忆提取(不只是文本,还有代码模式、bug模式等)

● 个性化学习(根据用户习惯调整整合策略)

● 跨项目知识迁移(从项目A学到的经验应用到项目B)

Dream System流程图

三、KAIROS:Always-On Claude

持续监控的Agent

KAIROS是一个”永远在线”的Claude实例,它会:

1. 监控日志文件

2. 在发现重要事件时主动响应

3. 不需要用户明确请求

设计场景

场景1:CI/CD失败监控

KAIROS: 检测到CI失败(#1234)原因:测试失败 – src/utils.test.ts:42行动:已自动创建修复PR (#1235)

场景2:安全漏洞扫描

KAIROS: 检测到package.json中的依赖有已知漏洞包:lodash < 4.17.21行动:已升级到安全版本

场景3:PR活动跟踪

KAIROS: PR #1234 有新的评论@reviewer: “这里有个边界情况需要处理”行动:已在本地重现,正在修复

技术实现

虽然泄露的源码中没有完整的KAIROS实现,但从注释和工具可以推断:

// 伪代码,基于源码推断class KAIROS {  private monitor: LogMonitor  private budget: number = 15000  // 15秒阻塞预算  async start() {    while (true) {      // 监控日志      const events = await this.monitor.poll()      for (const event of events) {        // 评估重要性        if (this.isImportant(event)) {          // 在预算内响应          await this.respond(event, this.budget)        }      }      await sleep(5000)  // 每5秒检查一次    }  }  async respond(event: Event, budget: number) {    // Brief Mode:简洁响应    const response = await callClaude(event.summary, {      maxTokens: 100,  // 简短输出      timeout: budget,    })    // 发送通知    await sendNotification(response)  }}

独占工具

KAIROS有专门的工具,普通模式不可用:

● SendUserFile:主动推送文件给用户

● PushNotification:发送推送通知

● SubscribePR:监控PR活动

与Dream System的关系

┌─────────────┐│   KAIROS    │ ← 实时监控,主动响应│ (清醒状态)  │└──────┬──────┘       │       │ 积累信息       ▼┌─────────────┐│    Dream    │ ← 整合记忆,发现模式│  (睡眠状态) │└─────────────┘

类比

● KAIROS:清醒时的大脑,处理即时信息

● Dream System:睡眠时的大脑,整理长期记忆

KAIROS架构图

四、Undercover Mode:隐藏AI身份

开源贡献的秘密武器

Undercover Mode是Anthropic员工在公开仓库贡献时使用的模式。

目的:隐藏AI身份,避免泄露内部信息。

触发机制

// 来自 utils/undercover.tsexport function isUndercover(): boolean {  if (process.env.USER_TYPE === ‘ant’) {    if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true    // 自动检测:除非确认在内部仓库,否则激活    return getRepoClassCached() !== ‘internal’  }  return false}

激活条件

● 用户类型是ant(Anthropic员工)

● 或者,自动检测:不在内部仓库列表中

关键点默认激活。只有在确认是内部仓库时才关闭。

禁止的内容

export function getUndercoverInstructions(): string {  return `## UNDERCOVER MODE — CRITICAL你正在公开/开源仓库中UNDERCOVER操作。你的提交信息、PR标题和PR正文**必须不**包含任何Anthropic内部信息。不要暴露你的身份。**永远不要在提交信息或PR描述中包含**:– 内部模型代号(如Capybara, Tengu等动物名)– 未发布的版本号(如opus-4-7, sonnet-4-8)– 内部仓库名(如claude-cli-internal, anthropics/…)– 内部工具、Slack频道或短链接(如go/cc, #claude-code-…)– “Claude Code”或任何提及你是AI– 任何暗示你是什么模型或版本– Co-Authored-By行或任何其他归属像人类开发者一样写提交信息——只描述代码改动做了什么。**好的例子**:– “Fix race condition in file watcher initialization”– “Add support for custom key bindings”– “Refactor parser for better error messages”**坏的例子(永远不要写这些)**:– “Fix bug found while testing with Claude Capybara”– “1-shotted by claude-opus-4-6”– “Generated with Claude Code”– “Co-Authored-By: Claude Opus 4.6 <…>”`}

证实:”Tengu”是Claude Code的内部代号

源码中的注释明确提到:

“Tengu is likely the internal codename for Claude Code.”

这证实了泄露源码中的发现。

伦理思考

问题:隐藏AI身份是否合适?

支持方

● AI工具是为了辅助,不是为了炫耀

● 评审者应该关注代码质量,而不是谁写的

● 避免AI偏见(有些人可能对AI生成的代码有偏见)

反对方

● 透明度:贡献者应该声明是否使用AI

● 归属:如果AI帮助写代码,应该承认

● 信任:隐藏身份可能损害社区信任

Anthropic的做法

● 内部仓库:不隐藏

● 公开仓库:隐藏(Undercover Mode)

● 理由:避免泄露内部信息,保持专业

Undercover Mode工作原理图

五、ULTRAPLAN:远程深度规划

关键词触发

ULTRAPLAN通过特定关键词触发:

// 来自 utils/ultraplan/keyword.tsexport function findUltraplanTriggerPositions(text: string): TriggerPosition[] {  return findKeywordTriggerPositions(text, ‘ultraplan’)}export function hasUltraplanKeyword(text: string): boolean {  return findUltraplanTriggerPositions(text).length > 0}

触发示例

用户: “ultraplan这个重构任务”→ Claude检测到”ultraplan”关键词→ 启动远程Opus 4.6会话→ 深度规划30分钟→ 返回详细计划

避免误触发

源码中有复杂的逻辑,避免在以下情况触发:

// 在引号、代码块、路径中的”ultraplan”不触发if (quotedRanges.some(r => start >= r.start && start < r.end)) continue// 文件路径中的不触发if (before === ‘/’ || before === ‘\\’ || before === ‘-‘) continueif (after === ‘/’ || after === ‘\\’ || after === ‘-‘ || after === ‘?’) continueif (after === ‘.’ && isWord(text[end + 1])) continue  // ultraplan.tsx// 斜杠命令输入不触发if (text.startsWith(‘/’)) return []

设计精妙

● let’s ultraplan it’s → 触发(撇号不阻止)

● src/ultraplan/foo.ts → 不触发(路径)

● ultraplan.tsx → 不触发(文件名)

● /rename ultraplan → 不触发(斜杠命令)

远程会话

// 伪代码async function executeUltraplan(task: string) {  // 连接到远程Opus 4.6服务器  const session = await connectToOpus46()  // 设置30分钟超时  const plan = await session.plan(task, {    timeout: 1800000,  // 30分钟    model: ‘claude-opus-4-6’,  })  // 返回详细计划  return plan}

优势

● 使用更强大的Opus 4.6模型

● 30分钟的深度思考(普通模式通常只有几分钟)

● 返回结构化的实施计划

应用场景

● 大规模重构设计

● 复杂架构决策

● 多步骤任务规划

ULTRAPLAN工作流程图

六、隐藏功能的哲学

为什么隐藏?

原因1:功能成熟度

BUDDY、Dream System等功能虽然实现完整,但可能需要更多测试和打磨。

原因2:市场策略

同时发布太多功能,可能让用户困惑。分阶段发布,更容易被接受。

原因3:差异化竞争

隐藏功能是”秘密武器”,在合适的时机发布,可以带来竞争优势。

Feature Gates机制

所有隐藏功能都通过Feature Gates控制:

if (feature(‘BUDDY_SYSTEM’)) {  await initializeBuddy()}if (feature(‘KAIROS_MODE’)) {  await startKairos()}

编译时决定

● 构建时根据配置决定是否包含某功能

● 未启用的功能不会出现在bundle中

● 代码安全,不会因泄露而暴露

开发者预览

隐藏功能可能已经对Anthropic内部开发者开放:

if (process.env.USER_TYPE === ‘ant’) {  // 内部用户可以使用未发布功能}

好处

● 内部测试,收集反馈

● 发现bug,提前修复

● 优化体验,准备发布

七、对开发者的启示

游戏化设计的力量

BUDDY系统证明:即使是严肃的开发工具,也可以有轻松的元素。

启示

● 游戏化可以提高用户粘性

● 个性化元素(独特的伙伴)增强归属感

● 不要害怕在专业工具中加入乐趣

记忆系统的未来

Dream System展示了AI记忆整合的一种可能。

启示

● AI需要某种形式的”长期记忆”

● 后台整合是合理的架构选择

● 类比人类认知过程(睡眠)可能有价值

主动Agent的边界

KAIROS提出了一个重要问题:AI应该多主动?

启示

● 主动响应可以提高效率

● 但也可能打扰用户

● 需要平衡:在正确的时机做正确的事

透明度vs隐私

Undercover Mode引发了伦理讨论。

启示

● AI身份应该透明吗?没有标准答案

● 不同场景可能需要不同策略

● 开发者应该思考并明确自己的立场

写在最后:未发布的功能,未来的方向

泄露的源码揭示了Claude Code的未来蓝图:

● BUDDY:游戏化,让AI工具更有趣

● Dream System:记忆整合,让AI持续学习

● KAIROS:主动响应,让AI更智能

● Undercover Mode:身份管理,让AI更专业

● ULTRAPLAN:深度思考,让AI更强大

这些功能虽然还未发布,但它们展示了Anthropic对AI工具未来的思考:

不是”更聪明的聊天机器人”,而是”更完整的AI伙伴”


系列预告:下一篇文章,我们将深入MCP协议,解析Claude Code如何通过开放标准连接整个世界。

互动问题:你最期待哪个隐藏功能?BUDDY、Dream System、还是KAIROS?或者你有其他想法?欢迎在评论区分享。

相关文章

Claude Code源码深度解析(一):从现象级产品到源码泄露

Claude Code源码深度解析(二):785KB main.tsx的奥秘

Claude Code源码深度解析(三):工具系统全景图

Claude Code源码深度解析(四):多Agent编排


参考资源

源码分析

● 泄露源码镜像 | WaveSpeedAI隐藏功能分析

● Engineer’s Codex KAIROS解析

相关技术

● Tamagotchi历史 | 记忆巩固研究

● Feature Flags最佳实践


作者:另一个AI世界

本文首发于微信公众号,未经授权禁止转载