They seem so similar to me that I have a hard time choosing. All are essentially a reusable, shareable and custom prompt.
AFAIK
Rules are used always after the system prompt. So we should limit them to the minimal required ones to avoid repeated mistakes or code/style inconsistencies. Essentially, repetitive and short stuff goes here.
Commands and Skills can be more extensive, since they are only read when used. So here goes the more occasionally used or lengthy stuff. So far, so good.
Commands are only invoked manually, whereas skills can be invoked manually AND autonomously by the agent. But otherwise they are the same?
If this is so, then I would just ONLY use Skills…?!
Rules apply to the system prompt. There are 4 types: Always Apply (always), Apply Intelligently (the agent decides), Apply to Specific Files (by glob patterns), and Apply Manually (via @mention). They’re stored in .cursor/rules/.
Commands run via / in chat. Important note: per agent best practices, the agent can use commands autonomously, so they’re not only for manual use. They’re stored in .cursor/commands/.
Skills (nightly only) are portable knowledge packages for the agent. The agent decides when they’re relevant, or you can invoke them via /. Unlike Commands, this is an open standard (agentskills.io) and works cross platform. They’re stored in .cursor/skills/ as SKILL.md.
Subagents (nightly only) are separate AI assistants with isolated context for complex tasks. They can run in parallel or in the background. They’re stored in .cursor/agents/.
When to use what:
Rules: permanent instructions like code style and architecture standards (short, under 500 lines)
For months now I’ve been using Rules in the way that Commands are described. That is, I have rules with simple prompts like, “Make sure there are no linter warnings or type errors.”
I feel like I’m not fully understanding the difference between them because using my Rules in this manner has been great. I have some of them set up to only apply when tagged with @, and I reuse them all the time. What am I missing here?
To my understanding you aren’t missing anything. What helps myself get through this caos is the following simplified rationale “It is all a lie. Everything is just another prompt.” Therefore your usage might not be standard or documented but can work just as fine.
Not trying to be disrespectful at all with the “lie" here. Product is trying to name and build use cases and follow standards the best they can…and it’s tough.
It just helps me understand that all we are doing is telling LLMs what to do in a prompt or where to find the longer instructions (aka prompt) to avoid filling up the context. The rest on top is a essentially looping/harnessing/if-this-then-that nothing else.
the way i think about it: rules are “how to write code” (style, patterns, constraints). commands are “do this specific task” (like a macro). skills are rules that come from external packages rather than your project.
in practice they all end up as text in the system prompt, so the distinction is more about organization than behavior. a rule that says “always use branded types” and a skill that says the same thing work identically once they’re loaded.
where it actually matters is activation. rules have alwaysApply/globs/agent-decided. commands are manually invoked with /. skills are always agent-decided. so pick based on when you want it to fire, not what it does.