rcube detects agentic plugin assets in any directory and transmutes them into provider-specific formats.
Supported asset types:
skillhookslash-commandsubagentmcp-server
Supported providers:
claudecursorcodexopencodecopilotroocode
Implementation modules currently live under plugin_converter/:
plugin_converter/cli.py- argument parsing and command handlersplugin_converter/detector.py- directory/type detection logicplugin_converter/converter.py- provider conversion engineplugin_converter/paths.py- global/project install path resolutionplugin_converter/resources.py- shared reference/script/asset dependency handlingplugin_converter/io_utils.py,plugin_converter/text_utils.py,plugin_converter/constants.py,plugin_converter/models.py- Public CLI entrypoints:
rcube ...(after installation)python3 -m rcube ...(module invocation)./bin/rcube ...(repo-local launcher)
If installed:
rcube detect <path>rcube convert <path> --provider all --scope projectrcube remove <path> --provider all --scope projectWithout installing:
python3 -m rcube detect <path>python3 -m rcube convert <path> --provider all --scope projectpython3 -m rcube remove <path> --provider all --scope projectInstall from PyPI (once published):
python3 -m pip install horadric-cubeor
pipx install horadric-cubeInstall from this repo (regular install):
python3 -m pip install .Install for development (editable):
python3 -m pip install -e .Install as an isolated global CLI (recommended for users):
pipx install .If you are in a network-restricted environment, use:
python3 -m pip install . --no-build-isolationAfter install, run:
rcube --helpProject-local conversion into the current repo:
rcube convert ./test_items/mp-govern --provider all --scope projectGlobal conversion into user-level provider paths:
rcube convert ./test_items/mp-govern --provider all --scope globalConvert only selected asset types:
rcube convert ./test_items --provider codex --types skill subagentDry run (no writes):
rcube convert ./test_items --provider all --dry-runWrite into a custom output directory:
rcube convert ./test_items --provider all --destination /tmp/converted-assetsBundle handling is directory-driven, not manifest-driven:
- Any source directory containing multiple asset types is treated as a bundle.
- Detection scans recursively and returns all detected items (
skill,hook,slash-command,subagent,mcp-server). - Conversion processes each detected item in one run and emits the type-specific output for the target provider.
Recommended bundle workflow:
rcube detect ./my-plugin-bundle
rcube convert ./my-plugin-bundle --provider all --scope project --destination /tmp/converted-bundlesWhen converting bundles with --provider all --destination ..., output is grouped per provider, then by type within that provider root.
- If
--provider allis used with--destination, output is grouped by provider:/tmp/converted-assets/claude/tmp/converted-assets/cursor- etc.
- Existing files are not overwritten unless
--overwriteis set. - Use
--jsonondetect,convert, orremovefor machine-readable output. - MCP config behavior:
- Install/convert merges server entries into existing MCP config files (does not replace whole files).
- Remove unmerges by server key/section and removes only matching entries.
- Other unrelated MCP entries remain intact.
- Shared plugin resources are dependency-hoisted:
- Skills: referenced
references/*,scripts/*, andassets/*are copied into each converted skill folder. - Subagents and slash commands: referenced shared paths are copied under the converted file's parent folder (for example
agents/references/*). - Non-Claude providers rewrite
${CLAUDE_PLUGIN_ROOT}/...paths to relative paths. - In bundles, this is applied per converted item so shared top-level resources remain available after split conversion.
- Skills: referenced
