Claude Code v2.1.71 — 完整架构分析报告

起因是因为要用的claude-sdk做一些agent业务拓展。,所以需要对它进行分析,但是很是苦恼他们的闭源加密。
Claude Code是Bun打包的单文件可执行程序,183MB大小。所有JS代码全塞在__BUN Mach-O section里,4945个模块,全部混淆压缩。哪怕用了--bytecode,Bun还是把完整JS源码一起打包(字节码只是启动加速)
后面发现该项目可以用于解密claudecode 感兴趣的大佬可以自行解密并分析。
版本: 2.1.71 构建时间: 2026-03-06T22:45:36Z 包名: @anthropic-ai/claude-code 分析日期: 2026-03-09 分析工具: bun-demincer

目录

  1. 总体架构概览
  1. 模块系统原理
  1. 启动流程详解
  1. Agent循环架构
  1. API交互机制
  1. 工具系统详解
  1. 权限和安全模型
  1. Hook系统
  1. 上下文管理
  1. UI框架与渲染
  1. 认证系统
  1. MCP集成
  1. 插件与Marketplace
  1. 遥测系统
  1. 企业策略功能
  1. 配置文件系统
  1. 子代理系统
  1. 会话管理
  1. Git集成
  1. 自动更新机制
  1. 关键常量和配置
  1. 安全特性
  1. 性能优化策略
  1. 依赖分析

1. 总体架构概览

1.1 打包结构

1.2 高层架构图

1.3 模块统计

指标
数值
说明
总模块数
4,697
包含 vendor
应用模块
2,894
Claude Code 自身代码
Vendor 模块
1,805
第三方依赖
Vendor 包
127
识别的 npm 包
依赖边数
16,740
模块间调用关系
平均依赖度
3.6
每模块平均依赖数

2. 模块系统原理

Claude Code 使用 Bun bundler 将所有源码打包为单文件,通过自定义运行时实现模块加载。

2.1 核心函数详解

2.1.1 C() - CommonJS 模块工厂

工作原理: 1. 接收模块函数 A 和缓存变量 q 2. 返回一个惰性求值的工厂函数 3. 首次调用时执行模块函数,缓存结果 4. 后续调用直接返回缓存的 exports
使用场景: 包装 vendor 库(axios, semver 等)和 CJS 格式模块
示例:

2.1.2 k() - ESM 模块初始化器

工作原理: 1. 接收初始化函数 A 和缓存变量 q 2. 首次调用时执行 A(0)(0 表示已执行) 3. 将返回值缓存到 q 4. 后续调用返回缓存值
使用场景: ESM 模块的副作用执行、导出绑定
示例:

2.1.3 m1() - 导出绑定系统

工作原理: 1. 为目标对象 A 添加属性 2. 每个属性的 getter 指向 q[K] 函数 3. 支持动态重新绑定 4. 可配置和可枚举
用途: 实现类似 ESM 的命名导出
示例:

2.1.4 e() / W3() - 模块互操作性

2.2 模块依赖图结构

特点: - 深度优先执行顺序 - 环形依赖通过惰性求值解决 - 约 4,697 个独立模块节点

2.3 模块编号规则

编号范围
类型
说明
00-runtime.js
运行时
模块系统核心定义
0001-289x.js
应用模块
Claude Code 自身代码
3000-4697.js
应用模块
更多应用模块
vendor/*.js
第三方
npm 包,按包名组织

3. 启动流程详解

3.1 主函数执行流

3.2 命令处理函数 Paz()

位置: 4696.js, 第 380 行

3.3 支持的入口点类型

入口点
检测条件
用途
cli
默认
标准命令行界面
github-action
GITHUB_ACTIONS 环境变量
GitHub Actions 集成
sdk-typescript
SDK_TYPESCRIPT_MODE
TypeScript SDK 调用
sdk-python
SDK_PYTHON_MODE
Python SDK 调用
sdk-cli
SDK_CLI_MODE
CLI SDK 调用
claude-vscode
VSCODE_EXTENSION
VS Code 扩展
claude-desktop
DESKTOP_APP
桌面应用
local-agent
LOCAL_AGENT
本地代理模式
remote
SESSION_ACCESS_TOKEN
远程会话

4. Agent循环架构

4.1 主循环流程图

4.2 核心循环代码位置

组件
文件位置
函数/模块
主循环入口
3549.js
xC()
消息处理
3773.js
gzz()
API 调用
4286.js
iSq(), nS()
流处理
4286.js
事件循环 (行 621-813)
工具执行
3768.js
Da6

4.3 循环控制变量


5. API交互机制

5.1 API 客户端创建

位置: 4286.js, 第 560-597 行

5.2 API 调用参数结构

5.3 流式事件类型详解

事件类型
触发时机
处理动作
message_start
流开始
初始化状态,记录 TTFT 开始时间
content_block_start
新内容块开始
创建块累积器
content_block_delta
内容增量
追加文本/思考/工具输入
thinking_delta
思考增量
更新思考缓冲区
content_block_stop
块结束
完成块,添加到响应
message_delta
消息元数据更新
更新使用统计
message_stop
流结束
完成响应,触发回调

5.4 流容错机制

5.5 多后端支持

后端
检测函数
Base URL
特殊处理
First Party
isFirstParty()
api.anthropic.com
完整功能支持
Bedrock
isBedrock()
bedrock-runtime.*.amazonaws.com
推理配置文件
Vertex AI
isVertex()
*-aiplatform.googleapis.com
Beta 过滤

6. 工具系统详解

6.1 完整内置工具列表

6.1.1 文件操作工具

工具名
模块ID
类型
并发安全
功能描述
Read
2545.js
只读
读取文件、图片、PDF、Jupyter notebook
Write
3643.js
写入
创建或覆盖文件内容
Edit
4285.js
写入
精确字符串替换编辑
NotebookEdit
1245.js
写入
编辑 Jupyter notebook 单元格

6.1.2 搜索工具

工具名
模块ID
类型
并发安全
功能描述
Glob
1244.js
只读
文件模式匹配 (glob 语法)
Grep
1244.js
只读
基于 ripgrep 的正则搜索
LSP
3724.js
只读
语言服务器协议代码分析
ToolSearch
2545.js
只读
搜索可用工具

6.1.3 网络工具

工具名
模块ID
类型
并发安全
功能描述
WebFetch
(条件)
只读
获取网页内容并 AI 处理
WebSearch
(条件)
只读
网页搜索

6.1.4 执行工具

工具名
模块ID
类型
并发安全
功能描述
Bash
(条件)
写入
执行 shell 命令
PowerShell
(条件)
写入
执行 PowerShell 命令

6.1.5 交互工具

工具名
模块ID
类型
功能描述
AskUserQuestion
2782.js
交互
向用户提问/确认
EnterPlanMode
(内置)
交互
进入计划模式

6.1.6 代理工具

工具名
模块ID
功能描述
Task
3603.js
启动子代理执行复杂任务

6.1.7 任务管理工具

工具名
模块ID
功能描述
TaskCreate
2548.js
创建新任务
TaskUpdate
2548.js
更新任务状态
TaskGet
2783.js
获取任务详情
TaskList
2783.js
列出所有任务
TaskStop
0955.js
停止任务执行
TaskOutput
0955.js
读取后台任务输出

6.1.8 MCP 工具

工具名
模块ID
功能描述
ListMcpResourcesTool
3727.js
列出 MCP 资源
ReadMcpResourceTool
3731.js
读取 MCP 资源
TodoWrite
2410.js
管理任务清单

6.2 工具定义接口

6.3 工具执行流程

6.4 工具执行管理器

位置: 3768.js - Da6

7. 权限和安全模型

7.1 三层权限规则系统

7.2 权限决策流程

7.3 权限模式详解

模式
触发方式
行为
default
默认
标准行为,危险操作需确认
plan
进入计划模式
不执行实际工具,仅返回计划
acceptEdits
-a 或配置
自动接受文件编辑
dontAsk
配置
不提示,用预配置规则
bypassPermissions
--dangerously-skip-permissions
绕过所有权限检查

7.4 危险操作检测

7.5 沙箱机制

沙箱类型: 1. 工作目录沙箱 - 限制文件访问到项目目录 2. 命令沙箱 - 限制可执行的 shell 命令 3. 权限沙箱 - 基于权限规则的执行控制
禁止访问的路径:

8. Hook系统

8.1 Hook 事件类型

事件名称
触发时机
用途
PreToolUse
工具执行前
验证、修改输入、拦截
PostToolUse
工具成功执行后
处理结果、日志、后续动作
PostToolUseFailure
工具执行失败后
错误处理、清理
SessionStart
会话开始
初始化资源
Stop
停止事件
清理资源
PermissionRequest
权限请求
自定义权限处理
ConfigChange
配置变更
响应配置变化
Elicitation
引出事件
自定义数据收集
ElicitationResult
引出结果
处理收集结果
InstructionsLoaded
指令加载完成
验证 CLAUDE.md
SubagentStart
子代理启动
初始化子代理环境
SubagentStop
子代理停止
清理子代理资源
PreCompact
上下文压缩前
备份或分析对话
Notification
通知事件
自定义通知处理

8.2 Hook 配置结构

8.3 Hook 回调接口


9. 上下文管理

9.1 三级压缩机制

级别
名称
触发条件
处理方式
效果
L1
微紧凑 (microcompact)
每轮自动
清理冗余消息元素
~5-10% 减少
L2
自动紧凑 (autocompact)
超过阈值
LLM 摘要压缩
~50-70% 减少
L3
反应式紧凑
API 拒绝
紧急压缩重试
确保请求成功

9.2 压缩流程详解

9.3 提示缓存策略

9.4 令牌跟踪

精确计数:
本地估算 (快速预测):

9.5 上下文窗口配置

模型
上下文窗口
输出限制
压缩阈值
claude-opus-4-6
200K
8192
160K (80%)
claude-sonnet-4-6
200K
8192
160K (80%)
claude-haiku
200K
8192
160K (80%)

10. UI框架与渲染

10.1 技术栈

10.2 UI 组件层次

10.3 核心 Context 详解

10.3.1 UIStateContext

10.3.2 SessionContext

10.4 渲染优化


11. 认证系统

11.1 支持的认证方式

方式
环境变量
配置文件
说明
API Key
ANTHROPIC_API_KEY
settings.json
标准认证
Auth Token
ANTHROPIC_AUTH_TOKEN
settings.json
OAuth 令牌
Console Login
-
浏览器 OAuth
交互式登录
SSO
-
企业配置
单点登录

11.2 OAuth 2.0 流程

11.3 API Key 生成

11.4 令牌刷新


12. MCP集成

12.1 MCP 传输方式

方式
实现类
适用场景
Stdio
StdioClientTransport
本地进程
SSE
SSEClientTransport
HTTP 服务

12.2 MCP 服务器配置

12.3 MCP 工具调用流程

12.4 MCP 资源管理


13. 插件与Marketplace

13.1 插件来源类型

类型
说明
示例
github
GitHub 仓库
anthropics/official-plugin
git
Git 仓库 URL
https://example.com/repo.git
git-subdir
Git 子目录
https://example.com/repo.git#subdir

13.2 Marketplace 配置

13.3 插件清单

13.4 Skills API


14. 遥测系统

14.1 收集的数据类型

类别
事件
数据
功能使用
tool_executed
工具名、参数、持续时间
权限
permission_request
工具名、决策、批准类型
成本
cost_threshold_reached
成本金额、会话长度
错误
error_message
错误类型、堆栈
更新
update_check
当前版本、最新版本
环境
environment_detected
IDE、云平台、OS

14.2 遥测事件结构

14.3 GrowthBook 集成

14.4 环境检测


15. 企业策略功能

15.1 托管设置

15.2 策略执行流程


16. 配置文件系统

16.1 配置文件位置

作用域
路径
Git
优先级
System
/Library/Application Support/Claude Code/
-
最低
User
~/.claude/settings.json
Project
.claude/settings.json
Local
.claude/settings.json (gitignored)
Session
内存 (临时)
-
更高
CLI
命令行参数
-
最高

16.2 CLAUDE.md 系统

16.3 设置 Schema


17. 子代理系统

17.1 Task 工具接口

17.2 子代理类型

类型
说明
启动方式
general-purpose
通用任务
默认
statusline-setup
状态栏配置
内部使用
Explore
代码探索
内部使用
Plan
计划生成
内部使用
ui-ux-designer
UI 设计
内部使用

17.3 子代理生命周期

17.4 团队协作


18. 会话管理

18.1 会话状态

18.2 会话持久化

18.3 会话恢复

18.4 会话清理


19. Git集成

19.1 Git 命令集成

集成点
功能
状态注入
将 git branch/status 注入系统提示
Worktree
支持创建和管理 git worktree
提交跟踪
跟踪 git commit 数量
路径解析
智能解析 git 仓库路径

19.2 Worktree 支持

19.3 Git 状态注入


20. 自动更新机制

20.1 更新检查

20.2 安装类型检测

类型
检测方法
更新方式
npm-local
package.json 存在
npm update
npm-global
which claude 在 npm prefix
npm update -g
native
二进制在特定路径
下载新版本
homebrew
brew list claude-code
brew upgrade
development
.git 目录存在
git pull

20.3 更新通道


21. 关键常量和配置

21.1 版本信息

21.2 模型常量

21.3 超时配置

21.4 路径常量


22. 安全特性

22.1 密钥保护

22.2 文件夹信任

22.3 危险路径检测


23. 性能优化策略

23.1 惰性加载

23.2 缓存策略

23.3 并发控制


24. 依赖分析

24.1 核心 Vendor 包

包名
版本
用途
@anthropic-ai/sdk
latest
Anthropic API 客户端
@modelcontextprotocol/sdk
^1.23.0
MCP 协议
react
^19.2.0
UI 框架
ink
^6.x
TUI 渲染
commander
^12.x
CLI 解析
zod
^3.23.8
数据验证
chalk
^5.x
终端颜色
simple-git
^3.28.0
Git 操作

24.2 依赖关系图


附录 A: 关键文件索引

文件/模块
内容
00-runtime.js
模块系统运行时
4696.js
CLI 入口和命令定义
3549.js
Agent 主循环
4286.js
API 客户端和流处理
3768.js
工具执行管理器
4300.js
权限检查核心
4441.js
Hook 系统
2545.js
Read 工具
4285.js
Edit 工具
3643.js
Write 工具

附录 B: 环境变量

变量
用途
ANTHROPIC_API_KEY
API 密钥
ANTHROPIC_AUTH_TOKEN
OAuth 令牌
CLAUDE_CONFIG_DIR
配置目录覆盖
CLAUDECODE
检测嵌套运行
NODE_OPTIONS
Node.js 参数
GITHUB_ACTIONS
GitHub Actions 检测

附录 C: 术语表

术语
说明
TTFT
Time to First Token,首字节时间
MCP
Model Context Protocol,模型上下文协议
Agent
代理,AI 实体的抽象
Tool
工具,Agent 可执行的操作
Hook
钩子,事件驱动的扩展点
Skill
技能,预定义的任务处理能力
Compact
压缩,减少上下文长度的操作
REPL
Read-Eval-Print Loop,交互式环境
TUI
Terminal User Interface,终端用户界面

报告结束
本报告基于 Claude Code v2.1.71 反编译源码分析生成
 
Loading...