起因是因为要用的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.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 反编译源码分析生成





