One config to rule them all.
Practical standard layer for multi-LLM development.
Quick Start · Integrations · Commands · FAQ
Every AI coding tool wants its own config format:
| Codex | Claude | Gemini | Cursor | Copilot | Antigravity | Windsurf | OpenCode | |
|---|---|---|---|---|---|---|---|---|
| Config | .codex/config.toml |
CLI commands | .gemini/settings.json |
.cursor/mcp.json |
.vscode/mcp.json |
Global mcp.json |
Global mcp_config.json |
opencode.json |
| Instructions | AGENTS.md |
CLAUDE.md |
AGENTS.md |
.cursorrules |
— | AGENTS.md |
AGENTS.md |
AGENTS.md |
| Format | TOML | JSON (via CLI) | JSON | JSON | JSON | JSON | JSON | JSON |
Result: Duplicated configs, team drift, painful onboarding.
agents gives you one source of truth in .agents/ and syncs MCP servers, skills, and instructions to every tool automatically.
# 1. Install
npm install -g @agents-dev/cli
# 2. Interactive setup — picks integrations, adds MCP servers, syncs everything
agents start
# 3. Re-sync whenever config changes
agents syncThat's it. Your .agents/agents.json is now the single source of truth.
| Integration | MCP Servers | Skills | Instructions | How it syncs |
|---|---|---|---|---|
| Codex | ✅ | ✅ | ✅ | Writes .codex/config.toml |
| Claude Code | ✅ | ✅ | ✅ | Calls claude mcp add/remove CLI |
| Gemini CLI | ✅ | ✅ | ✅ | Writes .gemini/settings.json |
| Cursor | ✅ | ✅ | ✅ | Writes .cursor/mcp.json + CLI enable |
| Copilot | ✅ | ✅ | ✅ | Writes .vscode/mcp.json |
| Antigravity | ✅ | ✅ | ✅ | Writes to global user profile mcp.json |
| Windsurf | ✅ | ✅ | ✅ | Writes to global user profile ~/.codeium/windsurf/mcp_config.json + workspace .windsurf/skills |
| OpenCode | ✅ | ✅ | ✅ | Writes project opencode.json (mcp block) |
your-project/
├── AGENTS.md ← Instructions for all tools
├── .agents/
│ ├── agents.json ← MCP servers & config (commit this)
│ ├── local.json ← Secrets & overrides (gitignored)
│ ├── skills/ ← Reusable workflow definitions
│ │ └── my-skill/SKILL.md
│ └── generated/ ← Auto-generated artifacts (gitignored)
│ ├── codex.config.toml
│ ├── gemini.settings.json
│ ├── cursor.mcp.json
│ ├── windsurf.mcp.json
│ ├── opencode.json
│ └── ...
│
│ ┌─── Generated by `agents sync` ───┐
├── .codex/config.toml │ Materialized tool configs
├── .gemini/settings.json │ (gitignored in source-only mode)
├── .cursor/mcp.json │
├── .vscode/mcp.json │
├── opencode.json │
└── .claude/skills/ → .agents/skills │ Symlinked skill bridges
.cursor/skills/ → .agents/skills │
.gemini/skills/ → .agents/skills │
.windsurf/skills/ → .agents/skills│
Git strategy: By default only
.agents/agents.json,.agents/skills/, andAGENTS.mdare committed. Everything else is gitignored and regenerated withagents sync.
| Command | Description |
|---|---|
agents start |
Interactive setup wizard — integrations, MCP servers, skills, first sync |
agents init |
Scaffold .agents/ directory without guided setup |
agents sync |
Regenerate and materialize all tool configs |
agents sync --check |
Dry-run — exits 2 if config is out of sync |
agents watch |
Auto-sync on .agents/ file changes |
| Command | Description |
|---|---|
agents status |
Show integrations, MCP servers, file states, and live probes |
agents status --fast |
Skip external CLI probes for quicker output |
agents doctor |
Validate configs, check for issues, suggest fixes |
agents doctor --fix |
Auto-fix what can be fixed |
agents update |
Check for newer CLI version on npm |
| Command | Description |
|---|---|
agents mcp add <name> |
Add a server interactively |
agents mcp add <url> |
Import a server from URL (mcpservers.org, GitHub, etc.) |
agents mcp import --file config.json |
Bulk import from JSON/JSONC file |
agents mcp list |
List all configured servers |
agents mcp remove <name> |
Remove a server |
agents mcp test |
Validate server definitions |
agents mcp test --runtime |
Live connectivity check via tool CLIs |
| Command | Description |
|---|---|
agents connect --llm cursor,claude |
Enable integrations |
agents disconnect --llm codex |
Disable integrations |
agents reset |
Remove generated files, keep .agents/ |
agents reset --hard |
Full cleanup — removes everything |
┌──────────────────────────────────────────────────────────────┐
│ agents sync │
├──────────────────────────────────────────────────────────────┤
│ │
│ .agents/agents.json ─── merge ──→ Resolved ──→ Codex │
│ (shared) ↑ Registry TOML │
│ │ │ │
│ .agents/local.json ──────┘ ├────────→ Claude │
│ (secrets) │ CLI calls │
│ ├────────→ Gemini │
│ ${ENV_VARS} ─── resolve ─────────────┤ JSON │
│ ${PROJECT_ROOT} ├────────→ Cursor │
│ │ JSON + CLI │
│ ├────────→ Copilot │
│ │ VS Code │
│ ├────────→ Antigravity│
│ │ Global │
│ ├────────→ Windsurf │
│ │ Global MCP │
│ └────────→ OpenCode │
│ opencode.json │
│ │
│ .agents/skills/ ── symlink ──→ .claude/skills │
│ .cursor/skills │
│ .gemini/skills │
│ .windsurf/skills │
└──────────────────────────────────────────────────────────────┘
- Load — reads
.agents/agents.json+ merges secrets from.agents/local.json - Resolve — expands
${PROJECT_ROOT},${ENV_VAR}placeholders, filters byenabledandrequiredEnv - Route — sends each server to its target integrations (or all, if no
targetsspecified) - Generate — renders tool-specific config formats (TOML for Codex, JSON for others)
- Materialize — writes configs atomically (project-local and global targets), calls CLIs for Claude/Cursor
- Bridge skills — creates symlinks from tool directories to
.agents/skills/(including Windsurf workspace bridge)
agents mcp add https://mcpservers.org/servers/context7-mcpagents mcp add my-server \
--command "npx" \
--args "@my-org/mcp-server /path/to/project"agents mcp add company-api \
--url "https://api.company.com/mcp" \
--secret-header "Authorization=Bearer {{API_TOKEN}}"Secrets are automatically detected and split: placeholders go to
agents.json(committed), real values tolocal.json(gitignored).
# Only for Claude
agents mcp add claude-only-server --url "https://..." --target claude
# Only for Cursor and Copilot
agents mcp add ide-server --command "ide-mcp" --target cursor --target copilot_vscode| What | Where | |
|---|---|---|
| 🔓 | Server definitions, team config | .agents/agents.json — committed |
| 🔒 | API keys, tokens, secrets | .agents/local.json — gitignored |
How secrets work:
- When you add a server,
agentsdetects secret-like values (API keys, tokens, JWTs) - Secrets are moved to
local.jsonand replaced with${PLACEHOLDER}inagents.json agents doctorwarns if it finds literal secrets in committed config- All env keys and header names are validated to prevent injection
Lead sets up the project:
agents start
agents mcp add https://mcpservers.org/servers/context7-mcp
agents mcp add company-api --url "https://api.company.com/mcp" \
--secret-header "Authorization=Bearer {{API_TOKEN}}"
git add .agents/agents.json .agents/skills/ AGENTS.md && git commit -m "Add agents config"New member onboards:
git clone <repo> && cd <repo>
agents start # Prompts for API_TOKEN, syncs everythingOne command. Same MCP servers, same skills, same instructions. No drift.
Does this replace AGENTS.md?
No. It extends it.
AGENTS.md is human-readable guidance for LLMs; agents handles machine-readable config (MCP servers, skills) and keeps everything in sync.
Can I use this with only one tool?
Yes. You still get cleaner config management, safer git defaults, secret splitting, and easy MCP server management — even for a single tool.
Where should secrets live?
In
.agents/local.json (gitignored by default). The CLI automatically splits secrets from public config when you add MCP servers.
What happens during agents sync?
It reads your
.agents/ config, merges secrets, resolves placeholders, generates tool-specific files, and writes them atomically. For Claude and Cursor it also calls their CLIs to register servers. The whole process is idempotent and safe to run repeatedly.
How do I keep configs in sync automatically?
Run
agents watch — it polls .agents/ files and auto-syncs on changes. Or run agents sync manually after editing config.
Can I target an MCP server to specific tools only?
Yes. Add
"targets": ["claude", "cursor"] to a server definition in agents.json, or use the --target flag with agents mcp add. Servers without targets go to all enabled integrations.
| Resource | |
|---|---|
| 📖 | Usage Examples — solo dev, teams, monorepos, scripting |
| 🏗️ | System Architecture — sync internals, file formats, security model |
| 📋 | Changelog — version history and migration notes |
