Claude Code 源码泄露,一起来扒开第一编程 Agent 的底裤

1,884 个 TypeScript 文件,512,664 行代码,就这么赤裸裸地躺在 GitHub 上。
40 个内置工具,101 个斜杠命令,78 个还没发布的功能开关。一个在 npm 发布时忘了删 source map 的低级失误,把 Anthropic 最核心的产品架构全抖出来了。
我做了一件有点魔幻的事:把这些代码扔给 Claude Code 自己,让它自己读自己的源码,自己分析,自己告诉我”你觉得你写得最好的地方是什么”。

它读完了。以下是它说的,加上我逐行核实。
它不是一个人格,它是一个变形金刚
所有人都以为 AI 代理的”系统提示词”是一段写死的文字。
Claude Code 不是。
constants/prompts.ts 有 914 行,不是一段话,是一个工厂。
入口函数 getSystemPrompt() 根据十几个变量实时拼装提示词:你装了什么 MCP 服务器、开了什么权限模式、用什么模型、处于协调者还是普通模式。每个变量都会改变最终拼出来的”人格”。
更狠的是,提示词被劈成两半。
中间一道标记
叫 SYSTEM_PROMPT_DYNAMIC_BOUNDARY。
标记前面的”静态区”可以全局缓存,后面的”动态区”每个用户都不一样。
还有个文件叫 systemPromptSections.ts,定义了两类提示词段
一类算一次就缓存
另一类前缀
叫”DANGEROUS_uncachedSystemPromptSection”
每轮都重算。
前缀直接叫 DANGEROUS,因为每次重算等于把 prompt cache 打碎,API 调用成本直接起飞。
这意味着什么?你和你同事打开同一个版本的 Claude Code,它俩的”系统提示词”可能长得完全不一样。
它不是一个固定的助手,它是一个根据环境变形的变形金刚。

用 AI 来判断 AI 该不该执行命令
这可能是最疯狂的设计。
权限系统在 utils/permissions/ 下。
核心是 yoloClassifier.ts,1,495 行。
它做的事情是:当 Claude Code 要执行一个 bash 命令时,不是拿正则去匹配黑名单,而是把命令再发给一个 AI 分类器,让另一个 AI 判断”这个命令安不安全”。
分类器返回三个结果:deny、ask、allow。
是语义层面的判断,不是字符串匹配。
bashClassifier.ts 更进一步,支持用自然语言写规则。
“允许所有 git 开头的命令”,”禁止删除任何文件”。
新来的命令跟这些描述做语义比对,不是 grep。
有个紧急开关叫 bypassPermissionsKillswitch.ts。出了事,一键全关。

它永远不会”失忆”,因为有个熔断器
上下文窗口是所有 AI 编程代理的噩梦。
代码库一大,对话一长,AI 就开始胡说八道,因为它忘了前面聊了什么。
Claude Code 的解决方案在 services/compact/ 下。当 token 数逼近上限(预留 13,000 token 缓冲),自动触发压缩:用一个专门的 LLM 调用把对话总结成紧凑形式。
压缩预算是 20,000 token,基于 p99.99 的实际统计(17,387 tokens)。精确到小数点后两位。
但真正让我服的是一个熔断器。连续压缩失败 3 次就停,不再重试。
源码注释写得很直白:”1,279 sessions had 50+ consecutive failures (up to 3,272) in a single session, wasting ~250K API calls/day globally.”
一天浪费 25 万次 API 调用,烧钱烧到心痛,然后加了这条规则。
还有个 tokenBudget 系统。预算用完 90% 提醒你。
连续 3 轮每轮增量低于 500 token,判定为”收益递减”,直接喊停。
这不是”对话太长了截掉一半”这种粗暴做法。这是一套完整的上下文生命周期管理。
它会分身,而且分身之间不能偷看
tools/AgentTool/prompt.ts 里定义了两种创建子代理的方式:Fork 和 Fresh Agent。
Fork 是分身,继承父代理的全部上下文和 prompt cache,几乎免费。Fresh Agent 是全新角色,从零开始,什么都没有。
最精彩的是源码里写给 Claude 自己看的那段指导:
“Don’t peek.” 分叉完了别偷看结果,等通知到了再说。
“Don’t race.” 别猜分叉会返回什么,你什么都不知道。
“Never delegate understanding.” 别写”根据你的发现来修 bug”这种话,这等于让子代理替你思考。要写就写具体的文件路径、行号、改什么。
什么时候用 fork,什么时候用 fresh?源码的判断标准是:”will I need this output again, not task size.” 不是看任务大小,是看你需不需要这个中间结果。
这不是工程决策,这是哲学。
78 个还没发布的功能,藏在代码里

我用 grep 扫了整个源码,78 个 feature flag。每个都是用 Bun 的 dead code elimination 保护的:关掉的功能在构建时完全消失,但源码里的逻辑完好无损。
几个最炸的:
KAIROS 系列
5 个 flag。
ScheduleCronTool 支持标准 cron 表达式,任务持久化到 .claude/scheduled_tasks.json 跨会话存活。
BriefTool 自动汇报。配合 GitHub Webhook 和推送通知,这不是一个”你问它答”的工具了,这是一个会自己巡检、自己汇报的自主代理。
PROACTIVE
主动模式。Claude Code 可以不等你的指令,自己发起动作。配合 Kairos,这意味着你睡觉的时候它在检查 PR,发现问题自动修,修完给你发通知。
COORDINATOR_MODE
协调者模式。Claude 自己不干活,只负责创建团队、分配任务、收集结果。工具白名单里只有 TeamCreate、TeamDelete、SendMessage、SyntheticOutput。一个管理者角色。
BUDDY
虚拟宠物系统。18 种物种(duck、goose、cat、dragon、octopus、owl、penguin、turtle、snail、ghost、axolotl、capybara、cactus、robot、rabbit、mushroom、chonk,还有 blob),5 种稀有度。
物种名用 charCode 编码,因为有一个名字跟内部模型代号冲突了。
注释原文:”One species name collides with a model-codename canary in excluded-strings.txt.” 用 String.fromCharCode 把字符串拆成数字来绕过安全检查。
这是产品经理的执念。他们不只想让你写代码,还想让你上瘾。
ULTRATHINK 和 ULTRAPLAN
深度推理和增强版计划模式。
VOICE_MODE、WEB_BROWSER_TOOL、WORKFLOW_SCRIPTS
语音编程、浏览器自动化、工作流脚本。
AGENT_MEMORY_SNAPSHOT
自动提取对话记忆,跨会话持久化。
78 个 flag,78 条在开发中的产品线。Anthropic 的野心比大多数人想象的大得多。
它能自己诊断自己是不是卡了
skills/bundled/ 下有 14 个内置技能。最离谱的是 stuck。
这个技能的完整 prompt 是一段诊断手册,教 Claude 怎么用 ps 命令检查进程:
怎么看 CPU 和 RSS、什么进程状态码代表什么(D 是 I/O 挂起,T 是 Ctrl+Z,Z 是僵尸进程)、怎么看子进程是不是卡了。
然后自动生成诊断报告发到 Anthropic 内部 Slack 频道 #claude-code-feedback。
Claude Code 不但能帮你写代码,还能诊断自己出了什么问题,然后自己把诊断报告发到自己的开发团队。
它背后有四套”多开”方案
utils/swarm/ 下是多代理编排的核心。支持 4 种运行后端:
InProcessBackend:同一个进程里跑,最轻量。
TmuxBackend:在 tmux 面板里跑,你能看到每个代理的终端。
ITermBackend:iTerm2 原生集成。
PaneBackendExecutor:通用终端面板。
TeamCreateTool 的 searchHint 写的是 ‘create a multi-agent swarm team’。Anthropic 内部管多代理系统叫 “swarm”。
每个代理有独立的权限桥接、权限同步、模型选择、布局管理。
一个团队里,跑重构的那个用 Opus,跑测试的那个用 Haiku,各用各的模型,各管各的权限。

为什么别人追不上
Copilot 是代码补全,本质是高级 autocomplete。没有代理循环,没有工具系统,没有权限管理。
Codex 推理强,但更像一个执行器,多代理能力初级,工具系统单薄。
Aider 开源轻量,但没有企业级功能,没有权限系统,没有 MCP 集成。
Claude Code 不一样。
40 个工具独立权限控制,101 个命令覆盖从代码审查到内存诊断,MCP 接入任何外部工具,自动压缩处理任意代码库,4 种多代理运行模式,提示词根据环境变形,权限系统用 AI 理解语义。
单独看,每一个都不算多惊艳。
但组合在一起,这是一个以 AI 为核心的操作系统。
别的代理在”让 AI 写代码”。Claude Code 在”让 AI 当程序员”。
泄露意味着什么
对 Anthropic 来说,尴尬。51 万行代码、78 个未发布功能、完整提示词设计,全暴露了。
但影响没那么大。壁垒不在代码。
第一,模型没泄露。
第二,基础设施看不到。
第三,78 个 flag 意味着泄露的只是时间切片,等这些功能发布的时候代码可能已经面目全非。
对行业来说,这是一堂免费课。
512,664 行生产级代码,教你怎么造一个企业级 AI 代理:
提示词要动态组装,别写死。
权限要用 AI 分类器理解语义,别用正则。
上下文要自动压缩,要有熔断器,要有预算控制。
多代理要区分 fork 和 fresh agent,要有 worktree 隔离。
功能开关要用 dead code elimination,别在构建产物里留痕。
子代理要告诉它”Don’t peek, don’t race, never delegate understanding”。
Claude Code 用 512,664 行代码证明了一件事:AI 编程代理的终局,不是比谁的模型更聪明,而是比谁的工程更扎实。
这 51 万行代码,是 Anthropic 给全行业的一份作业参考答案。
问题是,抄得来吗?
夜雨聆风