Skip to main content

ai-config

Declarative plugin manager for Claude Code — with cross-tool conversion to Codex, Cursor, OpenCode, and Pi.

Why this exists

You've spent time building up your AI coding setup: custom skills, MCP servers, hooks, workflows. Then you want to try Codex or Pi, and you're starting from scratch. Or you get a new machine and have to remember what you installed.

ai-config solves both problems. You define your setup in one YAML file, then use it to:

  1. Install your Claude Code plugins reproducibly across machines with ai-config sync.
  2. Convert those plugins for other tools — same skills, same config, less manual porting.

No more vendor lock-in because your customizations are trapped in one tool's config directory. No more hand-maintaining Claude plugins, Codex packages, Cursor/OpenCode config, and Pi extensions.

Or more simply: run ai-config init and it walks you through the config.

What this isn't

This README does not have:

  • 14 shields.io badges declaring build status, coverage, npm downloads, discord members, twitter followers, and mass-to-charge ratio
  • A mass of emojis to make it look "friendly" and "approachable"
  • Claims about revolutionizing your development workflow
  • A "Quick Start" that's actually 73 steps
  • Screenshots of a dashboard that doesn't exist
  • A "Powered by AI" badge despite just being a for-loop

It's a config file and some commands. That's it.

Install

pip install ai-config-cli
# or
uv tool install ai-config-cli

This installs the ai-config command. Check that it resolves before changing any tool config:

ai-config --help

From source, use the repo URL instead:

uv tool install git+https://github.com/alex-furrier/ai-config

Quick start: preview before you sync

1. Create a config

ai-config init

The wizard adds marketplaces and plugins, then writes .ai-config/config.yaml unless you pass -o. If the wizard offers to run sync immediately, say no when you want to inspect the file first.

2. Preview the changes

ai-config sync --dry-run

This is the safe checkpoint. It shows what would be installed, removed, or converted without writing plugin output.

3. Apply the sync

ai-config sync --verify

This makes installed plugins match your config and verifies the result. If your config enables conversion, sync also writes target-tool output for Codex, Cursor, OpenCode, and Pi according to your conversion scope.

4. Check for problems

ai-config doctor

Claude Code loads plugins at session start. After sync changes plugins, restart Claude Code to apply them. Use claude --resume if you want to continue the previous session.

What sync does

A config can install Claude Code plugins and convert them for other tools:

version: 1
targets:
  - type: claude
    config:
      marketplaces:
        my-plugins:
          source: github
          repo: myorg/ai-plugins
      plugins:
        - id: code-review@my-plugins
          scope: user
      conversion:
        enabled: true
        targets: [codex, cursor, opencode, pi]
        scope: user

With conversion enabled, ai-config sync can write outputs such as:

  • Claude Code: plugins installed through Claude Code's plugin system
  • Codex: installable plugin packages and ai-config-owned local marketplaces under .ai-config/codex/; sync manages them through codex plugin
  • Cursor: skills, commands, hooks, and MCP config under .cursor/ or ~/.cursor/
  • OpenCode: skills plus opencode.json / opencode.lsp.json
  • Pi: skills, prompt templates, and hook extensions under .pi/ or ~/.pi/

The exact paths depend on conversion scope and output_dir. Codex 0.6.0 is a breaking migration from loose .codex output; review the Codex migration guide before syncing. See Configuration and Conversion for full rules.

Config lookup

By default, commands look for config in this order:

  1. .ai-config/config.yaml
  2. .ai-config/config.yml
  3. ~/.ai-config/config.yaml
  4. ~/.ai-config/config.yml

Project-local config wins over global config. Pass -c /path/to/config.yaml to use a specific file.

Relative local marketplace paths and conversion output paths are resolved from the config's project root. Environment variables and ~ are expanded at load time, so paths like $DOTS_REPO/plugins can stay portable in dotfiles.

Common workflows

Workflow Command Notes
Create or update config interactively ai-config init Writes .ai-config/config.yaml by default.
Preview sync ai-config sync --dry-run Use before the first real sync or after large config edits.
Apply and verify sync ai-config sync --verify Installs/uninstalls plugins and runs configured conversion.
See installed state ai-config status Add --verify to compare against config.
Validate config or output ai-config doctor Use --target codex, --target cursor, --target opencode, or --target pi for converted output.
Rebuild stale output ai-config sync --fresh Clears Claude's plugin cache and reconverts configured outputs while preserving target homes and ownership ledgers.
Re-run conversion only ai-config sync --force-convert Useful after changing conversion targets.
Develop local plugins ai-config watch Add --dry-run if you only want file-change reports.

For options and examples, use Commands. For target behavior and fidelity notes, use Conversion.

Development

git clone https://github.com/alex-furrier/ai-config.git
cd ai-config
uv sync --all-extras
uv run ruff check src/
uv run ty check src/
uv run pytest tests/unit/ -v

If you use just, the shortcut is:

just setup
just check

Troubleshooting

DO preview first, NOT blind sync, BECAUSE sync can install/uninstall plugins and write converted tool config.

ai-config sync --dry-run

DO use --fresh when Claude's cached plugins or converted output look stale, NOT hand-delete random target files first, BECAUSE sync preserves and reconciles its target ownership state.

ai-config sync --fresh

DO validate converted output with target doctor, NOT assume every Claude feature maps 1:1, BECAUSE some hooks, MCP settings, commands, and agents degrade or skip depending on the target.

ai-config doctor --target all ./output-dir

Further reading

  • Commands — complete CLI reference
  • Configuration — config schema, path resolution, scopes, and examples
  • Conversion — target mappings, dry runs, reports, and validation

License

MIT

Release files for ai-config-cli 0.6.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ai-config-cli 0.6.3
File Size Uploaded
ai_config_cli-0.6.3.tar.gz 413.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ai-config-cli 0.6.3
File Interpreter ABI Platform
ai_config_cli-0.6.3-py3-none-any.whl Python 3 none any Details

Total release size: 571.7 kB

Release files / ai_config_cli-0.6.3.tar.gz

Download URL ai_config_cli-0.6.3.tar.gz
Size 413.9 kB
Tags Source
SHA-256 checksum
How to use checksums
08a896299ad780da3830fbe49c9abc2452d779c8da1bc68219dc376ba9aceaed
BLAKE2b-256 checksum
How to use checksums
2adcc57fff0c3e56af9789f4631d33c3808966f54feb51ec18b3850e71fea2fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / ai_config_cli-0.6.3-py3-none-any.whl

Download URL ai_config_cli-0.6.3-py3-none-any.whl
Size 157.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d05697a552df2b75f75a0faebf3c4f645c47a672ca90ac0c3b0955507c35d2d
BLAKE2b-256 checksum
How to use checksums
40eb11b6bd3820073c88c96c27b1b325475437800506b15f1126c6b4df513255
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.6.3 This release

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page