Loading...
Loading...
Guide for creating and validating Claude Code plugin.json files. Use when creating plugins, validating plugin schemas, or troubleshooting plugin configuration.
npx skill4agent add vinnie357/claude-skills claude-plugins.claude-plugin/plugin.json.claude-plugin/plugin.json{
"name": "plugin-name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "author@example.com",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"commands": ["./custom/commands/special.md"],
"agents": "./custom/agents/",
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"skills": ["./skills/skill-one", "./skills/skill-two"]
}nameversiondescriptionlicensekeywordshomepagerepositoryauthor.nameauthor.emailauthor.urlskillscommandsagentshooksmcpServers^[a-z0-9]+(-[a-z0-9]+)*$my-plugincore-skillselixir-toolsmyPluginmy_pluginMy-Pluginplugin-^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$1.0.02.1.31.0.0-beta.11.0.0+build.1231.0v1.0.01.0.0.0MITApache-2.0GPL-3.0BSD-3-ClauseISC./dependenciescategorystrictsourcetagskeywordsnu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin.nu .claude-plugin/plugin.jsonnu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin-paths.nu .claude-plugin/plugin.jsonnu ${CLAUDE_PLUGIN_ROOT}/scripts/init-plugin.nu.claude-plugin/plugin.jsonelixir-phoenixrust-toolscore-skills1.0.0-beta.1plugin-name/
├── .claude-plugin/
│ └── plugin.json
├── skills/
│ ├── skill-one/
│ └── skill-two/
├── commands/
└── agents/{
"skills": [
"./skills/skill-one",
"./skills/skill-two"
],
"commands": ["./commands"],
"agents": ["./agents"]
}versiondescriptionlicensekeywordsrepository// ❌ Invalid
"name": "myPlugin"
"name": "my_plugin"
"name": "My-Plugin"
// ✅ Valid
"name": "my-plugin"
"name": "core-skills"// ❌ Invalid (dependencies only in marketplace.json)
{
"name": "my-plugin",
"dependencies": ["other-plugin"]
}
// ✅ Valid
{
"name": "my-plugin",
"keywords": ["tool", "utility"]
}// ❌ Invalid (path not found)
"skills": ["./skills/nonexistent"]
// ✅ Valid (path exists with SKILL.md)
"skills": ["./skills/my-skill"]// ❌ Invalid
"version": "1.0"
"version": "v1.0.0"
// ✅ Valid
"version": "1.0.0"
"version": "2.1.3-beta.1"mkdir -p my-plugin/.claude-plugin
mkdir -p my-plugin/skillscd my-plugin
nu ${CLAUDE_PLUGIN_ROOT}/scripts/init-plugin.nu{
"name": "my-plugin",
"version": "0.1.0",
"description": "My plugin description",
"author": {
"name": "Your Name"
},
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"skills": []
}mkdir -p skills/my-skill{
"skills": ["./skills/my-skill"]
}nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin.nu .claude-plugin/plugin.jsonclaude-code install ./{
"hooks": {
"onInstall": "./scripts/install.sh",
"onUninstall": "./scripts/uninstall.sh"
}
}{
"hooks": "./config/hooks.json"
}{
"mcpServers": {
"filesystem": {
"command": "mcp-server-filesystem",
"args": ["./workspace"]
}
}
}{
"mcpServers": "./mcp-config.json"
}.claude-plugin/plugin.json./skills/namenu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin.nu .claude-plugin/plugin.json --verbosereferences/plugin-schema.mdreferences/plugin-examples.mdscripts/validate-plugin.nuvalidate-plugin-paths.nuinit-plugin.nuformat-plugin.nunu ${CLAUDE_PLUGIN_ROOT}/scripts/[script-name].nu [args]