| # Standard Plugin Example |
|
|
| A well-structured plugin with commands, agents, and skills. |
|
|
| ## Directory Structure |
|
|
| ``` |
| code-quality/ |
| ├── .claude-plugin/ |
| │ └── plugin.json |
| ├── commands/ |
| │ ├── lint.md |
| │ ├── test.md |
| │ └── review.md |
| ├── agents/ |
| │ ├── code-reviewer.md |
| │ └── test-generator.md |
| ├── skills/ |
| │ ├── code-standards/ |
| │ │ ├── SKILL.md |
| │ │ └── references/ |
| │ │ └── style-guide.md |
| │ └── testing-patterns/ |
| │ ├── SKILL.md |
| │ └── examples/ |
| │ ├── unit-test.js |
| │ └── integration-test.js |
| ├── hooks/ |
| │ ├── hooks.json |
| │ └── scripts/ |
| │ └── validate-commit.sh |
| └── scripts/ |
| ├── run-linter.sh |
| └── generate-report.py |
| ``` |
|
|
| ## File Contents |
|
|
| ### .claude-plugin/plugin.json |
|
|
| ```json |
| { |
| "name": "code-quality", |
| "version": "1.0.0", |
| "description": "Comprehensive code quality tools including linting, testing, and review automation", |
| "author": { |
| "name": "Quality Team", |
| "email": "quality@example.com" |
| }, |
| "homepage": "https://docs.example.com/plugins/code-quality", |
| "repository": "https://github.com/example/code-quality-plugin", |
| "license": "MIT", |
| "keywords": ["code-quality", "linting", "testing", "code-review", "automation"] |
| } |
| ``` |
|
|
| ### commands/lint.md |
|
|
| ```markdown |
| --- |
| name: lint |
| description: Run linting checks on the codebase |
| --- |
|
|
| # Lint Command |
|
|
| Run comprehensive linting checks on the project codebase. |
|
|
| ## Process |
|
|
| 1. Detect project type and installed linters |
| 2. Run appropriate linters (ESLint, Pylint, RuboCop, etc.) |
| 3. Collect and format results |
| 4. Report issues with file locations and severity |
|
|
| ## Implementation |
|
|
| Execute the linting script: |
|
|
| \`\`\`bash |
| bash ${CLAUDE_PLUGIN_ROOT}/scripts/run-linter.sh |
| \`\`\` |
|
|
| Parse the output and present issues organized by: |
| - Critical issues (must fix) |
| - Warnings (should fix) |
| - Style suggestions (optional) |
|
|
| For each issue, show: |
| - File path and line number |
| - Issue description |
| - Suggested fix (if available) |
| ``` |
| |
| ### commands/test.md |
| |
| ```markdown |
| --- |
| name: test |
| description: Run test suite with coverage reporting |
| --- |
|
|
| # Test Command |
|
|
| Execute the project test suite and generate coverage reports. |
|
|
| ## Process |
|
|
| 1. Identify test framework (Jest, pytest, RSpec, etc.) |
| 2. Run all tests |
| 3. Generate coverage report |
| 4. Identify untested code |
|
|
| ## Output |
|
|
| Present results in structured format: |
| - Test summary (passed/failed/skipped) |
| - Coverage percentage by file |
| - Critical untested areas |
| - Failed test details |
|
|
| ## Integration |
|
|
| After test completion, offer to: |
| - Fix failing tests |
| - Generate tests for untested code (using test-generator agent) |
| - Update documentation based on test changes |
| ``` |
| |
| ### agents/code-reviewer.md |
| |
| ```markdown |
| --- |
| description: Expert code reviewer specializing in identifying bugs, security issues, and improvement opportunities |
| capabilities: |
| - Analyze code for potential bugs and logic errors |
| - Identify security vulnerabilities |
| - Suggest performance improvements |
| - Ensure code follows project standards |
| - Review test coverage adequacy |
| --- |
|
|
| # Code Reviewer Agent |
|
|
| Specialized agent for comprehensive code review. |
|
|
| ## Expertise |
|
|
| - **Bug detection**: Logic errors, edge cases, error handling |
| - **Security analysis**: Injection vulnerabilities, authentication issues, data exposure |
| - **Performance**: Algorithm efficiency, resource usage, optimization opportunities |
| - **Standards compliance**: Style guide adherence, naming conventions, documentation |
| - **Test coverage**: Adequacy of test cases, missing scenarios |
|
|
| ## Review Process |
|
|
| 1. **Initial scan**: Quick pass for obvious issues |
| 2. **Deep analysis**: Line-by-line review of changed code |
| 3. **Context evaluation**: Check impact on related code |
| 4. **Best practices**: Compare against project and language standards |
| 5. **Recommendations**: Prioritized list of improvements |
|
|
| ## Integration with Skills |
|
|
| Automatically loads `code-standards` skill for project-specific guidelines. |
|
|
| ## Output Format |
|
|
| For each file reviewed: |
| - Overall assessment |
| - Critical issues (must fix before merge) |
| - Important issues (should fix) |
| - Suggestions (nice to have) |
| - Positive feedback (what was done well) |
| ``` |
| |
| ### agents/test-generator.md |
| |
| ```markdown |
| --- |
| description: Generates comprehensive test suites from code analysis |
| capabilities: |
| - Analyze code structure and logic flow |
| - Generate unit tests for functions and methods |
| - Create integration tests for modules |
| - Design edge case and error condition tests |
| - Suggest test fixtures and mocks |
| --- |
|
|
| # Test Generator Agent |
|
|
| Specialized agent for generating comprehensive test suites. |
|
|
| ## Expertise |
|
|
| - **Unit testing**: Individual function/method tests |
| - **Integration testing**: Module interaction tests |
| - **Edge cases**: Boundary conditions, error paths |
| - **Test organization**: Proper test structure and naming |
| - **Mocking**: Appropriate use of mocks and stubs |
|
|
| ## Generation Process |
|
|
| 1. **Code analysis**: Understand function purpose and logic |
| 2. **Path identification**: Map all execution paths |
| 3. **Input design**: Create test inputs covering all paths |
| 4. **Assertion design**: Define expected outputs |
| 5. **Test generation**: Write tests in project's framework |
|
|
| ## Integration with Skills |
|
|
| Automatically loads `testing-patterns` skill for project-specific test conventions. |
|
|
| ## Test Quality |
|
|
| Generated tests include: |
| - Happy path scenarios |
| - Edge cases and boundary conditions |
| - Error handling verification |
| - Mock data for external dependencies |
| - Clear test descriptions |
| ``` |
| |
| ### skills/code-standards/SKILL.md |
| |
| ```markdown |
| --- |
| name: Code Standards |
| description: This skill should be used when reviewing code, enforcing style guidelines, checking naming conventions, or ensuring code quality standards. Provides project-specific coding standards and best practices. |
| version: 1.0.0 |
| --- |
|
|
| # Code Standards |
|
|
| Comprehensive coding standards and best practices for maintaining code quality. |
|
|
| ## Overview |
|
|
| Enforce consistent code quality through standardized conventions for: |
| - Code style and formatting |
| - Naming conventions |
| - Documentation requirements |
| - Error handling patterns |
| - Security practices |
|
|
| ## Style Guidelines |
|
|
| ### Formatting |
|
|
| - **Indentation**: 2 spaces (JavaScript/TypeScript), 4 spaces (Python) |
| - **Line length**: Maximum 100 characters |
| - **Braces**: Same line for opening brace (K&R style) |
| - **Whitespace**: Space after commas, around operators |
|
|
| ### Naming Conventions |
|
|
| - **Variables**: camelCase for JavaScript, snake_case for Python |
| - **Functions**: camelCase, descriptive verb-noun pairs |
| - **Classes**: PascalCase |
| - **Constants**: UPPER_SNAKE_CASE |
| - **Files**: kebab-case for modules |
| |
| ## Documentation Requirements |
| |
| ### Function Documentation |
| |
| Every function must include: |
| - Purpose description |
| - Parameter descriptions with types |
| - Return value description with type |
| - Example usage (for public functions) |
| |
| ### Module Documentation |
| |
| Every module must include: |
| - Module purpose |
| - Public API overview |
| - Usage examples |
| - Dependencies |
| |
| ## Error Handling |
| |
| ### Required Practices |
| |
| - Never swallow errors silently |
| - Always log errors with context |
| - Use specific error types |
| - Provide actionable error messages |
| - Clean up resources in finally blocks |
| |
| ### Example Pattern |
| |
| \`\`\`javascript |
| async function processData(data) { |
| try { |
| const result = await transform(data) |
| return result |
| } catch (error) { |
| logger.error('Data processing failed', { |
| data: sanitize(data), |
| error: error.message, |
| stack: error.stack |
| }) |
| throw new DataProcessingError('Failed to process data', { cause: error }) |
| } |
| } |
| \`\`\` |
| |
| ## Security Practices |
| |
| - Validate all external input |
| - Sanitize data before output |
| - Use parameterized queries |
| - Never log sensitive information |
| - Keep dependencies updated |
| |
| ## Detailed Guidelines |
| |
| For comprehensive style guides by language, see: |
| - `references/style-guide.md` |
| ``` |
| |
| ### skills/code-standards/references/style-guide.md |
| |
| ```markdown |
| # Comprehensive Style Guide |
| |
| Detailed style guidelines for all supported languages. |
| |
| ## JavaScript/TypeScript |
| |
| ### Variable Declarations |
| |
| Use `const` by default, `let` when reassignment needed, never `var`: |
| |
| \`\`\`javascript |
| // Good |
| const MAX_RETRIES = 3 |
| let currentTry = 0 |
|
|
| // Bad |
| var MAX_RETRIES = 3 |
| \`\`\` |
| |
| ### Function Declarations |
| |
| Use function expressions for consistency: |
| |
| \`\`\`javascript |
| // Good |
| const calculateTotal = (items) => { |
| return items.reduce((sum, item) => sum + item.price, 0) |
| } |
| |
| // Bad (inconsistent style) |
| function calculateTotal(items) { |
| return items.reduce((sum, item) => sum + item.price, 0) |
| } |
| \`\`\` |
| |
| ### Async/Await |
| |
| Prefer async/await over promise chains: |
| |
| \`\`\`javascript |
| // Good |
| async function fetchUserData(userId) { |
| const user = await db.getUser(userId) |
| const orders = await db.getOrders(user.id) |
| return { user, orders } |
| } |
| |
| // Bad |
| function fetchUserData(userId) { |
| return db.getUser(userId) |
| .then(user => db.getOrders(user.id) |
| .then(orders => ({ user, orders }))) |
| } |
| \`\`\` |
| |
| ## Python |
| |
| ### Import Organization |
| |
| Order imports: standard library, third-party, local: |
| |
| \`\`\`python |
| # Good |
| import os |
| import sys |
| |
| import numpy as np |
| import pandas as pd |
| |
| from app.models import User |
| from app.utils import helper |
| |
| # Bad - mixed order |
| from app.models import User |
| import numpy as np |
| import os |
| \`\`\` |
| |
| ### Type Hints |
| |
| Use type hints for all function signatures: |
| |
| \`\`\`python |
| # Good |
| def calculate_average(numbers: list[float]) -> float: |
| return sum(numbers) / len(numbers) |
| |
| # Bad |
| def calculate_average(numbers): |
| return sum(numbers) / len(numbers) |
| \`\`\` |
| |
| ## Additional Languages |
| |
| See language-specific guides for: |
| - Go: `references/go-style.md` |
| - Rust: `references/rust-style.md` |
| - Ruby: `references/ruby-style.md` |
| ``` |
| |
| ### hooks/hooks.json |
| |
| ```json |
| { |
| "PreToolUse": [ |
| { |
| "matcher": "Write|Edit", |
| "hooks": [ |
| { |
| "type": "prompt", |
| "prompt": "Before modifying code, verify it meets our coding standards from the code-standards skill. Check formatting, naming conventions, and documentation. If standards aren't met, suggest improvements.", |
| "timeout": 30 |
| } |
| ] |
| } |
| ], |
| "Stop": [ |
| { |
| "matcher": ".*", |
| "hooks": [ |
| { |
| "type": "command", |
| "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate-commit.sh", |
| "timeout": 45 |
| } |
| ] |
| } |
| ] |
| } |
| ``` |
| |
| ### hooks/scripts/validate-commit.sh |
| |
| ```bash |
| #!/bin/bash |
| # Validate code quality before task completion |
| |
| set -e |
| |
| # Check if there are any uncommitted changes |
| if [[ -z $(git status -s) ]]; then |
| echo '{"systemMessage": "No changes to validate. Task complete."}' |
| exit 0 |
| fi |
| |
| # Run linter on changed files |
| CHANGED_FILES=$(git diff --name-only --cached | grep -E '\.(js|ts|py)$' || true) |
|
|
| if [[ -z "$CHANGED_FILES" ]]; then |
| echo '{"systemMessage": "No code files changed. Validation passed."}' |
| exit 0 |
| fi |
| |
| # Run appropriate linters |
| ISSUES=0 |
| |
| for file in $CHANGED_FILES; do |
| case "$file" in |
| *.js|*.ts) |
| if ! npx eslint "$file" --quiet; then |
| ISSUES=$((ISSUES + 1)) |
| fi |
| ;; |
| *.py) |
| if ! python -m pylint "$file" --errors-only; then |
| ISSUES=$((ISSUES + 1)) |
| fi |
| ;; |
| esac |
| done |
| |
| if [[ $ISSUES -gt 0 ]]; then |
| echo "{\"systemMessage\": \"Found $ISSUES code quality issues. Please fix before completing.\"}" |
| exit 1 |
| fi |
|
|
| echo '{"systemMessage": "Code quality checks passed. Ready to commit."}' |
| exit 0 |
| ``` |
| |
| ## Usage Examples |
| |
| ### Running Commands |
| |
| ``` |
| $ claude |
| > /lint |
| Running linter checks... |
|
|
| Critical Issues (2): |
| src/api/users.js:45 - SQL injection vulnerability |
| src/utils/helpers.js:12 - Unhandled promise rejection |
|
|
| Warnings (5): |
| src/components/Button.tsx:23 - Missing PropTypes |
| ... |
|
|
| Style Suggestions (8): |
| src/index.js:1 - Use const instead of let |
| ... |
|
|
| > /test |
| Running test suite... |
|
|
| Test Results: |
| ✓ 245 passed |
| ✗ 3 failed |
| ○ 2 skipped |
|
|
| Coverage: 87.3% |
|
|
| Untested Files: |
| src/utils/cache.js - 0% coverage |
| src/api/webhooks.js - 23% coverage |
|
|
| Failed Tests: |
| 1. User API › GET /users › should handle pagination |
| Expected 200, received 500 |
| ... |
| ``` |
| |
| ### Using Agents |
|
|
| ``` |
| > Review the changes in src/api/users.js |
| |
| [code-reviewer agent selected automatically] |
| |
| Code Review: src/api/users.js |
| |
| Critical Issues: |
| 1. Line 45: SQL injection vulnerability |
| - Using string concatenation for SQL query |
| - Replace with parameterized query |
| - Priority: CRITICAL |
| |
| 2. Line 67: Missing error handling |
| - Database query without try/catch |
| - Could crash server on DB error |
| - Priority: HIGH |
| |
| Suggestions: |
| 1. Line 23: Consider caching user data |
| - Frequent DB queries for same users |
| - Add Redis caching layer |
| - Priority: MEDIUM |
| ``` |
|
|
| ## Key Points |
|
|
| 1. **Complete manifest**: All recommended metadata fields |
| 2. **Multiple components**: Commands, agents, skills, hooks |
| 3. **Rich skills**: References and examples for detailed information |
| 4. **Automation**: Hooks enforce standards automatically |
| 5. **Integration**: Components work together cohesively |
|
|
| ## When to Use This Pattern |
|
|
| - Production plugins for distribution |
| - Team collaboration tools |
| - Plugins requiring consistency enforcement |
| - Complex workflows with multiple entry points |
|
|