当前时间: 1970-01-01 08:00:00
分类:办公文件
评论(0)
深度拆解 Claude Code 源码深度拆解 Claude Code 源码:51万行代码背后的 Agent 工程哲学,以及我们做的开源复刻版
上个月 Claude Code 源码意外曝光的事,相信很多人都有所耳闻——一次部署失误把 source map 打进了 npm 包,51 万行 TypeScript、4700+ 个文件完整暴露在世人面前。作为一个天天泡在终端里写代码的人,我花了整整一周啃完了核心源码。今天这篇文章,不聊八卦,只讲干货:Claude Code 真正强在哪?它的架构设计有哪些值得我们学习的地方?以及,基于这些思考,我做了一个什么样的开源项目?一、先打破一个误区:Claude Code 不是"终端版 ChatGPT"
很多人第一次用 Claude Code,觉得这不就是个能跑命令的聊天机器人吗?如果你只把它当成"终端里的大模型",你就彻底低估了它。Claude Code 的本质是一个面向软件工程的 Agent 运行时(Agent Runtime)——模型只是中间的一层,真正让它好用、可控、能落地的,是外围那套极其完善的工程化基础设施。这不是一个 demo,这是一个生产级的操作系统级别的工程。二、核心引擎:一个 88 行的 while 循环,撑起了整个 Agent
最反直觉的一点:Claude Code 的核心执行引擎,简单到不可思议。整个系统的心脏在 query.ts 里,就是一个 queryLoop 异步生成器:└─ 是 → 权限检查 → 执行工具 → 收集结果 → 回到开头没有意图分类器,没有复杂的 DAG 编排,没有规划器与执行器的拆分。所有决策由模型自己做,代码只负责提供确定性的基础设施。把不确定性的事(意图理解、任务规划)交给模型,把确定性的事(权限检查、上下文管理、错误恢复、成本控制)用代码严格保证。但这个循环绝不是玩具——它内置了 10 种终止条件和 7 条恢复路径:- 最大输出 token 递增重试(每轮最多 3 次)
这才是生产级 Agent 和玩具 Demo 的核心区别。三、工具系统:三层架构,解耦到极致
工具是 Agent 与世界交互的唯一通道。Claude Code 的工具系统采用了经典的三层架构:Tool Registry 声明 Schema 和默认权限 name, description, input_schema, permission_levelDispatcher 将 LLM 调用路由到具体实现 工具名 → 实现函数的映射表Implementation 执行实际逻辑,返回结构化结果 execute(input): ToolResult这个设计最精妙的地方在于:工具的 JSON Schema 直接透传给 LLM。- 新增工具只需要写 Schema + 实现,不需要改提示词
- 文件操作:Read / Write / Edit / MultiEdit / Glob / Grep
- Shell 执行:Bash / PowerShell / REPL
- Agent 协作:Subagent / Task / Team
- 规划系统:EnterPlan / ExitPlan / VerifyPlan
- 网络与扩展:WebFetch / WebSearch / MCP
其中最值得一说的是 Subagent 子代理机制——主 Agent 可以生成一个拥有独立上下文和工具集的子 Agent 实例,本质上是递归调用 query.ts。理论上支持无限嵌套,复杂任务可以无限拆解。四、上下文管理:五层压缩流水线
很多人好奇:Claude Code 跑长任务为什么不跑偏?上下文那么长为什么还很快?- Compact(压缩):用模型对历史消息做摘要重写
- Collapse(折叠):将多轮工具调用合并为单条总结
- Memory Extract(记忆提取):从对话中抽取持久化记忆
- System Prompt(系统提示):CLAUDE.md + 模式配置 + 规则文件
并且这套压缩是反应式的——不是定时触发,而是在每轮循环前检查上下文余量,按需触发。这也是为什么它能在 200k 上下文的模型上跑几千行代码的重构任务。五、然后呢?我们做了 Xcoder
看懂了这些设计之后,我开始思考:这么好的架构,能不能开源出来?能不能加上我们想要的功能?于是有了 Xcoder——基于 Claude Code Best(CCB)逆向还原项目进行的大规模二次开发。坦诚地说,核心引擎的架构我们继承自上游。但在这之上,我们注入了大量原创的思考和设计:这是 Xcoder 最有辨识度的原创功能。不只是换个主题色,每种模式是一整套完整配置:性格 + 工具集 + 权限 + UI 风格。输入 /mode sharp 或者直接 /sharp,瞬间切换人格。写代码写累了,切到温柔模式让 AI 鼓励鼓励你;思路混乱了,切到 Dr. Sharp 帮你做三阶段认知手术。Xcoder 强制展示 diff 并追问修改理由,每一次改动都有决策日志。不让 AI 成为黑盒,每一行代码的修改都要有迹可循。原版只支持 Anthropic。我们在原生架构上扩展了统一抽象层,现在支持:- OpenAI 兼容(Ollama / DeepSeek / vLLM)
想用哪家用哪家,本地模型也能跑完整 Agent 能力。🎤 语音输入 + 🌐 浏览器自动化 + 📱 远程控制- 内置 Chrome Use,自动操作浏览器、填表单、抓数据
- Docker 部署远程界面,手机上也能看 Xcoder 干活
输入 /poor 一键开启。跳过记忆提取、提示建议和验证代理,Token 消耗直接砍半。学生党和个人开发者友好。六、一键安装,开箱即用
bash <(curl -fsSL https://raw.githubusercontent.com/YuanyuanMa03/xcoder/main/scripts/install.sh)irm https://raw.githubusercontent.com/YuanyuanMa03/xcoder/main/scripts/install.ps1 | iexnpm install -g @yuanyuan20031001/xcoder安装完成后输入 xcoder 启动,首次使用输入 /login 配置你的 API 即可。七、写在最后
做这个项目的初衷很简单:好的架构不应该被闭源锁死。Claude Code 证明了终端原生的 Code Agent 这条路是走得通的,而且体验远超 IDE 插件。但它闭源、只支持自家模型、没有个性化、价格也不便宜。Xcoder 想做的,就是把这套优秀的架构开源出来,加上更多接地气的功能,让每个人都能用得上、改得了。👉 https://github.com/YuanyuanMa03/xcoder如果你觉得这个项目不错,欢迎给个 Star。有任何想法或者想贡献代码,也欢迎提 Issue 和 PR。人机协作的边界在哪?我不知道。但我知道,这件事需要更多人一起探索。你平时用什么 AI 编程工具?最在意哪个功能?评论区聊聊~觉得文章有帮助的话,欢迎点赞 + 在看 + 转发三连,后续会带来更多 Claude Code 源码深度拆解系列。
基本
文件
流程
错误
SQL
调试
- 请求信息 : 2026-06-20 19:20:39 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/773147.html
- 运行时间 : 0.091696s [ 吞吐率:10.91req/s ] 内存消耗:4,875.32kb 文件加载:145
- 缓存信息 : 0 reads,0 writes
- 会话信息 : SESSION_ID=7badceb8a848b29a81ae734f8725eed1
- CONNECT:[ UseTime:0.000608s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
- SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000898s ]
- SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000326s ]
- SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000307s ]
- SHOW FULL COLUMNS FROM `set` [ RunTime:0.000656s ]
- SELECT * FROM `set` [ RunTime:0.000220s ]
- SHOW FULL COLUMNS FROM `article` [ RunTime:0.000620s ]
- SELECT * FROM `article` WHERE `id` = 773147 LIMIT 1 [ RunTime:0.000457s ]
- UPDATE `article` SET `lasttime` = 1781954439 WHERE `id` = 773147 [ RunTime:0.002977s ]
- SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000289s ]
- SELECT * FROM `article` WHERE `id` < 773147 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000566s ]
- SELECT * FROM `article` WHERE `id` > 773147 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001284s ]
- SELECT * FROM `article` WHERE `id` < 773147 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002151s ]
- SELECT * FROM `article` WHERE `id` < 773147 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001443s ]
- SELECT * FROM `article` WHERE `id` < 773147 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001666s ]
0.093422s