首页/特色功能

特色功能

Buddy 宠物、Vim 模式、语音交互、UltraPlan 深度规划与反蒸馏

Claude Code 包含多个有趣和独特的功能:Buddy 虚拟宠物系统、完整的 Vim 键绑定支持、语音交互模式、UltraPlan 远程深度规划(基于 CCR 云容器),以及防止模型输出被用于蒸馏的保护措施。UltraPlan 是 Anthropic 内部专属的高级规划功能,通过 Teleport 将本地环境传送到云端 CCR,使用 Opus 模型进行多代理探索,用户在浏览器中审批计划后可选择远程执行或传回本地。

核心要点

Buddy — 18 种物种的 Tamagotchi 宠物系统(1% 传奇,0.01% 闪光传奇)
Vim 模式 — 完整 Vim 键绑定支持
语音交互 — 语音输入和转录
反蒸馏 — 输出样式剥离、undercover 模式
Cron 调度 — 定时任务系统
UltraPlan — CCR 远程深度规划,Opus 模型 + 多代理探索 + 浏览器审批

设计亮点

Vim 模式是纯函数状态机

就像自动售货机——投入硬币(输入)和按钮(事件)决定了下一个状态和输出,不存在'半按下'的按钮

Vim 的 Normal、Insert、Visual、Command 四种模式被建模为 TypeScript 联合类型。每次按键事件通过纯函数处理:输入当前状态和按键,输出新状态。因为 TypeScript 的类型系统强制穷举所有状态组合,编译器保证不存在未处理的非法状态转换。这比传统的 if-else 状态管理安全得多。

// Vim 状态机的类型安全设计
type VimMode =
  | { mode: 'normal' }
  | { mode: 'insert' }
  | { mode: 'visual', anchor: number }
  | { mode: 'command', buffer: string }

// 纯函数状态转换 — TypeScript 强制穷举
function handleKey(state: VimMode, key: string): VimMode {
  switch (state.mode) {
    case 'normal':
      if (key === 'i') return { mode: 'insert' }
      if (key === 'v') return { mode: 'visual', anchor: cursor }
      // ... TypeScript 确保处理所有 case
  }
}

语音模块懒加载——8 秒的代价

就像家里的应急发电机——不会一直开着浪费油,只在停电时才启动

语音识别依赖本地库(通过 dlopen 动态加载),初始化可能需要 8 秒以上。如果在 Claude Code 启动时就加载它,每次打开终端都要多等 8 秒——但 99% 的用户根本不用语音功能。所以设计为懒加载:第一次用 /voice 时才初始化。只有真正需要的人承担那 8 秒等待。

Cron 调度器用文件锁协调

就像卫生间的门锁——谁先锁上门谁用,其他人看到'有人'就去下一个

当你开了 3 个终端窗口都运行着 Claude Code,定时任务不应该执行 3 次。解决方案是文件锁:执行前先尝试获取锁文件,拿到了就执行,拿不到就跳过(说明另一个进程已经在处理了)。加上随机 jitter,全球用户的定时任务不会同时触发,避免 API 被瞬间涌入的请求压垮。

// Cron 文件锁 + jitter
const lock = await acquireFileLock('.claude/cron.lock')
if (!lock) return  // 另一个进程已经在执行

// 随机 jitter:避免所有用户同时触发
const jitter = Math.random() * maxJitterMs
await sleep(jitter)

try {
  await executeScheduledTask(task)
} finally {
  await releaseLock(lock)
}

物种名用字符编码隐藏

就像间谍用密码本通信——即使信件被截获,看到的也只是一串数字而非明文

构建产物中的物种名称(如 Buddy 系统的物种)使用字符编码替代明文。这样竞争对手即使拿到了编译后的 JavaScript 文件,用 grep 搜索也找不到这些内部代号。配合 Bun 的编译时 Feature Flags 和死代码消除,未启用的功能在构建产物中完全不存在——不是被注释掉,是物理上被删除了。

ExitPlanModeScanner 是纯函数状态机

就像法庭书记员——只负责记录和分类证据(事件),不做任何调查(I/O),但能根据证据链给出判决(ScanResult)

ExitPlanModeScanner 是 UltraPlan 的核心分类器。它的 ingest() 方法接收 SDKMessage[] 事件批次,返回当前的审批状态(approved/teleport/rejected/pending/terminated/unchanged)。它没有任何 I/O 操作——没有网络请求、没有定时器、没有文件读写。这意味着你可以用录制的事件流进行离线回放测试,也可以构造合成事件验证边界情况(比如同一批次中 approved 和 terminated 并存)。分离 I/O 和状态逻辑是 UltraPlan 最优雅的设计决策之一。

// 纯函数状态机——无 I/O,可离线测试
class ExitPlanModeScanner {
  ingest(newEvents: SDKMessage[]): ScanResult {
    // 只做分类,不做网络请求
    for (const m of newEvents) {
      if (m.type === 'assistant')
        // 追踪 ExitPlanMode 调用
      else if (m.type === 'user')
        // 追踪 tool_result(批准/拒绝)
      else if (m.type === 'result' && m.subtype !== 'success')
        // 追踪终止事件
    }
    // 优先级链:approved > terminated > rejected > pending
    return classify(this.exitPlanCalls, this.results)
  }
}

关键词检测的边界情况处理

就像精密的 burglar alarm——能区分真正的入侵者和路过的猫,不会因为一只猫就拉响警报

keyword.ts 需要在用户自然语言中检测 'ultraplan' 触发词,同时避免大量误触发。它实现了两阶段过滤:第一阶段构建配对符号范围表(9 种配对:反引号、双引号、尖括号、花括号、方括号、圆括号、单引号),排除引号/代码块内的出现;第二阶段对每个匹配应用 5 种上下文排除——路径上下文(src/ultraplan/)、文件扩展名(ultraplan.tsx)、标识符连字符(--ultraplan-mode)、疑问句(what is ultraplan?)、slash 命令(/rename ultraplan)。最巧妙的是 replaceUltraplanKeyword:将 'ultraplan' 替换为 'plan',保持 'please ultraplan this' → 'please plan this' 的语法正确性。

// 两阶段过滤——9 种配对 + 5 种上下文排除
function findKeywordTriggerPositions(text, keyword) {
  // 阶段 1:构建配对范围
  const quotedRanges = buildQuotedRanges(text)  // `...`, "...", {...}

  // 阶段 2:匹配 + 排除
  for (const match of text.matchAll(/\bultraplan\b/gi)) {
    if (insideQuotedRange(match, quotedRanges)) continue  // 代码块内
    if (isPathContext(text, match)) continue     // src/ultraplan/
    if (isFileExtension(text, match)) continue   // ultraplan.tsx
    if (isQuestion(text, match)) continue        // ...ultraplan?
    positions.push(match)
  }
}

UltraPlan 的竞态安全设计

就像银行转账——先冻结金额(设锁),再执行转账(异步流程),最后解冻(finally 清理)。即使转账中途断电,金额也不会凭空出现或消失

从用户按下 /ultraplan 到远程会话完成,竞态风险无处不在。双击按钮可能在 1 秒内触发两次 launchUltraplan;teleportToRemote 需要 5-10 秒,期间用户可能再次输入。三重锁设计解决这个问题:(1) ultraplanLaunching 在 teleportToRemote 之前同步设置,防止创建期间的重复启动;(2) ultraplanSessionUrl 在会话创建成功后设置,轮询期间阻止新启动;(3) task.status 允许 stopUltraplan 优雅中断——轮询的 shouldStop 回调检测到 killed 状态后抛出,catch 块检查 status !== 'running' 后静默退出。所有锁在 finally 块中清理,保证任何异常路径都不会死锁。

// 三重锁设计
// Lock 1: 创建前同步设置
setAppState(prev => prev.ultraplanLaunching ? prev : {
  ...prev, ultraplanLaunching: true  // 防止重复启动
})

// Lock 2: 会话创建后设置
setAppState(prev => ({
  ...prev, ultraplanSessionUrl: url,   // 轮询期间阻止新启动
  ultraplanLaunching: undefined,       // 清除 Lock 1
}))

// Lock 3: 停止时 kill + 清理
await RemoteAgentTask.kill(taskId)     // shouldStop 返回 true
setAppState(prev => ({
  ...prev, ultraplanSessionUrl: undefined,  // 解除 Lock 2
}))

模块架构图

加载架构图...
核心文件
utils/buddy/800 LOC

Buddy 宠物系统(18 种物种,ASCII 艺术)

utils/vim/600 LOC

Vim 键绑定实现

services/voice.ts400 LOC

语音交互服务

utils/undercover.ts200 LOC

反蒸馏保护

utils/cronScheduler.ts700 LOC

Cron 调度器

commands/ultraplan.tsx470 LOC

UltraPlan 命令入口 + launchUltraplan

utils/ultraplan/ccrSession.ts349 LOC

CCR 轮询 + ExitPlanModeScanner 状态机

utils/ultraplan/keyword.ts127 LOC

智能关键词检测(9 种配对排除)

utils/teleport.tsx1,191 LOC

Teleport 远程会话协调器

utils/teleport/gitBundle.ts293 LOC

Git 三层回退打包传输

数据流程
1
特色功能
独立的子系统
2
Buddy
宠物陪伴用户
3
Vim 模式
高效键盘操作
4
语音交互
语音输入命令
5
用户输入
/ultraplan 或关键词触发
6
资格检查
登录状态 + Feature Flag
7
Git 打包 + Teleport
三层回退 + 远程会话创建
8
CCR 远程规划
Opus + plan 权限 + 多代理
9
Phase 轮询
3s 间隔扫描事件流
10
用户审批
浏览器中编辑/批准计划
11
执行选择
远程执行 or Teleport 回本地

关键代码

加载代码...
加载代码...
加载代码...
加载代码...
加载代码...
加载代码...
加载代码...

深入解析

Buddy 宠物系统是 Claude Code 的彩蛋之一。18 种物种、4 种稀有度(70% 普通、29% 稀有、1% 传奇、0.01% 闪光传奇),每次使用 Claude Code 都会给宠物累积经验值。

Vim 模式实现了完整的 Vim 键绑定,使用 TypeScript 联合类型构建纯函数状态机。每个 Vim 模式(Normal、Insert、Visual、Command)是一个类型状态,状态转换通过纯函数实现——输入旧状态和按键事件,输出新状态,不存在中间的非法状态。

语音模块使用了懒加载策略——底层的本地语音识别库(通过 dlopen 加载)可能需要 8 秒以上的初始化时间。如果在启动时就加载,会严重拖慢 Claude Code 的启动速度。所以设计为用户第一次使用语音功能时才触发加载。

反蒸馏保护包括多项措施:剥离输出中的工具列表(不暴露内部工具名)、剥离模型信息(不暴露模型 ID)、剥离 thinking 内容(不暴露推理过程)。undercover 模式让 Claude 在输出中不泄露系统提示词。

Cron 调度器使用文件锁(lockfile)协调多个 Claude 进程——当多个终端窗口同时运行 Claude Code 时,只有获得文件锁的进程会执行定时任务,其他进程跳过。

Cron 调度器还引入了随机 jitter(抖动):不是所有用户都在整点执行任务,而是在时间窗口内随机偏移几分钟。这避免了全球数百万用户同时向 API 发送请求的'惊群效应'。

物种名称在构建产物中使用字符编码隐藏——防止竞争对手通过 grep 扫描构建产物发现内部代号和敏感功能名称。配合 Bun 编译时 Feature Flags 的死代码消除,构建产物中找不到任何未启用功能的痕迹。

UltraPlan 是一个高级规划 UI,让用户以交互式方式与 Claude 共同设计实现方案——比简单的文本对话更结构化。

【UltraPlan 深度解析】三入口架构:三个独立的触发路径共享同一个 launchUltraplan 函数。(1) /ultraplan slash 命令——用户显式调用,支持 <prompt> 参数。(2) 关键词触发——用户在普通 prompt 中输入 'ultraplan',被 keyword.ts 的两阶段扫描检测到。(3) ExitPlanModePermissionRequest 对话框中的 Ultraplan 按钮——用户在本地计划审批时可以一键升级到远程深度规划。三路径共享防重复启动的竞态保护(ultraplanLaunching + ultraplanSessionUrl 双重锁)。

【UltraPlan 深度解析】CCR 权限隔离:teleportToRemote 创建远程会话时传入 permissionMode: 'plan'——远程 CCR 容器中的 Claude 以 plan 模式运行,只能规划不能执行任何工具。这确保远程多代理探索只产出计划文本,不会意外修改代码。模型使用 Opus(通过 GrowthBook Feature Flag 动态配置),比默认的 Sonnet 更强。

【UltraPlan 深度解析】ExitPlanModeScanner 优先级链:Scanner.ingest() 对每个事件批次建立优先级链——approved(找到 ExitPlanMode tool_result 且 is_error=false)> terminated(远程会话因错误/超时/最大轮次结束)> rejected(用户点击拒绝,is_error=true 但无 TELEPORT_SENTINEL)> pending(ExitPlanMode tool_use 存在但无 tool_result)> unchanged。一个批次可能同时包含 approved + terminated(用户批准后远程崩溃),approved 优先。

【UltraPlan 深度解析】Teleport 传送机制:teleportToRemote 调用 createAndUploadGitBundle 进行三层回退打包——首选 git bundle --all(完整历史),失败则 bundle HEAD(仅最新提交),再失败则 squashed-root(压缩到根提交)。这确保无论本地 Git 状态如何,远程都能获得有效的仓库快照。会话创建使用 Haiku 模型自动生成标题和分支名。

【UltraPlan 深度解析】关键词检测的智能排除:keyword.ts 实现了两阶段扫描——第一阶段构建 'quoted ranges'(配对符号内的区域),支持 9 种配对:反引号、双引号、尖括号(仅标签式)、花括号、方括号、圆括号、单引号(排除撇号)。第二阶段对每个 \\bultraplan\\b 匹配应用 5 个排除规则:前面有 /、\\、-(路径),后面有 /、\\、-、?(路径/疑问),后面是 . + word(文件扩展名)。slash 命令输入(以 / 开头)直接跳过。

【UltraPlan 深度解析】竞态防护设计:从 launchUltraplan 到 startDetachedPoll 的完整链路使用三重锁。(1) ultraplanLaunching——在 teleportToRemote 开始前同步设置,防止多秒创建期间的重复启动。(2) ultraplanSessionUrl——会话创建成功后设置,轮询期间防止新启动。(3) task.status——stopUltraplan 设置为 killed,轮询的 shouldStop 回调在下一个 tick 检测到并优雅退出。所有锁在 finally 块中清理,确保异常路径不会死锁。

【UltraPlan 深度解析】错误恢复与孤儿防护:launchDetached 在 catch 块中检查 sessionId——如果 teleportToRemote 成功但后续步骤失败,自动调用 archiveRemoteSession 归档远程会话。没有这个防护,远程容器会空转 30 分钟(直到 CCR 超时),浪费计算资源。stopUltraplan 也先 kill 再归档,轮询的 catch 块检查 task.status 跳过已停止的会话。

【UltraPlan 深度解析】双执行模式:用户审批后有两条路径。(1) executionTarget: 'remote'——用户在浏览器 PlanModal 中选择 'Execute in CCR',远程会话直接从 plan 模式切换到正常执行模式开始编码,结果最终以 PR 形式提交。(2) executionTarget: 'local'(Teleport)——用户选择 'Execute here',浏览器发送带有 ULTRAPLAN_TELEPORT_SENTINEL 标记的拒绝反馈(让远程保持 plan 模式),计划文本随标记一起传回本地 CLI,用户在终端中执行。