我看了 Claude Code 的源码,用大白话给你讲清它的运行机制
我之前说过,Claude 像是一个充满能量的理工男,给你最直接的答案。而 Claude Code 就是这个理工男最纯粹的形态——没有花里胡哨的界面,纯命令行,返璞归真。
趁着 claude code 源码被迫开源的机会,我用AI把它的源码看了一遍,光源码文件就有上千个,最大的单个文件接近 900KB。它是一个完整的操作系统级别的工程。
今天我用最通俗的方式,给你讲讲它到底是怎么运转的。
把 Claude Code 想象成一支装修队
你买了套毛坯房,找了一家装修公司。
你就是业主,“帮我把客厅改成日式原木风”就是你在终端里输入的那句话。
项目经理叫 QueryEngine。你不需要告诉他”先拆墙,再走水电,然后贴砖”——你只管说想要什么效果,他去找 AI 出一份施工方案。
但 AI 返回的不是一间装好的房子,而是一张施工任务单:”先让水电工把线路改到这里”、”让木工打一组柜子”、”让油漆工刷这个色号”。
每一条任务,交给工地上的一个工种——也就是一个 Tool(工具)。Claude Code 有 40 多个工种:有读文件的(相当于量房的)、写文件的(相当于砌墙的)、跑命令的(相当于接水电的)、搜网页的(相当于去建材市场选料的)……各干各的活。
但工地有规矩。不是拿起电钻就能开干。 水电工动工前要确认这面墙能不能打、业主签没签字同意、有没有碰到承重结构。这就是 Claude Code 的权限检查——每个工具执行前,都要过安全审批。
整个工地的进度,记在一本施工日志上。关键是:这本日志只能往后翻页写,不能撕掉前面的重写。 今天水电改到哪了、明天木工进场、后天出了什么问题——全都白纸黑字留着。谁来看,看到的都是同一个状态。这就是它的不可变状态管理。
而且项目经理不是”等所有活干完再带你验收”的那种。他是边干边给你发工地实况——你在终端里实时看到它在读哪个文件、跑什么命令、改了哪行代码。觉得不对,随时喊停。
这就是 Claude Code 的核心运转逻辑。
它的设计理念
第一:一切皆工具
读文件是工具,跑命令是工具,搜网页是工具,连接外部服务也是工具。所有工具长得一样——同一个接口,同一套规矩。
这就像工地上所有工种的操作流程都一样:领任务→安全检查→施工→汇报→验收。不管你是水电工还是油漆工,流程统一。
好处是什么?加一个新工种,不用改工地的管理结构,按流程报到就行。这也是为什么 Claude Code 能不断加新功能,而不会越改越乱。
第二:默认不信任
在这个系统里,AI 是可以直接跑 shell 命令的,可以直接改你的文件。这事想想就有点吓人。
所以作者的态度是:默认一切都不安全。每个工具出厂的时候,默认不能并发执行、默认不是只读操作,你必须主动声明”我是安全的”才能获得信任。
这就像工地上新来一个工人,默认不能碰电钻、不能砸墙,得项目经理确认资质才行。宁可多审一遍图纸,也不能打穿承重墙。
它到底有多大?一张表看清
| 你看到的 | 背后有什么 |
|---|---|
| 你输入一句话 | 1 个查询引擎 + 1 个核心循环在调度 |
| 它读了你的文件 | 40 多个工具在待命,按需调用 |
你输 /help |
80 多条斜杠命令各有各的实现 |
| 终端里的彩色输出 | 一整套自研的终端 UI 框架,80 多个组件 |
| 它记住了你的项目习惯 | 一个完整的记忆系统,支持个人和团队共享 |
| 它能同时干好几件事 | 一个任务系统,支持子 Agent 并行工作 |
| 你觉得它”懂你” | 86 个 React Hooks 在背后默默连接一切 |
| 它能连 GitHub、数据库 | MCP 协议,让它能对接任何外部服务 |
一个”纯命令行”工具,背后是 250 多个工具函数文件,最大的单文件近 900KB。
大道至简,不是因为简单,是因为把复杂藏起来了。
它怎么让你扩展?三种难度
Claude Code 给你留了三个口子,难度递增。
第一层:写个 Markdown 就行
在项目的 .claude/skills/ 目录下丢一个 .md 文件,写清楚描述和规则,你就创建了一个新的斜杠命令。不需要写代码,不需要懂 TypeScript,甚至不需要重启。
这是给所有人用的。你只要能把需求说清楚,就能扩展它的能力。
第二层:对接外部服务
通过 MCP 协议,你可以让 Claude Code 连上数据库、浏览器、任何 API。外部工具接进来之后,和内置工具享受同等待遇——同样的调度、同样的权限检查、同样的展示。
这是给程序员用的。
第三层:写插件
注册一个内置插件,可以包含技能、钩子、MCP 服务器,还能在启动时注入代码逻辑。这是最强大的方式,也是门槛最高的。
这是给核心贡献者用的。
三层扩展,对应三种人。这个设计很聪明。
夜雨聆风