English | 中文
- 第一次看这个仓库的人
- 还不熟悉 Claude Code 启动链路的人
- 暂时没有 API Key 的人
60-90 分钟
这一阶段只抓住请求真正进入系统前后的三件事:
- Claude Code 如何决定当前进入哪种运行模式
setup在真正进入 loop 之前完成了哪些初始化- 为什么这一步还不该陷入 tools / streaming / memory 的细节
主线位置: 用户输入 → 启动 / 模式分流
这一页的任务不是追完整请求生命周期,而是把入口站稳:
- 命令行参数、工作目录、运行方式先决定当前要进入哪条运行面
setup把后续运行需要的基础环境准备好- 只有这两步稳定了,后面的
query/queryLoop才有可靠入口
如果你在这一页就一头扎进工具执行或 UI streaming,认知负担会立刻爆炸。
先只把 l1_startup.py 跑透:
python examples/l1_startup.py
python examples/l1_startup.py --print "hello"
python examples/l1_startup.py serve如果你想确认后面确实还有工具和 UI 层,可以只做预览:
python examples/l3_tool_system.py
python examples/l4_ui_ink.py但这两个现在只用于建立“后面还有层”的直觉,不是这一阶段的主任务。
按这条顺序读:
如果你只是想知道后面还会发生什么,可以快速预览:
这一阶段先只开最贴近入口的两个文件:
claudecode_src/src/main.tsx—— 看 CLI 参数和模式分流如何进入不同运行面claudecode_src/src/setup.ts—— 看真正进入 loop 之前做了哪些初始化
如果你在搜索时看到 runHeadless、serve、REPL,先把它们当成“分流结果”,不要立刻展开到后面所有实现。
现在先主动忽略这些主题:
- 工具系统的完整注册与执行细节
query/queryLoop的完整单轮主循环- streaming 事件实现
- memory、prompt cache、multi-agent
- REPL 里的细粒度状态组织
这一页的任务是降低认知负担:先把“请求如何进入系统”这根骨架立起来。
这一阶段先只搜这 4 个:
main_entrysetuprunHeadlessserve
如果你状态很好,再补搜:
buildToolREPL
- Claude Code 在哪里决定进入 REPL、print、serve 等不同运行面?
- 为什么模式分流必须发生在真正进入 agent loop 之前?
setup.ts这类初始化逻辑,为什么不应该散落在后续执行链里?
先这样接:
- 看 source-map 的启动路径
- 用 source-navigation 里的搜索方式搜
main_entry/setup - 先开
main.tsx和setup.ts
如果你想更细一点,直接看:
完成这一页时,你应该能:
- 说清启动入口、初始化、模式分流三者各自负责什么
- 在源码里搜到上面的关键符号
- 用自己的话解释“Claude Code 为什么不是一个单文件脚本”
- 明确知道现在还不该深入 tools / streaming / memory
如果做不到,先回去重看:
L1,如果你还分不清 REPL / print / servesource-map的启动路径,如果你还串不起入口调用链
这一页默认就是无 API 路线,可以完整做完。
继续去 P2 Core Loop