A Node.js CLI tool that automatically generates configuration files for various AI development tools from unified AI rule files. Features selective generation, comprehensive import/export capabilities, and supports major AI development tools with rules, commands, MCP, ignore files, subagents and skills.
Note
If you are interested in Rulesync latest news, please follow the maintainer's X(Twitter) account: @dyoshikawa1993
npm install -g rulesync
# or
brew install rulesync
# And then
rulesync --version
rulesync --helpDownload pre-built binaries from the latest release.
Commands to install a binary for your platform
curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-linux-x64 -o rulesync
chmod +x rulesync
# Place the binary wherever set PATH
sudo mv rulesync /usr/local/bin/curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-linux-arm64 -o rulesync
chmod +x rulesync
# Place the binary wherever set PATH
sudo mv rulesync /usr/local/bin/curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-darwin-x64 -o rulesync
chmod +x rulesync
# Place the binary wherever set PATH
sudo mv rulesync /usr/local/bin/curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-darwin-arm64 -o rulesync
chmod +x rulesync
# Place the binary wherever set PATH
sudo mv rulesync /usr/local/bin/# PowerShell
Invoke-WebRequest -Uri "https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-windows-x64.exe" -OutFile "rulesync.exe"
# Add to PATH or place in a directory already in PATH
Move-Item rulesync.exe C:\Windows\System32\Or using curl (if available):
curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-windows-x64.exe -o rulesync.exe
# Place the binary wherever set PATHcurl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/SHA256SUMS -o SHA256SUMS
# Linux/macOS
sha256sum -c SHA256SUMS
# Windows (PowerShell)
# Download SHA256SUMS file first, then verify:
Get-FileHash rulesync.exe -Algorithm SHA256 | ForEach-Object {
$actual = $_.Hash.ToLower()
$expected = (Get-Content SHA256SUMS | Select-String "rulesync-windows-x64.exe").ToString().Split()[0]
if ($actual -eq $expected) { "✓ Checksum verified" } else { "✗ Checksum mismatch" }
}# Create necessary directories, sample rule files, and configuration file
npx rulesync initOn the other hand, if you already have AI tool configurations:
# Import existing files (to .rulesync/**/*)
npx rulesync import --targets claudecode # From CLAUDE.md
npx rulesync import --targets cursor # From .cursorrules
npx rulesync import --targets copilot # From .github/copilot-instructions.md
npx rulesync import --targets claudecode --features rules,mcp,commands,subagents
# And more tool supports
# Generate unified configurations with all features
npx rulesync generate --targets "*" --features "*"Rulesync supports both generation and import for All of the major AI coding tools:
| Tool | rules | ignore | mcp | commands | subagents | skills |
|---|---|---|---|---|---|---|
| AGENTS.md | ✅ | 🎮 | 🎮 | 🎮 | ||
| Claude Code | ✅ 🌏 | ✅ | ✅ 🌏 📦 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Codex CLI | ✅ 🌏 | 🌏 | 🌏 | 🎮 | 🎮 | |
| Gemini CLI | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | 🎮 |
| GitHub Copilot | ✅ | ✅ | ✅ | 🎮 | 🎮 | |
| Cursor | ✅ | ✅ | ✅ | ✅ 🌏 | 🎮 | 🎮 |
| OpenCode | ✅ | ✅ | ||||
| Cline | ✅ | ✅ | ✅ | |||
| Roo Code | ✅ | ✅ | ✅ | ✅ | 🎮 | |
| Qwen Code | ✅ | ✅ | ||||
| Kiro IDE | ✅ | ✅ | ||||
| Amazon Q Developer CLI | ✅ | ✅ | ||||
| Google Antigravity | ✅ | ✅ | ||||
| JetBrains Junie | ✅ | ✅ | ✅ | |||
| AugmentCode | ✅ | ✅ | ||||
| Windsurf | ✅ | ✅ | ||||
| Warp | ✅ |
- ✅: Supports project mode
- 🌏: Supports global mode
- 🎮: Supports simulated commands/subagents/skills (Project mode only)
- 📦: Supports modular MCP (Experimental)
Team members can freely choose their preferred AI coding tools. Whether it's GitHub Copilot, Cursor, Cline, or Claude Code, each developer can use the tool that maximizes their productivity.
AI development tools evolve rapidly with new tools emerging frequently. With Rulesync, switching between tools doesn't require redefining your rules from scratch.
Enable hybrid development workflows combining multiple AI tools.
Avoid lock-in completely. If you decide to stop using Rulesync, you can continue using the generated rule files as-is.
Apply consistent rules across all AI tools, improving code quality and development experience for the entire team.
You can use global mode via Rulesync by enabling --global option.
Simulated commands and subagents allow you to generate simulated commands and subagents for copilot, cursor and codexcli. This is useful for shortening your prompts.
# Initialize new project (recommended: organized rules structure)
npx rulesync init
# Import existing configurations (to .rulesync/rules/ by default)
npx rulesync import --targets claudecode --features rules,ignore,mcp,commands,subagents,skills
# Generate all features for all tools (new preferred syntax)
npx rulesync generate --targets "*" --features "*"
# Generate specific features for specific tools
npx rulesync generate --targets copilot,cursor,cline --features rules,mcp
npx rulesync generate --targets claudecode --features rules,subagents
# Generate only rules (no MCP, ignore files, commands, or subagents)
npx rulesync generate --targets "*" --features rules
# Generate simulated commands and subagents
npx rulesync generate --targets copilot,cursor,codexcli --features commands,subagents --simulate-commands --simulate-subagents
# Add generated files to .gitignore
npx rulesync gitignoreYou can configure Rulesync by creating a rulesync.jsonc file in the root of your project.
Rulesync provides a JSON Schema for editor validation and autocompletion. Add the $schema property to your rulesync.jsonc:
Example:
// rulesync.jsonc
{
"$schema": "https://raw.githubusercontent.com/dyoshikawa/rulesync/refs/heads/main/config-schema.json",
// List of tools to generate configurations for. You can specify "*" to generate all tools.
"targets": ["cursor", "claudecode", "geminicli", "opencode", "codexcli"],
// Features to generate. You can specify "*" to generate all features.
"features": ["rules", "ignore", "mcp", "commands", "subagents"],
// Base directories for generation.
// Basically, you can specify a `["."]` only.
// However, for example, if your project is a monorepo and you have to launch the AI agent at each package directory, you can specify multiple base directories.
"baseDirs": ["."],
// Delete existing files before generating
"delete": true,
// Verbose output
"verbose": false,
// Advanced options
"global": false, // Generate for global(user scope) configuration files
"simulateCommands": false, // Generate simulated commands
"simulateSubagents": false, // Generate simulated subagents
"simulateSkills": false, // Generate simulated skills
"modularMcp": false // Enable modular-mcp for context compression (experimental, Claude Code only)
// Deprecated experimental options (for backward compatibility)
// "experimentalGlobal": false,
// "experimentalSimulateCommands": false,
// "experimentalSimulateSubagents": false
}Example:
---
root: true # true that is less than or equal to one file for overview such as `AGENTS.md`, false for details such as `.agents/memories/*.md`
targets: ["*"] # * = all, or specific tools
description: "Rulesync project overview and development guidelines for unified AI rules management CLI tool"
globs: ["**/*"] # file patterns to match (e.g., ["*.md", "*.txt"])
agentsmd: # agentsmd and codexcli specific parameters
# Support for using nested AGENTS.md files for subprojects in a large monorepo.
# This option is available only if root is false.
# If subprojectPath is provided, the file is located in `${subprojectPath}/AGENTS.md`.
# If subprojectPath is not provided and root is false, the file is located in `.agents/memories/*.md`.
subprojectPath: "path/to/subproject"
cursor: # cursor specific parameters
alwaysApply: true
description: "Rulesync project overview and development guidelines for unified AI rules management CLI tool"
globs: ["*"]
---
# Rulesync Project Overview
This is Rulesync, a Node.js CLI tool that automatically generates configuration files for various AI development tools from unified AI rule files. The project enables teams to maintain consistent AI coding assistant rules across multiple tools.
...Example:
---
description: 'Review a pull request' # command description
targets: ["*"] # * = all, or specific tools
---
target_pr = $ARGUMENTS
If target_pr is not provided, use the PR of the current branch.
Execute the following in parallel:
...Example:
---
name: planner # subagent name
targets: ["*"] # * = all, or specific tools
description: >- # subagent description
This is the general-purpose planner. The user asks the agent to plan to
suggest a specification, implement a new feature, refactor the codebase, or
fix a bug. This agent can be called by the user explicitly only.
claudecode: # for claudecode-specific parameters
model: inherit # opus, sonnet, haiku or inherit
---
You are the planner for any tasks.
Based on the user's instruction, create a plan while analyzing the related files. Then, report the plan in detail. You can output files to @tmp/ if needed.
Attention, again, you are just the planner, so though you can read any files and run any commands for analysis, please don't write any code.Example:
---
name: example-skill # skill name
description: >- # skill description
A sample skill that demonstrates the skill format
targets: ["*"] # * = all, or specific tools
claudecode: # for claudecode-specific parameters
allowed-tools:
- "Bash"
- "Read"
- "Write"
- "Grep"
---
This is the skill body content.
You can provide instructions, context, or any information that helps the AI agent understand and execute this skill effectively.
The skill can include:
- Step-by-step instructions
- Code examples
- Best practices
- Any relevant context
Skills are directory-based and can include additional files alongside SKILL.md.Example:
{
"mcpServers": {
"serena": {
"description": "Code analysis and semantic search MCP server",
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant",
"--enable-web-dashboard",
"false",
"--project",
"."
],
"env": {}
},
"context7": {
"description": "Library documentation search server",
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
],
"env": {}
}
}
}Rulesync supports a single ignore list that can live in either location below:
.rulesync/.aiignore(recommended).rulesyncignore(project root)
Rules and behavior:
- You may use either location.
- When both exist, Rulesync prefers
.rulesync/.aiignore(recommended) over.rulesyncignore(legacy) when reading. - If neither file exists yet, Rulesync defaults to creating
.rulesync/.aiignore.
Notes:
- Running
rulesync initwill create.rulesync/.aiignoreif no ignore file is present.
Example:
tmp/
credentials/You can use global mode via Rulesync by enabling --global option. It can also be called as user scope mode.
Currently, supports rules and commands generation for Claude Code. Import for global files is supported for rules and commands.
- Create an any name directory. For example, if you prefer
~/.aiglobal, run the following command.mkdir -p ~/.aiglobal - Initialize files for global files in the directory.
cd ~/.aiglobal npx rulesync init
- Edit
~/.aiglobal/rulesync.jsoncto enable global mode.{ "global": true } - Edit
~/.aiglobal/.rulesync/rules/overview.mdto your preferences.--- root: true --- # The Project Overview ...
- Generate rules for global settings.
# Run in the `~/.aiglobal` directory npx rulesync generate
Note
Currently, when in the directory enabled global mode:
rulesync.jsonconly supportsglobal,features,deleteandverbose.Featurescan be set"rules"and"commands". Other parameters are ignored.rules/*.mdonly supports single file hasroot: true, and frontmatter parameters withoutrootare ignored.- Only Claude Code is supported for global mode commands.
Simulated commands, subagents and skills allow you to generate simulated features for copilot, cursor, codexcli and etc. This is useful for shortening your prompts.
- Prepare
.rulesync/commands/*.md,.rulesync/subagents/*.mdand.rulesync/skills/*/SKILL.mdfor your purposes. - Generate simulated commands, subagents and skills for specific tools that are included in copilot, cursor, codexcli and etc.
npx rulesync generate \ --targets copilot,cursor,codexcli \ --features commands,subagents,skills \ --simulate-commands \ --simulate-subagents \ --simulate-skills
- Use simulated commands, subagents and skills in your prompts.
- Prompt examples:
# Execute simulated commands. By the way, `s/` stands for `simulate/`. s/your-command # Execute simulated subagents Call your-subagent to achieve something. # Use simulated skills Use the skill your-skill to achieve something.
- Prompt examples:
Rulesync supports compressing tokens consumed by MCP servers d-kimuson/modular-mcp for context saving. When enabled with --modular-mcp, it additionally generates modular-mcp.json.
# Enable modular-mcp via CLI
npx rulesync generate --targets claudecode --features mcp --modular-mcp
# Or via configuration file
{
"modularMcp": true
}When enabling modular-mcp, each MCP server must have a description field. Example:
// .rulesync/mcp.json
{
"mcpServers": {
"context7": {
+ "description": "Up-to-date documentation and code examples for libraries",
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
],
"env": {}
}
}You can also configure exposed to exclude specific MCP servers from modular-mcp. It is optional and default to false. If you specify exposed: true, the MCP server is always loaded in the initial context.
// .rulesync/mcp.json
{
"mcpServers": {
"context7": {
+ "exposed": true,
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
],
"env": {}
}
}To demonstrate the effect of modular-mcp, please see the following example:
Example of effect
Please see examples using Claude Code.
When using following mcp servers:
// .rulesync/mcp.json
{
"mcpServers": {
"serena": {
"description": "Semantic coding tools for intelligent codebase exploration and manipulation",
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant",
"--enable-web-dashboard",
"false",
"--project",
"."
],
"env": {}
},
"context7": {
"description": "Up-to-date documentation and code examples for libraries",
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
],
"env": {}
},
"fetch": {
"description": "This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.",
"type": "stdio",
"command": "uvx",
"args": [
"mcp-server-fetch"
],
"env": {}
}
}
}Once run rulesync generate --targets claudecode --features mcp, /context result on Claude Code is as follows:
Context Usage
⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ claude-sonnet-4-5-20250929 · 82k/200k tokens (41%)
⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛀ ⛀
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System prompt: 2.5k tokens (1.3%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System tools: 13.9k tokens (6.9%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ MCP tools: 15.7k tokens (7.9%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ Memory files: 5.2k tokens (2.6%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ Messages: 8 tokens (0.0%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛝ ⛝ ⛝ ⛶ Free space: 118k (58.8%)
⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ Autocompact buffer: 45.0k tokens (22.5%)
⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝
On the other hand, once run rulesync generate --targets claudecode --features mcp --modular-mcp, /context result on Claude Code is as follows:
Context Usage
⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛀ ⛁ claude-sonnet-4-5-20250929 · 68k/200k tokens (34%)
⛁ ⛀ ⛀ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System prompt: 2.5k tokens (1.3%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System tools: 13.5k tokens (6.8%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ MCP tools: 1.3k tokens (0.6%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ Memory files: 5.2k tokens (2.6%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ Messages: 8 tokens (0.0%)
⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛝ ⛝ ⛝ ⛶ Free space: 132k (66.2%)
⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ Autocompact buffer: 45.0k tokens (22.5%)
⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝ ⛝
Focus on the difference of MCP tools usage.
| Context Usage | |
|---|---|
| Disabled Modular MCP | 15.7k tokens (7.9%) |
| Enabled Modular MCP | 1.3k tokens (0.6%) |
So, in this case, approximately 92% reduction in MCP tools consumption!
Rulesync provides an MCP (Model Context Protocol) server that enables AI agents to manage your Rulesync files. This allows AI agents to discover, read, create, update, and delete files dynamically.
The Rulesync MCP server provides the following tools:
Rules Management
listRules- List all rule filesgetRule- Get a specific rule fileputRule- Create or update a rule filedeleteRule- Delete a rule file
Commands Management
listCommands- List all command filesgetCommand- Get a specific command fileputCommand- Create or update a command filedeleteCommand- Delete a command file
Subagents Management
listSubagents- List all subagent filesgetSubagent- Get a specific subagent fileputSubagent- Create or update a subagent filedeleteSubagent- Delete a subagent file
Ignore Files Management
getIgnoreFile- Get the ignore fileputIgnoreFile- Create or update the ignore filedeleteIgnoreFile- Delete the ignore file
MCP Configuration Management
getMcpFile- Get the MCP configuration fileputMcpFile- Create or update the MCP configuration filedeleteMcpFile- Delete the MCP configuration file
rulesync mcpThis starts an MCP server using stdio transport that AI agents can communicate with.
Add the Rulesync MCP server to your .rulesync/mcp.json:
{
"mcpServers": {
"rulesync-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "rulesync", "mcp"],
"env": {}
}
}
}Issues and Pull Requests are welcome!
For development setup:
git clone https://github.com/dyoshikawa/rulesync # Should be your fork repository url actually
cd rulesync
pnpm i
pnpm cicheck # Run code style check, type check, and tests
# Manual test using current code
pnpm dev generate -t claudecode -f "*"
pnpm dev import -t claudecode -f "*"
# Once you create .rulesync/rules/my-language.md and `pnpm dev generate`, you can use coding agents with your language.
# Japanese setting example:
cat << 'EOF' > .rulesync/rules/my-language.md
---
root: false
targets: ['*']
description: "It's a rule about language. If the rule file exists, you must always follow this."
globs: ["**/*"]
---
I'm a Japanese developer. So you must always answer in Japanese. On the other hand, reasoning(thinking) should be in English to improve token efficiency.
However, this project is for English speaking people. So when you write any code, comments, documentation, commit messages, PR title and PR descriptions, you must always use English.
EOF
pnpm dev generateYou can try adding the following to .claude/settings.json or .claude/settings.local.json:
{
+ "enableAllProjectMcpServers": true
}According to the documentation, this means:
Automatically approve all MCP servers defined in project .mcp.json files
MIT License
