侧边栏壁纸
博主头像
川科智源

行动起来,活在当下

  • 累计撰写 8 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Skills 入门:封装你的第一个 AI 能力

把你的经验变成 Claude 的能力,一次配置,终身受益

写在前面

说实话,你是否遇到过这样的场景?

周一早上:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」

周二下午:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」

周三晚上:
你:「Claude,帮我审查这段代码,注意安全、性能、规范...」
Claude:「好的,我来检查...」

你心里:我为什么要重复说三遍?!

更让人崩溃的是——你精心调教好的指令,下次用的时候 Claude 又「忘」了:

你:「审查一下这个函数。」
Claude:「检查完毕,没有问题。」
你:「等等!你怎么没检查 SQL 注入?上次明明说了要检查的!」

问题出在哪?

不是 Claude 不聪明,而是你每次都在「从零开始」。

让我们抽丝剥茧,看看这背后的本质:

Pasted image 20260518191232.png

Skills 就是为了解决这个问题——把你的经验变成 Claude 的能力。

把 Skill 想象成 Claude 的「技能书」:

  • 你写好说明书
  • Claude 读完后按照说明书执行
  • 可以反复使用,永远不忘

这篇文章,我们从头开始,教你封装第一个 Skill。


一、什么是 Skill?

1.1 一句话定义

Skill 是一段告诉 Claude "怎么做事" 的说明。

把它理解成 Claude 的"技能书":

  • 你写好说明书
  • Claude 读完后按照说明书执行
  • 可以反复使用

1.2 Skill 的本质

Pasted image 20260518190001.png

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//SKILL.md 所有项目
项目 .claude/skills//SKILL.md 仅此项目
插件 /skills//SKILL.md 启用插件的项目

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: 构建/工具

生成步骤

  1. 使用 git diff --cached 查看暂存的变更
  2. 分析变更内容
  3. 确定类型和范围
  4. 生成 message
  5. 询问是否确认

示例

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 没有被触发

可能原因

  1. description 不够具体
  2. Skill 没有被 Claude 发现
  3. 请求与 description 不匹配

解决方案

# ❌ 太笼统
description: 帮助写代码

# ✅ 具体明确
description: 审查代码的安全性、性能和代码规范。当用户请求 Code Review 或代码检查时使用。

9.2 Skill 触发太频繁

解决方案

  1. 让 description 更具体
  2. 添加 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 创建成功!


十二、总结与下期预告

本文要点

  1. Skill 是操作手册:告诉 Claude "怎么做事"
  2. SKILL.md 是核心:前置元数据控制行为,内容提供指令
  3. description 最重要:决定 Claude 何时自动加载
  4. 三种位置:个人、项目、插件
  5. 支持文件:复杂 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

0

评论区