Provider Config Sync

Provider Config Sync

Unified management of AI-agent configuration across Claude, Codex, and Gemini, keeping native config files intact while enabling comparison, editing, and application of equivalent capabilities.

Category
Visit Server

README

<p align="center"> <img src="assets/icon.svg" alt="Provider Config Sync icon" width="112" height="112"> </p>

Provider Config Sync

One control plane for AI-agent configuration across Claude, Codex, and Gemini.

Provider Config Sync keeps each provider's native config files intact while giving teams a unified way to compare, edit, and apply equivalent capabilities across providers: instructions, memory, MCP servers, skills, commands, and custom agent definitions.

It is built for the messy reality of multi-provider agent workflows: every CLI has its own file layout, config syntax, and extension points. Provider Config Sync abstracts those differences without hiding them, so you can standardize what should be shared and preserve provider-specific power where it matters.

Why It Exists

AI coding agents are becoming operating environments, and their config files are no longer minor setup details. They shape token usage, tool access, context quality, answer correctness, agent effectiveness, and how much wall-clock time gets spent on every task. A small stale instruction, missing MCP server, or mismatched project memory can quietly make an agent slower, more expensive, less reliable, or just wrong.

That makes these files worth editing deliberately, even manually. Teams now carry important behavior in files like:

  • CLAUDE.md
  • AGENTS.md
  • GEMINI.md
  • .mcp.json
  • provider settings files
  • skills and custom subagent definitions
  • project memory files

The problem: those files represent the same capabilities in different formats.

Provider Config Sync gives those capabilities names, tracks a unified version, and shows each provider-specific version side by side so changes can move in either direction.

What You Get

  • Unified capabilities, native files Keep Claude, Codex, and Gemini using their own real config files. Provider Config Sync never replaces the provider-native configuration system.

  • Bidirectional sync Apply changes from unified to provider-specific files, or pull provider-specific changes back into unified tracking.

  • Structured normalization MCP servers, skills, and custom agents are converted into a common editable shape, then written back in each provider's native format.

  • Provider extensions stay visible Common fields can be managed consistently, while provider-only metadata remains editable instead of being discarded.

  • Token visibility Estimate config tokens per provider file, per unified capability, and across the whole project so config cost is visible.

  • Standalone backend Run the sync engine as a standalone FastAPI service without Better Claude.

  • Agent extension Expose the same sync engine as an MCP server for Goose and other MCP-capable agents.

  • Reusable frontend core Use the TypeScript diff/item helpers in your own UI.

  • Safer writes Writes use expected-content checks, atomic creation, and first-write backups to avoid silent clobbering.

Supported Capabilities

Capability Claude Codex Gemini
General instructions CLAUDE.md AGENTS.md GEMINI.md or configured context file
Project memory Claude project memory unified capability tracking unified capability tracking
MCP servers .mcp.json / settings config.toml settings.json
Skills .claude/skills .agents/skills .agents/skills / .gemini/skills
Commands / skills .claude/commands/*.md .agents/skills/command-*/SKILL.md .gemini/commands/*.toml
Custom agents Markdown frontmatter TOML Markdown frontmatter
Provider settings JSON/settings TOML JSON/settings

Repository Layout

packages/
  provider-config-sync-backend/
    src/provider_config_sync_backend/
      api.py          # discovery, conversion, apply/write API
      standalone.py   # standalone FastAPI app + CLI entrypoint

  provider-config-sync-core/
    src/
      diff.ts         # aligned diff rows, hunks, line/block apply helpers
      items.ts        # normalized item parsing helpers

Quick Start

Install the standalone package:

pipx install "better-agent-provider-config-sync-backend[all] @ git+https://github.com/ofekron/provider-config-sync.git#subdirectory=packages/provider-config-sync-backend"

Or clone and install locally:

git clone https://github.com/ofekron/provider-config-sync.git
cd provider-config-sync

python -m venv .venv
. .venv/bin/activate
pip install -e "packages/provider-config-sync-backend[server]"

Create a config file:

{
  "sync_home": "~/.provider-config-sync",
  "providers": [
    { "id": "claude", "name": "Claude", "kind": "claude", "config_dir": "~/.claude" },
    { "id": "codex", "name": "Codex", "kind": "codex", "config_dir": "~/.codex" },
    { "id": "gemini", "name": "Gemini", "kind": "gemini", "config_dir": "~/.gemini" }
  ],
  "projects": [
    { "path": "/absolute/path/to/your/project", "node_id": "primary" }
  ]
}

Run the API:

PROVIDER_CONFIG_SYNC_CONFIG=./provider-config-sync.json provider-config-sync-backend

Open:

http://127.0.0.1:8765/api/provider-config-sync?cwd=/absolute/path/to/your/project

Verify the standalone package:

python tests/test_standalone_package.py

Use With Agents

Goose can install custom MCP servers as extensions. Add Provider Config Sync as a stdio extension:

Name: Provider Config Sync
Command: provider-config-sync-mcp
Environment:
  PROVIDER_CONFIG_SYNC_CONFIG=/absolute/path/to/provider-config-sync.json

Then ask Goose to inspect or sync agent config capabilities for the current project. The MCP server exposes tools to list capabilities, read files, edit files with conflict checks, apply unified-to-specific changes, pull provider-specific changes into unified tracking, and manage structured items such as MCP servers, skills, commands, and agents.

To open the inline Goose UI, ask Goose to run:

open_provider_config_sync_gui

The Goose app renders from the same stdio MCP server with a ui://provider-config-sync/main MCP App resource. It lets users load a project, inspect token totals, edit provider or unified files, and apply a selected file to the matching unified/provider side without leaving Goose.

For a local checkout, use:

Command: /absolute/path/to/provider-config-sync/.venv/bin/provider-config-sync-mcp
Environment:
  PROVIDER_CONFIG_SYNC_CONFIG=/absolute/path/to/provider-config-sync/provider-config-sync.json

Install native commands/skills into the providers themselves:

provider-config-sync-install-agent-integrations

That installs:

~/.claude/commands/provider-config-sync.md
~/.agents/skills/provider-config-sync/SKILL.md
~/.gemini/commands/provider-config-sync.toml

Those commands/skills tell Claude Code, Codex, and Gemini to use the unified capability form first, then apply the capability to the other configured providers.

Run automatic reconciliation through your preferred CLI:

PROVIDER_CONFIG_SYNC_CONFIG=./provider-config-sync.json \
  provider-config-sync-automate --cli claude --prompt "Reconcile everything conservatively."

Supported --cli values are claude, codex, and gemini. The command runs the selected agent in non-interactive mode with the Provider Config Sync MCP server attached for that run, then asks it to reconcile global config plus every project listed in provider-config-sync.json.

API Surface

The standalone app mounts:

GET    /api/provider-config-sync
PUT    /api/provider-config-sync/file
POST   /api/provider-config-sync/apply
POST   /api/provider-config-sync/unified-capability-item
DELETE /api/provider-config-sync/unified-capability-item

Use GET /api/provider-config-sync?cwd=... to discover capabilities and file entries. The response includes unified entries and provider-specific entries with entry_id, content, existence, writability, estimated token counts, diff status, and provider metadata.

MCP Tools

list_provider_config_capabilities
read_provider_config_entry
write_provider_config_entry
apply_provider_config_entry
upsert_unified_capability_item
remove_unified_capability_item

Agents should list capabilities first, read the relevant entries, then pass the latest expected_content / expected_source / expected_target when writing or applying changes.

Library Usage

Backend:

from pathlib import Path
from provider_config_sync_backend.api import configure, router

configure(
    provider_records=lambda: [
        {"id": "claude", "name": "Claude", "kind": "claude", "config_dir": "~/.claude"},
        {"id": "codex", "name": "Codex", "kind": "codex", "config_dir": "~/.codex"},
    ],
    project_records=lambda: [{"path": "/repo", "node_id": "primary"}],
    sync_home=lambda: Path("~/.provider-config-sync").expanduser(),
)

Frontend:

import { buildAlignedDiffRows } from "@better-agent/provider-config-sync-core/diff";
import { parseMcpServers } from "@better-agent/provider-config-sync-core/items";

Design Principles

  • Native first: providers keep reading their own files.
  • Unified is a tracking layer: it helps compare and propagate equivalent capabilities; it is not a runtime replacement for provider config.
  • No silent overwrites: writes require the expected previous content.
  • Format abstraction, not format erasure: common fields get a common UI shape, provider-specific metadata survives round trips.
  • Portable core: the backend package has no Better Claude dependency.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured