10+年产品经理聊聊产品、测测产品,产品人交流学习成长平台,按 Ctrl+D 收藏我们
关于我 留言板 小程序 标签云

苏米客

  • 首页
  • AIGC
    • AI最新动态
    • AI学习教程
    • AI工具集合
    • AI产品百科
    • AI编程开发
    • AI提示词
    • AI开源项目
    • AI智能体
  • Axure
    • Axure动态
    • Axure教程
  • 产品
    • 用户体验
    • 产品设计
    • 苏米杂谈
  • 资源
    • 产品UI组件库
    • 开源图标库
    • 中后台框架
  • 书单
    • AI书籍
    • 用户体验
    • UI视觉
    • 产品研究
    • 其他类型
  • 下载
    • Axure组件
    • Axure原型
    • 文档报告
    • 素材资源
  • 登录
  • 首页
  • AIGC
    • AI最新动态
    • AI学习教程
    • AI工具集合
    • AI产品百科
    • AI编程开发
    • AI提示词
    • AI开源项目
    • AI智能体
  • Axure
    • Axure动态
    • Axure教程
  • 产品
    • 用户体验
    • 产品设计
    • 苏米杂谈
  • 资源
    • 产品UI组件库
    • 开源图标库
    • 中后台框架
  • 书单
    • AI书籍
    • 用户体验
    • UI视觉
    • 产品研究
    • 其他类型
  • 下载
    • Axure组件
    • Axure原型
    • 文档报告
    • 素材资源
当前位置: 首页 » AI编程开发

Claude Code Skill 加载与上下文注入机制完整解析:8 层架构源码级剖析

1月前 AI编程开发 828 0

用 Claude Code 有段时间了,一直有个好奇:Claude Code 的 Skills 到底是怎么工作的?翻了一遍源码,发现背后有一套完整的机制——从磁盘上发现 SKILL.md 文件,到最终把指令塞进模型上下文,中间经历了整整 8 个层次。

苏米注:这篇是源码层面的完整梳理,适合在用 Claude Code 的同学、想自己写 Skill 的朋友,或者只是对「AI 工具内部怎么运转」感兴趣的人。

整个 Skill 系统由 8 个层组成:发现 → 注册 → 系统提示 → 调用 → 内容加载 → Hook 注册 → 持久化 → 注入

1. 发现层(Discovery)

Skills 从多个来源被发现:

  • ~/.claude/skills/ — 用户级 skills
  • ./.claude/skills/ — 项目级 skills
  • src/skills/bundledSkills.ts — 内置 skills(commit、review 等)
  • Plugins — 插件 skills

目录结构要求:/skills/ 目录只支持 skill-name/SKILL.md 格式,旧版 /commands/ 同时支持目录格式和单 .md 文件。多来源通过 realpath() 去重,可跟踪符号链接。

条件 Skills(Path-Filtered)

Skills 可通过 frontmatter 的 paths: 字段实现条件激活,使用 gitignore 风格匹配,只在操作匹配文件时激活,一旦激活整个会话可用。

动态发现

文件操作(Read/Write/Edit)时自动触发动态发现:从文件所在目录向上遍历至 CWD,在每一级检查 .claude/skills/,按深度排序后加载,模型在下一轮对话中即可看到新 skills。

2. 注册层(Registration)— 惰性加载

注册时只解析 frontmatter 元数据,不加载 SKILL.md 正文内容。

Command 对象包含:name、description、allowedTools(元数据,加载时解析)以及 getPromptForCommand()(惰性加载器,调用时才读取全文)。

来源优先级:Bundled skills → 内置插件 skills → 目录 skills → Workflow → 插件 → 内置命令。

3. 系统提示注入 — 仅元数据

系统提示中只注入名称 + 描述,预算为上下文窗口的 1%(约 8000 字符),描述截断至最多 250 字符,内置 skills 不截断。

苏米注:完整内容仅在 skill 被调用时才按需加载,避免浪费上下文窗口。这是典型的惰性加载设计。

4. 调用层 — 两条路径

路径 A:用户直接输入 /skill

解析斜杠命令 → 查找 Command 对象 → 检查 context 字段 → "fork" 则在子 agent 中运行(隔离预算),否则内联处理。

路径 B:模型通过 Skill Tool 调用

模型生成 tool_use → 验证 + 权限检查 → SkillTool.call() → 返回 newMessages(包含 skill 内容)+ contextModifier(提升工具权限)→ 注入对话。

5. 内容加载层 — 按需加载 + 变量替换

内容转换管线:

  1. 解析 frontmatter,提取 markdown body
  2. 添加 Base directory: 前缀
  3. 替换 CLAUDE_SKILL_DIR 变量 → 实际 skill 目录路径
  4. 替换 CLAUDE_SESSION_ID 变量 → 当前会话 ID
  5. 执行内联 shell 命令(感叹号 + 反引号包裹),在 allowedTools 权限下运行
  6. 替换参数变量 → 用户提供的参数值

安全说明:MCP skills 永不执行内联 shell 命令;Base directory 帮助解析相对路径引用。

6. 内容如何进入模型上下文

完整消息流:

  1. System Prompt:包含 skill 列表元数据
  2. 对话历史
  3. 用户消息:"帮我提交代码"
  4. Assistant 调用 Skill tool
  5. Tool Result:success
  6. 注入 UserMessage:"Run /commit -m 'Fix'"
  7. 注入 UserMessage:SKILL.md 全部内容

模型看到完整 skill 内容,生成响应,同时拥有提升后的工具权限。

核心设计:完整内容作为 UserMessage 注入,而非放在系统提示,成为模型的直接输入。

7. 持久化层 — 压缩存活

每次 skill 被调用后,内容存入 STATE.invokedSkills Map(key 为 "agentId:skillName")。

压缩(compact)触发时,buildPostCompactMessages() 从 invokedSkills 重建 skill 内容并重新注入,确保 skill 指令在长对话压缩中不会丢失。

8. Hook 系统

Skills 可在 frontmatter 中声明 hooks,支持以下事件类型:

  • on_file_read — 文件即将被读取
  • on_file_write — 文件即将被写入
  • on_tool_call — 工具即将被调用
  • on_message_submit — 用户消息即将发送

每个 hook 支持 patterns(gitignore 风格)和 commands 配置,匹配时自动执行对应命令。

核心设计思想

设计原则 说明
惰性加载 注册时只解析元数据,调用时才读 SKILL.md 全文,节省启动时间和内存
双路径调用 用户直接 /skill 或模型通过 Skill tool,统一汇入相同的内容加载管线
系统提示只放元数据 完整内容作为 UserMessage 按需注入,避免浪费上下文窗口
预算控制 skill 列表限制在上下文窗口的 1%,描述超长时截断
压缩存活 invokedSkills Map 确保长对话压缩后 skill 指令不丢失
动态发现 文件操作时自动沿目录树发现新 skills,无需重启会话
安全模型 allowed-tools 限制 skill 权限,MCP skills 不执行 shell
缓存优化 getSkillDirCommands() 按 cwd 缓存,动态发现时清除缓存重建

苏米注:翻完这 8 层代码,有几个设计细节让人印象深刻——系统提示里只放名字和描述,完整内容等真正调用时才加载,不是偷懒,是在省上下文窗口,每个 token 都有成本。压缩存活机制(invokedSkills)解决了一个实际问题:对话太长被压缩后,模型不会「忘掉」自己在执行什么 Skill,会自动重新注入。动态发现也挺实用——读文件时沿目录往上找 .claude/skills/,不用重启就能加载新 Skill,天然适合团队把规范沉淀进项目里。

声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
未经允许不得转载:Claude Code Skill 加载与上下文注入机制完整解析:8 层架构源码级剖析
#Claude Code #Skill 机制 #上下文注入 #源码解析 #AI 编程 
收藏 1
llmfit 开源工具:一键检测你的电脑能跑哪些本地大模型
GPT Images 2.0 实测:10 大应用场景详解,中文字体支持重大升级
推荐阅读
  • Claude Code 源码泄露全解析:Autonomous 模式、AutoDream 与 Verification Agent 三大隐藏功能
  • MCP实战:Mock数据,让AI项目调试接口变得更简单,别再让后端拖后腿!
  • Cursor Agent模式下免费使用MCP的隐藏技巧:省钱又高效的开发新玩法
  • Cursor v0.48 重大更新,抢先体验自定义模式、聊天选项卡、声音通知、定价可见等
  • Claude Code YOLO 版来了:支持YOLO模式、支持配置国产大模型、无需登录、免配置网络!
评论 (0)
请登录后发表评论
分类精选
手把手教你用支付宝订阅 Cursor Pro:国内用户最全开通教程(附取消自动扣费)
28420 11月前
Claude Code Rules:claude.md文件配置完全指南
21668 10月前
Claude Code + MCP 实战教程:手把手教你如何在Claude Code里面使用MCP
15709 10月前
手把手教你在VS Code & Cline/RooCode 中使用Kimi K2 模型,配置实录+开发实战体验
14962 10月前
学生党0元白嫖!手把手教你解锁Cursor Pro年VIP,超详细申请教程(附避坑指南)
14934 1年前
Cursor 0.46更新,新增支持Claude 3.7 + GPT 4.5,Cursor Pro 无限续杯攻略,全自动化工具使用说明
13793 1年前
Claude Code 官方已支持Windows系统!手把手教你免费安装使用Claude Code
13791 10月前
Cursor进阶指南:如何解决Cursor上下文长度的限制超出后”降智“问题
13508 1年前
Cursor代码生成器中文使用教程,Cursor新手入门完全指南,全网最全面详细的Cursor使用教程
13308 1年前
手把手教你在Claude Code 中使用Kimi K2 模型,超简单配置教程分享
11233 10月前

文章目录

关注「苏米客」公众号

订阅推送更及时,手机查看更方便
分类排行
1 MumuSpec CLI 发布 npm:14 份 Spec 模板 + 五轮工作流,规范 AI 编程
2 Codex 深度使用指南:烧了 20 亿 Token 总结的 10 条实战经验
3 Claude Code Dynamic Workflows:从 Prompt 到 Loop 的 AI 编程范式转变
4 Codex Claude Code /goal 长时间运行指南:解决自动停止问题
5 Claude Code Dynamic Workflows 详解:编排复杂任务的工作流引擎
6 Superpowers 深度拆解:用语言级纪律系统解决 AI 假完成问题
7 WeSight 正式开源:统一调度 Claude Code、Codex 等 Agent 的桌面控制台
8 Claude Code vs Codex 深度对比:20% 精准编辑 + 80% 日常编码的最佳实践
9 gpt-image-2 生成大屏设计稿到代码还原:完整实现指南
10 Zed 编辑器 1.0 发布:Rust 打造极致性能,AI 原生体验全面超越 VS Code
©2015-2024 苏米客XMSUMI 版权所有 · WWW.XMSUMI.COM 闽ICP备14005900号-6
微信文章助手 程序库 免费影视APP 免费字体下载 Axure RP 10 免费Axure模板 Axure元件库下载 申请友联