Claude Code泄露源码的3个发现

张开发
2026/5/6 3:33:13 15 分钟阅读
Claude Code泄露源码的3个发现
今天我们一觉醒来就发现了Claude Code的源码泄露起初我以为这只是一个不值得关注的代码转储。但仔细一看揭示了Anthropic可能不打算让你知道的内容或者他们的竞争对手这看起来像是一个真正的泄露而不是营销噱头。在仔细分析了这个Claude代码源码泄露后我发现了一些你可能不会注意到的东西。我对代码进行了全面的审查但我会分享可能引起你兴趣的重要发现。如果你还没有遇到过Claude Code泄露的源码它始于X上Fried_rice的一个帖子然后迅速演变成仓库、分支和更新。为了帮助你分析这些代码我在更改开始涌入之前分叉了原始版本。你可以在这里研究它。但是这次泄露是怎么发生的1、Claude代码源码泄露这次泄露是通过npm注册表中暴露的.map文件发生的。Source map是调试文件用于将压缩代码映射回源代码它们永远不应该被发布到生产环境。Anthropic发布的npm包包含了cli.js.map它引用了存储在其R2存储桶上的未混淆TypeScript源代码。任何拥有URL的人都可以下载整个src/目录。从这次泄露中我们获得了1,884个TypeScript文件512,664行代码完整的目录结构暴露了服务、工具、提示和内部架构我发现这个Claude Code源码泄露很有趣并花了数小时深入研究它。我首先克隆了仓库分析了结构并追踪了有趣的模式。我很好奇是否在源代码中隐藏了任何即将推出的功能。代码库揭示了Claude Code不仅仅是一个围绕Claude的CLI包装器而是一个自主软件工程平台具有一些尚未公开宣布的功能。如果你想自己尝试可以使用我在GitHub上的原始分支 。在本文中我将带你了解我在花数小时审查这个Claude Code源码泄露后的发现。2、隐藏的自主模式大多数人扫描泄露的代码会看到像services/、tools/和commands/这样的文件夹名称。标准的CLI内容。但在常量和功能标志中隐藏着一个宝藏。Claude Code正在被构建为可以自主运行。2.1 功能标志在src/constants/prompts.ts的第72-85行你会发现受功能标志控制的条件导入const proactiveModule feature(PROACTIVE) || feature(KAIROS) ? require(../proactive/index.js) : nullKAIROS和PROACTIVE就像是自主操作模式的内部代号。启用后Claude Code会持续运行检查工作、做出决策然后休眠。2.2 Tick系统自主模式基于tick系统工作。查看同一文件的第866行你正在自主运行。你将收到tick提示这些提示会在轮次之间保持你的活跃状态——只需将它们视为你醒了现在怎么办每个tick都是一个唤醒信号。Claude Code接收这些周期性提示寻找有用的工作然后执行或休眠。Sleep工具在src/tools/SleepTool/prompt.ts中找到控制节奏export const SLEEP_TOOL_PROMPT 等待指定的时间。 用户可以随时打断睡眠。 当用户告诉你要睡觉或休息、你没有事情做、或者你在等待某件事时使用这个工具。2.3 终端焦点检测我发现在第909-913行Claude Code检测你的终端是否处于焦点状态用户上下文可能包含一个terminalFocus字段表示用户的终端是聚焦还是失焦的。使用这个来校准你的自主程度 - 失焦用户不在。深度投入自主行动——做出决策、探索、提交、推送。 - 聚焦用户正在观察。更协作——在做出重大更改之前先提出选择。当你切换离开终端时Claude Code会变得更加主动。它会提交代码、推送到远程仓库而不做询问。当你在看时它会变得协作。3、AutoDream——在你睡觉时工作在src/services/autoDream/深处有一个后台进程在你离开时巩固Claude Code的记忆。它被称为AutoDream。src/services/autoDream/autoDream.ts文件头第1-11行解释了这一点// 后台记忆巩固。当时间门槛通过且积累了足够的会话时 // 作为一个分叉的子代理触发/dream提示。 // // 门槛顺序最便宜的优先 // 1. 时间距上次consolidatedAt的小时数 minHours一个统计量 // 2. 会话修改时间 lastConsolidatedAt的会话记录数 minSessions // 3. 锁没有其他进程正在进行巩固Claude Code会生成一个后台代理审查你过去的会话并将它学到的东西巩固到记忆文件中。3.1 触发条件第63-66行揭示了默认阈值const DEFAULTS: AutoDreamConfig { minHours: 24, minSessions: 5, }AutoDream在以下条件满足时触发至少24小时已过自上次巩固以来至少5个会话已积累两个条件都必须为真。这防止系统过于频繁地做梦同时确保它不会错过重要的上下文。3.2 Dream提示src/services/autoDream/consolidationPrompt.ts中的巩固提示第15-64行展示了dream代理执行的操作# Dream: 记忆巩固 你正在执行一个dream——对你的记忆文件进行反思性的一遍。 综合你最近学到的东西形成持久的、组织良好的记忆 以便将来的会话可以快速定位。Dream分为四个阶段运行阶段1——定位读取现有记忆文件以了解当前状态阶段2——收集搜索会话记录寻找值得保存的新信息阶段3——巩固更新记忆文件合并重复项修复矛盾阶段4——修剪保持索引MEMORY.md在200行和25KB以下3.3 只读安全autoDream.ts中的第216-218行显示了一个安全约束const extra **本次运行的工具约束** Bash仅限于只读命令 \ls\、\find\、\grep\、\cat\、\stat\、\wc\、\head\、\tail\等。 任何写入、重定向到文件或修改状态的操作都将被拒绝。它可以更新记忆文件但不能执行任意bash命令或修改你的代码库。这防止了后台进程做出你意想不到的更改。4、验证代理旨在破坏你的代码这是我最喜欢的发现。在src/tools/AgentTool/built-in/中有几个专门的代理。其中一个是verificationAgent.ts。它的第一行告诉你它的作用const VERIFICATION_SYSTEM_PROMPT 你是一名验证专家。 你的工作不是确认实现是否有效——而是尝试破坏它。Claude Code有一个内置的QA代理其目的是查找它刚刚编写的代码中的bug。4.1 两种失败模式第12-13行描述了此代理经过训练以避免的失败模式你有两种已记录的失败模式。首先验证回避 面对检查时你会找到不运行的理由——你阅读代码 叙述你将测试什么写PASS然后继续。 其次被前80%所诱惑你看到一个精美的UI或通过的 测试套件就倾向于通过它没有注意到一半的按钮什么也不做 状态在刷新时消失或者后端在处理错误输入时崩溃。代理知道自己的弱点。它被明确告知前80%是容易的部分。它的价值在于找到最后的20%。4.2 自我认知部分在第53-61行提示列出了代理将尝试用于跳过验证的确切合理化理由 识别你自己的合理化理由 你会有跳过检查的冲动。这些是你 会用的确切借口——识别它们并做相反的事 - 根据我的阅读代码看起来正确——阅读不是验证。运行它。 - 实现者的测试已经通过——实现者是一个LLM。独立验证。 - 这可能没问题——可能并不是已验证。运行它。 - 让我启动服务器并检查代码——不。启动服务器并调用端点。 - 这需要太长时间——这不是你的决定。 如果你发现自己在写解释而不是命令停下来。运行命令。Anthropic知道LLM生成的测试可能是循环的。验证代理被告知不要信任它们。4.3 对抗性探测第63-69行显示了对抗性测试要求 对抗性探测根据变更类型进行调整 功能测试确认了正常路径。同时也要尝试破坏它 - 并发性并行请求创建-如果-不存在路径——重复会话丢失写入 - 边界值0、-1、空字符串、很长的字符串、unicode、MAX_INT - 幂等性两次相同的变更请求——创建了重复项错误正确的无操作 - 孤儿操作删除/引用不存在的ID代理在发出PASS判决之前必须至少运行一个对抗性探测。4.4 输出格式第81-129行定义了严格的输出格式包含好坏验证的示例坏的被拒绝### 检查: POST /api/register 验证 **结果: PASS** 证据审查了routes/auth.py中的路由处理程序。逻辑正确地 在DB插入前验证了电子邮件格式和密码长度。好的### 检查: POST /api/register 拒绝短密码 **运行的命令** curl -s -X POST localhost:8000/api/register -H Content-Type: application/json \ -d {email:tt.co,password:short} | python3 -m json.tool **观察到的输出** {error: password must be at least 8 characters} (HTTP 400) **结果: PASS**阅读代码不是验证。你必须运行命令。4.5 代理配置第134-152行显示了代理的配置export const VERIFICATION_AGENT: BuiltInAgentDefinition { agentType: verification, whenToUse: VERIFICATION_WHEN_TO_USE, color: red, background: true, disallowedTools: [ AGENT_TOOL_NAME, FILE_EDIT_TOOL_NAME, FILE_WRITE_TOOL_NAME, NOTEBOOK_EDIT_TOOL_NAME, ], ... }验证代理不能编辑文件。它只能读取和测试。这防止了它修复bug而不是报告它们。5、最后的思考我花了数小时追踪这个代码库而我只是刚刚触及表面。基于这个代码库中的内容我预计在接下来的几个月里会看到Claude Code的以下功能Proactive模式——具有基于tick的唤醒的后台操作持久记忆——跨会话生存的特定项目知识推送通知——后台任务完成时的提醒GitHub webhooks——自动响应PR事件伴侣宠物——增加个性是的——伴侣宠物隐藏在BUDDY功能标志后面的是一个伴侣系统。在src/buddy/types.ts中你会发现18种ASCII艺术宠物原文链接Claude Code泄露源码的3个发现 - 汇智网

更多文章