跳到主要内容

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 会比任何单一功能单独使用时强大得多。