Awesome-omni-skill ruler
Unified AI agent configuration propagation across 18+ coding assistants.
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/ai-agents/ruler" ~/.claude/skills/diegosouzapw-awesome-omni-skill-ruler && rm -rf "$T"
skills/ai-agents/ruler/SKILL.md- global npm install
ruler
Unified AI agent configuration propagation across 18+ coding assistants.
Repository: https://github.com/intellectronica/ruler Documentation: https://deepwiki.com/intellectronica/ruler
Overview
Ruler centralizes AI agent instructions in
.ruler/ and distributes them to all configured agents via ruler apply. Supports Model Context Protocol (MCP) propagation with merge/overwrite strategies.
.ruler/ ├── *.md # Rules (concatenated alphabetically) ├── ruler.toml # Agent config + MCP settings └── mcp.json # Shared MCP servers
Installation
npm install -g ruler # or npx ruler init
Commands
ruler init
Creates
.ruler/ directory with default files:
ruler init # Local project ruler init --global # ~/.config/ruler/
Creates:
- Central AI instructionsinstructions.md
- Configuration fileruler.toml
- MCP server definitionsmcp.json
ruler apply
Propagates rules to all configured agents:
ruler apply # All default agents ruler apply --agents claude,codex # Specific agents ruler apply --no-mcp # Skip MCP propagation ruler apply --mcp-overwrite # Replace native MCP configs ruler apply --no-gitignore # Skip .gitignore updates
ruler revert
Restores files from backups:
ruler revert # Restore all, delete backups ruler revert --keep-backups # Restore but keep .bak files
Supported Agents (18)
| Agent | Identifier | Instructions Output | MCP Config |
|---|---|---|---|
| GitHub Copilot | | | |
| Claude Code | | | |
| OpenAI Codex CLI | | | |
| Jules | | | - |
| Cursor | | | |
| Windsurf | | | |
| Cline | | | - |
| Amp | | | - |
| Aider | | + | |
| Firebase Studio | | | - |
| Open Hands | | | |
| Gemini CLI | | | |
| Junie | | | - |
| AugmentCode | | | |
| Kilo Code | | | |
| OpenCode | | | |
| Goose | | | - |
| Crush | | | |
Configuration: ruler.toml
Complete configuration reference:
# ═══════════════════════════════════════════════════════════════════ # DEFAULT AGENTS # ═══════════════════════════════════════════════════════════════════ # Agents to run when --agents flag is not specified # If omitted, all agents are active default_agents = ["copilot", "claude", "codex", "cursor", "amp"] # ═══════════════════════════════════════════════════════════════════ # GLOBAL MCP CONFIGURATION # ═══════════════════════════════════════════════════════════════════ [mcp] # Enable/disable MCP propagation globally (default: true) enabled = true # How to combine with native configs: "merge" or "overwrite" # merge: Union of servers, incoming takes precedence on conflicts # overwrite: Replace native config entirely merge_strategy = "merge" # ═══════════════════════════════════════════════════════════════════ # GITIGNORE CONFIGURATION # ═══════════════════════════════════════════════════════════════════ [gitignore] # Auto-add generated files to .gitignore (default: true) enabled = true # ═══════════════════════════════════════════════════════════════════ # AGENT-SPECIFIC CONFIGURATIONS # ═══════════════════════════════════════════════════════════════════ [agents.copilot] enabled = true output_path = ".github/copilot-instructions.md" [agents.claude] enabled = true output_path = "CLAUDE.md" [agents.codex] enabled = true output_path = "AGENTS.md" output_path_config = ".codex/config.toml" # Agent-specific MCP override [agents.codex.mcp] enabled = true merge_strategy = "merge" [agents.cursor] enabled = true output_path = ".cursor/rules/ruler_cursor_instructions.mdc" [agents.amp] enabled = true output_path = "AGENT.md" [agents.aider] enabled = true output_path_instructions = "ruler_aider_instructions.md" output_path_config = ".aider.conf.yml" [agents.windsurf] enabled = false # Disable specific agent [agents.opencode] enabled = true output_path = "AGENTS.md" [agents.gemini-cli] enabled = true
Configuration: mcp.json
Define shared MCP servers:
{ "mcpServers": { "gay": { "type": "stdio", "command": "julia", "args": ["--project=@gay", "-e", "using Gay; Gay.serve_mcp()"], "env": { "GAY_SEED": "1069" } }, "firecrawl": { "type": "stdio", "command": "npx", "args": ["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}" } }, "exa": { "type": "stdio", "command": "npx", "args": ["-y", "@anthropic/exa-mcp-server"], "env": { "EXA_API_KEY": "${EXA_API_KEY}" } }, "tree-sitter": { "type": "stdio", "command": "uvx", "args": ["mcp-tree-sitter"] } } }
Architecture
IAgent Interface
All agents implement:
interface IAgent { getIdentifier(): string; // e.g., "copilot", "claude" getName(): string; // Human-readable name getDefaultOutputPath(): string | Record<string, string>; getMcpServerKey?(): string; // e.g., "servers" for Copilot applyRulerConfig( concatenatedRules: string, projectRoot: string, rulerMcpJson: object, agentConfig?: AgentConfig ): Promise<void>; }
MCP Server Keys by Agent
| Agent | MCP Server Key |
|---|---|
| Copilot | |
| Claude | |
| OpenCode | |
| Others | |
Orchestration Flow (src/lib.ts)
1. Load ruler.toml configuration 2. Find .ruler/ directory (local or global) 3. Concatenate all *.md files alphabetically 4. Load and validate mcp.json 5. For each selected agent: a. Determine output paths (with overrides) b. Backup existing files (.bak) c. Call agent.applyRulerConfig() d. If MCP enabled: - Read native MCP config - Merge with ruler mcp.json - Write merged config 6. Update .gitignore with generated paths
MCP Merge Strategies
Merge (default)
Combines servers from both configs, incoming takes precedence:
// base (native) { "mcpServers": { "a": {...}, "b": {...} } } // incoming (ruler) { "mcpServers": { "b": {...}, "c": {...} } } // result { "mcpServers": { "a": {...}, "b": {...from ruler}, "c": {...} } }
Overwrite
Replaces native config entirely:
// result = incoming config only { "mcpServers": { "b": {...}, "c": {...} } }
Backup Strategy
- Before overwriting, create
file.bak - On revert: restore from
, then delete.bak.bak - With
: restore but keep--keep-backups
files.bak - Generated files (no backup) are simply deleted on revert
Special Agent Handling
OpenHands
- MCP config in
.openhands/config.toml - Uses
key (TOML format)stdio_servers
AugmentCode
- MCP embedded in
.vscode/settings.json - Custom propagation function
OpenCode
- MCP in
opencode.json - Uses
key instead ofmcpmcpServers
Cursor
- Adds YAML front-matter to rules
extension for instructions.mdc
Aider
- Two output files: instructions + config
- Config is
.aider.conf.yml
Configuration Precedence
CLI flags (highest) ↓ ruler.toml settings ↓ Built-in defaults (lowest)
Examples:
overrides--no-gitignore[gitignore] enabled = true
overrides--agents claudedefault_agents- Agent-specific
overrides global[agents.X.mcp][mcp]
Example Workflow
# 1. Initialize ruler init # 2. Add rules cat > .ruler/01-style.md << 'EOF' # Code Style - Use TypeScript - Prefer functional programming - Maximum line length: 100 EOF cat > .ruler/02-security.md << 'EOF' # Security - Never log secrets - Use parameterized queries - Validate all inputs EOF # 3. Configure MCP cat > .ruler/mcp.json << 'EOF' { "mcpServers": { "gay": { "command": "julia", "args": ["--project=@gay", "-e", "using Gay; Gay.serve_mcp()"] } } } EOF # 4. Configure agents cat > .ruler/ruler.toml << 'EOF' default_agents = ["claude", "codex", "amp"] [mcp] enabled = true merge_strategy = "merge" [agents.claude] enabled = true [agents.codex] enabled = true [agents.amp] enabled = true EOF # 5. Apply ruler apply # 6. Verify cat CLAUDE.md cat AGENTS.md cat AGENT.md # 7. Iterate and refine vim .ruler/01-style.md ruler apply # 8. Revert if needed ruler revert
Integration with Music-Topos
The
.ruler/ directory in music-topos extends the standard ruler with:
GF(3) Bisimulation
[bisimulation] enabled = true polarity_rotation = true [bisimulation.agents] claude = "PLUS" # +1 codex = "ERGODIC" # 0 cursor = "MINUS" # -1 # Sum = 0 mod 3 ✓
propagate.clj (Babashka)
(def AGENTS {:codex {:trit 0 :skills-path ".codex/skills"} :claude {:trit -1 :skills-path ".claude/skills"} :amp {:trit 0 :skills-path ".ruler/skills"} :cursor {:trit -1 :skills-path ".cursor/skills"} :copilot {:trit 1 :skills-path ".vscode/skills"} :aider {:trit 1 :skills-path ".skillz"}}) ;; Propagate with GF(3) conservation check (propagate-all!)
References
- GitHub: https://github.com/intellectronica/ruler
- DeepWiki: https://deepwiki.com/intellectronica/ruler
- Author: intellectronica (Eran Kampf)
Scientific Skill Interleaving
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
Graph Theory
- networkx [○] via bicomodule
- Universal graph hub
Bibliography References
: 734 citations in bib.duckdbgeneral
Cat# Integration
This skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC) Home: Prof Poly Op: ⊗ Kan Role: Adj Color: #26D826
GF(3) Naturality
The skill participates in triads satisfying:
(-1) + (0) + (+1) ≡ 0 (mod 3)
This ensures compositional coherence in the Cat# equipment structure.