--- name: creating-cursor-commands description: Expert guidance for creating effective Cursor slash commands with best practices, format requirements, and schema validation --- # Creating Cursor Slash Commands You are an expert at creating effective Cursor slash commands (`.cursor/commands/*.md`) that provide clear, actionable instructions for AI assistants. ## When to Use This Skill **Use when:** - User wants to create a new Cursor slash command - User asks to improve existing slash commands - User needs help understanding Cursor command format - User wants to convert prompts to slash commands - User asks about Cursor command validation **Don't use for:** - Cursor rules (`.cursor/rules/`) - use `creating-cursor-rules-skill` instead - Claude Code slash commands - those use different format with frontmatter - Complex multi-step workflows - those should be Cursor rules ## Quick Reference | Aspect | Requirement | |--------|-------------| | **File Location** | `.cursor/commands/*.md` | | **Format** | Plain Markdown (NO frontmatter) | | **Filename** | Descriptive kebab-case (e.g., `review-code.md`, `generate-tests.md`) | | **Invocation** | `/command-name` in chat | | **Content** | Clear, actionable instructions with examples | ## Format Requirements ### Critical Rules 1. **NO frontmatter allowed** - Cursor commands are plain Markdown only 2. **Descriptive filenames** - The filename becomes the command name 3. **Clear instructions** - Tell AI exactly what to do 4. **Include examples** - Show desired output format ### File Naming **Good filenames:** - `review-code.md` → `/review-code` - `generate-tests.md` → `/generate-tests` - `explain-code.md` → `/explain-code` - `optimize-performance.md` → `/optimize-performance` **Bad filenames:** - `rc.md` - Too cryptic - `review_code.md` - Use hyphens, not underscores - `ReviewCode.md` - Use lowercase - `review-code-thoroughly-with-security-checks.md` - Too verbose ## Schema Validation ### Schema Location `https://github.com/pr-pm/prpm/blob/main/packages/converters/schemas/cursor-command.schema.json` ### Schema Structure ```json { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://prpm.dev/schemas/cursor-command.schema.json", "title": "Cursor Command Format", "description": "JSON Schema for Cursor commands (slash commands) - plain Markdown files in .cursor/commands/", "type": "object", "required": ["content"], "properties": { "content": { "type": "string", "description": "Plain Markdown content describing what the command should do. No frontmatter supported." } }, "additionalProperties": false } ``` ### Key Validations 1. **Must be plain Markdown** - No YAML frontmatter 2. **Content-only structure** - Single `content` field 3. **No metadata** - Unlike Cursor rules, commands have no configuration ## Common Mistakes | Mistake | Why It's Wrong | How to Fix | |---------|---------------|------------| | Adding frontmatter | Cursor commands don't support frontmatter | Remove `---` blocks entirely | | Using default exports syntax | Commands are not code files | Write plain Markdown instructions | | Vague instructions | AI needs specific guidance | Add concrete examples and steps | | Too many tasks | Commands should be focused | Create separate commands or use rules | | Missing context | AI needs to know what to do | Include expected output format | ## Best Practices ### 1. Be Specific and Actionable **❌ Bad - Vague:** ```markdown # Review Code Review the code for issues. ``` **✅ Good - Specific:** ```markdown # Review Code Review the selected code for: - Code quality and best practices - Potential bugs or edge cases - Performance improvements - Security vulnerabilities Provide specific, actionable feedback with code examples where appropriate. ``` ### 2. Include Expected Output Format **❌ Bad - No guidance:** ```markdown # Generate Tests Generate tests for this code. ``` **✅ Good - Clear format:** ```markdown # Generate Tests Generate comprehensive unit tests for the selected code. Include: - Happy path test cases - Edge cases and error handling - Mock external dependencies - Follow existing test patterns in the project Use the testing framework already configured in the project. ``` ### 3. Provide Step-by-Step Instructions **✅ Good - Structured approach:** ```markdown # Explain Code Provide a clear explanation of what the selected code does. Include: - High-level purpose and goals - Step-by-step breakdown of logic - Any non-obvious behavior or edge cases - Dependencies and side effects - How it fits into the larger codebase ``` ### 4. Reference Project Context **✅ Good - Context-aware:** ```markdown # Add Component Create a new React component following our project conventions. Structure: - Functional component with TypeScript - Props interface defined separately - Export as named export (not default) - Co-locate styles if needed - Follow existing component patterns in components/ directory Use the same testing approach as existing components. ``` ### 5. Focus on One Task Each command should do ONE thing well. **❌ Bad - Too broad:** ```markdown # Full Stack Feature Create a full-stack feature with: - Database migration - API endpoint - Frontend component - Tests for everything - Documentation ``` **✅ Good - Focused:** ```markdown # Create API Endpoint Create a new API endpoint following our conventions. Include: - Input validation with Zod - Error handling with try/catch - TypeScript types for request/response - Follow patterns in existing endpoints ``` ## Examples ### Code Review Command `.cursor/commands/review-code.md`: ```markdown # Review Code Review the selected code for: 1. **Code Quality** - Clean, readable code - Proper naming conventions - DRY principle adherence 2. **Security** - Input validation - SQL injection risks - XSS vulnerabilities - Authentication/authorization checks 3. **Performance** - Inefficient algorithms - Unnecessary computations - Memory leaks - Database query optimization 4. **Best Practices** - Error handling - Type safety - Test coverage - Documentation Provide specific file and line references for all issues found. Format findings as a numbered list with severity (Critical/High/Medium/Low). ``` ### Test Generation Command `.cursor/commands/generate-tests.md`: ```markdown # Generate Tests Generate comprehensive unit tests for the selected code. Test Coverage: - Happy path scenarios - Edge cases - Error conditions - Boundary values - Invalid inputs Requirements: - Use existing test framework (Jest/Vitest/etc.) - Follow project testing patterns - Mock external dependencies - Include test descriptions - Aim for 100% code coverage Format tests in the same style as existing test files in the project. ``` ### Documentation Generator `.cursor/commands/document-function.md`: ```markdown # Document Function Generate comprehensive documentation for the selected function. Include: **Function signature:** - Parameter types and descriptions - Return type and description - Generic types if applicable **Description:** - What the function does (one-line summary) - Why it exists (use case) - How it works (implementation details if non-obvious) **Examples:** - Basic usage example - Edge case example if relevant **Notes:** - Any side effects - Performance considerations - Related functions Use JSDoc/TSDoc format for TypeScript/JavaScript. ``` ### Optimization Command `.cursor/commands/optimize-performance.md`: ```markdown # Optimize Performance Analyze the selected code for performance improvements. Look for: **Algorithmic Issues:** - O(n²) or worse time complexity - Unnecessary nested loops - Inefficient data structures **React-Specific:** - Unnecessary re-renders - Missing useMemo/useCallback - Large component trees - Props drilling **General:** - Redundant computations - Memory leaks - Synchronous blocking operations - Large bundle size contributors Suggest specific optimizations with code examples. Estimate performance impact of each suggestion. ``` ### Refactoring Command `.cursor/commands/refactor-clean.md`: ```markdown # Refactor for Clean Code Refactor the selected code to improve maintainability. Apply these principles: **Extract Functions:** - Break down large functions (> 50 lines) - Create single-responsibility functions - Use descriptive names **Simplify Logic:** - Reduce nesting (early returns) - Eliminate duplication - Clarify complex conditionals **Improve Names:** - Use meaningful variable names - Follow project naming conventions - Avoid abbreviations **Type Safety:** - Add proper TypeScript types - Eliminate 'any' types - Use interfaces/types Preserve all existing functionality and tests. ``` ### Bug Fix Command `.cursor/commands/fix-bug.md`: ```markdown # Fix Bug Analyze and fix the bug in the selected code. Investigation steps: 1. Identify the root cause 2. Explain why the bug occurs 3. Propose a fix 4. Consider edge cases 5. Suggest tests to prevent regression Fix requirements: - Minimal changes to fix the issue - Don't break existing functionality - Add/update tests - Add comments explaining the fix if non-obvious Explain the fix clearly with before/after code examples. ``` ## Storage Locations Commands can be stored in multiple locations (in order of precedence): 1. **Project commands**: `.cursor/commands/` directory in your project (shared with team) 2. **Global commands**: `~/.cursor/commands/` directory (personal, all projects) 3. **Team commands**: Created via Cursor Dashboard (enterprise teams) **Best practice:** Store team-wide commands in `.cursor/commands/` and commit to version control. ## Testing Your Commands After creating a command: 1. **Save** to `.cursor/commands/command-name.md` 2. **Invoke** with `/command-name` in Cursor chat 3. **Verify** AI follows instructions correctly 4. **Test edge cases**: - No code selected - Empty files - Complex code - Different languages 5. **Iterate** based on results ## Commands vs. Cursor Rules ### Use Commands When: - ✅ Simple, focused task - ✅ Explicit user invocation desired - ✅ Personal productivity shortcuts - ✅ One-time operations ### Use Cursor Rules When: - ✅ Context-aware automatic activation - ✅ File-type specific guidance - ✅ Team standardization - ✅ Always-on conventions **Example:** - **Command:** `/generate-tests` - Explicitly generate tests when asked - **Rule:** Auto-attach testing conventions to `*.test.ts` files ## Validation Checklist Before finalizing a command: - [ ] Filename is descriptive and kebab-case - [ ] NO frontmatter (plain Markdown only) - [ ] Instructions are clear and specific - [ ] Expected output format is described - [ ] Examples are included - [ ] Steps are actionable - [ ] Command is focused on one task - [ ] Edge cases are considered - [ ] File is in `.cursor/commands/` directory - [ ] Command has been tested ## Converting from Other Formats ### From Claude Code Slash Commands Claude Code commands use frontmatter - remove it for Cursor: **Claude Code:** ```markdown --- description: Review code allowed-tools: Read, Grep --- Review the code... ``` **Cursor:** ```markdown # Review Code Review the code... ``` ### From Cursor Rules Rules use frontmatter and are context-aware - simplify to plain Markdown: **Cursor Rule:** ```markdown --- description: Testing conventions globs: ["**/*.test.ts"] --- # Testing Standards Always write tests... ``` **Cursor Command:** ```markdown # Generate Tests Generate comprehensive tests... ``` ## Common Use Cases ### Code Quality - `/review-code` - Code review - `/refactor-clean` - Clean code refactoring - `/fix-lint` - Fix linting issues - `/improve-types` - Improve TypeScript types ### Testing - `/generate-tests` - Generate unit tests - `/test-edge-cases` - Add edge case tests - `/test-coverage` - Check test coverage ### Documentation - `/document-function` - Document function - `/add-comments` - Add code comments - `/explain-code` - Explain complex code ### Performance - `/optimize-performance` - Performance optimization - `/analyze-complexity` - Analyze time complexity - `/reduce-bundle` - Reduce bundle size ### Security - `/security-audit` - Security vulnerability check - `/sanitize-input` - Add input validation - `/check-auth` - Review authentication ## References - **Schema**: `https://github.com/pr-pm/prpm/blob/main/packages/converters/schemas/cursor-command.schema.json` - **Docs**: `/Users/khaliqgant/Projects/prpm/app/packages/converters/docs/cursor.md` - **Official Docs**: https://cursor.com/docs/agent/chat/commands ## Remember **Golden Rules:** 1. NO frontmatter - plain Markdown only 2. Descriptive filenames - they become command names 3. Clear instructions - AI needs specific guidance 4. Include examples - show desired output 5. One task per command - keep it focused **Goal:** Create commands that make frequent tasks effortless with a simple `/command-name` invocation.