从51万行到950行,我用Python还原Claude Code核心,读懂AI编程Agent不用再啃源码

张开发
2026/6/1 13:28:34 15 分钟阅读
从51万行到950行,我用Python还原Claude Code核心,读懂AI编程Agent不用再啃源码
前阵子Claude Code源码泄露的消息在AI编程圈掀起了不小的波澜。作为一名深耕AI Agent领域的开发者我第一时间梳理了源码的核心逻辑写了一篇分析专栏没想到意外走红收获了17万阅读和6000多收藏。后台私信被瞬间淹没其中两类问题反复出现让我意识到很多开发者的真实需求被忽略了。一类是刚入门AI编程Agent的开发者他们问得最多的是“Claude Code的核心到底怎么实现的有没有Python版的参考实现我想在其基础上做自己的Coding Agent。” 另一类是没有Anthropic API权限的开发者他们迫切想知道“搞不到Anthropic的APIKimi、Gemini、DeepSeek这些模型能不能跑在Claude Code的架构上”面对这些疑问我没有简单地做文字解答而是决定用实际行动交一份满意的作业。经过一段时间的梳理和提炼我基于最精华、最泛用、最易于二次开发的原则将Claude Code那51万行源码中的核心功能设计用仅仅950行Python代码重写了一遍这个项目就是CoreCoder——之前我给它取名NanoCoder后来发现和另一个项目重名便改成了更贴合核心定位的CoreCoder目前已经在GitHub上完全开源地址是he-yufeng/CoreCoder。很多人看到这个项目第一反应是“又一个Claude Code克隆品”但其实不然。在开始拆解CoreCoder的核心设计之前我想先把它的定位说清楚避免大家产生误解。市面上已经有很多成熟的AI编程工具比如拥有12万star的Claw-Code还有Aider、Cline等它们都是完整的Python或Rust重写版本开箱即用。如果你只是想要一个日常能用的AI编程助手直接用这些工具就足够了CoreCoder并不想和它们争抢这个市场。CoreCoder的价值在于它的“精简”和“可拆解”。打个很形象的比方如果你想学习GPT的训练过程肯定不会一上来就去读Megatron-LM那几十万行代码那样只会让人望而却步。大多数人都会先看Andrej Karpathy的nanoGPT它用三百来行代码就把GPT的核心训练循环讲得明明白白。看完nanoGPT你就能快速理解GPT的底层逻辑之后可以轻松fork一份加入自己的数据集跑实验或者修改出属于自己的架构。CoreCoder对AI编程Agent的意义就和nanoGPT对Transformer训练的意义一样。我把Claude Code 51万行代码中的核心逻辑提炼成了950行Python代码后来加上一些辅助功能总代码量也才1300行左右。每个文件都非常简洁一屏就能看完。你只需fork下来花一个下午的时间读完就能彻底理解一个生产级AI编程Agent的全部核心设计。之后你可以在这个基础上自由发挥比如接入你公司的内部API、添加一个代码审查工具、改成支持你们公司的私有模型甚至可以拿来作为AI Agent课程的教学素材省去从零开始摸索的麻烦。更重要的是这1300行代码全部源自Claude Code源码中经过验证的设计模式不是我自己拍脑袋想出来的架构而是Anthropic在51万行的生产系统里跑过、用大量数据验证过的成熟方案。这意味着你基于CoreCoder做二次开发不需要担心核心逻辑存在潜在bug相当于站在巨人的肩膀上少走很多弯路。先看效果和Claude Code一样的工作流模型由你说了算在拆解核心设计之前我们先直观感受一下CoreCoder的使用效果。它和Claude Code有着完全一致的工作流能够自己读取代码、做精准编辑每次改动都会输出unified diff格式让你清晰看到改了什么还能运行命令验证、搜索代码库。最关键的是它支持你自由选择模型不用局限于Claude。比如我们用Kimi K2.5模型执行以下命令启动CoreCoder$ CoreCoder-mkimi-k2.5之后我们给它下达一个简单的指令“读一下main.py修掉拼错的import”。CoreCoder会自动执行读文件和编辑文件的操作输出如下内容You读一下 main.py修掉拼错的importread_file(file_pathmain.py)edit_file(file_pathmain.py,old_stringfrom utils import halper,new_stringfrom utils import helper)--- a/main.py b/main.py -1,4 1,4 -fromutilsimporthalper from utilsimporthelper 修好了halper → helper。整个过程非常流畅没有多余的操作CoreCoder精准定位到拼写错误完成替换后用diff格式清晰展示改动内容让你一目了然。除了简单的拼写修正它还能处理更复杂的代码编辑任务比如修改函数逻辑、优化代码结构、排查bug等核心体验和Claude Code几乎没有区别但灵活性更高因为你可以根据自己的需求选择合适的模型。51万行Claude Code中真正的“承重墙”只有7个读完Claude Code的全部源码后我发现一个很关键的问题这51万行代码中大部分都不是核心逻辑真正起到“承重”作用的设计模式其实只有7个。剩下的几十万行代码主要是UI渲染用到了React和Ink、MCP协议适配、OAuth认证、Skill插件系统还有那个很有趣的宠物系统等等。这些功能虽然有意思能提升用户体验但并不是一个AI编程Agent的核心去掉它们依然不影响核心功能的运行。这也是我能将其精简到950行的关键——抓住核心设计模式去掉所有非必要的冗余功能。下面我就逐一拆解这7个核心设计模式告诉你它们为什么重要以及CoreCoder是如何实现它们的。1. 搜索替换式编辑解决AI编辑代码的核心痛点这可能是Claude Code对AI编程工具领域最大的单点贡献。在CoreCoder中我完整实现了这个模式它彻底解决了行业内长期存在的AI编辑代码的痛点。我们都知道让大语言模型LLM编辑代码行业里试过很多方案但都存在明显的缺陷。比如行号补丁LLM很容易记不住行号尤其是在上下文被压缩之后行号更是容易对不上导致编辑出错再比如整文件重写哪怕一个500行的文件只需要改2行也得让LLM重新生成整个文件不仅token费用会大幅增加而且LLM在复制长文本时还经常会悄悄丢行造成代码损坏还有输出unified diff格式虽然能展示改动但后面的行号经常算错需要很复杂的容错解析增加了开发难度。而Claude Code的做法非常简单却异常有效让LLM给出一段精确的文本片段old_string和替换内容new_string同时只设置一个约束条件——old_string必须在文件中恰好出现一次。这个约束看似简单却干掉了一整类的编辑bug。如果old_string在文件中出现0次说明LLM记错了文件内容这时候就让它重新读取文件获取最新的文件内容后再进行编辑如果出现多于1次说明给LLM的上下文不够让它多包含几行代码消除歧义确保能精准定位到需要替换的内容只有在恰好出现1次的情况下才执行替换操作。CoreCoder不仅完整实现了这个模式还做了一个小优化每次编辑完成后都会自动输出unified diff格式让你清晰看到具体改了什么不用手动去对比文件差异大大提升了使用体验。2. Agent工具循环 并行执行让AI“干活”更快其实所有AI Agent的底层核心循环都很简单用户下达指令 → 调用LLM分析指令 → LLM判断需要使用工具就执行工具 → 将工具执行结果喂回LLM → 重复这个过程直到LLM只返回文本不再需要调用工具。CoreCoder也不例外它的核心循环依然遵循这个逻辑但在执行效率上借鉴了Claude Code的精妙优化。Claude Code中有一个名为StreamingToolExecutor的模块大概530行代码它的核心作用是在模型还没说完所有内容的时候就开始执行前面的工具调用。也就是说模型流式吐出第一个工具调用的参数时那个工具就会立刻开始运行不用等模型把后面的内容全部输出。同时它还支持多工具并行执行其中只读工具比如读文件、grep搜索可以并行执行而有副作用的工具比如写文件、执行bash命令则独占执行避免出现冲突。用过Claude Code的人应该都有这样的体感它“想”完之后开始干活的速度特别快几乎没有延迟这就是StreamingToolExecutor的功劳。不过考虑到CoreCoder的精简定位我没有实现完整的流式解析而是用了一个简化版的方案等LLM返回全部tool_calls后用ThreadPoolExecutor实现多工具并行执行。虽然没有流式解析那么极致但多工具并行的核心收益被完整保留了下来足以满足大部分开发者的需求同时还能减少代码量让核心逻辑更清晰。3. 三层上下文压缩解决128K token不够用的难题现在很多大模型都支持128K甚至更大的上下文窗口看似能处理很多内容但在实际使用中十几轮工具调用下来上下文就快满了。比如一次npm test的输出可能就有好几千token再加上之前的对话记录、工具调用记录很容易超出上下文限制导致模型无法正常工作。Claude Code没有采用简单的截断旧消息的方式而是设计了一套四层渐进式的上下文压缩策略既保证了模型能获取足够的关键信息又能有效控制上下文长度。CoreCoder实现了其中的前三层足以应对大部分场景具体如下第一层裁噪声。比如grep命令返回了500行结果但模型实际上只需要用到其中3行这时候就会保留结果的开头和结尾删除中间无关的497行减少冗余信息第二层LLM摘要。调用一次模型把旧的对话记录、工具执行结果等内容压缩成一段话并且将这个摘要缓存起来下次复用避免重复生成节省token第三层硬压缩。当上下文依然超出限制时就只保留最近几轮的对话和工具调用记录再加上之前生成的摘要其他内容全部删除确保上下文长度在模型支持的范围内第四层后台自动触发。这一层CoreCoder没有实现Claude Code中是在用户无感的情况下后台自动触发压缩策略不用用户手动操作。这里有一个很关键的设计思路不同信息有不同的“保质期”。比如工具输出的结果经过几轮对话后可能就没用了可以优先压缩或删除但用户的需求描述整个会话过程中都需要保留因为模型需要一直围绕用户的核心需求工作。CoreCoder正是按照这个“保质期”分级处理上下文既不丢失关键信息又能有效控制上下文长度。4. 子代理生成拆分复杂任务避免递归爆炸在处理复杂任务时单一Agent往往难以高效完成这时候就需要将复杂任务拆分成多个简单任务交给独立的子Agent处理每个子Agent都有自己的上下文窗口专注于完成自己的任务最后再将所有子Agent的结果汇总得到最终答案。这就是子代理生成的核心逻辑。Claude Code中的AgentTool模块有1397行代码完整实现了子代理生成、任务分配、结果汇总等功能。而CoreCoder只实现了其中的核心逻辑只用了50行代码就实现了子代理的创建、任务分配和结果返回。这里有一个很有意思的设计决策子Agent不能再创建子Agent。这是为了防止出现递归爆炸的情况避免子Agent无限创建子Agent导致系统资源耗尽、程序崩溃。CoreCoder严格遵循了这个设计原则确保子代理生成功能的稳定性。5. 危险命令拦截保障使用安全AI编程Agent需要执行各种bash命令这就存在一定的安全风险比如误执行rm -rf /、fork bomb、curl | bash等危险命令可能会导致系统损坏、数据丢失。Claude Code中专门设计了危险命令拦截机制在这些命令执行前就将其拦截避免造成严重后果。CoreCoder也实现了这个核心功能内置了常见的危险命令列表当LLM生成的工具调用中包含这些危险命令时CoreCoder会直接拦截不执行该命令并提示用户存在危险确保使用过程中的安全性。对于有特殊需求、需要执行某些危险命令的开发者也可以通过自定义配置暂时关闭部分拦截规则兼顾安全性和灵活性。6. 会话持久化长任务可随时中断、恢复在处理一些复杂的编程任务时可能需要花费很长时间中间可能会遇到电脑重启、网络中断等情况如果没有会话持久化功能之前的对话记录、工具调用记录就会全部丢失需要重新开始非常耗时。Claude Code支持会话持久化功能CoreCoder也完整实现了这一点。你只需要在使用过程中输入/save命令就可以将当前的会话状态保存到本地之后如果想要恢复会话只需要执行corecoder -r session_id命令就能恢复到之前的会话状态继续处理任务。这个功能对于处理长任务非常实用让你可以随时中断、改天继续不用一直占用电脑资源。7. 系统提示词动态组装让Agent适配不同场景很多AI Agent的系统提示词都是写死的字符串无论在什么场景下都使用同样的提示词导致Agent的行为不够灵活无法适配不同的项目、不同的操作系统。而Claude Code的系统提示词是动态组装的不是固定不变的。它会根据当前的工作目录、操作系统、可用工具列表等信息实时拼接系统提示词让Agent在不同的项目、不同的环境下表现出不同的行为。比如在Python项目中Agent会更关注Python相关的语法、工具在Linux系统下会更熟悉Linux相关的bash命令如果某个工具不可用Agent也会自动调整策略不调用该工具。CoreCoder完全借鉴了这个设计实现了系统提示词的动态组装功能让Agent能够灵活适配不同的使用场景提升使用体验和任务完成效率。CoreCoder使用指南一行安装多模型适配CoreCoder的设计理念是“精简、易用、可扩展”所以它的安装和使用都非常简单即使是刚入门的开发者也能快速上手。下面就详细介绍一下CoreCoder的安装方法、使用方式以及如何自定义工具。一、安装一行命令搞定CoreCoder支持Python 3.8及以上版本安装过程非常简单只需要在终端中执行以下一行命令即可pipinstallcorecoder安装完成后输入corecoder命令即可查看相关的使用帮助确认安装成功。二、使用支持多种模型灵活切换CoreCoder支持任何OpenAI兼容API的模型无论是在线模型还是本地模型都可以轻松适配。下面就以几个常用模型为例介绍具体的使用方法。使用Kimi K2.5模型首先需要设置环境变量配置Kimi的API密钥和基础URL然后启动CoreCoder并指定模型# 配置环境变量exportOPENAI_API_KEY你的Kimi API密钥exportOPENAI_BASE_URLhttps://api.moonshot.ai/v1# 启动CoreCoder指定使用Kimi K2.5模型corecoder-mkimi-k2.5使用Claude Opus 4.6模型通过OpenRouter如果想要使用Claude Opus 4.6模型可以通过OpenRouter接入配置方式如下# 配置环境变量exportOPENAI_API_KEY你的OpenRouter API密钥exportOPENAI_BASE_URLhttps://openrouter.ai/api/v1# 启动CoreCoder指定使用Claude Opus 4.6模型corecoder-manthropic/claude-opus-4-6使用DeepSeek V3模型# 配置环境变量exportOPENAI_API_KEY你的DeepSeek API密钥exportOPENAI_BASE_URLhttps://api.deepseek.com# 启动CoreCoder指定使用DeepSeek V3模型corecoder-mdeepseek-chat除了以上这些模型CoreCoder还支持GPT-5、Qwen 3.5、Ollama本地模型等只要是符合OpenAI兼容API规范的模型都可以直接使用配置方式和上面类似只需修改对应的API密钥、基础URL和模型名称即可。三、作为Python库使用灵活集成到自己的项目中CoreCoder不仅可以作为命令行工具使用还可以作为Python库集成到你自己的项目中实现更灵活的功能。使用方法非常简单只需导入相关模块创建LLM和Agent实例即可调用chat方法进行对话和任务处理。示例代码如下fromcorecoderimportAgent,LLM# 创建LLM实例指定模型、API密钥和基础URLllmLLM(modelkimi-k2.5,api_key你的Kimi API密钥,base_urlhttps://api.moonshot.ai/v1)# 创建Agent实例传入LLM对象agentAgent(llmllm)# 调用chat方法下达任务指令responseagent.chat(找出项目里所有TODO注释)# 打印结果print(response)通过这种方式你可以将CoreCoder的核心功能集成到自己的AI项目中比如搭建一个自定义的AI编程助手、开发一个代码审查工具等灵活性非常高。四、自定义工具20行代码即可扩展CoreCoder支持自定义工具如果你有特殊的需求比如需要调用公司内部的工具、添加一个自定义的代码分析功能只需要继承Tool基类编写20行左右的代码即可实现自定义工具的集成。自定义工具的基本步骤如下导入Tool基类定义自己的工具类继承Tool基类实现name、description、args等属性定义工具的名称、描述和参数实现run方法编写工具的核心逻辑将自定义工具添加到Agent的工具列表中。示例代码如下自定义一个简单的代码统计工具fromcorecoderimportTool,Agent,LLMimportosclassCodeCounterTool(Tool):# 工具名称namecode_counter# 工具描述description统计指定目录下的代码文件行数# 工具参数args[{name:dir_path,type:str,description:要统计的目录路径}]defrun(self,dir_path):核心运行逻辑统计目录下所有.py文件的行数total_lines0forroot,dirs,filesinos.walk(dir_path):forfileinfiles:iffile.endswith(.py):file_pathos.path.join(root,file)withopen(file_path,r,encodingutf-8)asf:linesf.readlines()total_lineslen(lines)returnf指定目录下所有Python文件的总行数{total_lines}# 创建LLM和Agent实例llmLLM(modelkimi-k2.5,api_key你的API密钥,base_urlhttps://api.moonshot.ai/v1)# 添加自定义工具agentAgent(llmllm,tools[CodeCounterTool()])# 调用自定义工具responseagent.chat(统计当前目录下所有Python文件的行数)print(response)通过这种方式你可以轻松扩展CoreCoder的功能让它更贴合自己的使用需求。无论是接入内部工具还是添加个性化功能都非常方便。谁适合用CoreCoder找准定位高效使用前面已经说过CoreCoder不是一个开箱即用的AI编程助手它的价值在于“可读懂、可改造、可扩展”。所以它并不是适合所有开发者以下几类人群使用CoreCoder能获得最大的收益第一类想搞懂AI编程Agent原理的开发者。如果你一直想学习AI编程Agent的底层逻辑但面对几十万行的源码望而却步那么CoreCoder绝对是你的最佳选择。1300行代码每个文件一屏就能看完代码简洁、逻辑清晰注释完整你花一个下午的时间就能彻底理解生产级AI编程Agent的核心设计比读51万行源码或者看第三方教程的效率高得多。第二类想自己造轮子的团队。如果你所在的团队需要开发一个自定义的AI编程Agent从零开始开发不仅耗时耗力还容易踩坑。而CoreCoder提供了一个完整的核心框架你fork下来之后就可以在此基础上快速扩展比如添加MCP支持、权限系统、接入公司内部模型等比从零开始开发快一个量级是最小的、完整可运行的编程Agent实现。第三类做AI Agent方向的研究者和学生。对于研究者和学生来说理论学习固然重要但有可运行的代码作为支撑能更好地理解论文和架构设计。CoreCoder中每个核心设计模式都有可运行的代码你可以带着代码去理解AI Agent的工作原理比单纯看流程图、读论文要直观得多能帮助你更快地掌握相关知识开展研究工作。第四类编程Agent的开发者。现在很多大模型的coding能力已经非常强了比如Kimi K2.5、GLM5、MiniMax M2.7、Gemini 3.1 Pro等它们本身具备强大的代码生成、编辑能力但缺少一个好用的Agent壳来驱动它们。CoreCoder就是这个“壳”你可以将这些大模型接入CoreCoder快速实现一个功能完善的AI编程Agent不用再自己开发核心框架。这里再次强调如果你只是想要一个开箱即用的AI编程助手日常用来写代码、改bug那么Claude Code、Cursor或者Aider更适合你。CoreCoder的核心价值不在于“用”而在于“懂”和“改”——让你能读懂AI编程Agent的核心逻辑并且能轻松改造它在它的基础上造出属于自己的东西。配套导读7篇文章吃透Claude Code架构为了帮助大家更好地理解CoreCoder的设计逻辑以及Claude Code的底层架构我除了开发CoreCoder项目之外还写了一套7篇的Claude Code架构导读每篇文章围绕一个核心设计模式展开详细拆解其实现原理、设计思路和工程权衡让你不仅能用好CoreCoder还能深入理解Claude Code的完整架构。这套导读文章的目录如下从51万行说起技术栈、目录结构、十大设计哲学1729行的while(true)Agent核心循环的全部细节让AI安全地改你的代码工具系统和搜索替换编辑有限窗口无限任务四层上下文压缩的工程权衡边想边做StreamingToolExecutor如何让工具执行零延迟当一个Claude不够用多Agent协作系统的三种模式Feature Flag背后的秘密44个未发布功能KAIROS、Buddy宠物系统、Voice Mode……大家可以在GitHub上查看完整的导读文章地址是https://github.com/he-yufeng/CoreCoder/blob/main/article/00-index.md这套导读文章和CoreCoder项目相辅相成导读文章帮你理解底层设计思路CoreCoder帮你将这些思路落地实践两者结合能让你快速掌握AI编程Agent的核心技术无论是学习、研究还是开发都能少走很多弯路。写在最后让AI编程Agent的核心技术触手可及Claude Code的源码泄露给了很多AI Agent开发者一个难得的学习机会但51万行的代码量让很多人望而却步。我开发CoreCoder的初衷就是想把Claude Code的核心设计提炼出来用最简单、最易懂的方式呈现给大家让更多开发者能够轻松接触到AI编程Agent的核心技术不用再花费大量时间去啃几十万行的源码。CoreCoder虽然只有1300行左右的代码但它包含了AI编程Agent的全部核心设计模式这些模式都是Anthropic在生产环境中验证过的成熟方案具有很高的参考价值。它就像一个“脚手架”你可以在它的基础上自由发挥打造属于自己的AI编程Agent无论是用于学习、研究还是商业开发都非常合适。目前CoreCoder已经完全开源大家可以自由fork、修改、扩展也欢迎大家在GitHub上提交issues和PR一起完善这个项目。我也会持续更新配套的导读文章帮助大家更好地理解AI编程Agent的底层逻辑。最后希望CoreCoder能够帮助更多开发者走进AI编程Agent的世界让核心技术触手可及让每个人都能轻松打造属于自己的AI编程工具。如果你在使用过程中有任何问题或者有好的建议欢迎随时和我交流。

更多文章