Component Organization Patterns
Advanced patterns for organizing plugin components effectively.
Component Lifecycle
Discovery Phase
When Claude Code starts:
- Scan enabled plugins: Read
.claude-plugin/plugin.jsonfor each - Discover components: Look in default and custom paths
- Parse definitions: Read YAML frontmatter and configurations
- Register components: Make available to Claude Code
- Initialize: Start MCP servers, register hooks
Timing: Component registration happens during Claude Code initialization, not continuously.
Activation Phase
When components are used:
Commands: User types slash command β Claude Code looks up β Executes Agents: Task arrives β Claude Code evaluates capabilities β Selects agent Skills: Task context matches description β Claude Code loads skill Hooks: Event occurs β Claude Code calls matching hooks MCP Servers: Tool call matches server capability β Forwards to server
Command Organization Patterns
Flat Structure
Single directory with all commands:
commands/
βββ build.md
βββ test.md
βββ deploy.md
βββ review.md
βββ docs.md
When to use:
- 5-15 commands total
- All commands at same abstraction level
- No clear categorization
Advantages:
- Simple, easy to navigate
- No configuration needed
- Fast discovery
Categorized Structure
Multiple directories for different command types:
commands/ # Core commands
βββ build.md
βββ test.md
admin-commands/ # Administrative
βββ configure.md
βββ manage.md
workflow-commands/ # Workflow automation
βββ review.md
βββ deploy.md
Manifest configuration:
{
"commands": [
"./commands",
"./admin-commands",
"./workflow-commands"
]
}
When to use:
- 15+ commands
- Clear functional categories
- Different permission levels
Advantages:
- Organized by purpose
- Easier to maintain
- Can restrict access by directory
Hierarchical Structure
Nested organization for complex plugins:
commands/
βββ ci/
β βββ build.md
β βββ test.md
β βββ lint.md
βββ deployment/
β βββ staging.md
β βββ production.md
βββ management/
βββ config.md
βββ status.md
Note: Claude Code doesn't support nested command discovery automatically. Use custom paths:
{
"commands": [
"./commands/ci",
"./commands/deployment",
"./commands/management"
]
}
When to use:
- 20+ commands
- Multi-level categorization
- Complex workflows
Advantages:
- Maximum organization
- Clear boundaries
- Scalable structure
Agent Organization Patterns
Role-Based Organization
Organize agents by their primary role:
agents/
βββ code-reviewer.md # Reviews code
βββ test-generator.md # Generates tests
βββ documentation-writer.md # Writes docs
βββ refactorer.md # Refactors code
When to use:
- Agents have distinct, non-overlapping roles
- Users invoke agents manually
- Clear agent responsibilities
Capability-Based Organization
Organize by specific capabilities:
agents/
βββ python-expert.md # Python-specific
βββ typescript-expert.md # TypeScript-specific
βββ api-specialist.md # API design
βββ database-specialist.md # Database work
When to use:
- Technology-specific agents
- Domain expertise focus
- Automatic agent selection
Workflow-Based Organization
Organize by workflow stage:
agents/
βββ planning-agent.md # Planning phase
βββ implementation-agent.md # Coding phase
βββ testing-agent.md # Testing phase
βββ deployment-agent.md # Deployment phase
When to use:
- Sequential workflows
- Stage-specific expertise
- Pipeline automation
Skill Organization Patterns
Topic-Based Organization
Each skill covers a specific topic:
skills/
βββ api-design/
β βββ SKILL.md
βββ error-handling/
β βββ SKILL.md
βββ testing-strategies/
β βββ SKILL.md
βββ performance-optimization/
βββ SKILL.md
When to use:
- Knowledge-based skills
- Educational or reference content
- Broad applicability
Tool-Based Organization
Skills for specific tools or technologies:
skills/
βββ docker/
β βββ SKILL.md
β βββ references/
β βββ dockerfile-best-practices.md
βββ kubernetes/
β βββ SKILL.md
β βββ examples/
β βββ deployment.yaml
βββ terraform/
βββ SKILL.md
βββ scripts/
βββ validate-config.sh
When to use:
- Tool-specific expertise
- Complex tool configurations
- Tool best practices
Workflow-Based Organization
Skills for complete workflows:
skills/
βββ code-review-workflow/
β βββ SKILL.md
β βββ references/
β βββ checklist.md
β βββ standards.md
βββ deployment-workflow/
β βββ SKILL.md
β βββ scripts/
β βββ pre-deploy.sh
β βββ post-deploy.sh
βββ testing-workflow/
βββ SKILL.md
βββ examples/
βββ test-structure.md
When to use:
- Multi-step processes
- Company-specific workflows
- Process automation
Skill with Rich Resources
Comprehensive skill with all resource types:
skills/
βββ api-testing/
βββ SKILL.md # Core skill (1500 words)
βββ references/
β βββ rest-api-guide.md
β βββ graphql-guide.md
β βββ authentication.md
βββ examples/
β βββ basic-test.js
β βββ authenticated-test.js
β βββ integration-test.js
βββ scripts/
β βββ run-tests.sh
β βββ generate-report.py
βββ assets/
βββ test-template.json
Resource usage:
- SKILL.md: Overview and when to use resources
- references/: Detailed guides (loaded as needed)
- examples/: Copy-paste code samples
- scripts/: Executable test runners
- assets/: Templates and configurations
Hook Organization Patterns
Monolithic Configuration
Single hooks.json with all hooks:
hooks/
βββ hooks.json # All hook definitions
βββ scripts/
βββ validate-write.sh
βββ validate-bash.sh
βββ load-context.sh
hooks.json:
{
"PreToolUse": [...],
"PostToolUse": [...],
"Stop": [...],
"SessionStart": [...]
}
When to use:
- 5-10 hooks total
- Simple hook logic
- Centralized configuration
Event-Based Organization
Separate files per event type:
hooks/
βββ hooks.json # Combines all
βββ pre-tool-use.json # PreToolUse hooks
βββ post-tool-use.json # PostToolUse hooks
βββ stop.json # Stop hooks
βββ scripts/
βββ validate/
β βββ write.sh
β βββ bash.sh
βββ context/
βββ load.sh
hooks.json (combines):
{
"PreToolUse": ${file:./pre-tool-use.json},
"PostToolUse": ${file:./post-tool-use.json},
"Stop": ${file:./stop.json}
}
Note: Use build script to combine files, Claude Code doesn't support file references.
When to use:
- 10+ hooks
- Different teams managing different events
- Complex hook configurations
Purpose-Based Organization
Group by functional purpose:
hooks/
βββ hooks.json
βββ scripts/
βββ security/
β βββ validate-paths.sh
β βββ check-credentials.sh
β βββ scan-malware.sh
βββ quality/
β βββ lint-code.sh
β βββ check-tests.sh
β βββ verify-docs.sh
βββ workflow/
βββ notify-team.sh
βββ update-status.sh
When to use:
- Many hook scripts
- Clear functional boundaries
- Team specialization
Script Organization Patterns
Flat Scripts
All scripts in single directory:
scripts/
βββ build.sh
βββ test.py
βββ deploy.sh
βββ validate.js
βββ report.py
When to use:
- 5-10 scripts
- All scripts related
- Simple plugin
Categorized Scripts
Group by purpose:
scripts/
βββ build/
β βββ compile.sh
β βββ package.sh
βββ test/
β βββ run-unit.sh
β βββ run-integration.sh
βββ deploy/
β βββ staging.sh
β βββ production.sh
βββ utils/
βββ log.sh
βββ notify.sh
When to use:
- 10+ scripts
- Clear categories
- Reusable utilities
Language-Based Organization
Group by programming language:
scripts/
βββ bash/
β βββ build.sh
β βββ deploy.sh
βββ python/
β βββ analyze.py
β βββ report.py
βββ javascript/
βββ bundle.js
βββ optimize.js
When to use:
- Multi-language scripts
- Different runtime requirements
- Language-specific dependencies
Cross-Component Patterns
Shared Resources
Components sharing common resources:
plugin/
βββ commands/
β βββ test.md # Uses lib/test-utils.sh
β βββ deploy.md # Uses lib/deploy-utils.sh
βββ agents/
β βββ tester.md # References lib/test-utils.sh
βββ hooks/
β βββ scripts/
β βββ pre-test.sh # Sources lib/test-utils.sh
βββ lib/
βββ test-utils.sh
βββ deploy-utils.sh
Usage in components:
#!/bin/bash
source "${CLAUDE_PLUGIN_ROOT}/lib/test-utils.sh"
run_tests
Benefits:
- Code reuse
- Consistent behavior
- Easier maintenance
Layered Architecture
Separate concerns into layers:
plugin/
βββ commands/ # User interface layer
βββ agents/ # Orchestration layer
βββ skills/ # Knowledge layer
βββ lib/
βββ core/ # Core business logic
βββ integrations/ # External services
βββ utils/ # Helper functions
When to use:
- Large plugins (100+ files)
- Multiple developers
- Clear separation of concerns
Plugin Within Plugin
Nested plugin structure:
plugin/
βββ .claude-plugin/
β βββ plugin.json
βββ core/ # Core functionality
β βββ commands/
β βββ agents/
βββ extensions/ # Optional extensions
βββ extension-a/
β βββ commands/
β βββ agents/
βββ extension-b/
βββ commands/
βββ agents/
Manifest:
{
"commands": [
"./core/commands",
"./extensions/extension-a/commands",
"./extensions/extension-b/commands"
]
}
When to use:
- Modular functionality
- Optional features
- Plugin families
Best Practices
Naming
- Consistent naming: Match file names to component purpose
- Descriptive names: Indicate what component does
- Avoid abbreviations: Use full words for clarity
Organization
- Start simple: Use flat structure, reorganize when needed
- Group related items: Keep related components together
- Separate concerns: Don't mix unrelated functionality
Scalability
- Plan for growth: Choose structure that scales
- Refactor early: Reorganize before it becomes painful
- Document structure: Explain organization in README
Maintainability
- Consistent patterns: Use same structure throughout
- Minimize nesting: Keep directory depth manageable
- Use conventions: Follow community standards
Performance
- Avoid deep nesting: Impacts discovery time
- Minimize custom paths: Use defaults when possible
- Keep configurations small: Large configs slow loading