Claude Code

Claude Code 源码 — 架构研究与学习资料

生产级 AI Agent 内部实现,为学习而解剖。

Claude Code v2.1.123 Educational Only 18 Articles Runnable

English

--- 本仓库包含 [Claude Code](https://claude.ai/code)(Anthropic 的 AI 编程 CLI)的**提取源代码**,以及 **18 篇原创深度分析文章**(中英双语)对其架构进行全面拆解。源代码来自公开渠道,**严格仅供学习和研究用途**。 源代码的所有知识产权完全归 **Anthropic, PBC** 所有。 > **跟随官方更新,保持最新版本。** 本仓库跟随 Claude Code 官方发布节奏,始终与最新版本保持同步。官方每次发布新版本后,我们都会针对其 changelog 中面向用户、可落地的部分进行对应更新。每个版本的具体变更记录(包括本仓库已应用的改动和仅存在于官方的改动)请见 [`CHANGELOG.md`](CHANGELOG.md)。 --- [免责声明](#免责声明) · [为什么研究](#为什么研究这个代码库) · [架构总览](#架构总览) · [深度分析](#深度分析系列) · [从源码运行](#从源码运行) · [技术栈](#技术栈) · [项目结构](#项目结构) · [版权声明](#版权声明) --- ## 免责声明 > **重要:使用前请阅读** **本仓库严格仅供学习和研究用途。** - **来源**:本仓库引用的源代码来自公开渠道,包括 [instructkr/claw-code](https://github.com/instructkr/claw-code)。从源码运行的配置基于 [JiaranI/start-claude-code](https://github.com/JiaranI/start-claude-code)。其中包含 [Anthropic](https://anthropic.com) 公司的 [Claude Code](https://claude.ai/code) 产品的源代码。 - **知识产权**:源代码的所有知识产权完全归 **Anthropic, PBC** 所有。本仓库不主张对原始代码的任何所有权、著作权或权利。 - **用途**:本仓库**仅**作为学习材料提供,用于理解 AI Agent 系统架构和工程设计模式,面向学术研究、技术学习和教育讨论。 - **禁止用途**:本仓库及其内容**不得**用于: - 任何形式的商业用途 - 构建竞品产品或服务 - 再分发或重新打包源代码 - 任何违反 Anthropic [服务条款](https://www.anthropic.com/terms) 或适用法律的行为 - **分析文章**:深度分析文章(`claude-code-deep-analysis/`)是仓库维护者撰写的**原创评论和分析**。文章中包含的代码片段用于评论、批评和教育目的,但这些文章不构成法律建议。 - **侵权处理**:如您是 Anthropic 的代表或认为本仓库侵犯了任何知识产权,请联系我们,我们将**立即删除**相关内容。您也可以通过 [GitHub 的 DMCA 流程](https://docs.github.com/en/site-policy/content-removal-policies/dmca-takedown-policy) 提交侵权通知。 - **免责条款**:本仓库按"现状"提供,不附带任何形式的保证。维护者不对因使用本材料而产生的任何后果承担责任。 --- ## 为什么研究这个代码库? Claude Code 是目前可公开观察到的最复杂的生产级 AI Agent 系统之一。与玩具框架和演示 Agent 不同,它为**真实世界的数小时编程会话**而设计,具备企业级可靠性。研究它能揭示任何教程都不会教的实战工程决策: | 设计决策 | 洞察 | |:---|:---| | **循环优于图** | 用 `while(true)` 循环取代 DAG 工作流编排——更简单、更灵活、运行时更易推理 | | **递归优于编排** | 子 Agent 递归调用 `query()`,自动继承压缩、错误恢复和流式处理 | | **模型做决策,框架做执行** | 框架负责安全约束(并发、副作用、权限),所有推理留在模型中 | | **为 4 小时会话而设计** | 四层上下文压缩和三级 413 错误恢复——在演示中看不见,在生产中不可或缺 | | **不可变性即成本优化** | 不可变 API 消息最大化 prompt caching 命中率,长会话成本降低约 80% | --- ## 架构总览 ``` CLI / VS Code / IDE 扩展 │ ▼ ┌───────────────────────┐ │ 入口 (cli.tsx) │ │ 快速路径路由 │ └───────────┬───────────┘ │ ┌───────────▼───────────┐ │ QueryEngine │ │ 会话管理 │ │ API 客户端封装 │ └───────────┬───────────┘ │ ┌───────────────────▼───────────────────┐ │ query() — 核心 Agent 循环 │ │ ┌─────────────────────────────────┐ │ │ │ while (true) { │ │ │ │ messages = buildPrompt() │ │ │ │ response = stream(messages) │ │ │ │ tools = extractToolCalls() │ │ │ │ if (!tools) break │ │ │ │ results = executePar(tools) │ │ │ │ messages.push(results) │ │ │ │ maybeCompress(messages) │ │ │ │ } │ │ │ └─────────────────────────────────┘ │ └──────┬──────────┬──────────┬──────────┘ │ │ │ ┌────────▼──┐ ┌────▼────┐ ┌───▼────────┐ │ 45+ 工具 │ │ 权限 │ │ 上下文 │ │ Bash, Edit │ │ 系统 │ │ 压缩 │ │ Glob, Grep │ │ 5 种 │ │ 4 层 │ │ MCP, LSP… │ │ 模式 │ │ + 413 恢复 │ └────────────┘ └─────────┘ └────────────┘ ``` ### 关键指标 | 指标 | 数量 | |:---|:---| | 核心 Agent 循环 (`query.ts`) | 1,729 行 | | 主 UI 组件 (`main.tsx`) | 4,683 行 | | 工具实现 | 45+ | | Slash 命令 | 87+ | | React UI 组件 | 146+ | | 工具函数 | 564+ | | React Hooks | 85+ | | 服务模块 | 38 | | Feature Flag | 89 | | System Prompt 组装 (`prompts.ts`) | 54.3 KB | --- ## 深度分析系列 我们撰写了 **18 篇原创文章**,对每个核心子系统进行源码级深度拆解。每篇文章均提供**中文**和**英文**版本。 **[进入分析系列 (中文) →](claude-code-deep-analysis/README.md)** | **[Enter the analysis series (EN) →](claude-code-deep-analysis/README.en.md)** ### Part 1:核心 Agent 引擎 | # | 主题 | 中文 | English | |:--|:------|:-----|:--------| | 00 | 核心结论 | [中文](claude-code-deep-analysis/00-core-conclusion.md) | [EN](claude-code-deep-analysis/00-core-conclusion.en.md) | | 01 | 入口流程 | [中文](claude-code-deep-analysis/01-entry-point.md) | [EN](claude-code-deep-analysis/01-entry-point.en.md) | | 02 | 主循环 | [中文](claude-code-deep-analysis/02-main-loop.md) | [EN](claude-code-deep-analysis/02-main-loop.en.md) | | 03 | 流式处理 | [中文](claude-code-deep-analysis/03-streaming.md) | [EN](claude-code-deep-analysis/03-streaming.en.md) | | 04 | 工具编排 | [中文](claude-code-deep-analysis/04-tool-orchestration.md) | [EN](claude-code-deep-analysis/04-tool-orchestration.en.md) | | 05 | 权限系统 | [中文](claude-code-deep-analysis/05-permission-system.md) | [EN](claude-code-deep-analysis/05-permission-system.en.md) | | 06 | 子Agent | [中文](claude-code-deep-analysis/06-sub-agent.md) | [EN](claude-code-deep-analysis/06-sub-agent.en.md) | | 07 | 上下文窗口 | [中文](claude-code-deep-analysis/07-context-window.md) | [EN](claude-code-deep-analysis/07-context-window.en.md) | | 08 | 消息类型 | [中文](claude-code-deep-analysis/08-message-types.md) | [EN](claude-code-deep-analysis/08-message-types.en.md) | | 09 | 不可变消息 | [中文](claude-code-deep-analysis/09-immutable-api-messages.md) | [EN](claude-code-deep-analysis/09-immutable-api-messages.en.md) | | 10 | 架构图 | [中文](claude-code-deep-analysis/10-architecture-diagram.md) | [EN](claude-code-deep-analysis/10-architecture-diagram.en.md) | | 11 | 设计哲学 | [中文](claude-code-deep-analysis/11-design-philosophy.md) | [EN](claude-code-deep-analysis/11-design-philosophy.en.md) | ### Part 2:外围子系统 | # | 主题 | 中文 | English | |:--|:------|:-----|:--------| | 12 | MCP 集成 | [中文](claude-code-deep-analysis/12-mcp-integration.md) | [EN](claude-code-deep-analysis/12-mcp-integration.en.md) | | 13 | Memory 系统 | [中文](claude-code-deep-analysis/13-memory-system.md) | [EN](claude-code-deep-analysis/13-memory-system.en.md) | | 14 | System Prompt | [中文](claude-code-deep-analysis/14-system-prompt.md) | [EN](claude-code-deep-analysis/14-system-prompt.en.md) | | 15 | Session 与 Bridge | [中文](claude-code-deep-analysis/15-session-resume.md) | [EN](claude-code-deep-analysis/15-session-resume.en.md) | | 16 | 工具实现 | [中文](claude-code-deep-analysis/16-tool-implementations.md) | [EN](claude-code-deep-analysis/16-tool-implementations.en.md) | | 17 | Hook 系统 | [中文](claude-code-deep-analysis/17-hook-system.md) | [EN](claude-code-deep-analysis/17-hook-system.en.md) | --- ## 从源码运行 本仓库支持从源码本地启动 Claude Code(功能有所缩减)。持续跟随上游发布,当前已对齐 `2.1.123`(详见 [`CHANGELOG.md`](CHANGELOG.md))。 ### 环境要求 | 依赖 | 说明 | |:---|:---| | **Node.js** >= 18 | 运行 setup 脚本 | | **Bun** >= 1.0 | 运行 Claude Code(setup 脚本会自动安装) | | **认证方式** | Claude Pro/Max/Team 订阅(OAuth)、API Key(`sk-ant-xxx`)、ChatGPT 订阅、或 OpenAI API Key | ### 快速开始 ```bash # 1. 安装依赖并设置 shim node scripts/setup.mjs # 2. 使用 Claude 订阅账号登录(会打开浏览器) ./start.sh login # 3. 启动 ./start.sh ```

使用订阅登录运行 Claude Code
使用 Claude Pro/Max 订阅从源码运行 — Opus 4.6 (1M context) ✓

备选方案:使用 API Key ```bash export ANTHROPIC_API_KEY="sk-ant-xxx" ./start.sh ```
备选方案:使用 ChatGPT 订阅(GPT-5.5) 如果你有 ChatGPT Plus/Pro/Business/Enterprise 订阅,可以直接使用 GPT-5.5 作为 Agent 模型,无需 API Key: ```bash # 1. 使用 ChatGPT 账号登录(会打开浏览器) ./start.sh chatgpt-login # 2. 使用 GPT-5.5 启动 ./start.sh --model gpt5.5 ```

通过 ChatGPT 订阅运行 GPT-5.5
通过 ChatGPT 订阅使用 GPT 作为 Agent 模型

可用的 GPT 模型别名: | 别名 | 解析为 | 所需订阅 | |:---|:---|:---| | `gpt5.5` | `chatgpt:gpt-5.5` | Plus / Pro / Business / Enterprise | | `gpt5.5-pro` | `chatgpt:gpt-5.5-pro` | Pro / Business / Enterprise | | `gpt5.4` | `chatgpt:gpt-5.4` | Plus / Pro / Business / Enterprise(旧版) | | `gpt5.4-mini` | `chatgpt:gpt-5.4-mini` | 任意付费订阅 | | `gpt5.4-nano` | `chatgpt:gpt-5.4-nano` | 任意付费订阅 | 也可以使用完整格式:`--model chatgpt:gpt-5.5`
备选方案:使用 OpenAI API Key ```bash export OPENAI_API_KEY="sk-xxx" ./start.sh --model openai:gpt-5.5 ``` 同样支持其他 OpenAI 兼容 Provider: ```bash export DEEPSEEK_API_KEY="sk-xxx" ./start.sh --model deepseek:deepseek-chat export MISTRAL_API_KEY="xxx" ./start.sh --model mistral:mistral-large-latest ```
备选方案:使用本地 Ollama 模型(离线 / 无需 API Key) 完全在本地 Ollama 模型上运行 Claude Code —— 无需 API Key,不向 Anthropic 或 OpenAI 发起任何请求。启动器会拉起内置的 Anthropic→Ollama 代理([`scripts/ollama-proxy.mjs`](scripts/ollama-proxy.mjs)),把 CLI 指向它。 ```bash # 1. 安装并启动 Ollama (https://ollama.com) ollama serve # 2. 拉取一个支持工具调用的模型 ollama pull qwen2.5-coder:7b # 3. 在本地模型上启动 Claude Code ./start-ollama.sh qwen2.5-coder:7b ``` 如果模型没有原生工具调用能力,设置 `PROMPTED_TOOLS=1`: ```bash PROMPTED_TOOLS=1 ./start-ollama.sh phi3:mini ```
Windows 用户 ```cmd rem Windows 下使用 API Key(OAuth 登录需要 macOS/Linux 的 start.sh) set ANTHROPIC_API_KEY=sk-ant-xxx bun src/entrypoints/cli.tsx ``` - **ripgrep**:setup 脚本中的 tar 解压在 Windows 上可能失败。请手动安装 [ripgrep](https://github.com/BurntSushi/ripgrep/releases) 并确保 `rg` 在 PATH 中。 - **Bun 路径**:安装 Bun 后需要重启终端,或手动将 `%USERPROFILE%\.bun\bin` 添加到 PATH。 - **OAuth 登录**:`./start.sh login` 仅适用于 macOS/Linux。Windows 下运行 `bun src/entrypoints/cli.tsx auth login --claudeai`。
### 创建的 Shim 文件 以下文件是为了让源码可运行而创建的,**不属于原始源码**: | 文件 | 作用 | |:---|:---| | `package.json` | 从 import 语句逆向工程出的 100+ 依赖声明 | | `tsconfig.json` | TypeScript 配置,含 `baseUrl` 和 `.js → .ts/.tsx` 路径解析 | | `bunfig.toml` | Bun 配置,指定 preload 插件 | | `preload.ts` | 核心 shim:`bun:bundle` 模拟(`feature()` 返回 `false`)、`MACRO.*` 全局变量注入 | | `scripts/setup.mjs` | 一键安装:依赖安装、私有包 stub、缺失文件生成、ripgrep 下载 | | `start.sh` | macOS/Linux 启动脚本,支持 OAuth 登录(`./start.sh login`)、多种凭证检测(Keychain/文件/环境变量)、第三方代理自动检测、Bun 编译缓存自动清理 | ### 工作原理 | 问题 | 解决方案 | |:---|:---| | `bun:bundle` 编译时 API | `preload.ts` 提供运行时 shim,`feature()` 全部返回 `false` | | 89 个 Feature Flag | 全部禁用(所有 feature-gated 代码路径不执行) | | `MACRO.*` 编译时宏 | `preload.ts` 中定义为 `globalThis.MACRO` 全局变量 | | `from 'src/...'` 导入 | 源码放在 `src/` 目录下,`tsconfig.json` 中 `baseUrl: "."` 使路径自然解析 | | 无 `package.json` | 已从 import 语句逆向工程出 100+ 依赖 | | `@ant/*` 内部包 | `scripts/setup.mjs` 创建空实现 stub | ### 不可用的功能(缺失私有包) | 功能 | 缺失的包 | 说明 | |:---|:---|:---| | Computer Use(电脑操控) | `@ant/computer-use-mcp` | 截屏、鼠标点击、键盘输入等 | | 原生键鼠输入 | `@ant/computer-use-input` | Rust/enigo 原生绑定 | | macOS 截屏/窗口管理 | `@ant/computer-use-swift` | Swift 原生绑定,仅 macOS | | Chrome 浏览器集成 | `@ant/claude-for-chrome-mcp` | Chrome 扩展 MCP server | | 沙箱运行时 | `@anthropic-ai/sandbox-runtime` | 命令执行沙箱 | | MCP Bridge | `@anthropic-ai/mcpb` | MCP 协议桥接 |
所有 89 个 Feature Flag(全部禁用) 由于 `feature()` 在运行时返回 `false`,以下功能全部被禁用: `ABLATION_BASELINE` `AGENT_MEMORY_SNAPSHOT` `AGENT_TRIGGERS` `BRIDGE_MODE` `BUDDY` `BUILDING_CLAUDE_APPS` `CCR_AUTO_CONNECT` `COORDINATOR_MODE` `DAEMON` `DIRECT_CONNECT` `DUMP_SYSTEM_PROMPT` `FORK_SUBAGENT` `HISTORY_PICKER` `KAIROS` `MCP_SKILLS` `MONITOR_TOOL` `NATIVE_CLIPBOARD_IMAGE` `PERFETTO_TRACING` `QUICK_SEARCH` `SSH_REMOTE` `STREAMLINED_OUTPUT` `TEAMMEM` `TEMPLATES` `TERMINAL_PANEL` `TORCH` `ULTRAPLAN` `ULTRATHINK` `VOICE_MODE` `WEB_BROWSER_TOOL` `WORKFLOW_SCRIPTS` 等共 89 个。
### 构建流程推断 ``` TypeScript 源码 │ ├─ Bun bundler (bun build) │ ├─ 注入 MACRO.* 常量 (--define) │ ├─ 解析 feature() 调用 → 设置 89 个 feature flag 的 true/false │ ├─ Dead Code Elimination → 移除未启用 feature 的代码分支 │ └─ 打包为单文件 JS bundle │ ├─ 可选:Bun compile → 编译为单文件可执行二进制 │ └─ 发布到 npm (@anthropic-ai/claude-code) ``` ### 故障排查 | 错误 | 解决方案 | |:---|:---| | `Cannot find module 'src/...'` | 确认源码在 `src/` 目录下,且 `bunfig.toml` 存在 | | `Missing 'default' export in module '*.md'` | 运行 `node scripts/setup.mjs` 重新生成缺失的 stub 文件 | | `Cannot find package '@ant/...'` | 运行 `node scripts/setup.mjs` 重新创建 stub | | `bun: command not found` | 安装 Bun:`curl -fsSL https://bun.sh/install \| bash`(或重启终端) | | `No authentication found` | 运行 `./start.sh login` 使用 OAuth 登录,或 `export ANTHROPIC_API_KEY="sk-ant-xxx"` 使用 API Key | | 使用非 Anthropic 代理 | `start.sh` 会自动检测并设置;手动启动时需设置 `DISABLE_PROMPT_CACHING=1` 和 `DISABLE_INTERLEAVED_THINKING=1` | | 只能在一个目录启动 / 移动源码后卡死 | Bun 按绝对路径缓存编译结果。`start.sh` 会自动清理缓存。手动启动时需先清理:`rm -rf ~/Library/Caches/bun`(macOS)或 `rm -rf ~/.cache/bun`(Linux) | ### 如果你想运行官方版本 ```bash npm install -g @anthropic-ai/claude-code ``` --- ## 技术栈 | 层次 | 技术 | |:---|:---| | **运行时** | Node.js >= 18, Bun >= 1.0 | | **语言** | TypeScript + React JSX | | **UI** | React 19,自定义终端渲染器,146+ 组件 | | **CLI** | Commander.js 12 | | **AI/LLM** | Anthropic SDK, Claude Agent SDK, OpenAI SDK, AWS Bedrock, Azure Identity | | **协议** | Model Context Protocol (MCP, 6 种传输), LSP, OAuth/XAA | | **可观测性** | OpenTelemetry (traces, metrics, logs) + OTLP 导出器 | | **代码工具** | ripgrep, Sharp (图片处理), Marked, Turndown, Diff | --- ## 项目结构 ``` claude-code-source/ ├── README.md # English documentation ├── README.zh.md # 本文档(中文) ├── assets/ # 图片资源 │ ├── anthropic-claude-code.webp │ └── screenshot.png ├── package.json # 依赖声明(逆向工程) ├── tsconfig.json # TypeScript 配置 ├── bunfig.toml # Bun preload 配置 ├── preload.ts # 运行时 shim(feature flag、宏) ├── start.sh # 启动脚本 ├── scripts/setup.mjs # 一键安装脚本 │ ├── claude-code-deep-analysis/ # 18 篇原创分析文章(中文 + EN) │ ├── README.md # 系列索引(中文) │ ├── README.en.md # 系列索引(English) │ ├── 00-core-conclusion.md # 每篇文章有 .md + .en.md │ ├── 00-core-conclusion.en.md │ ├── ... │ └── 17-hook-system.en.md │ └── src/ # Claude Code 源码(Anthropic) ├── query.ts # 核心 Agent 循环(1,729 行) ├── QueryEngine.ts # 会话管理(46.6 KB) ├── Tool.ts # 工具接口与注册(29.5 KB) ├── main.tsx # 主 React 组件(4,683 行) │ ├── entrypoints/ # 入口文件(CLI、MCP、SDK 类型) ├── commands/ # 87+ slash 命令 ├── tools/ # 45+ 工具实现 │ ├── BashTool/ # Shell 执行(430 KB 安全代码) │ ├── AgentTool/ # 子 Agent 执行 │ ├── FileEditTool/ # 文件编辑与 diff 匹配 │ ├── MCPTool/ # Model Context Protocol │ └── ... # 30+ 更多工具 │ ├── services/ # 38 个服务模块 │ ├── api/ # Anthropic API 集成 │ ├── mcp/ # MCP 协议(25 个子目录) │ ├── compact/ # 上下文压缩 │ ├── SessionMemory/ # 跨会话记忆 │ └── ... │ ├── components/ # 146+ React UI 组件 ├── hooks/ # 85+ React Hooks ├── utils/ # 564+ 工具函数 ├── permissions/ # 权限系统(5 种模式) ├── bridge/ # CLI ↔ VS Code 集成 ├── constants/ # System Prompt 组装与配置 ├── memdir/ # 跨会话记忆系统 ├── skills/ # Skill/插件系统 ├── voice/ # 语音输入处理 └── ... ``` --- ## 版权声明 - **源代码**:所有权利归 **Anthropic, PBC** 所有。不授予任何许可。 - **分析文章**(`claude-code-deep-analysis/`):仓库维护者的原创评论和分析。代码片段仅用于教育目的。 **联系方式**:如有任何问题,请通过 GitHub Issues 联系。