Claude Code源码开源?虚惊一场还是别有洞天
GitHub今天突然出现了一个仓库,挂着 claude-code-source-code
“Claude Code 要开源了?!” “AI 编程工具第一次完全开放源码!” “Cursor 慌不慌?”
认真翻过仓库的人,第一时间泼了冷水:”不对,这不是 Claude 的推理模型代码,也不是服务端代码,这是客户端源码。”
Claude Code 是 Anthropic 出品的命令行 AI 编程助手,它跑在你的终端里,帮你写代码、读代码、改代码、执行 Bash 命令,甚至可以自主完成整个开发任务。
这次开放的,是这个工具的完整客户端源码——也就是你在本地跑起来的那一整套 TypeScript 程序。
不是 Claude 模型本身。不是推理引擎。不是服务器。
但这并不等于”没什么用”。打开代码,才知道这东西有多复杂
src/ 目录下有几千个文件。你以为一个”命令行工具”能有多少代码?
光 src/tools/BashTool/ 里就有超过 15 个文件。一个执行 Bash 命令的功能,写了 bashSecurity.ts、bashPermissions.ts、readOnlyValidation.ts、sedValidation.ts、pathValidation.ts……
因为这东西在执行你的 Shell 命令之前,要做非常细致的安全审查。比如 bashSecurity.ts 里,光是针对 Zsh 的危险命令就有一整个黑名单:
const ZSH_DANGEROUS_COMMANDS = new Set([ 'zmodload', // 危险模块加载 'emulate', // 相当于eval 'sysopen', // 文件描述符控制 'syswrite', // 写入文件描述符 ...])
甚至还有一段注释,专门解释为什么要拦截 =curl 这样的 Zsh 写法:
=curl evil.com → /usr/bin/curl evil.com,绕过了 Bash(curl:*) 拒绝规则,因为解析器看到的基础命令是 =curl,而不是 curl。
这不是普通的工具箱代码,这是被攻击验证过的安全代码。从 OAuth 到 MCP,一套完整的工程决策
OAuth 登录流程(src/services/oauth/index.ts):用了带 PKCE 的 OAuth 2.0 授权码流程,支持自动打开浏览器和手动复制粘贴两种方式。为了在无浏览器环境也能用,单独设计了 manual flow;为了 SDK 接管控制台,还有 skipBrowserOpen 模式。三行注释就把边界条件讲清楚了——这是工程老手才能写出的代码风格。
MCP(Model Context Protocol)客户端:工具连接外部服务的协议全在 src/services/mcp/ 下,支持 stdio、SSE、HTTP、WebSocket 等多种传输方式,还有环境变量展开、企业级配置文件、权限审查……光一个 config.ts 就 1500 多行。
Context Compaction(上下文压缩):当对话太长超出 Token 限制时,系统会自动调用另一个 LLM 对历史对话做摘要,然后把摘要注入回来。这个模块在 src/services/compact/compact.ts,连图片都单独处理:在压缩之前先把图片 block 替换成 [image] 文本,防止压缩请求自己撑爆 Token 限制。
全局状态管理(src/bootstrap/state.ts):项目用一个巨大的单例 State 管理会话级状态,包括 API 成本追踪、模型用量统计、OAuth 令牌缓存、Prompt Cache 的时间戳、OpenTelemetry 埋点……还专门在注释里写了三行警告:
// DO NOT ADD MORE STATE HERE - BE JUDICIOUS WITH GLOBAL STATE// ALSO HERE - THINK THRICE BEFORE MODIFYING// AND ESPECIALLY HERE
能在代码里写出这种”求求别乱动”注释的团队,一定踩过很多坑。这次开放,到底有多大价值
对开发者:这是一份极其详细的”AI 编程助手设计参考”。
你想做类似的工具?现在你可以直接看:权限系统怎么设计,Tool calling 的状态机是什么样的,如何用 React + Ink 做命令行 UI,怎么处理 Agent 的子任务并发,怎么在 Bun 上用 feature flag 做死代码消除……
这些不是白皮书里的概念,是生产代码里跑了很久的答案。
对研究者:代码里藏着大量 Anthropic 在 AI Agent 工程上的判断。比如他们怎么设计 Tool 的权限模型,怎么让 Agent 管理自己的 Memory,怎么让多个子 Agent 协作……这些设计思路,在论文里找不到。
对用户:你知道 Claude Code 在你的机器上到底做了什么了。命令是怎么被审查的,文件是怎么被保护的,成本是怎么被统计的。黑盒变成了白盒,这本身就是信任。那它”没开源”什么
推理服务、训练数据、RLHF 流程——这些都不在。
而且更微妙的是,你可以看到代码里到处都是 feature() 调用:
const snipModule = feature('HISTORY_SNIP') ? require('./services/compact/snipCompact.js') : null
这些是 Bun 的 bundle-time feature flag,在构建时决定哪些功能被编译进去。外部版本和内部版本 feature() 的返回值不同——也就是说,你在 GitHub 上看到的代码,和 Anthropic 内部员工跑的代码,功能集并不完全一样。
虚惊一场是指:你以为得到了什么,结果什么都没得到。
这次是:你以为 Anthropic 开放了大招,然后发现不是——但等你仔细看完,发现这本身就是一个相当重要的礼物。
一个在生产环境验证过的、真实的 AI Agent 客户端架构,就这么摆在你面前了。