愚人节福利?Claude Code源码曝光!带你解读下Claude Code的架构

21 阅读14分钟

前言

Hi 大家好,最近 AI 圈直接炸出一个超级大瓜:

Claude Code的源码被曝光了!!!

ad2c70e3f9fd6c96672d3b8bd0c840c.jpg

事情经过特别简单又特别离谱:

Anthropic 的工程师在发布 NPM 包时,不小心把一个 59.8MB 的 Source Map 调试文件 一起打包发到了生产环境。这东西本来是内部专用的调试文件,能直接把编译后的代码,还原成完整的原始 TypeScript 源码。

结果被安全研究员 Chaofan Shou 发现后,直接发到了 X(原推特),瞬间引爆整个圈子。短短几小时内,相关 GitHub 仓库直接收获成千上万的 star 和 fork,彻底火出圈。

这件事情引起了轩然大波,短短几个小时内,相关的github仓库得到了成千上万的star和fork

image.png

不过很多小伙伴其实对 Claude Code 到底是什么、底层怎么跑、有什么厉害之处 并不太了解。

今天这篇文章,我就结合最近 GitHub 上爆火的教程 + 自己这段时间的实际使用经验,

来介绍下Claude Code的一些亮点,讲一些普通人也能听的懂的Claude Code知识


概念介绍

Claude Code 是一个运行在终端里的 AI 编程助手

它最恐怖的地方在于:它能真正操作你的代码库 —— 读文件、写文件、执行命令、搜索代码、调用 API,而不只是给你看一段代码片段、让你自己复制粘贴。

这个区别非常关键。

传统的 AI 编程助手(比如早期的 GitHub Copilot),本质是补全工具:你写代码,它帮你补全下一行。

而 Claude Code 是执行工具:你只需要描述清楚目标,它就能从头到尾帮你完成整个任务

举个例子你就懂了

假设你现在想做一件事:给项目里所有接口加上统一的异常处理,并写好日志。

👉 普通 AI 编程助手(Copilot / 普通补全)

你要:

  1. 打开每个文件
  2. 选中代码
  3. 告诉它:帮我加异常处理
  4. 复制 → 粘贴 → 保存
  5. 重复几十次

它只做一件事:给你一段代码,剩下全靠你自己。


👉 Claude Code(真正的执行型 Agent)

你只需要说一句话:

帮我给项目里所有接口加上统一异常处理,并打印错误日志。

然后 Claude Code 会自己动手

  1. 打开你的项目目录
  2. 遍历所有接口文件
  3. 读取代码结构
  4. 自动修改代码
  5. 保存文件
  6. 甚至帮你检查有没有语法错误

而在这个过程中 你不用点一下鼠标,不用复制粘贴。

image.png


而这些实现的底层,都是接下来要介绍的Claude Code的核心能力:

Claude Code的核心能力

接下来我将会罗列出Claude Code的一系列核心能力 Claude Code看似自动的每一步 实际上背后都是在执行下面这些方法

文件操作

  • 读取任意文件(FileReadTool
  • 精确编辑文件(FileEditTool)——不是替换整个文件,而是精确的字符串替换
  • 创建新文件(FileWriteTool
  • 搜索文件名(GlobTool
  • 搜索文件内容(GrepTool

命令执行

  • 执行任意 Shell 命令(BashTool
  • 执行 PowerShell(PowerShellTool
  • 交互式 REPL(REPLTool

代码智能

  • LSP 集成(LSPTool)——跳转定义、查找引用、悬停文档
  • Jupyter Notebook 编辑(NotebookEditTool

网络能力

  • 抓取网页(WebFetchTool
  • 搜索互联网(WebSearchTool

任务管理

  • 创建后台任务(TaskCreateTool
  • 查询任务状态(TaskGetToolTaskListToolTaskOutputTool
  • 停止任务(TaskStopTool

多代理协作

  • 启动子代理(AgentTool
  • 创建协作团队(TeamCreateTool
  • 代理间通信(SendMessageTool

扩展能力

  • MCP 工具调用(MCPTool
  • Skills 执行(SkillTool
  • 定时任务(ScheduleCronTool

以上提到的这些方法协同合作,从而使得Claude Code成为一个超级无敌强大的综合AI编程助手


核心架构

通过上面的介绍,我们知道了它背后的一些方法,但是他们具体什么时候触发,以及他们之间是如何通信的? 下面的架构图能够让你了解

image.png Claude Code 的架构分为几个关键层次:

用户层:通过 CLI、Desktop 或 Web 界面与系统交互。

QueryEngine:核心引擎,负责消息循环、Agent 执行和流式响应处理。

工具系统:提供原子操作能力(文件读写、命令执行、代码搜索等)。

权限系统:五层权限架构,从会话模式到具体路径/命令级别的细粒度控制。

MCP 客户端:连接外部 MCP 服务器(GitHub、Slack、Database 等),扩展工具能力。

状态管理:Bootstrap State(全局单例)和 AppState(会话级响应式状态)。

Context Engineering:系统提示构建、Memory 系统、CLAUDE.md 项目上下文、Auto-Compact 压缩。

有了这样强大的架构,让 Claude Code 能够理解你的意图、安全地执行操作、管理长期上下文。

使用方式

说了那么多,接下来带大家体验下Cladue Code的体验方式吧

Claude Code 主要有 5 种主流使用方式, 覆盖终端、网页、IDE、协作与自动化场景Anthropic。

一、终端 CLI(核心方式)
在本地终端直接运行,是最原生、最强大的用法Anthropic。

二、网页版(claude.ai/code)
浏览器直接使用,无需安装,适合快速尝试Anthropic。

三、IDE 集成
在编辑器内无缝使用,主流 IDE 均支持Claude Code。

四、协作与团队场景
连接外部数据源(如 Google Drive、Figma、Slack),实现跨工具协作Anthropic

五、自动化与 CI/CD
编写脚本批量处理代码

其中我个人最推荐的两种方式是 终端CLI 和 IDE集成,下面我也会对这两种方式进行详细介绍

终端CLI

终端CLI其实就是命令行的形式 Claude Code 需要 Node.js 18+ 或 Bun 运行时。

# 通过 npm 安装
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version

首次运行需要配置 API Key:

claude
# 会提示你输入 Anthropic API Key
# 或者设置环境变量
export ANTHROPIC_API_KEY=sk-ant-...

安装好之后:

image.png

初次使用 需要选择终端字符的主题色

image.png

然后选择计费模式

  • 1.用你的 Claude 订阅账号登录(Pro/Max/Team/Enterprise 会员),它是按订阅套餐计费,不是按次按 token 计费
  • 2.用 Anthropic Console(API 控制台)账号登录,按 API 用量计费,它是按 token 消耗计费(比如 Claude 3.5 Sonnet、Opus 都有单独的 API 单价),先充值后使用
  • 3.通过第三方云厂商平台(如 AWS Bedrock、Azure Foundry、Google Vertex AI)登录使用,它是由云厂商按平台规则计费,不直接通过 Anthropic 官网

你可以根据自己实际的使用情况来选择

后续的使用方式大概有三种:

模式一:交互式 REPL

最常用的模式,像聊天一样与 Claude 对话:

claude

进入后,你可以:

  • 直接输入问题或任务
  • 用 / 开头输入斜杠命令
  • 用 Ctrl+C 中断当前操作
  • 用 Ctrl+D 或输入 /exit 退出

模式二:单次执行

适合脚本集成或快速任务:

# 直接执行任务
claude "解释一下这个项目的结构"

# 非交互模式(不等待用户输入)
claude --print "列出所有 TypeScript 文件"

模式三:管道模式

从标准输入读取内容:

# 分析 git diff
git diff | claude "解释这些改动"

# 分析日志
cat error.log | claude "找出错误原因"

在交互模式下,斜杠命令是控制 Claude Code 行为的快捷方式:

命令作用
/help显示帮助
/clear清空对话历史
/compact压缩对话上下文
/cost显示本次对话的 token 消耗和费用
/config查看或修改配置
/model切换模型
/commit生成 git commit 信息并提交
/review代码审查
/exit退出

你还可以给claude写个说明书 通过在项目根目录创建 CLAUDE.md 文件,Claude Code 每次启动都会读取它,作为项目上下文: 例如:

# 项目说明

## 技术栈
- Node.js 20 + TypeScript
- PostgreSQL + Prisma ORM
- Jest 测试框架

## 代码规范
- 使用 ESLint + Prettier
- 函数命名用 camelCase
- 文件命名用 kebab-case

## 常用命令
- `npm run dev` 启动开发服务器
- `npm test` 运行测试
- `npm run build` 构建生产版本

## 注意事项
- 不要直接修改 generated/ 目录下的文件
- 数据库迁移需要先在 staging 环境验证

这是 Claude Code 最重要的配置之一。一个好的 CLAUDE.md 能让 Claude 更准确地理解你的项目,减少误操作。

为什么推荐使用终端CLI

其实官方最推荐大家使用的方式是终端CLI的方式 那这是为什么呢 其实有几大原因

它是 Claude Code 的「原生形态」,拥有完整的 Agent 能力 Claude Code 的核心引擎,就是为终端 CLI 设计的。

  • 所有功能(文件读写、命令执行、Git 操作、跨文件重构)在 CLI 中是原生开放的,无需任何额外适配。
  • VS Code/IDE 插件本质上只是「给 CLI 套了个壳」,很多高级能力会被阉割或受限。

极致高效,完全不打断你的编程流 这是 CLI 最杀开发者的一点:

  • 你不用切换窗口、打开侧边栏、复制粘贴代码,全程只用键盘操作。
  • 指令发送、文件修改、代码保存,一气呵成,完全不打断思路。
  • 对比:插件 / 网页版需要你手动把代码复制出来、修改后再粘回去,而 CLI 直接原地修改文件,一秒生效。

完全可脚本化、自动化,适配你的工作流 CLI 天生支持管道、脚本、批处理,这是插件永远无法实现的:

  • 你可以写一个脚本,批量处理多个项目的相同需求(比如「给所有组件添加单元测试」)。
  • 你可以把 Claude Code 集成到 CI/CD 流程中,自动做代码审查、文档生成、重构。
  • 你可以用 --yes 参数实现「无人值守式」修改,一键完成复杂任务。

IDE集成

除了终端CLI的方式使用,我个人还推荐IDE集成的方式

大家可以去IDE中搜索Claude Code的官方插件 通过登录和进行一些简单的配置

就可以像使用cursor一样使用了

以VSCode举例

image.png

这种方式的好处我认为在于学习成本比较低

因为它用起来几乎跟我们之前的IDE集成方式很像

在一些场景中,你甚至可以在vscode中同时使用 codex claude code ChatGPT GitHub Copilot 等等 所以在这种场景下进行切换 则统一使用 更加方便

从聊天机器人到Agent

接下来聊聊Claude Code这个目前几乎是最优秀的Agent和早期的普通聊天机器人的一些区别吧

对于早期的聊天机器人,咱们就以2022年风靡一时的chatgpt来说吧

我认为它本质上就是LLM 套上一层 IM 通讯工具形式的壳从而构成一个所谓的”聊天机器人“

我还记得第一次使用它时,看起来就像我在使用网页QQ在和一个陌生人聊天 我问他问题 他给我解答

这个陌生人几乎无所不知,数学能力也十分强悍......

后面我们才知道,这个”陌生人“其实是LLM ,我们跟他发信息本质上只不过是给这个LLM的模型权重传入参数...

它的特点和局限也非常明显:

  • 工作模式是输入文本 → [LLM] → 输出文本,只能文生文
  • 它只能给我们参考信息,没法真正地帮我们做事
  • 对于一些最新的内容和一些特定领域的内容,它会乱答
  • 它记不住你上一次和他聊过的内容,每一条信息发送后,似乎就像它刚认识你一样,类似没有状态的http

对于2026年的今天,这些问题都被我们高效解决了,它进化成了我们熟知的Agent,现在市面上几乎没有一家公司会去推出一个纯聊天的机器人作为产品了。

相信大家肯定都知道Agent的是什么,那我觉得还是需要介绍下 让大家有个更深层次的认识:

在 AI 领域,Agent 是一个能够:

  1. 感知环境(Perceive):读取文件、执行命令、获取信息
  2. 做出决策(Decide):规划下一步行动
  3. 执行动作(Act):调用工具改变环境状态
  4. 观察结果(Observe):看到动作的效果
  5. 循环迭代(Loop):基于结果调整计划

这个 PDAOL 循环(Perceive-Decide-Act-Observe-Loop)是 Agent 的核心。

接下来聊聊Agent的特点:

1.工具调用

2023 年,OpenAI 引入了 Function Calling(函数调用),Anthropic 引入了 Tool Use(工具使用)。这是 AI 从"聊天机器人"向"Agent"演化的关键一步。

工具调用的机制:

用户:今天北京天气怎么样?

LLM 内部决策:我需要调用天气 API
→ 生成工具调用:get_weather(city="北京")
→ 系统执行工具,返回结果:{"temp": 15, "weather": "晴"}
→ LLM 基于结果生成回答:今天北京天气晴,气温 15 度。

这个机制让 LLM 从"只能说"变成了"能做"。

这里提到的只是工具调用的一种,实际上有各种各样的工具调用方法

包括本文上面提到的各种Claude Code的方法,使得Claude Code能够读写文件,查找替换,自动执行shell命令...等等我们都可以称为是工具调用,所以工具调用的范畴还是非常大的。

2. 对话记忆(Memory)

如果说工具调用让 Agent 能 “做事”,那记忆就是让 Agent 能 “记住事、持续做事”。

没有记忆的大模型,本质是 鱼的记忆:

  • 每次对话都是独立的
  • 问完就忘
  • 无法连贯完成复杂任务

而 Agent 必须具备长期、结构化、可管理的记忆能力,才能像人一样持续协作。

记忆的核心机制

用户:帮我订明天去上海的高铁。
Agent:请问出发城市是?
用户:北京。
Agent:需要什么时间段?
用户:下午。
Agent:正在为你查询 北京→上海 明天下午的高铁……

记忆是如何实现的?

那记忆的能力是如何实现的呢?

不要将它想的有多高大上,其实看过一些文章的朋友们就会发现,本质上实现记忆很简单:

就是将最近几轮对话加入到 Prompt 里

我们会在最新的一次对话中将上下文信息作为prompt的内容之一(${context}),从而让大模型知道

举个例子

假设对话是这样:

  1. 用户: 我叫小明。
  2. AI: 你好小明!
  3. 用户: 我今年 20 岁。
  4. AI: 好的,我记住了。
  5. 用户: 我是谁?我多大?

到第 5 句时
你以为只发了 “我是谁?我多大?” 但实际上,程序发给大模型的是一整个拼接好的 Prompt

System:你是一个智能助手。

user:我叫小明。
AI:你好小明!

user:我今年20岁。
AI:好的,我记住了。

user:我是谁?我多大?

大模型看到这段完整内容,才回答:你是小明,今年 20 岁。

只不过 随着对话轮次的增多,上下文的内容也越来越多,而单次对话的最大token又是有限的

该如何取舍上下文,以及该如何总结上下文,其实就成了一个工程化的问题,这点也会在下面的”如何成为一个优秀的Agent“中有探讨

如何成为一个优秀的Agent

想成为像Claude Code一样优秀的Agent的话,那需要能够应对好这些挑战:

可靠性:Agent 执行多步骤任务,任何一步出错都可能导致整体失败。Claude Code 通过工具结果验证、错误重试、用户确认来提高可靠性。

安全性:Agent 能执行真实动作,错误的动作可能造成不可逆的损害。Claude Code 通过权限模型、操作确认、沙箱隔离来保证安全。

可观察性:用户需要知道 Agent 在做什么。Claude Code 通过透明的工具调用显示、实时流式输出来保证可观察性。

上下文管理:长任务会消耗大量 token。Claude Code 通过自动压缩(auto-compact)来管理上下文长度。

成本控制:多轮 API 调用成本高。Claude Code 通过 token 预算、成本追踪来控制成本。

上面的人任何一个挑战都需要工程师们绞尽脑汁去思考,最终得到一套十分强大的架构设计方案

所以这其实也是Claude Code此次泄漏源码引起巨大轰动的原因之一,它直接让Claude Code的竞争公司能够去直接学习其优秀的架构与设计实现。