基于Claude Code泄露源码的深度解析
昨天发生了一件大事,Claude Code代码被泄露了,基于这份代码,我使用Claude Code工具让它自己分析了一下自己的代码,想想也挺魔幻的。
一、项目整体定位
Claude Code 是一个以 Agent 为核心的 AI 编程助手,运行在终端里。它不只是”调用 LLM 然后返回文本”,而是一个完整的 Agentic Loop 系统,能够:
-
自主规划任务
-
调用工具(读写文件、执行命令、搜索代码)
-
生成子 Agent 并行处理复杂任务
-
管理上下文、记忆、权限
技术栈:TypeScript + Bun 运行时,React + Ink 做终端 UI,Claude API 作为 LLM 后端。
二、核心架构:Query Loop
整个 Agent 的心脏是 query.ts(约 5000 行),它是一个异步生成器(async generator),实现了经典的 ReAct 循环:

关键设计:用 async generator 而不是 callback/Promise,使得 UI 层可以 for await 消费事件流,实现真正的流式渲染,同时 Agent 逻辑保持线性可读。
三、Agent 系统设计
3.1 Agent 的三种来源

每个 Agent 定义包含:
-
tools:该 Agent 可用的工具列表 -
model:使用哪个 Claude 模型 -
mcpServers:挂载哪些 MCP 服务 -
permissions:权限约束 -
systemPrompt:专属系统提示
3.2 AgentTool:子 Agent 的生命周期
tools/AgentTool/AgentTool.tsx(235K,最大文件)管理子 Agent 的完整生命周期:

三种执行模式:
-
Fork 模式:子Agent继承父Agent的完整上下文(适合需要全局知识的任务)
-
Worktree 模式:在独立 git worktree 中运行(代码隔离)
-
Remote 模式:在云端 CCR 环境运行(长时任务)
3.3 多 Agent 并行编排

工具编排层(toolOrchestration.ts)会自动分析工具调用的并发安全性:
-
并发安全(可并行):
file_read,glob,grep,web_search -
非并发安全(串行):
file_write,bash,agent_spawn
四、上下文管理:解决长对话的核心挑战
这是整个系统最精妙的部分之一。随着对话变长,token 消耗爆炸,Claude Code 实现了多层上下文压缩策略:
4.1 五种压缩策略
上下文压缩策略(从轻到重)

4.2 Prompt Cache 共享(关键优化)

这是一个非常聪明的工程优化:子 Agent 不需要重新”理解”整个项目上下文,直接复用父 Agent 已经缓存的 prefix。
五、工具系统设计
5.1 工具接口(Tool.ts,约 30K)
每个工具实现统一接口:

5.2 内置工具集

5.3 MCP(Model Context Protocol)集成
MCP 是 Anthropic 提出的工具扩展协议,允许第三方服务以标准化方式向 Agent 暴露工具:

每个 Agent 可以挂载不同的 MCP Servers,实现工具的动态组合。
六、权限与安全系统
6.1 多层权限控制

6.2 26 个生命周期 Hook

Hook 系统使得用户可以在不修改核心代码的情况下,注入自定义逻辑(审计日志、安全过滤、自动化流程等)。
七、记忆系统
7.1 三层记忆架构

7.2 记忆注入机制
系统提示构建时,记忆内容按优先级合并注入:

八、System Prompt 构建
System Prompt 是动态构建的,包含多个模块:

这种动态构建方式使得每次对话的 System Prompt 都精确反映当前状态,同时通过 Prompt Cache 避免重复计算。
九、关键技术亮点总结
|
技术点 |
实现方式 |
解决的问题 |
|
流式 Agent 循环 |
async generator |
实时 UI 更新 + 线性代码逻辑 |
|
Prompt Cache 继承 |
fork 时传递 cache key |
子 Agent 节省 80% token |
|
工具并发分析 |
静态安全性标注 |
最大化并行度,保证正确性 |
|
多层上下文压缩 |
snip/compact/microcompact |
支持超长对话 |
|
Hook 系统 |
26 个生命周期事件 |
无侵入扩展 |
|
MCP 协议 |
标准化工具接口 |
生态扩展 |
|
三层记忆 |
优先级合并注入 |
个人/项目/本地知识分离 |
|
Worktree 隔离 |
git worktree |
代码修改安全隔离 |
十、Agent 设计的核心思想
从架构层面看,Claude Code 体现了几个重要的 Agent 设计原则:
-
单一循环,多层扩展:核心是一个简单的 ReAct 循环,复杂性通过工具、Hook、MCP 扩展,而不是修改核心逻辑。
-
上下文即状态:Agent 的”状态”完全存在于 messages 数组中,这使得 fork、压缩、恢复都变得自然。
-
工具是能力边界:Agent 能做什么完全由工具集决定,通过限制工具集来限制 Agent 的权限范围。
-
缓存是一等公民:Prompt Cache 不是优化项,而是架构设计的核心考量,子 Agent 的 fork 机制围绕缓存继承设计。
-
流式优先:从 API 调用到 UI 渲染,全链路 streaming,避免任何不必要的等待。
夜雨聆风