Claude Code 源码揭秘:为什么它比普通 LLM 工具强这么多?
Claude Code 源码揭秘:为什么它比普通 LLM 工具强这么多?
|
你有没有想过,为什么同样是调用 Claude API,Claude Code 的体验比那些”套壳工具”好那么多?有人说是 prompt 写得好,有人说是工具多,有人说是模型本身强。这些都对,但都没说到点子上。最近,有人把@anthropic-ai/claude-code的 npm 包拆了,从 cli.js.map 里还原出4756 个源码文件。这个数字本身就说明了一个问题:这不是一个 CLI 包装器,而是一个完整的软件系统。 |
本文将从源码结构出发,揭示 Claude Code 真正的技术护城河。
014756 个文件意味着什么?
先看一组数据:
|
这个规模意味着什么?作为对比,一个典型的”LLM + 工具调用”项目,核心代码可能只有几百行。
Claude Code 的源码顶层结构是这样的:
|
| 关键洞察
这不是”工具包装器”该有的结构。这是Agent Operating System的架构。 |
02平台化思维:一个 Runtime,多个入口
看入口层的设计,就能理解 Claude Code 的定位:
|
同一个 agent runtime,可以服务:
| ✅ 多入口架构
本地 CLI:用户直接在终端使用MCP 模式:作为 MCP server 被其他应用调用SDK 模式:嵌入到其他产品中 |
这是一种平台化思维。Claude Code 不是单一产品,而是一个可以被多种场景消费的运行时平台。
03命令系统:不只是快捷键,是生态入口
src/commands.ts 暴露出的命令列表,暴露了系统的野心:
| 命令 | 功能 |
|---|---|
| /mcp | MCP服务器管理 |
| /memory | 记忆系统管理 |
| /permissions | 权限配置 |
| /hooks | Hook管理 |
| /plugin | 插件管理 |
| /skills | 技能系统 |
| /tasks | 任务管理 |
| /plan | 规划模型 |
| /review | 代码审查 |
| /agents | Agent管理 |
| 生态入口
命令系统本身就是生态入口。用户通过命令与系统运行时交互,插件和技能通过命令注册自己。这比”工具列表”高明得多。 |
04Tools 层:从”回答器”到”执行体”
这是 Claude Code 最核心的设计之一。确认的工具包括:
| 工具 | 职责 |
|---|---|
| FileRead | 读文件 |
| FileEdit | 编辑文件 |
| FileWrite | 写文件 |
| Bash | 执行 shell 命令 |
| Glob | 文件搜索 |
| Grep | 内容搜索 |
| TodoWrite | 任务管理 |
| TaskCreate | 创建子任务 |
| AskUserQuestion | 与用户交互 |
| Skill | 执行技能 |
| Agent | 调度子 Agent |
| MCPTool | MCP 工具调用 |
| 核心设计
工具层的本质是什么?把模型从”回答器”变成”执行体”。每一个工具调用都被治理了——校验、权限、Hook、追踪、错误处理。 |
05为什么它比普通 LLM 工具强这么多?
回到开头的问题。Claude Code 真实的护城河是:
| 层级 | 内容 |
|---|---|
| Prompt architecture | 模块化动态拼装,缓存边界优化 |
| Tool runtime governance | 权限、Hook、校验、追踪一体化 |
| Permission model | 用户拒绝不能重试,风险动作需确认 |
| Hook policy layer | PreToolUse / PostToolUse 拦截点 |
| Agent specialization | Explore / Plan / Verification 分工 |
| Skill workflow packaging | prompt-native 工作流打包 |
| Plugin integration | prompt + metadata + runtime constraint |
| MCP instruction injection | 工具和行为说明同时注入 |
| Prompt cache optimization | 动静分离,token 预算管理 |
| Async/background lifecycle | 任务系统,异步 Agent |
| 护城河真相
少一个都行,但会显著掉”手感”。 |
06实战启示
| 1. 不要把 prompt 当文本写
把 prompt 当作可编排的运行时资源。静态部分做缓存优化,动态部分按需注入。这是基础设施级思维。 |
| 2. 工具调用需要治理
直接 tool.call() 是不够的。你需要校验、权限、Hook、追踪、错误处理。这是一条 pipeline,不是一次函数调用。 |
| 3. 命令系统是生态入口
不要只暴露工具列表。命令系统让能力主动可见,让插件和技能有注册入口。 |
| 4. 平台化思维决定上限
设计时考虑多入口:CLI、SDK、API、MCP。一个 runtime 服务多种场景,扩展性才能上去。 |
| 5. “好行为”要制度化
Claude Code 在 prompt 里明确写了:不要乱加功能、不要过度抽象、不要瞎重构。这不是靠模型”自觉”,而是写进规则里。 |
07结语
Claude Code 的强,不是来自某个”神秘 system prompt”,而是来自一个完整的软件工程系统。
| ✅ 核心结论
它是Agent Operating System,不是 LLM wrapper。这才是技术护城河的真正含义:不是一个 prompt、一个工具、一个模型,而是把 prompt、tool、permission、agent、skill、plugin、hook、MCP、cache 和产品体验统一起来的系统工程能力。 |
参考资料:Claude Code 源码深度研究报告(基于 npm 包 cli.js.map 还原)
夜雨聆风