cc-plugin-to-codex
Bridge Claude Code marketplace
plugins into Codex. Every source plugin
becomes a cc-<name> Codex bridge, CC agent Markdown files are converted into
Codex TOML agents, and everything is marked with an x-cc-bridge tag so list,
update, and uninstall can cleanly manage them later.
Features
- Multi-source: accept a Git URL or a local marketplace checkout; interactive
mode can also scan
~/.claude/plugins/marketplaces/for every local market. - Dual scope: install either globally (
~/.codex/,~/.agents/) or per project ($PWD/.codex/,$PWD/.agents/). - Atomic swap: each plugin is staged in a sibling temp directory and swapped in with a POSIX rename, so a crash mid-sync leaves no half-written state.
- Dual-mode CLI:
- TTY:
questionary-driven selectors for source, plugins, scope, bridges. - Non-TTY /
--yes/--json/--non-interactive: strict mode — missing required flags fail loudly instead of hanging.
- TTY:
- Safe re-sync: stale agents removed automatically; switching source on the
same bridge is refused unless
--force. - Hands-off marker: user-authored plugins / agents without
x-cc-bridgeare never touched.
Installation
uvx (recommended, zero install)
uv ships with a one-shot runner:
uvx --from cc-plugin-to-codex cc2codex --help
Every invocation grabs the latest released version from PyPI. Add a shell alias if you use it often:
alias cc2codex='uvx --from cc-plugin-to-codex cc2codex'
uv tool install (persistent)
uv tool install cc-plugin-to-codex
cc2codex --help
Upgrade later with:
uv tool upgrade cc-plugin-to-codex
Plain pip
pip install cc-plugin-to-codex
cc2codex --help
Commands
| Command | Purpose |
|---|---|
cc2codex plugin-browse |
List plugins exposed by a source marketplace. Read-only. |
cc2codex plugin-sync |
Install bridge plugins (skills + subagents) into Codex. |
cc2codex plugin-list |
Show installed bridges and their scope paths. |
cc2codex plugin-update |
Re-sync a bridge from the source recorded in its marker. |
cc2codex plugin-uninstall |
Remove bridge plugins by x-cc-bridge marker. |
Each command supports --help for the full flag reference.
Asking an AI to drive cc2codex
A ready-made, agent-optimized skill file lives at
skills/cc2codex/SKILL.md.
It is written in the format Claude / Codex agents consume (frontmatter
trigger + full flag / schema reference / strict-mode rules / pitfalls).
If you want an AI assistant — inside Claude Code, Codex, or any chat
tool that can read a URL — to operate cc2codex for you, paste the raw
URL above into the conversation and tell it "read this before you
run any cc2codex command". The assistant will then know which flags
are mandatory in non-interactive mode, how the x-cc-bridge marker
semantics work, and the post-install Codex restart step users
frequently forget.
Quick start
Browse a marketplace:
cc2codex plugin-browse --source https://github.com/your-org/your-cc-marketplace.git
Sync specific plugins to the global Codex scope:
cc2codex plugin-sync \
--source https://github.com/your-org/your-cc-marketplace.git \
--plugin ios-dev --plugin base \
--scope global \
--yes
Sync every plugin to the current project:
cc2codex plugin-sync \
--source /path/to/local/cc-marketplace \
--all-plugins --scope project \
--yes
AI / scripting flow — full JSON output, no prompts:
cc2codex plugin-sync \
--source <url> --all-plugins --scope global \
--non-interactive --json
List, update, remove:
cc2codex plugin-list
cc2codex plugin-update --all --scope global --yes
cc2codex plugin-uninstall cc-ios-dev --scope global --yes
Codex needs one manual step after
plugin-syncCodex does not hot-reload
~/.agents/plugins/marketplace.json. After the firstplugin-sync, restart Codex (or open a new session) and run/pluginsto install the bridge from the "CC Bridged Plugins" marketplace. Until then Codex will not load the skills and agents.
How it works
For each selected plugin, plugin-sync:
- Resolves the source (Git clone into
/tmp, or reads the local path). - Copies the plugin directory to
cc-<name>/, blacklisting CC-only mechanisms (hooks/,commands/,agents/,.claude-plugin/) and VCS/build noise (__pycache__,.git,.DS_Store, …). Skills, scripts, assets, and docs survive. - Writes
.codex-plugin/plugin.jsonwith thex-cc-bridgemarker (source URL, ref, commit SHA, synced timestamp, agent list, …). - Converts every
agents/*.mdto acc_<plugin>_<agent>.tomlunder~/.codex/agents/, prefixing each file with a# x-cc-bridge: {…}comment so later runs recognise them as tool-generated. - Upserts the entry into
marketplace.jsonwithpolicy.installation = INSTALLED_BY_DEFAULT.
Re-syncing the same source compares the old marker's agents list with the new
one and unlinks stale bridge agents; hand-authored TOMLs never match the marker
and are kept.
Development
git clone https://github.com/ProAlexUSC/cc-plugin-to-codex
cd cc-plugin-to-codex
uv sync --extra dev
uv run pytest -v
CI runs the same pytest across Python 3.11 / 3.12 / 3.13 on Ubuntu and macOS.
Releasing
- Bump
versioninpyproject.tomland updateCHANGELOG.md. - Commit and tag:
git tag v0.X.Y && git push origin v0.X.Y. - The
Publish to PyPIworkflow builds the wheel + sdist and uploads them via PyPI Trusted Publishing. Configure the trusted publisher once on PyPI withworkflow = publish.ymlandenvironment = pypi.
License
MIT.
Metadata
Release files for cc-plugin-to-codex 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cc_plugin_to_codex-0.1.0.tar.gz | 21.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cc_plugin_to_codex-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.9 kB
Release files / cc_plugin_to_codex-0.1.0.tar.gz
| Download URL | cc_plugin_to_codex-0.1.0.tar.gz |
|---|---|
| Size | 21.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
177ff668268fbd8c84b1fe7972e4aca13d16b25498d0712f905b70590aaf8943
|
|
BLAKE2b-256 checksum How to use checksums |
cd5b719e2e033a1f4aead93cceadfc6cf820e738d5f5ed55381e8f71f177e4a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 16, 2026.
Transparency logRelease files / cc_plugin_to_codex-0.1.0-py3-none-any.whl
| Download URL | cc_plugin_to_codex-0.1.0-py3-none-any.whl |
|---|---|
| Size | 25.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b6442a7d5fadbabc08ca26c943ca3005e9328f253d351babbc98d476070bcd2
|
|
BLAKE2b-256 checksum How to use checksums |
2c2c83ad10430b707df170cbbb203a79cee9b7b855cb2f4c89ce25deda99c417
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 16, 2026.
Transparency log