Guides
Cursor Rules Guide
Understand modern Cursor rules (.mdc), including project and user rules, metadata, and best practices.
Cursor Rules Guide
Overview
Cursor Rules let you encode your team’s knowledge and preferences so the AI consistently follows your standards. Use them to align generated code with your architecture, coding style, libraries, and workflow.
Why use Cursor Rules
- Consistent outputs across the codebase
- Faster onboarding for new contributors
- Less rework and fewer review cycles
- Safer automation for repetitive tasks
Rule types
- Project Rules: Version-controlled, live in
.cursor/rules, scoped to a single repository. - User Rules: Global preferences configured in Cursor settings; apply to all projects.
- Note: The legacy
.cursorrulesfile is still supported but deprecated. Prefer Project Rules.
Setup (Project Rules)
- Create a
.cursor/rulesdirectory in your project root. - Add one rule per file using the
.mdcextension. - Each rule contains metadata (frontmatter) and rule content.
Example .mdc file:
---
description: Optional description for Agent Requested rules
globs: ["optional/glob/pattern/**", "*.py"]
alwaysApply: false
---
# Rule content
- Prefer this library/pattern when building feature X
- Avoid anti-pattern Y
- Reference for context: @path/to/important/file.tsHow rules are applied (metadata → behavior)
- Always:
alwaysApply: true— always included in the model context for the project. - Auto Attached:
globs: ["pattern"]— included only when files matching the globs are in context. - Agent Requested:
description: "..."— the AI may fetch the rule when relevant. - Manual: No special metadata — include explicitly in chat with
@ruleName.
Working with rules
- Create via Command Palette: New Cursor Rule
- Generate from chat:
/Generate Cursor Rulesconverts a refined chat into a rule - Keep files focused and small; split large topics into multiple rules
- Use descriptive names and organize by domain (e.g.,
react.mdc,django.mdc,docker.mdc)
Best practices
- Be specific and actionable; avoid vague guidance
- Keep them concise; aim for clarity over completeness
- Show small examples and reference key files with
@path/to/file - Decompose complex standards into smaller rules
- Iterate based on AI performance and review feedback
Examples (concise)
Django best practices (django.mdc)
---
description: Django models, views, templates, ORM usage
globs: ["*.py"]
---
# Django Guidelines
- Follow PEP 8 and Django style guides
- Use CBVs for common patterns; FBVs for custom logic
- Optimize queries with select_related/prefetch_related
- Validate with ModelForm and `clean()` methodsDockerfile best practices (docker.mdc)
---
description: Efficient and secure Dockerfiles
globs: ["Dockerfile", "*.Dockerfile"]
---
# Dockerfile Guidelines
- Use minimal, pinned base images
- Prefer multi-stage builds; leverage cache
- Run as non-root; minimize packages
- Use COPY over ADD unless necessaryPython Black formatting (black.mdc)
---
description: Enforce Black formatting
globs: ["*.py"]
---
# Black Rules
- Use default 88 char line length
- Ensure CI checks with `black --check .`React best practices (react.mdc)
---
description: Modern React guidelines
globs: ["*.js", "*.jsx", "*.ts", "*.tsx"]
---
# React Guidelines
- Prefer function components + Hooks
- Co-locate by feature; use clear prop types/interfaces
- Use `useEffect` with explicit dependencies; memoize when neededUser Rules: global preferences
Set in Cursor Settings → Rules → User Rules (plain text). Examples:
- Always import React explicitly:
import React from 'react' - Respond concisely; avoid filler
- Prefer functional components over classes
FAQs
- Is
.cursorrulesdeprecated? Yes, prefer.cursor/rules/*.mdc. - Can I combine metadata? Yes; e.g., include
globsand adescription. - How big should a rule be? Keep it focused; split beyond ~500 lines.
Next steps
- Start with a small set of high-impact rules (e.g., review guidelines, API patterns)
- Iterate after a sprint based on friction you notice
- Promote stable rules to “Always” when they prove universally helpful