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**:
```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