Cursor Rules vs Agent Skills:我两者都测试了。以下是它们各自真正有效的时机。
抱歉,我需要您提供要翻译的正文内容(除代码块、URL 和源链接之外的文本),才能为您完成简体中文翻译。请把文章的文字粘贴在这里,我会保持原有的格式和 markdown 语法进行翻译。
Short answer
规则没有被弃用。它们的作用不同。以下是我找到的内容。
设置
我创建了两种格式的相同指令,并通过 Cursor 的代理运行它们,以观察每种方式的行为。
作为规则 (.cursor/rules/jsdoc.mdc with alwaysApply: true)
---
description: "JSDoc rules"
alwaysApply: true
---
Always add JSDoc comments to exported functions.
作为技能 (.cursor/skills/jsdoc/SKILL.md)
# JSDoc Skill
Always add JSDoc comments to exported functions.
测试 1 – 每个是否在相关任务上有效?
提示: “创建一个用于格式化日期的实用函数”
- 规则: 添加了完整的 JSDoc,包含
@param和@returns。遵循了指示。 - 技能: 同样的结果——完整的 JSDoc,遵循了指示。
当任务与指示内容相匹配时,规则和技能都能正常工作。
测试 2 – 每个是否会在不相关的任务上加载?
我为每个设置提供了一个标记指令(// RULE-LOADED 或 // SKILL-LOADED),并让 Cursor 编写一个 Python “Hello, World!” 脚本——与 JSDoc 或 JavaScript 毫无关系。
- Rule (alwaysApply: true): 标记注释出现在 Python 文件中。即使任务不相关,规则仍被加载。
- Skill: 没有标记。技能根本没有加载。
核心行为差异: 带有 alwaysApply: true 的规则会被注入到每个提示中,无论是否相关。技能只有在代理判断任务相关时才会加载。
测试 3 – 跨工具发现
Cursor 的文档称它会自动从 .claude/skills/ 和 .codex/skills/ 中发现技能,以实现跨工具兼容。我在 .claude/skills/test/SKILL.md 中放置了一个带有标记指令的技能并运行了相关任务。
该技能没有加载。Cursor 没有找到它。这可能是 CLI 与 GUI 的差异,或者仅在 .cursor/skills/ 中有效。无论如何,“把它放在 .claude/skills/,所有工具都会找到它”的说法在我的测试中并未成立。
何时使用哪种
在以下情况下使用规则:
- 你希望在每个任务上强制执行某些内容(编码风格、命名约定、框架模式)。
- 即使任务看似无关,你也需要它生效(例如,在重构期间“保留注释”)。
- 你想要可预测、始终开启的行为。
在以下情况下使用技能:
- 你有程序化的、多步骤的工作流(例如,“如何部署到预发布环境”)。
- 你希望指令仅在相关时加载(节省上下文窗口空间)。
- 你正在构建跨工具可移植的东西(只要跨工具发现可靠)。
迁移问题
Cursor 在文档中提到了 /migrate-to-skills 命令。我无法通过 CLI 测试它(它似乎只能在 GUI 中使用)。v2.4 更新日志将 skills 定位为规则的补充:“与始终开启的声明式规则相比,skills 更适合动态上下文发现和过程性操作指令。”
这种表述与我的测试结果相符。规则和 skills 并不竞争;它们处理不同的使用场景。
对你的 .cursor/rules/ 文件的意义
- 如果你有带有
alwaysApply: true的.mdc规则,用于代码风格、错误处理模式或框架约定,请继续使用它们。它们可靠、有效,并且每次都会加载。 - 如果你在构建多步骤工作流或部署流程,skill 更合适。它们只在需要时加载,保持上下文窗口的整洁。
不要因为有人说规则已废弃就把所有内容迁移到 skill。事实并非如此。
链接
- 77 free .mdc rules – 一个起点。
- cursor‑lint – 验证你的规则并且可以从你的堆栈自动生成它们 (
npx cursor-lint --generate)。 - Agent Skills spec – 开放标准。
- Cursor docs on rules 和 skills。