Skip to content
源码分析手册

隐藏的运行时机制:Claude Code 的后台「秘密花园」

在 Claude Code 的日常交互之下,潜伏着一套极其复杂的后台运行机制。它们有的在为你优化长期记忆,有的在偷偷记录你的终端操作,有的则在计算你离开了多久。

本质

Claude Code 不是一个简单的 REPL(读取-求值-打印循环)。它本质上是一个带有「后台进程管理器」的智能代理系统。这些机制确保了工具在对话时聪明,在对话间隙也能通过总结、学习和优化保持上下文的连贯性。

运行时的真相

  1. AutoDream(自动织梦): Claude Code 的后台记忆整合机制,通过只读子代理在空闲时自动回顾历史会话并固化关键知识。详见 AutoDream 专题

  2. AwaySummary(离开总结): 当你重新打开一个长时间未操作的会话时,Claude 会自动生成一个 1-3 句的简短摘要。它读取最后 30 条消息和当前的 Session Memory,用一个小型快速模型(Small Fast Model)告诉你「你之前在干什么」以及「接下来的下一步建议是什么」。

  3. Tips 系统(贴士调度): 那些出现在 Spinner(加载动画)旁边的提示语并非随机。它使用一种「距上次显示时间最长」的算法进行调度,并结合了严格的冷却时间(通常是 3-10 个会话)。更精妙的是它的相关性检查:例如,只有当你读过 .html 文件时,它才会推荐安装前端设计插件;只有当你运行了多个会话时,它才会提示你使用 /rename/color

  4. Asciicast(录屏): Claude Code 内部实现了一个 asciinema v2 格式的记录器。它通过劫持 process.stdout.write,在 Node.js 运行时层面捕获所有输出字符流并打上时间戳。这主要用于生成可分享的交互记录。

  5. Advisor(顾问模式): 这是一个名为 tengu_sage_compass 的隐藏功能。它会在关键决策点(如写代码前或完成任务前)调用一个更强大的「评审模型」。这个「顾问」能看到完整的工具调用历史,并给出纠偏建议。

  6. Privacy Levels(隐私分级): 系统定义了三级隐私:default(全开)、no-telemetry(关掉分析)、essential-traffic(仅保留核心流量,关掉更新检查和所有非必要联网)。

使用时的关键约束

  • AutoDream 的约束:触发门槛、只读限制等详见 AutoDream 专题
  • 性能开销:由于 Tips 系统涉及大量环境变量和文件状态检测,它被设计为在后台静默失败,绝不会因为检测相关性而卡住主流程。

推荐阅读路径

如果你对记忆是如何存储的感兴趣,可以去研究 src/services/SessionMemory/。如果你想知道这些后台任务如何不干扰 UI 渲染,请看 src/Task.ts

源码锚点

  • src/services/autoDream/autoDream.ts: 核心调度逻辑
📄 src/services/autoDream/autoDream.ts — 核心调度逻辑L56-61 of 325
typescript
const SESSION_SCAN_INTERVAL_MS = 10 * 60 * 1000

type AutoDreamConfig = {
  minHours: number
  minSessions: number
}
  • src/services/awaySummary.ts: 总结生成逻辑
📄 src/services/awaySummary.ts — 总结生成逻辑L16-23 of 75
typescript
const RECENT_MESSAGE_WINDOW = 30

function buildAwaySummaryPrompt(memory: string | null): string {
  const memoryBlock = memory
    ? `Session memory (broader context):\n${memory}\n\n`
    : ''
  return `${memoryBlock}The user stepped away and is coming back. Write exactly 1-3 short sentences. Start by stating the high-level task — what they are building or debugging, not implementation details. Next: the concrete next step. Skip status reports and commit recaps.`
}
  • src/services/tips/tipRegistry.ts: 各种 Tip 的相关性定义
📄 src/services/tips/tipRegistry.ts — 各种 Tip 的相关性定义L71-72 of 687
typescript
  context: TipContext | undefined,
  signals: { filePath?: RegExp; cli?: string[] },
  • src/utils/asciicast.ts: 终端劫持与录制实现
📄 src/utils/asciicast.ts — 终端劫持与录制实现L13-16 of 240
typescript
const recordingState: { filePath: string | null; timestamp: number } = {
  filePath: null,
  timestamp: 0,
}
  • src/utils/advisor.ts: 顾问工具的指令定义
📄 src/utils/advisor.ts — 顾问工具的指令定义L9-14 of 146
typescript
export type AdvisorServerToolUseBlock = {
  type: 'server_tool_use'
  id: string
  name: 'advisor'
  input: { [key: string]: unknown }
}
  • src/utils/privacyLevel.ts: 隐私级别判定逻辑
📄 src/utils/privacyLevel.ts — 隐私级别判定逻辑L18-28 of 56
typescript
type PrivacyLevel = 'default' | 'no-telemetry' | 'essential-traffic'

export function getPrivacyLevel(): PrivacyLevel {
  if (process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) {
    return 'essential-traffic'
  }
  if (process.env.DISABLE_TELEMETRY) {
    return 'no-telemetry'
  }
  return 'default'
}

基于 Claude Code v2.1.88 开源快照的深度分析