Awesome-omni-skill flow-engineer-rule
Guide for creating persistent AI rules (coding standards, project conventions, file-specific patterns). Use when users want to create a rule, add coding standards, set up project conventions, configure file-specific patterns, or ask about rules placement. Works across IDEs (Cursor, Claude Code, Antigravity, OpenAI Codex, OpenCode).
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/data-ai/flow-engineer-rule" ~/.claude/skills/diegosouzapw-awesome-omni-skill-flow-engineer-rule && rm -rf "$T"
skills/data-ai/flow-engineer-rule/SKILL.mdRule Creator
This skill guides through creating persistent rules — instructions that automatically apply to AI agent sessions, enforcing coding standards, project conventions, and file-specific patterns.
About Rules
Rules are markdown files with metadata that provide persistent context to AI agents. They differ from skills in that rules are automatically injected into every relevant session without explicit invocation.
Rules serve two purposes:
- Always-apply rules — universal standards for every conversation (coding style, architecture decisions, project conventions)
- Conditional rules — file-specific patterns triggered when matching files are open (TypeScript conventions for
, React patterns for*.ts
)*.tsx
IDE Detection and Rule Placement
Rules work across multiple IDEs but use different file formats and locations. Before creating a rule, determine the current environment.
Control Primitives Map by IDE
| Primitive | Scope | Claude Code | Antigravity | Cursor | OpenAI Codex | OpenCode |
|---|---|---|---|---|---|---|
| Persistent Instructions | User | | | - | <br> | <br> (fallback) |
| Project | <br> | | <br><br> | <br> | <br> (fallback)<br> | |
| Folder | <br> | - | | <br> | - | |
| Conditional Instructions | Project | | - | <br> | - | (globs) |
| Custom Commands | User | | | | | |
| Project | <br> | | | - | | |
| Event Hooks | User | | - | | - | |
| Project | <br> | - | | - | | |
| MCP Integration | User | <br> | - | | | |
| Project | | - | | - | | |
| Context Ignoring | User | | - | - | - | - |
| Project | - | | | | <br><br> |
Rule-Specific Paths
| IDE | Always-Apply Rules | Conditional Rules | Format |
|---|---|---|---|
| Cursor | with | with | YAML frontmatter + Markdown |
| Claude Code | , | with | YAML frontmatter + Markdown |
| Antigravity | | Not supported | Plain Markdown |
| OpenAI Codex | , | Not supported | Plain Markdown |
| OpenCode | , | (globs) | : Plain Markdown; : JSON array of paths/globs/URLs |
Detection Strategy
- Check for IDE-specific markers in the project:
directory -> Cursor.cursor/
directory -> Claude Code.claude/
directory or.opencode/
-> OpenCodeopencode.json
directory -> Antigravity.agent/
directory or.codex/
withoutAGENTS.md
-> OpenAI Codex.cursor/
- If multiple detected or none -> ask the user
- Ask: always-apply or conditional (file-specific)?
Gather Requirements
Before creating a rule, determine:
- Purpose: What should this rule enforce or teach?
- Scope: Always apply, or only for specific files?
- File patterns: If conditional, which glob patterns? (e.g.,
,**/*.ts
)backend/**/*.py
Inferring from Context
If prior conversation context exists, infer rules from what was discussed. Create multiple rules if the conversation covers distinct topics. Don't ask redundant questions if context provides answers.
Required Questions
If scope not specified:
- "Should this rule always apply, or only when working with specific files?"
If file-specific but no concrete patterns:
- "Which file patterns should this rule apply to?"
Rule Format by IDE
Cursor
Directory-based rules in
.cursor/rules/<rule-name>/RULE.md:
--- description: Brief description of what this rule does globs: "**/*.ts" alwaysApply: false --- # Rule Title Rule content here...
Legacy format (
.cursor/rules/*.mdc) still works but is deprecated. Prefer directory format.
| Field | Type | Description |
|---|---|---|
| string | What the rule does (used for agent discovery when ) |
| string | File pattern — rule applies when matching files are in context |
| boolean | If , applies to every session regardless of files |
Claude Code
Rules in
.claude/rules/*.md with frontmatter:
--- description: TypeScript conventions paths: src/**/*.ts --- # Rule Title Rule content here...
Or project-wide in
CLAUDE.md (no frontmatter, always applies).
Antigravity
Rules in
.agent/rules/*.md (plain markdown, always apply):
# Rule Title Rule content here...
OpenAI Codex
Rules in
AGENTS.md or AGENTS.override.md (plain markdown, always apply):
# Rule Title Rule content here...
Subdirectory rules:
subdir/AGENTS.md applies when working in that directory.
OpenCode
Always-apply rules in
AGENTS.md (project root, plain markdown):
# Rule Title Rule content here...
Or via
opencode.json field instructions (array of paths, globs, or URLs):
{ "instructions": [ "AGENTS.md", ".cursor/rules/**/*.md", "https://example.com/standards.md" ] }
Global user rules:
~/.config/opencode/AGENTS.md. Falls back to ~/.claude/CLAUDE.md unless OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1.
Core Principles
Keep Rules Concise
- Under 50 lines preferred, max 500 lines
- One concern per rule: split large rules into focused pieces
- Actionable: write like clear internal docs
- Concrete examples: show good/bad patterns with code
Structure
Every rule should contain:
- Clear title — what aspect it covers
- Brief context — why this rule exists (1-2 sentences max)
- The rules themselves — concrete, actionable instructions
- Examples — good/bad code patterns when applicable
Naming
- Cursor: directory name =
(e.g.,kebab-case
)typescript-standards/RULE.md - Claude Code: filename =
(e.g.,kebab-case.md
)typescript-standards.md - Others: section heading in the shared file
Rule Creation Process
Phase 1: Discovery
- Determine IDE (auto-detect or ask)
- Determine scope (always-apply vs conditional)
- Determine file patterns if conditional
- Gather the actual standards/conventions to encode
Phase 2: Implementation
- Create the rule file in the correct location for the detected IDE
- Write frontmatter with appropriate fields
- Write concise, actionable rule content
- Include concrete code examples (good/bad patterns)
Phase 3: Verification
Run validation:
scripts/validate_rule.py <path/to/rule-file-or-directory>
Checklist:
- Correct file format for target IDE
- Frontmatter configured correctly (description, globs/paths, alwaysApply)
- Content under 500 lines (prefer under 50)
- Includes concrete examples
- One concern per rule
- No redundancy with existing rules
Common Rule Categories
| Category | Scope | Example Patterns |
|---|---|---|
| Coding standards | Always or per-language | Error handling, naming, imports |
| Architecture | Always | Layer boundaries, dependency rules |
| Framework patterns | File-specific | React components, API routes |
| Testing | File-specific | Test structure, mocking conventions |
| Documentation | File-specific | JSDoc format, comment standards |
| Security | Always | Auth patterns, input validation |
Example Rules
Error Handling (TypeScript)
--- description: TypeScript error handling standards globs: "**/*.ts" alwaysApply: false --- # Error Handling Always use typed errors with context: \`\`\`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 }); } \`\`\`
React Patterns
--- description: React component patterns globs: "**/*.tsx" alwaysApply: false --- # React Patterns - Use functional components - Extract custom hooks for reusable logic - Colocate styles with components - Props interface named `{ComponentName}Props`
Project Architecture (Always Apply)
--- description: Core architecture rules alwaysApply: true --- # Architecture - Domain logic in `src/domain/` — no framework imports - API handlers in `src/api/` — thin, delegate to domain - Shared types in `src/types/` — no runtime code