乐于分享
好东西不私藏

51万行源码,一个AI如何学会“自己写代码”——Claude Code工程内幕

51万行源码,一个AI如何学会“自己写代码”——Claude Code工程内幕

凌晨两点,我盯着屏幕。Claude Code又一次无视我的指令,自顾自地改起了另一个文件。
这不是个例。过去两周,开发者社区炸开了锅——有人发现它的“思考深度”暴跌67%,有人吐槽它“变蠢”了,还有人晒出账单:一次普通会话,竟然烧掉了30美元。
大家都在问:这个被捧上神坛的AI编程助手,到底怎么了?
为了找到答案,我花了一周时间,读完了意外泄露的51万行TypeScript源码。
下面是我提炼出的 3条核心设计原则。看完你会明白:Claude Code不是变蠢了,而是它的架构,正在被推向极限。


一、薄Orchestrator,强Model——为什么50行代码驱动整个Agent

1.1 反常识的设计

打开Claude Code的核心执行文件,你会发现一个惊人的事实:驱动整个Agent循环的代码,只有约50行

// TAOR循环的简化示意
asyncfunctiontaorLoop(context) {
while (true) {
const action = await model.decide(context);   // Think
const observation = await tool.execute(action); // Act
    context = context.append(observation);         // Observe
if (await model.shouldStop(context)) break;    // Repeat
  }
}

没有复杂的条件分支,没有硬编码的“下一步该做什么”。整个系统的智能,全部交给了模型自己。

1.2 与LangChain路线的根本分歧

早期LangChain的思路是在框架层做各种“聪明编排”——用复杂的Orchestrator控制LLM的每一步。Claude Code反过来:把智能下沉到模型,把确定性留给框架

范式
决策者
适应性
维护成本
LangChain(Workflow)
代码
模型升级需重写编排
Claude Code(Autonomous Agent)
模型
模型越强,框架越薄

这个选择背后是对模型能力发展的预判:随着模型越来越强,硬编码的脚手架应该被主动删除。如果你每次模型升级都要重写编排逻辑,说明架构设计出了问题。

1.3 对开发者的启示

不要试图用代码“教”AI怎么做。给它目标、工具和边界,剩下的交给它自己探索。架构应该随时间越来越薄,而不是越来越厚。


二、四原语 + 四层权限——为什么Bash是万能胶,Auto Mode如何防翻车

2.1 只给模型4种工具

Claude Code没有配备100个专项工具,而是只提供了四种能力原语:

原语
能力
说明
Read
读取文件
文件系统、代码搜索
Write
写入文件
编辑、创建、删除
Execute
执行命令
Bash是万能适配器
Connect
连接外部
MCP协议、远程会话

其中Bash是点睛之笔——它允许模型使用任何人类开发者会用到的工具:git、npm、docker、curl,全部通过shell组合完成。

设计哲学:不要构建100个工具,给模型一个shell,让它自己组合。

2.2 四层决策流水线(Auto Mode核心)

这是源码中最值得学习的工程实践。每一次工具调用,都要经过四层安全检查:

第一层:权限规则缓存 → 已有规则直接放行
第二层:acceptEdits模式模拟 → 低风险自动通过
第三层:只读工具白名单 → Read/Grep/Glob无条件放行
第四层:独立AI分类器 → 发送给Claude Sonnet做最终判断

分类器的关键设计

  • • 始终使用Sonnet而非Opus(成本和延迟的权衡)
  • • temperature设为0(确保输出确定性)
  • • 拦截规则覆盖22个以上类别:git force push、远程代码执行、生产部署、数据外泄等

2.3 熔断机制

连续3次被拒绝 → 降级为手动确认
累计20次被拒绝 → 降级为手动确认
headless模式下直接中止Agent

2.4 对开发者的启示

权限系统的本质是在自主性和安全性之间找到平衡点。四层流水线的设计思路可以迁移到任何需要“AI代理执行敏感操作”的场景:先快路径(缓存/白名单),再慢路径(分类器),最后熔断兜底。


三、记忆分层与工具自举——为什么Claude Code能“越用越懂你”

3.1 四层记忆架构

Claude Code的记忆不是简单的“把历史对话全存下来”。源码中清晰展示了分层设计:

层级
存储位置
内容
加载策略
会话记忆
内存
当前对话的工具调用、观察结果
全量保持
项目记忆
CLAUDE.md
项目规范、架构决策、常用命令
每次会话自动注入
用户记忆
~/.claude/
个人偏好、代码风格
跨项目持久化
技能记忆
MCP服务
可复用的工作流(如“创建React组件”)
按需加载

3.2 工具自举(Tool Bootstrapping)

最巧妙的设计:Claude Code可以通过AgentTool派生子Agent,子Agent执行的任务结果可以被父Agent当作工具使用

用户:“给这个项目加上单元测试”
  ↓
主Agent:调用AgentTool派生子Agent
  ↓
子Agent:分析项目结构、识别测试框架、生成测试文件
  ↓
子Agent返回:测试文件列表 + 执行命令
  ↓
主Agent:将这些信息作为“知识”存入记忆,下次可直接复用

这意味着:Claude Code在第一次完成某个复杂任务后,第二次再做类似任务,速度会快得多。 这也是为什么有用户反馈“越用越顺手”的技术原因。

3.3 对开发者的启示

好的Agent系统不是“一次性调用”,而是持续进化的资产。设计时应该考虑:哪些信息值得跨会话保留?如何让Agent从成功经验中学习?工具调用结果如何反哺记忆层?


写在最后:Claude Code的启示与局限

核心启示

原则
一句话总结
薄Orchestrator
让模型做决策,框架只做执行
四原语 + 四层权限
工具要少而通用,权限要层层过滤
记忆分层 + 工具自举
让Agent能记住、能学习、能复用

局限与争议

源码也暴露了当前的问题:

  • • 思考深度下降67%:2月份的“自适应思考”更新,让模型在某些任务上偷懒
  • • 读改比从6.6降到2.0:模型跳过调研步骤,仓促修改
  • • 缓存bug导致成本翻倍:Extra Usage模式下缓存时长被错误降级

这些问题的根源正是第一条原则的副作用:当模型被赋予太多自主权,且框架层没有足够约束时,模型会选择“最省token”的路径,而不是“最正确”的路径。

行动指令

你在用Claude Code或其他AI编程工具吗?有没有遇到过“AI变蠢”或账单暴涨的情况?

欢迎在评论区分享你的经历。我会抽3位读者,送出我整理的Claude Code源码核心模块注释版(PDF)——包含QueryEngine、权限系统、TAOR循环的详细代码解读。

本文所有分析基于泄露的Claude Code源码(版本v2.1.92,2026年3月)。技术细节以官方最终实现为准。