Buckets:
Using Plugins
Now that you've built a plugin, let's learn how to install and use them, both your own and plugins from others. The process differs slightly across platforms, but the core idea is identical: discover → install → configure → use.
Installing Plugins
Installing Plugins in Claude Code
Claude Code installs plugins through marketplaces and the in-session /plugin command.
From a marketplace
/plugin marketplace add <owner>/<repo>
/plugin install <plugin-name>@<marketplace-name>
/plugin opens the plugin browser, where you can enable, disable, and uninstall plugins interactively.
From a local directory
For local development, point /plugin at a marketplace.json file that references your plugin directory:
{
"name": "local-example-plugins",
"owner": { "name": "you" },
"plugins": [
{
"name": "text-processor-plugin",
"source": "./text-processor-plugin",
"description": "Text analysis skills"
}
]
}
Then inside Claude Code:
/plugin marketplace add /absolute/path/to/marketplace.json
/plugin install text-processor-plugin@local-example-plugins
Claude Code reads .claude-plugin/plugin.json, loads skills from skills/, and starts MCP servers from .mcp.json.
Using Plugin Skills
Once loaded, skills are available conversationally or via explicit syntax:
Analyze the reading level of this paragraph
Or invoke with namespace:
/text-processor-plugin:check-reading-level
Managing Installed Plugins
Use /plugin to review installed plugins, enable or disable them, and uninstall them. After editing a local plugin, disable and re-enable it from /plugin to reload it.
Configuring Plugins
Set environment variables required by plugins:
export HF_TOKEN="hf_xxxxx"
Claude Code reads these from your shell environment when the plugin loads.
Installing Plugins in Codex
Codex plugins are installed either from the built-in plugin browser or from marketplace configuration files for local and unpublished plugins.
From the Plugin Browser
Open the plugin directory in the CLI:
/plugins
Search or browse, install the plugin, then start a new thread to use it.
From the Personal Marketplace
Copy the plugin into your personal plugin directory:
mkdir -p ~/.codex/plugins
cp -R /local/path/to/text-processor-plugin ~/.codex/plugins/text-processor-plugin
Then edit or create ~/.agents/plugins/marketplace.json:
Because source.path is resolved relative to ~/.agents/plugins/marketplace.json, the path needs to walk up from ~/.agents/plugins/ before pointing at ~/.codex/plugins/.
{
"name": "local-example-plugins",
"interface": {
"displayName": "Local Example Plugins"
},
"plugins": [
{
"name": "text-processor-plugin",
"source": {
"source": "local",
"path": "../../.codex/plugins/text-processor-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}
Codex:
- Reads
.codex-plugin/plugin.json - Loads skills from the
skills/directory - Sets up optional MCP servers from
.mcp.json - Caches plugin to
~/.codex/plugins/cache/$MARKETPLACE/$PLUGIN/$VERSION/
From a Repo Marketplace
Create $REPO_ROOT/.agents/plugins/marketplace.json in the repo that should expose the plugin list, keep the plugin folders at repo-relative paths such as ./plugins/text-processor-plugin, then restart Codex and open /plugins in that repo.
Using Plugins in Codex
Conversational Invocation
Ask Codex naturally. It routes your request to the right plugin:
What's the reading level of this README?
Codex:
- Recognizes this is a text analysis task
- Looks up the text-processor plugin's skills
- Invokes the appropriate skill with parameters
- Returns results
Using Plugin Skills
Codex plugins include skills for specific workflows. Type @ to choose a plugin or bundled skill explicitly:
@text-processor-plugin
Or conversationally:
Extract the top keywords from this document
Managing Plugins
Open the plugin browser to inspect installed plugins:
/plugins
If you edit ~/.agents/plugins/marketplace.json, update the local plugin directory, or change a plugin's enabled flag in ~/.codex/config.toml, restart Codex before testing again.
Configuring Codex Plugins
Set environment variables in your shell:
export HF_TOKEN="hf_xxxxx"
Codex reads environment variables when loading plugins. Optional MCP servers are started if .mcp.json includes mcpServers entries.
Installing Plugins in OpenCode
OpenCode plugins are JavaScript/TypeScript modules loaded at startup. Skills and MCP configuration are related extension surfaces, but they are not the plugin itself.
From Local Files
Place .js or .ts plugin files in one of the documented plugin directories:
.opencode/plugins/ # project-level plugins
~/.config/opencode/plugins/ # global plugins
Files in those directories are loaded automatically when OpenCode starts.
From npm
Add plugin package names to opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@your-org/text-processor-plugin"]
}
OpenCode installs npm plugins with Bun at startup.
What Stays Separate
If you also want reusable skills or the Unit 2 Python MCP server, configure those separately:
mkdir -p .opencode/skills/analyze-text
# Add SKILL.md to the directory
OpenCode discovers skills automatically from .opencode/skills/, .claude/skills/, and .agents/skills/.
Configure MCP servers separately in opencode.json:
{
"mcp": {
"text-processor": {
"type": "remote",
"url": "https://YOUR-USERNAME-text-processor-mcp.hf.space/gradio_api/mcp/"
}
}
}
Using Plugin Behavior
Once OpenCode starts, the plugin's hooks or custom tools are available:
Summarize this file and note any text-analysis follow-up that would help.
If the plugin adds hooks, they run as those events fire. If it adds custom tools, OpenCode can call them alongside built-in tools.
Managing Plugins
rm .opencode/plugins/text-processor-plugin.ts
Or remove the package name from the plugin array in opencode.json. Restart OpenCode after editing plugin files or the plugin list so startup picks up the new state.
Installing Packages in Pi
Pi's closest equivalent to a plugin is a Pi package: a local folder, git repo, or npm package that bundles skills, extensions, prompts, and themes.
From a local directory
pi install /local/path/to/text-processor-plugin -l
-l writes the package into .pi/settings.json for the current project.
From npm or git
pi install npm:@your-org/text-processor-plugin
pi install git:github.com/your-org/text-processor-plugin
Pairing with MCP
If the package's skills depend on the Unit 2 MCP server, install the adapter once and add the server to .mcp.json:
pi install npm:pi-mcp-adapter
{
"mcpServers": {
"text-processor": {
"url": "https://YOUR-USERNAME-text-processor-mcp.hf.space/gradio_api/mcp/"
}
}
}
Using Package Behavior
Once loaded, use the skill conversationally or explicitly:
What's the reading level of this README?
/skill:check-reading-level What's the reading level of this README?
Managing Packages
pi list
pi config
pi remove /local/path/to/text-processor-plugin
Use /reload inside Pi after editing local package files or .mcp.json.
Common Plugin Tasks
Configuring API Keys
All platforms need API keys for plugins that call external services.
Set environment variables in your shell before running Claude Code:
export HF_TOKEN="hf_xxxxx"
export OPENAI_API_KEY="sk_xxxxx"
Claude Code reads these when plugins load. No in-app configuration needed.
Set environment variables in your shell:
export HF_TOKEN="hf_xxxxx"
export GITHUB_TOKEN="ghp_xxxxx"
Set environment variables in your shell:
export HF_TOKEN="hf_xxxxx"
export GITHUB_TOKEN="ghp_xxxxx"
Or configure them directly in opencode.json under each MCP server's environment block.
Set environment variables in your shell:
export HF_TOKEN="hf_xxxxx"
Pi reads shell environment variables directly, and pi-mcp-adapter can interpolate them from .mcp.json server entries.
Troubleshooting Plugin Issues
Plugin not loading?
Check if .claude-plugin/plugin.json exists and is valid:
cat ./my-plugin/.claude-plugin/plugin.json
Ensure skills directory exists:
ls -la ./my-plugin/skills/
Re-enable the plugin from /plugin to reload it.
Check if plugin is in marketplace and properly formatted:
cat ~/.agents/plugins/marketplace.json
Verify .codex-plugin/plugin.json has correct skills and mcpServers paths:
{
"skills": "./skills/",
"mcpServers": "./.mcp.json"
}
Open the plugin browser:
/plugins
If you changed marketplace or config files, restart Codex before checking again.
Check that the plugin file is in a supported directory:
ls -la .opencode/plugins/
If you use npm-installed plugins, verify the plugin array in opencode.json. If the plugin imports external packages, make sure .opencode/package.json contains those dependencies. Then restart OpenCode so startup reloads the plugin.
Then inspect the installed package list:
pi list
Use /reload after fixing the local files so Pi refreshes the package in the current session.
Bundled or adjacent MCP server not starting?
Verify .mcp.json has valid JSON with mcpServers key:
cat ./.mcp.json
Re-enable the plugin from /plugin after editing the config.
MCP servers are optional in Codex plugins. If they aren't starting, check:
.codex-plugin/plugin.jsonpointsmcpServersat./.mcp.json.mcp.jsoncontains a validmcpServersobject- the marketplace entry points to the right plugin directory
Plugins and MCP servers are separate in OpenCode. If the separately configured server isn't starting, debug the MCP config:
opencode mcp debug text-processor
Check that opencode.json is valid JSON and MCP server commands point to existing files.
Pi packages and MCP are separate. If the package loads but the adapter does not see the server:
cat ./.mcp.json
Inside Pi, use:
/mcp
/mcp reconnect text-processor
/mcp tools
Check that pi-mcp-adapter is installed and the server entry uses a valid command/args or url.
Key Takeaways
In Claude Code, use /plugin marketplace add and /plugin install, with /plugin as the browser. In Codex, use /plugins plus repo or personal marketplace files, and restart after changes. In OpenCode, native plugins are JS/TS modules in .opencode/plugins/ or npm packages listed in opencode.json; skills and MCP servers remain separate extension points. In Pi, install packages with pi install, keep plugin-equivalent resources in package.json plus skills/ or extensions/, and pair them with pi-mcp-adapter when you need MCP tools.
Next up: a quiz on plugin distribution and best practices.
Xet Storage Details
- Size:
- 11.5 kB
- Xet hash:
- 6f939f986b6078d0cb39dc7c87ba590aa4c93878cadc20dfc487af5275b7bbaf
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.