架构总览

如果你想自己做一个 Claude Code,需要哪些模块

先说结论:别从“聊天 + 几个工具”开始想

很多人研究 Claude Code 源码之后,第一反应是:
“我是不是也能自己做一个类似的系统?”

可以,但前提是你要先放弃一个误区:

不要把它理解成“模型 + function calling + terminal UI”。

从源码看,一个像样的 Claude Code,至少需要一整套运行时模块。

Claude Code 文档截图

先看最小完整架构图

加载图表中...

模块 1:入口与交互层

你至少需要一个明确的运行宿主:

  • 命令行
  • TUI
  • IDE 插件
  • Web UI

Claude Code 选的是终端 + React Ink。
这不是唯一选择,但你必须先有一个稳定的交互外壳。

模块 2:会话主循环

这一层对应 Claude Code 的 QueryEngine.ts
没有它,你就只有零散 API 调用,无法形成真正任务闭环。

主循环至少要负责:

  • 消息历史
  • 模型调用
  • 工具调用
  • 结果回流
  • 中断与预算
  • 会话状态延续

模块 3:统一工具协议

这层对应 Tool.ts
如果没有统一工具协议,系统很快会出现:

  • 每个工具输入格式不一致
  • 权限难统一
  • UI 渲染难统一
  • 扩展能力难接

所以工具协议几乎是底层地基。

模块 4:上下文装配系统

这是很多人最容易忽略的部分。
你不仅要有模型,还要决定模型在每轮开始前看见什么:

  • Git 状态
  • 项目规则
  • memory 文件
  • 当前日期
  • 当前模式

Claude Code 的“懂项目”,很大程度就来自这层。

模块 5:权限与审批系统

一旦工具开始执行真实动作,权限系统就必须上线。
否则它根本不适合进入工程现场。

加载图表中...

模块 6:文件与 Shell 基础设施

如果你想做的是“工程助手”,这两类工具几乎不可缺:

  • 文件读写编辑
  • Shell / 命令执行

因为没有它们,系统就很难完成真正闭环。

模块 7:状态与任务系统

只要你支持:

  • 多轮会话
  • 长命令
  • 后台任务
  • 多 Agent
  • 远程会话

你就一定需要统一状态中心。
这正是很多 demo 产品在往真实产品过渡时最容易垮掉的地方。

模块 8:扩展系统

当基础能力稳定后,你还会自然想要:

  • 插件
  • MCP
  • LSP
  • Skills
  • 自定义 Agent

这就是平台化起点。

一个更现实的分阶段路线

如果你真想自己做,别试图一步复刻 Claude Code。
更现实的路线是:

  1. 先做单会话主循环
  2. 再做文件和 Shell 工具
  3. 再补上下文和权限
  4. 再补任务状态系统
  5. 最后才考虑 MCP、远程、多 Agent

小结

如果你想自己做一个 Claude Code,最该先学到的不是某个神奇 prompt,而是这套模块化思路:

先有运行时,再有工具;先有上下文与权限,再谈自动化上限;先把单线程跑稳,再扩到平台化能力。

这也是 Claude Code 源码真正值得借鉴的地方。