目录
什么是 Skills?
Skills vs 传统 Prompt vs Tools:核心区别
Skills 的核心结构:SKILL.md 详解
SKILL.md Frontmatter 字段完全参考
进阶目录结构:scripts / references / assets
底层实现原理:元工具架构(Meta-Tool Architecture)
渐进式披露(Progressive Disclosure)机制
Skills 的应用场景
常用设计模式(Patterns)
完整实战示例:从需求到运行
最佳实践与常见错误
Skills 与 MCP / Tools / System Prompt 的生态关系
一、什么是 Skills? 一句话定义 :Skills 是封装了某类事情应该怎么专业做 的可复用能力模块,以 Markdown 文件夹形式存在,AI Agent 按需加载,像调用函数一样反复使用。
在 AI Agent 时代,通用大语言模型(LLM)虽然能生成流畅的文字和代码,但它本质上是一个「无经验的聪明实习生」——它懂很多道理,但不知道你的公司规范是什么、你的项目流程是什么、遇到这个特定任务该走哪套 SOP。
Skills 解决的核心痛点 :
每次执行相同任务都需要重新在 Prompt 里写一大段指令 → 浪费 token,且不稳定
Agent 不知道在什么场景下调用哪套流程
领域知识、公司规范无法结构化地传递给 AI
复杂工作流无法被标准化复用
Skills 的出现,标志着 AI 应用从「对话交互」向「任务执行」的关键跃迁。
Skills 的核心特性
特性
说明
模块化
每个 Skill 是独立的能力单元,互不干扰
按需加载
只有在任务相关时才被加载进上下文,节省 Token
渐进式披露
先暴露元数据(name/description),匹配后才加载完整指令
可复用
一次编写,跨项目、跨对话反复使用
可组合
多个 Skill 可配合 Tools 联合工作
可版本化
支持 version 字段,便于迭代管理
在理解 Skills 之前,需要先厘清它与相关概念的边界。
用「实习生培训」来类比 把 AI 想象成一个刚毕业的聪明但没经验的实习生 :
普通 Prompt = 你每次都要从头教他怎么做事(今天教一遍,明天还得重新教)
Rule / Memory(规则/记忆) = 你给他贴一张”公司行为守则”在工位上(一直生效,但只能管态度和格式)
MCP / Tools = 你给他电脑装了一堆软件和 API(他能调用外部工具,但不知道什么时候该用、怎么组合用)
Skills = 你直接给他一整套 **”岗位培训大礼包”**(PDF+流程图+SOP+话术模板+常用脚本),告诉他:”当老板让你做这类事情时,就按这个文件夹里的方法来做”
技术层面对比
维度
传统 Prompt
System Prompt
Tools
Skills
作用范围
当次对话
全局持久
单次调用
按需激活
加载时机
每次手动写
始终占用 Context
任务时调用
匹配时自动加载
Token 消耗
高(重复)
高(一直占用)
低
低(按需加载)
确定性
低
中
高
高
复用性
无
有限
有
强
包含内容
文本指令
文本指令
可执行函数
指令+脚本+资源+模板
本质
文本
文本
代码
Prompt 模板 + 上下文注入
一个更精准的区分:
Tools 让 Agent 能做某件事(比如能搜索网页)
Skills 让 Agent 知道在什么情况下、按什么流程、用什么标准去做某件事
工具扩展 capability(能力) ,Skills 扩展 competence(胜任力) 。
三、Skills 的核心结构:SKILL.md 详解 每个 Skill 就是一个文件夹 ,文件夹名即技能标识(推荐 kebab-case 小写+连字符)。文件夹中唯一必须存在的文件是 SKILL.md。
最简目录结构 1 2 3 ~/.claude/skills/ └── my-skill/ ← 技能文件夹名 └── SKILL.md ← 唯一必填文件(必须全大写 + .md 小写)
SKILL.md 基本模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 --- name: your-skill-name description: >- What it does and when Claude should use it. Trigger scenarios: when user asks to..., keywords like... version: 1.0 author: yourname --- # Skill Title ## Overview [What this skill does and what problem it solves] ## Instructions ### Step 1: [First Action] [Imperative, concrete instructions] ### Step 2: [Next Action] [Imperative, concrete instructions] ## Output Format [How to structure results] ## Examples - Example 1: ...- Example 2: ...## Guidelines - Guideline 1- Guideline 2
SKILL.md 由两部分构成:
YAML Frontmatter (--- 之间的部分):配置元数据,控制 Skill「如何被发现和运行」
Markdown 正文 :Prompt 内容,控制 Claude「具体做什么」
四、SKILL.md Frontmatter 字段完全参考 这是整个 Skill 系统中最关键的部分,因为 Claude 正是靠这里的 description 来决定是否加载当前 Skill。
4.1 name(必填) 1 name: code-comment-expert
只能使用小写字母、数字和连字符
最多 64 个字符
同时也是 /slash 命令名(用户可以用 /code-comment-expert 手动触发)
4.2 description(必填 · 最关键字段!) 1 2 3 4 description: >- 为代码添加专业、清晰的中英双语注释。 适合缺少文档、可读性差、需要分享审查的代码。 常见触发场景:加注释、注释一下、加文档、explain this、improve readability
这是 Claude 判断是否加载该 Skill 的唯一依据
最多 1024 个字符
建议明确写出:这个 Skill 做什么 + 什么时候用它 + 触发关键词
⚠️ 关键原则 :description 写得越精准,Skill 被正确触发的概率越高。
4.3 trigger_keywords(强烈推荐) 1 2 3 4 5 6 7 8 trigger_keywords: - 加注释 - 注释 - 加文档 - explain code - document - comment this - readability
1 2 3 4 5 allowed-tools: "Read,Write,Edit,Glob,Grep" allowed-tools: "Bash(git status:*),Bash(git diff:*),Read,Grep"
4.5 model(可选) 1 2 3 model: "claude-opus-4-20250514" model: "inherit"
4.6 version(可选)
4.7 disable-model-invocation(可选) 1 disable-model-invocation: true
设为 true 后,该 Skill 只能通过用户手动输入 /skill-name 触发,不会被自动调用。
4.8 mode(可选)
将该 Skill 标记为”模式命令”,适合 debug-mode、review-mode 等全局行为修改 Skill。
五、进阶目录结构:scripts / references / assets 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ~/.claude/skills/react-component-review/ ├── SKILL.md # 核心指令 + 元数据(建议控制在 400 行内) │ ├── templates/ # 常用模板(Claude 按需读取) │ ├── functional.tsx.md │ └── class-component.md │ ├── examples/ # 优秀/反例(给 Claude 看标准) │ ├── good.md │ └── anti-pattern.md │ ├── references/ # 规范、规则、参考文档(加载进 Context) │ ├── hooks-rules.md │ └── naming-convention.md │ └── scripts/ # 可执行脚本 ├── validate-props.py └── check-cycle-deps.sh
三个目录的核心区别
目录
内容类型
加载方式
Token 消耗
scripts/
可执行代码(Python/Shell)
Bash 工具运行
低(只传路径)
references/
文本/文档(Markdown/JSON)
Read 工具加载进 Context
高(内容进入 Context)
assets/
模板/二进制文件
路径引用,不加载内容
极低
使用 {baseDir} 变量(必须!) 1 2 python {baseDir}/scripts/analyzer.py --path "$TARGET" python /home/user/.claude/skills/my-skill/scripts/analyzer.py
6.1 Skills 本质上是什么? Skills 不是可执行代码 。它们不运行 Python 或 JavaScript,背后没有 HTTP Server。
Skills 的本质是:专门化的 Prompt 模板,通过注入对话上下文来修改 Claude 的推理方式 。
当一个 Skill 被调用时,发生的事情是:
将 SKILL.md 的内容加载为详细指令
将这些指令作为新的 User Message 注入对话 Context
修改执行环境(允许的工具列表、模型选择)
Claude 在这个被「增强」的 Context 下继续执行任务
在 Claude Code 内部,所有 Skills 通过一个叫做 Skill(大写 S)的元工具 来管理:
1 2 3 4 5 6 7 8 Claude 看到的工具列表: ├── Read ← 普通工具 ├── Write ← 普通工具 ├── Bash ← 普通工具 └── Skill ← 元工具(管理所有 skills) ├── pdf ├── xlsx └── code-comment-expert
元工具 Skill 的描述中包含了所有可用 Skills 的 name 和 description 列表,Claude 用自身的语言理解能力 来判断是否匹配。
重要 :技能选择没有算法路由,没有意图分类器,没有 Embedding 匹配。这是纯粹的 LLM 推理 ——决策发生在 Transformer 的前向传播中。
6.3 实际 API 请求结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "model" : "claude-sonnet-4-5" , "messages" : [ { "role" : "user" , "content" : "帮我给这段代码加上注释" } ] , "tools" : [ { "name" : "Skill" , "description" : "Execute a skill...\n\n<available_skills>\n\"code-comment-expert\": 为代码添加专业注释...\n</available_skills>" , "input_schema" : { "type" : "object" , "properties" : { "command" : { "type" : "string" , "description" : "The skill name" } } } } , { "name" : "Bash" } , { "name" : "Read" } ] }
6.4 Skill 执行时的双消息注入机制 当 Claude 决定调用某个 Skill,系统会注入两条消息 :
消息一:用户可见的状态提示(isMeta: false)
1 2 <command-message > The "code-comment-expert" skill is loading</command-message > <command-name > code-comment-expert</command-name >
消息二:完整 Skill 指令(isMeta: true,用户不可见)
1 2 3 4 5 6 7 8 你现在是「专业代码注释专家」。 ## 核心原则 - 只在缺少注释或可读性明显不足处添加 - 优先使用英文 JSDoc / TSDoc 风格 ...(完整的 SKILL.md 正文) Base directory: /home/user/.claude/skills/code-comment-expert
设计选择
原因
两条消息(可见短摘要 + 隐藏完整指令)
用户知道发生了什么,AI 获得完整指令,两全其美
6.5 消息流对比 1 2 3 4 5 6 7 8 9 10 普通工具(如 Read): assistant → tool_use (Read file.txt) user → tool_result (file contents...) Skill 工具: assistant → tool_use (Skill: code-comment-expert) user → tool_result (success) user → <command-message>...</command-message> [可见] user → [完整 SKILL.md 指令, isMeta: true] [隐藏] user → [权限消息 command_permissions] [隐藏]
七、渐进式披露(Progressive Disclosure)机制 三层渐进式披露 1 2 3 4 5 第一层:元数据(name + description)约 200 tokens ↓ Claude 判断匹配 第二层:完整 SKILL.md 内容加载进 Context,约 1500-5000 tokens ↓ Claude 开始执行,发现需要更多信息 第三层:按需加载 scripts/ references/ assets/ 中的文件
Token 消耗对比
方案
每次对话 Token 消耗(10个 Skills)
全部塞入 System Prompt
~20,000 tokens(始终占用)
Skills 渐进式披露
~200 tokens + 按需加载
当用户只用到 1 个 Skill 时,节省约 18,000 tokens 。
八、Skills 的应用场景 8.1 企业内部规范沉淀 1 2 3 4 5 .claude/skills/ ├── commit-convention/ ← Git 提交规范 ├── code-review-standard/ ← 代码审查标准 ├── api-doc-generator/ ← API 文档生成规范 └── pr-template/ ← PR 描述模板
8.2 复杂文档处理工作流
PDF Skill :调用 pdftotext 工具提取文本,按特定格式整理
Excel Skill :读取数据、分析结构、生成可视化报告
技术文章转公众号 Skill :总结→翻译→调整风格→加标题→输出 Markdown
8.3 领域专家系统
安全审计 Skill :按 OWASP Top 10 逐一检查代码漏洞
性能优化 Skill :按特定框架的最佳实践审查代码性能
财务分析 Skill :按公司财务建模规范分析数据
8.4 多步骤向导流程 复杂的初始化、配置、部署流程可以封装为 Skills:
新项目初始化向导
数据库迁移助手
CI/CD 配置生成器
8.5 跨项目知识共享 个人全局 Skills(~/.claude/skills/)可以在所有项目中使用:
个人写作风格 Skill
常用代码模板 Skill
个人调试流程 Skill
九、常用设计模式(Patterns) Pattern 1:脚本自动化(Script Automation) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --- name: dependency-audit description: 审计项目依赖安全漏洞,适合发布前检查或定期安全审查 allowed-tools: "Bash(npm audit:*),Read,Write" --- # 依赖安全审计 ## 执行流程 1. 运行安全审计脚本: python {baseDir}/scripts/audit.py --path "." --output audit-report.json 2. 读取生成的 audit-report.json 3. 按严重程度分类展示漏洞 4. 给出修复建议
Pattern 2:读取-处理-输出(Read-Process-Write) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 --- name: tech-to-wechat description: 将技术文章转换为公众号风格,适合需要发布技术内容的场景 allowed-tools: "Read,Write" --- # 技术文章公众号化 ## 处理步骤 1. 用 Read 工具读取原始文章2. 执行转换:简化术语、拆分长段、增加过渡句3. 生成 3-5 个候选标题(包含数字或疑问句式)4. 用 Write 工具输出最终 Markdown 文件
Pattern 3:搜索-分析-报告(Search-Analyze-Report) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --- name: dead-code-finder description: 检测项目中未被使用的代码,适合代码库清理和重构前使用 allowed-tools: "Grep,Read,Glob" --- # 死代码检测 ## 分析流程 ### Pass 1:广泛扫描 1. 用 Glob 获取所有 .ts/.tsx/.js/.jsx 文件列表2. 用 Grep 提取所有 export 的函数/类/变量名### Pass 2:引用验证 对每个已导出符号,用 Grep 搜索引用,引用数为 0 则标记为疑似死代码 ### Pass 3:报告生成 输出表格:文件路径、符号名称、类型、建议(删除/保留/待确认)
Pattern 4:向导式多步骤工作流(Wizard-Style Workflow) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 --- name: new-feature-wizard description: 新功能开发向导,引导完成从需求分析到代码生成的完整流程 allowed-tools: "Read,Write,Bash(git:*)" --- ## Step 1:需求澄清 询问:功能名称、用户故事、技术约束,等待用户确认后继续。 ## Step 2:技术方案设计 读取现有代码,设计接口,输出技术方案,等待用户确认。 ## Step 3:代码生成 按照确认的方案生成代码,参考 references/coding-standards.md
十、完整实战示例:从需求到运行 场景:Python 代码规范强制 Skill 需求 :团队规定所有 Python 内部辅助函数必须以 _internal_ 前缀命名。
Step 1:创建目录结构 1 2 cd my-projectmkdir -p .claude/skills/python-naming-standard
Step 2:编写 SKILL.md 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 --- name: python-naming-standard description: >- 当用户要求重构、审查或编写 Python 代码时,请参考此内部命名规范。 适用场景:写代码、重构、code review、命名建议、代码审查 trigger_keywords: - 写代码 - 重构 - code review - 命名 - Python 函数 version: 1.0 allowed-tools: "Read,Write,Edit" --- # Python 内部命名规范 ## 核心规则 1. **所有内部辅助函数** 必须以 `_ internal_` 前缀命名 2. **公共 API 函数** 不使用下划线前缀 3. **私有方法** (类内部)使用 `__` 双下划线前缀 ## 命名示例 正确:内部辅助函数 def _internal_calculate_risk(score: float) -> float: ... 正确:公共 API def calculate_user_discount(user_id: str) -> float: ... 错误:内部函数缺少 _internal_ 前缀 def _calculate_risk(score: float) -> float: ... ## 执行要求 - 生成新代码时,自动按此规范命名 - 审查现有代码时,发现违规立即指出并给出重命名建议
Step 3:Claude 自动生成符合规范的代码 输入:帮我写一个计算用户折扣的函数
Claude 自动加载 Skill,输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def calculate_user_discount (user_id: str , score: int , total_spent: float ) -> float : """计算用户折扣率。""" risk_factor = _internal_calculate_risk_factor(score) loyalty_bonus = _internal_get_loyalty_bonus(total_spent) return min (0.3 , risk_factor + loyalty_bonus) def _internal_calculate_risk_factor (score: int ) -> float : """内部:根据积分计算风险系数。""" if score >= 1000 : return 0.15 elif score >= 500 : return 0.10 return 0.05 def _internal_get_loyalty_bonus (total_spent: float ) -> float : """内部:根据历史消费计算忠诚度奖励。""" if total_spent >= 10000 : return 0.10 elif total_spent >= 5000 : return 0.05 return 0.0
所有内部函数自动带上 _internal_ 前缀,无需任何手动提示 。
Step 4:添加验证脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import ast, sysfrom pathlib import Pathdef check_file (filepath: str ) -> list : violations = [] tree = ast.parse(Path(filepath).read_text()) for node in ast.walk(tree): if isinstance (node, ast.FunctionDef): name = node.name if name.startswith('_' ) and not name.startswith('__' ) and not name.startswith('_internal_' ): violations.append({ 'line' : node.lineno, 'current' : name, 'suggested' : f'_internal_{name.lstrip("_" )} ' }) return violations if __name__ == '__main__' : filepath = sys.argv[1 ] violations = check_file(filepath) if violations: print (f"发现 {len (violations)} 处命名违规:" ) for v in violations: print (f" 第 {v['line' ]} 行: {v['current' ]} → 建议改为: {v['suggested' ]} " ) else : print ("命名规范检查通过" )
十一、最佳实践与常见错误 最佳实践 1. Description 写清楚触发场景
1 2 3 4 5 6 7 description: >- 为 React 组件进行 code review,检查性能、可维护性和最佳实践。 触发关键词:code review, 审查, 组件, react, 优化 description: React component reviewer
2. 使用命令式语言,而非第二人称
1 2 分析代码中的安全漏洞... 你应该分析代码中的安全漏洞...
3. 控制 SKILL.md 长度 :建议 400-800 行,超出内容放 references/ 按需加载
4. 最小权限原则
1 2 allowed-tools: "Read,Grep,Glob" allowed-tools: "Bash,Read,Write,Edit,Glob,Grep,WebSearch"
5. 始终使用 {baseDir} 而非绝对路径
常见错误排查
错误现象
原因
解决方案
Skill 从不被自动触发
description 太模糊
增加具体触发场景和关键词
Skill 在不相关场景触发
description 太宽泛
明确「什么时候不用」
脚本执行失败
使用了绝对路径
改用 {baseDir} 变量
Token 消耗过大
大量内容塞进 SKILL.md
拆分到 references/ 按需加载
工具权限被拒绝
allowed-tools 未包含所需工具
检查并补充缺少的工具权限
多个 Skill 互相干扰
description 重叠
重新设计各 Skill 的触发边界
完整的 Agent 能力层次 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ┌─────────────────────────────────────────────────────────┐ │ 用户意图 │ └────────────────────────┬────────────────────────────────┘ │ ┌────────────────────────▼────────────────────────────────┐ │ Skills(能力运用层) │ │ · 什么时候用什么工具 · 按什么流程执行任务 │ │ · 按什么标准产出结果 │ └──────┬───────────────────────────────────┬──────────────┘ │ │ ┌──────▼──────┐ ┌───────▼──────────────┐ │ Tools │ │ MCP Servers │ │ (能力执行层)│ │ (能力扩展层) │ │ Read/Write │ │ Database/API/etc. │ └─────────────┘ └──────────────────────┘
各层能力定位
维度
System Prompt
Skills
Tools
MCP
作用
定义全局人格/约束
定义专项工作流
执行具体动作
扩展外部能力
持久性
全局永久
按需激活
单次调用
按需连接
典型用途
设置助手人格
封装 SOP
搜索/计算/文件
访问数据库/API
四者缺一不可,各司其职 。Skills 的价值在于把分散的 Tools 和 MCP 能力组织成有意义的、可复用的工作流。
附录:Skills 快速参考卡 必填字段 1 2 3 4 5 6 7 --- name: skill-name description: >- What it does. When to use it. Trigger scenarios: ... ---
目录结构速查 1 2 3 4 5 my-skill/ ├── SKILL.md # 必须 ├── scripts/ # 可执行脚本(Bash/Python) ├── references/ # 参考文档(加载进 Context) └── assets/ # 模板文件(按路径引用)
Skills 加载位置优先级 1 2 3 4 .claude/skills/ (项目级,最高优先级) ~/.claude/skills/ (用户全局) ~/.config/claude/skills/ (系统配置) 内置 Skills (最低优先级)
Path 引用规范 1 2 3 python {baseDir}/scripts/process.py 参考 {baseDir}/references/standards.md python /home/user/.claude/skills/my-skill/scripts/process.py