Claude-skill-registry cursor-rules
This skill should be used when creating or editing Cursor rules files (.mdc format) in the .cursor/rules directory. Provides guidance on rule types, frontmatter configuration, effective rule writing patterns, and best practices for structuring AI instructions for Cursor IDE.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/cursor-rules" ~/.claude/skills/majiayu000-claude-skill-registry-cursor-rules && rm -rf "$T"
skills/data/cursor-rules/SKILL.mdCursor Rules
Guide for creating and editing Cursor rules files (.mdc format) that provide context-aware instructions to the AI in Cursor IDE.
Overview
Cursor rules are instructions that guide AI behavior in Cursor IDE. Rules use the MDC format (
.mdc) with YAML frontmatter and markdown content, stored in .cursor/rules/ directories.
Key capabilities:
- Define project-specific coding standards and patterns
- Auto-attach context based on file patterns
- Create reusable instruction components
- Control when and how rules are applied
Context: All Cursor rules guidance in this skill applies to
.mdc files only, not .cursorrules (deprecated) or AGENTS.md files.
When to Use This Skill
Use this skill when:
- Creating new Cursor rule files for project standards
- Editing existing rules to improve clarity or effectiveness
- Deciding which rule type to use (Always, Auto Attached, Agent Requested, Manual)
- Structuring rule content for optimal AI comprehension
- Applying AI instruction writing best practices to Cursor rules
MDC File Format
Cursor rules use MDC format combining YAML frontmatter with markdown content.
Structure
--- description: Brief explanation of rule's purpose globs: ["**/*.ts", "**/*.tsx"] alwaysApply: false --- # Rule Content Markdown instructions for the AI...
Frontmatter Options
(string, required for Agent Requested rules)description
- Explains the rule's purpose
- Used by AI to decide if rule is relevant
- Keep concise (1-2 sentences)
description: TypeScript coding standards including type safety and error handling patterns
(array of strings, optional)globs
- File patterns that trigger auto-attachment
- Uses standard glob syntax
- Applied when matching files are referenced in chat
globs: ["**/*.ts", "**/*.tsx"] # TypeScript files globs: ["src/api/**/*"] # API directory globs: ["**/*.test.ts"] # Test files
(boolean, default: false)alwaysApply
: Rule always included in model contexttrue
: Rule applied based on type and conditionsfalse
alwaysApply: true # For critical standards that always apply alwaysApply: false # For context-specific guidance
Rule Types
Cursor provides four rule types controlling when rules are applied. Choose the type based on how broadly the rule should apply.
Always
When to use: Critical standards that apply to all AI interactions in the project.
Configuration:
--- description: Core coding standards alwaysApply: true ---
Characteristics:
- Permanently included in model context
- Use sparingly (impacts token budget)
- Best for: Project-wide standards, critical constraints, fundamental patterns
Example use cases:
- "Never commit secrets or credentials"
- "All functions must have TypeScript return types"
- "Follow company security review process before external API calls"
Auto Attached
When to use: Context-specific guidance that applies when working with certain file types or directories.
Configuration:
--- description: React component patterns globs: ["**/*.tsx", "src/components/**/*"] alwaysApply: false ---
Characteristics:
- Applied when glob patterns match referenced files
- Token-efficient (only loads when relevant)
- Best for: File-type standards, directory-specific patterns, framework conventions
Example use cases:
- React component patterns (attached for
files).tsx - API endpoint standards (attached for
)src/api/**/* - Test conventions (attached for
files)*.test.ts
Agent Requested
When to use: Guidance that AI should evaluate for relevance based on the task.
Configuration:
--- description: Database migration patterns for PostgreSQL schema changes alwaysApply: false --- # Note: No globs - AI decides based on description
Characteristics:
- AI determines if rule is relevant to current task
- Requires descriptive
fielddescription - Best for: Specialized workflows, domain-specific patterns, optional guidance
Example use cases:
- "Database migration patterns for PostgreSQL"
- "Performance optimization techniques for React"
- "Accessibility guidelines for web components"
Manual
When to use: On-demand guidance invoked explicitly in chat.
Configuration:
--- description: Debugging workflow for production issues alwaysApply: false --- # Note: No globs - invoked with @ruleName
Characteristics:
- Invoked explicitly using
in chat@ruleName - Full control over when rule applies
- Best for: Workflows, checklists, specialized procedures
Example use cases:
- "@deploy-checklist" - Pre-deployment verification
- "@debug-production" - Production debugging workflow
- "@refactor-guide" - Code refactoring procedures
Usage:
@debug-production help me investigate the API timeout issue
Writing Effective Rules
Apply AI instruction writing best practices to create clear, actionable Cursor rules.
Core Principles
Keep rules under 500 lines
- Cursor's recommendation for optimal performance
- Decompose large rules into focused, composable components
- Split by domain (e.g., separate rules for testing, API, UI patterns)
Be specific and actionable
- Provide concrete patterns and examples
- Avoid vague guidance like "write good code"
- Include code snippets showing expected patterns
Use progressive disclosure
- Structure: Overview → Core patterns → Detailed guidance → Examples
- Front-load essential information
- Layer complexity for detailed edge cases
Include concrete examples
- Show input/output pairs for patterns
- Use
syntax to reference existing project files@filename.ts - Demonstrate both correct and incorrect approaches
Writing Style
Imperative/infinitive form (verb-first), not second person:
✓ Good: "Validate input before API requests" ✗ Bad: "You should validate input before you make API requests"
Consistent terminology:
✓ Good: Always use "component" for React components ✗ Bad: Mix "component", "element", "widget" interchangeably
Objective, instructional language:
✓ Good: "Return explicit error types rather than throwing exceptions" ✗ Bad: "Hey, try to return errors instead of throwing them if possible"
Using XML Tags in Rules
XML tags help structure complex rules for clearer parsing. Use them for:
Multiple examples requiring distinction:
<example type="valid"> const result = await fetchData(); if (!result) { return { error: "Not found" }; } return result; </example> <example type="invalid"> // Don't assume success return (await fetchData()).data; </example>
Separating context from instructions:
<context> This project uses Zod for runtime validation with React Query for data fetching. </context> <instructions> When creating API clients: 1. Define Zod schema for response 2. Create React Query hook using the schema 3. Export both for component consumption </instructions>
Defining templates:
<template> export const use[EntityName] = () => { return useQuery({ queryKey: ['[entity]'], queryFn: async () => { const response = await fetch('/api/[endpoint]'); return [Schema].parse(await response.json()); } }); }; </template>
Skip XML tags when markdown structure is sufficient for simple content.
Reference Project Files
Use
@filename syntax to reference existing project files as examples:
## Component Patterns Follow the patterns in @src/components/Button.tsx for all interactive components: - Props interface with TypeScript - Forwarded refs for accessibility - Consistent event handler naming
This grounds the AI in actual project code rather than abstract descriptions.
Common Patterns
Project-Wide Standards (Always)
Purpose: Critical standards applying to all code.
--- description: TypeScript and code quality standards alwaysApply: true --- # Code Standards ## Type Safety - All functions must have explicit return types - No `any` types without justification comment - Use discriminated unions for complex state ## Error Handling - Return Result<T, E> types for operations that can fail - Never silently catch and ignore errors - Log errors with context before re-throwing ## Testing - All exported functions must have unit tests - Integration tests for all API endpoints - Minimum 80% code coverage
Framework Patterns (Auto Attached)
Purpose: File-type or directory-specific conventions.
--- description: React component patterns and conventions globs: ["**/*.tsx", "src/components/**/*"] alwaysApply: false --- # React Component Standards ## Component Structure <template> interface [ComponentName]Props { // Props definition } export const [ComponentName] = forwardRef< HTMLElement, [ComponentName]Props >((props, ref) => { // Implementation }); [ComponentName].displayName = '[ComponentName]'; </template> ## Examples <example type="valid"> // Interactive component with forwarded ref interface ButtonProps { onClick: () => void; children: React.ReactNode; } export const Button = forwardRef<HTMLButtonElement, ButtonProps>( ({ onClick, children }, ref) => ( <button ref={ref} onClick={onClick}> {children} </button> ) ); Button.displayName = 'Button'; </example> <example type="invalid"> // Missing ref forwarding and display name export const Button = ({ onClick, children }) => ( <button onClick={onClick}>{children}</button> ); </example>
Workflow Procedures (Manual)
Purpose: Step-by-step procedures invoked on-demand.
--- description: Pre-deployment verification checklist alwaysApply: false --- # Deployment Checklist Invoke with: @deploy-checklist ## Pre-Deployment Verification ### 1. Code Quality - [ ] All tests passing (`npm run test`) - [ ] No TypeScript errors (`npm run type-check`) - [ ] Linter passing (`npm run lint`) - [ ] No console.log or debugger statements **Validation:** Check CI pipeline status ### 2. Security Review - [ ] No hardcoded secrets or API keys - [ ] Environment variables properly configured - [ ] Dependencies updated (no critical vulnerabilities) **Validation:** Run `npm audit` and review results ### 3. Database Migrations - [ ] Migrations tested locally - [ ] Rollback plan documented - [ ] Backup completed **Validation:** Verify migration scripts in `db/migrations/` ### 4. Deployment Follow standard deployment process: 1. Deploy to staging 2. Run smoke tests 3. Get approval from lead 4. Deploy to production 5. Monitor for 15 minutes
Specialized Guidance (Agent Requested)
Purpose: Domain-specific patterns AI loads when relevant.
--- description: Performance optimization patterns for React applications alwaysApply: false --- # React Performance Optimization ## When to Optimize Optimize when: - Components re-render unnecessarily (use React DevTools Profiler) - User interactions feel laggy (>100ms response) - Large lists without virtualization ## Optimization Techniques ### Memoization <instructions> Use `useMemo` for expensive computations: - Complex filtering/sorting operations - Derived state calculations - Object/array creation in render </instructions> <example type="valid"> const filteredItems = useMemo( () => items.filter(item => item.category === selectedCategory), [items, selectedCategory] ); </example> <example type="invalid"> // Recreates array on every render const filteredItems = items.filter(item => item.category === selectedCategory ); </example> ### Component Memoization <instructions> Use `React.memo` for expensive presentational components: - Complex rendering logic - Large component trees - Components receiving stable props </instructions> Refer to @src/components/DataTable.tsx for production example.
Anti-Patterns to Avoid
❌ Vague, high-level guidance
✗ Bad: "Write clean, maintainable code following best practices" ✓ Good: "Extract functions exceeding 50 lines into smaller units with single responsibilities"
❌ Overly broad Always rules
✗ Bad: 500-line rule with alwaysApply: true covering all coding standards ✓ Good: Focused 100-line rule for critical standards + separate Auto Attached rules for context-specific patterns
❌ Missing concrete examples
✗ Bad: "Use proper error handling" ✓ Good: Show specific error handling pattern with code example
❌ Inconsistent terminology
✗ Bad: Mix "API endpoint", "route", "path", "URL" for same concept ✓ Good: Choose "API endpoint" and use consistently
❌ Conversational language
✗ Bad: "Hey, when you're working with APIs, make sure you handle errors properly, okay?" ✓ Good: "Handle API errors by returning Result<T, Error> types"
❌ Temporal references
✗ Bad: "Use the new authentication system" or "Recently refactored to async/await" ✓ Good: "Use OAuth 2.0 authentication" (evergreen, specific)
❌ No glob patterns for context-specific rules
✗ Bad: React-specific rule without globs (always loads unnecessarily) ✓ Good: React rule with globs: ["**/*.tsx"] (loads only when relevant)
Quality Checklist
Before finalizing a Cursor rule:
Format & Structure:
- Uses
format with YAML frontmatter.mdc - Saved in
directory.cursor/rules/ - Frontmatter includes required fields for rule type
- Rule under 500 lines (decompose if longer)
Rule Type Configuration:
- Appropriate rule type chosen (Always/Auto Attached/Agent Requested/Manual)
-
only for critical project-wide standardsalwaysApply: true -
configured for Auto Attached rulesglobs -
clear and specific for Agent Requested rulesdescription
Content Quality:
- Imperative/infinitive form (not second person)
- Consistent terminology throughout
- Concrete examples with code snippets
- References to project files using
syntax@filename - Progressive disclosure (overview → details)
Specificity:
- Actionable patterns, not vague guidance
- Specific constraints and requirements
- No temporal references ("new", "old", "recently")
- Clear anti-patterns identified
Token Efficiency:
- Large rules decomposed into focused components
- Auto Attached rules use appropriate globs
- Always rules limited to essential standards
- No redundant information
Example: Complete Rule File
Comprehensive example showing best practices:
--- description: API client patterns using Zod schemas and React Query hooks globs: ["src/api/**/*", "**/*-client.ts"] alwaysApply: false --- # API Client Patterns ## Overview This project separates API clients (Zod schemas + React Query hooks) from UI components. **Pattern:** Schema definition → Client function → React Query hook → Component consumption ## Client Structure <template> // 1. Define Zod schema const [Entity]Schema = z.object({ id: z.string(), // ... fields }); type [Entity] = z.infer<typeof [Entity]Schema>; // 2. Create client function async function fetch[Entity](id: string): Promise<[Entity]> { const response = await fetch(`/api/[entity]/${id}`); return [Entity]Schema.parse(await response.json()); } // 3. Create React Query hook export function use[Entity](id: string) { return useQuery({ queryKey: ['[entity]', id], queryFn: () => fetch[Entity](id), }); } </template> ## Error Handling <instructions> All client functions must handle errors consistently: 1. Parse responses with Zod (throws on invalid data) 2. Catch network errors and re-throw with context 3. React Query handles loading/error states </instructions> <example type="valid"> async function fetchUser(id: string): Promise<User> { try { const response = await fetch(`/api/users/${id}`); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const data = await response.json(); return UserSchema.parse(data); } catch (error) { console.error('Failed to fetch user:', { id, error }); throw error; } } </example> <example type="invalid"> // Missing error context and response validation async function fetchUser(id: string): Promise<User> { const response = await fetch(`/api/users/${id}`); return UserSchema.parse(await response.json()); } </example> ## Reference Implementation See @src/api/user-client.ts for production example implementing this pattern. ## Validation Before completing API client: - [ ] Zod schema covers all response fields - [ ] Client function includes error handling - [ ] React Query hook properly configured - [ ] Types exported for component consumption
Remember: Effective Cursor rules are specific, actionable, and scoped appropriately. When in doubt, create focused rules with Auto Attached globs rather than broad Always rules.