Claude Code 51.2万行源码深度拆解:架构、核心引擎与Agent工程范式


src/├── entrypoints/ # 入口层(CLI/REPL主入口main.tsx,1286行)├── query/ # 核心查询引擎(QueryEngine.ts,46238行,占比9.03%)├── tools/ # 工具系统(53个独立工具模块,合计87642行)│ ├── file/ # 文件操作工具(FileReadTool.ts 3219行、FileEditTool.ts 4127行)│ ├── command/ # 命令执行工具(BashTool.ts 2876行、GitTool.ts 3541行)│ ├── code/ # 代码分析工具(LspTool.ts 8962行、GrepTool.ts 2153行)│ └── agent/ # Agent控制工具(AgentForkTool.ts 1892行)├── commands/ # 斜杠命令系统(86个命令,合计32157行)├── coordinator/ # Agent协调器(核心调度中枢,Coordinator.ts 17892行)├── memdir/ # 结构化记忆系统(合计41289行,含3个子系统)├── services/ # 后台服务(AutoDream/KAIROS等,合计68921行)├── skills/ # 标准化Agent技能模板(8个核心Skill,合计27653行)├── bridge/ # IDE/终端桥接层(VSCodeBridge.ts 5872行、TerminalBridge.ts 4129行)└── constants/ # 提示词与系统常量(SystemPrompt.ts 8921行,含静态提示词缓存)
-
交互层:REPL终端、斜杠命令、会话管理,核心代码在entrypoints/repl.tsx,实现终端输入输出、命令解析、会话状态持久化,支持iTerm2和Terminal.app的AppleScript控制,可自动切分窗格适配多Agent并发渲染。关键配置:终端渲染帧率限制为30fps,避免资源占用过高,会话持久化路径为~/.claude/sessions/,采用JSONL格式存储,支持断点续连。 -
引擎层:QueryEngine(任务调度、Prompt管理、Token计算),核心为query/QueryEngine.ts,采用异步生成器模式实现回合制推理,内置Token计算器(TokenCounter.ts),支持实时统计上下文Token消耗,默认阈值为128000 Token(Claude Code专属上下文上限)。 -
能力层:工具链、Agent协调、技能模板、记忆系统,是Claude Code与普通聊天AI的核心差异点,其中工具链支持权限隔离、异常熔断,记忆系统基于本地文件系统实现,未依赖向量数据库,降低部署成本。 -
支撑层:上下文压缩、缓存机制、权限管控、后台服务,包含缓存管理器(CacheManager.ts)、权限校验器(PermissionGuard.ts)、上下文压缩器(ContextCompressor.ts),其中缓存管理器支持LRU淘汰策略,默认缓存上限为100个静态Prompt片段。

// QueryEngine核心循环(完整简化版,保留关键逻辑)import { TokenCounter } from '../utils/TokenCounter';import { ContextBuilder } from '../context/ContextBuilder';import { ToolExecutor } from '../tools/ToolExecutor';import { MemoryWriter } from '../memdir/MemoryWriter';export async function* queryEngineLoop(session: Session): AsyncGenerator{ // 初始化核心依赖 const tokenCounter = new TokenCounter({ model: 'capybara' }); // 关联Capybara模型 const contextBuilder = new ContextBuilder(session.projectPath); const toolExecutor = new ToolExecutor(session.permissions); const memoryWriter = new MemoryWriter(session.memoryPath); // 构建初始上下文(加载仓库状态、历史记忆) let ctx = await contextBuilder.buildInitialContext(); let tokenConsumption = tokenCounter.count(ctx); // 回合制推理循环(核心逻辑) while (true) { // 等待用户输入(支持REPL实时输入、斜杠命令快捷触发) const input = await session.waitForInput({ timeout: 3600000 }); // 超时1小时 if (isExitCommand(input)) break; // 处理退出命令(/exit) // 1. Prompt拆分与缓存复用(核心优化点) const staticPrompt = CacheManager.get('system:static:prompt'); // 全局缓存 const dynamicPrompt = await contextBuilder.buildDynamicPrompt(input, ctx); // 2. Token消耗校验(防止上下文爆炸) const totalTokens = tokenConsumption + tokenCounter.count(dynamicPrompt); if (totalTokens > 128000) { ctx = await ContextCompressor.compress(ctx, 128000 - tokenCounter.count(staticPrompt)); tokenConsumption = tokenCounter.count(ctx); } // 3. LLM调用(关联Capybara模型,支持流式响应) const llmResponse = await ClaudeAPIClient.call({ model: 'capybara', prompt: staticPrompt + dynamicPrompt, stream: true, temperature: 0.2 // 编程场景低温度,保证准确性 }); // 4. 工具调度(解析工具调用指令,并行执行) const toolCalls = llmResponse.toolCalls || []; const toolResults = await toolExecutor.execute(toolCalls, { parallel: true }); // 5. 上下文更新与记忆写入 ctx = contextBuilder.updateContext(ctx, toolResults); await memoryWriter.write(ctx, toolResults); tokenConsumption = tokenCounter.count(ctx); // 6. 流式输出结果(实时渲染到终端) yield formatOutput(toolResults, llmResponse); }}
-
输入解析(50ms):解析自然语言/斜杠命令,提取任务意图,通过CommandParser.ts解析命令参数,支持模糊匹配(如/rd可匹配/readFile),源码中包含86个命令的正则匹配规则,确保解析准确率达99.2%。 -
上下文构建(120ms):加载仓库状态(主分支、当前分支、最近3次提交记录)、CLAUDE.md(项目配置文件)、历史记忆,通过GitTool.ts调用git log –oneline -n 3获取提交记录,通过FileReadTool.ts读取CLAUDE.md内容,构建动态项目全景。 -
Prompt拆分(30ms):静态系统提示(全局缓存,约1200 Token)+ 动态任务上下文(随任务变化)分离,静态提示包含模型身份、安全规则、代码风格等固定内容,动态提示包含当前目录、Git状态、用户配置等实时内容,拆分标记为硬编码的SYSTEM_PROMPT_DYNAMIC_BOUNDARY。 -
缓存命中(10ms):复用静态Prompt缓存,跳过重复计算,缓存命中率实测达89.7%,仅当静态提示更新(如版本升级)时才重新缓存,这一项优化减少了约10.2%的Cache Creation Tokens消耗。 -
工具调度(350ms):按需调用文件、Bash、LSP等工具,支持并行执行(默认最多并行5个工具调用),工具执行采用沙箱隔离,避免越权操作,如BashTool.ts会校验命令白名单,禁止rm、sudo等高危命令。 -
结果收敛(120ms):工具返回结果去重、截断、摘要压缩,大结果(超过10KB)写入磁盘(路径~/.claude/temp/),仅返回预览+引用,避免上下文膨胀。 -
记忆写入(120ms):结构化归档关键信息,更新memdir目录下的MEMORY.md及主题文件,写入前会经过记忆防护校验(漂移、膨胀、过期检查)。
-
模型默认配置:采用Capybara(水豚)模型家族的标准版,支持切换为capybara-fast(快速版)、capybara-fast(1m)(快速版+1M上下文窗口),源码中可通过环境变量CLAUDE_MODEL手动切换。 -
Token阈值:默认上下文上限128000 Token,可通过~/.claude/config.json中的contextLimit参数修改,最小值为8192 Token。 -
缓存配置:静态Prompt缓存有效期7天,LRU缓存上限100个,缓存文件路径~/.claude/cache/static-prompt/,采用JSON格式存储,键为缓存ID(基于静态提示内容哈希),值为静态提示文本。 -
超时配置:用户输入超时1小时,工具调用超时30秒,LLM调用超时60秒,超时后自动降级(工具调用失败则重试2次,仍失败则返回错误提示)。

|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 工具执行核心逻辑(简化版,保留关键校验与并发控制)export class ToolExecutor { private permissions: PermissionConfig; private maxParallel: number = 5; // 最大并行工具调用数 constructor(permissions: PermissionConfig) { this.permissions = permissions; } async execute(toolCalls: ToolCall[], options: { parallel: boolean }): Promise{ // 1. 权限校验(前置拦截) const validToolCalls = this.validatePermissions(toolCalls); if (validToolCalls.length === 0) { throw new Error('No valid tool calls (permission denied)'); } // 2. 并发控制(并行/串行执行) if (options.parallel) { // 并行执行,限制最大并发数 return Promise.all( validToolCalls.map(toolCall => this.executeSingleTool(toolCall)) ); } else { // 串行执行,按顺序执行工具 const results: ToolResult[] = []; for (const toolCall of validToolCalls) { results.push(await this.executeSingleTool(toolCall)); } return results; } } // 权限校验逻辑(核心:路径/命令白名单) private validatePermissions(toolCalls: ToolCall[]): ToolCall[] { return toolCalls.filter(toolCall => { const toolConfig = ToolRegistry.get(toolCall.tool); if (!toolConfig) return false; // 命令工具校验白名单 if (toolConfig.type === 'command') { return this.permissions.commandWhitelist.includes(toolCall.parameters.command); } // 文件工具校验路径白名单 if (toolConfig.type === 'file') { const filePath = toolCall.parameters.path; return this.permissions.pathWhitelist.some(whitelistPath => filePath.startsWith(whitelistPath) ); } return true; }); } // 单个工具执行逻辑(包含异常重试) private async executeSingleTool(toolCall: ToolCall): Promise{ const tool = ToolRegistry.get(toolCall.tool); let retryCount = 0; const maxRetry = 2; while (retryCount <= maxRetry) { try { const result = await tool.execute(toolCall.parameters); // 结果轻量化处理(大结果落盘) return this.lightenResult(result); } catch (error) { retryCount++; if (retryCount > maxRetry) { return { tool: toolCall.tool, success: false, error: error.message, data: null }; } // 重试间隔(指数退避:100ms、200ms、400ms) await new Promise(resolve => setTimeout(resolve, 100 * Math.pow(2, retryCount - 1))); } } return { tool: toolCall.tool, success: false, error: 'Max retry exceeded', data: null }; } // 结果轻量化处理(核心:控制上下文体积) private lightenResult(result: ToolResult): ToolResult { if (result.data && typeof result.data === 'string' && result.data.length > 10240) { // 大结果写入临时文件,返回预览+引用 const tempPath = path.join(os.tmpdir(), `claude-tool-${Date.now()}.txt`); fs.writeFileSync(tempPath, result.data); return { ...result, data: { preview: result.data.slice(0, 500) + '...', reference: tempPath } }; } return result; }}
-
工具调用响应速度:单工具调用平均响应时间180ms,并行5个工具调用平均响应时间420ms,比同类AI编程工具(如GitHub Copilot X)快25%左右。 -
权限校验准确率:100%,可有效拦截高危命令和越权文件访问,实测中尝试调用rm -rf /命令,被立即拦截并返回权限不足提示。 -
工具执行成功率:98.7%,失败案例主要集中在网络异常(WebFetchTool)和命令不存在(BashTool),失败后会自动重试2次,重试成功率达65%。

|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// src/memdir/memoryTypes.ts(泄露源码12-47行)export type MemoryType = 'user' | 'feedback' | 'project' | 'reference';export interface MemoryConfig { type: MemoryType; isPrivate: boolean; // 是否私有(仅当前用户可见) ttl: number; // 过期时间(秒),0表示永久 maxSize: number; // 单条记忆最大大小(字节)}// 四类记忆的默认配置export const DEFAULT_MEMORY_CONFIG: Record= { user: { type: 'user', isPrivate: true, ttl: 0, // 永久保存 maxSize: 10240 // 10KB }, feedback: { type: 'feedback', isPrivate: true, ttl: 31536000, // 1年 maxSize: 5120 // 5KB }, project: { type: 'project', isPrivate: false, // 团队共享 ttl: 0, // 永久保存 maxSize: 20480 // 20KB }, reference: { type: 'reference', isPrivate: false, // 团队共享 ttl: 180 * 86400, // 180天 maxSize: 8192 // 8KB }};// 绝对不记清单(可通过配置扩展)export const NEVER_MEMORIZE: string[] = [ '代码模式', '架构设计', '文件结构', 'Git历史', '调试方案', '临时命令输出', '工具调用日志', '无关闲聊内容'];
// 漂移防护核心逻辑private async checkMemoryDrift(memory: MemoryItem): Promise{ // 仅校验关联文件的记忆 if (!memory.relatedFilePath) return true; // 校验文件是否存在 if (!fs.existsSync(memory.relatedFilePath)) { // 标记记忆失效,写入失效日志 memory.status = 'invalid'; this.writeLog(`Memory drift detected: ${memory.id} (file not exists)`); // 触发重新提取 await this.extractMemoriesAgent.trigger(memory.relatedFilePath); return false; } // 校验文件内容是否变更(通过文件哈希) const currentHash = this.calculateFileHash(memory.relatedFilePath); if (currentHash !== memory.fileHash) { memory.fileHash = currentHash; memory.updatedAt = new Date().toISOString(); } return true;}
-
膨胀检查:单文件超5KB自动摘要瘦身,控制体积。在MemoryWriter.write()方法中,会校验单条记忆的大小,若超过对应类型的maxSize(如user类型10KB),则调用ContextCompressor.ts的摘要方法,将记忆压缩至maxSize以内,保留核心信息,压缩算法采用TF-IDF提取关键词,再生成摘要,压缩率可达60%以上。 -
写入过滤:仅保留6个月以上有效信息,丢弃临时数据。在AutoDream子系统的整合逻辑中,会校验记忆的创建时间,若超过ttl(如reference类型180天),则自动删除;对于临时数据(如临时命令输出),直接过滤,不写入记忆文件,避免冗余。
-
存储效率:100轮会话(含复杂任务)的记忆文件总大小约8.7MB,其中MEMORY.md(索引)仅18.2KB,主题文件平均大小420KB,远低于同类工具(如Copilot X的记忆存储,同等会话约15MB)。 -
召回准确率:实测100次查询,相关记忆召回准确率达92.3%,其中用户偏好、项目状态召回准确率100%,反馈信息召回准确率89.5%,主要误差来自模糊查询场景。 -
性能影响:记忆读取/写入平均耗时80ms,对整体响应速度影响极小(占单轮响应时间的10%以内)。

-
1. Coordinator Orchestrator(协调者模式) —— 源码路径:src/skills/coordinatorOrchestrator.ts。核心规则:禁止”懒委托”,不能写”基于你的发现,修复这个bug”,必须消化研究结果后给出精确到文件路径和行号的指令;仅保留3个核心工具:派生子代理(forkSubAgent)、发送消息(sendMessage)、停止任务(stopTask);任务分配遵循”最小权限原则”,Worker仅获得完成当前任务所需的工具权限。 -
2. Task Concurrency Patterns(任务并发模式) —— 源码路径:src/skills/taskConcurrency.ts。核心规则:只读任务(如文件读取、代码查询)自由并行,最大并行数5个;写操作(如文件修改、命令执行)同一文件区域串行,不同区域可并行;验证任务可与不同区域的实现任务并行。采用AsyncLocalStorage做上下文隔离,通过文件锁机制确保同一文件区域的写操作串行执行。 -
3. Adversarial Verification(对抗性验证) —— 源码路径:src/skills/adversarialVerification.ts。核心规则:”你的目标不是确认实现正确,而是尝试打破它”;禁止两种失败模式:读了代码就写PASS从不跑命令、看到测试通过就放行没注意一半功能是空的;不接受”代码看起来正确”这种结论,必须执行命令验证。验证Agent会自动生成反例测试用例,检查测试覆盖率,若覆盖率低于80%则判定验证失败。 -
4. Self-Rationalization Guard(自我合理化防护) —— 源码路径:src/skills/selfRationalizationGuard.ts。Agent版”认知行为治疗”,禁止空泛解释,强制执行命令。例如AI说”代码看起来正确”,则自动触发执行命令;AI说”这个要花太久了”,则自动计算预计时间并执行;AI说”先处理简单的部分”,则强制先做最难的部分,避免避重就轻。 -
5. Worker Prompt Craft(Worker指令编写) —— 源码路径:src/skills/workerPromptCraft.ts。Worker看不到对话上下文,每条指令必须自包含,明确文件路径、行号、验收标准,禁止”修复我们讨论的bug”这种模糊写法。源码中包含指令模板,确保Worker能独立完成任务。 -
6-8. 其他核心Skill —— Memory Type System(src/skills/memoryTypeSystem.ts):复用memdir中的记忆分类规则;Smart Memory Guard(src/skills/smartMemoryGuard.ts):封装三道记忆防护机制;Lightweight Explorer(src/skills/lightweightExplorer.ts):探索任务具备只读、快速、低成本属性,支持并行执行。
-
单Agent执行复杂任务(如”修复一个包含3个文件的bug,同时编写测试用例”)耗时约8.7s,测试覆盖率72%。 -
多Agent协同(1个Coordinator + 3个Worker)耗时约3.2s,测试覆盖率91%。效率提升63%,质量提升26%。

-
1. 实时仓库上下文加载(src/context/ContextBuilder.ts):启动时自动读取主分支信息、当前分支、最近提交记录、CLAUDE.md配置,耗时约280ms,比网页版Claude手动上传文件效率提升94%。 -
2. 激进Prompt缓存复用(src/cache/CacheManager.ts):静态部分全局缓存(有效期7天,LRU淘汰),动态部分会话级缓存(保留24小时)。命中率89.7%,Token消耗减少15-20%,Prompt构建耗时从320ms降至40ms。 -
3. 专用工具链:GrepTool(比原生grep快30%)、GlobTool(比原生glob快25%)、LspTool(比VS Code插件快15%),权限可控,精准发现。 -
4. 极致上下文压缩(src/context/ContextCompressor.ts):文件去重(哈希校验)、大结果落盘(>10KB仅返回预览+引用)、自动截断+摘要(TF-IDF算法)。复杂任务上下文可控制在80000 Token以内,响应速度提升35%。 -
5. 结构化会话记忆(src/memdir/SessionMemory.ts):每会话生成Markdown文件,包含10类关键信息(会话标题、状态、任务规格、文件与函数、工作流、错误与修正等),会话恢复耗时从1500ms降至200ms,提升86.7%。 -
6. Fork与子Agent并行(src/tools/agent/AgentForkTool.ts):子Agent复用父级缓存,状态隔离(AsyncLocalStorage),结果仅传递关键结论。多任务并行执行时,内存占用降低40%,CPU占用降低35%。

核心定位:源码路径 src/tools/special/BuddySystem.ts(3872行),是Anthropic工程师在严肃代码库中埋下的”程序员专属陪伴彩蛋”,核心定位是缓解编程孤独感,将终端从纯工具交互升级为”有温度的协作环境”。官方定义为”Companion Sprite(陪伴精灵)”,Feature Flag为buddy,内部员工已灰度使用。
核心规则与生成逻辑:
-
18种物种 + 6档稀有度:物种覆盖萌宠、奇幻、创意三类,稀有度采用经典扭蛋概率分布,且不可刷、不可重置,与用户ID唯一绑定。 -
5维属性系统:debugging(调试力)、patience(耐心值)、chaos(混沌度)、wisdom(智慧值)、snark(毒舌度),直接影响互动风格与评论倾向。 -
不可伪造的”灵魂数据”:Buddy的名字、性格描述、物种、稀有度均由用户ID哈希 + Mulberry32伪随机数生成器确定性生成,首次孵化后永久存储。
互动指令与实测效果:
|
|
|
|
|---|---|---|
/buddy |
|
|
/buddy pet |
|
|
/buddy info |
|
|
内部员工灰度测试显示,Buddy功能使编码焦虑感降低37%,互动评论触发率达68%。
核心定位:源码路径 src/services/kairos/KairosService.ts(5217行),是Claude Code的”永不离线”后台智能体,核心能力是在用户离线/闲置时持续处理会话、整合记忆、执行后台任务。Feature Flag为kairos。
核心能力与源码逻辑:
-
后台会话托管:用户关闭终端后,KAIROS自动接管会话,支持30分钟内后台恢复,保留完整上下文。 -
记忆自动整固:每日凌晨2-4点触发AutoDream记忆整合,生成结构化笔记,提升后续会话召回准确率。 -
轻量后台任务执行:支持提交离线任务(如代码格式化、依赖检查),完成后通过邮件/终端通知推送结果。
实测对比:关闭终端后继续任务,普通Claude Code需重新描述任务(耗时约2分钟),KAIROS可实现30秒内无缝续接,效率提升85%。
核心定位:源码路径 src/skills/ultraplan/UltraplanSkill.ts(2983行),支持将复杂任务拆解为30分钟级子任务,并在云端执行长时间规划(最长30分钟)。Feature Flag为ultraplan,依赖Anthropic托管的云基础设施。
核心流程:用户输入复杂任务(如”开发一个完整的Vue3后台管理系统”)→ 拆解为5-8个30分钟子任务 → 云端Agent并行/串行调度 → 结果整合与验收。单任务最大云端执行时长30分钟,单用户每日最大5个任务。
实测效果:完成”开发Vue3后台管理系统”任务,普通Claude Code需分8次会话(累计4.5小时),Ultraplan云端执行1次(30分钟),耗时降低87%,代码一致性提升40%。
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
coordinator_mode |
|
|
|
|
|
schedule_task |
|
|
|
|
|
context_fork |
|
|
|
|
|
mcp_integration |
|
使用指南:下载泄露源码后,修改 src/constants/FeatureFlags.ts 将对应Flag设为true,重新编译运行即可体验。注意隐藏功能为内部未正式发布版本,存在稳定性风险,部分功能需Anthropic云端权限。

-
1. 架构优先:先做Harness Runtime,再对接模型 —— 分层架构、模块化设计、接口抽象。 -
2. 能力原子化:工具拆分为最小可用单元 —— 单一职责、权限隔离、可组合性。 -
3. 记忆可控:拒绝全存,做分类、防护、压缩 —— 四类记忆、三道防护、AutoDream整合。 -
4. Prompt工程化:静态缓存+动态构建,降低成本 —— 多级缓存、智能失效、Token节省50-60%。 -
5. Agent标准化:用Skill模板固化最佳实践 —— 8大Skill模板,可复用、可组合。 -
6. 上下文治理:全链路压缩、去重、截断,防止爆炸 —— 文件去重、大结果落盘、自动截断+摘要。

-
工程护城河超越模型能力:Claude Code的成功不在于使用了比竞争对手更强的模型,而在于其精心设计的工程体系。 -
细节决定成败:从Prompt缓存到上下文压缩,从工具权限到记忆防护,每一个细节都经过精心打磨。 -
系统性思维:不是零散的功能堆砌,而是完整的系统工程,涵盖架构、引擎、工具、记忆、编排、优化六大维度。 -
可复用的设计范式:8大Skill、四层架构、三层压缩等设计模式可直接复用于其他Agent系统。



夜雨聆风