If you use more than one AI coding tool, your repo probably has this problem: the same instructions copy-pasted into .clinerules, .cursorrules, AGENTS.md, CLAUDE.md and .github/copilot-instructions.md. A month later they disagree, and each tool behaves differently on the same codebase.
A developer on Hacker News described exactly this recently: switching harnesses when one hits its usage limit, and maintaining 20+ config files just to keep a project portable. Here is a low-tech way to keep it under control without any new tooling.
1. Pick one source of truth
Write the rules once in AGENTS.md (plain markdown). Everything else is generated or a pointer.
2. Keep rules short and testable
Rules that work across tools are concrete:
- "Run
pytest -qbefore declaring a task done." - "Never edit files under
migrations/that are already committed." - "Do not add a dependency without saying why in the PR description."
Vague rules ("write clean code") get ignored by every tool.
3. Sync with a 15-line script
from pathlib import Path src = Path("AGENTS.md").read_text(encoding="utf-8") for target in [".clinerules", ".cursorrules", "CLAUDE.md"]: Path(target).write_text( "<!-- generated from AGENTS.md, do not edit -->\n" + src, encoding="utf-8", ) print("wrote", target) Run it in a pre-commit hook so drift is impossible.
4. Split by repo type
A Python API, a Next.js app and a CLI need different rules (test command, lint command, forbidden directories). Start from a template per repo type instead of one giant generic file.
I put together six repo-type templates (each as .clinerules and .cursorrules, plus a short guide) as a pay-what-you-want pack, minimum $1: https://renevibe76.gumroad.com/l/toahua
The sync script above is free and works with any rules you write yourself.
What tool combination are you juggling, and which rules file do you trust most?
