把你的经验变成 Claude 的能力,一次配置,终身受益
写在前面
说实话,你是否遇到过这样的场景?
周一早上:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」
周二下午:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」
周三晚上:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」
你心里:我为什么要重复说三遍?!
更让人崩溃的是——你精心调教好的指令,下次用的时候 Claude 又「忘」了:
你:「审查一下这个函数。」
Claude:「检查完毕,没有问题。」
你:「等等!你怎么没检查 SQL 注入?上次明明说了要检查的!」
问题出在哪?
不是 Claude 不聪明,而是你每次都在「从零开始」。
让我们抽丝剥茧,看看这背后的本质:

Skills 就是为了解决这个问题——把你的经验变成 Claude 的能力。
把 Skill 想象成 Claude 的「技能书」:
- 你写好说明书
- Claude 读完后按照说明书执行
- 可以反复使用,永远不忘
这篇文章,我们从头开始,教你封装第一个 Skill。
一、什么是 Skill?
1.1 一句话定义
Skill 是一段告诉 Claude "怎么做事" 的说明。
把它理解成 Claude 的"技能书":
- 你写好说明书
- Claude 读完后按照说明书执行
- 可以反复使用
1.2 Skill 的本质

1.3 Skill 和 CLAUDE.md 的区别
| 对比项 | CLAUDE.md | Skill |
|---|---|---|
| 用途 | 项目背景知识 | 可执行的操作能力 |
| 触发方式 | 自动加载 | 自动或手动触发 |
| 是否可调用 | 不可以 | 可以用 /skill-name |
| 典型内容 | 规范、约束、架构 | 工作流程、检查清单 |
简单说:CLAUDE.md 是"项目说明书",Skill 是"操作手册"。
二、创建你的第一个 Skill
2.1 场景:代码解释器
我们创建一个教 Claude 用图表和类比来解释代码的 Skill。
Step 1:创建目录
# 个人 Skill 目录(所有项目可用)
mkdir -p ~/.claude/skills/explain-code
Step 2:编写 SKILL.md
创建 ~/.claude/skills/explain-code/SKILL.md:
---
name: explain-code
description: 用可视化图表和类比来解释代码。当用户问"这段代码怎么工作"或需要讲解代码时使用。
---
# 代码解释器
解释代码时,始终包含以下内容:
1. **类比开头**:把代码比作日常生活中的事物
2. **画个图**:用 ASCII 图展示流程、结构或关系
3. **逐步走读**:解释每一步发生了什么
4. **提示陷阱**:常见的错误或误解是什么
保持解释的对话感。对于复杂概念,使用多个类比。
就这么简单!
2.2 测试 Skill
有两种方式触发:
方式一:让 Claude 自动调用
> 这段代码是怎么工作的?
如果你的问题描述匹配 Skill 的 description,Claude 会自动加载。
方式二:手动调用
> /explain-code src/auth/login.ts
直接用 / 加 Skill 名称调用。
2.3 Skill 文件结构
explain-code/
├── SKILL.md # 主文件(必需)
├── examples.md # 示例(可选)
├── reference.md # 参考文档(可选)
└── scripts/ # 脚本(可选)
└── helper.py
只有 SKILL.md 是必需的,其他都是可选的增强内容。
三、SKILL.md 详解:前置元数据
3.1 基本结构
SKILL.md 分为两部分:
---
# YAML 前置元数据(在 —— 之间)
name: my-skill
description: 这个 Skill 做什么
---
# Markdown 内容
这里是给 Claude 的具体指令...
3.2 前置元数据字段
---
name: my-skill # Skill 名称,用于 /my-skill 调用
description: 这个 Skill 的作用 # Claude 用它判断何时自动加载
argument-hint: [文件名] # 自动完成时的参数提示
disable-model-invocation: true # 禁止 Claude 自动调用(只能手动触发)
user-invocable: false # 从 / 菜单隐藏
allowed-tools: Read, Grep # 限制可用的工具
context: fork # 在子代理中运行
agent: Explore # 指定子代理类型
---
3.3 关键字段详解
name(名称)
- 用于
/name调用 - 只能小写字母、数字、连字符
- 最多 64 字符
# ✅ 好的命名
name: code-review
name: gen-commit-msg
name: api-docs
# ❌ 不好的命名
name: CodeReview # 有大写
name: code_review # 有下划线
description(描述)
这是最重要的字段! Claude 用它判断何时自动加载 Skill。
# ❌ 太笼统
description: 帮助写代码
# ✅ 具体明确
description: 审查代码的安全性、性能和规范性。当用户请求代码审查、Code Review 或检查代码质量时使用。
disable-model-invocation(禁止自动调用)
有些 Skill 你只想手动触发,不希望 Claude 自动使用:
# 部署 Skill - 不希望 Claude 自动部署!
---
name: deploy
description: 部署应用到生产环境
disable-model-invocation: true
---
部署 $ARGUMENTS 到生产环境:
1. 运行测试
2. 构建应用
3. 推送到部署目标
allowed-tools(限制工具)
创建"只读模式"的 Skill:
---
name: safe-reader
description: 安全地读取文件,不做任何修改
allowed-tools: Read, Grep, Glob
---
只使用读取工具来分析文件...
四、SKILL.md 详解:内容编写
4.1 两种内容类型
参考内容:添加知识,Claude 应用于当前工作
---
name: api-conventions
description: 本项目的 API 设计规范
---
编写 API 端点时:
- 使用 RESTful 命名
- 返回统一的错误格式
- 包含请求验证
- 添加 OpenAPI 注释
任务内容:提供具体操作步骤
---
name: deploy
description: 部署应用到生产环境
disable-model-invocation: true
---
部署步骤:
1. 运行 `npm test` 确保测试通过
2. 运行 `npm run build` 构建
3. 检查构建产物
4. 执行部署命令
5. 验证部署结果
4.2 使用 $ARGUMENTS 接收参数
---
name: fix-issue
description: 修复 GitHub Issue
disable-model-invocation: true
---
修复 GitHub Issue $ARGUMENTS:
1. 使用 `gh issue view` 读取 Issue 描述
2. 理解需求
3. 实现修复
4. 编写测试
5. 创建 commit
调用时:
> /fix-issue 123
Claude 会把 123 替换到 $ARGUMENTS 的位置。
4.3 添加支持文件
对于复杂的 Skill,可以把内容拆分到多个文件:
code-review/
├── SKILL.md # 主文件(概览)
├── security.md # 安全检查清单
├── performance.md # 性能检查清单
└── style.md # 代码风格指南
在 SKILL.md 中引用:
---
name: code-review
description: 全面的代码审查
---
# 代码审查
## 检查清单
### 安全性
详见 [security.md](security.md)
### 性能
详见 [performance.md](performance.md)
### 代码风格
详见 [style.md](style.md)
原则:SKILL.md 保持简洁(<500 行),详细内容放支持文件。
五、Skill 存放位置
5.1 三种存放位置
| 位置 | 路径 | 适用范围 |
|---|---|---|
| 个人 | ~/.claude/skills/ |
所有项目 |
| 项目 | .claude/skills/ |
仅此项目 |
| 插件 | 启用插件的项目 |
5.2 位置选择建议
| Skill 类型 | 推荐位置 | 原因 |
|---|---|---|
| 通用工作流(commit、review) | 个人 | 所有项目都能用 |
| 项目特定(部署、测试) | 项目 | 团队共享 |
| 敏感操作(发布、密钥) | 项目 | 需要团队控制 |
5.3 嵌套目录自动发现
在大型项目中,Claude 会自动发现子目录的 Skill:
monorepo/
├── .claude/skills/ # 根目录 Skill
│ └── review/
├── packages/
│ └── frontend/
│ └── .claude/skills/ # 前端包专属 Skill
│ └── component/
当你在 packages/frontend/ 目录工作时,两种 Skill 都可用。
六、实战案例:三个常用 Skill
6.1 代码审查 Skill
---
name: code-review
description: 审查代码的安全性、性能和规范性。当请求代码审查或 Code Review 时使用。
allowed-tools: Read, Grep, Glob
---
# 代码审查清单
## 安全性检查
- [ ] SQL 注入:参数化查询?
- [ ] XSS:用户输入转义?
- [ ] 硬编码密钥:没有敏感信息?
- [ ] 权限检查:访问控制到位?
## 性能检查
- [ ] N+1 查询:循环中没有数据库调用?
- [ ] 缓存:热点数据有缓存?
- [ ] 索引:查询用了索引?
- [ ] 内存:没有内存泄漏?
## 代码规范
- [ ] 命名:清晰有意义?
- [ ] 复杂度:函数不超过 50 行?
- [ ] 注释:复杂逻辑有说明?
- [ ] 测试:有对应的测试?
## 输出格式
### 发现的问题
| 类型 | 文件 | 行号 | 描述 | 严重程度 |
|------|------|------|------|----------|
| 安全 | xxx | 10 | xxx | 高 |
### 建议修改
[具体修改建议]
6.2 Commit Message 生成器
---
name: commit
description: 生成符合规范的 Git commit message
disable-model-invocation: true
---
# Commit Message 生成器
根据代码变更生成 commit message,格式如下:
():
```
Type 类型
- feat: 新功能
- fix: Bug 修复
- docs: 文档变更
- style: 代码格式(不影响逻辑)
- refactor: 重构
- test: 测试相关
- chore: 构建/工具
生成步骤
- 使用
git diff --cached查看暂存的变更 - 分析变更内容
- 确定类型和范围
- 生成 message
- 询问是否确认
示例
feat(auth): 添加记住登录功能
- 新增 rememberMe 参数到 login API
- 更新 token 有效期逻辑
- 添加相关单元测试
Closes #123
### 6.3 API 文档生成器
```markdown
---
name: api-docs
description: 为 API 端点生成文档。当需要生成或更新 API 文档时使用。
argument-hint: [文件路径]
---
# API 文档生成器
为指定的 API 文件生成 Markdown 文档。
## 文档模板
```markdown
## 端点名称
**URL**: `METHOD /path/to/endpoint`
### 描述
[API 功能描述]
### 请求参数
| 参数名 | 类型 | 必需 | 描述 |
|--------|------|------|------|
| xxx | string | 是 | xxx |
### 请求示例
```json
{
"key": "value"
}
响应
| 字段 | 类型 | 描述 |
|---|---|---|
| xxx | string | xxx |
响应示例
{
"code": 200,
"data": {}
}
错误码
| 错误码 | 描述 |
|---|---|
| 400 | 参数错误 |
| 401 | 未授权 |
## 生成步骤
1. 读取 $ARGUMENTS 指定的文件
2. 解析 API 端点定义
3. 提取参数和返回值
4. 按模板生成文档
5. 输出到 docs/api/ 目录
七、高级技巧
7.1 动态上下文注入
用 !command`` 语法在 Skill 中运行 shell 命令:
---
name: pr-summary
description: 总结 PR 变更
allowed-tools: Bash(gh:*)
---
## Pull Request 摘要
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`
## 任务
基于以上信息,总结这个 PR 的主要变更...
当 Skill 运行时,命令会先执行,输出替换占位符。
7.2 在子代理中运行
对于大型任务,可以让 Skill 在隔离的子代理中运行:
---
name: deep-research
description: 深入研究一个主题
context: fork
agent: Explore
---
深入研究 $ARGUMENTS:
1. 使用 Glob 和 Grep 找到相关文件
2. 阅读并分析代码
3. 带有具体文件引用的总结发现
context: fork 创建新的隔离上下文,agent: Explore 使用探索代理。
7.3 可用的变量替换
| 变量 | 描述 |
|---|---|
$ARGUMENTS |
调用时传递的参数 |
${CLAUDE_SESSION_ID} |
当前会话 ID |
---
name: session-logger
description: 记录会话活动
---
将以下内容记录到 logs/${CLAUDE_SESSION_ID}.log:
$ARGUMENTS
八、控制谁可以调用 Skill
8.1 调用控制矩阵
| 前置元数据 | 你可以调用 | Claude 可以调用 | 何时加载 |
|---|---|---|---|
| (默认) | 是 | 是 | 描述始终在上下文 |
disable-model-invocation: true |
是 | 否 | 你调用时才加载 |
user-invocable: false |
否 | 是 | 描述始终在上下文 |
8.2 典型场景
只允许手动调用(部署、发布):
disable-model-invocation: true
只允许 Claude 自动使用(背景知识):
user-invocable: false
两者都可以(代码审查):
# 默认就是两者都可以,不需要额外配置
九、故障排除
9.1 Skill 没有被触发
可能原因:
- description 不够具体
- Skill 没有被 Claude 发现
- 请求与 description 不匹配
解决方案:
# ❌ 太笼统
description: 帮助写代码
# ✅ 具体明确
description: 审查代码的安全性、性能和代码规范。当用户请求 Code Review 或代码检查时使用。
9.2 Skill 触发太频繁
解决方案:
- 让 description 更具体
- 添加
disable-model-invocation: true只允许手动调用
9.3 Claude 看不到所有 Skill
如果 Skill 太多,可能超过字符预算。
运行 /context 查看是否有 Skill 被排除。
可以设置环境变量增加限制:
export SLASH_COMMAND_TOOL_CHAR_BUDGET=20000
十、Skill 使用速查表
常用命令
| 命令 | 作用 |
|---|---|
/skill-name |
手动调用 Skill |
/context |
查看当前上下文 |
/memory |
查看加载的内存文件 |
文件结构
.claude/skills/
├── my-skill/
│ ├── SKILL.md # 必需
│ ├── reference.md # 可选
│ ├── examples.md # 可选
│ └── scripts/ # 可选
│ └── helper.py
前置元数据速查
| 字段 | 作用 | 默认值 |
|---|---|---|
name |
Skill 名称 | 目录名 |
description |
何时使用 | 第一段 |
disable-model-invocation |
禁止自动调用 | false |
user-invocable |
显示在菜单 | true |
allowed-tools |
限制工具 | 全部 |
context |
运行模式 | inline |
agent |
子代理类型 | - |
十一、效果验证
学完本篇,你应该能够完成以下任务:
验证清单
- 创建一个个人 Skill 目录
~/.claude/skills/ - 编写一个完整的 SKILL.md 文件
- 通过
/skill-name手动调用 Skill - 让 Claude 自动识别并加载 Skill
- 使用
$ARGUMENTS接收参数
动手练习(5分钟)
任务:创建一个「代码复杂度分析」Skill
# 1. 创建目录
mkdir -p ~/.claude/skills/complexity-check
# 2. 创建 SKILL.md(复制以下内容)
---
name: complexity-check
description: 分析代码的复杂度,包括圈复杂度、嵌套深度、函数长度。当用户问代码复杂度或代码质量时使用。
---
# 代码复杂度分析
分析代码时,检查以下指标:
## 圈复杂度(Cyclomatic Complexity)
- 计算分支数量(if/else/switch/for/while)
- 复杂度 > 10:需要拆分
- 复杂度 > 20:必须重构
## 嵌套深度
- 最大嵌套层级
- 深度 > 4:需要提取函数
## 函数长度
- 行数统计
- 超过 50 行:考虑拆分
## 输出格式
| 指标 | 值 | 评估 |
|------|-----|------|
| 圈复杂度 | X | 高/中/低 |
| 最大嵌套 | X | 深/中/浅 |
| 函数行数 | X | 长/中/短 |
## 建议
[具体改进建议]
测试:
> /complexity-check src/utils/parser.ts
如果 Claude 输出了复杂度分析表格,恭喜你,Skill 创建成功!
十二、总结与下期预告
本文要点
- Skill 是操作手册:告诉 Claude "怎么做事"
- SKILL.md 是核心:前置元数据控制行为,内容提供指令
- description 最重要:决定 Claude 何时自动加载
- 三种位置:个人、项目、插件
- 支持文件:复杂 Skill 可以拆分
下期预告
下一篇,我们深入 Skills 进阶:
- 多文件 Skill:组织复杂的技能
- 动态上下文:用命令注入实时数据
- 子代理集成:让 Skill 在隔离环境运行
- 团队共享:把 Skill 变成团队资产
- 可视化输出:生成 HTML 报告
敬请期待!
附录:Skill 模板
最小模板
---
name: my-skill
description: 描述这个 Skill 做什么
---
# Skill 标题
具体指令...
完整模板
---
name: my-skill
description: 详细描述何时使用这个 Skill
argument-hint: [参数提示]
disable-model-invocation: false
user-invocable: true
allowed-tools: Read, Grep, Glob
---
# Skill 标题
## 概述
这个 Skill 的用途...
## 步骤
1. 第一步
2. 第二步
3. 第三步
## 输出格式
期望的输出格式...
## 参考
- [reference.md](reference.md) 详细参考
- [examples.md](examples.md) 使用示例
本篇属于 Claude Code 提效系列第 4 篇(进阶篇第 1 篇)
下期预告:Skills 进阶——多文件与团队协作
创建时间:2026-02-14
参考文档:Claude Code 中文文档 - Skills
评论区