Cursor Skills vs Rules: When to Use Which

Cursor Skills and Rules both steer the agent, but they are not interchangeable. Per the official Skills and Rules docs, put short constraints and coding norms in Rules, and multi-step procedures in Skills. No pricing.

This is not a Notepads retrospective. It is a decision guide: keep a Rule, or move to a Skill.

How do Skills and Rules differ?

One-line answer: Rules are short norms injected into matching or always-on chats; Skills are on-demand procedural packages invoked with /skill-name or discovered when relevant.

RulesSkills
PurposeShort coding guidelines and constraintsMulti-step workflows and procedures
LengthA few lines to a few hundredOften longer, step-by-step
How appliedAlways / globs / Intelligent / @rule/skill-name, @skill, or auto when relevant
Storage.cursor/rules/*.mdc.cursor/skills/*/SKILL.md (also .agents/skills/, etc.)
Example“Use TypeScript for all new files”“Deploy to staging: test → build → deploy → health-check”

Same split as the Skills help comparison table. Use a rule when a short instruction is enough; use a skill when the agent needs a repeatable process.

Skills live in SKILL.md with frontmatter (name, description, optional paths) and may ship scripts/references. Rules use .mdc frontmatter (description, globs, alwaysApply). A plain .md under .cursor/rules is ignored by the rules system.

When do you use alwaysApply and globs?

One-line answer: alwaysApply: true for repo-wide constraints every chat; globs for path-scoped norms when matching files are in context; otherwise description-based Intelligent apply or manual @.

alwaysApplydescriptionglobsBehavior
true——Always included (globs/description ignored)
false—setAuto-attached when a matching file is in context
falsesetomittedAgent pulls it in when relevant (Apply Intelligently)
falseomittedomittedOnly when you @-mention the rule

Practical signals:

  1. Secrets policy, “never edit generated dirs,” reply language → short alwaysApply: true.
  2. API error shapes under src/api/** → globs + alwaysApply: false.
  3. Occasional domain notes → description only (Intelligent).
  4. One-off checklists → Skill or @file, not a fat Rule.

Minimal glob Rule:

---
description: API route validation and typed errors
globs: src/routes/api/**/*.ts
alwaysApply: false
---

- Validate inputs at the route boundary.
- Return the existing typed error shape.
- Update the nearest unit test before claiming done.

Rules with alwaysApply or globs have different triggers than skills, so /migrate-to-skills skips them.

What does /migrate-to-skills move?

One-line answer: Built-in /migrate-to-skills (Cursor 2.4+) converts dynamic “Apply Intelligently” rules (alwaysApply: false/unset and no globs) and slash commands. It leaves Always-apply, glob Rules, and User Rules alone.

Migrates:

  • Dynamic rules — Apply Intelligently: alwaysApply: false (or undefined) with no globs → standard skills
  • Slash commands — user- and workspace-level → skills with disable-model-invocation: true (explicit / only)

Does not migrate:

  • alwaysApply: true rules
  • Rules with globs
  • User Rules (not on the filesystem)

Steps:

  1. Type /migrate-to-skills in Agent chat
  2. Review generated skills under .cursor/skills/
  3. Delete only the dynamic rules/commands you no longer need

For a single conversion, /create-skill (“turn @my-rule into a skill”) then delete the old rule is safer.

Decision checklist:

QuestionYes →No →
Must a short norm load every chat or matching path?Rule (alwaysApply / globs)Next
Need a repeatable multi-step procedure?Skill (SKILL.md)@ file / one-shot prompt
Intelligent-only rule grew into a long how-to?/migrate-to-skills or /create-skillKeep Rule short

Wrap-up

Cursor Skills vs Rules is norms (Rules) vs procedures (Skills). alwaysApply and globs are Rule triggers; /migrate-to-skills only lifts dynamic rules and slash commands. Keep Always/glob Rules; move long how-tos into Skills. See Rules, Skills, and Skills help.

Sources