教程概述
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/)