Claude Code 中 Skill 是通过元数据预加载、意图匹配、动态上下文注入、工具权限授予的流程被大模型调用的,核心是按需加载、最小化上下文、自动调度

一、Skill 的本质与结构

Skill 是一个标准化的技能包(文件夹),核心文件是 SKILL.md,包含两部分:

  1. YAML 元数据(前置)name(技能名,对应 /skill-name 命令)、description(触发描述,决定自动调用时机)、allowed-tools(允许使用的工具,如 Bash、Read、Git 等)。
  2. 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-message Skill 处理你的请求”。

3. 激活:动态上下文注入(加载阶段)

匹配成功后,Claude Code 执行:

  • 将该 Skill 的完整 SKILL.md 指令隐藏元提示(Meta-Prompt)形式,动态注入当前对话上下文
  • 临时授予该 Skill 声明的工具权限(如 allowed-tools: Bash(git:*)),模型获得执行对应操作的能力。
  • 按需加载 Skill 关联的资源文件references/ 文档、scripts/ 脚本),不加载无关内容。

4. 执行:按指令完成任务(执行阶段)

模型带着注入的指令与权限,执行:

  • 调用允许的工具(如执行 git diff、读取文件)。
  • 严格遵循 SKILL.md 中的步骤与规则,生成标准化结果。
  • 执行完成后,Skill 上下文与权限自动回收,不污染后续对话。

三、两种调用方式

  1. 自动调用(推荐)

    • 无需手动触发,模型根据 description 自动匹配并激活。
    • 示例:用户说“帮我生成规范的 git 提交信息”,模型自动调用 git-commit-message Skill。
  2. 手动调用(显式)

    • 使用 /技能名 斜杠命令,强制激活指定 Skill。
    • 示例:/git-commit-message请使用 git-commit-message Skill 处理

四、核心设计原理

  • 渐进式披露(Progressive Disclosure):元数据 → 完整指令 → 资源,三级按需加载,大幅降低 Token 消耗(减少 50%–80%)。
  • 元工具架构(Meta-Tool):Skill 不是外部代码,而是动态注入的提示词,模型在统一上下文内调度,避免幻觉。
  • 最小权限原则:仅授予当前 Skill 所需工具,保障安全与上下文纯净。

五、调用时序示例(git-commit-message)

  1. 用户:“帮我生成规范的 git 提交信息”
  2. 模型匹配 git-commit-messagedescription,决定激活
  3. Claude Code 注入 git-commit-message/SKILL.md 完整指令
  4. 授予 Bash(git:*) 权限
  5. 模型执行:git diff → 解析变更 → 生成 feat: add user login module
  6. 返回结果,Skill 上下文自动退出