DEV Community

Alexandru Cioc
Alexandru Cioc

Posted on

I stopped copy-pasting my lint rules into 12 different config files

Every project I work on has the same problem: my lint/test/build rules exist in my CI workflow, my pre-commit hook, my .cursorrules, my AGENTS.md, my GEMINI.md, and 7 more files. When I change a rule in one place, the others drift.

I built crag to fix this.

What it does

You write one ~20-line governance.md. crag compiles it to 12 downstream files atomically:

  • .github/workflows/gates.yml (GitHub Actions)
  • .husky/pre-commit
  • .pre-commit-config.yaml
  • AGENTS.md (Codex, Aider, Factory)
  • .cursor/rules/governance.mdc
  • GEMINI.md
  • .github/copilot-instructions.md
  • .clinerules, .continuerules, .windsurfrules
  • .zed/rules.md
  • .sourcegraph/cody-instructions.md

Change one line, regenerate everything.

Try it in 3 seconds

npx @whitehatd/crag demo
Enter fullscreen mode Exit fullscreen mode

No install. No config. No network. No LLM. ~500ms to a verified
12-target pipeline with a determinism SHA printed inline.

npx @whitehatd/crag demo Usage

What backs it up

  • 512 tests passing across Ubuntu + macOS + Windows × Node 18/20/22
  • Stress-tested on 101 OSS repos (4,400 invocations, 0 crashes)
  • Reference benchmark: 40/40 Grade A on ship-ready governance
  • Deterministic: same input → byte-identical output, SHA-verified on every CI push across 9 runners
  • Zero runtime dependencies

GitHub: https://github.com/WhitehatD/crag
npm: https://www.npmjs.com/package/@whitehatd/crag

MIT licensed. If you use more than one AI coding tool alongside CI,
this is for you.

Tags: devtools, opensource, javascript, ai

Top comments (0)