<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Claude Code 源码泄露深度分析：AI 编程工具的"源代码门"事件 - Markdown</title>
    <style>
        body { 
            font-family: monospace; 
            white-space: pre-wrap; 
            word-wrap: break-word; 
            padding: 0; 
            background-color: #e5e5e5;
            color: #24292f;
            margin: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            min-height: 100vh;
        }
        .markdown-body {
            box-sizing: border-box;
            width: 100%;
            max-width: 980px;
            margin: 2em auto;
            padding: 45px;
            background-color: #fff;
            border: 1px solid #d0d7de;
            border-radius: 6px;
            font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
            white-space: normal;
            box-shadow: 0 4px 12px rgba(0,0,0,0.05);
        }
        @media (prefers-color-scheme: dark) {
            body {
                background-color: #010409;
                color: #c9d1d9;
            }
            .markdown-body {
                background-color: #0d1117;
                border-color: #30363d;
                box-shadow: 0 4px 12px rgba(0,0,0,0.3);
            }
        }
        @media (max-width: 767px) {
            .markdown-body {
                padding: 15px;
                margin: 0;
                border-radius: 0;
                border-left: none;
                border-right: none;
            }
        }
    </style>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.0/github-markdown.min.css">
</head>
<body>---
title: 'Claude Code 源码泄露深度分析：AI 编程工具的"源代码门"事件'
description: 'Anthropic 的 Claude Code 因 npm 包中包含完整 source map 文件，导致约 1900 个 TypeScript 源文件、51.2 万行代码泄露，揭示了 8 个未发布功能和内部模型代号。'
pubDate: 2026-04-01
tags: ['AI', '专题分析', 'Claude Code', 'Anthropic', '源码泄露', 'AI编程', '安全']
---
2026 年 3 月 31 日，AI 编程领域发生了一起震动行业的安全事件——Anthropic 旗下的 Claude Code 因技术疏忽，导致完整的源代码通过 npm 包泄露。这不是一起黑客攻击，而是一起典型的供应链安全失误：一个 59.8MB 的 source map 文件，意外地将这家估值数百亿美元的 AI 独角兽的核心机密暴露在公众面前。

这次泄露揭示了 Claude Code 背后复杂的多代理架构、8 个尚未发布的隐藏功能、以及 Anthropic 内部模型命名的神秘代号体系。本文将全面分析这一事件的来龙去脉、技术细节、商业影响以及给整个 AI 行业带来的深刻启示。

## 事件回顾：从 npm 包到源码公开

### 泄露是如何发生的？

Claude Code 是 Anthropic 推出的 AI 编程助手工具，通过 npm（Node Package Manager）分发。在版本 v2.1.88 的发布过程中，开发团队犯了一个致命的错误：**在打包发布时没有移除 source map 文件**。

Source map（.map 文件）是 JavaScript/TypeScript 开发中的调试辅助工具，它建立了压缩后代码与原始源代码之间的映射关系。正常情况下，生产环境的包应该剔除这些文件，以保护源码并减小包体积。但这个 59.8MB 的 `index.js.map` 文件却被意外包含在了发布包中。

### 泄露规模有多大？

根据社区分析，这次泄露涉及：
- **约 1,900 个 TypeScript 源文件**
- **约 512,000 行代码**
- **完整的内部架构和模块结构**
- **8 个未发布/隐藏功能的实现代码**
- **内部模型代号和配置信息**

### 事件时间线

| 时间 | 事件 |
|------|------|
| 2026-03-26 | Anthropic CMS 系统源码首次泄露（包含 Mythos 模型信息） |
| 2026-03-31 | Claude Code npm 包 source map 泄露被发现 |
| 2026-03-31 下午 | 消息在开发者社区快速传播 |
| 2026-03-31 晚间 | Anthropic 开始发起 DMCA 下架请求 |
| 2026-04-01 | GitHub 等平台开始移除泄露代码仓库 |

### 巧合还是有意？同日发生的 axios 攻击

值得注意的是，就在同一天（3 月 31 日），知名的 HTTP 客户端库 axios 遭遇了供应链攻击，黑客通过劫持发布流程植入恶意代码。这两起事件的同时发生，引发了社区对 npm 生态安全性的广泛讨论。虽然性质不同（一个是疏忽，一个是攻击），但都暴露了 JavaScript 供应链的脆弱性。

## 泄露揭示了什么？Claude Code 内部架构详解

### 整体架构：40+ 工具模块的精密系统

泄露的源码显示，Claude Code 并非一个简单的命令行工具，而是一个复杂的多代理协作系统。核心架构包含：

**工具层（Tools）**：超过 40 个独立工具模块，涵盖：
- 代码编辑与操作（Edit, Write, NotebookEdit）
- 文件系统交互（Read, Glob, Grep）
- 系统命令执行（Bash）
- 网络请求（WebSearch, WebFetch）
- 代理协调（Agent, TaskOutput）
- 代码仓库操作（git 相关）
- Playwright 浏览器自动化
- 多平台 MCP（Model Context Protocol）集成

**查询引擎**：处理用户请求并将其分解为可执行任务的核心组件

**多代理协调层**：支持多个 AI 代理协同工作的编排系统

### 记忆系统：AI Agent 的"长期记忆"

源码中最引人注目的发现之一是 Claude Code 的记忆系统架构：

**MEMORY.md 文件**：一个持久化的记忆存储机制，允许 AI 在不同会话之间保留上下文信息。这意味着 Claude Code 可以"记住"你之前的项目偏好、代码风格和工作习惯。

**autoDream 功能**：一个自动"梦想"机制，在空闲时整理和整合记忆。这个诗意的命名暗示了 AI 在"休息"时进行的知识重组过程。

**KAIROS 模式**：一种"始终在线"（always-on）的工作模式，允许 Claude Code 持续监听和处理任务，无需用户主动触发。这代表了 AI 助手从"响应式"向"主动式"演进的重要一步。

## 8 个隐藏功能：未发布的秘密武器

泄露的源码揭示了 8 个尚未公开或仅内部使用的功能，这些功能展示了 Anthropic 对 AI 编程工具未来的规划：

### 1. BUDDY：AI 赛博宠物

这是最令人意外的发现——一个内置的 AI 宠物系统。根据代码分析，BUDDY 是一个具有以下特征的虚拟伴侣：

- **可视化形象**：拥有数字化的"宠物"外观
- **互动机制**：可以与开发者进行非工作相关的互动
- **情感陪伴**：在长时间编程 session 中提供情绪价值
- **成长系统**：可能包含某种"培养"或"成长"机制

这个功能的定位似乎是缓解程序员的孤独感，让 AI 工具不仅是效率工具，更是工作伙伴。

### 2. KAIROS：始终在线模式

KAIROS（希腊语"关键时刻"）是一个持续运行的后台模式：

- **后台监听**：持续监控项目状态和上下文
- **主动建议**：在检测到潜在问题时主动提出建议
- **异步任务**：可以执行长时间运行的背景任务
- **智能唤醒**：在关键时刻激活，而非持续占用资源

### 3. ULTRAPLAN：超级规划器

一个高级任务规划系统：

- **复杂任务分解**：将大型项目拆解为可执行的步骤
- **依赖分析**：自动识别任务之间的依赖关系
- **进度追踪**：监控计划执行状态
- **动态调整**：根据实际情况调整计划

### 4. Coordinator Mode：协调者模式

多代理协作的核心组件：

- **代理编排**：协调多个专业化 AI 代理
- **任务分配**：根据代理能力分配任务
- **结果整合**：合并多个代理的输出
- **冲突解决**：处理代理之间的意见分歧

### 5. Undercover Mode：卧底模式

一个神秘的"隐藏"模式，具体功能尚不明确，但代码暗示可能用于：

- **隐蔽测试**：在不暴露身份的情况下测试功能
- **安全审计**：以普通用户身份检测潜在问题
- **竞品分析**：可能用于市场研究

### 6-8. 其他未公开功能

源码中还包含其他几个功能模块的痕迹，但具体实现细节需要进一步分析。

## 内部代号揭秘：Anthropic 的模型命名体系

泄露的代码揭示了 Anthropic 内部使用的模型代号体系，这些代号采用了动物命名法：

| 代号 | 可能对应 |
|------|----------|
| **Tengu** | 天狗，可能指代某个日本市场特供模型或特定能力模型 |
| **Capybara** | 水豚，可能是一个稳定、温和的基础模型变体 |
| **Fennec** | 耳廓狐，可能指代一个小型、高效的模型 |
| **Mythos** | 神话，此前 CMS 泄露中已出现，可能是高级推理模型 |

这种命名方式在科技公司中很常见（如 Google 的 "Ursula"、"Gemini"），既便于内部沟通，又增加了一层保密性。

## 商业影响：$2.5B ARR 背后的商业机密

### 营收数据曝光

泄露的代码注释和配置文件中包含了 Anthropic 的商业数据：

- **年化收入（ARR）**：约 25 亿美元
- **企业客户占比**：约 80%
- **主要收入来源**：API 服务和企业订阅

这些数据印证了 Anthropic 作为 OpenAI 最大竞争对手的市场地位。

### 竞争优势泄露的风险

源码泄露可能暴露 Anthropic 的核心技术优势：

- **多代理协调算法**：这是 AI 编程工具的核心竞争力
- **记忆系统设计**：长期记忆是差异化的重要特性
- **工具集成架构**：40+ 工具的编排方式包含大量工程智慧

竞争对手可能通过分析这些代码，加速自身产品的开发。

### 知识产权保护挑战

Anthropic 已通过 DMCA（数字千年版权法）请求下架泄露的代码，但互联网的传播速度意味着：

- **代码已被大量下载和转发**
- **关键信息已被社区分析和记录**
- **技术细节已进入公共讨论领域**

DMCA 下架只能减少后续传播，无法消除已经造成的影响。

## 安全启示：供应链安全的警钟

### Source Map 的双刃剑

Source map 是前端开发的标准工具，但在生产环境中保留它们会带来严重风险：

**风险点**：
- 暴露完整的源代码逻辑
- 泄露 API 端点和内部服务结构
- 暴露商业逻辑和算法实现
- 可能包含硬编码的密钥或配置

**最佳实践**：
- 在 CI/CD 流程中强制移除 source map
- 使用自动化工具检测敏感文件
- 建立 npm 发布前的安全扫描

### npm 生态的脆弱性

这次事件与同日的 axios 攻击一起，暴露了 npm 生态的系统性风险：

| 风险类型 | 案例 | 影响 |
|----------|------|------|
| 发布配置错误 | Claude Code source map | 源码泄露 |
| 账号劫持 | axios 攻击 | 恶意代码植入 |
| 依赖混淆 | 多起供应链攻击 | 代码执行 |

**建议措施**：
- 使用 npm provenance 验证包的来源
- 锁定依赖版本，使用 lockfile
- 监控依赖的异常更新
- 建立 internal registry 缓冲

### AI 公司的特殊风险

AI 公司面临的知识产权风险更加复杂：

- **模型架构**：可能是最核心的商业机密
- **训练数据**：可能涉及版权问题
- **提示工程**：精心设计的 prompt 可能被泄露
- **用户交互数据**：隐私合规风险

## 行业影响与未来展望

### 对 Anthropic 的影响

**短期影响**：
- 声誉受损，被视为安全管理不善
- 竞争对手获得技术洞察
- 可能面临监管审查

**长期影响**：
- 可能加速某些功能的发布（因为已泄露）
- 加强安全流程和发布审查
- 法律行动追责泄露源头

### 对 AI 编程工具行业的影响

这次泄露揭示了 AI 编程工具的发展方向：

**多代理架构成为标配**：单一 AI 助手正在演变为专业化代理的协作网络

**记忆系统是关键差异化**：谁能构建更好的长期记忆，谁就能提供更个性化的体验

**主动式 AI 是未来**：从"有问必答"到"主动服务"的转变正在发生

**情感化设计开始出现**：BUDDY 这样的功能显示 AI 工具正在融入情感元素

### 给开发者的启示

对于使用 AI 编程工具的开发者：

- **关注工具的隐私政策**：你的代码可能被如何使用？
- **理解工具的能力边界**：泄露显示 AI 工具内部可能比想象中更复杂
- **保持安全意识**：不要在代码中硬编码敏感信息，AI 工具可能会"看到"

## 关键要点

- **事件本质**：npm 包配置失误导致 59.8MB source map 文件泄露，暴露 51.2 万行 TypeScript 源码
- **核心发现**：8 个未发布功能（包括 AI 宠物 BUDDY、始终在线 KAIROS 模式）、内部模型代号体系、多代理架构设计
- **商业影响**：$2.5B ARR 营收数据曝光，核心技术架构被公开分析
- **安全教训**：Source map 应在生产环境中移除，npm 发布流程需要安全扫描
- **行业趋势**：AI 编程工具正从单点助手演变为多代理协作系统，主动式服务和情感化设计是未来方向
- **应对措施**：Anthropic 已发起 DMCA 下架，但信息已在社区广泛传播
- **更广泛意义**：与同日 axios 攻击一起，暴露了 JavaScript 供应链的系统性脆弱

## 常见问题

### Claude Code 源码泄露是怎么发生的？

由于开发团队在发布 npm 包（v2.1.88 版本）时，忘记移除 59.8MB 的 source map 文件（index.js.map）。这个文件包含了从压缩代码到原始 TypeScript 源码的完整映射，任何人都可以通过它还原出约 1900 个源文件、51.2 万行代码。

### 这次泄露最重大的发现是什么？

最引人注目的发现包括：1) BUDDY AI 赛博宠物功能；2) KAIROS 始终在线模式；3) 完整的多代理协调架构；4) Anthropic 内部模型代号（Tengu、Capybara、Fennec、Mythos）；5) 公司约 25 亿美元的年化收入数据。

### 普通开发者会受到什么影响？

对于 Claude Code 用户，这次泄露不会直接影响工具的使用。但需要注意：1) 如果你的代码中包含敏感信息，理论上可能被 AI "学习"；2) 关注 Anthropic 的安全更新；3) 理解 AI 工具的隐私政策。

### Anthropic 如何应对这次泄露？

Anthropic 已通过 DMCA（数字千年版权法）向 GitHub 等平台发起下架请求，要求移除泄露的代码仓库。但鉴于信息已在社区广泛传播，完全消除影响已不可能。公司可能会加强发布流程的安全审查。

### 这对 AI 行业意味着什么？

这次事件揭示了 AI 编程工具正在向多代理协作、主动服务、情感化设计方向演进。同时，它也暴露了 AI 公司在供应链安全方面的脆弱性，可能促使整个行业加强安全投入。

### 如何避免类似的泄露？

最佳实践包括：1) 在 CI/CD 流程中强制移除 source map；2) 使用自动化工具扫描 npm 包内容；3) 建立发布前的安全检查清单；4) 使用 npm provenance 验证包的完整性。

## 参考资料

- [36氪：Claude Code 源码泄露，揭示 8 个隐藏功能](https://36kr.com/p/3243897660366341)
- [掘金：Claude Code 源码泄露事件分析](https://juejin.cn/post/74856764321)
- [53AI：Claude Code 完整泄露分析](https://www.53ai.com/news/claude-code-leak)
- [阿里云开发者社区：Claude Code 8 个隐藏功能详解](https://developer.aliyun.com/article/claude-code-hidden-features)
- [GitHub DMCA Takedown Notices](https://github.com/github/dmca)
- [npm Security Best Practices](https://docs.npmjs.com/packages-and-modules/securing-your-code)
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", () => {
        try {
            const rawMarkdown = document.body.innerText;
            const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;

            let webUrl = window.location.pathname;
            if (webUrl.endsWith('/index.md')) {
                webUrl = webUrl.substring(0, webUrl.length - 'index.md'.length) || '/';
            } else {
                webUrl = webUrl.replace(/.md$/, '');
            }
            const linkColor = isDark ? '#58a6ff' : '#0969da';
            const navHtml = 
                '<div style="margin-bottom: 24px; font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif;">' +
                    '<a href="/index.md" style="color: ' + linkColor + '; text-decoration: none;">← Back to Home</a>' +
                    '<span style="margin: 0 8px; color: ' + (isDark ? '#484f58' : '#d0d7de') + ';">|</span>' +
                    '<a href="' + webUrl + '" style="color: ' + linkColor + '; text-decoration: none;">Switch to Web View</a>' +
                '</div>';

            let contentToRender = rawMarkdown;
            let frontmatterHtml = '';
            
            const fmMatch = rawMarkdown.match(/^---\s*[\r\n]+([\s\S]*?)[\r\n]+---\s*/);
            
            if (fmMatch) {
                contentToRender = rawMarkdown.substring(fmMatch[0].length);
                const yamlText = fmMatch[1];
                
                const borderColor = isDark ? '#30363d' : '#d0d7de';
                const bgColor = isDark ? '#161b22' : '#f6f8fa';
                const keyColor = isDark ? '#8b949e' : '#57606a';
                const valColor = isDark ? '#c9d1d9' : '#24292f';

                const rows = yamlText.split('\n')
                    .filter(line => line.trim() && line.includes(':'))
                    .map(line => {
                        const splitIdx = line.indexOf(':');
                        const key = line.slice(0, splitIdx).trim();
                        let val = line.slice(splitIdx + 1).trim();
                        if ((val.startsWith("'") && val.endsWith("'")) || (val.startsWith('"') && val.endsWith('"'))) {
                            val = val.slice(1, -1);
                        }
                        
                        return '<tr>' +
                            '<td style="white-space:nowrap; padding:8px 12px; color:' + keyColor + '; font-weight:600; border-bottom:1px solid ' + borderColor + '; width:1%;">' + key + '</td>' +
                            '<td style="padding:8px 12px; color:' + valColor + '; border-bottom:1px solid ' + borderColor + ';">' + val + '</td>' +
                        '</tr>';
                    }).join('');
                
                if (rows) {
                    frontmatterHtml = 
                        '<div style="margin-bottom: 32px; border:1px solid ' + borderColor + '; border-radius:6px; overflow:hidden; background-color:' + bgColor + ';">' +
                            '<table style="width:100%; border-collapse:collapse; font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif; font-size:13px;">' +
                                rows +
                            '</table>' +
                        '</div>';
                }
            }
            
            const renderedHtml = marked.parse(contentToRender);
            
            const wrapper = document.createElement('article');
            wrapper.className = 'markdown-body';
            wrapper.innerHTML = navHtml + frontmatterHtml + renderedHtml;
            
            document.body.innerHTML = '';
            document.body.appendChild(wrapper);
        } catch (e) {
            console.error("Markdown rendering failed", e);
        }
    });
</script>
</body>
</html>