从零构建 Agent Skill:Cursor 与 Claude Code 完全集成指南
你是否还在每次对话中重复输入相同的提示词?本文将从零讲解 Agent Skill 的核心概念,手把手教你创建自定义 Skill,并分别在 Cursor 和 Claude Code 中完成配置与调用,附完整代码示例与架构图。
1. 什么是 Agent Skill?
1.1 核心概念
Agent Skill 本质上是为 AI 编程助手封装的可复用能力单元------你可以把它理解为 AI 的"技能包"或"操作手册"。一个 Skill 包含结构化的指令、脚本和资源,用于教会 AI 完成特定任务,让 AI 按照标准流程执行工作。
2025 年 10 月,Anthropic 推出了 Skills 概念。这一标准迅速获得了广泛认可------包括 Microsoft(VS Code 和 GitHub)、Cursor、Goose、Amp、OpenCode 在内的众多平台均已采用;2025 年 12 月 18 日,Skills 正式作为开放标准发布;Anthropic 的 Skills 仓库在 GitHub 上已突破 6 万 star。
一句话理解:以前每次写代码审查都要重新写一大段提示词,现在把它打包成一个 Skill,下次只需说"/review",AI 就知道该怎么做了。
1.2 Skills vs Rules:什么时候用谁?
理解 Skills 与 Rules 的区别,是高效使用 Agent 的关键。Cursor 官方文档给出了明确划分:
| 维度 | Rules(规则) | Skills(技能) |
|---|---|---|
| 生效方式 | 始终生效,每次对话自动注入 | 按需加载,Agent 根据上下文自动判断是否调用 |
| 文件位置 | .cursor/rules/*.mdc |
.cursor/skills/<name>/SKILL.md |
| 适用场景 | 编码规范、命名约定、安全约束 | 代码审查、组件生成、文档创建等特定任务 |
| Token 占用 | 始终占用上下文 | 仅在使用时才加载(渐进式披露) |
| 可复用性 | 项目内使用为主 | 可跨项目、跨工具复用(开放标准) |
最佳实践:
- 将"必须遵守"的约束放在 Rules 中(如代码风格、安全规则、命名规范)
- 将"特定任务"的工作流放在 Skills 中(如组件生成、测试创建、代码审查)
1.3 Skills 的核心设计:渐进式披露
Skills 采用三层渐进式披露架构,这是其保持高效的关键:
#mermaid-svg-17TAGxAAjCA4UQSv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-17TAGxAAjCA4UQSv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-17TAGxAAjCA4UQSv .error-icon{fill:#552222;}#mermaid-svg-17TAGxAAjCA4UQSv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-17TAGxAAjCA4UQSv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-17TAGxAAjCA4UQSv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-17TAGxAAjCA4UQSv .marker.cross{stroke:#333333;}#mermaid-svg-17TAGxAAjCA4UQSv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-17TAGxAAjCA4UQSv p{margin:0;}#mermaid-svg-17TAGxAAjCA4UQSv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-17TAGxAAjCA4UQSv .cluster-label text{fill:#333;}#mermaid-svg-17TAGxAAjCA4UQSv .cluster-label span{color:#333;}#mermaid-svg-17TAGxAAjCA4UQSv .cluster-label span p{background-color:transparent;}#mermaid-svg-17TAGxAAjCA4UQSv .label text,#mermaid-svg-17TAGxAAjCA4UQSv span{fill:#333;color:#333;}#mermaid-svg-17TAGxAAjCA4UQSv .node rect,#mermaid-svg-17TAGxAAjCA4UQSv .node circle,#mermaid-svg-17TAGxAAjCA4UQSv .node ellipse,#mermaid-svg-17TAGxAAjCA4UQSv .node polygon,#mermaid-svg-17TAGxAAjCA4UQSv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-17TAGxAAjCA4UQSv .rough-node .label text,#mermaid-svg-17TAGxAAjCA4UQSv .node .label text,#mermaid-svg-17TAGxAAjCA4UQSv .image-shape .label,#mermaid-svg-17TAGxAAjCA4UQSv .icon-shape .label{text-anchor:middle;}#mermaid-svg-17TAGxAAjCA4UQSv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-17TAGxAAjCA4UQSv .rough-node .label,#mermaid-svg-17TAGxAAjCA4UQSv .node .label,#mermaid-svg-17TAGxAAjCA4UQSv .image-shape .label,#mermaid-svg-17TAGxAAjCA4UQSv .icon-shape .label{text-align:center;}#mermaid-svg-17TAGxAAjCA4UQSv .node.clickable{cursor:pointer;}#mermaid-svg-17TAGxAAjCA4UQSv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-17TAGxAAjCA4UQSv .arrowheadPath{fill:#333333;}#mermaid-svg-17TAGxAAjCA4UQSv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-17TAGxAAjCA4UQSv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-17TAGxAAjCA4UQSv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-17TAGxAAjCA4UQSv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-17TAGxAAjCA4UQSv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-17TAGxAAjCA4UQSv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-17TAGxAAjCA4UQSv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-17TAGxAAjCA4UQSv .cluster text{fill:#333;}#mermaid-svg-17TAGxAAjCA4UQSv .cluster span{color:#333;}#mermaid-svg-17TAGxAAjCA4UQSv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-17TAGxAAjCA4UQSv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-17TAGxAAjCA4UQSv rect.text{fill:none;stroke-width:0;}#mermaid-svg-17TAGxAAjCA4UQSv .icon-shape,#mermaid-svg-17TAGxAAjCA4UQSv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-17TAGxAAjCA4UQSv .icon-shape p,#mermaid-svg-17TAGxAAjCA4UQSv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-17TAGxAAjCA4UQSv .icon-shape .label rect,#mermaid-svg-17TAGxAAjCA4UQSv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-17TAGxAAjCA4UQSv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-17TAGxAAjCA4UQSv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-17TAGxAAjCA4UQSv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 相关
不相关
是
否
第一层:元数据 Metadata
name + description
约 30-50 tokens
启动时预加载到系统提示
💾 磁盘上的 Skill 文件夹
Agent 判断是否需要
第二层:SKILL.md 完整内容
❌ 不加载
是否需要附加资源?
第三层:脚本/资源文件
✅ 直接执行
这套机制使 Skill 可以包含大量内容却不怕撑爆上下文窗口------无关任务时仅加载元数据(约 30-50 tokens),识别到相关任务后再逐步加载详细内容,大幅减少重复提示词。
2. Agent Skill 的核心架构
2.1 标准目录结构
无论 Cursor 还是 Claude Code,Agent Skill 都遵循统一的目录规范。以 Claude Code 为例:
bash
~/.claude/skills/my-custom-skill/
├── SKILL.md # 核心文件:包含元数据和详细指令(必需)
├── helpers.py # 可选:辅助脚本
└── resources/ # 可选:模板、参考文档、示例数据等
2.2 SKILL.md 文件规范
SKILL.md 由两部分组成:
元数据(YAML frontmatter) :位于文件头部,Claude 启动时预加载:
yaml
---
name: my-custom-skill
version: 1.0.0
description: |
这是一个自定义 Skill 示例。用于项目代码审查和 API 文档生成。
tags:
- code-review
- documentation
---
指令部分(Markdown 正文) :Agent 判断相关后才加载:
markdown
## 详细说明
此 Skill 的应用场景、输入输出格式要求。
## 步骤
1. 分析输入内容
2. 执行核心操作
3. 输出结果
## 示例
输入:[...]
输出:[...]
3. 在 Cursor 中集成自定义 Skill
Cursor 在 v0.50 版本中正式推出了原生 Skills 系统,完全内置于编辑器,无需外部依赖。
3.1 整体配置流程图
#mermaid-svg-P81N2uMTRtOy7KOV{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-P81N2uMTRtOy7KOV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-P81N2uMTRtOy7KOV .error-icon{fill:#552222;}#mermaid-svg-P81N2uMTRtOy7KOV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-P81N2uMTRtOy7KOV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-P81N2uMTRtOy7KOV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-P81N2uMTRtOy7KOV .marker.cross{stroke:#333333;}#mermaid-svg-P81N2uMTRtOy7KOV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-P81N2uMTRtOy7KOV p{margin:0;}#mermaid-svg-P81N2uMTRtOy7KOV .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-P81N2uMTRtOy7KOV .cluster-label text{fill:#333;}#mermaid-svg-P81N2uMTRtOy7KOV .cluster-label span{color:#333;}#mermaid-svg-P81N2uMTRtOy7KOV .cluster-label span p{background-color:transparent;}#mermaid-svg-P81N2uMTRtOy7KOV .label text,#mermaid-svg-P81N2uMTRtOy7KOV span{fill:#333;color:#333;}#mermaid-svg-P81N2uMTRtOy7KOV .node rect,#mermaid-svg-P81N2uMTRtOy7KOV .node circle,#mermaid-svg-P81N2uMTRtOy7KOV .node ellipse,#mermaid-svg-P81N2uMTRtOy7KOV .node polygon,#mermaid-svg-P81N2uMTRtOy7KOV .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-P81N2uMTRtOy7KOV .rough-node .label text,#mermaid-svg-P81N2uMTRtOy7KOV .node .label text,#mermaid-svg-P81N2uMTRtOy7KOV .image-shape .label,#mermaid-svg-P81N2uMTRtOy7KOV .icon-shape .label{text-anchor:middle;}#mermaid-svg-P81N2uMTRtOy7KOV .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-P81N2uMTRtOy7KOV .rough-node .label,#mermaid-svg-P81N2uMTRtOy7KOV .node .label,#mermaid-svg-P81N2uMTRtOy7KOV .image-shape .label,#mermaid-svg-P81N2uMTRtOy7KOV .icon-shape .label{text-align:center;}#mermaid-svg-P81N2uMTRtOy7KOV .node.clickable{cursor:pointer;}#mermaid-svg-P81N2uMTRtOy7KOV .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-P81N2uMTRtOy7KOV .arrowheadPath{fill:#333333;}#mermaid-svg-P81N2uMTRtOy7KOV .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-P81N2uMTRtOy7KOV .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-P81N2uMTRtOy7KOV .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-P81N2uMTRtOy7KOV .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-P81N2uMTRtOy7KOV .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-P81N2uMTRtOy7KOV .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-P81N2uMTRtOy7KOV .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-P81N2uMTRtOy7KOV .cluster text{fill:#333;}#mermaid-svg-P81N2uMTRtOy7KOV .cluster span{color:#333;}#mermaid-svg-P81N2uMTRtOy7KOV div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-P81N2uMTRtOy7KOV .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-P81N2uMTRtOy7KOV rect.text{fill:none;stroke-width:0;}#mermaid-svg-P81N2uMTRtOy7KOV .icon-shape,#mermaid-svg-P81N2uMTRtOy7KOV .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-P81N2uMTRtOy7KOV .icon-shape p,#mermaid-svg-P81N2uMTRtOy7KOV .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-P81N2uMTRtOy7KOV .icon-shape .label rect,#mermaid-svg-P81N2uMTRtOy7KOV .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-P81N2uMTRtOy7KOV .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-P81N2uMTRtOy7KOV .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-P81N2uMTRtOy7KOV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Step 5: 验证调用
触发关键词或斜杠命令调用
验证 Agent 自动加载成功
Step 4: 编写 Skill
创建技能子文件夹
编写 SKILL.md 文件
Step 3: 创建目录
项目根目录/.cursor/skills/
或 ~/.cursor/skills/
Step 2: 启用功能
Settings → Rules →
开启 Import Agent Skills
Step 1: 确认版本
检查 Cursor 版本 ≥ v0.50
建议切换到 Nightly/Beta 渠道
3.2 步骤一:确认 Cursor 版本和启用功能
Cursor 的 Skills 功能在较新版本中可用。建议切换到 Nightly 或 Beta 渠道以获取最新功能:
- 打开 Cursor Settings(
Ctrl/Cmd + ,) - 搜索 "Update Channel",选择 "Nightly" 或 "Beta"
- 进入 Settings → Rules → 找到 "Import Agent Skills" 选项并启用
3.3 步骤二:创建 Skills 目录
Cursor 支持两种作用域的 Skills:
bash
# 用户全局技能(个人常用,所有项目共享)
mkdir -p ~/.cursor/skills/code-reviewer
# 项目级技能(团队共享,纳入版本控制)
mkdir -p .cursor/skills/code-reviewer
优先级说明:项目级技能会覆盖同名的用户全局技能,项目中使用的技能建议放在项目级目录并提交到 Git。
3.4 步骤三:编写 SKILL.md 文件
以代码审查 Skill 为例:
markdown
---
name: code-reviewer
version: 1.0.0
description: "跨语言代码审查:检查安全漏洞、性能反模式和代码风格问题"
tags:
- python
- javascript
- security
---
## 指令
你是一名资深软件工程师,专注于安全、性能和可维护性。审查以下代码时重点关注:
1. **安全漏洞**:SQL 注入、XSS、原型污染、敏感信息泄露
2. **资源泄漏**:未关闭的文件句柄、goroutine、数据流
3. **代码风格**:符合项目规范(PEP8、Google Java Style 等)
4. **性能反模式**:不必要的循环内计算、重复数据库查询等
## 输出格式
- **[严重程度]** 类别:简要描述 → 修复建议
- 严重程度分为:CRITICAL / HIGH / MEDIUM / LOW
## 示例
输入:
```python
def get_user_data(user_id):
query = "SELECT * FROM users WHERE id = " + user_id
return db.execute(query)
输出:
HIGH SQL注入:使用字符串拼接构造SQL查询 → 建议使用参数化查询
### 3.5 步骤四:在 Cursor 中验证调用
创建完成后,有两种调用方式:
**方式一:Agent 自动发现**(推荐)
在 Agent 对话中提及相关任务内容,Cursor 会根据 SKILL.md 的 `description` 自动判断并加载对应的 Skill:
> "请用 code-reviewer 审查当前文件的代码。"
**方式二:斜杠命令手动调用**
在 Agent 输入框中输入 `/` 即可列出所有可用 Skill,选择后执行。
### 3.6 快速创建 Rule 的便捷方法
Cursor 还提供了通过对话直接创建 Rule 的便捷方法:
在 Agent 对话框中输入 /create-rule,描述你想要的行为。Agent 会自动生成规则文件并保存到 .cursor/rules 目录。
---
## 4. 在 Claude Code 中集成自定义 Skill
### 4.1 环境准备:安装 Claude Code
首先确保 Claude Code 已正确安装:
```bash
# macOS/Linux/WSL
curl -fsSL https://claude.ai/install.sh | bash
# Windows PowerShell
irm https://claude.ai/install.ps1 | iex
# 验证安装
claude --version
国内用户提示:官方 api.anthropic.com 在国内环境下可能不稳定,可通过配置 CC-Switch 切换供应商或接入兼容接口。
4.2 步骤一:创建 Skills 目录
Claude Code 的 Skills 放在项目路径的 .claude/skills/ 文件夹下:
bash
mkdir -p .claude/skills/meeting-summarizer
4.3 步骤二:编写 SKILL.md
以会议总结 Skill 为例:
markdown
---
name: meeting-summarizer
description: 将会议内容总结为结构化格式,包含参会人员、议题和决定
---
## Instructions
请将会议内容按以下格式总结:
1. **参会人员**:列出所有参与讨论的人员
2. **议题**:总结核心讨论主题
3. **决定**:记录会议达成的一致结论和下一步行动
## 输出示例
- 参会人员:张三、李四、王五
- 议题:讨论使用低代码平台搭建销售审批系统
- 决定:先进行两周试用,跑通Demo后全面采用
4.4 步骤三:验证 Skill 生效
启动 Claude Code 后,可通过两种方式确认 Skill 是否被正确识别:
方法一:查询可用 Skills
在 Claude Code 对话中输入:
有哪些可用的skills?
Claude Code 会列出所有已加载的 Skills。
方法二:直接触发调用
输入需要 Skill 处理的任务内容,Claude 会根据 description 自动判断并加载对应的 Skill:
帮我总结以下会议内容:
张三:我们销售审批流程效率太低,想快速搭建数字化系统。
李四:IT只有3人,必须低代码,还要能对接现有ERP数据库。
王五:XX工具支持数据库直连和私有化部署,3人团队完全够用。
张三:先试两周,跑通Demo再走。
4.5 进阶:通过插件共享 Skill
如果想要将 Skill 分享给团队成员或发布到社区,可以将其打包成插件。
bash
# 1. 创建插件目录结构
mkdir -p my-first-plugin/skills/hello
mkdir -p my-first-plugin/.claude-plugin
# 2. 创建插件清单 .claude-plugin/plugin.json
{
"name": "my-first-plugin",
"description": "一个示例插件",
"version": "1.0.0",
"author": { "name": "Your Name" }
}
# 3. 编写 Skill(放在 skills/hello/SKILL.md)
# 4. 使用插件
claude --plugin-dir ./my-first-plugin
插件目录的完整结构如下:
my-first-plugin/
├── .claude-plugin/
│ └── plugin.json # 插件清单(必需)
├── skills/ # Agent Skills
│ └── hello/
│ └── SKILL.md
├── agents/ # 自定义 Agent
├── hooks/ # 生命周期钩子
├── commands/ # 斜杠命令
├── .mcp.json # MCP Server 配置
└── settings.json # 默认设置
5. Skills vs MCP vs Plugins:何时选择谁?
Claude Code 提供多种扩展机制,了解各自定位至关重要:
| 扩展方式 | 用途 | Token 消耗 | 适用场景 |
|---|---|---|---|
| Skills | 传授方法/流程 | 约 30-50 tokens/skill | 领域专业知识、代码审查、文档生成 |
| MCP | 连接外部工具/数据 | 可变,可达 50k+ | GitHub、数据库、浏览器、API 调用 |
| Plugins | 打包与分发 | 各组件累加 | 团队标准化、社区分享 |
| Hooks | 自动化触发 | 极小 | 代码修改后自动 lint、提交前检查 |
| Slash Commands | 提示词快捷方式 | 极小 | 高频操作 |
简单判断原则:
- 需要重复执行的"流程" → Skills
- 需要连接外部系统(数据库/GitHub/API) → MCP
- 想把组合能力分享给团队 → Plugins
6. 实战案例:创建代码审查 Skill 并同时在 Cursor 和 Claude Code 中使用
6.1 创建通用 Skill 文件夹
bash
# 创建通用的 Skill 目录
mkdir -p code-review-skill
# 编写 SKILL.md
cat > code-review-skill/SKILL.md << 'EOF'
---
name: code-reviewer
description: 安全聚焦的跨语言代码审查,遵循 OWASP 指南
---
## 审查清单
1. 检查注入漏洞(SQL、XSS、命令注入)
2. 验证认证和授权模式
3. 检查敏感数据暴露
4. 确认错误处理不会泄露信息
## 输出严重级别
CRITICAL > HIGH > MEDIUM > LOW
## 规则
如果发现 CRITICAL 问题,必须阻止代码合并。
EOF
6.2 在 Cursor 中安装
bash
# 复制到 Cursor 项目级 skill 目录
cp -r code-review-skill .cursor/skills/code-reviewer
6.3 在 Claude Code 中安装
bash
# 复制到 Claude Code 项目级 skill 目录
cp -r code-review-skill .claude/skills/code-reviewer
由于 Agent Skills 已是开放标准,同一个 Skill 文件夹可以跨工具使用,无需任何修改。
7. 常见问题与避坑指南
Q1:Agent 没有自动加载我的 Skill?
可能原因:
- SKILL.md 中的
description不够清晰,Agent 难以判断相关性。建议描述中明确包含使用该 Skill 的触发条件。 - 确认文件是否放在正确的目录下(Cursor:
.cursor/skills/,Claude Code:.claude/skills/)。 - 确认文件名是否为
SKILL.md(大小写敏感)。
Q2:Skill 和 Rule 应该放在哪里?
Rule 放置位置:
- 始终生效的约束(编码规范、安全规则)放在
Rules - 可通过
/create-rule命令快速生成
Skill 放置位置:
- 按需执行的流程放在
Skills - 需要跨项目复用的放用户全局目录
~/.cursor/skills/ - 项目特定技能放项目级目录
.cursor/skills/
Q3:如何调试 Skill 是否被正确加载?
在 Claude Code 中:直接询问"有哪些可用的 Skills?"查看输出列表。
在 Cursor 中:
- 输入
/查看斜杠命令列表中是否包含你的 Skill - 在 Agent 对话中提及相关任务,观察是否会触发对应 Skill 的加载提示
8. 总结
#mermaid-svg-ajXxs6WP2fRVY5sf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ajXxs6WP2fRVY5sf .error-icon{fill:#552222;}#mermaid-svg-ajXxs6WP2fRVY5sf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ajXxs6WP2fRVY5sf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ajXxs6WP2fRVY5sf .marker.cross{stroke:#333333;}#mermaid-svg-ajXxs6WP2fRVY5sf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ajXxs6WP2fRVY5sf p{margin:0;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge{stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 text{fill:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth--1{stroke-width:17;}#mermaid-svg-ajXxs6WP2fRVY5sf .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-0{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-0{stroke-width:14;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-1{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-1{stroke-width:11;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 text{fill:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-2{stroke-width:8;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-3{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-3{stroke-width:5;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-4{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-4{stroke-width:2;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-5{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-5{stroke-width:-1;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-6{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-6{stroke-width:-4;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-7{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-7{stroke-width:-7;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-8{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-8{stroke-width:-10;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-9{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-9{stroke-width:-13;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 polygon,#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 text{fill:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .node-icon-10{font-size:40px;color:black;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .edge-depth-10{stroke-width:-16;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled circle,#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:lightgray;}#mermaid-svg-ajXxs6WP2fRVY5sf .disabled text{fill:#efefef;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-root rect,#mermaid-svg-ajXxs6WP2fRVY5sf .section-root path,#mermaid-svg-ajXxs6WP2fRVY5sf .section-root circle,#mermaid-svg-ajXxs6WP2fRVY5sf .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-ajXxs6WP2fRVY5sf .section-root text{fill:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-root span{color:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .section-2 span{color:#ffffff;}#mermaid-svg-ajXxs6WP2fRVY5sf .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-ajXxs6WP2fRVY5sf .edge{fill:none;}#mermaid-svg-ajXxs6WP2fRVY5sf .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-ajXxs6WP2fRVY5sf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} (Agent Skill 集成总结)
核心概念
可复用的 AI 能力单元
结构与 SKILL.md 文件
渐进式披露机制
Cursor集成
版本要求v0.50+
目录 .cursor/skills/
自动发现或斜杠命令调用
/create-rule 快速创建
ClaudeCode集成
目录 .claude/skills/
验证有哪些可用skills
插件打包分享
对比与选择
Rules用于始终约束
Skills用于按需流程
MCP用于外部工具
核心要点回顾
-
Agent Skill = AI 的"操作手册" ------ 把重复性的工作流程封装成可复用的能力单元
-
开放标准,跨平台通用 ------ 同一个 SKILL.md 可在 Cursor、Claude Code、VS Code、Codex 等多种工具中使用
-
渐进式披露保证高效 ------ 先加载元数据(30-50 tokens),相关时才加载完整内容,可拥有上百个 Skills 而不撑爆上下文
-
Rule vs Skill 泾渭分明 ------ 始终生效的用 Rule,按需执行的用 Skill
快速启动清单
- 确认 Cursor 版本 ≥ v0.50,启用 Agent Skills
- 创建
.cursor/skills/<skill-name>/SKILL.md - 编写元数据(name + description)和详细指令
- 在对话中使用
/或自然语言触发验证 - (Claude Code)创建
.claude/skills/<skill-name>/SKILL.md - 通过
有哪些可用的skills?验证加载
下一篇预告:如何将 RAG + Prompt 工程 + Agent Skill 三者结合,构建企业级智能代码助手。欢迎在评论区分享你在使用 Agent Skill 过程中的心得体会!