Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 17:55:59 +08:00
commit 7449ea6e8b
60 changed files with 21848 additions and 0 deletions

View File

@@ -0,0 +1,567 @@
# 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

View File

@@ -0,0 +1,552 @@
# Plugin Manifest Reference
Complete reference for `plugin.json` configuration.
## File Location
**Required path**: `.claude-plugin/plugin.json`
The manifest MUST be in the `.claude-plugin/` directory at the plugin root. Claude Code will not recognize plugins without this file in the correct location.
## Complete Field Reference
### Core Fields
#### name (required)
**Type**: String
**Format**: kebab-case
**Example**: `"test-automation-suite"`
The unique identifier for the plugin. Used for:
- Plugin identification in Claude Code
- Conflict detection with other plugins
- Command namespacing (optional)
**Requirements**:
- Must be unique across all installed plugins
- Use only lowercase letters, numbers, and hyphens
- No spaces or special characters
- Start with a letter
- End with a letter or number
**Validation**:
```javascript
/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/
```
**Examples**:
- ✅ Good: `api-tester`, `code-review`, `git-workflow-automation`
- ❌ Bad: `API Tester`, `code_review`, `-git-workflow`, `test-`
#### version
**Type**: String
**Format**: Semantic versioning (MAJOR.MINOR.PATCH)
**Example**: `"2.1.0"`
**Default**: `"0.1.0"` if not specified
Semantic versioning guidelines:
- **MAJOR**: Incompatible API changes, breaking changes
- **MINOR**: New functionality, backward-compatible
- **PATCH**: Bug fixes, backward-compatible
**Pre-release versions**:
- `"1.0.0-alpha.1"` - Alpha release
- `"1.0.0-beta.2"` - Beta release
- `"1.0.0-rc.1"` - Release candidate
**Examples**:
- `"0.1.0"` - Initial development
- `"1.0.0"` - First stable release
- `"1.2.3"` - Patch update to 1.2
- `"2.0.0"` - Major version with breaking changes
#### description
**Type**: String
**Length**: 50-200 characters recommended
**Example**: `"Automates code review workflows with style checks and automated feedback"`
Brief explanation of plugin purpose and functionality.
**Best practices**:
- Focus on what the plugin does, not how
- Use active voice
- Mention key features or benefits
- Keep under 200 characters for marketplace display
**Examples**:
- ✅ "Generates comprehensive test suites from code analysis and coverage reports"
- ✅ "Integrates with Jira for automatic issue tracking and sprint management"
- ❌ "A plugin that helps you do testing stuff"
- ❌ "This is a very long description that goes on and on about every single feature..."
### Metadata Fields
#### author
**Type**: Object
**Fields**: name (required), email (optional), url (optional)
```json
{
"author": {
"name": "Jane Developer",
"email": "jane@example.com",
"url": "https://janedeveloper.com"
}
}
```
**Alternative format** (string only):
```json
{
"author": "Jane Developer <jane@example.com> (https://janedeveloper.com)"
}
```
**Use cases**:
- Credit and attribution
- Contact for support or questions
- Marketplace display
- Community recognition
#### homepage
**Type**: String (URL)
**Example**: `"https://docs.example.com/plugins/my-plugin"`
Link to plugin documentation or landing page.
**Should point to**:
- Plugin documentation site
- Project homepage
- Detailed usage guide
- Installation instructions
**Not for**:
- Source code (use `repository` field)
- Issue tracker (include in documentation)
- Personal websites (use `author.url`)
#### repository
**Type**: String (URL) or Object
**Example**: `"https://github.com/user/plugin-name"`
Source code repository location.
**String format**:
```json
{
"repository": "https://github.com/user/plugin-name"
}
```
**Object format** (detailed):
```json
{
"repository": {
"type": "git",
"url": "https://github.com/user/plugin-name.git",
"directory": "packages/plugin-name"
}
}
```
**Use cases**:
- Source code access
- Issue reporting
- Community contributions
- Transparency and trust
#### license
**Type**: String
**Format**: SPDX identifier
**Example**: `"MIT"`
Software license identifier.
**Common licenses**:
- `"MIT"` - Permissive, popular choice
- `"Apache-2.0"` - Permissive with patent grant
- `"GPL-3.0"` - Copyleft
- `"BSD-3-Clause"` - Permissive
- `"ISC"` - Permissive, similar to MIT
- `"UNLICENSED"` - Proprietary, not open source
**Full list**: https://spdx.org/licenses/
**Multiple licenses**:
```json
{
"license": "(MIT OR Apache-2.0)"
}
```
#### keywords
**Type**: Array of strings
**Example**: `["testing", "automation", "ci-cd", "quality-assurance"]`
Tags for plugin discovery and categorization.
**Best practices**:
- Use 5-10 keywords
- Include functionality categories
- Add technology names
- Use common search terms
- Avoid duplicating plugin name
**Categories to consider**:
- Functionality: `testing`, `debugging`, `documentation`, `deployment`
- Technologies: `typescript`, `python`, `docker`, `aws`
- Workflows: `ci-cd`, `code-review`, `git-workflow`
- Domains: `web-development`, `data-science`, `devops`
### Component Path Fields
#### commands
**Type**: String or Array of strings
**Default**: `["./commands"]`
**Example**: `"./cli-commands"`
Additional directories or files containing command definitions.
**Single path**:
```json
{
"commands": "./custom-commands"
}
```
**Multiple paths**:
```json
{
"commands": [
"./commands",
"./admin-commands",
"./experimental-commands"
]
}
```
**Behavior**: Supplements default `commands/` directory (does not replace)
**Use cases**:
- Organizing commands by category
- Separating stable from experimental commands
- Loading commands from shared locations
#### agents
**Type**: String or Array of strings
**Default**: `["./agents"]`
**Example**: `"./specialized-agents"`
Additional directories or files containing agent definitions.
**Format**: Same as `commands` field
**Use cases**:
- Grouping agents by specialization
- Separating general-purpose from task-specific agents
- Loading agents from plugin dependencies
#### hooks
**Type**: String (path to JSON file) or Object (inline configuration)
**Default**: `"./hooks/hooks.json"`
Hook configuration location or inline definition.
**File path**:
```json
{
"hooks": "./config/hooks.json"
}
```
**Inline configuration**:
```json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh",
"timeout": 30
}
]
}
]
}
}
```
**Use cases**:
- Simple plugins: Inline configuration (< 50 lines)
- Complex plugins: External JSON file
- Multiple hook sets: Separate files for different contexts
#### mcpServers
**Type**: String (path to JSON file) or Object (inline configuration)
**Default**: `./.mcp.json`
MCP server configuration location or inline definition.
**File path**:
```json
{
"mcpServers": "./.mcp.json"
}
```
**Inline configuration**:
```json
{
"mcpServers": {
"github": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/servers/github-mcp.js"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
```
**Use cases**:
- Simple plugins: Single inline server (< 20 lines)
- Complex plugins: External `.mcp.json` file
- Multiple servers: Always use external file
## Path Resolution
### Relative Path Rules
All paths in component fields must follow these rules:
1. **Must be relative**: No absolute paths
2. **Must start with `./`**: Indicates relative to plugin root
3. **Cannot use `../`**: No parent directory navigation
4. **Forward slashes only**: Even on Windows
**Examples**:
-`"./commands"`
-`"./src/commands"`
-`"./configs/hooks.json"`
-`"/Users/name/plugin/commands"`
-`"commands"` (missing `./`)
-`"../shared/commands"`
-`".\\commands"` (backslash)
### Resolution Order
When Claude Code loads components:
1. **Default directories**: Scans standard locations first
- `./commands/`
- `./agents/`
- `./skills/`
- `./hooks/hooks.json`
- `./.mcp.json`
2. **Custom paths**: Scans paths specified in manifest
- Paths from `commands` field
- Paths from `agents` field
- Files from `hooks` and `mcpServers` fields
3. **Merge behavior**: Components from all locations load
- No overwriting
- All discovered components register
- Name conflicts cause errors
## Validation
### Manifest Validation
Claude Code validates the manifest on plugin load:
**Syntax validation**:
- Valid JSON format
- No syntax errors
- Correct field types
**Field validation**:
- `name` field present and valid format
- `version` follows semantic versioning (if present)
- Paths are relative with `./` prefix
- URLs are valid (if present)
**Component validation**:
- Referenced paths exist
- Hook and MCP configurations are valid
- No circular dependencies
### Common Validation Errors
**Invalid name format**:
```json
{
"name": "My Plugin" // ❌ Contains spaces
}
```
Fix: Use kebab-case
```json
{
"name": "my-plugin" // ✅
}
```
**Absolute path**:
```json
{
"commands": "/Users/name/commands" // ❌ Absolute path
}
```
Fix: Use relative path
```json
{
"commands": "./commands" // ✅
}
```
**Missing ./ prefix**:
```json
{
"hooks": "hooks/hooks.json" // ❌ No ./
}
```
Fix: Add ./ prefix
```json
{
"hooks": "./hooks/hooks.json" // ✅
}
```
**Invalid version**:
```json
{
"version": "1.0" // ❌ Not semantic versioning
}
```
Fix: Use MAJOR.MINOR.PATCH
```json
{
"version": "1.0.0" // ✅
}
```
## Minimal vs. Complete Examples
### Minimal Plugin
Bare minimum for a working plugin:
```json
{
"name": "hello-world"
}
```
Relies entirely on default directory discovery.
### Recommended Plugin
Good metadata for distribution:
```json
{
"name": "code-review-assistant",
"version": "1.0.0",
"description": "Automates code review with style checks and suggestions",
"author": {
"name": "Jane Developer",
"email": "jane@example.com"
},
"homepage": "https://docs.example.com/code-review",
"repository": "https://github.com/janedev/code-review-assistant",
"license": "MIT",
"keywords": ["code-review", "automation", "quality", "ci-cd"]
}
```
### Complete Plugin
Full configuration with all features:
```json
{
"name": "enterprise-devops",
"version": "2.3.1",
"description": "Comprehensive DevOps automation for enterprise CI/CD pipelines",
"author": {
"name": "DevOps Team",
"email": "devops@company.com",
"url": "https://company.com/devops"
},
"homepage": "https://docs.company.com/plugins/devops",
"repository": {
"type": "git",
"url": "https://github.com/company/devops-plugin.git"
},
"license": "Apache-2.0",
"keywords": [
"devops",
"ci-cd",
"automation",
"kubernetes",
"docker",
"deployment"
],
"commands": [
"./commands",
"./admin-commands"
],
"agents": "./specialized-agents",
"hooks": "./config/hooks.json",
"mcpServers": "./.mcp.json"
}
```
## Best Practices
### Metadata
1. **Always include version**: Track changes and updates
2. **Write clear descriptions**: Help users understand plugin purpose
3. **Provide contact information**: Enable user support
4. **Link to documentation**: Reduce support burden
5. **Choose appropriate license**: Match project goals
### Paths
1. **Use defaults when possible**: Minimize configuration
2. **Organize logically**: Group related components
3. **Document custom paths**: Explain why non-standard layout used
4. **Test path resolution**: Verify on multiple systems
### Maintenance
1. **Bump version on changes**: Follow semantic versioning
2. **Update keywords**: Reflect new functionality
3. **Keep description current**: Match actual capabilities
4. **Maintain changelog**: Track version history
5. **Update repository links**: Keep URLs current
### Distribution
1. **Complete metadata before publishing**: All fields filled
2. **Test on clean install**: Verify plugin works without dev environment
3. **Validate manifest**: Use validation tools
4. **Include README**: Document installation and usage
5. **Specify license file**: Include LICENSE file in plugin root