🎯

plugin-structure

🎯Skill

from aiskillstore/marketplace

VibeIndex|
What it does

Generates a standardized plugin structure and configuration for Claude Code plugins, enabling automatic component discovery and maintainable architecture.

πŸ“¦

Part of

aiskillstore/marketplace(33 items)

plugin-structure

Installation

Server ConfigurationMCP server configuration block
{ "mcpServers": { "server-name": { "command": "node", "args": ...
πŸ“– Extracted from docs: aiskillstore/marketplace
29Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

This skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.

Overview

# Plugin Structure for Claude Code

Overview

Claude Code plugins follow a standardized directory structure with automatic component discovery. Understanding this structure enables creating well-organized, maintainable plugins that integrate seamlessly with Claude Code.

Key concepts:

  • Conventional directory layout for automatic discovery
  • Manifest-driven configuration in .claude-plugin/plugin.json
  • Component-based organization (commands, agents, skills, hooks)
  • Portable path references using ${CLAUDE_PLUGIN_ROOT}
  • Explicit vs. auto-discovered component loading

Directory Structure

Every Claude Code plugin follows this organizational pattern:

```

plugin-name/

β”œβ”€β”€ .claude-plugin/

β”‚ └── plugin.json # Required: Plugin manifest

β”œβ”€β”€ commands/ # Slash commands (.md files)

β”œβ”€β”€ agents/ # Subagent definitions (.md files)

β”œβ”€β”€ skills/ # Agent skills (subdirectories)

β”‚ └── skill-name/

β”‚ └── SKILL.md # Required for each skill

β”œβ”€β”€ hooks/

β”‚ └── hooks.json # Event handler configuration

β”œβ”€β”€ .mcp.json # MCP server definitions

└── scripts/ # Helper scripts and utilities

```

Critical rules:

  1. Manifest location: The plugin.json manifest MUST be in .claude-plugin/ directory
  2. Component locations: All component directories (commands, agents, skills, hooks) MUST be at plugin root level, NOT nested inside .claude-plugin/
  3. Optional components: Only create directories for components the plugin actually uses
  4. Naming convention: Use kebab-case for all directory and file names

Plugin Manifest (plugin.json)

The manifest defines plugin metadata and configuration. Located at .claude-plugin/plugin.json:

Required Fields

```json

{

"name": "plugin-name"

}

```

Name requirements:

  • Use kebab-case format (lowercase with hyphens)
  • Must be unique across installed plugins
  • No spaces or special characters
  • Example: code-review-assistant, test-runner, api-docs

Recommended Metadata

```json

{

"name": "plugin-name",

"version": "1.0.0",

"description": "Brief explanation of plugin purpose",

"author": {

"name": "Author Name",

"email": "author@example.com",

"url": "https://example.com"

},

"homepage": "https://docs.example.com",

"repository": "https://github.com/user/plugin-name",

"license": "MIT",

"keywords": ["testing", "automation", "ci-cd"]

}

```

Version format: Follow semantic versioning (MAJOR.MINOR.PATCH)

Keywords: Use for plugin discovery and categorization

Component Path Configuration

Specify custom paths for components (supplements default directories):

```json

{

"name": "plugin-name",

"commands": "./custom-commands",

"agents": ["./agents", "./specialized-agents"],

"hooks": "./config/hooks.json",

"mcpServers": "./.mcp.json"

}

```

Important: Custom paths supplement defaultsβ€”they don't replace them. Components in both default directories and custom paths will load.

Path rules:

  • Must be relative to plugin root
  • Must start with ./
  • Cannot use absolute paths
  • Support arrays for multiple locations

Component Organization

Commands

Location: commands/ directory

Format: Markdown files with YAML frontmatter

Auto-discovery: All .md files in commands/ load automatically

Example structure:

```

commands/

β”œβ”€β”€ review.md # /review command

β”œβ”€β”€ test.md # /test command

└── deploy.md # /deploy command

```

File format:

```markdown

---

name: command-name

description: Command description

---

Command implementation instructions...

```

Usage: Commands integrate as native slash commands in Claude Code

Agents

Location: agents/ directory

Format: Markdown files with YAML frontmatter

Auto-discovery: All .md files in agents/ load automatically

Example structure:

```

agents/

β”œβ”€β”€ code-reviewer.md

β”œβ”€β”€ test-generator.md

└── refactorer.md

```

File format:

```markdown

---

description: Agent role and expertise

capabilities:

- Specific task 1

- Specific task 2

---

Detailed agent instructions and knowledge...

```

Usage: Users can invoke agents manually, or Claude Code selects them automatically based on task context

Skills

Location: skills/ directory with subdirectories per skill

Format: Each skill in its own directory with SKILL.md file

Auto-discovery: All SKILL.md files in skill subdirectories load automatically

Example structure:

```

skills/

β”œβ”€β”€ api-testing/

β”‚ β”œβ”€β”€ SKILL.md

β”‚ β”œβ”€β”€ scripts/

β”‚ β”‚ └── test-runner.py

β”‚ └── references/

β”‚ └── api-spec.md

└── database-migrations/

β”œβ”€β”€ SKILL.md

└── examples/

└── migration-template.sql

```

SKILL.md format:

```markdown

---

name: Skill Name

description: When to use this skill

version: 1.0.0

---

Skill instructions and guidance...

```

Supporting files: Skills can include scripts, references, examples, or assets in subdirectories

Usage: Claude Code autonomously activates skills based on task context matching the description

Hooks

Location: hooks/hooks.json or inline in plugin.json

Format: JSON configuration defining event handlers

Registration: Hooks register automatically when plugin enables

Example structure:

```

hooks/

β”œβ”€β”€ hooks.json # Hook configuration

└── scripts/

β”œβ”€β”€ validate.sh # Hook script

└── check-style.sh # Hook script

```

Configuration format:

```json

{

"PreToolUse": [{

"matcher": "Write|Edit",

"hooks": [{

"type": "command",

"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate.sh",

"timeout": 30

}]

}]

}

```

Available events: PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification

Usage: Hooks execute automatically in response to Claude Code events

MCP Servers

Location: .mcp.json at plugin root or inline in plugin.json

Format: JSON configuration for MCP server definitions

Auto-start: Servers start automatically when plugin enables

Example format:

```json

{

"mcpServers": {

"server-name": {

"command": "node",

"args": ["${CLAUDE_PLUGIN_ROOT}/servers/server.js"],

"env": {

"API_KEY": "${API_KEY}"

}

}

}

}

```

Usage: MCP servers integrate seamlessly with Claude Code's tool system

Portable Path References

${CLAUDE_PLUGIN_ROOT}

Use ${CLAUDE_PLUGIN_ROOT} environment variable for all intra-plugin path references:

```json

{

"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/run.sh"

}

```

Why it matters: Plugins install in different locations depending on:

  • User installation method (marketplace, local, npm)
  • Operating system conventions
  • User preferences

Where to use it:

  • Hook command paths
  • MCP server command arguments
  • Script execution references
  • Resource file paths

Never use:

  • Hardcoded absolute paths (/Users/name/plugins/...)
  • Relative paths from working directory (./scripts/... in commands)
  • Home directory shortcuts (~/plugins/...)

Path Resolution Rules

In manifest JSON fields (hooks, MCP servers):

```json

"command": "${CLAUDE_PLUGIN_ROOT}/scripts/tool.sh"

```

In component files (commands, agents, skills):

```markdown

Reference scripts at: ${CLAUDE_PLUGIN_ROOT}/scripts/helper.py

```

In executed scripts:

```bash

#!/bin/bash

# ${CLAUDE_PLUGIN_ROOT} available as environment variable

source "${CLAUDE_PLUGIN_ROOT}/lib/common.sh"

```

File Naming Conventions

Component Files

Commands: Use kebab-case .md files

  • code-review.md β†’ /code-review
  • run-tests.md β†’ /run-tests
  • api-docs.md β†’ /api-docs

Agents: Use kebab-case .md files describing role

  • test-generator.md
  • code-reviewer.md
  • performance-analyzer.md

Skills: Use kebab-case directory names

  • api-testing/
  • database-migrations/
  • error-handling/

Supporting Files

Scripts: Use descriptive kebab-case names with appropriate extensions

  • validate-input.sh
  • generate-report.py
  • process-data.js

Documentation: Use kebab-case markdown files

  • api-reference.md
  • migration-guide.md
  • best-practices.md

Configuration: Use standard names

  • hooks.json
  • .mcp.json
  • plugin.json

Auto-Discovery Mechanism

Claude Code automatically discovers and loads components:

  1. Plugin manifest: Reads .claude-plugin/plugin.json when plugin enables
  2. Commands: Scans commands/ directory for .md files
  3. Agents: Scans agents/ directory for .md files
  4. Skills: Scans skills/ for subdirectories containing SKILL.md
  5. Hooks: Loads configuration from hooks/hooks.json or manifest
  6. MCP servers: Loads configuration from .mcp.json or manifest

Discovery timing:

  • Plugin installation: Components register with Claude Code
  • Plugin enable: Components become available for use
  • No restart required: Changes take effect on next Claude Code session

Override behavior: Custom paths in plugin.json supplement (not replace) default directories

Best Practices

Organization

  1. Logical grouping: Group related components together

- Put test-related commands, agents, and skills together

- Create subdirectories in scripts/ for different purposes

  1. Minimal manifest: Keep plugin.json lean

- Only specify custom paths when necessary

- Rely on auto-discovery for standard layouts

- Use inline configuration only for simple cases

  1. Documentation: Include README files

- Plugin root: Overall purpose and usage

- Component directories: Specific guidance

- Script directories: Usage and requirements

Naming

  1. Consistency: Use consistent naming across components

- If command is test-runner, name related agent test-runner-agent

- Match skill directory names to their purpose

  1. Clarity: Use descriptive names that indicate purpose

- Good: api-integration-testing/, code-quality-checker.md

- Avoid: utils/, misc.md, temp.sh

  1. Length: Balance brevity with clarity

- Commands: 2-3 words (review-pr, run-ci)

- Agents: Describe role clearly (code-reviewer, test-generator)

- Skills: Topic-focused (error-handling, api-design)

Portability

  1. Always use ${CLAUDE_PLUGIN_ROOT}: Never hardcode paths
  2. Test on multiple systems: Verify on macOS, Linux, Windows
  3. Document dependencies: List required tools and versions
  4. Avoid system-specific features: Use portable bash/Python constructs

Maintenance

  1. Version consistently: Update version in plugin.json for releases
  2. Deprecate gracefully: Mark old components clearly before removal
  3. Document breaking changes: Note changes affecting existing users
  4. Test thoroughly: Verify all components work after changes

Common Patterns

Minimal Plugin

Single command with no dependencies:

```

my-plugin/

β”œβ”€β”€ .claude-plugin/

β”‚ └── plugin.json # Just name field

└── commands/

└── hello.md # Single command

```

Full-Featured Plugin

Complete plugin with all component types:

```

my-plugin/

β”œβ”€β”€ .claude-plugin/

β”‚ └── plugin.json

β”œβ”€β”€ commands/ # User-facing commands

β”œβ”€β”€ agents/ # Specialized subagents

β”œβ”€β”€ skills/ # Auto-activating skills

β”œβ”€β”€ hooks/ # Event handlers

β”‚ β”œβ”€β”€ hooks.json

β”‚ └── scripts/

β”œβ”€β”€ .mcp.json # External integrations

└── scripts/ # Shared utilities

```

Skill-Focused Plugin

Plugin providing only skills:

```

my-plugin/

β”œβ”€β”€ .claude-plugin/

β”‚ └── plugin.json

└── skills/

β”œβ”€β”€ skill-one/

β”‚ └── SKILL.md

└── skill-two/

└── SKILL.md

```

Troubleshooting

Component not loading:

  • Verify file is in correct directory with correct extension
  • Check YAML frontmatter syntax (commands, agents, skills)
  • Ensure skill has SKILL.md (not README.md or other name)
  • Confirm plugin is enabled in Claude Code settings

Path resolution errors:

  • Replace all hardcoded paths with ${CLAUDE_PLUGIN_ROOT}
  • Verify paths are relative and start with ./ in manifest
  • Check that referenced files exist at specified paths
  • Test with echo $CLAUDE_PLUGIN_ROOT in hook scripts

Auto-discovery not working:

  • Confirm directories are at plugin root (not in .claude-plugin/)
  • Check file naming follows conventions (kebab-case, correct extensions)
  • Verify custom paths in manifest are correct
  • Restart Claude Code to reload plugin configuration

Conflicts between plugins:

  • Use unique, descriptive component names
  • Namespace commands with plugin name if needed
  • Document potential conflicts in plugin README
  • Consider command prefixes for related functionality

---

For detailed examples and advanced patterns, see files in references/ and examples/ directories.

More from this repository10

🎯
agent-development🎯Skill

[Detailed explanation] ``` ### model (optional) Specifies which model to use for this agent. **Options:** - `inherit` (default, uses current conversation model) - `claude-2.1` - `claude-instant-...

🎯
frontend-design🎯Skill

Crafts distinctive, production-grade frontend interfaces with exceptional design quality, avoiding generic AI aesthetics.

🎯
command-development🎯Skill

Guides developers in creating powerful, configurable slash commands using Markdown and YAML for Claude Code, enabling dynamic, reusable workflow automation.

🎯
skill-development🎯Skill

Guides developers in creating, structuring, and optimizing Claude Code plugin skills with comprehensive best practices and modular design principles.

🎯
skill-creator🎯Skill

Guides users through creating or updating skills to extend Codex's capabilities with specialized knowledge and workflows.

🎯
mcp-integration🎯Skill

Enables seamless integration of external services and tools into Claude Code plugins using Model Context Protocol (MCP) server configurations.

🎯
plugin-settings🎯Skill

Manages per-project plugin configuration and state using `.claude/plugin-name.local.md` files with YAML frontmatter and markdown content.

🎯
hook-development🎯Skill

Enables advanced, context-aware hook development for Claude Code plugins with flexible prompt-based and command-driven event automation.

🎯
skill-installer🎯Skill

Installs Codex skills from curated lists or GitHub repos, supporting public and private skill sources with flexible installation options.

🎯
canvas-design🎯Skill

Generates original visual design philosophies and transforms them into artistic .png or .pdf documents with minimal text and high aesthetic impact.