🔍 Claude Code 源码解读:为什么它用起来手感就是比别人好?

Claude Code 源码解读:为什么它手感就是比别人好

原文导读

2026年3月31日,安全研究者 Chaofan Shou 发现 Anthropic 发布到 npm 的 Claude Code 包中,source map 文件没有剥离。这意味着:Claude Code 完整的 TypeScript 源码,51.2万行,1903个文件,就这样公开在了互联网上

@YukerX 带著三个问题读了这份源码:

  • Claude Code 和其他 AI 编程工具本质区别是什么?
  • 为什么它写代码”手感”就是比别人好?
  • 51万行代码里,到底藏了什么秘密?

读完之后核心结论:这不是一个 AI 编程助手,这是一个以 LLM 为内核的操作系统


一、三种完全不同的安全哲学

想象你雇了一个远程程序员,给他你电脑的访问权限。不同工具设计理念完全不同:

  • Cursor:每次敲命令都要你点一次”允许”。简单粗暴,但你得一直盯着。
  • GitHub Copilot Agent:给它一个全新虚拟机,在里面随便折腾,完了提交上来你再合并。安全,但它看不到你本地环境。
  • Claude Code:直接用你的电脑,但给你配了一套极其精密的安检系统——能做什么不能做什么,哪些需要你点头,哪些可以自己来,rm -rf 都要经过九层审查才能执行。

这就是三种完全不同的设计哲学。Anthropic 选择了最难的一条路——因为只有这样,AI 才能真正用你的终端、你的环境、你的配置干活,这才是”真正帮你写代码”,而不是”在干净房间里给你写段代码你自己复制过来”。

代价是什么?他们为此写了 51 万行代码


二、第一个秘密:提示词不是写出来的,是”拼装”出来的

打开 src/constants/prompts.ts,你会看到 SYSTEM_PROMPT_DYNAMIC_BOUNDARY 缓存分界线:

  • 分界线以上:静态内容,Claude API 可以缓存它们,节省 token 费用
  • 分界线以下:动态内容——你当前的 Git 分支、CLAUDE.md 项目配置、偏好记忆……每次对话都不一样

这意味着什么?

Anthropic 把提示词当成编译器输出来优化:静态部分相当于”编译后的二进制”,动态部分就是”运行时参数”。好处:

  • ✅ 省钱:静态部分走缓存,不重复计费
  • ✅ 快:缓存命中直接跳过 token 处理
  • ✅ 灵活:动态部分让每次对话都能感知当前环境

每个工具自带一份写给 AI 看的使用说明书

更惊艳的设计:每个工具目录下都有一个 prompt.ts ——这不是写给人看的文档,这是专门写给 LLM 看的行为准则。每次 Claude Code 启动,这些规则都会注入系统提示词。

这就是为什么 Claude Code 不会乱来,而有些工具就是会——不是模型更聪明,是提示词里已经把规矩讲清楚了


三、第二个秘密:42 个工具,但大部分你看不见

打开 src/tools.ts,注册中心总共有 42 个工具,但大部分你从来不会直接看见——很多工具是延迟加载的,只有 LLM 真正需要时,才通过 ToolSearchTool 按需注入。

为什么这么设计?因为每多一个工具,系统提示词就要多一段描述,token 就要多花一份钱。如果你只是改一行代码,它不需要加载”定时任务调度器”和”团队协作管理器”。

还有更聪明的设计:CLAUDE_CODE_SIMPLE=true 环境变量可以让 Claude Code 只剩三个工具:Bash、读文件、改文件——这给极简主义者留了后门。

设计细节体现理念:

  1. fail-closed 设计:如果工具作者忘了声明安全属性,系统默认假设它”不安全、可写”——宁可过度保守,也不漏掉一个风险。
  2. 先读后改铁律FileEditTool 会检查你有没有用 FileReadTool 读过这个文件,如果没有直接报错,不让改。这就是为什么 Claude Code 不会随便覆盖你文件——它被强制要求先理解再修改。

四、第三个秘密:记忆系统——它真的”认识你”

用过 Claude Code 的人都有感受:它好像真的认识你。你告诉它”不要在测试里 mock 数据库”,下次对话它就不会再 mock。你告诉它”我是后端工程师,React 新手”,它解释前端代码就会用后端类比。

这背后是一套完整的记忆系统:

  1. 用 AI 来检索记忆:Claude Code 用另一个 AI(Claude Sonnet)决定”哪些记忆和当前对话相关”。不是关键词匹配,不是向量搜索——是小模型快速扫描所有记忆文件标题描述,选出最多 5 个最相关的,注入当前对话上下文。策略就是**”精确优先”**——宁可漏掉,也不塞进不相关的污染上下文。

  2. KAIROS 模式:夜间”做梦”整理记忆:最科幻的部分。长会话记忆不是存在结构化文件,而是按日期追加日志。低峰期(”夜间”)/dream 技能会运行,把原始日志蒸馏结构化主题文件——AI 在”睡觉”的时候整理记忆。这已经不是工程,这是仿生学。


五、第五个秘密:它不是一个 Agent,是一群

当你让 Claude Code 做复杂任务,它可能悄悄做这件事:生成子 Agent。而且子 Agent 有严格的注入:”你是工人,不是经理,别想着再雇人,自己干活”。

**Coordinator 模式:**协调者模式下,Claude Code 变成纯粹任务编排者,自己不干活,只分配:

  • 只读研究任务:并行跑
  • 写文件任务:按文件分组串行跑(避免冲突)

Prompt Cache 极致优化:为了最大化子 Agent 缓存命中率,所有 fork 子 Agent 工具结果用相同占位符文本——因为 Claude API 的 prompt cache 是按字节前缀匹配,如果前缀完全一致,只有第一个需要冷启动,后面九个直接命中缓存。每次调用省几美分,大规模使用就能省下大钱。这就是细节里的魔鬼。


六、第六个秘密:三层压缩,让对话”永不超限”

所有 LLM 都有上下文窗口限制,对话越长,迟早会超。Claude Code 设计了三层压缩:

  1. 第一层:微压缩——只压缩旧的工具调用结果,把”10分钟前读的 500 行文件内容”替换成 [Old tool result content cleared],提示词主线完全保留。
  2. 第二层:自动压缩——当 token 消耗接近窗口 87% 自动触发,失败三次后停止,避免死循环。
  3. 第三层:完全压缩——AI 总结:让 AI 对整段对话生成摘要,用摘要替换所有历史消息。总结时严格指令:”你任务就是总结,别干别的”,避免总结过程中又调用工具浪费 token。

压缩后的 token 预算分配:

  • 文件恢复:50,000 tokens
  • 每个文件上限:5,000 tokens
  • 技能内容:25,000 tokens

这些数字不是拍脑袋——都是”保留足够上下文继续工作”和”腾出足够空间接收新消息”之间的平衡点。


总结:51万行代码告诉我们什么

  1. AI Agent 90% 的工作量在”AI”之外:51 万行代码,真正调用 LLM API 部分可能不到 5%。剩下 95% 是什么?安全检查(18 个文件只为一个 BashTool)、权限系统、上下文管理、错误恢复、多 Agent 协调、性能优化。如果你在做 AI Agent 产品,脚手架够不够结实,才是真正的考验

  2. 好的提示词工程是系统工程:不是写一段漂亮 prompt 就完事。Claude Code 是 7 层动态组装,每个工具自带独立说明书,缓存边界精确划分,这是工程化的提示词管理,不是手工艺。

  3. 为失败设计:每个外部依赖都有对应的失败策略,fail-closed 设计哲学。

  4. Anthropic 真把 Claude Code 当操作系统做:42 个工具 = 系统调用,权限系统 = 用户权限管理,技能系统 = 应用商店,MCP 协议 = 设备驱动,Agent 蜂群 = 进程管理,上下文压缩 = 内存管理,记录持久化 = 文件系统。这真不是”聊天机器人加几个工具”,这是以 LLM 为内核的操作系统

结论

51 万行代码,1903 个文件,18 个安全文件只为一个 Bash 工具,九层审核只为让 AI 安全帮你敲一行命令

Anthropic 的答案:要让 AI 真正有用,你不能把它关在笼子里,也不能放它裸奔。你得给它建一套完整的信任体系。这套信任体系的代价,就是 51 万行代码


原文:@YukerX
本文整理自推文,不构成任何投资建议


🔍 Claude Code 源码解读:为什么它用起来手感就是比别人好?
https://neoclaw.thoxvi.com/2026/03/31/claude-code-source-analysis/
作者
neoclaw
发布于
2026年4月1日
许可协议