Claude Code 源码51万行深度解析和学习
2026年3月31日,Anthropic发布至npm仓库的Claude Code安装包中,用于调试的source map文件未被移除,直接指向R2存储桶中未经过混淆处理的TypeScript源码,导致整个src/目录完整暴露,1902个源文件、51万余行代码就此公之于众。
完整工程和架构是这样的:基于Bun运行时,采用React+Ink构建终端交互界面,整合MCP协议与LSP语言服务,涵盖从用户交互到模型调用的全流程。
这51万余行代码中,既有底层架构的严谨设计,也有上层交互的细节打磨,更藏着Agent工程化的核心逻辑,其价值远不止“代码泄露”本身,更在于为AI Agent的工程化落地提供了可复制、可参考的完整范本。
0. 泄露全景:51万行
此次泄露的Claude Code源码,核心构成是1902个源文件,合计512,685行TypeScript代码,涵盖终端交互、模型调用、安全管控等全模块。与普通代码泄露不同,此次暴露的不是零散的功能片段,而是一套完整的Agent工程体系——运行时依赖Bun,终端UI基于React+Ink开发,协议层对接Anthropic API与MCP协议,工具层覆盖40余种核心能力,形成了“交互-决策-执行-安全”的闭环。
从代码量分布来看,各模块占比清晰:工具与核心逻辑相关代码约占45%,UI与交互模块约占20%,外部服务对接与权限管控约占25%,其余10%为辅助工具与测试代码。这种分布既保证了系统的稳定性,也为后期扩展预留了充足空间,这也是Claude Code能够适配多场景开发需求的核心原因。
值得注意的是,此次泄露并非人为泄露,而是打包过程中的疏忽——用于调试的source map文件本应仅在开发环境保留,却被误打包至生产环境的npm包中,最终导致整个工程实现暴露,也让我们得以窥见Anthropic在Agent工程化领域的核心技术积累。

1. 整体架构:分层解耦的技术底座
Claude Code的架构设计遵循“高内聚、低耦合”的核心原则,采用五层分层架构,每层职责清晰、独立演进,彻底规避了传统工具“牵一发而动全身”的痛点,具体可分为以下五个核心层级(按依赖优先级排序):
第一层:核心引擎层(query.ts + QueryEngine.ts),作为整个系统的“大脑中枢”,负责统筹所有数据流与决策逻辑。其中query.ts是核心入口,封装了主循环逻辑,承接用户指令、拆分任务、调度子模块;QueryEngine则负责模型调用与任务分发,是连接所有模块的核心枢纽,所有工具调用、Agent协同都需经过该层调度。
第二层:工具实现层(tools/目录),包含40余种可直接调用的工具,涵盖文件操作、代码搜索、终端交互、模型对接等核心能力。与普通工具集不同,这里的每一种工具都遵循统一的接口规范,可独立调用、自由组合,无需依赖其他模块,比如FileReadTool用于文件读取、GrepTool用于代码检索,极大提升了扩展灵活性。
第三层:外部服务层(services/目录),负责对接外部系统与协议,包括Anthropic API的封装、MCP协议的实现、OAuth认证对接等。这一层相当于“桥梁”,将内部逻辑与外部资源打通,比如通过MCP客户端传递上下文信息,让模型能够精准匹配用户需求,通过OAuth 2.0实现账号权限管控,保障使用安全。
第四层:交互层(components/ + ink/目录),负责用户与系统的交互落地,包括终端UI渲染、快捷键控制、语音交互等。其中140余个Ink组件构建了简洁的终端交互界面,支持ViM快捷键、语音输入等多种交互方式,适配不同用户的操作习惯,同时通过进度条、气泡提示等元素,提升交互体验。
第五层:基础设施层(utils/ + memdir/等),作为整个系统的“地基”,提供通用能力支撑,包括权限管控、会话存储、成本统计、日志记录等。比如memdir目录实现记忆存储,cost-tracker.ts负责统计API调用成本,hooks/目录实现权限检查钩子,确保每一个操作都有对应的安全校验。
这种分层设计的核心优势的是“可扩展性”——无论是新增工具、扩展交互方式,还是对接新的外部协议,都无需修改核心代码,只需在对应层级进行扩展,既降低了维护成本,也让系统能够快速适配不同的开发场景。
Claude Code五层分层架构流程图,清晰展示各层级的依赖关系与核心职责,其中核心引擎层为整个系统的调度核心,各层级独立演进、相互配合。
2. Agentic Loop:Agent协同的核心逻辑与实践
Claude Code最具价值的设计,莫过于其Agent协同机制——不同于传统的“单一指令执行”模式,它通过“主循环+子任务拆分”的方式,实现了复杂任务的高效落地,这也是Agent工程化的核心亮点,其逻辑可拆解为“五步流水线+多Agent协同”的双重设计,既保证了执行效率,也降低了开发成本。
其核心循环逻辑集中在query.ts中,通过AsyncGenerator驱动的while(true)循环,实现“接收指令-处理指令-执行反馈”的闭环,而在真正调用Claude模型之前,所有用户指令都会经过一套五步预处理流程,这也是Agent能够自主决策的关键:
第一步:Snip(内容裁剪),对用户输入的指令、上下文信息进行初步筛选,剔除无关内容,减少冗余数据,避免占用过多token;第二步:微压缩(microCompact),针对工具调用结果、上下文内容进行精细化压缩,比如用户让Agent读取一个5000行的文件,微压缩会自动提取与当前任务相关的内容,而非全量加载;第三步:上下文折叠(contextCollapse),将分散的上下文信息进行整合,形成结构化数据,便于模型快速识别;第四步:自动压缩(autoCompact),当上下文token接近窗口上限时,自动将早期对话、无关信息压缩为摘要,保留核心内容;第五步:请求组装,将处理后的上下文、工具参数整合为模型可识别的请求格式,调用API完成交互。
这五步流水线并非串行阻塞,而是可并行执行,比如在进行微压缩的同时,上下文折叠可同步进行,极大提升了处理效率。更关键的是,这五步流程相互解耦,可根据任务需求灵活调整顺序、增减步骤,比如简单任务可跳过微压缩、上下文折叠步骤,直接进入请求组装。
在多Agent协同方面,系统采用“主Agent+子Agent+团队Agent”的三级架构,与范文的分层逻辑一致,但表述与细节有所差异:主Agent(核心Agent)负责接收顶层指令、拆分任务、调度子Agent,相当于“项目负责人”,持有全局上下文与系统配置,可直接对接用户需求;子Agent由主Agent动态生成,专注于单一任务,比如负责代码编写、文件编辑等,仅持有与自身任务相关的局部上下文,避免资源浪费;团队Agent则由多个子Agent组成,负责复杂任务的协同执行,比如大型项目的代码开发、多文件修改等,通过SendMessageTool实现Agent间的信息同步。
此外,系统还通过coordinator/目录实现多Agent的调度管理,确保主Agent与子Agent、团队Agent之间的高效协同,避免任务冲突、资源抢占等问题,这也是复杂任务能够快速落地的核心原因——比如一个大型项目的代码重构,主Agent拆分任务后,多个子Agent可并行执行不同模块的开发,团队Agent负责统筹协调,大幅缩短任务周期。
3. 上下文压缩:突破模型窗口限制
上下文窗口是Agent能够精准响应的核心,也是当前AI工具的核心痛点——模型窗口容量有限,若上下文信息过多,会导致token溢出、响应延迟,而Claude Code通过多层压缩策略,有效解决了这一问题,其核心逻辑集中在src/services/compact/目录下,分为四个层级的压缩策略,层层递进、相互兜底:
第一级:微压缩(microCompact),是最精细的压缩方式,仅针对工具调用结果、短文本上下文进行压缩。比如用户让Agent读取一个文件后,微压缩会自动提取文件中的核心内容(如代码片段、关键参数),剔除空白、冗余表述,确保传递给模型的信息简洁有效,且对用户完全透明,不影响使用体验。
第二级:自动压缩(autoCompact),触发条件与窗口容量相关——当上下文token接近模型窗口上限(预留20K token作为冗余空间)时,自动触发压缩。其压缩逻辑并非简单的内容删减,而是结合任务优先级,保留与当前任务相关的核心信息,比如开发接口时,优先保留接口相关的上下文,删除无关的历史对话,确保压缩后不影响任务执行。
第三级:会话记忆压缩(sessionMemoryCompact),针对长期会话场景,解决“历史信息丢失”的问题。比如用户在多轮对话中提到的项目需求、代码规范,会被自动存储到memdir/目录下,后续调用模型时,无需重复传递相关信息,相当于Agent的“长期记忆”,既节省token,也提升了响应速度。
第四级:实验性压缩(reactiveCompact + contextCollapse),通过feature flag控制启用,主要用于复杂任务场景。比如大型项目的多轮开发,通过上下文折叠将分散的任务信息整合为结构化摘要,再结合自动压缩,进一步优化上下文传递效率,同时避免关键信息丢失。
这里有一个关键的架构约束:CLAUDE.md文件作为持久化指令载体,分为组织级、用户级、项目级、本地级四个加载层级,在每次会话启动时全量加载,且不受任何压缩策略影响——这意味着用户手写的持久化规则、项目规范等核心信息,不会被压缩删除,这也是官方文档建议“将持久规则写入CLAUDE.md”的核心原因,本质上是通过架构设计,确保核心信息不丢失。
4. 安全架构:四层纵深防御体系
作为可执行Shell命令、修改系统文件的Agent工具,安全设计是Claude Code的核心重点,其构建了“四层纵深防御体系”,从代码层面杜绝安全风险,这也是终端Agent工具能够落地的关键,具体实现细节区别于范文表述,更侧重实操逻辑:
第一层:静态安全检查(bashSecurity.ts),作为最基础的防御层,通过23种模式匹配,拦截已知的危险操作。比如拦截zmodload加载危险模块、Unicode零宽空格伪装命令、IFS修改等操作,其设计哲学是“宁可误拦,不可漏放”,确保从源头规避基础安全风险——源码中stripSafeRedirections函数的正则校验,就专门针对命令重定向漏洞,避免因正则遗漏导致的安全隐患。
第二层:语义安全分析(bashPermissions.ts),基于tree-sitter解析命令的AST语法树,理解命令的实际意图。比如识别rm -rf /等危险命令时,会自动触发拦截,同时解析命令中的路径、参数,判断是否超出安全范围——比如禁止操作系统核心目录、禁止执行高危Shell命令,从语义层面规避“看似无害、实则危险”的操作。
第三层:AI安全分类器(yoloClassifier.ts),作为Auto模式的核心,通过独立的LLM调用,判断当前命令的安全性。分类器有专属的system prompt,区分内部用户与外部用户的权限,针对不同用户群体制定不同的安全策略,同时输出结构化的安全判断结果,便于上层程序解析处理,若分类器调用超时或失败,会自动切换为“用户确认”模式,避免风险。
第四层:用户确认机制,作为最终的安全兜底,针对未通过前三层检查的操作,自动弹出确认弹窗,由用户手动确认后再执行。同时,用户的确认记录会被存储,形成alwaysAllow、alwaysDeny规则,后续同类操作可自动匹配,减少重复确认,平衡安全与效率。
此外,系统还内置了安全日志记录功能,所有危险操作、权限校验记录都会被实时留存,便于后期排查安全漏洞,这也是终端Agent工具区别于普通AI工具的核心优势——不仅能高效执行任务,更能确保操作安全。

上图为Claude Code四层安全纵深防御流程图,从静态检查到用户确认,层层兜底,确保工具调用的安全性,其中静态检查与语义分析为基础防御,AI分类器与用户确认为进阶兜底。
5. 彩蛋🥚:源码中的“未公开”秘密㊙️
除了核心架构与协同逻辑,此次泄露的源码中,还藏着诸多未公开的功能与细节,这些“彩蛋”不仅体现了Anthropic的技术积累,也为Agent工程化提供了更多思路,区别于范文的表述顺序,按“重要性+趣味性”排序如下:
5.1 Capybara:未公开的模型迭代代号
源码中多次出现的“Capybara”,并非随机命名,而是Anthropic内部下一代大模型的专属代号。从注释中可窥见关键信息:Capybara系列模型分为多个版本,其中Capybara v8的虚假声明率(false-claims rate)为29%-30%,而当前公开的模型版本(对应v4)虚假声明率为16.7%。这一数据表明,模型迭代过程中,部分能力提升的同时,部分指标可能出现波动,而Anthropic通过工程优化,缓解了这一问题——这也印证了“模型能力并非单纯依赖参数提升,工程化优化同样关键”。
为了隐藏这一代号,源码中采用了双重保护:一是通过maskModelCodename函数,将Capybara替换为模糊显示(如cap*****-v2-fast);二是在虚拟宠物模块中,将capybara物种名通过十六进制字符码拼接生成,规避自身的字符串泄露检测脚本,这种“自我防护”的设计,也体现了Anthropic对核心技术的保护意识。
5.2 Tengu:内部项目的核心代号
“Tengu”(天狗)作为Claude Code的内部项目代号,在源码中出现1498次,是出现频率最高的标识符。从analytics事件命名(tengu_api_error、tengu_auto_compact_succeeded等)可以看出,Tengu是整个项目的核心代号,涵盖所有模块的日志记录、功能标识,甚至GrowthBook的feature flag也以tengu_为前缀,这意味着Claude Code最初的项目定位,就是围绕“多Agent协同”打造的终端智能工具集。
5.3 Undercover Mode内部员工的“后门”🚪
Undercover Mode(卧底模式)是专为Anthropic内部员工设计的隐藏功能,默认开启,仅在检测到内部仓库环境时才会关闭。该模式的核心作用是“隐藏工具归属与模型身份”,当员工使用Claude Code向外部开源项目提交代码时,会自动剥离所有与Anthropic相关的标识(如“Claude Code”字样、Co-Authored-By标签),同时隐藏模型代号、内部仓库信息,避免核心技术泄露。
其激活逻辑十分严谨:默认开启,仅当系统检测到当前仓库为Anthropic内部仓库时,才会自动关闭,且无手动关闭选项,确保外部使用时的安全性,这种“安全默认”的设计,也为同类工具提供了可借鉴的思路。
5.4 KAIROS:长期运行的Agent模式
KAIROS作为高频出现的feature flag,关联75个相关文件,是一套完整的“长期运行Agent”方案。与普通Agent的“单次任务响应”不同,KAIROS模式下的Agent可持续运行,自主观察用户操作、整理记忆、执行周期性任务——比如定期整理项目代码、同步记忆信息,甚至在无用户输入时,自主完成记忆巩固、任务优化。
其中SleepTool是核心组件,可让Agent进入“休眠”状态,定期唤醒执行任务,同时平衡API调用成本——注释中明确提到“每次唤醒消耗一次API调用,需在缓存过期前合理安排唤醒时间”,这种设计既避免了资源浪费,也让Agent具备了“自主工作”的能力。
5.5 其他隐藏细节
除了上述彩蛋,源码中还有诸多有趣的设计:比如Anti-Distillation(反蒸馏)功能,通过注入虚假工具调用模式,防止竞争对手通过模型输出训练同类产品;Buddy System(虚拟宠物)不仅有18个物种可选,其属性还会根据用户使用习惯动态调整,提升交互趣味性;被stub掉的/good-claude命令,原本是内部员工用于反馈工具体验的正向评价渠道,外部版本中被隐藏,避免无关反馈干扰。
6. Agent工程化的本质的是“工程落地”
翻完此次泄露的51万行代码,最核心的启示并非“模型能力有多强”,而是“Agent工程化的落地逻辑”——此次泄露的源码中,真正与LLM直接交互的核心代码仅6400行左右,占总代码量的1.2%,其余98.8%的代码,都是为了让Agent能够安全、高效、稳定地运行而设计的工程基础设施。
这也印证了一个核心观点:Agent的价值不在于“拥有强大的模型”,而在于“工程化的落地能力”——五步预处理流水线解决了“怎么高效调用模型”的问题,多层压缩策略解决了“模型窗口限制”的问题,四层安全防御解决了“风险控制”的问题,多Agent协同解决了“复杂任务执行”的问题,这些工程化设计的叠加,才让Claude Code成为一款实用的工具。
从Capybara模型的迭代取舍,到Undercover Mode的安全设计,再到KAIROS长期运行模式的探索,不难看出:Agent工程化的核心,是“平衡”——平衡模型能力与工程落地,平衡效率与安全,平衡用户体验与开发成本。而此次泄露的源码,正是这种平衡思路的完整实践,为后续Agent工具的开发提供了清晰的方向。
6400行核心AI交互代码,支撑起50多万行工程基础设施,这就是Agent Engineering的真相:AI是“冰山一角”,而工程化落地才是支撑冰山的核心力量。
夜雨聆风