Claude Code源码泄露:工业级AI Agent的参考答案【全网最全深度解析】
2026年3月31日,AI圈被一条推文炸开了锅。安全研究员Chaofan Shou在自己的X平台账号上发了一句话:“Claude Code 源代码通过其npm注册表中的一个map文件泄露了!”几小时内,这条推文浏览量突破660万次。Claude Code v2.1.88的npm发布包中,一个59.8MB的source map文件被意外打包进去——这个本应留在开发环境的调试文件,像一把钥匙,直接将Anthropic花费数年打造的旗舰AI编程工具的源码公之于众。
泄露的代码量堪称史无前例:1906个未混淆的TypeScript源文件,总计51.2万行代码,涵盖了从Query Engine到多智能体编排、从IDE桥接到持久化记忆机制的完整架构。更戏剧性的是,这并非Anthropic第一次犯这类错误——2025年2月的早期版本就曾因同样的疏忽暴露过1800万字符的源码。
本文耗时一周,将从源码层面出发,深入解读Claude Code的提示词工程设计、核心架构原理和工具调用机制。即便不依赖这份泄露的代码,其中揭示的技术思想本身就足以成为一堂精彩的AI Agent工程课。
一
什么是Claude Code?
Claude Code是Anthropic推出的一款基于命令行界面的AI Agent工具,它直接运行在开发者的本地环境中,能够理解代码库上下文、执行shell命令、读写文件并进行复杂的代码重构。与传统代码补全工具(如GitHub Copilot)不同,Claude Code不仅仅是预测下一行代码——它具备自主执行、迭代调试和大规模重构的能力。
从用户视角看,Claude Code是一个可以在终端中直接对话的“AI工程师”。但从工程视角看,它是一个精密的“智能体操作系统”:大模型是大脑,上下文是短期记忆,而工具系统则是手、眼和耳,构成“感知-决策-行动”的完整闭环。
从泄露的源码结构可以清晰看出,Claude Code 远不是一个简单的 CLI 封装,而是一个拥有完整分层设计的系统。其中最值得深入研究的两层,分别是 提示词工程(决定了 AI “怎么想”)和 工具系统(决定了 AI “怎么做”)。
二
Claude Code的提示词工程
2.1 从“静态咒语”到“动态装配线”:核心设计理念
源码泄露带来的第一个重大发现是:Claude Code内部根本不存在单一的、静态的长文本Prompt文件。过去安全研究员们通过越狱手段试图套取“核心Prompt神器”的做法,在这里彻底失效了。Anthropic的做法完全不同——它的提示词系统像一个“组装高达”的工厂:根据操作系统的不同、当前报错信息、甚至是用户的Git状态,以毫秒级动态拼装出当前对话的最佳提示词。这种设计将一次性的“写提示词”工作,转变为一个持续性的“系统编程”过程。
-
角色分工 (10个作用域):提示词体系被精细地划分为10个不同的作用域,每个域负责特定功能,确保指令覆盖全面且职责清晰。
-
强约束指令风格 (12个语法特点):通过12种特定的语法模式来约束模型行为,确保其在复杂软件工程任务中稳定、安全、高效。
-
丰富的示例与反例:这是提高模型行为可预测性的关键。指令中穿插大量正面与反面案例,显著降低了AI产生幻觉或误解的可能性。
2.2 四大核心行为准则
在这些设计理念的指导下,Claude Code内化了一套精细的“职场行为准则”,具体分为四大核心行为准则。
-
克制原则:主动性是一种权力,需要被授权。AI被明确禁止在未经用户许可的情况下进行不必要的“优化”,如修复bug时“顺手”清理周边代码,或为一次性操作创建helper和抽象层。
-
极简注释:注释应以必要性为先。默认不写注释,仅当代码“为什么这么做”并不显然时才添加(例如隐藏约束、微妙不变量或特定Bug的规避方案),同时严禁随意删除现有注释。
-
诚实汇报:目标是准确汇报,而非防御式汇报。AI必须如实汇报工作结果,测试失败时不能掩饰,测试成功时也不要用不必要的免责声明弱化结果。
-
信任框架:AI被教导要信任内部代码和框架的保证,只为用户输入和外部API等系统边界添加校验逻辑,从而避免编写大量冗余的防御性代码。
2.3 工具约束及调度
2.3.1 深入工具内部:BashTool 的 Git 安全协议
这份提示词体系最精彩的部分,藏在每个工具目录的 prompt.ts 文件里。这是 Anthropic 写的生产级系统提示词,直接对模型下指令,约束每个工具的行为边界。
以 BashTool/prompt.ts 中的 Git 安全协议 为例,每一条都在回答一个问题:什么情况下模型最容易出错,出错了后果是什么,所以绝对不能做。
Git Safety Protocol:
– NEVER update the git config
– NEVER run destructive git commands (push –force, reset –hard, checkout .) unless the user explicitly requests these actions
– NEVER skip hooks (–no-verify, –no-gpg-sign) unless the user explicitly requests it
– CRITICAL: Always create NEW commits rather than amending, unless the user explicitly requests a git amend. When a pre-commit hook fails, the commit did NOT happen — so –amend would modify the PREVIOUS commit, which may result in destroying work or losing previous changes.
这不是在给模型描述能力,而是在给模型 画红线。而且红线画得非常具体:
不是:“请小心操作 git。”
而是:“pre-commit hook 失败时 commit 根本没有发生,这种情况下 amend 会改掉上一个 commit,所以永远不用 amend,除非用户明确要求。”
这种写法和我们平时写提示词的方式差距挺大的。大多数人习惯告诉模型“你能做什么”,Anthropic 这里是告诉模型 “什么时候绝对不能做、为什么不能做”,并且把每一条规则背后的逻辑都写清楚了。模型理解了逻辑,才能在没见过的边界情况下也做出正确判断。
2.3.2 工具优先级约束:颗粒度即安全
同一个文件里还有一段工具优先级约束,同样体现了精妙的设计思想:
IMPORTANT: Avoid using this tool to run find, grep, cat, head, tail, sed, awk, or echo commands. Instead, use the appropriate dedicated tool:
– File search: Use GlobTool (NOT find or ls)
– Content search: Use GrepTool (NOT grep or rg)
– Read files: Use FileReadTool (NOT cat/head/tail)
– Edit files: Use FileEditTool (NOT sed/awk)
这背后是一套完整的工具体系设计思路:把每件事都交给最合适的工具做,而不是让模型自己去拼 shell 命令。每个专用工具有自己的权限边界和审计记录,模型就算被恶意指令控制,也很难做出超出工具边界的事情。工具的颗粒度越细,安全性就越可控。
2.3.3 AgentTool:多智能体协作的核心逻辑
AgentTool/prompt.ts 是多 Agent 调度的核心,里面有一段话极具启发性:
Brief the agent like a smart colleague who just walked into the room — it hasn’t seen this conversation, doesn’t know what you’ve tried, doesn’t understand why this task matters.
Explain what you’re trying to accomplish and why.Describe what you’ve already learned or ruled out.Give enough context about the surrounding problem that the agent can make judgment calls rather than just following a narrow instruction.
翻译过来:给 Agent 写 prompt,就像在跟一个刚走进房间的聪明同事沟通。它没看过这段对话,不知道你试过什么,不理解这个任务的背景。你得给够背景,让它能自己做判断,而不只是执行一条窄指令。
这段话放到任何 Multi-Agent 系统的设计里都成立。很多人做 Agent 协作失败,根本原因就是子 Agent 没有足够的上下文去做判断,只能机械执行。
源码里还有一句非常直接的提醒:
Never delegate understanding. Don’t write “based on your findings, fix the bug” or “based on the research, implement it.” Those phrases push synthesis onto the agent instead of doing it yourself. Write prompts that prove you understood: include file paths, line numbers, what specifically to change.
“不要把理解过程外包给 Agent。” 不要写“根据你的发现修复这个 bug”,而是要自己先理解,然后给出具体的文件路径、行号、要改什么。这是一个很反直觉但极其重要的设计原则:协调层需要先做理解,再做拆解,最后才是委托执行。理解这件事不能外包。
2.3.4 并发调度:写进提示词的性能优化
AgentTool 提示词里还有一个影响非常实际的细节:
Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses.
并行任务要在同一条消息里一次性发出多个 tool call,而不是顺序发。这直接影响性能和 Token 成本。顺序发一个等一个,每次都有延迟,上下文也越来越长。并行发出去,等所有结果回来再汇总,速度快,Token 消耗也更可控。Anthropic 把这条规则直接写进了提示词,让模型自己学会什么时候该并行。
2.4 最佳实践:OCE三要素
基于上述原则,Claude Code的最佳实践可以总结为“OCE三要素”提示词公式,它能帮助用户高效地与AI沟通。
-
Objective (目标):清晰描述期望达成的具体目标。
-
Context (上下文):提供完成任务所需的必要背景信息。
-
Expected (预期结果):明确说明成功完成任务的标准。
对比实验数据显示,结构化OCE提示词比模糊的提示词效率高出三倍以上:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
❌ 模糊提示词 (应避免):“Fix the bug in the API”
✅ 结构化提示词 (推荐):“In src/api/users.ts, the GET /users route returns a 500 when the database is empty. Modify the handler to return an empty array [] with a 200 status.”
2.5 进阶:从“角色扮演”到“上下文工程”
除了单次的提示词,Claude Code还提供了更高级的上下文定制能力,可以将AI从一个通用助手转变为熟悉你项目的专属伙伴。
-
使用
CLAUDE.md进行项目级定制:Claude Code会自动将项目根目录下的CLAUDE.md文件内容作为上下文加载。你可以在该文件中定义项目的特定信息,如常用命令、代码风格、测试说明等,使其在每次会话中都生效。 -
使用
--append-system-prompt进行运行时定制:通过Claude Code CLI的--append-system-prompt参数,可以在运行时向系统提示词动态追加自定义指令,实现会话级别的行为调整。
2.6 Prompt Caching的“抠门”艺术
源码中还揭示了一个细节:Anthropic通过精确设置CACHE_BOUNDARY(缓存边界),将静态指令与动态数据物理隔离,把Prompt Caching的省钱效应发挥到极致。这意味着每次API调用中,那些不变的基础指令只计算一次Token费用,后续对话只需支付动态部分的成本。
三
工具系统:三层装配线与26个内置工具
3.1 设计哲学:默认保守
Claude Code的工具系统被精心拆分为三个层次:Tool定义层、基础工具集合层和运行时装配层。这种分层架构的核心目的不是让单个工具更强大,而是确保所有工具被统一注册和管理到同一框架体系中。
在Tool定义层,每个工具都继承一组默认配置,其中三条最关键:
-
isConcurrencySafe: false—— 默认不支持并发执行 -
isReadOnly: false—— 默认不是只读操作 -
isDestructive: false—— 默认不具破坏性
这种“默认保守”的策略意味着,工具不会被动乐观地推断为安全。任何可能产生副作用的操作都需要显式声明,这对Agent系统的安全至关重要——一旦某个工具实际上不适合并发执行,默认放开将导致潜在的竞态条件。
3.2 工具全景:按需装配的动态系统
Claude Code的工具系统由ALL_TOOLS数组集中管理,按功能分为8个分组,共26个内置工具,Team模式下额外追加3个团队工具。这些工具覆盖了完整的开发工作流:
文件I/O组:Read、Write、Edit、Glob、Grep。其中最精妙的是Edit工具——它采用“查找块与替换块”机制而非行号定位,模型必须提供一段独一无二的上下文作为“查找锚点”,后台还会计算模糊匹配分来容忍模型的细微幻觉(比如多了一个空格),大大提高了修改成功率。
代码智能组:LSP(Language Server Protocol诊断与符号查询)、NotebookEdit(Jupyter Notebook单元格编辑)。
Web工具组:WebFetch(抓取URL并用AI提取摘要,带15分钟缓存)、WebSearch(网页搜索)。
Agent编排组:Agent——启动子Agent完成复杂多步任务,支持前台/后台两种模式。
任务管理与后台调度组:TaskCreate、TaskUpdate、TaskList、CronCreate等,支持定时任务调度。
规划与交互组:EnterPlanMode(进入只读规划模式)、ExitPlanMode、AskUserQuestion(暂停执行向用户提问)。
工作区与技能组:EnterWorktree/ExitWorktree(创建隔离的git worktree)、Skill(执行用户自定义的Skill)。
在运行时,getAllBaseTools()函数通过feature flag、环境变量、用户类型和当前工作模式进行条件控制,动态决定哪些工具被激活。这意味着同一个Claude Code实例,在不同环境下看到的“工具箱”可能完全不同。
四
Auto Mode的决策流水线:四层安全审查
蚂蚁集团工程师逆向了Claude Code v2.1.81的源码,完整还原了Auto Mode的决策机制。核心发现是:每一次工具调用都要经过四层决策流水线,只有前三层都无法判断时,才会调用独立的AI分类器做安全审查。
第一层:权限规则检查。检查用户已配置的allow/deny规则,命中即直接放行或拒绝。
第二层:acceptEdits模式模拟。如果在允许编辑文件的权限级别下工具会被通过,说明风险很低,跳过分类器。
第三层:只读工具白名单。Read、Grep、Glob、LSP、WebSearch等不修改任何状态的工具,无条件放行。
第四层:AI分类器。以上都不满足时,发送独立的API请求给Claude Sonnet做安全分类。关键设计细节包括:始终使用Sonnet而非Opus(成本与延迟的权衡);temperature设为0确保输出确定性;分类器被定义为“自主AI编程Agent的安全监控员”,保护提示词注入、范围蔓延、意外损害三类风险。
系统还设置了熔断机制:连续3次被拒绝或累计20次被拒绝后,系统降级为手动确认;headless模式下直接中止Agent。这种“层层过滤+AI终审+熔断保护”的设计,是当前工业级AI Agent安全架构的标杆。
五
多智能体协作:通过提示词而非代码
泄露源码中最具启发性的设计之一是:Claude Code的多智能体协作是通过自然语言指令而非代码逻辑实现的。当需要派生子Agent时,系统不是通过复杂的函数调用和状态管理,而是向子Agent注入专门的系统提示词,包含“不要敷衍弱工作”等行为指令。
这种“提示词即编排”的设计与行业趋势高度吻合。Claude Code更像一个拥有“主脑(Manager)”和一堆“外包特工(Workers)”的微型公司——主脑通过提示词告诉Worker该做什么、怎么做、边界在哪里,而Worker的试错过程产生的“垃圾对话”被巧妙地隔离,绝不污染主脑的上下文记忆。
六
未启用的未来图景:源码中的隐藏蓝图
除了已上线的功能,代码中还存在大量已完成开发但未激活的功能模块。这些“沉睡代码”勾勒出了一个远比当前版本强大的未来代理形态。
4.1 陪伴式交互:ASCII宠物系统
一个名为Buddy的模块已经全面实装并对外开放。它通过确定性的伪随机算法,为每位用户生成一只独一无二的ASCII艺术宠物。宠物的物种、稀有度、外观装饰均基于用户标识符的哈希值计算得出,呈现出一种“命中注定”的宿命感。
该宠物拥有由AI生成的个性化灵魂描述,以及五项仅供娱乐的氛围属性(调试力、耐心值、混乱度、智慧值、毒舌指数)。它在输入框旁静静观察,偶尔弹出气泡评论,完全不消耗主会话的API配额。这一设计在冰冷的功能性工具中注入了情感化交互的元素,是产品设计层面的点睛之笔。
4.2 主动代理与后台驻留
-
主动助手模式:代号Kairos的功能旨在将代理从被动响应者转变为主动协作者。它可以拥有自己的日程表,在后台持续关注项目进展,并主动推送通知、文件更新或进度摘要。
-
后台守护进程:Daemon模块允许代理以常驻服务的形式运行于操作系统后台,随时响应来自命令行、API或其他实例的调用请求,消除冷启动延迟。
-
跨会话通信:UDS Inbox机制打通了多个独立代理实例之间的消息通道,使其能够共享状态、协作处理复杂任务链。
4.3 深度规划与大规模审查
-
远程深度规划:Ultraplan指令会启动一个云端实例,调用性能更强的模型(如Opus系列),花费长达30分钟的时间对项目进行全盘分析、可行性评估和执行路径规划。
-
并行审查舰队:Ultrareview指令可同时拉起最多20个子代理,每个代理从不同维度(安全性、性能、可读性等)对代码变更进行审查,并在10至25分钟内生成汇总报告。这种“暴力并行”的策略充分利用了云计算的弹性优势。
七
技术启示:何为 AI Agent的护城河
这次泄露事件给整个行业上了三堂重要的技术课。
第一,提示词工程正在从“文学创作”演变为“系统编程” 。Claude Code证明,真正的大规模Agent系统,其提示词不是一篇静态文章,而是一个由函数调用驱动的动态拼装系统。这种设计不仅更难被“越狱”套取,也更能适配复杂多变的实际使用场景。
第二,工具系统的架构设计比工具数量更重要。Claude Code的工具框架精华不在于26个或29个具体工具,而在于其三层装配线、默认保守的安全策略和动态条件装配机制。这些架构思想可以直接复用到任何需要让AI与操作系统交互的场景中。
第三,安全必须从第一行代码开始设计。无论是四层决策流水线、熔断机制,还是默认并发禁止的策略,Claude Code的安全设计都不是事后打补丁,而是架构层面的系统级考量。尽管本次泄露也暴露出了一些安全漏洞(如50子命令限制导致的规则绕过),但整体而言,其安全架构的设计思路仍然值得深入学习。
Claude Code的源码泄露是一次意外,但也是一次难得的“公开教学”。它告诉我们,顶尖的AI Agent产品远不是“套壳调用API”那么简单——它的提示词是函数式拼装的,它的工具系统是分层装配的,它的安全决策是多层流水线的,它的多智能体协作是通过提示词而非代码编排的。
在AI编程工具竞争日益激烈的今天,真正的产品护城河不在模型权重,而在工程层——如何驯服大模型、如何让它安全高效地与真实世界交互、如何在Token成本和用户体验之间找到最优平衡。这些问题,Claude Code的源码给了我们一份珍贵的参考答案。#Claude #AI #信息安全 #Anthropic
夜雨聆风