Claude Code Skills 源码深度解析:从元工具架构到 Agent 进化内核

Claude Code Skills 源码深度解析:从元工具架构到 Agent 进化内核2026 年 3 月 31 日 AI 开发圈发生了一件足以载入史册的 意外 Anthropic 在发布 anthropic ai claude code 版本 2 1 88 时 因 npm 配置文件漏写了 map 排除项 导致整个系统的 TypeScript 源代码 约 1 900 个文件 总计 51 2 万行代码 被完整泄露 这次泄露不仅让外界看到了一个年 ARR 达到

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



2026 年 3 月 31 日,AI 开发圈发生了一件足以载入史册的“意外”:Anthropic 在发布 @anthropic-ai/claude-code 版本 2.1.88 时,因 npm 配置文件漏写了 .map 排除项,导致整个系统的 TypeScript 源代码——约 1,900 个文件,总计 51.2 万行代码——被完整泄露 。

这次泄露不仅让外界看到了一个年 ARR 达到 25 亿美元的顶级 Agent 系统的“骨架”,更揭示了 AI 行业正在发生的一个本质变化:从“聊天机器人(Chatbot)”向“自主代理(Agentic System)”的彻底转移

在所有模块中,最让工程师们激动的莫过于其被称为“Skills”的技能系统。不同于传统的工具调用(Function Calling),Claude Code 的 Skills 是通过一种名为“渐进式揭示(Progressive Disclosure)”的提示词扩展架构实现的 。今天,我们就穿过那些 minified 混淆代码的迷雾,通过泄露的源码地图,深度拆解这套支撑起“AI 程序员”自主能力的内核。


在传统 AI 应用中,如果你想让 AI 具备“查天气”的功能,你会直接注册一个 get_weather 工具。但在 Claude Code 的 51.2 万行源码中,它的 tools/ 目录却展现了一个完全不同的世界。

根据 SkillTool.ts 的逻辑,Anthropic 将技能系统抽象为了两层 :

  • Skill 元工具 (The Meta-Tool) :这是常驻在 Claude 核心工具列表(Tools Array)中的顶级组件。它唯一的职责是:根据用户的自然语言意图,从本地或插件库中检索并“挂载”具体的技能指令 。
  • individual skills (具体技能) :这些是以文件夹形式存在的“技能包”(如 .claude/skills/pdf/),内部包含核心指令文件 SKILL.md、辅助脚本 scripts/ 以及参考文档 references/

这是一个工程权衡问题。Claude Code 需要处理的任务极其复杂,如果一次性将所有技能(如 /debug, /simplify, /explain-code 等)的全文提示词都塞进上下文,会导致:

  1. 上下文熵增:模型会因为过长的系统指令而忽视用户的核心诉求 。
  2. Token 浪费:即使不使用某些技能,用户也要为这些冗余的提示词支付昂贵的费用。

因此,SkillTool.ts 采用了声明式、基于 LLM 推理的动态加载机制。系统在启动时只加载技能的“名片”(Name & Description),这就是所谓的“第一级揭示” 。


这是 Claude Code 最精妙的工程设计之一。源码展示了其如何通过三级缓存与加载策略,将 Token 开销控制在极低水平 。

加载阶段 触发条件 注入内容 Token 成本 (Approx) Stage 1: 元数据 会话启动 (init) YAML Frontmatter 中的 Name & Description 每个技能约 100 Tokens Stage 2: 核心指令 模型识别到匹配意图 SKILL.md 的正文 Markdown 限制在 5,000 Tokens 以内 Stage 3: 外部资源 技能执行过程中 Linked Files, Reference Docs, Scripts Output 按需读取,由 Bash 工具调用驱动

当用户输入“帮我重构这段认证逻辑”时,模型在 system prompt 中看到的是一个 XML 块 :

XML

<available_skills> <refactor>重构代码,优化结构,建议在涉及架构调整时使用。 
       refactor> <security-audit>审计安全漏洞,建议在处理敏感数据时使用。 
       security-audit>  
       available_skills> 

模型通过 纯 LLM 推理 发起工具调用:Skill({command: "refactor"}) 。此时,SkillTool.ts 才会读取本地文件系统的 SKILL.md 并将其作为一条标记为 isMeta: true 的用户消息注入上下文 。


SKILL.md 不是普通的文档,它更像是一个具备“执行力”的配置文件 。

泄露的源码显示,frontmatter 部分定义了技能的“运行权限” :

  • allowed-tools:赋予技能在该生命周期内自动获得某些工具(如 Bash)的权限。这让 Claude Code 在执行内置技能时能将权限确认弹窗减少 84%
  • model:允许技能临时升级模型。例如,普通编辑使用 Sonnet 3.7,但 /security-review 技能可以强制切换到 Opus 4.6 以获得更强的逻辑推理能力 。

这是 Claude Code 独有的扩展 。在 SKILL.md 中,你可以编写如下内容:

当前的工程依赖树:!npm list --depth=0

源码执行逻辑: 当该技能被触发、SKILL.md 被加载的一瞬间,系统会立即执行反引号中的 shell 命令。输出结果会替换占位符,然后再发送给模型。这意味着模型拿到的不是静态的模板,而是经过“实时采样”后的热数据 。


如果说 SkillTool.ts 是手脚,那么 QueryEngine.ts 就是大脑。在泄露的约 4.6 万行 QueryEngine.ts 代码中,我们发现了几处关键设计 :

为了保证终端 UI 的简洁,Claude Code 大量使用了 isMeta: true 标志位 。

  • 作用:当技能指令被注入上下文时,如果 isMeta 为 true,用户在终端是看不见这些成千上万字的 Prompt 的,但模型却能清楚地读到 。
  • 工程意义:解决了“UI 污染”问题。用户只看到 /debug running...,而背后的数千字调试指南正在引导模型精准排障 。

源码显示 Claude 不仅仅依赖于窗口记忆。它拥有一个三层记忆体系 :

  1. 活跃上下文:即当前的聊天消息。
  2. MEMORY.md 索引:位于项目根目录,是一个极其精简的“指针文件”(每行约 150 字符),记录了核心决策和文件路径 。
  3. 主题文件(Topic Files) :存放在 .claude/memory/*.md,按领域存储深度知识 。

写纪律(Strict Write Discipline) :源码强制要求模型只有在真实文件写入成功后,才能更新索引。这种设计防止了 AI 因为过度自信(幻觉)而污染记忆索引 。


泄露代码中出现频率超过 150 次的特性标志是 KAIROS 。这代表了 Anthropic 的愿景:一个无需指令、始终在线(Always-on)的后台进程 。

services/autoDream/ 目录下,我们发现了一个名为“梦境系统”的服务 。 它运行在用户闲置时,分四个严格阶段运行 :

  1. Orient (定位) :读取现有的内存快照,确立认知边界 。
  2. Gather Signal (采集信号) :扫描最近几小时的 session 日志、Git 提交和终端输出 。
  3. Consolidate (整合) :这是最神奇的一步,模型会分析矛盾点(例如:早上说用 Redis,下午改为用 Memcached),并在后台自动合并这些事实 。
  4. Prune & Index (剪枝) :为了防止 MEMORY.md 索引过大,系统会强行将其压缩至 200 行以内 。

这证明了:Claude Code 不只是在“回复请求”,它在“维护理解” 。


作为一个可以在你本地运行 rm -rf 的工具,Claude Code 的安全架构已经卷到了极致。

代号为 Chicago 的模块集成了 @ant/computer-use-mcp 。它让 AI 具备了截图、模拟键盘、点击坐标的能力 。 但源码中对 Chicago 的访问有着极其复杂的权限链路:

  • 必须开启 –allow-computer-use
  • 对 Anthropic 内部员工(ant 标签用户)提供免授权旁路(Bypass) 。

upstreamproxy/ 目录中,源码显式调用了 prctl(PR_SET_DUMPABLE, 0)

  • 原理:这是 Linux 内核级别的安全加固,旨在防止同 UID 下的进程通过 ptrace 读取 Claude Code 的内存 。
  • 目的:保护存储在内存中的 API Key 和 Session Token。这通常是银行级应用才会做的,足以见得 Anthropic 对“本地提权攻击”的警惕 。

在解析 buddy/(宠物系统)的代码时,我们发现了一个有趣的工程折衷:所有的宠物物种名称都被写成了十六进制,例如“duck”被写为 String.fromCharCode(0x64, 0x75, 0x63, 0x6b)

原因揭秘: 因为 Anthropic 的 CI 自动化扫描管线严禁代码库中出现其内部模型的“绝密代号”。由于“Duck”恰好是某个尚未发布的底座模型的代号,直接写这个词会导致编译不通过。工程师们没有去修改 CI 正则规则,而是选择了十六进制转义这种“充满活力的程序员补丁” 。


通过对 Claude Code 51.2 万行源码的深度解析,我们可以得到几个关于 Agent 开发的终极结论:

  1. 从代码逻辑到 Prompt 逻辑:未来的软件,其核心逻辑将不再由硬编码的 if-else 构成,而是由结构化的、可动态发现的 SKILL.md 指令构成。
  2. 内存重于窗口:学会管理 MEMORY.mdCLAUDE.md,比学习复杂的提示词工程更有价值 。
  3. 并行是唯一的出路:源码中随处可见的 Promise.all 表明,AI 已经开始学会同时读取 10 个文件并汇总信息,这标志着串行思考时代的结束 。
  4. Agent 是一场持久战autoDream 的存在告诉我们,一个伟大的 AI 代理不应该只在交互时存在,它应该在后台不断地自我整理和进化。

Claude Code 的源码泄露虽然是一次公关危机,但对于整个开源界来说,它更像是一份“Agentic 开发的**实践白皮书”。它告诉我们:真正改变世界的不是 LLM 本身,而是围绕 LLM 构建的那套复杂的、具备反思与执行能力的编排系统。


附录:Claude Code 核心源码目录清单

  • src/main.tsx:4683 行的系统入口,处理 OAuth 与初始化 。
  • tools/SkillTool.ts:元工具实现。
  • services/autoDream/:内存整合引擎 。
  • upstreamproxy/:核心安全防御层 。
  • utils/modelCost.ts:精准到每个 Token 的计费逻辑 。

小讯
上一篇 2026-04-13 20:22
下一篇 2026-04-13 20:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/258909.html