who-to-bother-at-on-x / rules
Cursor rule93 starsChanged 11 months agoMITView on GitHub
Ultracite Rules - AI-Ready Formatter and Linter
We split this ultracite.mdc into the rules it gives an agent
47 rules. About 0 are common, 25 are distinctive, and 22 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈25
Distinctive · estimate
This author's own choices. Worth a look.
22
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
Write code that is accessible, performant, type-safe, and maintainable.
- Distinctive: line 27
Use explicit types for function parameters and return values when they enhance clarity
- Very specific: line 28
Prefer unknown over any when the type is genuinely unknown
- Very specific: line 29
Use const assertions (as const) for immutable values and literal types
- Distinctive: line 31
Use meaningful variable names instead of magic numbers - extract constants with descriptive names
- Distinctive: line 35
Use arrow functions for callbacks and short functions
- Very specific: line 36
Prefer for...of loops over .forEach() and indexed for loops
- Very specific: line 37
Use optional chaining (?.) and nullish coalescing (??) for safer property access
- Distinctive: line 38
Prefer template literals over string concatenation
- Distinctive: line 39
Use destructuring for object and array assignments
- Very specific: line 40
Use const by default, let only when reassignment is needed, never var
- Very specific: line 44
Always await promises in async functions - don't forget to use the return value
- Very specific: line 45
Use async/await syntax instead of promise chains for better readability
- Distinctive: line 47
Don't use async functions as Promise executors
- Distinctive: line 51
Use function components over class components
- Distinctive: line 52
Call hooks at the top level only, never conditionally
- Very specific: line 54
Use the key prop for elements in iterables (prefer unique IDs over array indices)
- Distinctive: line 56
Don't define components inside other components
- Distinctive: line 57
Use semantic HTML and ARIA attributes for accessibility:
- Distinctive: line 59
Use proper heading hierarchy
- Distinctive: line 60
Add labels for form inputs
- Very specific: line 62
Use semantic elements (<button>, <nav>, etc.) instead of divs with roles
- Very specific: line 66
Remove console.log, debugger, and alert statements from production code
- Very specific: line 68
Use try-catch blocks meaningfully - don't catch errors just to rethrow them
- Distinctive: line 69
Prefer early returns over nested conditionals for error cases
- Distinctive: line 73
Keep functions focused and under reasonable cognitive complexity limits
- Distinctive: line 75
Use early returns to reduce nesting
- Distinctive: line 76
Prefer simple conditionals over nested ternary operators
- Very specific: line 81
Add rel="noopener" when using target="_blank" on links
- Very specific: line 82
Avoid dangerouslySetInnerHTML unless absolutely necessary
- Very specific: line 83
Don't use eval() or assign directly to document.cookie
- Distinctive: line 88
Avoid spread syntax in accumulators within loops
- Distinctive: line 89
Use top-level regex literals instead of creating them in loops
- Distinctive: line 90
Prefer specific imports over namespace imports
- Distinctive: line 91
Avoid barrel files (index files that re-export everything)
- Very specific: line 92
Use proper image components (e.g., Next.js <Image>) over <img> tags
- Very specific: line 97
Use Next.js <Image> component for images
- Very specific: line 98
Use next/head or App Router metadata API for head elements
- Distinctive: line 99
Use Server Components for async data fetching instead of async Client Components
- Very specific: line 102
Use ref as a prop instead of React.forwardRef
- Very specific: line 105
Use class and for attributes (not className or htmlFor)
- Very specific: line 111
Write assertions inside it() or test() blocks
- Distinctive: line 112
Avoid done callbacks in async tests - use async/await instead
- Very specific: line 113
Don't use .only or .skip in committed code
- Very specific: line 114
Keep test suites reasonably flat - avoid excessive describe nesting
- Distinctive: line 121
Meaningful naming: - Use descriptive names for functions, variables, and types
- Distinctive: line 125
Documentation: - Add comments for complex logic, but prefer self-documenting code
≈ “Common” is an estimate: at least 1 in 5 of the 6,350 Cursor rule files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
---
description: Ultracite Rules - AI-Ready Formatter and Linter
globs: "**/*.{ts,tsx,js,jsx,json,jsonc,html,vue,svelte,astro,css,yaml,yml,graphql,gql,md,mdx,grit}"
alwaysApply: false
---
# Ultracite Code Standards
This project uses **Ultracite**, a zero-config Biome preset that enforces strict code quality standards through automated formatting and linting.
## Quick Reference
- **Format code**: `npx ultracite fix`
- **Check for issues**: `npx ultracite check`
- **Diagnose setup**: `npx ultracite doctor`
Biome (the underlying engine) provides extremely fast Rust-based linting and formatting. Most issues are automatically fixable.
---
## Core Principles
Write code that is **accessible, performant, type-safe, and maintainable**. Focus on clarity and explicit intent over brevity.
### Type Safety & Explicitness
- Use explicit types for function parameters and return values when they enhance clarity
- Prefer `unknown` over `any` when the type is genuinely unknown
- Use const assertions (`as const`) for immutable values and literal types
- Leverage TypeScript's type narrowing instead of type assertions
- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
### Modern JavaScript/TypeScript
- Use arrow functions for callbacks and short functions
- Prefer `for...of` loops over `.forEach()` and indexed `for` loops
- Use optional chaining (`?.`) and nullish coalescing (`??`) for safer property access
- Prefer template literals over string concatenation
- Use destructuring for object and array assignments
- Use `const` by default, `let` only when reassignment is needed, never `var`
### Async & Promises
- Always `await` promises in async functions - don't forget to use the return value
- Use `async/await` syntax instead of promise chains for better readability
- Handle errors appropriately in async code with try-catch blocks
- Don't use async functions as Promise executors
### React & JSX
- Use function components over class components
- Call hooks at the top level only, never conditionally
- Specify all dependencies in hook dependency arrays correctly
- Use the `key` prop for elements in iterables (prefer unique IDs over array indices)
- Nest children between opening and closing tags instead of passing as props
- Don't define components inside other components
- Use semantic HTML and ARIA attributes for accessibility:
- Provide meaningful alt text for images
- Use proper heading hierarchy
- Add labels for form inputs
- Include keyboard event handlers alongside mouse events
- Use semantic elements (`<button>`, `<nav>`, etc.) instead of divs with roles
### Error Handling & Debugging
- Remove `console.log`, `debugger`, and `alert` statements from production code
- Throw `Error` objects with descriptive messages, not strings or other values
- Use `try-catch` blocks meaningfully - don't catch errors just to rethrow them
- Prefer early returns over nested conditionals for error cases
### Code Organization
- Keep functions focused and under reasonable cognitive complexity limits
- Extract complex conditions into well-named boolean variables
- Use early returns to reduce nesting
- Prefer simple conditionals over nested ternary operators
- Group related code together and separate concerns
### Security
- Add `rel="noopener"` when using `target="_blank"` on links
- Avoid `dangerouslySetInnerHTML` unless absolutely necessary
- Don't use `eval()` or assign directly to `document.cookie`
- Validate and sanitize user input
### Performance
- Avoid spread syntax in accumulators within loops
- Use top-level regex literals instead of creating them in loops
- Prefer specific imports over namespace imports
- Avoid barrel files (index files that re-export everything)
- Use proper image components (e.g., Next.js `<Image>`) over `<img>` tags
### Framework-Specific Guidance
**Next.js:**
- Use Next.js `<Image>` component for images
- Use `next/head` or App Router metadata API for head elements
- Use Server Components for async data fetching instead of async Client Components
**React 19+:**
- Use ref as a prop instead of `React.forwardRef`
**Solid/Svelte/Vue/Qwik:**
- Use `class` and `for` attributes (not `className` or `htmlFor`)
---
## Testing
- Write assertions inside `it()` or `test()` blocks
- Avoid done callbacks in async tests - use async/await instead
- Don't use `.only` or `.skip` in committed code
- Keep test suites reasonably flat - avoid excessive `describe` nesting
## When Biome Can't Help
Biome's linter will catch most issues automatically. Focus your attention on:
1. **Business logic correctness** - Biome can't validate your algorithms
2. **Meaningful naming** - Use descriptive names for functions, variables, and types
3. **Architecture decisions** - Component structure, data flow, and API design
4. **Edge cases** - Handle boundary conditions and error states
5. **User experience** - Accessibility, performance, and usability considerations
6. **Documentation** - Add comments for complex logic, but prefer self-documenting code
---
Most formatting and common issues are automatically fixed by Biome. Run `npx ultracite fix` before committing to ensure compliance.
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Other versions10 projects use a version of this.
Word for word · 10
- vercel/streamdown★ 5.7k100% same
- TheOrcDev/8bitcn-ui★ 2.1k100% same
- vercel-labs/workflow-builder-template★ 1.2k100% same
- ChatbotXIO/ChatbotX★ 1.1k100% same
- TheOrcDev/better-auth-starter★ 354100% same
- vercel-labs/npm.bet★ 66100% same
- KeeperHub/keeperhub★ 25100% same
- kuluruvineeth/openbeam★ 19100% same
- vercel/workflow-builder-starter★ 8100% same
- vercel/academy-starters★ 0100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Where files are headingNew Cursor rule files have more rules about planning and tracking tasks, and fewer about code style.
Of the Cursor rule files we read, the 3,978 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository3 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

