Claude Code 0331 系统报告

第3章 · 启动系统与多模式架构

第3章 · 启动系统与多模式架构

3.1 入口点 cli.tsx

Claude Code的启动从 entrypoints/cli.tsx 开始。这个文件实现了一套多层快速路径(Fast Path)系统,其设计哲学是:尽可能早地判断用户意图,尽可能少地加载代码。

启动流程可以分为三个阶段:

阶段一:零导入检查(<5ms)

// 在任何模块导入之前执行
if (args.includes('--version') || args.includes('-v')) {
  // 直接从编译时常量读取,不加载任何模块
  console.log(VERSION);
  process.exit(0);
}

这个优化把最常见的CI场景(claude --version 检查)压缩到了毫秒级。不加载任何模块,不初始化任何服务。

阶段二:模式分流(10+ 快速路径)

在加载完整初始化逻辑之前,cli.tsx 会检查一系列特殊模式:

  • --daemon-worker:Daemon工作进程模式
  • remote-control / rc / bridge:Bridge远程控制模式
  • --dump-system-prompt:导出系统提示(调试用)
  • mcp:MCP服务器模式
  • sdk:SDK入口模式

每种模式有独立的快速启动路径,避免加载不必要的模块。

阶段三:完整初始化

对于需要完整功能的模式(交互式、无头等),进入三步初始化:

init() → setup() → main()

init() 负责:配置加载、环境变量设置、网络初始化、后台任务启动(MDM轮询、钥匙链访问、API预连接并行执行)。

setup() 负责:会话初始化、工作树创建、钩子配置、权限检查、Trust对话框。

main() 负责:模式检测、命令/Agent加载、工具库构建、REPL启动。

3.2 编译时特性标志系统

这是理解Claude Code架构的关键。源码使用Bun的 bun:bundle 模块实现编译时条件分支:

import { feature } from 'bun:bundle';

if (feature('KAIROS')) {
  const assistantModule = require('./assistant/index.js');
  // 这整块代码在外部版本中物理不存在
}

Bun打包器在编译时将 feature() 调用替换为常量布尔值,然后通过Dead Code Elimination将不可达的分支彻底移除。这不是运行时的条件跳过——是编译产物中物理上不存在这些代码

16个主要特性标志完整清单:

#特性标志功能描述出现文件数出现次数
1KAIROS7×24自主助手模式57158
2KAIROS_BRIEF精简交互视图12~20
3KAIROS_CHANNELSMCP通道通知5~8
4KAIROS_PUSH_NOTIFICATION推送通知3~5
5KAIROS_GITHUB_WEBHOOKSGitHub事件订阅2~3
6KAIROS_DREAM自主做梦/记忆2~3
7COORDINATOR_MODE多Agent协调器1532
8BRIDGE_MODE远程控制系统8~15
9VOICE_MODE语音交互5~10
10PROACTIVE主动式Agent10~20
11ULTRAPLAN远程浏览器规划3~5
12TRANSCRIPT_CLASSIFIERAI权限分类器5~8
13WORKFLOW_SCRIPTS工作流脚本3~5
14TEAMMEM团队记忆共享4~6
15CCR_MIRRORCCR镜像同步2~3
16BUDDY虚拟宠物系统2~3

此外还有73个次要/内部特性标志(如AGENT_TRIGGERS, MONITOR_TOOL, FORK_SUBAGENT, UDS_INBOX, TORCH, ULTRATHINK, ULTRAPLAN等),代码库中共计89个特性标志。完整清单详见附录B。

3.3 10种运行模式

Claude Code的单一代码库支持以下运行模式:

1. 交互模式(Interactive) —— 默认模式。用户在终端中与Claude对话,支持完整的TUI界面、工具调用、权限审批。

2. 无头模式(Headless / Print) —— 通过 -p 参数触发。无TUI界面,直接输出结果到stdout。用于脚本集成和CI/CD流水线。

3. Bridge远程控制 —— 通过 claude bridge 子命令启动。接受来自手机/Web的远程连接,允许远程操控CLI。

4. KAIROS助手模式 —— 通过 claude assistant 子命令启动。7×24小时自主运行的AI助手,通过GitHub Webhook和MCP Channel感知环境变化,主动执行任务。

5. Coordinator协调器 —— 通过 --agent-teams 参数启动。一个Leader Claude协调多个Worker Claude并行工作。

6. Daemon守护进程 —— 通过 --daemon-worker 启动。后台常驻进程,接收调度任务。

7. 语音模式(Voice) —— 通过 /voice 命令激活。使用 voice_stream 端点实现实时语音对话。

8. SDK模式 —— 通过 entrypoints/sdk/ 入口。为第三方开发者提供编程式API。

9. MCP服务器模式 —— 通过 claude mcp 启动。Claude Code自身作为MCP服务器运行,供其他MCP客户端调用。

10. SSH远程模式 —— 通过 claude ssh <host> 启动。在远程主机上启动Claude Code会话。

3.4 main.tsx 逐段解读

main.tsx 是整个应用的心脏,4,683行代码。其核心流程可以分为以下阶段:

行1-100:模块导入与条件加载

const coordinatorModeModule = feature('COORDINATOR_MODE')
  ? require('./coordinator/coordinatorMode.js') : null;
const assistantModule = feature('KAIROS')
  ? require('./assistant/index.js') : null;

使用 require() 而非 import 是有意为之——这是Lazy Require模式,用于打破循环依赖并延迟模块加载。

行100-500:CLI参数解析

使用Commander.js构建命令行参数。特性标志门控的选项通过条件添加:

if (feature('PROACTIVE') || feature('KAIROS')) {
  program.addOption(new Option('--proactive', '...'));
}

行500-1000:初始化阶段

并行执行:MDM策略获取、钥匙链访问、API预连接、GrowthBook初始化。Terminal.app和iTerm2的备份自动恢复也在此阶段执行。

行1000-2000:模式激活

KAIROS激活路径、Coordinator模式检测、Proactive模式设置、Brief模式配置。这是特性标志密度最高的区域。

行2000-3000:工具库构建

调用 tools.tsgetAllBaseTools() 构建工具池,应用权限过滤,配置延迟加载。

行3000-4000:REPL启动

根据模式选择进入交互式REPL、无头模式、Bridge模式或KAIROS模式。

行4000-4683:辅助函数

Proactive激活、Brief激活、CLI解析辅助等。


On this page