Awesome-omni-skill create-rule
Create rules files for file-scoped AI instructions. Interactive wizard for .claude/rules/ or .cursor/rules/ files with proper frontmatter.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/frontend/create-rule" ~/.claude/skills/diegosouzapw-awesome-omni-skill-create-rule-0aa925 && rm -rf "$T"
skills/frontend/create-rule/SKILL.mdCreate Rule File
Purpose
Rules files provide file-scoped AI instructions that automatically activate when you read, write, or edit files matching specific patterns. This wizard guides users through creating properly formatted rule files.
How Rules Work
- Rule files live in
or.claude/rules/
directories.cursor/rules/ - Each rule file has YAML frontmatter specifying which files trigger it
- When you touch a matching file, the rule content is injected into context
- The AI then follows those instructions for that specific file
Wizard Process
Follow these steps in order, asking one question at a time using the
askquestion tool. Wait for the user's response before proceeding to the next step.
Step 1: Rule Location
Ask where the rule should be saved:
Use askquestion with these options: - .claude/rules/ (project) - "Project-specific rules in .claude/rules/" - .cursor/rules/ (project) - "Project-specific rules in .cursor/rules/ (Cursor compatibility)" - ~/.claude/rules/ (global) - "User-level rules that apply to all projects"
Store the chosen location for later.
Step 2: Rule Format
Ask which frontmatter format to use:
Use askquestion with these options: - claude (recommended) - "Claude Code format using 'paths:' field - simpler and official" - cursor - "Cursor format using 'globs:' array with optional 'description' field"
Claude Code format is recommended as it's the official format.
Step 3: File Patterns
Ask what files should trigger this rule. Offer common patterns:
Use askquestion with these options: - test - "Test files: **/*.test.ts, **/*.spec.ts" - api - "API files: src/api/**/*.ts, **/api/**/*.ts" - components - "Component files: src/components/**/*.tsx, **/*.component.ts" - docs - "Documentation: **/*.md, docs/**/*" - styles - "Style files: **/*.css, **/*.scss, **/*.styled.ts" - config - "Config files: *.config.ts, *.config.js, .env*" - custom - "Custom pattern (I'll type my own)"
If user selects "custom", ask them to type the glob pattern(s).
Important: After getting patterns, ask if they want to add more patterns. Keep asking until they say no. Collect all patterns into an array.
Step 4: Rule Name
Suggest a filename based on the patterns chosen, or let user provide custom name:
Use askquestion with options like: - testing.md (if test patterns) - api-guidelines.md (if API patterns) - component-rules.md (if component patterns) - code-style.md (general) - custom - "Custom name (I'll type my own)"
Ensure the name ends with
.md.
Step 5: Rule Type
Ask what kind of instructions this rule should contain:
Use askquestion with these options: - code-style - "Code style & formatting conventions" - testing - "Testing patterns, frameworks, and best practices" - security - "Security requirements and vulnerability prevention" - performance - "Performance optimization guidelines" - documentation - "Documentation and comment requirements" - architecture - "Architecture patterns and design principles" - error-handling - "Error handling and logging practices" - accessibility - "Accessibility (a11y) requirements" - custom - "Custom (I'll describe what I need)"
Step 6: Rule Details
Based on the rule type selected, ask follow-up questions to gather specifics:
For code-style:
- Indentation preference (spaces/tabs, size)
- Quote style (single/double)
- Naming conventions
- Import ordering
For testing:
- Testing framework (vitest, jest, pytest, etc.)
- Testing patterns (AAA, BDD, etc.)
- Coverage requirements
- Mocking preferences
For security:
- Input validation requirements
- Authentication/authorization patterns
- Sensitive data handling
- Specific vulnerabilities to prevent
For performance:
- Optimization targets (bundle size, runtime, memory)
- Caching strategies
- Lazy loading requirements
For documentation:
- Comment style (JSDoc, docstrings, etc.)
- Required sections
- Example requirements
For architecture:
- Design patterns to follow
- Layer boundaries
- Dependency rules
For error-handling:
- Error types to use
- Logging requirements
- Recovery strategies
For accessibility:
- WCAG level target
- Specific requirements (keyboard nav, screen readers, etc.)
For custom:
- Ask user to describe what instructions they need
Use
askquestion for structured choices or let user type freely for open-ended details.
Step 7: Generate & Write
Now generate the rule file:
-
Construct the frontmatter based on format choice:
Claude Code format:
--- paths: pattern1, pattern2, pattern3 ---Cursor format:
--- globs: ["pattern1", "pattern2", "pattern3"] description: "<brief description based on rule type>" --- -
Generate rule content based on type and details gathered. Write clear, actionable instructions.
-
Create the directory if it doesn't exist:
mkdir -p <chosen-location> -
Write the file using the Write tool.
-
Confirm success by showing the user:
- The full path of the created file
- The complete file contents
- A reminder that the rule will activate when they touch matching files
Frontmatter Reference
Claude Code Format (Recommended)
--- paths: **/*.test.ts, **/*.spec.ts --- Your rule content here...
- Uses
field with comma-separated patternspaths: - Simpler syntax, official Claude Code format
- No additional fields
Cursor Format
--- globs: ["**/*.test.ts", "**/*.spec.ts"] description: "Testing guidelines for all test files" --- Your rule content here...
- Uses
field with JSON arrayglobs: - Optional
field for documentationdescription: - More verbose but allows description
Example Generated Rules
Testing Rule (Claude Code format)
--- paths: **/*.test.ts, **/*.spec.ts, tests/**/* --- # Testing Guidelines When writing or modifying tests: 1. **Framework**: Use Vitest for all tests 2. **Pattern**: Follow AAA (Arrange, Act, Assert) pattern 3. **Naming**: Use descriptive names: "should [action] when [condition]" 4. **Isolation**: Mock external dependencies, never call real APIs 5. **Coverage**: Include edge cases - empty inputs, null values, boundaries 6. **Assertions**: One primary assertion per test when possible
API Security Rule (Cursor format)
--- globs: ["src/api/**/*.ts", "**/routes/**/*.ts", "**/controllers/**/*.ts"] description: "Security requirements for API endpoints" --- # API Security Requirements All API endpoints must: 1. **Input Validation**: Validate all inputs with Zod schemas 2. **Authentication**: Verify JWT tokens before processing 3. **Authorization**: Check user permissions for the resource 4. **Rate Limiting**: Apply rate limits to prevent abuse 5. **Error Handling**: Never expose internal errors to clients 6. **Logging**: Log all requests with correlation IDs (no sensitive data)
Component Accessibility Rule
--- paths: src/components/**/*.tsx, **/*.component.tsx --- # Accessibility Requirements All components must meet WCAG 2.1 AA: 1. **Keyboard Navigation**: All interactive elements must be keyboard accessible 2. **Focus Management**: Visible focus indicators, logical tab order 3. **ARIA Labels**: Provide aria-label for icon-only buttons 4. **Color Contrast**: Minimum 4.5:1 for normal text, 3:1 for large text 5. **Screen Readers**: Test with VoiceOver/NVDA, use semantic HTML 6. **Motion**: Respect prefers-reduced-motion for animations
Glob Pattern Reference
| Pattern | Matches |
|---|---|
| All .ts files at any depth |
| All .ts files under src/ |
| Config files in root only |
| Both .ts and .tsx files |
| All files under tests/ |
| Exclude test files (negation) |
After Creation
Remind the user:
- The rule is now active for matching files
- They can edit the rule anytime to refine instructions
- Rules from closer directories take precedence over parent directories
- They can create multiple rules for different file patterns