
搞到凌晨了,我拆了Claude Code 4756个源码文件,发现AI编程的真相太残酷了
这不是prompt的比拼,是工程能力的碾压
最近AI圈最大的瓜,不是谁家模型又刷榜了,而是Anthropic的Claude Code源码泄露了。
一个source map配置错误,4756个源码文件被扒了个底朝天。我把这些代码过了一遍,发现一个残酷的事实:
我们以为的AI编程,和真正的生产级AI编程,根本是两个物种。
一、Prompt不是文案,是台"组装机器"很多人以为Claude Code的system prompt就是一大段固定文本,启动时塞进去完事。
错。
它的prompt是由一个叫getSystemPrompt()的函数动态拼装出来的。静态部分是"宪法",动态部分是"当期政策"——根据你这次用的工具、连了哪些MCP、用的什么语言、开没开brief模式实时调整。
更狠的是,源码里有个SYSTEM_PROMPT_DYNAMIC_BOUNDARY标记。边界之前的内容能被API缓存,边界之后的不能。
什么意思?Anthropic在写prompt的时候,已经在算计token成本了。缓存命中率提高10%,一个月省下来的钱可能够雇一个工程师。
你写prompt考虑的是"能不能跑通",人家考虑的是"能不能省钱"。
这就是差距。
二、6个Agent分工,把"既当裁判又当运动员"的毛病治了Claude Code里确认了至少6个内置Agent:
• General Purpose Agent:打杂的
• Explore Agent:只读模式,只能看不能碰
• Plan Agent:专门做架构规划,不动手
• Verification Agent:专门"找茬",try to break it
• Claude Code Guide Agent:教你怎么用产品
• Statusline Setup Agent:处理状态栏
最狠的是Verification Agent。
它的prompt写得像个严厉的QA:"不要只看代码不跑检查,不要被前80%迷惑,UI过了测试过了不代表没问题。"
强制要求:跑build、跑测试套件、跑linter、做对抗性探测、每个检查必须带实际执行的命令和输出。
最后必须给出VERDICT: PASS、FAIL或PARTIAL。没有"差不多"这个选项。
为什么要把探索和实现分开?因为探索阶段如果手贱改了什么东西,后面实现阶段就会崩。权限硬隔离,是一种很朴素但很有效的安全设计。
三、工具调用不是"你说调就调",是14步流水线你以为模型说"读文件"就直接读了?
实际是14步:
找tool定义→解析MCP元数据→Zod校验输入→工具自身validateInput→Bash风险预判→PreToolUse钩子→解析钩子权限→正式权限决策→可能修正输入→执行→记录analytics→PostToolUse钩子→结构化输出→失败处理钩子。
中间任何一个环节都能拦截、改写、拒绝。
Hook系统能返回message、blockingError、updatedInput、permissionBehavior...能直接放行或拒绝,能阻止后续流程。
但有个关键规则:Hook说allow不一定能绕过系统deny,但Hook说deny直接生效。
强大但受控。这就是工程成熟度。
四、上下文不是免费的,是预算Claude Code里有大量设计围绕一个主题:上下文是稀缺资源。
• System prompt分静态/动态区,为了缓存
• Fork子Agent时保持字节级一致前缀,为了复用主线程缓存
• Skill按需注入,不是一次性塞进去
• MCP instructions按连接状态注入,没连上的不占空间
• 有function result clearing、summarize tool results、compact机制...
做Demo的人不在乎这些,做产品的人必须在乎。
你每天处理几万次请求,每次system prompt几千token,缓存命中率差10%,一个月烧掉的钱能让你肉疼。
五、生态的关键:让模型"知道"自己有什么Claude Code有三套扩展机制:Skill、Plugin、MCP。
但最绝的不是"能扩展",而是扩展完之后,模型知道自己扩展了什么。
Skill列表、Agent列表、MCP instructions、session-specific guidance...全都铺到模型看得见的地方。
很多平台也有插件市场,但模型不知道箱子里有什么工具,也不知道什么时候该打开。Claude Code把工具箱的清单和使用说明都放到模型眼前。
这才是生态能发挥作用的前提。
六、给子Agent写prompt,不能"偷懒"源码里专门有一节教模型怎么给子Agent写prompt:
"像给新同事做briefing一样写。说明目标、原因、已排除的选项。不要把理解任务的工作外包给子Agent。不要写'基于你的发现再去修bug'这种偷懒prompt。要给具体的file path、行号、改动要求。"
这是在限制"懒委托"。
主Agent把模糊任务丢给子Agent,子Agent理解偏了,做出来的东西不对,主Agent还看不出来问题在哪——这种失败模式在多Agent系统里太常见了。
Claude Code通过prompt强制主Agent承担synthesis责任。看起来增加了负担,实际上大幅减少了返工。
七、产品化最后一公里:生命周期管理runAgent()里有这些不起眼的代码:
• recordSidechainTranscript():记录旁路对话
• writeAgentMetadata():写入元数据
• registerPerfettoAgent():性能追踪
• cleanupAgentTracking():清理追踪
• killShellTasksForAgent():清理shell任务
后台Agent有独立abort controller,支持持续运行、完成后通知主线程、自动summarization。前台Agent能转后台,有progress tracking。
这些功能单独看不惊艳,但加在一起说明:Anthropic不是只管"让Agent跑起来",而是把transcript记录、性能追踪、资源清理、会话恢复、前后台切换全都当成了正式组成部分。
大部分Agent系统第一天跑得挺好,问题出在第100天。任务中断怎么续?脏状态怎么清?子Agent的shell进程没杀掉怎么办?MCP连接泄漏了怎么办?
Claude Code对这些问题都有明确处理路径。这就是为什么它用起来像正式产品,而不是聪明的prototype。
八、泄露源码还藏着什么?社区最新分析发现,泄露文件里还埋着Beta功能的flag:
• context-1m-2025-08-07:100万token上下文窗口
• web-search-2025-03-05:网页搜索
• afk-mode-2026-01-31:AFK模式
• advisor-tool-2026-03-01:Advisor工具
还有个叫AutoDream的记忆巩固系统:24小时或5会话触发一次,四阶段(Orient→Gather→Consolidate→Prune),只读Bash,纯整理记忆不碰项目。
这些功能还没上线,但代码已经写好了。
总结:五条设计原则拆完这4756个文件,Claude Code的设计可以总结为:
1. 别信模型的自觉性——好行为写成制度,不靠临场发挥
2. 把角色拆开——实现者和验证者必须分离
3. 工具调用要治理——输入校验、权限检查、风险预判、后置处理
4. 上下文是预算——每个token都有成本
5. 生态的关键是感知——让模型知道自己能做什么
这些原则不只适用于coding agent,适用于所有需要LLM做复杂任务的系统。
最后说一句:拿到Claude Code的prompt和工具列表,照着抄一遍,出来的东西和真品差距会非常大。
差在哪?差在冰山下面那套工程系统。
prompt是皮肤,工具是骨架,但让系统"稳"起来的,是prompt背后的编排机制、工具背后的治理流水线、Agent背后的调度系统、上下文的经济学管理。
这才是AI编程的残酷真相:不是模型不够聪明,是你的工程系统没到位。
你怎么看Claude Code的这套设计?欢迎在评论区讨论。
【推荐阅读】
• 为什么你的AI编程助手总在"瞎重构"?
• 从Claude Code泄露看AI Agent的安全设计
• 多Agent架构:分工还是全能?
本文基于公开技术分析资料整理,不构成任何投资建议。