Manage, create, validate, and publish plugins for coding agents like Claude Code, OpenCode, and Devin.
- GitHub stars
- 173
- Files
- 7
- Last commit
- Nov 11, 2026
- License
- MIT
- Allowed tools
- —
What does the plugins-management skill do?
plugins-management is an agent skill. Manage, create, validate, and publish plugins for coding agents like Claude Code, OpenCode, and Devin.
Summary generated from the skill's SKILL.md.
About the plugins-management skill
Developers building extensions for coding agents can use this tool to manage the entire lifecycle of plugins for Claude Code, OpenCode, and Devin. It provides a structured way to create new plugins with specific components like commands, agents, skills, and MCP server configurations. By using the provided Python scripts, users can initialize plugin structures, set up marketplaces, and validate that manifests and frontmatter meet required standards.
The skill facilitates distribution by helping users publish to GitHub, GitLab, or npm. It also streamlines the process of submitting plugins to the official Anthropic directory by automatically gathering repository information and commit SHAs. When managing existing installations, the tool allows for updating or installing plugins from marketplaces, though it requires explicit user confirmation via the AskUserQuestion tool before performing any deletions or uninstalls to prevent accidental data loss.
What an agent can do with it
- 1Initialize a new pluginCreate a new plugin directory with specific components like agents and skills included.
- 2Validate plugin structureCheck a plugin directory to ensure it has the required fields, semantic versioning, and correct file formats.
- 3Prepare official submissionsGather all necessary repository details and contact information to prepare a plugin for the Anthropic directory.
- 4Set up a plugin marketplaceGenerate a new marketplace structure to host and distribute multiple plugins.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the plugins-management skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the plugins-management skill in Plugin
/plugin marketplace add CodeAlive-AI/ai-driven-development /plugin install ai-driven-development@ai-driven-development
Install the plugins-management skill in Claude Code
~/.claude/skills/plugins-management/SKILL.md
$ npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management ~/.claude/skills/plugins-managementInstall the plugins-management skill in Claude Code (project)
.claude/skills/plugins-management/SKILL.md
$ npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management .claude/skills/plugins-managementInstall the plugins-management skill in Codex
~/.agents/skills/plugins-management/SKILL.md
$ npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management ~/.agents/skills/plugins-managementInstall the plugins-management skill in Gemini CLI
~/.gemini/skills/plugins-management/SKILL.md
$ npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management ~/.gemini/skills/plugins-managementInstall the plugins-management skill in Claude.ai
npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management plugins-management && zip -r plugins-management.zip plugins-management # claude.ai → Customize → Skills → + → Create skill → Upload a skill → plugins-management.zip
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the scripts before you let an agent run them. How checks work
- Source repository linked and reachablecodealive-ai/ai-driven-development/skills/plugins-management is public and reachablegithub.com/codealive-ai/ai-driven-development/tree/HEAD/skil ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit 2026-11-11github.com/codealive-ai/ai-driven-development/commits ↗Pass
- No download-and-run or credential theft in scripts4 scripts read; no download-and-run, remote eval, base64 execution or credential uploadPass
- No hidden instructions in SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/codealive-ai/ai-driven-development/blob/HEAD/skil ↗Pass
- Pre-approved tools are scopedNo pre-approved tools; the agent asks before using onegithub.com/codealive-ai/ai-driven-development/blob/HEAD/skil ↗Pass
SKILL.md
View on GitHubPlugins Manager
Manage plugins across coding agents: create, validate, publish, delete, and submit to official directories or npm.
Supported agents:
- Claude Code:
.claude-plugin/plugin.json-based plugins, distributed via marketplaces - OpenCode: TypeScript/JavaScript plugins in
.opencode/plugins/or npm packages listed inopencode.json - Devin CLI / Desktop:
.devin-plugin/plugin.jsonmanifest inside a plugin source (GitHub repo, git URL,git-subdir, or local folder); installs skills (<plugin>:<skill>slash commands),AGENTS.md/rules/,agents/subagents,hooks.json, and.mcp.jsonas one unit. Managed withdevin pluginscommands; plugins also apply to Devin cloud sessions, subject to per-surface limits. The scripts in this skill target Claude/OpenCode manifests — for Devin, author the.devin-plugin/plugin.jsonby hand per the Devin docs.
CRITICAL: 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.
Quick Reference
| 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> |
Workflows
1. Create a New Plugin
# 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 name
After creation:
- Edit
.claude-plugin/plugin.jsonwith plugin details - Add commands to
commands/*.mdwith YAML frontmatter - Add agents to
agents/*.mdif needed - Update
README.mdwith documentation
2. Create a Marketplace
# 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:
- Edit
.claude-plugin/marketplace.json - Add plugins to
plugins/directory - Push to GitHub:
git push origin main
Users install with:
/plugin marketplace add username/my-marketplace
Marketplace references:
- Required file:
.claude-plugin/marketplace.json - Plugin entries must have
namethat matches each plugin'splugin.jsonname - Use relative paths in
source(e.g.,./plugins/my-plugin), not absolute paths - Use
${CLAUDE_PLUGIN_ROOT}inside hooks and MCP configs referenced by marketplace plugins
3. Validate a Plugin
python scripts/validate_plugin.py ./my-plugin
Validates:
- plugin.json required fields (name, description, version, author)
- Semantic versioning format
- Command/agent frontmatter
- Hooks and MCP configuration
- README.md and LICENSE presence
Also consider:
claude plugin validate <path>for marketplace JSON validation
4. Publish a Plugin
To 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:
- GitHub:
/plugin marketplace add user/repo - GitLab:
/plugin marketplace add https://gitlab.com/user/repo.git - URL:
/plugin marketplace add https://example.com/marketplace.json
5. Delete/Uninstall Plugins
⚠️ 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.
6. Submit to Anthropic's Official Directory
The submission script automatically gathers all required form fields using gh CLI and git.
Prerequisites:
- Plugin pushed to GitHub
ghCLI installed and authenticated- All validation checks pass
Prepare 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 your@email.com \
--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 URL
Submission requirements:
- Plugin must be pushed to GitHub
- Working directory should be clean (no uncommitted changes)
- Description should be 50-100 words
- README.md and LICENSE files present
- No secrets/API keys in code
Plugin Structure Reference
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 Plugins
OpenCode (anomalyco/opencode v1.14.x) plugins are TypeScript/JavaScript modules — fundamentally different from Claude Code plugins.
Quick reference
| 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) |
Minimal plugin
// .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
Register npm plugins
{
"$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/.
What plugins can do
- Add custom tools the AI can call (Zod-validated args)
- Intercept/block tool calls (
tool.execute.beforethrows to block) - Subscribe to ~25 lifecycle events (
session.idle,file.edited,permission.asked, ...) - Register custom slash commands and auth providers
- Transform messages or system prompts during context compaction (experimental)
Critical caveats (v1.14.x)
tool.execute.*hooks do not fire for MCP tool calls — use thepermissionblock inopencode.json- No central marketplace — distribute via npm and aggregators like awesome-opencode
- Plugins run in-process with full SDK access — audit third-party code before installing
See references/opencode-plugins.md for the full OpenCode plugin reference.
Critical Rules (Avoid Silent Failures)
- Keep
skills/,commands/,agents/,hooks/,monitors/,themes/,output-styles/,bin/at the plugin root (never inside.claude-plugin/). - Do not add standard component paths to
plugin.json. Only specify non-standard paths starting with./. - Use
${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. - Ensure hook scripts are executable (
chmod +x scripts/*). - Marketplace
plugins[].namemust match the plugin'splugin.jsonname. - Path traversal limit (2026): plugins cannot reference files outside their directory; use symlinks inside the plugin if needed.
- Versioning (2026): omit
versionto use git SHA (every commit is a new version). Setversionand bump for stable releases. Useclaude plugin tagto cut release tags.
Common Patterns
Command File Format
---
description: What this command does
---
# Command Name
Instructions for Claude when command is invoked.
Agent File Format
---
description: Agent specialty and purpose
---
# Agent Name
Detailed instructions and expertise.
Hooks Configuration
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
}
}
MCP Server Configuration
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["./servers/server.js"]
}
}
}
Skill File Format
---
name: my-skill
description: What this skill does and when to use it
---
# Skill Title
Instructions for Claude when this skill is invoked.
Marketplace Entry Example
{
"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
}
Files in this skill
7plugins-management skill questions
How do I install the plugins-management skill in Claude Code?
Run npx degit CodeAlive-AI/ai-driven-development/skills/plugins-management ~/.claude/skills/plugins-management. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the plugins-management skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
Which coding agents are supported by this skill?
The skill supports Claude Code, OpenCode, and Devin CLI/Desktop.
What should I do before deleting or uninstalling a plugin?
You must use the AskUserQuestion tool to get explicit confirmation from the user before performing any deletion, uninstall, or removal operation.
How are OpenCode plugins different from Claude Code plugins?
OpenCode plugins are TypeScript/JavaScript modules, whereas Claude Code plugins are based on .claude-plugin/plugin.json manifests.