Plugins & Marketplaces
Plugins extend AI agents with bundled tools, skills, rules, hooks, and MCP servers. Marketplaces provide registries or collections where plugins can be discovered and installed.
aix provides first-class configuration for plugins and marketplaces via ai.json, configuring native plugin registries where supported and automatically converting and unpacking plugin components for editors without native plugin systems.
Configuration
Section titled “Configuration”Add plugins and marketplaces to ai.json:
{ "plugins": { "skill-creator@claude-plugins-official": true, "custom-tools": { "source": "./plugins/custom-tools", "enabled": true } }, "marketplaces": { "claude-plugins-official": "https://github.com/anthropics/claude-plugins-official", "team-marketplace": { "source": "https://github.com/my-org/marketplace", "type": "git" } }}CLI Commands
Section titled “CLI Commands”# Add a marketplaceaix add marketplace https://github.com/anthropics/claude-plugins-official --name claude-plugins-official
# Add a plugin from a marketplace or local pathaix add plugin skill-creator@claude-plugins-officialaix add plugin ./plugins/custom-tools --name custom-tools
# List configured plugins and marketplacesaix list pluginsaix list marketplaces
# Remove a plugin or marketplaceaix remove plugin skill-creator@claude-plugins-officialaix remove marketplace claude-plugins-officialNative Support vs Compatibility Unpacking
Section titled “Native Support vs Compatibility Unpacking”Different editors have different levels of support for plugins and marketplaces:
-
Native Plugin Editors (
claude-code,opencode,copilot,cursor):- Claude Code: Writes enabled plugins to
enabledPluginsand marketplaces toextraKnownMarketplacesin.claude/settings.json(project) or~/.claude/settings.json(user). - OpenCode: Writes plugin references or paths to the
pluginsarray inopencode.json(project) or~/.config/opencode/opencode.json(user). - Copilot: Writes
.github/copilot-plugins.jsonand.github/copilot-marketplaces.json(project) or~/.config/github-copilot/(user). - Cursor: Writes
.cursor-plugin/plugin.jsonand.cursor-plugin/marketplaces.jsonat project scope. (Cursor has no user-scope plugin configuration).
- Claude Code: Writes enabled plugins to
-
Compatibility Unpacking for Non-Native Editors (
codex,windsurf,zed,antigravity,grok):- Editors without a native plugin engine cannot load Claude/OpenCode plugin bundles directly.
- For local or resolved plugin directories,
aixautomatically discovers bundled components:- Skills: Discovered from
<pluginDir>/skills/*/SKILL.mdor<pluginDir>/SKILL.md. - Rules: Discovered from
<pluginDir>/rules/*.mdor*.mdc. - MCP Servers: Discovered from
<pluginDir>/.mcp.jsonor<pluginDir>/mcp.json.
- Skills: Discovered from
- These components are unpacked and installed directly into the target editor’s native directories (e.g.
.agents/skills/,.windsurf/rules/, etc.).
What Happens When a Skill, Rule, or Hook Collides with a Plugin?
Section titled “What Happens When a Skill, Rule, or Hook Collides with a Plugin?”If your ai.json defines a skill, rule, MCP server, or hook that is also provided by an active plugin, behavior is governed by strict precedence and namespacing:
1. In Editors with Native Plugin Support
Section titled “1. In Editors with Native Plugin Support”- Skills: Native editors like Claude Code resolve local project-level skills first. When a local skill in
.claude/skills/<name>shares a name with a skill bundled inside an enabled plugin, the local project skill takes precedence. - Hooks: Both user-defined hooks and plugin hooks execute. In Claude Code, hooks registered in
.claude/settings.jsonand hooks provided by active plugins both trigger on matching lifecycle events, running sequentially. - MCP Servers: Servers explicitly declared in
mcp(.mcp.json) run alongside any servers spun up by enabled plugins.
2. In Non-Native Editors via Compatibility Unpacking
Section titled “2. In Non-Native Editors via Compatibility Unpacking”When aix unpacks a plugin for non-native editors, it employs two layers of conflict protection:
-
Automatic Namespace Prefixing:
- Every unpacked component is automatically namespaced using the plugin’s name:
${pluginName}-${componentName}. - For example, if plugin
skill-creatorcontains a skill namedeval-viewerand a ruleguidelines.md,aixunpacks them asskill-creator-eval-viewerandskill-creator-guidelines. - Because user-defined skills and rules in
ai.jsonare authored without the plugin prefix (e.g.eval-viewer), their keys do not collide.
- Every unpacked component is automatically namespaced using the plugin’s name:
-
Explicit User Config Always Overrides (
...unpacked, ...userConfig):- If a collision occurs (for instance, if you explicitly define a skill or rule named
skill-creator-eval-viewerin yourai.json),aixmerges unpacked components underneath your configuration:skills: { ...unpacked.skills, ...config.skills },mcp: { ...unpacked.mcp, ...config.mcp },rules: { ...unpacked.rules, ...config.rules }, - Your explicit
ai.jsondefinitions always override plugin-provided components.
- If a collision occurs (for instance, if you explicitly define a skill or rule named