| # Component Organization Patterns |
|
|
| Advanced patterns for organizing plugin components effectively. |
|
|
| ## Component Lifecycle |
|
|
| ### Discovery Phase |
|
|
| When Claude Code starts: |
|
|
| 1. **Scan enabled plugins**: Read `.claude-plugin/plugin.json` for each |
| 2. **Discover components**: Look in default and custom paths |
| 3. **Parse definitions**: Read YAML frontmatter and configurations |
| 4. **Register components**: Make available to Claude Code |
| 5. **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**: |
| ```json |
| { |
| "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: |
|
|
| ```json |
| { |
| "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**: |
| ```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): |
| ```json |
| { |
| "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**: |
| ```bash |
| #!/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**: |
| ```json |
| { |
| "commands": [ |
| "./core/commands", |
| "./extensions/extension-a/commands", |
| "./extensions/extension-b/commands" |
| ] |
| } |
| ``` |
|
|
| **When to use**: |
| - Modular functionality |
| - Optional features |
| - Plugin families |
|
|
| ## Best Practices |
|
|
| ### Naming |
|
|
| 1. **Consistent naming**: Match file names to component purpose |
| 2. **Descriptive names**: Indicate what component does |
| 3. **Avoid abbreviations**: Use full words for clarity |
|
|
| ### Organization |
|
|
| 1. **Start simple**: Use flat structure, reorganize when needed |
| 2. **Group related items**: Keep related components together |
| 3. **Separate concerns**: Don't mix unrelated functionality |
|
|
| ### Scalability |
|
|
| 1. **Plan for growth**: Choose structure that scales |
| 2. **Refactor early**: Reorganize before it becomes painful |
| 3. **Document structure**: Explain organization in README |
|
|
| ### Maintainability |
|
|
| 1. **Consistent patterns**: Use same structure throughout |
| 2. **Minimize nesting**: Keep directory depth manageable |
| 3. **Use conventions**: Follow community standards |
|
|
| ### Performance |
|
|
| 1. **Avoid deep nesting**: Impacts discovery time |
| 2. **Minimize custom paths**: Use defaults when possible |
| 3. **Keep configurations small**: Large configs slow loading |
|
|