Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create Cursor rules for persistent AI guidance. Use when you want to create a rule, add coding standards, set up project conventions, configure file-specific patterns, create RULE.md files, or asks about .cursor/rules/ or AGENTS.md.
.claude/skills/kunanonj-cursor-create-rule/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 4% | 0% |
Create project rules in .cursor/rules/ to provide persistent context for the AI agent.
Before creating a rule, determine:
If you have previous conversation context, infer rules from what was discussed. You can create multiple rules if the conversation covers distinct topics or patterns.
If the user hasn't specified scope, ask:
If they mentioned specific files and haven't provided concrete patterns, ask:
**/*.ts, backend/**/*.py)Rules are .mdc files in .cursor/rules/ with YAML frontmatter:
.cursor/rules/
typescript-standards.mdc
react-patterns.mdc
api-conventions.mdcmarkdown--- description: Brief description of what this rule does globs: **/*.ts # File pattern for file-specific rules alwaysApply: false # Set to true if rule should always apply --- # Rule Title Your rule content here...
| Field | Type | Description | |-------|------|-------------| | description | string | What the rule does (shown in rule picker) | | globs | string | File pattern - rule applies when matching files are open | | alwaysApply | boolean | If true, applies to every session |
For universal standards that should apply to every conversation:
yaml--- description: Core coding standards for the project alwaysApply: true ---
For rules that apply when working with certain file types:
yaml--- description: TypeScript conventions for this project globs: **/*.ts alwaysApply: false ---
markdown--- description: TypeScript coding standards globs: **/*.ts alwaysApply: false --- # Error Handling \`\`\`typescript // BAD try { await fetchData(); } catch (e) {} // GOOD try { await fetchData(); } catch (e) { logger.error('Failed to fetch', { error: e }); throw new DataFetchError('Unable to retrieve data', { cause: e }); } \`\`\`
markdown--- description: React component patterns globs: **/*.tsx alwaysApply: false --- # React Patterns - Use functional components - Extract custom hooks for reusable logic - Colocate styles with components
.mdc format in .cursor/rules/| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 8,065 | 5,052 | -37% | 1 | 1 | 0% | 1,512 | 1,830 | +21% | 0 | 0 | — |
case-02 | fail→pass | 9,130 | 4,218 | -54% | 1 | 1 | 0% | 1,755 | 1,460 | -17% | 0 | 0 | — |
case-03 | fail→pass | 9,720 | 6,497 | -33% | 1 | 1 | 0% | 1,793 | 1,939 | +8% | 0 | 0 | — |
case-04 | fail→pass | 11,622 | 4,920 | -58% | 1 | 1 | 0% | 2,096 | 1,675 | -20% | 0 | 0 | — |
case-05 | fail→pass | 11,704 | 5,492 | -53% | 1 | 1 | 0% | 2,307 | 1,919 | -17% | 0 | 0 | — |
case-06 | fail→fail | 11,505 | 6,377 | -45% | 1 | 1 | 0% | 2,145 | 2,070 | -3% | 0 | 0 | — |
case-07 | pass→pass | 4,067 | 3,422 | -16% | 1 | 1 | 0% | 778 | 1,429 | +84% | 0 | 0 | — |
case-08 | pass→pass | 5,136 | 3,436 | -33% | 1 | 1 | 0% | 1,020 | 1,467 | +44% | 0 | 0 | — |
case-09 | pass→pass | 5,692 | 3,803 | -33% | 1 | 1 | 0% | 938 | 1,558 | +66% | 0 | 0 | — |
case-10 | pass→pass | 4,328 | 3,812 | -12% | 1 | 1 | 0% | 893 | 1,551 | +74% | 0 | 0 | — |
case-11 | pass→pass | 10,386 | 5,498 | -47% | 1 | 1 | 0% | 1,762 | 1,793 | +2% | 0 | 0 | — |
case-12 | pass→pass | 5,034 | 1,451 | -71% | 1 | 1 | 0% | 1,003 | 1,018 | +1% | 0 | 0 | — |
case-13 | pass→pass | 8,425 | 2,138 | -75% | 1 | 1 | 0% | 1,606 | 1,174 | -27% | 0 | 0 | — |
case-14 | pass→pass | 13,345 | 6,711 | -50% | 1 | 1 | 0% | 2,435 | 1,903 | -22% | 0 | 0 | — |
case-15 | pass→pass | 14,374 | 8,554 | -40% | 1 | 1 | 0% | 2,684 | 2,528 | -6% | 0 | 0 | — |
case-16 | pass→pass | 8,328 | 3,648 | -56% | 1 | 1 | 0% | 1,559 | 1,460 | -6% | 0 | 0 | — |
case-17 | fail→pass | 7,854 | 4,845 | -38% | 1 | 1 | 0% | 1,770 | 1,842 | +4% | 0 | 0 | — |
case-18 | pass→pass | 10,474 | 3,940 | -62% | 1 | 1 | 0% | 2,026 | 1,588 | -22% | 0 | 0 | — |
case-19 | fail→pass | 11,058 | 4,165 | -62% | 1 | 1 | 0% | 1,988 | 1,529 | -23% | 0 | 0 | — |
case-20 | pass→pass | 7,095 | 6,447 | -9% | 1 | 1 | 0% | 1,366 | 2,010 | +47% | 0 | 0 | — |
case-21 | pass→pass | 8,707 | 6,126 | -30% | 1 | 1 | 0% | 1,793 | 1,865 | +4% | 0 | 0 | — |
case-22 | pass→pass | 5,565 | 4,088 | -27% | 1 | 1 | 0% | 1,092 | 1,534 | +40% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.