Guide: Creating Cursor Rules¶
Step-by-step guide for creating new Cursor rules for the Tux project.
Quick Start¶
- Choose Domain - Select appropriate domain directory
- Copy Template - Use
.cursor/templates/rule-template.mdc - Fill Content - Add project-specific patterns
- Validate - Ensure file meets standards
- Test - Verify rule applies correctly
Detailed Steps¶
Step 1: Choose Domain¶
Select the domain that best fits your rule:
core/- Core project rules (tech stack, dependencies)database/- Database patterns (models, migrations, controllers)modules/- Discord bot modules (cogs, commands, events)testing/- Testing patterns (pytest, fixtures, markers)docs/- Documentation rules (Zensical, writing standards)security/- Security patterns (secrets, validation)error-handling/- Error handling (logging, Sentry)ui/- UI components (Discord Components V2)meta/- System documentation (specifications)
Step 2: Create File¶
- Navigate to appropriate domain directory
- Create new
.mdcfile with kebab-case name - Example:
database/models.mdc
Step 3: Add Metadata¶
Copy and customize frontmatter:
YAML
---
description: Brief description (60-120 chars) with domain keywords
globs: src/tux/database/**/*.py # Optional, comma-separated for file-scoped
alwaysApply: false # true for always-apply rules
---
Metadata Guidelines:
- description: Include domain keywords, be specific
- globs: Use comma-separated file patterns for file-scoped rules (no quotes, no brackets)
- alwaysApply: Only true for project-wide standards
Step 4: Write Content¶
Follow this structure:
- Title (H1) - Clear, descriptive
- Overview - Purpose and scope
- Patterns - ✅ GOOD / ❌ BAD examples
- Best Practices - Key guidelines
- Anti-Patterns - What to avoid
- Examples - Detailed examples (optional)
- See Also - Cross-references
Step 5: Add Examples¶
Include working code examples:
Python
# ✅ GOOD: Show correct pattern
from tux.database.models import BaseModel
class MyModel(BaseModel, table=True):
"""Model description."""
id: int = Field(primary_key=True)
Python
# ❌ BAD: Show anti-pattern
class MyModel: # Missing BaseModel
id: int # Missing Field definition
Step 6: Add Cross-References¶
Link to related rules:
Markdown
## See Also
- @database/migrations.mdc - Migration patterns
- @database/controllers.mdc - Controller patterns
- @AGENTS.md - General coding standards
Step 7: Validate¶
Check:
- File under 500 lines
- Includes code examples
- Includes anti-patterns
- Has proper metadata
- Cross-references complete
- Project-specific (not generic)
Example: Creating a Database Rule¶
- Domain:
database/ - File:
database/models.mdc - Metadata:
YAML
description: SQLModel database model patterns for Tux
globs: src/tux/database/models/**/*.py
alwaysApply: false
- Content: Add patterns, examples, anti-patterns
- Cross-references: Link to migrations, controllers rules
Common Patterns¶
File-Scoped Rule¶
YAML
---
description: Patterns for specific file type
globs: src/tux/modules/**/*.py
alwaysApply: false
---
Always-Apply Rule¶
YAML
---
description: Project-wide standard
alwaysApply: true
---
Intelligent Rule¶
YAML
---
description: Domain-specific patterns with keywords
alwaysApply: false
---
Best Practices¶
- Be Specific - Tailor to Tux project, not generic
- Include Examples - Show working code
- Show Anti-Patterns - What NOT to do
- Cross-Reference - Link to related rules
- Keep Focused - One domain/concern per rule
- Stay Current - Update when patterns change
Templates¶
Complete Rule Template¶
Markdown
---
description: Brief description (60-120 chars) with domain keywords
globs: optional/file/pattern, another/pattern
alwaysApply: false
---
# Rule Title
## Overview
Brief description of the rule's purpose and scope.
## Patterns
✅ **GOOD:** Example of correct pattern
```python
# Code example
❌ BAD: Example of anti-pattern
Python
# Code example
Best Practices¶
- Practice 1
- Practice 2
Anti-Patterns¶
- ❌ Anti-pattern 1
- ❌ Anti-pattern 2
See Also¶
- @related-rule.mdc
- @AGENTS.md
Standards¶
Naming¶
- Rules: kebab-case, descriptive (e.g.,
database-models.mdc) - Location:
.cursor/rules/{domain}/ - Format:
.mdcfiles with YAML frontmatter
Content Requirements¶
- Project-specific: Tailored to Tux, not generic
- Examples: Include working code examples
- Anti-patterns: Show what NOT to do
- Cross-references: Link to related rules/commands
Quality Standards¶
- Clear, actionable content
- Consistent formatting
- File under 500 lines
- Proper metadata format
Validation¶
Run validation before committing:
Bash
uv run rules validate
This checks:
- Frontmatter format
- Description length (60-120 chars)
- Content requirements (examples, anti-patterns)
- Globs format (comma-separated, no quotes/brackets)
- File structure
Maintenance¶
Updating Rules¶
- Keep content current with code changes
- Update examples when patterns change
- Add new anti-patterns as discovered
- Update cross-references when structure changes
Review Process¶
- Review rules during code reviews
- Update when project patterns change
- Remove obsolete rules
- Consolidate duplicate content
See Also¶
- Rule Template
- Creating Cursor Commands - Guide for creating commands
- meta/cursor-rules.mdc - Rules specification