Open source · Go CLI
You write CLAUDE.md, then .cursor/rules, then GEMINI.md, then AGENTS.md — the same content in four formats. Switch tools and you rewrite everything. agnostic-ai keeps one source of truth and emits each tool's native config, byte-stable across runs.
Why
Every AI coding tool invented its own config file. The instructions are identical; only the wrapper differs. Copy-paste keeps them in sync until it doesn't — and a stale GEMINI.md is a silent bug.
CLAUDE.md, .cursor/rules, GEMINI.md, AGENTS.md…sync; every tool gets its native format.targets.sync --check fails CI the moment output drifts.What
Author agents, skills, rules, hooks, commands, and MCP servers under .agnostic-ai/. Stateless adapters translate them into every target's documented location and shape — aligned with the AGENTS.md open standard. 16 targets emit by default; Amp and Warp are opt-in.
How
Drop a file in .agnostic-ai/, run agnostic-ai sync. Each target gets two things: a slim shared entry-point that points at the canonical body, and the real spec rendered into that tool's native per-file location.
One Markdown file with YAML frontmatter under .agnostic-ai/rules/, agents/, skills/, hooks/, or mcps/. Plain, reviewable, tool-agnostic.
Stateless adapters write each target's format at the path it auto-loads. Same input, same bytes — diffable and reviewable. Run targets in parallel with --jobs.
sync --check re-emits in memory and fails CI on any difference, printing a per-file diff of what drifted. import pulls existing configs back into specs; the round-trip stays byte-stable.
--- name: conventional-commits description: Always use Conventional Commits. globs: "**/*" alwaysApply: true --- Use Conventional Commits. Subject under 72 chars. Body explains why, not what.
# AI Project Conventions Every supported AI tool reads this body from its native entry-point.
--- description: Always use Conventional… globs: "**/*" --- <!-- Generated by agnostic-ai --> Use Conventional Commits. Subject…
Stateless adapters mean same input, same output. Generated files diff cleanly and are safe to commit or ignore.
A provenance marker plus style preservation keeps import then sync byte-stable. Adopt gradually from what you already have.
rules/backend/auth.md routes to .cursor/rules/backend/auth.mdc and Copilot's applyTo: backend/** automatically.
Drop the check action into your workflow and PRs fail the moment generated config drifts from source.
Get started in two minutes