Claude Code 源码泄露后,我们能学到什么:系统提示词、权限分级和记忆系统
这两天关于 Claude Code 的讨论,已经有点从“技术新闻”变成“技术围观现场”了。起因大家大概都知道了:Anthropic 的公开 npm 发布包里误带了调试相关文件,结果内部源码被人顺着 source map 很快扒了出来。随后 GitHub 上又冒出镜像仓库,社区传播速度非常快,话题一下就炸开了。
但我看这件事,真正值得写下来的部分其实不是八卦本身,而是它把一个顶级 AI 编程工具的工程底座掀开了一角。平时我们都在用 Claude Code,也都在说它“整体手感很好”,可这种“好用”到底有多少来自模型本身,又有多少来自模型外面那层工程系统,平常其实很难看清。
我自己是长期付费在用 Claude Code 的。写代码、写文章、搭博客、整理流程,经常都在终端里挂着好几个窗口一起跑。所以这次我真正在意的不是“Anthropic 出糗了没有”,而是另一件事:一个已经被证明很好用的 AI coding 产品,背后到底是怎么把模型驯成可交付工具的。
先把事实说清楚
先把能确认的事实说清楚。Axios 的报道里提到,Anthropic 对外承认确实有内部源码被包含进了公开包里,但没有客户数据和凭据泄露。另一个我自己顺手核过的点是,npm 当前公开版本列表里已经看不到外界讨论最集中的那个 2.1.88 版本了,只能看到它前后的版本号:
npm view @anthropic-ai/claude-code versions --json
对应我本地查到的结果,结尾是这样的:
[
"2.1.87",
"2.1.89"
]
这个细节本身其实挺说明问题。它至少说明两件事:第一,这不是一个“网友瞎传的不存在版本”;第二,事情出来以后,官方侧很可能已经做了收口动作。至于网上流传的“1900 多个文件、五十多万行 TypeScript、几小时多少 star 和 fork”这些数字,我更愿意把它们当成公开分析里的量级参考,而不是写成铁证。因为这种数字变化太快,文章一旦写死,很容易第二天就失真。
真正让我觉得有价值的,是公开拆解里反复指向了同一个结论:Claude Code 之所以手感比很多同类工具稳,不只是因为模型更强,而是因为它外面那层 harness 也做得够厚。你可以把模型理解成发动机,但真正决定这台车能不能安全、稳定、持续跑的,是转向、刹车、仪表盘、限位器和整套车架。AI 编程工具这两年越往下做,这个感觉越明显。单独盯着模型分数看,已经不太够了。
系统提示词:分层拼装,而非大字报
我先讲第一个我觉得特别值得学的点:系统提示词不是一整段大字报,而更像一个分层拼装系统。根据这次公开出来的多份拆解,Claude Code 不是靠一份静态 system prompt 撑全场,而是把全局规则和用户上下文拆开了。上面那层是所有人共享的行为约束,比如不要编造、不要乱删文件、优先用专用工具、别做过度工程、别偷偷加用户没要求的功能。下面那层才是动态内容,比如项目里的 CLAUDE.md、用户偏好、接入的 MCP、仓库状态之类。
这个思路我觉得特别像真正做过大规模产品的人会定出来的东西。因为只要你用户足够多,就一定会碰到一个老问题:既想个性化,又想省上下文成本。静态部分共享缓存,动态部分按用户加载,这种切法其实很聪明。它不是在追求“提示词写得多厉害”,而是在解决一个更现实的问题,怎么把昂贵的上下文预算花在对当前任务真正有用的地方。
而且这也顺手解释了另一个很多人这两个月越来越能感受到的现象:为什么 skill 往往比 MCP 工具开太多更轻。公开讨论里有人提到,一个 MCP 工具定义本身就会吃掉可观的 token 预算。如果你一口气挂很多个,模型还没开始干活,上下文窗口先被工具说明书占掉一大截。这件事放在 Claude Code 这类产品上看就很清楚了,工具不是越多越先进,关键是哪些能力该被预置,哪些该被按需加载。
权限分级:把“会不会做”和“该不该做”拆开
第二个让我觉得非常像“工程成熟度差异”的点,是权限和安全边界没有交给同一个 agent 一把抓。公开视频和分析里反复提到一个 yoloClassifier,意思不是让它更 YOLO,而是让真正执行动作的主 agent 之外,再有一层单独的判断逻辑去看这个操作应不应该放行。Allow、Soft Deny、Hard Deny 这种分级,本质上是在把“会不会做”和“该不该做”拆开。
这个拆法我非常认同。因为 AI 编程工具最麻烦的事故,很多不是它不会写,而是它太敢写,太敢删,太敢一口气改掉你没让它动的东西。你如果把所有决定都交给同一个 agent,体验会很爽,但事故成本会越来越高。Claude Code 这类工具现在之所以让很多人敢开更高权限,本质上依赖的就是这种分层信任。你表面上是在和一个 agent 协作,实际上后面还有一层“别真的胡来”的刹车系统。
我自己用下来也越来越觉得,这件事比“模型答得漂不漂亮”更重要。因为对日常开发来说,信任不是一句口号,信任是我敢不敢把权限开大一点,敢不敢让它连续做几步,敢不敢把一个快要收尾的目录交给它继续跑。如果一款工具总让你担心它下一秒把文件夹清空,那它再聪明,你也不可能真把它纳入工作流。
记忆系统:知道什么不该记
第三个让我印象很深的是记忆系统的取舍。公开拆解里最妙的一点,不是它会记忆,而是它知道什么不该记。像用户偏好、行为反馈、项目级约定、外部资源引用这些东西,确实适合存进 memory,因为它们相对稳定,而且能长期影响交互质量。但代码事实本身其实不适合记忆化。函数在哪一行、某个模块现在长什么样,这些东西一旦写死到记忆里,项目一重构就会立刻变成误导。
这一点我非常认同。因为很多人一提到“更聪明的 AI”,第一反应就是让它记住更多。但真正长期用工具的人都知道,记错比记不住更麻烦。Claude Code 公开出来的这类设计,反而像是在刻意避免这种看起来聪明、实际很容易翻车的路子。偏好和判断交给记忆,代码事实回到源码实时读取。这其实是一种很克制,但非常工程化的做法。
还有一个细节也挺有意思,就是它看起来并没有把所有东西都压到“更复杂的检索系统”上。公开分析里很多人提到,Claude Code 在代码查找上大量依赖的还是文本搜索能力,本质上就是 grep 这一类朴素方法,而不是所有问题都先走向量数据库、语义索引或者厚重的 RAG。这个选择我觉得特别值得独立开发者看一眼,因为它背后的意思很明确:不是每个环节都值得被做成最复杂的那一版。模型越强,越应该把那些没必要复杂化的环节先压简单。
说到这里,这次事件对 AI 编程赛道的意义其实也慢慢清楚了。它真正公开出来的,不只是一份“别人怎么写 CLI”的代码,而是一套行业里已经被验证过的产品观:模型只是底盘的一部分,真正拉开体验差距的,是提示词系统、工具边界、安全机制、上下文压缩、记忆提取、权限分级,以及这些东西怎么被拼成一个持续可用的工作流。
所以我现在反而觉得,这次泄露对开源社区和后来者最大的价值,不是“大家突然拿到了一个 1:1 可复刻的 Claude Code”,而是很多以前只能靠猜的工程决策,现在终于有了更接近实物的参照。为什么某些工具看起来功能没少,但总是没有 Claude Code 顺手?很多时候不是少了某个按钮,而是少了那套把模型驯服成产品的中间层。
当然,这里也得泼一点冷水。就算真有很多团队因此少走弯路,也不代表下个月就会凭空冒出一个完全同级别的替代品。源码就算摊开了,构建速度、团队迭代、模型配合、产品判断,这些东西也不是 copy 一份目录结构就能补齐的。你能抄到结构,未必能抄到节奏;你能复刻某个模块,未必能复刻他们 50 多天里高频发布几十次的那种推进能力。
但对独立开发者来说,这件事依然很值得看。因为它把一个这两年越来越重要的判断摆到了台面上:下一阶段 AI 编程工具的竞争,已经不只是模型谁更强,而是谁更会做 harness engineering。谁能把 agent 的工具、权限、记忆、上下文和安全边界编排得更稳,谁就更有机会把“会回答问题的模型”做成“真能天天用的开发搭子”。
如果你对这种“模型之外的工程层”也有兴趣,可以接着看这两篇:新版 Codex 有什么变化:为什么它现在更像一个开发环境 和 AI Agent Orchestration 是什么:为什么单个 Agent 之后,下一个重点是编排。前一篇更偏产品层,后一篇更偏系统层,和这次 Claude Code 事件其实刚好能接上。
如果你希望我把这类 AI coding 工具、工作流拆解和可复用配置继续写深一点,可以直接去 About 页拿我的社交入口。后面如果我继续跟这条线,会优先整理成同一个主题簇,不会散着写。