Claude Code 中 Skill 是通过元数据预加载、意图匹配、动态上下文注入、工具权限授予的流程被大模型调用的,核心是按需加载、最小化上下文、自动调度。
一、Skill 的本质与结构
Skill 是一个标准化的技能包(文件夹),核心文件是 SKILL.md,包含两部分:
- YAML 元数据(前置):
name(技能名,对应/skill-name命令)、description(触发描述,决定自动调用时机)、allowed-tools(允许使用的工具,如 Bash、Read、Git 等)。 - Markdown 执行指令:详细的步骤、规则、最佳实践,即给模型的“任务说明书”。
示例 SKILL.md:
name: git-commit-message
description: 从 git diff 生成规范提交信息,用户提及 commit、git、版本控制时使用
allowed-tools: ["Bash(git:*)", "Read"]
# Git 提交信息生成规则
1. 读取当前目录的 git diff
2. 提取变更类型(feat/fix/docs/refactor...)
3. 生成符合 Conventional Commits 格式的信息
二、大模型调用 Skill 的完整流程(三级加载 + 自动调度)
1. 启动:元数据预加载(发现阶段)
- Claude Code 启动时,仅加载所有 Skill 的元数据(
name+description+ 少量配置),不加载完整指令与资源。 - 元数据形成“技能目录”,常驻上下文,让模型知道“有哪些技能、分别做什么”。
- 加载优先级:个人技能(~/.claude/skills/)> 项目技能(.claude/skills/)> 插件技能。
2. 对话:意图匹配(决策阶段)
用户输入自然语言后,模型执行:
- 扫描“技能目录”,将用户意图与每个 Skill 的
description做语义匹配。 - 匹配度超过阈值时,决定激活该 Skill(自动调用);也可通过
/skill-name手动强制调用。 - 模型会在思考链中显式说明:“我将使用
git-commit-messageSkill 处理你的请求”。
3. 激活:动态上下文注入(加载阶段)
匹配成功后,Claude Code 执行:
- 将该 Skill 的完整
SKILL.md指令以隐藏元提示(Meta-Prompt)形式,动态注入当前对话上下文。 - 临时授予该 Skill 声明的工具权限(如
allowed-tools: Bash(git:*)),模型获得执行对应操作的能力。 - 按需加载 Skill 关联的资源文件(
references/文档、scripts/脚本),不加载无关内容。
4. 执行:按指令完成任务(执行阶段)
模型带着注入的指令与权限,执行:
- 调用允许的工具(如执行
git diff、读取文件)。 - 严格遵循
SKILL.md中的步骤与规则,生成标准化结果。 - 执行完成后,Skill 上下文与权限自动回收,不污染后续对话。
三、两种调用方式
自动调用(推荐)
- 无需手动触发,模型根据
description自动匹配并激活。 - 示例:用户说“帮我生成规范的 git 提交信息”,模型自动调用
git-commit-messageSkill。
- 无需手动触发,模型根据
手动调用(显式)
- 使用
/技能名斜杠命令,强制激活指定 Skill。 - 示例:
/git-commit-message或请使用 git-commit-message Skill 处理。
- 使用
四、核心设计原理
- 渐进式披露(Progressive Disclosure):元数据 → 完整指令 → 资源,三级按需加载,大幅降低 Token 消耗(减少 50%–80%)。
- 元工具架构(Meta-Tool):Skill 不是外部代码,而是动态注入的提示词,模型在统一上下文内调度,避免幻觉。
- 最小权限原则:仅授予当前 Skill 所需工具,保障安全与上下文纯净。
五、调用时序示例(git-commit-message)
- 用户:“帮我生成规范的 git 提交信息”
- 模型匹配
git-commit-message的description,决定激活 - Claude Code 注入
git-commit-message/SKILL.md完整指令 - 授予
Bash(git:*)权限 - 模型执行:
git diff→ 解析变更 → 生成feat: add user login module - 返回结果,Skill 上下文自动退出