项目概览
Claude Code 是什么
Claude Code 是 Anthropic 官方的 CLI(命令行)工具,它让开发者可以在终端中与 Claude 进行交互式对话,并利用 Claude 的工具调用能力直接操作文件系统、执行命令、搜索代码等。
本教程基于一个逆向工程/反编译版本的 Claude Code,目标是还原核心功能的实现细节。
技术栈
| 层次 | 技术选型 |
|---|---|
| 运行时 | Bun (非 Node.js) |
| 构建 | bun build 单文件打包 |
| 模块系统 | ESM ("type": "module") |
| UI 框架 | React + Ink (终端 UI) |
| CLI 框架 | Commander.js |
| API SDK | @anthropic-ai/sdk |
| 状态管理 | Zustand 风格 Store |
| 语言 | TypeScript + TSX |
代码规模
src/ # 主源码目录
├── entrypoints/ # 入口文件 (cli.tsx, init.ts)
├── main.tsx # CLI 命令定义 (~4700 行)
├── query.ts # API 查询核心
├── QueryEngine.ts # 查询编排器
├── Tool.ts # 工具接口定义
├── tools/ # 20+ 内置工具
├── tools.ts # 工具注册表
├── context.ts # 上下文构建
├── screens/ # 界面屏幕 (REPL)
├── components/ # React/Ink 组件
├── ink/ # 内部 Ink 框架分支
├── state/ # 状态管理
├── services/ # 服务层 (API, Auth)
├── utils/ # 工具函数
└── types/ # 类型定义
packages/ # 内部包 (workspace:*)
├── @ant/ # Computer Use 桩包
├── color-diff-napi/ # 颜色对比 (完整实现)
└── *-napi/ # 其他 Native 桩包关键特性
反编译特点
这个代码库来自反编译,因此有一些特殊之处:
- ~1341 个 tsc 错误 — 主要是
unknown/never/{}类型,不影响 Bun 运行 - React Compiler 输出 — 组件中有大量
_c()记忆化模板代码 - 特性标志全部关闭 —
feature()始终返回false,Anthropic 内部功能均为死代码 - 桩包 (Stub) — Computer Use、原生包等模块仅提供空实现
支持的运行模式
| 模式 | 触发方式 | 描述 |
|---|---|---|
| 交互式 REPL | claude | 终端内交互对话 |
| Headless 打印 | claude -p "prompt" | 单次查询并输出结果 |
| 管道模式 | echo "prompt" | claude -p | 从标准输入读取 |
| SDK 模式 | --sdk-url | 作为后端服务运行 |
多供应商支持
Claude Code 不仅支持 Anthropic 直连,还支持:
- AWS Bedrock — 通过
@anthropic-ai/bedrock-sdk - Google Vertex AI — 通过
@anthropic-ai/vertex-sdk - Azure — 通过 Azure Identity
阅读指南
建议按以下顺序阅读:
- 整体架构 — 理解模块间关系
- 运行与构建 — Bun 运行时和构建配置
- 入口与引导 — 从启动到 REPL 就绪的完整流程
- Query 查询函数 — 核心对话循环
- 工具系统 — 工具注册与执行
- UI 渲染层 — 终端 UI 框架
每篇文章都会标注源代码位置(格式:文件路径:行号),方便你直接跳转到对应源码。