嗨站  /  架构总览 /  Claude Code 启动流程

Claude Code 启动流程

为什么 main.tsx 值得重点看

很多项目的入口文件只是薄薄一层,但 Claude Code 的 main.tsx 明显不是。从导入规模和初始化动作就能看出来,它承担的是”系统装配器”的角色。

一开头就在抢启动时间

文件最前面的几个 side effect 很有代表性:

profileCheckpoint('main_tsx_entry');
import { startMdmRawRead } from './utils/settings/mdm/rawRead.js';
startMdmRawRead();
import { ensureKeychainPrefetchCompleted, startKeychainPrefetch } from './utils/secureStorage/keychainPrefetch.js';
startKeychainPrefetch();

这说明 Claude Code 团队已经把启动性能当成正式问题来优化。入口文件不只是”能跑起来”,而是在尽量把一些 I/O 提前并行化。

它先决定”这次启动是什么会话”

启动后要先弄清几个问题:当前是不是交互模式、有没有远程会话或桥接模式、要不要恢复旧会话、模型、权限、提示风格、工作目录是什么。这些信息会影响后续整个系统装配结果。

命令、工具、设置是在这里汇总的

import { getSystemContext, getUserContext } from './context.js';
import { filterCommandsForRemoteMode, getCommands } from './commands.js';
import { getTools } from './tools.js';
import { launchRepl } from './replLauncher.js';

这几行代码几乎已经把入口层的主线交代清楚了:先拿上下文、再拿命令、再拿工具、最后进入 REPL。

REPL 只是表层,真正重要的是”运行态装配完成”

真正关键的是:在 R 出现之前,系统已经把下面这些东西准备好了:会话设置、模型选择、工具集合、命令集合、上下文数据、MCP/LSP/插件状态、AppState 初始值。

启动流程可以粗略理解为 4 步

  1. 入口预热:先做性能预热和必要的早期副作用
  2. 配置与环境解析:解析 CLI 参数、加载 settings、策略和环境
  3. 能力装配:初始化命令、工具、上下文、MCP、LSP、插件、Skills
  4. 进入交互或执行模式:根据模式决定启动 REPL、恢复会话、远程连接或非交互执行

小结

main.tsx 的价值,不在于它实现了什么具体业务,而在于它回答了一个更重要的问题:Claude Code 在真正开始和你对话前,到底把哪些能力装进了这次会话里?

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注