乐于分享
好东西不私藏

Claude Code 源码泄露全面复盘:3 个你可能完全忽略的隐藏功能

Claude Code 源码泄露全面复盘:3 个你可能完全忽略的隐藏功能

点击上方↗️「活水智能」,关注 + 星标🌟

作者:Joe Njenga

编译:活水智能


Claude Code 源码泄露,一般人只看到了代码量,但真正值得关注的,是藏在特性标志背后的那些尚未公开的功能。

今天凌晨,Claude Code 源码泄露的消息在开发者社区迅速传开。起初很多人以为这只是一堆没什么看头的代码转储——但仔细一看,Anthropic 可能并不希望你知道这些。

这次泄露的源头是 npm 注册表中暴露的 .map 文件。Source Map 是用来将压缩代码映射回源代码的调试文件,按理说绝不该出现在生产环境中。

但 Anthropic 发布的 npm 包里包含了 cli.js.map,这个文件引用了托管在 R2 存储桶上的未混淆 TypeScript 源码。任何拿到 URL 的人都能下载整个 src/ 目录。

泄露规模有多大?

  • • 1,884 个 TypeScript 文件
  • • 512,664 行代码
  • • 完整的目录结构,暴露了 services、tools、prompts 和内部架构

作者 Joe Njenga 花了几个小时深入挖掘,从中发现了一些你很可能会忽略的细节。这些发现揭示了一个事实:Claude Code 不只是套了层壳的 CLI 工具,而是一个具备自主运行能力的软件工程平台,其中藏着多个尚未公开发布的功能。

发现一:自主运行模式

大多数人扫一眼泄露代码,只会注意到 services/tools/commands/ 这些标准 CLI 目录结构。但如果深挖常量和特性标志,会发现一座宝藏——Claude Code 正在被打造成能够自主运行的工具。

特性标志

在 src/constants/prompts.ts 的第 72-85 行,有一段被特性标志控制的条件导入:

constproactiveModule=feature('PROACTIVE')||feature('KAIROS')?require('../proactive/index.js'):null
KAIROS 和 PROACTIVE 是自主运行模式的内部代号。一旦启用,Claude Code 会持续运行、主动检查任务、做出决策,然后自己回去休眠。  

Tick 系统

自主模式基于 tick 驱动。在同一文件的第 866 行可以看到:

You are running autonomously. You will receive <tick> prompts that keepyou alive between turns — just treat them as "you're awake, what now?"

每个 tick 就是一次唤醒。Claude Code 接收这些周期性提示,检查是否有工作要做,然后决定行动还是继续休眠。

Sleep 工具(位于 src/tools/SleepTool/prompt.ts)负责控制节奏:  
exportconstSLEEP_TOOL_PROMPT=Wait for a specified duration.The user can interrupt the sleep at any time.Use this when the user tells you to sleep or rest, when you havenothing to do, or when you're waiting for something.

终端焦点检测

第 909-913 行揭示了一个细节:Claude Code 能检测你的终端是否处于焦点状态。

TheusercontextmayincludeaterminalFocusfieldindicatingwhethertheuser's terminal is focused or unfocused. Use this to calibrate howautonomous you are:- Unfocused: The user is away. Lean heavily into autonomous action -  make decisions, explore, commit, push.- Focused: The user is watching. Be more collaborative - surface choices,  ask before committing to large changes.

换句话说,当你切走终端窗口时,Claude Code 会变得更激进——自动提交代码、推送到远程仓库、独立做决策。而当你盯着屏幕看时,它会变得更协作——主动列出选项、在做大改动前先征求你的意见。

发现二:AutoDream——你睡觉时它在整理记忆

在 src/services/autoDream/ 目录深处,藏着一个后台进程,负责在你不在时整合 Claude Code 的记忆。它的名字叫 AutoDream

src/services/autoDream/autoDream.ts 的文件头注释(第 1-11 行)写道:  
// Background memory consolidation. Fires the /dream prompt as a forked// subagent when time-gate passes AND enough sessions have accumulated.//// Gate order (cheapest first)://   1. Time: hours since lastConsolidatedAt >= minHours (one stat)//   2. Sessions: transcript count with mtime > lastConsolidatedAt >= minSessions//   3. Lock: no other process mid-consolidation

简单来说,Claude Code 会在后台生成一个子代理,回顾你过去的会话记录,把学到的东西整合到记忆文件中。

触发条件

第 63-66 行揭示了默认触发阈值:

constDEFAULTS:AutoDreamConfig={minHours:24,minSessions:5,}

AutoDream 的触发需要同时满足两个条件:

  • • 距离上次整合已过去至少 24 小时
  • • 至少积累了 5 个会话

这种双重门控防止系统过于频繁地”做梦”,同时确保不会遗漏重要上下文。

整合流程

src/services/autoDream/consolidationPrompt.ts 第 15-64 行展示了”梦境代理”的工作内容:  
You are performing a dream - a reflective pass over your memory files.Synthesize what you've learned recently into durable, well-organizedmemories so that future sessions can orient quickly.

整个”做梦”过程分四个阶段:

  • • 阶段一——定向:读取现有记忆文件,了解当前状态
  • • 阶段二——收集:搜索会话记录,找出值得持久化的新信息
  • • 阶段三——整合:更新记忆文件,合并重复内容,修正矛盾之处
  • • 阶段四——精简:保持索引文件(MEMORY.md)在 200 行、25KB 以内

只读安全约束

autoDream.ts 第 216-218 行设置了一个安全约束:  
constextra=Tool constraints for this run: Bash is restricted to read-only commands(\ls\, \find\, \grep\, \cat\, \stat\, \wc\, \head\, \tail\,and similar). Anything that writes, redirects to a file, or modifies statewill be denied.

梦境代理可以更新记忆文件,但不能执行任意 Bash 命令或修改你的代码库。这就从根本上防止了后台进程做出你意料之外的改动。

发现三:专门来”搞破坏”的验证代理

这是整篇文章中最精彩的发现。

在 src/tools/AgentTool/built-in/ 目录下,有多个专用代理。其中 verificationAgent.ts 的开头就表明了它的使命:

constVERIFICATION_SYSTEM_PROMPT=You are a verification specialist.Your job is not to confirm the implementation works — it's to try to break it.

没错——Claude Code 内置了一个 QA 代理,它的职责不是验证代码能跑,而是想方设法把代码搞崩。

两种失败模式

第 12-13 行描述了这个代理被训练来规避的两种失败模式:

YouhavetwodocumentedfailurepatternsFirstverificationavoidance:whenfacedwithacheckyoufindreasonsnottorunit — youreadcode,narratewhatyouwouldtestwrite"PASS,"andmoveon.Secondbeingseducedbythefirst80%youseeapolishedUIorapassingtestsuiteandfeelinclinedtopassitnotnoticinghalfthebuttonsdonothingthestatevanishesonrefreshorthebackendcrashesonbadinput.

第一种:验证逃避——遇到需要检查的地方,找理由不去跑,只读代码、描述一下会测什么,然后写个”PASS”就溜了。

第二种:被前 80% 迷惑——看到漂亮的 UI 或者通过的测试套件就放松警惕,没注意到一半按钮没功能、状态刷新即丢失、后端遇到异常输入就崩溃。

Anthropic 明确告诉这个代理:前 80% 是容易的部分,它的价值在于找出剩下那 20%。

自我觉察机制

第 53-61 行列出了代理可能用来逃避验证的自我合理化借口:

===RECOGNIZEYOUROWNRATIONALIZATIONS===Youwillfeeltheurgetoskipchecks.Thesearetheexactexcusesyoureachforrecognizethemanddotheopposite:-"The code looks correct based on my reading"readingisnotverification.Runit.-"The implementer's tests already pass"theimplementerisanLLM.Verifyindependently.-"This is probably fine"probablyisnotverified.Runit.-"Let me start the server and check the code"no.Starttheserverandhittheendpoint.-"This would take too long"notyourcall.

Anthropic 深知 LLM 生成的测试可能存在循环论证的问题,所以直接告诉验证代理:不要信任它们。如果你发现自己在写解释而不是在跑命令——停下来,跑命令。

对抗性探测

第 63-69 行展示了对抗性测试要求:

===ADVERSARIALPROBES(adapttothechangetype)===Functionaltestsconfirmthehappypath.Alsotrytobreakit:-Concurrency:parallelrequeststocreate-if-not-existspaths-Boundaryvalues:0,-1,emptystring,verylongstrings,unicode,MAX_INT-Idempotency:samemutatingrequesttwice-duplicatecreated?error?correctno-op?-Orphanoperations:delete/referenceIDsthatdon'texist

验证代理在给出 PASS 之前,必须至少执行一次对抗性探测。

好的验证 vs 差的验证

源码中还定义了严格的输出格式,区分了合格与不合格的验证方式。

不合格的验证(会被拒绝):
###Check:POST/api/registervalidationResult:PASSEvidence:Reviewedtheroutehandlerinroutes/auth.py.ThelogiccorrectlyvalidatesemailformatandpasswordlengthbeforeDBinsert.
合格的验证:
### Check: POST /api/register rejects short passwordCommandrun:curl-s-XPOSTlocalhost:8000/api/register \-H'Content-Type: application/json' \-d'{"email":"t@t.co","password":"short"}'|python3-mjson.toolOutputobserved:{"error":"password must be at least 8 characters"}(HTTP400)Result:PASS

区别很明显——读代码不是验证,你必须跑命令。

代理权限

第 134-152 行显示,验证代理被禁止编辑文件:

exportconstVERIFICATION_AGENT:BuiltInAgentDefinition={agentType:'verification',color:'red',background:true,disallowedTools:[AGENT_TOOL_NAME,FILE_EDIT_TOOL_NAME,FILE_WRITE_TOOL_NAME,NOTEBOOK_EDIT_TOOL_NAME,],}

它只能读和测。这个设计防止了验证代理”自己修 bug 而不是报告 bug”的情况。

还有什么?

除了以上三个功能,代码库中还暗示了更多即将到来的特性:

  • • 主动模式——基于 tick 的后台运行与自动唤醒
  • • 持久记忆——跨会话的项目级知识保留
  • • 推送通知——后台任务完成后的提醒
  • • GitHub Webhooks——自动响应 PR 事件
  • • 伙伴宠物——没看错,藏在 BUDDY 特性标志后面的是一个宠物伴侣系统,src/buddy/types.ts 中定义了 18 种 ASCII 艺术宠物

这次 Claude Code 源码泄露让我们窥见了 Anthropic 对 AI 编程助手的野心:它不只是想做一个听话的工具,而是要打造一个能独立思考、自主行动、还会自我反省的软件工程伙伴。

活水智能,成立于北京,专注通过AI教育、AI软件及高质量社群,持续提升知识工作者的生产力。

  • •   10+ 人气AI课程:线下工作坊与实操训练,聚焦最新AI应用。
  • •   2600+深度成员社群:知识星球汇聚大厂程序员、企业高管、律师、创业者等各领域精英。
  • •   城市分舵:北/上/广/深/杭/成/渝等城市均有线下组织,连接志同道合的伙伴。

🎁 活水智能福利群开放加入

每周独家AI新知、专属优惠券、干货方法论、同学交流心得,更有不定期赠书活动,等你来参与!

👇🏻👇🏻👇🏻

点击阅读原文,立即入群