Creates, validates, publishes, and manages plugins for Claude Code and OpenCode coding agents. Handles plugin creation, marketplace setup, submission to directories, and deletion (with user confirmation).
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-driven-development:plugins-managementThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage plugins across coding agents: create, validate, publish, delete, and submit to official directories or npm.
Manage plugins across coding agents: create, validate, publish, delete, and submit to official directories or npm.
Supported agents:
.claude-plugin/plugin.json-based plugins, distributed via marketplaces.opencode/plugins/ or npm packages listed in opencode.jsonCRITICAL: Before performing any deletion, uninstall, or removal operation, you MUST use the AskUserQuestion tool to confirm with the user. Never delete/uninstall plugins or remove marketplaces without explicit user confirmation.
| Task | Command/Script |
|---|---|
| Create plugin | python scripts/init_plugin.py <name> |
| Create marketplace | python scripts/init_marketplace.py <name> |
| Validate plugin | python scripts/validate_plugin.py <path> |
| Validate marketplace | claude plugin validate <path> |
| Prepare submission | python scripts/prepare_submission.py <path> --email X --company-url Y |
| Install plugin | /plugin install <name>@<marketplace> |
| Delete plugin | /plugin uninstall <name>@<marketplace> |
| Test plugin (dev) | claude --plugin-dir ./my-plugin |
| Reload after edits | /reload-plugins |
| Cut release tag | claude plugin tag --push |
| List installed | claude plugin list [--json] [--available] |
| Update plugin | claude plugin update <name>@<marketplace> |
# Basic plugin with commands
python scripts/init_plugin.py my-plugin --path ./
# Full plugin with all components
python scripts/init_plugin.py my-plugin --path ./ --all
# Specific components
python scripts/init_plugin.py my-plugin --with-agents --with-skills
Flags:
--with-commands (default): Include commands directory--with-agents: Include agents directory--with-skills: Include skills directory--with-hooks: Include hooks configuration--with-mcp: Include MCP server configuration--all: Include all components--author "Name": Set author nameAfter creation:
.claude-plugin/plugin.json with plugin detailscommands/*.md with YAML frontmatteragents/*.md if neededREADME.md with documentation# Empty marketplace
python scripts/init_marketplace.py my-marketplace --path ./
# With initial plugin
python scripts/init_marketplace.py my-marketplace --with-plugin my-plugin
After creation:
.claude-plugin/marketplace.jsonplugins/ directorygit push origin mainUsers install with:
/plugin marketplace add username/my-marketplace
Marketplace references:
.claude-plugin/marketplace.jsonname that matches each plugin's plugin.json namesource (e.g., ./plugins/my-plugin), not absolute paths${CLAUDE_PLUGIN_ROOT} inside hooks and MCP configs referenced by marketplace pluginspython scripts/validate_plugin.py ./my-plugin
Validates:
Also consider:
claude plugin validate <path> for marketplace JSON validationTo GitHub:
cd my-marketplace
git init
git add .
git commit -m "Initial release"
git remote add origin https://github.com/user/my-marketplace.git
git push -u origin main
# Tag release
git tag -a v1.0.0 -m "Version 1.0.0"
git push origin v1.0.0
Distribution methods:
/plugin marketplace add user/repo/plugin marketplace add https://gitlab.com/user/repo.git/plugin marketplace add https://example.com/marketplace.json⚠️ ALWAYS confirm with user before deleting/uninstalling. Use AskUserQuestion to ask: "Are you sure you want to uninstall '[plugin-name]'? This action cannot be undone."
# Uninstall from Claude Code
/plugin uninstall plugin-name@marketplace-name
# Remove marketplace (confirm with user first!)
/plugin marketplace remove marketplace-name
To delete source files: First confirm with user via AskUserQuestion, then remove the plugin directory from the marketplace's plugins/ folder and update marketplace.json.
The submission script automatically gathers all required form fields using gh CLI and git.
Prerequisites:
gh CLI installed and authenticatedPrepare submission:
# Basic - gathers repo URL and SHA automatically
python scripts/prepare_submission.py ./my-plugin
# With required contact info
python scripts/prepare_submission.py ./my-plugin \
--email [email protected] \
--company-url https://yourcompany.com
# Copy SHA to clipboard
python scripts/prepare_submission.py ./my-plugin --copy-sha
# Save to JSON file
python scripts/prepare_submission.py ./my-plugin --output submission.json
# Open form in browser
python scripts/prepare_submission.py ./my-plugin --open-form
Form fields gathered automatically:
| Field | Source |
|---|---|
| Link to Plugin | gh repo view --json url |
| Full SHA | git rev-parse HEAD |
| Plugin Homepage | plugin.json homepage or repo URL |
| Plugin Name | plugin.json name |
| Plugin Description | plugin.json description (50-100 words) |
Fields you must provide:
--email: Primary contact email--company-url: Company/Organization URLSubmission requirements:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Optional manifest (auto-discovered if absent)
├── skills/ # Agent skills (preferred over commands/)
│ └── */SKILL.md
├── commands/ # Skills as flat .md files
│ └── *.md
├── agents/ # AI subagents
│ └── *.md
├── output-styles/ # Output style definitions (2026)
├── themes/ # Color themes (2026)
├── monitors/ # Background monitors (2026, v2.1.105+)
│ └── monitors.json
├── hooks/
│ └── hooks.json # Event handlers
├── bin/ # Executables added to PATH (2026)
├── settings.json # Default agent / subagentStatusLine (2026)
├── .mcp.json # MCP servers
├── .lsp.json # LSP server config (since v2.0.74)
├── package.json # Auto-installed dependencies (2026)
├── README.md # Documentation
├── CHANGELOG.md
└── LICENSE
For detailed reference: See references/plugin-guide.md
OpenCode (anomalyco/opencode v1.14.x) plugins are TypeScript/JavaScript modules — fundamentally different from Claude Code plugins.
| Task | Approach |
|---|---|
| Create local plugin | Drop .ts file in .opencode/plugins/ (project) or ~/.config/opencode/plugins/ (global) |
| Author npm plugin | npm init, add keywords: ["opencode-plugin"], depend on @opencode-ai/plugin |
| Install npm plugin | Add package name to opencode.json → "plugin": [...]; restart |
| Distribute | Publish to npm (no central marketplace) |
// .opencode/plugins/env-protection.ts
import type { Plugin } from "@opencode-ai/plugin"
export default (async () => ({
tool: {
execute: {
before: async (input, output) => {
if (output.args.filePath?.includes(".env")) {
throw new Error("Reading .env is forbidden")
}
},
},
},
})) satisfies Plugin
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
"opencode-helicone-session",
"@my-org/custom-plugin"
]
}
OpenCode runs bun install at startup. Cached at ~/.cache/opencode/node_modules/.
tool.execute.before throws to block)session.idle, file.edited, permission.asked, ...)tool.execute.* hooks do not fire for MCP tool calls — use the permission block in opencode.jsonSee references/opencode-plugins.md for the full OpenCode plugin reference.
skills/, commands/, agents/, hooks/, monitors/, themes/, output-styles/, bin/ at the plugin root (never inside .claude-plugin/).plugin.json. Only specify non-standard paths starting with ./.${CLAUDE_PLUGIN_ROOT} (cache path, changes per version) and ${CLAUDE_PLUGIN_DATA} (persistent across updates) in hooks and MCP/LSP/monitor config paths. Relative paths break after install.chmod +x scripts/*).plugins[].name must match the plugin's plugin.json name.version to use git SHA (every commit is a new version). Set version and bump for stable releases. Use claude plugin tag to cut release tags.---
description: What this command does
---
# Command Name
Instructions for Claude when command is invoked.
---
description: Agent specialty and purpose
---
# Agent Name
Detailed instructions and expertise.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
}
}
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["./servers/server.js"]
}
}
}
---
name: my-skill
description: What this skill does and when to use it
---
# Skill Title
Instructions for Claude when this skill is invoked.
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"description": "Short description",
"version": "1.0.0",
"author": { "name": "Author Name" },
"category": "productivity",
"keywords": ["tag1", "tag2"],
"strict": true
}
npx claudepluginhub codealive-ai/ai-driven-development --plugin ai-driven-developmentCreates, converts, validates, and publishes Claude Code plugins with Agent Skills, hooks, agents, and servers. Automates manifest generation, scanning, structure validation, and marketplace prep.
Guides Claude Code plugin creation, structure (plugin.json, commands/agents/skills/hooks), installation (/plugin), marketplaces, team workflows, testing, debugging, and settings. Delegates to docs-management.
Scaffolds Claude Code plugins (commands, agents, skills, MCP) with directory structure, required files, validation scripts, and marketplace integration for the AI assistant-code-plugins repo.