Claude Code 源码泄漏:技术架构深度解构
版本:v2.1.88 | 泄漏时间:2026年3月31日 | 来源:npm 包 source map 重建
一、整体架构概述
Claude Code 是一个基于终端的 AI 编程助手,核心采用 TypeScript + React(Ink) 构建,运行在 Node.js/Bun 之上。它并非简单的 prompt wrapper,而是一个完整的状态机驱动的交互式 CLI 应用。
1 | |
二、入口与启动流程
2.1 命令行入口(cli.tsx)
cli.tsx 使用 Commander.js 解析参数,核心设计是快路径优先:
1 | |
关键快路径:
--version/-v— 零模块加载--dump-system-prompt— 输出渲染后的系统 prompt(Ant 专用)--chrome-native-host— Chrome 集成--computer-use-mcp— 计算机使用 MCP 服务器--daemon-worker— 守护进程工作线程
2.2 初始化流程(init.ts)
完整初始化执行:
- 遥测关闭检查 —
ANTHROPIC_DISABLE_TELEMETRY环境变量 - DataDog/GrowthBook 集成 — 实验特性平台
- OAuth 认证流程 — GitHub / Google 登录
- 自动更新检查(已 patch 禁用远程检查)
- 后台任务队列初始化
2.3 特性标志系统
源码大量使用 feature('FLAG_NAME') 进行 Dead Code Elimination(DCE):
1 | |
已知特性标志(全部禁用):
1 | |
三、工具系统(Tools)
Claude Code 内置 ~40 个 Tool,全部注册到 Agent SDK 的 tool call 循环中。
3.1 核心工具一览
| 工具 | 说明 |
|---|---|
BashTool |
Shell 命令执行 |
FileEditTool |
文件编辑(diff 应用) |
FileReadTool |
文件读取 |
FileWriteTool |
文件写入 |
GlobTool |
文件模式搜索 |
GrepTool |
内容搜索 |
AgentTool |
子 Agent 生成(核心!) |
WebFetchTool |
HTTP 获取(含白名单机制) |
WebSearchTool |
网页搜索 |
LSPTool |
Language Server Protocol 集成 |
MCPTool |
MCP 协议客户端 |
TaskCreateTool / TaskListTool / TaskOutputTool |
任务系统 |
SkillTool |
Skill 执行 |
TodoWriteTool |
Todo 列表 |
SleepTool |
延迟(控制速率) |
TeamCreateTool / TeamDeleteTool |
团队管理 |
3.2 AgentTool(子 Agent 生成)
最关键的元工具——允许 CLI 自身生成子进程:
1 | |
Agent 快照机制(agentMemorySnapshot.ts):
- 将当前对话状态序列化到临时文件
- 子 Agent 从快照恢复,继承上下文
- 支持增量快照(避免重复序列化)
3.3 WebFetchTool 安全机制
白名单域名列表(硬编码):
github.com,gitlab.com,bitbucket.orgstackoverflow.com,npmjs.com等
带 PREAPPROVED_ 前缀的域名可直接 fetch,非白名单需要用户确认。
四、权限系统(Permissions)
4.1 三种权限模式
accept-all— 完全信任(自动化场景)refuse-all— 全部拒绝(安全优先)ask— 交互确认(默认)
4.2 自动模式分类器(YOLO Classifier)
yoloClassifier.ts(52KB)是自动模式的核心,使用 LLM 对每个 Bash 命令做安全评估:
- 允许 / 软拒绝 / 环境规则 三元分类
- 环境规则示例:只允许
npm install,禁止rm -rf /
注意:分类器依赖的 prompt 文件因 TRANSCRIPT_CLASSIFIER 特性标志被 DCE 删除,逻辑代码保留但不可用。
4.3 BashClassifier
硬编码的安全命令白名单:
1 | |
五、插件系统(Plugins)
完整的插件架构,支持从 ~/.claude/plugins/ 目录加载:
插件结构
1 | |
插件加载链路
1 | |
内置 Skills(16个)
1 | |
Hook 系统
1 | |
六、UI 层:React + Ink
6.1 Ink 定制分支
Claude Code fork 了 Ink(React 分支,专门用于终端渲染):
1 | |
关键修改:支持键盘快捷键、鼠标点击(ANSI 鼠标协议)、Vim 模式。
6.2 Vim 模式
完整的 Vim 实现:
1 | |
七、后端与 SDK
多后端支持
1 | |
沙箱运行时的 Linux 实现:
- Namespace 隔离 — pid、net、mount、ipc、uts、user
- Seccomp-BPF — 生成字节码阻止危险系统调用
- Parent Proxy — 父子进程通信代理
八、运行状态
✅ 完全可用
- 所有标准工具(Bash、Edit、Read、Write、Grep、Glob、WebFetch、WebSearch、Agent)
- 完整 React/Ink REPL 界面
- OAuth 认证流程
- MCP 服务器支持
- 斜杠命令(/help、/clear、/compact、/resume 等)
- 会话持久化和恢复
- 完整插件系统
- 完整 Hook 系统
- 完整 Skill 系统
- Vim 模式
- AWS Bedrock / GCP Vertex / Foundry 后端
❌ 不可用
- Computer Use — 缺 native Swift/Rust 二进制
- 自动模式分类器 — prompt 文件被 DCE 删除
- 特性标志功能 — voice、coordinator 等全被禁用
总结
Claude Code 绝非简单的”AI + CLI”包装,而是一个工程化程度极高的复杂系统:
- 状态机驱动的 REPL — 基于 React/Ink 的交互式状态机
- 完善的权限模型 — 三级权限 + LLM 自动分类器
- 插件 + Hook + Skill 三位一体 — 可扩展性设计完整
- 多后端抽象 — Bedrock/Vertex/Foundry/Sandbox 支持
- MCP 协议实现 — 完整的 Model Context Protocol 客户端/服务器
- 沙箱安全 — Linux namespace + seccomp-BPF
这次源码泄漏让我们得以一窥 Anthropic 内部工程实践的深度——代码组织清晰、模块边界明确、安全考虑周全。