Skip to content

Custom slash commands

A skill is a procedure the agent reasons through. Sometimes what you actually keep retyping is simpler: the same prompt. “Write a conventional-commit message for the staged diff.” “Review this change against budgetcli’s money-handling rules.” Those aren’t multi-step procedures the agent should adapt - they’re a fixed instruction you want to fire verbatim. That’s a custom slash command, introduced in Cursor 1.6.

Commands are stored in .cursor/commands/ as plain Markdown files - one file per command, checked into the repo so the team shares them. The filename is the command name; the body is the prompt:

.cursor/commands/commit-msg.md
Write a conventional-commits message for the currently staged diff.
- Use the budgetcli scopes: importer, ledger, reconcile, api.
- Subject line under 60 characters, imperative mood.
- Body only if the change isn't self-explanatory.
- Never invent a scope that isn't in that list.

Now typing /commit-msg in Agent chat fires that prompt. It shows up in the / picker alongside your skills and subagents - because in Cursor’s chat, / is the run surface and that picker lists everything runnable.

Here’s the edge to know before you build a command expecting it to behave like Claude Code’s $ARGUMENTS: Cursor’s argument passing into custom commands is limited, and richer templating - argument support, bash execution, file tagging to match Claude Code - is an open community request rather than a shipped feature.

forum.cursor.com/t/132611

The practical consequence: write commands that work on the current context - the staged diff, the open file, the selection - rather than commands that expect you to pass typed parameters. A /commit-msg that reads the staged diff is robust; a /rename-symbol <old> <new> that depends on parsing two arguments is fighting the primitive. When you need parameters and branching logic, that’s a sign you wanted a skill (a procedure) or a subagent, not a command (a template).

For teams, commands don’t have to live in each repo. Team Commands (shipped in Cursor 2.0, alongside Team Rules) let you define custom commands in the Cursor dashboard and have them automatically applied to all members of your team - the same dashboard-distribution model as Team Rules, with no local file needed. A standard like /commit-msg then applies to every member without anyone committing a .cursor/commands/ file.

If you used Cursor before late 2025, you reached for Notepads to stash reusable prompts and context. Notepads were deprecated at the end of October 2025. Cursor’s own announcement points to Rules, Commands, Memories, and improved Agent context-discovery as the features that supersede them (Skills hadn’t shipped yet - they arrived later, in 2.4). If you’re carrying old Notepads, the practical migration this chapter would suggest is to split each one by whether it’s a multi-step recipe - now best expressed as a Skill - or a fixed instruction, which becomes a Custom Command.

Reach and structure both still depend, in the end, on the model choosing well. For the one move in budgetcli where that is not an assurance you can accept, you need something that runs whether or not the model cooperates. Next: hooks, the gate that can say no.