# Skills 技巧

Skills 是 Claude Code 的知识层组件，为 Claude 提供特定领域的专业知识和指导。与需要手动调用的命令不同，Skills 会根据任务上下文自动激活。

## 什么是 Skills？

Skills 是存储在 `SKILL.md` 文件中的专业知识模块：

- **自动激活**：Claude 根据任务上下文自动使用相关 Skill

- **领域知识**：提供特定领域的最佳实践和指导

- **可扩展**：可以创建自定义 Skills 满足特定需求

- **上下文感知**：只在相关场景中被调用

### Skills vs Commands vs Agents

| 组件 | 触发方式 | 用途 |
|------|----------|------|
| **Commands** | 用户手动调用（`/command`） | 执行特定任务 |
| **Skills** | 自动激活 | 提供领域知识 |
| **Agents** | 委托调用 | 处理复杂工作流 |

## 使用内置 Skills

Claude Code 插件通常包含多个内置 Skills。当你的任务匹配 Skill 的描述时，Claude 会自动使用它。

### 示例：代码审查

当你说"帮我审查这段代码的安全性"时，如果安装了包含安全审查 Skill 的插件，Claude 会自动应用该 Skill 的知识来进行审查。

### 查看可用 Skills

Skills 通常随插件一起安装：

```bash
# 安装插件（插件可能包含多个 Skills）
/plugin install plugin-name@marketplace
```

## 创建自定义 Skills

### 基本结构

最简单的 Skill 只需要一个 `SKILL.md` 文件：

```bash
my-skill/
└── SKILL.md
```

### SKILL.md 格式

```markdown
---
name: 代码风格指南
description: 当用户询问"代码风格"、"命名规范"、"代码格式化"或讨论代码规范时使用此 Skill
version: 1.0.0
---

# 代码风格指南

## 命名规范

- 变量使用 camelCase
- 常量使用 UPPER_SNAKE_CASE
- 类使用 PascalCase
- 私有成员使用下划线前缀

## 格式化规则

- 缩进使用 2 个空格
- 行宽不超过 80 字符
- 使用尾随逗号

## 最佳实践

- 函数应该单一职责
- 避免深层嵌套
- 使用有意义的变量名
```

### Frontmatter 字段

| 字段 | 必需 | 说明 |
|------|------|------|
| `name` | 是 | Skill 名称 |
| `description` | 是 | 触发条件描述（关键！） |
| `version` | 否 | 版本号 |

### 编写有效的 Description

description 字段决定了 Skill 何时被激活，应该包含具体的触发短语：

**好的示例**：
```yaml
description: 当用户询问"创建 hook"、"添加 PreToolUse hook"、"验证工具使用"或提到 hook 事件时使用此 Skill
```

**差的示例**：
```yaml
description: 关于 hooks 的指南  # 太模糊
```

## 完整的 Skill 结构

对于复杂的 Skills，可以包含更多资源：

```bash
my-skill/
├── SKILL.md           # 主要知识文档
├── references/        # 详细参考资料
│   ├── patterns.md    # 设计模式
│   └── advanced.md    # 高级技巧
├── examples/          # 示例代码
│   ├── basic.ts       # 基础示例
│   └── advanced.ts    # 高级示例
└── scripts/           # 辅助脚本
    └── validate.sh    # 验证脚本
```

### 引用资源

在 SKILL.md 中引用其他资源：

```markdown
---
name: API 开发指南
description: 当用户询问"API 设计"、"REST 接口"、"API 最佳实践"时使用
version: 1.0.0
---

# API 开发指南

详细的 API 设计模式请参考 @references/patterns.md

## 快速示例

参见 @examples/basic.ts 了解基本用法
```

## 在插件中使用 Skills

### 目录结构

Skills 放在插件的 `skills/` 目录下：

```bash
my-plugin/
├── .claude-plugin/
│   └── plugin.json
├── commands/          # 命令层
├── agents/            # 代理层
└── skills/            # 知识层
    ├── code-style/
    │   └── SKILL.md
    └── api-docs/
        ├── SKILL.md
        └── references/
```

### 在命令中引用 Skill

命令可以显式引用 Skill 的知识：

```markdown
---
description: 生成符合规范的 API 文档
argument-hint: [api-file]
---

为 @$1 生成 API 文档。

使用 api-docs Skill 确保文档包含：
- 完整的端点描述
- 参数规格说明
- 响应格式
- 错误码
- 使用示例
```

## 实用示例

### 示例 1：项目规范 Skill

```markdown
---
name: 项目规范
description: 当用户询问"项目结构"、"文件组织"、"目录规范"时使用
version: 1.0.0
---

# 项目规范

## 目录结构

\`\`\`
src/
├── components/    # React 组件
├── hooks/         # 自定义 Hooks
├── services/      # API 服务
├── utils/         # 工具函数
└── types/         # TypeScript 类型
\`\`\`

## 文件命名

- 组件：PascalCase（如 `UserProfile.tsx`）
- 工具函数：camelCase（如 `formatDate.ts`）
- 常量：UPPER_SNAKE_CASE（如 `API_ENDPOINTS.ts`）

## 导入顺序

1. React 相关
2. 第三方库
3. 内部模块
4. 类型定义
5. 样式文件
```

### 示例 2：Git 工作流 Skill

```markdown
---
name: Git 工作流
description: 当用户询问"分支策略"、"提交规范"、"Git 流程"时使用
version: 1.0.0
---

# Git 工作流规范

## 分支命名

- 功能：`feature/描述`
- 修复：`fix/描述`
- 热修复：`hotfix/描述`

## 提交信息格式

\`\`\`
<type>(<scope>): <subject>

<body>

<footer>
\`\`\`

### Type 类型

- `feat`: 新功能
- `fix`: 修复 bug
- `docs`: 文档更新
- `style`: 代码格式
- `refactor`: 重构
- `test`: 测试
- `chore`: 构建/工具
```

### 示例 3：安全审查 Skill

```markdown
---
name: 安全审查
description: 当用户询问"安全检查"、"漏洞扫描"、"安全最佳实践"或审查代码安全性时使用
version: 1.0.0
---

# 安全审查指南

## 常见漏洞检查

### SQL 注入
- 检查是否使用参数化查询
- 避免字符串拼接 SQL

### XSS 攻击
- 检查用户输入是否转义
- 使用 CSP 头

### 敏感数据
- 确保密码不明文存储
- API 密钥不要硬编码
- 检查日志是否泄露敏感信息

## 审查清单

- [ ] 输入验证
- [ ] 输出编码
- [ ] 认证机制
- [ ] 授权检查
- [ ] 加密使用
- [ ] 错误处理
```

## 最佳实践

### 1. 明确的触发描述

使用具体的触发短语，而不是模糊的描述：

```yaml
# 好
description: 当用户询问"创建组件"、"React 组件模板"、"组件最佳实践"时使用

# 差
description: React 组件相关
```

### 2. 结构化的知识

将知识组织成清晰的层次结构：

- 使用标题分级

- 提供代码示例

- 包含检查清单

### 3. 保持更新

- 定期更新 Skill 内容

- 版本号反映变更

- 记录重要更新

### 4. 模块化设计

- 每个 Skill 专注一个领域

- 使用 references 目录存放详细资料

- 通过 examples 提供实际示例

## 调试 Skills

如果 Skill 没有按预期激活：

1. **检查 description**：确保触发短语与用户输入匹配

2. **验证格式**：确保 YAML frontmatter 格式正确

3. **测试触发**：尝试使用 description 中的确切短语

## 下一步

- [插件系统](/docs/advanced/plugins) - 了解完整的插件开发

- [MCP 服务器](/docs/advanced/mcp) - 扩展 Claude 的工具能力

- [CLI 技巧](/docs/usage/cli-tips) - 提高命令行效率