agnostic-ai

Open source · Go CLI

One spec.
Every AI CLI.
Zero drift.

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.

25
AI CLIs supported
20
enabled by default
1
source of truth

Why

Same content, N formats, endless drift.

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.

Without agnostic-ai
  • Write the same rule into CLAUDE.md, .cursor/rules, GEMINI.md, AGENTS.md
  • Edit one, forget the others. They drift apart.
  • Onboard a new tool: hand-port everything again.
  • No way to tell in review which files fell behind.
With agnostic-ai
  • Write it once in plain Markdown + YAML frontmatter.
  • Run sync; every tool gets its native format.
  • New tool? Add one line to targets.
  • sync --check fails CI the moment output drifts.

What

One source of truth, 25 tools, each native.

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.

Claude Code.claude/ · CLAUDE.md
default
Codex CLIAGENTS.md · .codex/
default
Gemini CLIGEMINI.md · .gemini/
default
Cursor.cursor/rules
default
GitHub Copilot.github/
default
Cline.clinerules
default
Windsurf / Devin.devin/rules
default
Continue.continue/rules
default
Zed.agents/skills
default
OpenCode.opencode/
default
Antigravity.agent/
default
AiderCONVENTIONS.md
default
Junie (JetBrains).junie/rules
default
Kiro (AWS).kiro/steering
default
Crush (Charm).agents/skills · crush.json
default
Trae (ByteDance).trae/rules
default
Qoder (Alibaba).qoder/rules
default
OpenHands.agents/skills
default
Factory Droid.factory/droids
default
Kilo Code.kilo/agents · kilo.jsonc
default
AmpAGENTS.md · .agents/
opt-in
WarpAGENTS.md · .warp/
opt-in
Jules (Google)AGENTS.md (cloud)
opt-in
Goose (Block).goosehints
opt-in
Augment.augment-guidelines
opt-in

How

Two layers, one command.

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.

01 · AUTHOR

Write once

One Markdown file with YAML frontmatter under .agnostic-ai/rules/, agents/, skills/, hooks/, or mcps/. Plain, reviewable, tool-agnostic.

02 · SYNC

Emit native

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.

03 · GUARD

Never drift

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.

.agnostic-ai/rules/conventional-commits.md
---
name: conventional-commits
description: Always use Conventional Commits.
globs: "**/*"
alwaysApply: true
---

Use Conventional Commits. Subject under
72 chars. Body explains why, not what.
agnostic-ai
sync
CLAUDE.md  — shared pointer
# AI Project Conventions

Every supported AI tool reads this
body from its native entry-point.
.cursor/rules/conventional-commits.mdc
---
description: Always use Conventional…
globs: "**/*"
---
<!-- Generated by agnostic-ai -->
Use Conventional Commits. Subject…

Byte-stable, reviewable

Stateless adapters mean same input, same output. Generated files diff cleanly and are safe to commit or ignore.

Round-trip safe

A provenance marker plus style preservation keeps import then sync byte-stable. Adopt gradually from what you already have.

Scoped rules

rules/backend/auth.md routes to .cursor/rules/backend/auth.mdc and Copilot's applyTo: backend/** automatically.

CI gate in one line

Drop the check action into your workflow and PRs fail the moment generated config drifts from source.

Get started in two minutes

Write the rule once.
Every AI tool obeys it.

$ go install github.com/chemaclass/agnostic-ai/cmd/agnostic-ai@latest