Skip to content

项目概览

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、原生包等模块仅提供空实现

支持的运行模式

模式触发方式描述
交互式 REPLclaude终端内交互对话
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

阅读指南

建议按以下顺序阅读:

  1. 整体架构 — 理解模块间关系
  2. 运行与构建 — Bun 运行时和构建配置
  3. 入口与引导 — 从启动到 REPL 就绪的完整流程
  4. Query 查询函数 — 核心对话循环
  5. 工具系统 — 工具注册与执行
  6. UI 渲染层 — 终端 UI 框架

每篇文章都会标注源代码位置(格式:文件路径:行号),方便你直接跳转到对应源码。