跳到主要内容

Cursor Skills、Commands 和 Rules:有什么区别?

Cursor 有三个重叠但不同的功能让很多用户感到困惑:Skills、Commands 和 Rules。拥有 11 条回复的论坛线程以不同的方式问了本质上相同的问题 —— "我用哪个来做什么?" 本指南为它们划清了界限,并展示了何时使用每个功能。

定义​

让我们从每个功能实际是什么开始。

Rules 是什么?​

Rules 告诉 Cursor 的 AI 在生成或修改代码时如何表现。它们定义编码标准、约定、约束和偏好。

Rules 是声明式的 —— 你陈述什么应该是真实的,AI 遵循它。

Rule 示例
始终使用 TypeScript 严格模式。
优先使用命名导出而不是默认导出。
使用带有 hooks 的函数组件,而不是类组件。

Rules 自动应用于配置它们的项目中的每次 AI 交互。你不需要手动调用它们。

Rules 的位置:

  • 全局 Rules:设置 > 通用 > AI 的 Rules
  • 项目 Rules:项目根目录中的 .cursorrules 文件
  • 作用域 Rules:.cursor/rules/ 目录中的 .mdc 文件

Commands 是什么?​

Commands 是你手动调用的预定义提示,用于执行特定操作。它们是常见任务的快捷方式。

Commands 是命令式的 —— 你触发它们来立即做某件特定的事。

Command 调用示例
你输入:"/explain"
结果:AI 解释选中的代码

你输入:
"/fix"
结果:AI 修复选中代码中的错误

Commands 是显式的用户操作。除非您告诉它,否则 AI 不会使用它们。

Commands 的位置:

  • 内置 Commands:/explain、/fix、/doc、/test 等
  • 自定义 Commands:用户在设置中定义

Skills 是什么?​

Skills 是 Cursor 的 AI 在需要时可以调用的上下文能力。它们代表 AI 可以应用于你的请求的域知识或专门能力。

Skills 是自适应的 —— AI 根据你的提示决定何时使用它们。

Skill 实际应用示例
用户:"使用 TypeScript、Tailwind 和 Prisma 设置一个 Next.js 项目"

AI 使用其 "Next.js 项目脚手架" Skill 来:
- 运行正确的初始化命令
- 正确配置 Tailwind
- 使用正确的架构位置设置 Prisma
- 配置 TypeScript 路径

你不显式调用 Skills。AI 识别何时适用 Skill 并自动使用它。

Skills 的来源:

  • 内置于 Cursor 的 AI 训练中
  • 随着时间的推移从你的代码库中学习
  • 通过 MCP(Model Context Protocol)服务器添加

并排对比​

方面RulesCommandsSkills
目的定义行为标准执行特定操作应用领域知识
何时应用自动,始终手动调用时AI 检测到相关性时
用户控制设置一次,始终应用按需触发隐式的,AI 决定
格式文本 / JSON / .mdc斜杠命令(/fix)内部 AI 能力
范围全局或项目特定通用上下文相关
示例"使用分号"/explain selection"知道如何搭建 React 应用"

何时使用每个功能​

使用 Rules 的情况​

当你想要持续改变 AI 在你的项目中编写代码的方式时。

好的 Rule 用例:

  • 强制执行编码风格(制表符 vs. 空格,命名约定)
  • 指定技术栈偏好(React vs. Vue,Prisma vs. Drizzle)
  • 定义架构约束(无循环导入,特定的文件夹结构)
  • 设置响应风格("简洁","始终添加注释")
.cursorrules 示例
{
"techStack": ["Next.js 14", "TypeScript", "Tailwind CSS"],
"rules": [
"默认使用服务器组件",
"仅在需要交互性时添加 'use client'",
"所有 API 路由放在 app/api/",
"所有数据库操作使用 Prisma"
]
}
提示

Rules 是你项目的"宪法"。编写一次,它们就会指导每次 AI 交互。

使用 Commands 的情况​

当你想要立即对选中的代码或当前上下文执行特定操作时。

好的 Command 用例:

  • 解释不熟悉的代码(/explain)
  • 修复特定错误(/fix)
  • 生成文档(/doc)
  • 为函数编写测试(/test)
  • 重构选中的代码块(/refactor)
Command 工作流
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
  • 设置仓库特定的知识
MCP 服务器配置(Skill 增强)
{
"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 自动:

  1. 应用你的 Rules —— 将文件放在 app/api/orders/route.ts,使用 Zod 验证,包裹在 Prisma 事务中
  2. 使用其 Skill 处理 Next.js App Router 路由约定
  3. 使用其 Skill 处理 Prisma 事务语法
  4. 生成遵循所有约束的代码
遵循 Rules 和 Skills 生成的代码
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:

自定义 Command 想法
"/lint" —— 一个自定义 Command,要求 AI 检查
选中的代码是否遵循所有项目 Rules

"Skills 会覆盖 Rules 吗?"​

不会。Rules 始终优先。如果 Skill 建议的方法违反了 Rule,AI 应该遵循 Rule。如果你看到 AI 忽略 Rules,你的 Rules 可能太模糊或相互冲突。

"我应该先设置哪一个?"​

  1. 先设置 Rules —— 定义你的项目约定
  2. 其次学习 Commands —— 学习内置的,根据需要添加自定义的
  3. 最后添加 Skills —— 一旦你知道存在哪些差距,就通过 MCP 服务器添加上下文

"我可以同时使用多个吗?"​

当然可以。事实上,你应该这样做。Rules 设定基线,Commands 触发操作,Skills 填补知识空白。它们被设计为协同工作。

自定义 Commands:更进一步​

你可以在 Cursor 设置中定义自定义 Commands,用于特定于你项目的工作流。

设置中的自定义 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 会比任何单一功能单独使用时强大得多。