|
Download plugins/plugin-dev/skills/plugin-structure/references/component-patterns.md from SaylorTwift/claude-code: direct link, hf CLI and curl.
- Browser
- Download file 12.1 kB
-
https://huggingface.co/SaylorTwift/claude-code/resolve/main/plugins/plugin-dev/skills/plugin-structure/references/component-patterns.md
- Command line
-
hf download hf://SaylorTwift/claude-code/plugins/plugin-dev/skills/plugin-structure/references/component-patterns.md
-
curl -L -o component-patterns.md https://huggingface.co/SaylorTwift/claude-code/resolve/main/plugins/plugin-dev/skills/plugin-structure/references/component-patterns.md
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 | |