Skills 自定义命令
创建和使用 Skills 扩展 Claude Code 功能
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 通常随插件一起安装:
# 安装插件(插件可能包含多个 Skills)
/plugin install plugin-name@marketplace
创建自定义 Skills¶
基本结构¶
最简单的 Skill 只需要一个 SKILL.md 文件:
my-skill/
└── SKILL.md
SKILL.md 格式¶
---
name: 代码风格指南
description: 当用户询问"代码风格"、"命名规范"、"代码格式化"或讨论代码规范时使用此 Skill
version: 1.0.0
---
# 代码风格指南
## 命名规范
- 变量使用 camelCase
- 常量使用 UPPER_SNAKE_CASE
- 类使用 PascalCase
- 私有成员使用下划线前缀
## 格式化规则
- 缩进使用 2 个空格
- 行宽不超过 80 字符
- 使用尾随逗号
## 最佳实践
- 函数应该单一职责
- 避免深层嵌套
- 使用有意义的变量名
Frontmatter 字段¶
| 字段 | 必需 | 说明 |
|---|---|---|
name |
是 | Skill 名称 |
description |
是 | 触发条件描述(关键!) |
version |
否 | 版本号 |
编写有效的 Description¶
description 字段决定了 Skill 何时被激活,应该包含具体的触发短语:
好的示例:
description: 当用户询问"创建 hook"、"添加 PreToolUse hook"、"验证工具使用"或提到 hook 事件时使用此 Skill
差的示例:
description: 关于 hooks 的指南 # 太模糊
完整的 Skill 结构¶
对于复杂的 Skills,可以包含更多资源:
my-skill/
├── SKILL.md # 主要知识文档
├── references/ # 详细参考资料
│ ├── patterns.md # 设计模式
│ └── advanced.md # 高级技巧
├── examples/ # 示例代码
│ ├── basic.ts # 基础示例
│ └── advanced.ts # 高级示例
└── scripts/ # 辅助脚本
└── validate.sh # 验证脚本
引用资源¶
在 SKILL.md 中引用其他资源:
---
name: API 开发指南
description: 当用户询问"API 设计"、"REST 接口"、"API 最佳实践"时使用
version: 1.0.0
---
# API 开发指南
详细的 API 设计模式请参考 @references/patterns.md
## 快速示例
参见 @examples/basic.ts 了解基本用法
在插件中使用 Skills¶
目录结构¶
Skills 放在插件的 skills/ 目录下:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
├── commands/ # 命令层
├── agents/ # 代理层
└── skills/ # 知识层
├── code-style/
│ └── SKILL.md
└── api-docs/
├── SKILL.md
└── references/
在命令中引用 Skill¶
命令可以显式引用 Skill 的知识:
---
description: 生成符合规范的 API 文档
argument-hint: [api-file]
---
为 @$1 生成 API 文档。
使用 api-docs Skill 确保文档包含:
- 完整的端点描述
- 参数规格说明
- 响应格式
- 错误码
- 使用示例
实用示例¶
示例 1:项目规范 Skill¶
---
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¶
---
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¶
---
name: 安全审查
description: 当用户询问"安全检查"、"漏洞扫描"、"安全最佳实践"或审查代码安全性时使用
version: 1.0.0
---
# 安全审查指南
## 常见漏洞检查
### SQL 注入
- 检查是否使用参数化查询
- 避免字符串拼接 SQL
### XSS 攻击
- 检查用户输入是否转义
- 使用 CSP 头
### 敏感数据
- 确保密码不明文存储
- API 密钥不要硬编码
- 检查日志是否泄露敏感信息
## 审查清单
- [ ] 输入验证
- [ ] 输出编码
- [ ] 认证机制
- [ ] 授权检查
- [ ] 加密使用
- [ ] 错误处理
最佳实践¶
1. 明确的触发描述¶
使用具体的触发短语,而不是模糊的描述:
# 好
description: 当用户询问"创建组件"、"React 组件模板"、"组件最佳实践"时使用
# 差
description: React 组件相关
2. 结构化的知识¶
将知识组织成清晰的层次结构:
-
使用标题分级
-
提供代码示例
-
包含检查清单
3. 保持更新¶
-
定期更新 Skill 内容
-
版本号反映变更
-
记录重要更新
4. 模块化设计¶
-
每个 Skill 专注一个领域
-
使用 references 目录存放详细资料
-
通过 examples 提供实际示例
调试 Skills¶
如果 Skill 没有按预期激活:
-
检查 description:确保触发短语与用户输入匹配
-
验证格式:确保 YAML frontmatter 格式正确
-
测试触发:尝试使用 description 中的确切短语