首页 › tutorials › Claude Code Skill开发:从零到发布

Claude Code Skill 开发实战:从零创建一个自定义 Skill

学习目标:掌握 Claude Code Skill 的完整开发流程,包括 SKILL.md 规范、YAML frontmatter 配置、渐进式加载机制、测试迭代方法,最终独立开发并发布一个可用的自定义 Skill。

适用人群:已有 Claude Code 基础使用经验的开发者,希望将重复工作流封装为可复用的"技能模块"。


一、什么是 Skill?为什么需要它?

在 Claude Code 中,每次对话你都需要重复描述你的偏好、工作流程、输出格式。Skill 的出现解决了这个痛点——它是一个结构化的指令包,教会 Claude 如何以一致的方式完成特定类型的任务。

一个 Skill 本质上是一个文件夹,核心是 SKILL.md 文件:

my-skill/
├── SKILL.md           ← 必需,包含元数据 + 指令
└── (可选资源)
    ├── scripts/       ← 可执行脚本
    ├── references/    ← 参考文档
    └── assets/        ← 模板、图标等资源

Skill 遵循 Agent Skills 开放标准(agentskills.io),同一份 SKILL.md 可以在 Claude Code、GitHub Copilot、Cursor 等支持该标准的工具中通用。


二、Skill 的三层加载机制

理解 Skill 的加载方式对编写高质量 Skill 至关重要。Claude 采用渐进式披露(Progressive Disclosure)策略:

图表1

图表 1

层级 内容 何时加载 大小建议
L1 元数据 name + description 始终在上下文中 ~100词
L2 正文 SKILL.md 的 Markdown 指令 Skill 被触发时 < 500行
L3 资源 scripts/、references/、assets/ 按需加载 无限制

这意味着:description 是触发机制的核心。Claude 根据 description 判断是否需要调用你的 Skill。


三、环境准备

前置条件

安装官方 Skill 开发工具

Anthropic 提供了 skill-creator 这个元技能(meta-skill),专门用于创建和测试其他 Skill:

# 注册官方 Skill 市场
claude /plugin marketplace add anthropics/skills

# 安装 example-skills 插件(包含 skill-creator)
claude /plugin install example-skills@anthropic-agent-skills

安装完成后,你可以在 Claude Code 中直接使用 /skill-creator 命令。


四、SKILL.md 文件规范详解

4.1 最小化模板

从 Anthropic 官方模板出发:

---
name: template-skill
description: Replace with description of the skill and when Claude should use it.
---

# Insert instructions below

YAML frontmatter 只有两个必需字段:

字段 必需 说明
name 是 Skill 的唯一标识符,小写 + 连字符,如 my-code-reviewer
description 是 描述 Skill 的功能和触发时机,这是 Claude 判断是否使用此 Skill 的主要依据

4.2 description 编写技巧

description 是整个 Skill 中最关键的字段。Anthropic 官方建议写得稍微"激进"一些,因为 Claude 默认倾向于"少触发"(undertrigger)。

反面示例(太保守):

description: 如何构建一个简单的仪表盘。

正面示例(推荐风格):

description: |
  如何构建高质量的交互式仪表盘和数据可视化界面。
  当用户提到仪表盘、dashboard、数据可视化、监控面板、
  指标展示、metrics board,或者想要展示任何类型的结构化数据时,
  都应使用此 Skill,即使用户没有明确提到"仪表盘"这个词。

4.3 可选字段

除了 name 和 description,SKILL.md 还支持以下可选 frontmatter 字段:

---
name: my-skill
description: 技能描述...
license: Apache-2.0           # 许可证
compatibility:                 # 兼容性说明
  tools: [Bash, Read, Write]   # 所需工具
  dependencies: [node>=18]     # 运行依赖
---

五、实战:创建一个 Git 提交规范 Skill

让我们从头创建一个实用的 Skill——smart-commit,它教会 Claude 按照 Conventional Commits 规范生成高质量的 Git 提交信息。

5.1 创建目录结构

# 在项目根目录创建 Skill
mkdir -p .claude/skills/smart-commit

或者创建全局可用的 Skill(所有项目共享):

mkdir -p ~/.claude/skills/smart-commit

5.2 编写 SKILL.md

创建文件 .claude/skills/smart-commit/SKILL.md:

---
name: smart-commit
description: |
  智能生成符合 Conventional Commits 规范的 Git 提交信息。
  当用户需要提交代码、写 commit message、暂存文件、
  创建 git commit,或者提到"提交"、"commit"、"保存进度"时,
  都应使用此 Skill。即使用户只说了"提交一下"这样模糊的指令也应触发。
---

# Smart Commit

生成高质量、规范化的 Git 提交信息,遵循 Conventional Commits 标准。

## 工作流程

### 第一步:分析变更

1. 运行 `git status` 查看所有变更文件
2. 运行 `git diff --staged` 查看已暂存的变更
3. 运行 `git diff` 查看未暂存的变更
4. 运行 `git log --oneline -10` 了解最近的提交风格

### 第二步:分类变更

根据变更内容确定 commit 类型:

| 类型 | 说明 | 示例 |
|------|------|------|
| feat | 新功能 | 新增用户注册接口 |
| fix | Bug 修复 | 修复登录超时问题 |
| docs | 文档变更 | 更新 API 文档 |
| style | 格式调整(不影响逻辑) | 修正缩进、空格 |
| refactor | 重构(非新功能、非修复) | 提取公共方法 |
| perf | 性能优化 | 优化列表查询速度 |
| test | 测试相关 | 新增用户模块单元测试 |
| chore | 构建或辅助工具 | 升级依赖版本 |

### 第三步:生成提交信息

格式要求:

**示例 1:**
Input: 新增了用户登录的 JWT 认证功能,包含 token 签发和验证
Output: `feat(auth): implement JWT-based user authentication`

**示例 2:**
Input: 修复了当用户名为空时系统崩溃的问题
Output: `fix(user): handle empty username to prevent crash`

**示例 3:**
Input: 把 utils.js 里的重复代码提取成了独立函数
Output: `refactor(utils): extract shared helper functions`

### 第四步:确认与提交

1. 展示生成的 commit message 给用户确认
2. 用户确认后,执行 `git add`(只添加相关文件,不使用 `git add -A`)
3. 执行 `git commit`,使用 HEREDOC 格式传递 message

## 约束

- 绝不自动 push 到远程仓库
- 绝不提交 .env、credentials、secrets 等敏感文件
- 不使用 `--no-verify` 跳过 hooks
- 优先让用户确认后再执行 git 操作
- 如果有 pre-commit hook 失败,修复问题后创建新 commit,不使用 amend

5.3 添加参考文档(可选)

如果 Skill 需要更详细的参考信息,可以创建 references/ 目录:

mkdir -p .claude/skills/smart-commit/references

创建 .claude/skills/smart-commit/references/scopes-guide.md:

# Scope 命名指南

## 常用 scope 对照表

| 目录 | 推荐 scope |
|------|-----------|
| src/auth/ | auth |
| src/api/ | api |
| src/components/ | ui |
| src/utils/ | utils |
| tests/ | test |
| docs/ | docs |
| config/ | config |

## 多 scope 处理

当变更涉及多个模块时:
- 主要变更决定 scope
- 如果两个模块同等重要,用 `/` 分隔:`feat(auth/api): ...`
- 超过两个模块时省略 scope:`feat: ...`

在 SKILL.md 中引用此文件:

## 参考
- 当不确定 scope 命名时,参考 `references/scopes-guide.md`

六、Skill 的测试与迭代

6.1 手动测试

最简单的测试方式——在 Claude Code 中直接对话:

你: 帮我提交一下当前的代码

(Claude 应该触发 smart-commit Skill,分析变更并生成规范的 commit message)

测试多种触发方式: - "提交代码" - "commit 一下" - "保存当前进度" - "帮我写个 commit message" - "git commit"

6.2 使用 skill-creator 进行系统测试

使用 /skill-creator 触发自动化测试流程。它的工作流程如下:

图表2

图表 2

6.3 evals.json 格式

测试用例保存在 evals/evals.json:

{
  "skill_name": "smart-commit",
  "evals": [
    {
      "id": 1,
      "prompt": "帮我提交一下,我刚改了登录模块的 bug",
      "expected_output": "生成 fix(auth): ... 格式的 commit message",
      "files": [],
      "assertions": [
        {
          "text": "commit message 以 fix( 开头",
          "check": "output_matches",
          "pattern": "^fix\\("
        },
        {
          "text": "不包含敏感文件",
          "check": "output_not_contains",
          "pattern": "\\.env|credentials"
        }
      ]
    },
    {
      "id": 2,
      "prompt": "I added a new REST API endpoint for user registration",
      "expected_output": "生成 feat(api): ... 格式的 commit message",
      "files": []
    }
  ]
}

6.4 测试工作空间结构

使用 skill-creator 测试时,它会在 Skill 旁边创建工作空间:

smart-commit/              ← Skill 目录
smart-commit-workspace/    ← 测试工作空间
├── evals/
│   └── evals.json
├── iteration-1/
│   ├── descriptive-name/
│   │   ├── eval_metadata.json
│   │   ├── with_skill/
│   │   │   ├── outputs/
│   │   │   └── timing.json
│   │   └── without_skill/
│   │       ├── outputs/
│   │       └── timing.json
│   └── grading.json
└── iteration-2/
    └── ...

每次迭代都会保留完整的测试记录,方便对比改进效果。


七、多域 Skill 的组织模式

当 Skill 需要支持多个变体(如不同的部署平台、不同的框架),采用域组织模式:

cloud-deploy/
├── SKILL.md              ← 主入口,包含工作流和选择逻辑
└── references/
    ├── aws.md            ← AWS 部署细节
    ├── gcp.md            ← GCP 部署细节
    └── azure.md          ← Azure 部署细节

SKILL.md 中的引用方式:

## 部署指南

根据用户指定的云平台,读取对应的参考文件:

- AWS → 读取 `references/aws.md`
- GCP → 读取 `references/gcp.md`
- Azure → 读取 `references/azure.md`

如果用户未指定平台,询问他们的偏好。

这种模式下,Claude 只会加载当前需要的参考文件,避免浪费上下文窗口。


八、Skill 的安装与分发

8.1 本地 Skill

Skill 放在以下位置会自动被发现:

位置 作用域
<项目>/.claude/skills/ 仅当前项目
~/.claude/skills/ 全局所有项目

8.2 通过 Plugin Marketplace 分享

创建自己的 Skill 市场(适用于团队或社区):

# 创建 marketplace
claude /plugin marketplace add your-org/your-skills-repo

# 团队成员安装
claude /plugin install your-skill-set@your-marketplace

Marketplace 本质上是一个 Git 仓库,结构如下:

your-skills-repo/
├── plugin.json           ← 插件配置
├── skills/
│   ├── smart-commit/
│   │   └── SKILL.md
│   ├── code-reviewer/
│   │   └── SKILL.md
│   └── ...
└── README.md

plugin.json 示例:

{
  "name": "team-workflow-skills",
  "description": "团队工作流 Skill 集合",
  "skills": [
    {
      "name": "smart-commit",
      "path": "skills/smart-commit"
    },
    {
      "name": "code-reviewer",
      "path": "skills/code-reviewer"
    }
  ]
}

8.3 .skill 文件打包

使用 skill-creator 内置的打包工具:

python -m scripts.package_skill ./smart-commit/
# 输出: smart-commit.skill

.skill 文件是一个自包含的压缩包,可以直接分享给其他人安装。


九、编写高质量 Skill 的核心原则

9.1 解释"为什么"而非堆砌"必须"

Claude 是一个足够智能的模型。比起用大写的 ALWAYS/NEVER 强制约束,解释原因效果更好:

差的写法:

ALWAYS 确保生成的 commit message 不超过 72 个字符。
NEVER 使用过去时态。

好的写法:

commit message 的首行应控制在 72 字符以内,因为 Git 默认截断超过此长度的信息。
使用祈使句(如 "add feature" 而非 "added feature"),与 Git 自身的 merge message 风格保持一致。

9.2 保持精简

9.3 包含具体示例

示例比规则更有效。每个关键输出格式都应提供 input/output 对照:

**示例:**
Input: 修复了当并发请求数超过 100 时连接池耗尽的问题
Output: fix(pool): prevent connection exhaustion under high concurrency

9.4 常见问题与避坑

问题 原因 解决方案
Skill 不被触发 description 不够具体或太保守 增加更多触发关键词,写得"激进"一些
Skill 触发但效果差 指令太模糊 添加具体示例和输出模板
输出不一致 缺少约束 明确输出格式,但不要过度使用 MUST/NEVER
上下文窗口溢出 SKILL.md 太长 移入 references/,按需加载
Skill 只对特定输入有效 过拟合测试用例 泛化指令,解释原因而非给出死板规则

十、实战案例:完整的 API 文档生成 Skill

以下是一个更复杂、可直接使用的 Skill,用于从代码自动生成 OpenAPI 规范文档:

---
name: api-doc-generator
description: |
  从源代码自动生成 OpenAPI 3.0 规范文档。
  当用户需要生成 API 文档、创建 OpenAPI/Swagger 规范、
  从代码提取接口定义、编写 API 描述文件,
  或者提到"接口文档"、"API 文档"、"swagger"、"openapi"时使用。
  即使用户只说"帮我整理一下接口"也应触发此 Skill。
---

# API 文档生成器

从项目源代码中提取 API 端点信息,生成标准 OpenAPI 3.0 YAML/JSON 规范文件。

## 工作流程

### 第一步:项目分析

1. 确定项目使用的框架(Express/Fastify/Django/FastAPI/Spring Boot 等)
2. 识别路由定义文件的位置
3. 检查是否已存在 OpenAPI/Swagger 配置

运行以下命令定位路由文件:
- Express: 搜索 `app.get|app.post|router.get|router.post`
- FastAPI: 搜索 `@app.get|@app.post|@router.get`
- Spring: 搜索 `@GetMapping|@PostMapping|@RequestMapping`

### 第二步:端点提取

对每个路由端点,提取:

- HTTP 方法和路径
- 请求参数(query/path/body)
- 请求体 Schema
- 响应格式和状态码
- 认证要求
- 描述信息(从注释中提取)

### 第三步:生成 OpenAPI 文档

输出完整的 `openapi.yaml` 文件,结构如下:

**示例输出:**
```yaml
openapi: '3.0.3'
info:
  title: User Service API
  version: 1.0.0
paths:
  /users:
    get:
      summary: List users
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
      responses:
        '200':
          description: Paginated user list
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'

第四步:验证

  1. 将生成的 YAML 保存为 openapi.yaml
  2. 如果项目中有 swagger-ui 依赖,验证能否正确渲染
  3. 检查所有 $ref 引用是否有效

参考

约束


十一、Skill 的完整生命周期

图表3

图表 3

开发阶段关键检查项

测试阶段关键检查项

发布阶段关键检查项


延伸阅读


训练营适用性评估

维度 评估
适合训练营类型 AI 工程师实训营、Claude Code 进阶工作坊、DevOps 自动化训练营
预计教学时长 2-3 小时(含动手实践)
难度等级 ⭐⭐⭐ 中等(需 Claude Code 基础经验)
推荐教学节奏 讲解规范 30min → 编写 Skill 45min → 测试迭代 45min → 发布分享 30min
前置知识 Claude Code 基础操作、Git 基础、Markdown 语法

参考来源

  1. Anthropic Skills 官方仓库 — SKILL.md 模板、skill-creator 元技能、17+ 示例 Skill 的源代码
  2. Extend Claude with skills - Claude Code 官方文档 — Skill 创建、安装和使用的官方指南
  3. How to Build Your Own Claude Code Skill - freeCodeCamp — 面向开发者的完整 Skill 开发教程
  4. Claude Code Custom Slash Commands - ThePromptShelf — Skill 系统与自定义斜杠命令的实践指南
  5. How to Build Claude Code Skills That Actually Work - dev.to — 工程实践视角的 Skill 开发经验分享

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入