← Biblioteca

Rulesync: uma fonte de regras para Claude Code, Codex e Cursor

Como usar o rulesync para manter regras para agentes de IA numa fonte só e gerar CLAUDE.md, AGENTS.md e .cursor/rules sem sobrescrever o que já existe

IA e automação22 de setembro de 202610 min de leitura

O resumo direto

Rulesync é um CLI que guarda as regras do repositório num diretório só, o .rulesync/, e gera a partir dele o arquivo nativo que cada agente de IA lê. Serve para quem roda mais de um agente no mesmo projeto e cansou de manter CLAUDE.md, AGENTS.md e .cursor/rules dizendo coisas diferentes. A promessa declarada na documentação oficial é "Author rules once, generate everywhere", e os arquivos gerados continuam funcionando mesmo sem o rulesync instalado. O ponto de virada é conceitual: depois que você adota, o CLAUDE.md deixa de ser lugar onde se escreve e vira saída de build, igual a um arquivo compilado. Isso resolve a divergência e cria um risco novo, que é rodar o generate por cima de regras escritas à mão. O caminho seguro passa por importar o que já existe antes de gerar qualquer coisa.

1. O problema não é ter muitos agentes, é ter muitas fontes

Quem entrega sistema ou loja para cliente raramente usa um agente só. Claude Code no terminal, Codex CLI em outra aba, Cursor para revisar o diff, OpenCode num servidor. Cada um lê um arquivo diferente por padrão.

O Claude Code carrega ./CLAUDE.md ou ./.claude/CLAUDE.md como instruções de projeto. O Cursor lê .cursor/rules em arquivos .mdc, e um .md largado nessa pasta é ignorado pelo sistema de regras, porque não tem frontmatter para declarar description, globs e alwaysApply. O OpenCode lê AGENTS.md na raiz e aceita arquivos extras listados no campo instructions do opencode.json. O Codex guarda configuração em ~/.codex/config.toml e aceita sobreposição por projeto em .codex/config.toml, carregada só em projeto marcado como confiável.

Quatro lugares, quatro formatos. Na prática: o padrão de stack está no CLAUDE.md, a convenção de branch está no .cursor/rules, o passo de deploy está no AGENTS.md e a pasta que ninguém pode tocar não está em lugar nenhum. Quando um agente trabalha com metade do contexto, quem paga é o código do cliente.

O AGENTS.md reduziu parte da confusão: é formato aberto, usado por mais de 60 mil projetos open source, e a precedência dele é simples, o arquivo mais próximo do arquivo editado vence. Mas ele não cobre .cursor/rules nem configuração de MCP, hooks e permissões.

2. O que o rulesync faz (e o que ele não é)

O rulesync inverte a direção: você escreve em .rulesync/, roda um comando e ele escreve o arquivo nativo de cada ferramenta. O README oficial descreve um CLI Node.js que gera configuração de várias ferramentas de IA a partir de arquivos de regra unificados, cobrindo rules, commands, MCP, subagents e skills. Licença MIT.

Três coisas que ele não é:

  • Não é MCP. MCP é o protocolo que liga o agente a uma ferramenta externa, e já tem artigo próprio: MCP no Claude Code e no Cursor. O rulesync só escreve o arquivo de configuração de MCP de cada ferramenta a partir de uma fonte única.
  • Não é runtime. Ele roda, escreve arquivo e sai.
  • Não é garantia de comportamento. O que ele sincroniza é texto de contexto. A seção 8 trata disso.

A vantagem aparece no dia em que você muda o padrão de commit: em vez de editar quatro arquivos e esquecer um, você edita um em .rulesync/rules/ e roda o generate.

3. Instalar, e rodar o import antes de qualquer generate

A documentação oficial lista três caminhos: npm global, tap Homebrew ou binário único. O npm é o mais direto.

npm install -g rulesync
rulesync --version

O tap do Homebrew mora dentro do próprio repositório e não tem prefixo homebrew-, então exige a forma de dois argumentos brew tap <nome> <url>; o atalho sem tapar antes não funciona. No npm, o pacote carrega atestado de proveniência, verificável com npm audit signatures.

Agora a parte que salva o repositório. Se o projeto já tem CLAUDE.md e .cursorrules escritos à mão, não rode rulesync generate primeiro. O generate escreve os arquivos nativos a partir de .rulesync/, e com .rulesync/ vazio o que estava à mão pode ser sobrescrito. Importe antes:

rulesync init
rulesync import --targets claudecode
rulesync import --targets cursor

O init cria o .rulesync/ com arquivos de exemplo e o rulesync.jsonc, e a documentação diz que arquivos existentes nunca são sobrescritos por ele. O rulesync.jsonc gerado já vem com targets iguais a codexcli, claudecode e opencode. O import faz o inverso do generate: lê o CLAUDE.md, o .cursorrules ou o .github/copilot-instructions.md que já existem e grava o conteúdo em .rulesync/.

Depois do import, confira o que entrou antes de qualquer outra coisa:

git status
git diff --stat

Se o import trouxe menos do que você esperava, complete à mão em .rulesync/rules/ antes de gerar.

4. A primeira regra: Markdown com frontmatter

Regra do rulesync é arquivo Markdown em .rulesync/rules/, com frontmatter YAML. Quatro chaves importam no começo: root, targets, description e globs. A regra raiz (root: true) vira o arquivo principal de cada ferramenta; as demais viram arquivos modulares no lugar que cada ferramenta espera.

---
root: true
targets: ["*"]
description: "Convenções do repositório"
globs: ["**/*"]
---

Abaixo do frontmatter vai o corpo, em Markdown comum. Coloque o que você repetiria para um dev novo no primeiro dia:

  • Stack permitida e o que está congelado (a versão do framework, o gerenciador de pacotes, se é pnpm e não npm).
  • Padrão de commit e de branch, escrito como exemplo e não como adjetivo.
  • Pasta proibida: a de build, a de vendor, a de arquivo gerado por outro processo.
  • Passo de deploy e o comando de verificação que roda antes.

O conselho de escrita é consistente entre as documentações: instrução específica funciona melhor que instrução vaga. O Claude Code recomenda menos de 200 linhas por CLAUDE.md, porque arquivo longo consome contexto e reduz aderência. O Cursor recomenda manter regra abaixo de 500 linhas e dividir regra grande em regras componíveis.

Para regra que só vale em parte do código, use globs. Uma regra com globs: ["src/api/**/*.ts"] é traduzida por cada alvo para o mecanismo que ele tem: paths no Claude Code, globs no .mdc do Cursor, frontmatter próprio em outros.

O detalhe do Cursor que quebra silenciosamente

No Cursor, alwaysApply: true e globs juntos são conflito semântico: a documentação oficial diz que os globs são ignorados quando a flag está ligada, e algumas versões classificam a regra pelo glob em vez de aplicá-la sempre. O rulesync trata isso na tradução, mas conheça o comportamento: é causa comum de "a regra está lá e o agente ignora".

5. Gerar para vários alvos de uma vez

O comando é generate, e o que decide para onde ele escreve é --targets. O valor é literal: errar o nome quebra a execução. Estes são os valores conferidos na referência oficial no dia da leitura.

Ferramenta Valor de --targets Onde a regra raiz cai
Claude Code claudecode CLAUDE.md no projeto
Codex CLI codexcli AGENTS.md na raiz
Cursor cursor .cursor/rules/*.mdc
OpenCode opencode AGENTS.md, com as não raiz registradas em opencode.json
Google Antigravity CLI antigravity-cli AGENTS.md na raiz, não raiz em .agents/rules/
Grok CLI grokcli AGENTS.md, não raiz em .grok/rules/*.md

Fonte: Rulesync, páginas Supported Tools e File Formats, lidas em 22/09/2026. A lista completa passa de 40 ferramentas e muda com frequência: confira o valor na referência antes de fixar num script.

rulesync generate --targets claudecode,codexcli,cursor --features rules
rulesync generate --targets "*" --features "*"

A primeira linha gera só as regras, para os três alvos. A segunda gera tudo para todos os alvos configurados. Comece pela primeira. --features aceita rules, commands, subagents, skills, mcp, hooks, permissions e checks: ligue uma de cada vez, em vez de descobrir no diff que o permissions reescreveu um .codex/config.toml ajustado à mão.

Antes de escrever qualquer arquivo, existe o ensaio:

rulesync generate --dry-run --targets claudecode --features rules
rulesync generate --check --targets "*" --features "*"

O --dry-run mostra o que mudaria sem tocar em nada. O --check faz o mesmo e sai com código 1 quando os arquivos não estão atualizados, que é a forma de usar isso em CI.

A ordem dos alvos importa mais do que parece

Várias ferramentas leem o mesmo AGENTS.md: Codex CLI, OpenCode, Antigravity CLI, Grok CLI e Warp, entre outras. Num generate com vários alvos, mais de um escreve no mesmo caminho, cada um com a própria semântica. O rulesync só faz a varredura de órfãos depois que todos os alvos escreveram, para um não apagar o arquivo recém-escrito do outro. Ainda assim: depois de gerar, abra o AGENTS.md e leia. Não presuma.

6. Conferir no git diff, e decidir se o gerado entra no repositório

Depois do primeiro generate, a verificação que conta é o diff.

git diff --stat
git diff CLAUDE.md AGENTS.md
git diff .cursor/rules/

Procure três coisas: conteúdo que sumiu (parágrafo do CLAUDE.md à mão não importado), conteúdo duplicado (a mesma instrução vinda do AGENTS.md e da regra raiz) e arquivo inesperado, como um .codex/config.toml surgido porque --features "*" ligou permissions.

Depois vem a decisão de versionamento, binária.

Versionar o gerado é o caminho para time. Quem clona recebe as regras funcionando sem instalar nada, o que casa com a promessa da documentação. O custo é diff mais barulhento em cada pull request e a obrigação de rodar rulesync generate --check no CI para o gerado não envelhecer em silêncio.

Não versionar deixa o repositório limpo: só .rulesync/ entra no git e o generate vira passo de setup. Há comando pronto:

rulesync gitignore --targets claudecode,cursor

O custo é que quem clonar e não rodar o setup trabalha sem regra nenhuma. Ressalva documentada: arquivos compartilhados como opencode.json, .claude/settings.json, .codex/config.toml e .vscode/settings.json não entram no .gitignore de propósito, porque você também escreve coisa sua neles.

Para projeto de cliente, versionar tende a ser a escolha certa: o repositório precisa funcionar na mão de quem pega depois, e quem pega depois não lê a documentação de setup.

7. Atualizar a ferramenta sem levar susto

A versão corrente na leitura da página, em 22/09/2026, é a 17.0.0, publicada em 21/09/2026. Ela traz mudança incompatível específica do Codex CLI: regras de edit e write marcadas como ask ou deny passam a gerar read em vez de deny. O Codex não tem estado de aprovação de escrita por caminho, então as duas ações que não são allow preservam leitura sem escrita, com aviso. As notas de release pedem que você revise o .codex/config.toml regerado se dependia da saída antiga.

Isso resume o modo de operar: a ferramenta se move rápido, com release quase diário, e acompanha o que cada agente muda do próprio lado. Duas práticas cobrem o risco: fixar a versão no projeto em vez de instalar sempre a mais recente, e rodar rulesync generate --dry-run depois de qualquer atualização.

8. O limite honesto: regra alinha contexto, não obriga o modelo

Esta é a parte que quase nenhum tutorial diz, e que a documentação oficial das ferramentas diz sem rodeio.

O Claude Code é direto: as instruções de memória são tratadas como contexto, não como configuração imposta, e o conteúdo do CLAUDE.md é entregue como mensagem de usuário depois do prompt de sistema, sem garantia de cumprimento estrito, principalmente quando a instrução é vaga ou conflita com outra. A recomendação da própria página, para o que precisa valer sempre, é usar hook PreToolUse, que executa independentemente do que o modelo decidir. O Cursor faz a ressalva equivalente ao falar de regras de time: orientação por IA não deve ser o único controle de segurança.

A conclusão operacional divide o trabalho em duas camadas:

  • Camada de contexto: padrão de nomenclatura, estilo, arquitetura, onde ficam as coisas. Isso vive em regra, e o rulesync resolve a duplicação.
  • Camada de imposição: o que não pode acontecer nunca. Isso vive em hook, em permissão (permissions.deny no Claude Code, sandbox_mode e política de aprovação no Codex), em teste e em regra de CI.

Se a instrução é "não faça deploy sem rodar o teste", ela não é regra de arquivo, é hook ou passo de pipeline. Se é "endpoint novo vai em src/api/handlers/", aí sim é regra, e ganha em estar num lugar só. O rulesync resolve divergência entre fontes. Ele não resolve, nem promete resolver, obediência do modelo.

Perguntas frequentes

Preciso trocar meu CLAUDE.md por outra coisa?

Não. Ele continua existindo e sendo lido pelo Claude Code. Muda quem escreve nele: você edita .rulesync/rules/ e o generate reescreve o CLAUDE.md. Se alguém do time editar o CLAUDE.md direto, a edição some no próximo generate, então vale um comentário no topo avisando que ele é gerado.

Dá para usar só em uma ferramenta?

Dá, e faz sentido como transição. Rodar só com --targets claudecode já resolve manter regra grande organizada em arquivos separados. Mas se você usa um agente só, o ganho é pequeno: a ferramenta foi feita para vários alvos.

E as regras que já estão em .cursor/rules há meses?

Rode rulesync import --targets cursor antes do primeiro generate, confira no git diff o que entrou em .rulesync/ e só então gere. Se o import não trouxer tudo, complete à mão antes.

Isso substitui configurar MCP em cada ferramenta?

Em parte. Com a feature mcp ligada, ele escreve a configuração de MCP de cada ferramenta a partir de uma fonte só. O que ele não faz é a parte trabalhosa: escolher o servidor, tratar credencial e diagnosticar servidor que não sobe. Isso é assunto de MCP no Claude Code e no Cursor.

Vale a pena numa VPS onde o agente roda sozinho?

Vale mais ainda, porque ali ninguém corrige o agente na hora. Só que regra de arquivo continua sendo contexto: sem supervisão, o que protege é permissão e hook, não texto. Sobre rodar agente em servidor: Claude Code 24/7 numa VPS.

Conclusão

Rulesync é uma ferramenta chata, e esse é o elogio: ela não faz nada que você não poderia fazer à mão, só impede que quatro arquivos comecem a discordar em silêncio. O ganho aparece no repositório que passa por mais de um agente e por mais de uma pessoa, e o custo é baixo, já que a ferramenta é MIT e o resultado continua funcionando mesmo sem ela instalada. O que muda de verdade é a disciplina: regra se escreve em .rulesync/, arquivo nativo é artefato, e o git diff é o teste depois de cada generate. E o que precisa valer sempre não entra em regra nenhuma, entra em hook, permissão ou teste.

Se o que você precisa é o agente lendo o seu ERP, a sua loja ou o seu banco, isso é integração sob medida (MCP, webhook, fila). Descreve o sistema e o que quer automatizar em oailton.dev/contato.

Fontes

  1. 01Rulesync é CLI Node.js que gera arquivos de configuração de várias ferramentas de IA a partir de arquivos de regra unificados, cobrindo rules, commands, MCP, subagents e skills; licença MIT (lido em 22/09/2026) GitHub, dyoshikawa/rulesync (README)
  2. 02A proposta declarada é 'Author rules once, generate everywhere' e os arquivos gerados continuam funcionando mesmo sem o Rulesync instalado (lido em 22/09/2026) Rulesync, página inicial da documentação
  3. 03A página Supported Tools lista o valor literal de --targets por ferramenta (claudecode, codexcli, cursor, opencode, antigravity-cli, grokcli) e quais features cada uma suporta em modo projeto e global (lido em 22/09/2026) Rulesync, Supported Tools and Features
  4. 04A versão 17.0.0 foi publicada em 21/09/2026 e trouxe mudança incompatível nas permissions do Codex CLI: regras de edit e write com ask ou deny passam a gerar read em vez de deny, pedindo revisão do .codex/config.toml regerado (lido em 22/09/2026) GitHub, dyoshikawa/rulesync, Releases (v17.0.0)
  5. 05O rulesync init cria .rulesync/ e rulesync.jsonc com targets padrão codexcli, claudecode e opencode, e nunca sobrescreve arquivo existente; generate aceita --dry-run e --check (lido em 22/09/2026) Rulesync, CLI Commands
  6. 06Instalação por npm install -g rulesync, por tap Homebrew de dois argumentos ou por binário único; o pacote npm carrega atestado de proveniência verificável com npm audit signatures (lido em 22/09/2026) Rulesync, Installation
  7. 07Regras do rulesync são Markdown com frontmatter em .rulesync/rules/, com as chaves root, targets, description e globs, mais blocos específicos por ferramenta; no alvo opencode as regras não raiz são registradas no array instructions do opencode.json (lido em 22/09/2026) Rulesync, File Formats
  8. 08O Claude Code trata CLAUDE.md como contexto, não como configuração imposta, e recomenda hook PreToolUse para bloquear ação independentemente do que o modelo decidir; o projeto lê ./CLAUDE.md ou ./.claude/CLAUDE.md (lido em 22/09/2026) Claude Code, How Claude remembers your project
  9. 09No Cursor as regras de projeto ficam em .cursor/rules como arquivos .mdc e um .md nessa pasta é ignorado pelo sistema de regras; alwaysApply, description e globs decidem quando a regra entra no contexto (lido em 22/09/2026) Cursor Docs, Rules
  10. 10O OpenCode lê AGENTS.md no projeto e em ~/.config/opencode/AGENTS.md, aceita CLAUDE.md como fallback e permite listar arquivos extras no campo instructions do opencode.json (lido em 22/09/2026) OpenCode Docs, Rules
  11. 11AGENTS.md é formato aberto usado por mais de 60 mil projetos open source e, em caso de conflito, o AGENTS.md mais próximo do arquivo editado vence (lido em 22/09/2026) AGENTS.md, site oficial
  12. 12O Codex guarda configuração de usuário em ~/.codex/config.toml e aceita sobreposição por projeto em .codex/config.toml, carregada apenas em projeto marcado como confiável (lido em 22/09/2026) OpenAI Developers, Codex, Config basics

Ailton Carvalho

Construo sistema web sob medida, painel interno, integrações e loja que vende no celular. Código entregue rodando, com alguém responsável depois.

Falar no WhatsApp

Relacionados