Claude Code泄露源码的3个发现
今天Claude的源码泄露揭示了你可能很快会在Claude Code中看到的一些罕见的即将推出的功能。
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
今天,我们一觉醒来就发现了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')
: null
KAIROS和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":"t@t.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艺术宠物:
原文链接: I Did Claude Code Source Code Leak Full Review (And Found 3 Features You Might Miss)
汇智网翻译整理,转载请标明出处