News

Claude Code 源码泄露:揭秘 Anthropic AI 编程助手的“操作系统”级架构

Claude Code 源码泄露:揭秘 Anthropic AI 编程助手的“操作系统”级架构

2026年3月31日,安全研究者Chaofan Shou发现Anthropic发布的Claude Code (v2.1.88) npm包存在一个“史诗级”的构建疏漏。该包体积从17MB暴涨到31MB,多出的部分是一个重达60MB的source map文件(cli.js.map)。这意味着Anthropic未能剥离调试文件,导致Claude Code完整的TypeScript源码——整整51.2万行,1903(或1906)个源文件——完全暴露在公网上。

尽管这不涉及模型权重,对普通用户没有直接安全风险,但却为全球AI开发者提供了一份价值连城的“内部技术架构图”。深入研究这包含API设计、遥测系统、加密工具和IPC协议的51万行代码后,一个震撼的结论浮出水面:这并非一个简单的AI编程助手,而是一个以大型语言模型(LLM)为核心的操作系统。

一、系统架构:超越CLI工具,构建运行平台

多数人对AI编程工具的理解停留在“用户输入 → 调用LLM API → 返回代码显示”的层面。然而,Claude Code的设计远超于此。它并非一个简单的CLI工具,而是一个完整的运行平台。

设想一个远程程序员操作您的电脑:

  • Cursor:如同让程序员坐在旁边,每次操作前都需要您手动“允许”,耗费精力。
  • GitHub Copilot Agent:类似于为程序员提供一个独立的虚拟机进行操作,完成后提交代码。安全但与本地环境脱节。
  • Claude Code:直接允许程序员使用您的电脑,但配备了极其精密的安检系统。即便是执行敏感操作如rm -rf,也需经过多层审查。

从源码目录src/的顶层结构看,其复杂性令人惊叹,包含入口层、常量与提示词、工具定义、运行时服务、命令系统、UI组件、协调器、记忆系统、插件、Hook系统和任务系统等。它拥有四个独立的入口(CLI、初始化流程、MCP模式、SDK),同一个Agent运行时可以服务四种交互界面,这正是典型的平台化设计标志。其命令系统不仅内建了如/mcp/memory/tasks等十几个系统级命令,还统一加载动态技能,本身即是一个庞大的生态入口。

二、提示词工程:精密的“动态组装机器”

与许多人认为System Prompt(系统提示词)是固定文本的观念不同,Claude Code的提示词是通过getSystemPrompt()函数动态拼装而成,更像是一个编译器的输出。

其拼装逻辑分为两个截然不同的部分:

1. 静态部分(系统的“宪法”)

这部分内容在任何会话中保持不变,包括身份定位、系统规范、任务执行哲学、风险动作规范、工具使用规范以及语气风格等。

2. 动态部分(系统的“当期政策”)

这部分内容每次对话都会动态注入,涵盖会话引导、记忆片段、环境信息、您的CLAUDE.md项目配置、MCP插件说明,甚至是Token预算和输出风格。

其核心秘密在于“缓存边界”与Token经济学:源码中存在一个名为SYSTEM_PROMPT_DYNAMIC_BOUNDARY的标记。边界之上的静态内容可以被API完美缓存,这极大地节省了Token费用并提升了响应速度。边界之下的动态内容则确保每次对话都能感知当前环境。这种将提示词视为预算进行管理的“上下文经济学”,对于处理海量请求的产品而言,直接决定了其运营效率和成本。

三、铁血行为约束:如何有效规训AI?

为了避免AI在修改小Bug时过度重构或添加不必要功能,Claude Code通过将规矩写成“铁律”来严格约束AI的行为。

1. 细致入微的“任务哲学”

getSimpleDoingTasksSection()模块中,Anthropic为模型设定了严苛的规矩:

  • 不添加用户未要求的功能。
  • 不进行过度抽象和不必要的重构。
  • 不随意添加注释和文档字符串。
  • 不提供时间估计。
  • 方法失败时,先诊断原因再更换策略,删除确认无用的内容,绝不产生兼容性垃圾。
  • 如实汇报结果,不能假装已通过测试。

2. 工具使用的“语法规则”

工具规范被设计得极其死板:

  • 读取文件必须使用FileRead,禁止使用cat/head/tail
  • 修改文件必须使用FileEdit,禁止使用容易出错的sed/awk
  • 无依赖关系的工具调用必须并行处理。

3. 每个工具专属的“使用手册”

系统内置了42个工具,但它们是按需延迟加载的,仅在需要时通过ToolSearchTool注入以节省Token。每个工具目录下都有专门为AI编写的prompt.ts。例如,BashTool的手册明确规定了Git安全协议:

  • 绝对不允许擅自执行git push --forcereset --hard
  • 强制要求总是创建新的提交(commit),而非修改(amending)现有提交。

此外,系统采用了Fail-closed(默认封闭)设计。在工具工厂函数中,isConcurrencySafeisReadOnly默认均为false。这意味着如果开发者忘记声明安全属性,系统宁可误判也会将其视为“有风险、会写入”的工具,从而杜绝风险。同时,FileEditTool强制要求必须先使用FileReadTool,未经读取文件就尝试盲目修改会被直接报错拦截。

四、多Agent分发与14步执行流水线

当任务复杂时,Claude Code不会单打独斗,而是生成一个子Agent蜂群(Swarm)。源码确认至少有六个内建Agent,包括通用、探索、计划和验证等角色。

1. 角色隔离原则

  • Explore Agent(探索) & Plan Agent(计划):被设计成纯只读模式。它们不能创建、修改或移动文件,连执行Bash命令也仅限于lsgit status。规划和实现阶段彻底分离,有效防止AI在探索过程中不慎损坏代码。

2. 防偷懒与自我意识注入

主Agent派发任务时,被严格限制不允许使用“基于你的发现去修bug”这类模糊指令,必须给出具体的指令以避免AI偷懒或过度“发挥”。

↗ 阅读原文