返回

Everything Claude Code 教程 2:Skills 与 Commands - 打造你的 AI 工作流

本文详解 Everything Claude Code 的 Skills 与 Commands 系统,包含编写自定义 Skill、快速调用命令和实战案例。

教程概述

Skills 和 Commands 是 Everything Claude Code 的核心组件,让你能够定义可复用的工作流,提高开发效率。

你将学到

  • ✅ Skills 与 Commands 的区别与联系
  • ✅ Skills 目录结构(单文件 vs 多文件)
  • ✅ Commands 快速调用方法
  • ✅ 编写自定义 Skill 的完整流程
  • ✅ 实战案例:TDD、代码清理、E2E 测试

Skills vs Commands:有什么区别?

flowchart LR
    subgraph Skills
        A[复杂工作流] --> B[多步骤执行]
        B --> C[可组合]
    end

    subgraph Commands
        D[快速提示] --> E[单次执行]
        E --> F[轻量级]
    end

    G[用户输入] --> A
    G --> D

    style A fill:#e1f5ff
    style D fill:#e8f5e9

对比表格

特性 Skills Commands
存储位置 ~/.claude/skills/ ~/.claude/commands/
文件结构 单文件或多文件目录 单个 Markdown 文件
复杂度 可包含多个文件、代码映射 通常是简短的提示词
调用方式 自动触发或显式调用 /command-name
适用场景 复杂工作流、多步骤任务 快速提示、单一任务
可组合性 高(可引用其他 skills) 低(独立执行)

Skills 详解

目录结构

Skills 支持两种组织方式:

单文件 Skill

~/.claude/skills/
├── pmx-guidelines.md      # 项目特定规范
├── coding-standards.md    # 编码标准
└── security-review.md     # 安全检查清单

多文件 Skill(推荐复杂场景)

~/.claude/skills/
└── tdd-workflow/
    ├── README.md          # 主入口(必需)
    ├── codemap.md         # 代码映射(可选)
    └── templates/
        └── test-template.py

Skill 文件格式

# Skill 名称

## 触发条件
[描述何时应该使用此 skill]

## 工作流程
1. 第一步
2. 第二步
3. ...

## 输出格式
[描述期望的输出]

## 示例
[提供具体示例]

实战案例 1:TDD 工作流 Skill

创建 ~/.claude/skills/tdd-workflow/README.md

# TDD 工作流

## 触发条件
- 用户要求实现新功能
- 用户要求添加新方法
- 用户说 "TDD" 或 "测试驱动"

## 工作流程

### Phase 1: RED - 写失败测试
1. 分析需求,理解期望行为
2. 编写测试用例描述预期结果
3. 运行测试,确认失败

### Phase 2: GREEN - 写最少代码通过
1. 编写刚好让测试通过的代码
2. 不要过度设计
3. 运行测试,确认通过

### Phase 3: REFACTOR - 重构优化
1. 检查代码重复
2. 改善命名和结构
3. 确保测试仍然通过

## 输出格式

测试文件

[测试代码]

实现代码

[实现代码]

测试结果

[测试运行结果]


## 示例

需求:实现一个计算斐波那契数列的函数

### 测试代码
```python
def test_fibonacci_base_cases():
    assert fibonacci(0) == 0
    assert fibonacci(1) == 1

def test_fibonacci_recursive():
    assert fibonacci(5) == 5
    assert fibonacci(10) == 55

实现代码

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

### 实战案例 2:代码清理 Skill

创建 `~/.claude/skills/refactor-clean.md`:

```markdown
# 代码清理工作流

## 触发条件
- 用户说 "清理代码" 或 "refactor clean"
- 长时间编码会话后
- 项目发布前

## 检查清单

### 1. 死代码检查
- 未使用的导入
- 未调用的函数
- 注释掉的代码块
- 未引用的变量

### 2. 文件清理
- 空的 .md 文件
- 临时文件 (*.tmp, *.bak)
- 未使用的配置文件

### 3. 代码质量
- 重复代码检测
- 过长函数(>50 行)
- 过深嵌套(>3 层)

### 4. 注释检查
- 过时的注释
- TODO 列表清理
- 中英文注释统一

## 执行步骤
1. 扫描项目目录结构
2. 识别并列出待清理项
3. 逐项确认后清理
4. 生成清理报告

## 输出格式

清理报告

已删除文件

  • path/to/dead/file.py

已移除代码

  • function unused_func() (15 行)

建议手动检查

  • 过长函数: module.py:func_name (120 行)

统计

  • 删除行数: 150
  • 删除文件: 5

实战案例 3:E2E 测试 Skill

创建 ~/.claude/skills/e2e-testing/README.md

# E2E 测试工作流

## 触发条件
- 用户说 "E2E" 或 "端到端测试"
- 需要验证用户流程
- 集成测试需求

## 工具选择
- Playwright (推荐)
- Cypress
- Selenium

## 工作流程

```mermaid
flowchart TD
    A[分析用户流程] --> B[设计测试场景]
    B --> C[编写测试用例]
    C --> D[运行测试]
    D --> E{全部通过?}
    E -->|是| F[生成报告]
    E -->|否| G[调试失败用例]
    G --> C

测试用例模板

// tests/e2e/user-login.spec.ts
import { test, expect } from '@playwright/test';

test.describe('用户登录流程', () => {
  test('成功登录', async ({ page }) => {
    await page.goto('/login');
    await page.fill('[name="email"]', '[email protected]');
    await page.fill('[name="password"]', 'password123');
    await page.click('button[type="submit"]');

    await expect(page).toHaveURL('/dashboard');
  });

  test('登录失败显示错误', async ({ page }) => {
    await page.goto('/login');
    await page.fill('[name="email"]', '[email protected]');
    await page.fill('[name="password"]', 'wrongpassword');
    await page.click('button[type="submit"]');

    await expect(page.locator('.error')).toBeVisible();
  });
});

## Commands 详解

### Commands 目录结构

~/.claude/commands/ ├── tdd.md # /tdd 命令 ├── refactor-clean.md # /refactor-clean 命令 ├── e2e.md # /e2e 命令 ├── test-coverage.md # /test-coverage 命令 └── review.md # /review 命令


### Command 文件格式

```markdown
---
description: "命令描述"
---

[命令内容 - 将作为提示词发送给 Claude]

快速创建 Commands

示例 1:代码审查命令

创建 ~/.claude/commands/review.md

---
description: "执行代码审查"
---

请对当前更改执行代码审查:

1. 检查代码风格一致性
2. 验证错误处理完整性
3. 评估可读性和可维护性
4. 识别潜在的安全问题
5. 提出改进建议

输出格式:
- 问题列表(按严重程度排序)
- 改进建议
- 整体评分(1-10)

示例 2:测试覆盖率命令

创建 ~/.claude/commands/test-coverage.md

---
description: "检查并提升测试覆盖率"
---

分析当前项目的测试覆盖率:

1. 运行测试覆盖率工具
2. 识别覆盖率低于 80% 的模块
3. 为未覆盖的代码生成测试建议
4. 输出优先级排序的测试任务列表

示例 3:Git 工作流命令

创建 ~/.claude/commands/commit.md

---
description: "生成规范的 commit message"
---

根据当前更改生成符合 Conventional Commits 规范的提交信息:

1. 分析 git diff
2. 识别更改类型(feat/fix/refactor/docs/test)
3. 生成简洁的提交信息
4. 包含必要的 scope

格式:

():

[optional body]

[optional footer]

使用 Skills 和 Commands

在 Claude Code 中调用

# 调用 Command
/review
/test-coverage
/commit

# 调用 Skill(显式)
使用 tdd-workflow skill 来实现用户登录功能

# 自动触发
# Claude 会根据 skill 的触发条件自动使用

链式调用

# 先审查代码,再清理
/review
/refactor-clean

# TDD 流程后运行测试
使用 tdd-workflow 实现 XX 功能
/test-coverage

最佳实践

1. Skill 命名规范

✅ 好的命名:
- tdd-workflow
- code-review-checklist
- api-documentation

❌ 避免的命名:
- skill1
- my-skill
- temp

2. 保持单一职责

✅ 每个 Skill 解决一个问题
- tdd-workflow:只关注 TDD 流程
- code-review:只关注代码审查

❌ 避免"瑞士军刀"式 Skill
- do-everything:包含所有功能

3. 提供清晰的触发条件

✅ 好的触发条件
## 触发条件
- 用户提到 "测试驱动" 或 "TDD"
- 用户要求实现新功能
- 用户说 "先写测试"

❌ 模糊的触发条件
## 触发条件
- 用户需要帮助时

4. 包含输出示例

✅ 包含具体示例
## 输出格式
### 测试文件
```python
def test_example():
    assert True

❌ 缺少示例

输出格式

输出测试文件


## 小结

### 关键要点

- ✅ Skills 用于复杂工作流,Commands 用于快速提示
- ✅ 多文件 Skill 适合需要模板或代码映射的场景
- ✅ 清晰的触发条件帮助 Claude 正确使用 Skill
- ✅ 保持单一职责,避免过度复杂的 Skill

---

**系列导航**:

- ← 上一篇:[教程 1:安装与环境配置完全指南](/2026/03/ecc-setup-guide/)
- → 下一篇:[教程 3:编辑器集成 - Zed / VSCode / Cursor 最佳实践](/2026/03/ecc-editor-integration/)
- 返回:[教程系列索引](/2026/03/everything-claude-code-tutorial-series-intro/)