SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
7f0ec95 verified
|
Raw
History Blame Contribute Delete
12.1 kB

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:

{
  "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

  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