Type to search the docs and updates.

One source.
Every AI coding tool.

Write your project instructions and agents once, in your repository. agnostic-ai sync writes the file each tool reads, in its own format.

Works with 32 coding tools

Install agnostic-aiAll install options

curl -fsSL https://raw.githubusercontent.com/Chemaclass/agnostic-ai/main/scripts/install.sh | bash
.agnostic-ai/agents/reviewer.md
model: fast

agnostic-ai syncEdit each file by hand

  • .claude/agents/reviewer.mdClaude Codemodel: haikumodel: haiku
  • .codex/agents/reviewer.tomlCodexmodel = "gpt-6-luna"model = "gpt-5.4-mini"
  • .gemini/agents/reviewer.mdGemini CLImodel: gemini-3.5-flashNo agent yet.
  • + 29 more tools
  • 3 files by hand
  • Models go stale

Your setup outlives the tool you picked.

Every AI coding tool ships its own config file. Adopt three and your instructions live in three places, drifting apart. agnostic-ai keeps one source in your repository and writes the rest.

You own the source

Markdown and YAML in your repo. No account, no service.

Generated files are outputs

Same input, same bytes. Catch drift in CI with sync --check.

Keep native tool files

Each tool reads its own files. Sync flags what a tool cannot use.

Stop syncing at any time

The generated files keep working.

Why not just symlink one file?

Each tool reads a different format at a different path. A symlink shares bytes. It cannot translate them.

See how the formats diverge

Start with one note. Then change it once.

Choose your tools

agnostic-ai init

Run this in your project. Pick Claude Code and Codex, or the tools you use. Accept the import offer to keep existing instructions.

Write one project note

.agnostic-ai/AGNOSTIC_AI.md

Add a short instruction, such as the test command for your project. This is the source you maintain.

Generate and read the files

agnostic-ai sync

Preview with agnostic-ai sync --plan, then sync. With Claude Code and Codex, your note is in AGENTS.md, and CLAUDE.md points at it.

Make your next edit

agnostic-ai sync

Change the note and sync again. Every tool you picked reads the new text.

Share more when you need it. Explore the source files.

Everything lives in .agnostic-ai/, next to agnostic-ai.yaml, which picks your tools and model tiers. Pick an entry to see its source and what sync writes for each tool.

.agnostic-ai/

.agnostic-ai/ also holds reviews/, environments/, and ignore/. See every spec kind.

Subagents with a role, what they may do, and a model. model: fast names a tier from agnostic-ai.yaml, and sync writes each tool's model and effort.

.agnostic-ai/agents/test-writer.md
---
name: test-writer
description: Writes a failing test that reproduces a bug. Use before fixing it.
can: [read, edit]
model: fast
---

Reproduce the bug in a failing test. Do not touch production code.

sync

.codex/agents/test-writer.toml
name = "test-writer"
description = "Writes a failing test that reproduces a bug. Use before fixing it."
model = "gpt-6-luna"
model_reasoning_effort = "low"
developer_instructions = """
Reproduce the bug in a failing test. Do not touch production code.
"""
Docs: Agents

Keep the setup current. Know what changed.

What shipped in agnostic-ai, and what changed upstream in the tools it targets.

Keep your instructions together.
Make the next edit once.

agnostic-ai sync