Cursor Skills、Commands 和 Rules:有什么区别?
Cursor 有三个重叠但不同的功能让很多用户感到困惑:Skills、Commands 和 Rules。拥有 11 条回复的论坛线程以不同的方式问了本质上相同的问题 —— "我用哪个来做什么?" 本指南为它们划清了界限,并展示了何时使用每个功能。
定义
让我们从每个功能实际是什么开始。
Rules 是什么?
Rules 告诉 Cursor 的 AI 在生成或修改代码时如何表现。它们定义编码标准、约定、约束和偏好。
Rules 是声明式的 —— 你陈述什么应该是真实的,AI 遵循它。
始终使用 TypeScript 严格模式。
优先使用命名导出而不是默认导出。
使用带有 hooks 的函数组件,而不是类组件。
Rules 自动应用于配置它们的项目中的每次 AI 交互。你不需要手动调用它们。
Rules 的位置:
- 全局 Rules:设置 > 通用 > AI 的 Rules
- 项目 Rules:项目根目录中的
.cursorrules文件 - 作用域 Rules:
.cursor/rules/目录中的.mdc文件
Commands 是什么?
Commands 是你手动调用的预定义提示,用于执行特定操作。它们是常见任务的快捷方式。
Commands 是命令式的 —— 你触发它们来立即做某件特定的事。
你输入:"/explain"
结果:AI 解释选中的代码
你输入:
"/fix"
结果:AI 修复选中代码中的错误
Commands 是显式的用户操作。除非您告诉它,否则 AI 不会使用它们。
Commands 的位置:
- 内置 Commands:
/explain、/fix、/doc、/test等 - 自定义 Commands:用户在设置中定义
Skills 是什么?
Skills 是 Cursor 的 AI 在需要时可以调用的上下文能力。它们代表 AI 可以应用于你的请求的域知识或专门能力。
Skills 是自适应的 —— AI 根据你的提示决定何时使用它们。
用户:"使用 TypeScript、Tailwind 和 Prisma 设置一个 Next.js 项目"
AI 使用其 "Next.js 项目脚手架" Skill 来:
- 运行正确的初始化命令
- 正确配置 Tailwind
- 使用正确的架构位置设置 Prisma
- 配置 TypeScript 路径
你不显式调用 Skills。AI 识别何时适用 Skill 并自动使用它。
Skills 的来源:
- 内置于 Cursor 的 AI 训练中
- 随着时间的推移从你的代码库中学习
- 通过 MCP(Model Context Protocol)服务器添加
并排对比
| 方面 | Rules | Commands | Skills |
|---|---|---|---|
| 目的 | 定义行为标准 | 执行特定操作 | 应用领域知识 |
| 何时应用 | 自动,始终 | 手动调用时 | AI 检测到相关性时 |
| 用户控制 | 设置一次,始终应用 | 按需触发 | 隐式的,AI 决定 |
| 格式 | 文本 / JSON / .mdc | 斜杠命令(/fix) | 内部 AI 能力 |
| 范围 | 全局或项目特定 | 通用 | 上下文相关 |
| 示例 | "使用分号" | /explain selection | "知道如何搭建 React 应用" |
何时使用每个功能
使用 Rules 的情况
当你想要持续改变 AI 在你的项目中编写代码的方式时。
好的 Rule 用例:
- 强制执行编码风格(制表符 vs. 空格,命名约定)
- 指定技术栈偏好(React vs. Vue,Prisma vs. Drizzle)
- 定义架构约束(无循环导入,特定的文件夹结构)
- 设置响应风格("简洁","始终添加注释")
{
"techStack": ["Next.js 14", "TypeScript", "Tailwind CSS"],
"rules": [
"默认使用服务器组件",
"仅在需要交互性时添加 'use client'",
"所有 API 路由放在 app/api/",
"所有数据库操作使用 Prisma"
]
}
Rules 是你项目的"宪法"。编写一次,它们就会指导每次 AI 交互。
使用 Commands 的情况
当你想要立即对选中的代码或当前上下文执行特定操作时。
好的 Command 用例:
- 解释不熟悉的代码(
/explain) - 修复特定错误(
/fix) - 生成文档(
/doc) - 为函数编写测试(
/test) - 重构选中的代码块(
/refactor)
1. 选择你想要文档化的函数
2. 在聊天中输入 /doc
3. AI 为该函数生成 JSDoc 注释
内置 Commands 参考:
| Command | 作用 | 何时使用 |
|---|---|---|
/explain | 解释选中的代码 | 阅读不熟悉的代码 |
/fix | 修复选中代码中的错误 | 当有 bug 或错误时 |
/doc | 生成文档 | 添加 JSDoc/文档字符串 |
/test | 生成单元测试 | 编写测试覆盖 |
/refactor | 建议重构 | 改进代码结构 |
/commit | 生成提交消息 | 在提交更改之前 |
Commands 可以组合。你可以选择代码,输入 /doc,然后跟进 /test 来为同一个函数生成文档和测试。
使用 Skills 的情况
Skills 不是你直接"使用"的东西 —— 它们是 AI 利用的东西。但你可以通过 MCP 服务器和项目上下文启用或配置 Skills。
好的 Skill 配置:
- 添加 MCP 服务器以实现数据库架构感知
- 启用网页搜索能力
- 连接到文档 API
- 设置仓库特定的知识
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
当这些 MCP 服务器连接时,AI 获得了直接查询你的数据库或 GitHub issues 的"Skill"。
结合使用:一个实际示例
真正的力量来自于将三者一起使用。以下是一个真实工作流的样子:
场景:添加一个新的 API 端点
设置(Rules):
你的 .cursorrules 文件包含:
技术栈:Next.js 14 App Router、TypeScript、Prisma、Zod
API 约定:
- 所有路由在 app/api/[resource]/route.ts
- 使用 Zod 进行输入验证
- 返回一致的错误格式:{ error: string, code: string }
- 对多表操作使用 Prisma 事务
执行(Commands):
你选择一个现有的路由文件并输入:
/test
AI 基于你的 Rules 为现有路由生成测试。
然后你输入:
创建一个新的 POST 端点 /api/orders,接受
{ items: Array<{ productId: string, quantity: number }>,
customerEmail: string } 并在事务中创建订单及订单项。
AI 辅助(Skills):
AI 自动:
- 应用你的 Rules —— 将文件放在
app/api/orders/route.ts,使用 Zod 验证,包裹在 Prisma 事务中 - 使用其 Skill 处理 Next.js App Router 路由约定
- 使用其 Skill 处理 Prisma 事务语法
- 生成遵循所有约束的代码
import { NextRequest, NextResponse } from 'next/server';
import { z } from 'zod';
import { prisma } from '@/lib/db';
const orderSchema = z.object({
items: z.array(z.object({
productId: z.string().uuid(),
quantity: z.number().int().positive()
})).min(1),
customerEmail: z.string().email()
});
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const validated = orderSchema.parse(body);
const order = await prisma.$transaction(async (tx) => {
const newOrder = await tx.order.create({
data: {
customerEmail: validated.customerEmail,
status: 'PENDING'
}
});
await tx.orderItem.createMany({
data: validated.items.map(item => ({
orderId: newOrder.id,
productId: item.productId,
quantity: item.quantity
}))
});
return newOrder;
});
return NextResponse.json(order, { status: 201 });
} catch (error) {
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: 'Invalid input', code: 'VALIDATION_ERROR' },
{ status: 400 }
);
}
return NextResponse.json(
{ error: 'Internal server error', code: 'INTERNAL_ERROR' },
{ status: 500 }
);
}
}
注意代码如何遵循你定义的每一条 Rule,而无需你在提示中重复它们。这就是结合所有三种机制的力量。
常见困惑与澄清
"我可以把 Rules 变成 Commands 吗?"
不能直接转换。Rules 是被动的约束;Commands 是主动的操作。但是,你可以编写引用你的 Rules 的自定义 Commands:
"/lint" —— 一个自定义 Command,要求 AI 检查
选中的代码是否遵循所有项目 Rules
"Skills 会覆盖 Rules 吗?"
不会。Rules 始终优先。如果 Skill 建议的方法违反了 Rule,AI 应该遵循 Rule。如果你看到 AI 忽略 Rules,你的 Rules 可能太模糊或相互冲突。
"我应该先设置哪一个?"
- 先设置 Rules —— 定义你的项目约定
- 其次学习 Commands —— 学习内置的,根据需要添加自定义的
- 最后添加 Skills —— 一旦你知道存在哪些差距,就通过 MCP 服务器添加上下文
"我可以同时使用多个吗?"
当然可以。事实上,你应该这样做。Rules 设定基线,Commands 触发操作,Skills 填补知识空白。它们被设计为协同工作。
自定义 Commands:更进一步
你可以在 Cursor 设置中定义自定义 Commands,用于特定于你项目的工作流。
{
"cursor.customCommands": [
{
"name": "api-check",
"description": "检查 API 路由是否遵循项目约定",
"prompt": "审查这个 API 路由文件并检查:1)它是否在正确的位置?2)它是否使用 Zod 验证?3)它是否对多表操作使用 Prisma 事务?4)它是否返回标准错误格式?列出任何违规。"
},
{
"name": "add-logging",
"description": "为函数添加结构化日志",
"prompt": "使用项目中来自 @/lib/logger 的 logger 为这个函数添加结构化日志。记录入口参数、退出结果和捕获的任何错误。"
}
]
}
通过在聊天中输入 /api-check 或 /add-logging 来使用它们。
总结
| 功能 | 把它想象成 | 你的操作 | AI 的操作 |
|---|---|---|---|
| Rules | 项目宪法 | 编写一次 | 自动遵循 |
| Commands | 电动工具 | 需要时调用 | 执行特定任务 |
| Skills | 领域专业知识 | 配置/增强 | 在相关时应用 |
最简单的心智模型:
- Rules = "始终这样做"
- Commands = "现在做这件特定的事"
- Skills = "我知道如何做这类事"
首先设置你的 Rules,让 AI 知道你的标准。学习内置的 Commands 来加速常见任务。当你需要 AI 理解外部系统时,通过 MCP 服务器添加 Skills。一起使用它们,Cursor 会比任何单一功能单独使用时强大得多。