详解 Claude Code 源码
赛博浮世绘 · 晓风乾 · 24 站拆解
回首页
详解 Claude Code 泄露与全景 1.3 · 51 万行全景图
篇章一 · 1.3

51 万行全景图

把 1902 个文件缩成一张图:先建立「这个系统由哪几块组成」的空间感,后面每一站深入一个模块,都能在这张图上找到位置。

不是 demo,是 工业级 Agent 系统

47 个字段的工具接口、10 个检查点的权限管线、15 步的初始化序列——每个数字都在说:这是一个为生产环境深思熟虑过的系统。先看规模,再看地图。

代码规模 · 1902 个 TypeScript 源文件
指标数值参照物
源码总量33 MB约 51 万行一本 500 页的书 ≈ 0.5MB,这是 60 本
最大文件 REPL.tsx875 KB主交互界面,一个文件顶一个小项目
第二 main.tsx785 KB命令解析枢纽(1.4 站拆它)
第三 AgentTool.tsx228 KB子代理工具,6 种运行模式
目录数约 200 个tools/ services/ utils/ skills/ …
内置工具30+ 种Bash/Edit/Grep/Agent/Skill/…(篇章三)
内置 Agent6 种Explore/Plan/GP/…(篇章五)
🎮 上手猜:三个巨型文件里,哪个最大?
反直觉吧——最大的不是逻辑中枢 main.tsx(785KB),而是界面 REPL.tsx(875KB)。终端 UI 要处理消息渲染、滚动、选中、折叠、进度……状态最密集的地方是「脸」,不是「脑」。AgentTool 228KB 只排第三。
技术栈 · 每一项都是「有理由的选型」
层级选型为什么值得注意
终端 UI自 fork 的 InkReact for CLIReact 组件模型跑在终端里,还改了源码
构建Bun bundler+ feature() 开关编译期死代码消除,同一代码库出内外两版
API 流式手动 SSE放弃 BetaMessageStream避免 O(n²) 部分解析,自己攒增量
搜索自带 ripgrep二进制随包分发,不依赖系统安装
沙箱sandbox-runtimemacOS sandbox-exec / Linux bubblewrap
进程child_process + tmuxtmux 做多窗口分屏(Teammate 模式)
协议MCP · JSON-over-stdio外接一切工具生态
校验Zod v4贯穿全系统的运行时类型安全
系统全景 · 五层管道 + 四大支撑系统 这是全课的地图
五层流式管道(篇章二) REPL(React/Ink 终端界面) screens/REPL.tsx · 875KB QueryEngine(会话状态) QueryEngine.ts queryLoop(while true 主循环) query.ts · 6 种重入原因 API Stream(手动 SSE + 看门狗) services/api/claude.ts withRetry(退避 · 降级 · 重试) withRetry.ts · Fallback Model 四大支撑系统 工具系统 · 30+ 内置工具 47 字段接口 · Bash/Edit/Agent/… (篇章三) 安全纵深 · 8 层防御 10 检查点权限 · AI 分类器 · OS 沙箱(篇章四) Agent 与扩展 · 6 种内置 + MCP + Skills Fork 共享缓存 · Coordinator 编排(篇章五) 上下文与记忆 · 4 层压缩 + 3 套记忆 Micro→Full Compact · CLAUDE.md · memdir(篇章六) Anthropic API(4 种后端:直连 / Bedrock / Vertex / Foundry) client.ts · 按环境变量选择云厂商

记住这张图的阅读方式:竖着的是一次对话的数据流(你的输入从 REPL 一路流到 Anthropic API),横着的四大系统随时被管道调用。后面每一站都是在放大这张图的某一块。

👆 图上任何一个色块都能点——点了看它的职责和对应章节
本站要点:React 跑在终端里、一切皆是 AsyncGenerator、单一代码库六种形态——这三个决定塑造了后面的一切。下一站先进启动链路,看它如何把「51 万行的程序」压到毫秒级启动。