【Claude Code】源码深度解析:它为什么这么强
声明:本文基于泄露源码的公开分析,源码来自 GitHub 上的镜像仓库(已清除敏感信息的清理版),仅供技术研究与学习。
前言
2026年3月31日,Claude Code 的源码意外泄露,一夜之间 GitHub 上出现了数十个镜像仓库。52万行 TypeScript 代码,让所有人第一次看清了 Anthropic 到底在憋什么大招。
本文不是源码拷贝,而是基于多个分析仓库的深度解读,带你搞清楚:Claude Code 为什么能这么强,它的架构设计有什么值得借鉴,以及那些藏在代码里的彩蛋。
主要参考:
- soongenwong/claudecode — 完整镜像,可编译运行
- fattail4477/claw-decode — 架构分析与隐藏功能揭秘
- noya21th/claude-source-leaked — 87个隐藏feature flags分析
一、不是 CLI 包装器,是完整的 Agent 操作系统
很多人以为 Claude Code 就是一个调用 Claude API 的命令行工具。源码告诉我们:它是一个 50万行 TypeScript 的完整 Agent 操作系统。
1 | src/ |
Rust 移植版(rust/)目前只实现了约 50-60% 的功能:
- ❌ 缺少:插件系统、Hook运行时、/agents /mcp /skills 等大部分CLI命令
- ✅ 有:核心Agent循环、基础工具集、对话状态持久化、OAuth
二、Agent Loop 核心机制
2.1 四阶段执行循环
Claude Code 的每次用户输入,都经过这个精细的管道:
graph TD
UI["👤 用户输入"]
RR["🔀 PortRuntime.route_prompt()<br/>路由匹配: 命令 / 工具 / 普通对话"]
BC["📦 PortContext.build_context()<br/>构建上下文: workspace检测 · 文件统计"]
SI["📋 system_init_message + render_context<br/>组装系统提示"]
SE["⚡ StreamingToolExecutor<br/>流式执行工具"]
TH["🪝 ToolHooks 拦截<br/>PreToolUse / PostToolUse 钩子"]
TO["🎼 ToolOrchestration<br/>工具编排与协调"]
SP["💾 session_store.persist()<br/>持久化会话状态"]
UI --> RR --> BC --> SI --> SE --> TH --> TO --> SP
style UI fill:#C7CEEA,stroke:#9FA8DA,color:#333
style RR fill:#E8D5F5,stroke:#CE93D8,color:#333
style BC fill:#E8D5F5,stroke:#CE93D8,color:#333
style SI fill:#E8D5F5,stroke:#CE93D8,color:#333
style SE fill:#B5EAD7,stroke:#80CBC4,color:#333
style TH fill:#B5EAD7,stroke:#80CBC4,color:#333
style TO fill:#B5EAD7,stroke:#80CBC4,color:#333
style SP fill:#E8D5F5,stroke:#CE93D8,color:#3332.2 工具 = Name + Hint + Permission + Execute
这是 Claude Code 最核心的设计哲学:每个工具不只是一个函数,而是一个带提示的智能体。
1 | # tools.py 中工具的规范定义 |
2.3 43个工具(不是10个!)
| 类别 | 工具 | 作用 |
|---|---|---|
| 文件操作 | FileRead, FileWrite, FileEdit, Glob, Grep | 读写编辑搜索文件 |
| 代码执行 | Bash, REPL, PowerShell, Notebook | 执行命令和代码 |
| 代码理解 | LSPTool | LSP语义分析,理解代码结构 |
| Agent | AgentTool, TaskAgent, TeamAgent | 启动子Agent/团队 |
| 记忆 | Memory, MemorySearch | 跨会话记忆读写 |
| 计划 | TodoWrite, TaskWrite | 任务清单管理 |
| 调度 | ScheduleCron, RemoteTrigger | 定时任务/远程触发 |
| 外部集成 | MCPTool, McpAuthTool | MCP协议支持 |
| 通信 | SendUserMessage, AskUserQuestion | 主动推送/询问用户 |
| 其他 | WebSearch, WebFetch, ConfigTool, SkillTool | 搜索配置技能 |
关键洞察:LSPTool 接入 Language Server Protocol,能真正”看懂”代码结构,而不只是匹配字符串。
三、记忆系统:没有向量数据库
3.1 纯 Markdown 文件 + 自动维护循环
Claude Code 没有用 Pinecone/Milvus 这些向量数据库,纯粹是 Markdown 文件加上一套自动整理机制。
1 | memdir/ |
3.2 Dream Mode(睡眠整合)
当空闲时,Claude Code 会触发 Dream Mode,运行一个 4 阶段的记忆整理循环:
Phase 1 — Orient(定向)
- 列出记忆目录看有哪些文件
- 读取入口索引文件
- 扫描现有主题文件,避免重复
Phase 2 — Gather Recent Signal(收集信号)
按优先级读取:
- 每日日志(logs/YYYY/MM/YYYY-MM-DD.md)
- 已偏离事实的旧记忆
- JSONL 转录本中 grep 特定术语(不 exhaustive,只找已怀疑重要的)
“不要穷尽式读转录本。只找你已经怀疑重要的事物。”
Phase 3 — Consolidate(整合)
- 合并新信号到主题文件
- 相对日期 → 绝对日期(”上周” → “2026-04-08”)
- 删除被否定的事实
Phase 4 — Prune and Index(修剪+索引)
- 索引文件必须保持在 25KB 以下
- 删除指向过时记忆的指针
- 缩短冗长条目
- 解决文件间的矛盾
结果:它真的会在你”睡觉”时整理记忆,跨会话记住你的项目结构、编码风格、偏好。
四、Multi-Agent 团队协作
Claude Code 有一套内置的多 Agent 编排系统,不是简单的”一个 Agent 调用另一个”:
团队构成
graph TD
C["👤 协调者 你<br/>通过自然语言分配任务"]
R["🔍 研究员 Agent<br/>只读权限<br/>搜索 · 阅读代码 · 查文档"]
W["✏️ 编码员 Agent<br/>全权限<br/>写代码 · 执行命令 · 提交PR"]
TL["📋 共享任务看板<br/>Unix Domain Socket 通信"]
C -->|"分配只读任务"| R
C -->|"分配执行任务"| W
R <-->|"Bridge协议通信"| TL
W <-->|"Bridge协议通信"| TL
style C fill:#C7CEEA,stroke:#9FA8DA,color:#333
style R fill:#B5EAD7,stroke:#80CBC4,color:#333
style W fill:#FFDAB9,stroke:#FFAB76,color:#333
style TL fill:#E8D5F5,stroke:#CE93D8,color:#333通信机制
- 共享任务列表:像看板一样,每个 Agent 认领任务
- Unix Domain Socket:跨进程通信(uds_inbox feature flag)
- Bridge 协议:跨机器协作的通信协议
这就是为什么 Claude Code 能同时处理多个任务,而且 Agent 之间不会互相干扰。
五、KAIROS:主动助手模式(未发布)
标准 Claude Code 是你问我答。KAIROS 让它主动发起对话:
1 | # 核心工具:SendUserMessage |
集成 /loop 命令和 ScheduleCron,带 jitter 配置避免”雷鸣羊群”问题(所有定时任务同时触发)。
六、安全系统:多层防护
6.1 硬编码安全底线
Claude Code 有一段无法通过配置修改的硬编码安全指令:
1 | 可协助: |
源码注释显示:这段代码经过指定团队成员 review 后才能改,普通开发者无权修改。
6.2 权限分级
1 | DangerFullAccess — 完全信任(全权限) |
6.3 执行前检查(Blast Radius)
1 | # 源码中的"Carefully consider"规则 |
七、成本优化:静态/动态提示词分离
Claude Code 在 API 成本上做了极致优化:
graph LR
PS["📤 静态部分<br/>系统提示 · 工具定义 · 固定规则<br/>缓存: 只在变化时重新发送"]
PD["🔄 动态部分<br/>用户输入 · 对话历史 · 执行结果<br/>每轮都变化"]
API["🤖 Claude API"]
PS -->|"缓存命中节省~50% token"| API
PD -->|"每轮发送"| API
style PS fill:#C7CEEA,stroke:#9FA8DA,color:#333
style PD fill:#FFDAB9,stroke:#FFAB76,color:#333
style API fill:#E8D5F5,stroke:#CE93D8,color:#333内部版本的词数限制(公开版没有)
1 | 公开版:"be concise"(模糊要求) |
这就是为什么 Claude Code “感觉很快”——它在数词数。
八、Feature Flags:藏了多少彩蛋
| 标志 | 功能 | 状态 |
|---|---|---|
BUDDY | 虚拟宠物系统(18种生物,会戴帽子,对代码评论) | 未发布 |
KAIROS | 主动助手模式 | 未发布 |
VERIFICATION_AGENT | 验证Agent(自我检查) | 未发布 |
TOKEN_BUDGET | Token预算管理 | 未发布 |
UDS_INBOX | Unix Domain Socket 收件箱 | 未发布 |
CACHED_MICROCOMPACT | 微压缩缓存 | 未发布 |
UNDERCOVER | 卧底模式 | 已部分泄露 |
Undercover Mode(卧底模式)
当向公共仓库提交代码时自动激活:
- 去除内部代号(模型内部叫 Capybara、Tengu)
- 不暴露内部版本信息
源码注释:“Do not blow your cover.” — 这个模式无法被强制关闭。
Buddy(虚拟宠物)
这不是玩笑!Claude Code 有一个完整的 Tamagotchi 系统:
- 18种生物:鸭子、水豚、鬼魂、蝾螈…
- ASCII art 动画(多帧)
- 稀有度等级:Common → Legendary
- 它们会戴帽子
- 会对你的代码在气泡中评论
源码里真的有一套完整的宠物系统,可能永远不会被发布。
九、架构设计模式:值得借鉴
模式1:Memory as Markdown(记忆即文件)
1 | 不需要向量数据库 |
模式2:Tool = Name + Responsibility Hint
1 | # 工具的"提示词"才是精髓 |
模式3:Multi-Agent via Task Lists
1 | 不是 A agent 调用 B agent |
模式4:Reversibility × Blast Radius 分类
1 | 执行前评估每个操作的风险 |
模式5:Static/Dynamic Prompt Split
1 | 缓存静态部分,节省50% API成本 |
十、和 OpenClaw 的对比
| 维度 | Claude Code | OpenClaw |
|---|---|---|
| 语言 | TypeScript(50万行) | TypeScript + Rust |
| 核心机制 | 工具+Hook编排 | 工具+Skills |
| 记忆 | Markdown + Dream Mode | 多种引擎(可插拔) |
| 多Agent | Team/Task/Bridge | Multi-Agent路由 |
| 主动能力 | KAIROS | Cron + Heartbeat |
| CLI | 完整 | 完整 |
| 插件系统 | 完整 | Skills生态 |
| 虚拟宠物 | Buddy(未发布) | 无 |
结语
Claude Code 泄露事件让整个 AI Agent 社区第一次看到了工业化生产的 Agent 系统长什么样。核心启示:
- 不是模型强,是工程化做得好。52万行代码,每一个细节都在控制 Agent 的行为
- 工具即提示。工具的描述和适用场景,才是让模型”知道”什么时候该用什么的能力
- 记忆不在于存储,在于维护。Markdown + 睡眠整理循环,比向量数据库更简单却更有效
- 安全是架构问题,不是 Prompt 问题。硬编码底线 + 权限分级 + Blast Radius 评估,从根本上堵住风险
最后用源码注释里的一句话收尾:
“This isn’t a wrapper around an API. It’s a full operating system for AI agents.”