Plugins & Marketplaces
Install reusable skill packs from catalogs — same name@marketplace shape as Claude Code / Grok Build.
MVP scope: plugins contribute skills (loaded into the agent catalog). MCP/hooks/agents inside plugins are not wired yet.
Marketplaces are cloned with git, so git must be installed and in PATH (on Windows: Git for Windows — which cast's bash tool wants anyway). Without it, marketplace commands fail with an explicit message rather than a raw spawn error.
Quick start
Three catalogs are always registered and can't be removed:
| Label | Source |
|---|---|
| Codex | openai/plugins |
| Claude | anthropics/claude-plugins-official |
| Grok | xai-org/plugin-marketplace |
They're seeded on first use of /plugin (a cheap check after that — no re-cloning). Browse and install straight away:
/plugin marketplace list
/plugin marketplace list xai-official
/plugin install superpowers@xai-official
/skills
Add your own catalog alongside the defaults:
/plugin marketplace add owner/repo # GitHub shorthand
/plugin marketplace add https://... # any git URL
/plugin marketplace add ./my-marketplace # local path (testing / private plugins)
Only marketplaces you added yourself can be removed with /plugin marketplace remove <name> — the three defaults reject removal.
Hot-reload
/plugin install, uninstall, enable / disable, bare /plugin toggle, and marketplace remove reload the skill catalog in the current session. No /reload and no new session.
/reload is only for skills/rules/MCP/personas you added or edited as files outside these commands. See Interactive commands.
Commands
Type /plugin in the composer — the palette lists every subcommand (install, marketplace list, …) with a short hint. Pick a row, then fill args if needed.
| Command | What it does |
|---|---|
/plugin | Toggle installed plugins on/off (same picker UX as /mcp / /skills) |
/plugin install <name>@<marketplace> | Fetch plugin, enable it, reload skills |
/plugin uninstall | Interactive: pick installed plugin, confirm, remove |
/plugin uninstall <name>@<marketplace> | Remove by ref (no picker) |
/plugin enable / disable <name>@<marketplace> | Toggle one plugin without the picker |
/plugin list | Installed plugins (text list) |
/plugin marketplace add <owner/repo|url|path> | Register a catalog |
/plugin marketplace list [name] | Known catalogs, or plugins in one |
/plugin marketplace update <name> | git pull / refresh checkout |
/plugin marketplace remove <name> | Drop catalog, installs, enabledPlugins keys; reload skills |
Layout on disk
~/.cast/plugins/
known_marketplaces.json
installed.json
marketplaces/<name>/ # catalog checkout
installs/<marketplace>/<plugin>/
Enabled state is stored in ~/.cast/settings.json under enabledPlugins ("name@marketplace": true|false).
Marketplace format
Cast reads any of:
.cast-plugin/marketplace.json.grok-plugin/marketplace.json.claude-plugin/marketplace.json
Compatible with Grok/Claude entries: relative ./plugins/foo, { "source": "url", "url", "sha", "path" }, { "source": "git-subdir", … }, { "type": "local", "path" }.
Skill discovery from a plugin
- If
<pluginRoot>/skills/exists → load that directory - Else → load
<pluginRoot>itself (skill-only repos)
Priority vs other skills: project > global > plugin > builtin > --skill paths.
A pack may contribute several skills; each is labeled with plugin · name@marketplace in /skills. Disabling a pack with /plugin keeps those skills visible but locked until the pack is re-enabled — they leave the agent catalog immediately.
On a name collision between two enabled plugins, the first id in sorted name@marketplace order wins.
--no-skills skips plugin skill dirs as well (same as project/global/builtin); --skill paths still load.