昨天,Anthropic在发布Claude Code v2.1.88时整了个大活——调试文件 cli.js.map 被不小心打包进了npm包。X上有人迅速通过这个source map文件逆向出了完整的源码,五十多万行代码就这样被公之于众。
问题出在source map文件(.map)上。当你发布一个TypeScript包时,构建工具会生成这个文件,它的作用是在崩溃时让堆栈追踪指向原始的源代码行,而不是指向压缩后代码的第多少行。
但source map包含原始源代码。实际的、完整的源代码,会以字符串形式嵌入JSON文件的 sourcesContent 数组中。这个数组包含了每个文件、每个注释、每个内部常量,甚至每一个系统提示词。
{
"version": 3,
"sources": ["../src/main.tsx", "../src/tools/BashTool.ts", "..."],
"sourcesContent": ["// 完整的原始源代码", "..."],
"mappings": "AAAA,SAAS,OAAO..."
}
最讽刺的是,Anthropic为了防止内部信息泄露,还专门设计了一个名为 “Undercover Mode” 的完整子系统。然而代码还是因为一个 .npmignore 的疏忽而泄漏了出去。这再次证明,再精密的智能系统,有时也敌不过一个基础的工程配置问题。
下面,我们就来深入剖析这份泄漏的源码,看看Claude Code背后有哪些值得借鉴的工程化设计。
系统架构与核心模块全景

从架构图可以看出,Claude Code是一个模块化程度极高的系统。主入口 main.tsx 文件高达785KB,负责启动逻辑和命令注释。其核心是一个清晰的数据流:用户输入经过 commands/ 目录下的103个CLI命令解析,再通过 tools/ 目录下的40多个执行工具集,最终调用Claude API并输出结果。
此外,系统还包含了services/后台服务集合、hooks/React自定义Hooks、utils/通用工具函数库,以及独立的权限控制模块permissions/和本地记忆层memori/。一些有趣的特性模块也被曝光,如BUDDY终端宠物系统、Dream记忆整合、Penguin Mode快速模式等。对这类复杂人工智能系统的架构设计感兴趣的朋友,可以在社区找到更多讨论。
核心设计特点剖析
1. Harness Engineering:60%模型 + 40%工程
Anthropic在自身的系统提示词中明确写道:“Claude Code的成功不仅仅取决于模型质量。大约60%的用户体验来自模型本身,40%来自你构建的harness。”
- 模型能力(60%):理解用户意图、生成代码和操作、进行推理和规划。
- 工程管理(40%):系统提示词架构、工具权限系统、记忆管理、安全审查、上下文优化、错误恢复。
这个比例揭示了一个关键事实:再优秀的模型,也需要精心设计的工程系统来约束和引导,才能实现稳定、可靠的智能涌现。AI模型如同一匹能力强大但不可控的野马,而Harness(套具)就是那套缰绳和马鞍,将其能力引导至可控的轨道。
具体来说,Claude Code的工程管理包括:
- 模型可用工具的管理与调用
- 多层安全机制
- 记忆系统
- 上下文管理
所有这些设计,都是将AI从“不可控”状态转变为可稳定交付的工程系统的关键。Claude Code的源码堪称Harness Engineering的实战教科书。
2. 系统提示词的动态拼接与缓存机制
Claude Code的提示词系统设计精巧。系统提示词并非一个巨大的静态字符串,而是在运行时由模块化、可缓存的章节动态组合而成的 string[] 数组。

- 静态部分:全球用户共享同一份缓存。内容包括角色定义(“你是Claude Code”)、核心安全守则(“不要随意删文件”)、工具使用指南(“优先用专用工具别老用Bash”)等。这些规则具体而非空洞,每一条都源于实际的踩坑经验。
- 动态部分:根据具体项目、用户配置(如
.claude.md)、接入的MCP工具、Git仓库状态等实时加载。这部分使得模型的回答能高度贴合特定场景。
缓存机制在两个层面运作:
- API层面:静态章节使用
cacheScope: ‘global’ 实现跨组织缓存,极大节省Token成本。
- 应用层面:章节计算结果被缓存,直到执行
/clear 或 /compact 命令才失效。
这种“动态边界”(Dynamic Boundary)设计,同时解决了成本优化(静态共享)和个性化定制(动态加载)两大难题。
3. Auto模式背后的四层安全审查
Claude Code设计了7种权限模式,其核心是 auto 模式,即依靠机器学习分类器自动审批操作。

权限模式的切换遵循 Shift+Tab 循环顺序:default → plan → acceptEdits → auto* → default。其中 bypassPermissions(绕过所有检查)是危险模式,不在循环内,需显式通过CLI参数或环境变量开启。
真正的安全核心是图中左侧所示的四层审查管线,依次执行,任何一层均可提前终止请求:
- 第一层:规则强制拒绝 (
alwaysDenyRules):最高优先级。检查全局或组织级黑名单规则(如禁止所有Bash操作),命中即直接拒绝,流程终止。
- 第二层:规则强制询问 (
alwaysAskRules):无论当前模式如何,命中即强制弹出用户确认。关键设计在于,对于.gitconfig、.bashrc、.claude.json等敏感文件的操作,其安全检查 (decisionReason.type === ‘safetyCheck’) 是 bypassPermissions 也无法跳过的,必须询问用户。
- 第三层:Tool自检权限 (
checkPermissions()):每个工具(如FileEditTool、BashTool)根据路径、命令风险等级进行独立判断,返回 allow、ask 或 deny。
- 第四层:模式路由决策 (
PermissionMode):前三层全部通过后,才由当前模式决定最终行为:
dontAsk → 全部拒绝(外部称为“yolo”模式)
auto → 交给YOLO分类器自动裁决
bypass → 跳过剩余检查,直接允许(但前两层已拦截真正危险操作)
default → 弹出用户确认弹窗
这个设计的精妙之处在于:bypassPermissions 看似全能,实则只跳过了第四层的“询问”动作。前两层针对绝对危险和敏感操作的硬性规则早已生效,确保了基本安全底线。
4. YOLO分类器:两阶段ML自动审核
auto 模式的核心是第四层中的YOLO(You Only Live Once)分类器。它并非如其名般“鲁莽”,而是一个独立的、专门用于安全审查的AI子代理。

其工作流程如下:
- 构建对话记录(Transcript):从当前会话历史中提取关键上下文。
- 构建系统提示:基于基础安全规则、用户自定义白名单/黑名单、环境语境生成专属审查提示词。
- 两阶段XML分类器 (
classifyYoloXML()):
- S1快速决策(Fast Stage):使用少量Token快速预测。若明确安全(Allow)或危险(Block),则直接返回;若处于模糊地带,则升级到S2。
- S2链式推理(Thinking Stage):使用最多6000个Token进行深度思维链(CoT)推理,分析潜在风险,做出最终判断。
- 返回结果:格式为
{ shouldBlock: boolean, reason: string, thinking: string }。
这种设计将性能与安全性做了权衡:大多数简单操作在S1阶段就被快速裁决,只有边界案例才会触发成本较高的深度推理。此外,系统还设计了“拒绝追踪”机制,防止AI陷入无限拒绝循环。
5. 记忆与上下文管理
5.1 设计理念:只记偏好,不记代码
Claude Code的记忆系统遵循一个巧妙原则:只记忆人的判断与偏好,不记忆具体的代码内容。因为代码是变化的,记忆代码行号会导致信息过时。所有代码内容都从源文件中实时读取。
记忆以文件形式存储在工作区的 .claude/projects/<project-slug>/memory/ 目录下:
├── MEMORY.md # 索引文件(<200行,~25KB,每条目<150字符)
├── preferences.md # 用户偏好(TS风格、书写习惯等)
├── project-structure.md # 项目结构说明
├── testing.md # 测试规范
└── debugging.md # 调试技巧
MEMORY.md 是纯索引,格式固定为 - [Title](file.md) — 一行摘要。
5.2 双引擎记忆提取机制

记忆系统由两个独立引擎驱动:
- 引擎一:实时提取 (
extractMemories):每轮对话结束时触发。它启动一个forked agent,从当前会话中提取四类持久记忆(用户偏好、行为反馈、项目信息、外部引用)并写入记忆文件。
- 引擎二:梦境整合 (
autoDream):后台周期性触发(满足“时间门≥24h”、“会话门≥5个”、“锁门无并发”三条件)。它负责整合历史会话记忆,清理冗余,维护记忆索引的简洁。
两个引擎运行在严格的权限沙箱内:允许无限制的 FileRead/Grep/Glob,Bash 仅限 ls、cat、grep 等只读命令,FileEdit/FileWrite 仅允许在记忆目录内操作。
5.3 搜索策略:不用RAG,只用Grep
与许多AI工具不同,Claude Code没有使用向量数据库或RAG进行代码检索。它的搜索主力是 Grep。
逻辑很清晰:上下文窗口足够大(1M token),可以装入整个代码库;Grep正则匹配精确、快速;更重要的是,随着模型能力增强,将“如何搜索”的决策权交给AI本身,比构建复杂的检索系统更简单有效。
6. 彩蛋:源码中暴露的未发布功能
泄漏的源码中包含许多被Feature Flag关闭的隐藏功能,揭示了Anthropic未来的发展方向:
- KAIROS - 永远在线的Claude:一个持久运行的助手,无需等待用户输入,可主动观察日志、监控系统并采取行动(如发现错误后自动修复)。
- ULTRAPLAN - 30分钟远程规划:将超复杂规划任务卸载到远程CCR会话,使用Opus 4.6模型进行长达30分钟的深度思考。
- Penguin Mode - 快速模式:通过特定的API Beta Headers(如
fast-mode-2026-02-01)启用极速响应模式。
- Coordinator Mode - 多智能体编排:支持并行管理多个工作智能体(Worker),协调完成研究、合成、实现、验证的完整工作流,其核心原则是 “并行即是超能力”。
尾声:一鲸落,万物生
这次源码泄漏事件,在AI Agent竞争白热化的当下,让局势变得格外有趣。它相当于将v2.1.88版本的全部设计图纸公之于众。起跑线,在这一刻被重置了。
AI编程能力已然是“内燃机”级别的革新,手工逐行Review AI生成的代码变得不切实际。未来的价值将越来越体现在那套经过无数坑沉淀下来的 Harness工程系统——包括精雕细琢的提示词、严密的安全规则和高效的工程化共识。这正是业界真正的Know-how财富。
Claude Code本拥有强大的增长飞轮,但这次泄漏意味着,任何团队现在都可以“站在巨人的肩膀上”,利用AI Agent自身的能力去快速理解、复现乃至迭代超越这套架构。可以预见,后续出现的各类Agent,其工程化水平很可能会因这次事件而整体提升一个台阶。对于开发者而言,这无疑是一次绝佳的开源实战学习机会。如果照着现成的蓝图都做不好,那真的说不过去了。