Claude Code Plugins

Community-maintained marketplace

Feedback

Analyze and improve code quality, readability, and maintainability

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name clean-code
description Analyze and improve code quality, readability, and maintainability
sasmp_version 1.3.0
bonded_agent 03-clean-code
bond_type PRIMARY_BOND
version 2.0.0
updated 2025-12-30

Clean Code Skill

Atomic skill for code quality analysis and improvement

Skill Definition

skill_id: clean-code
responsibility: Single - Code quality analysis and recommendations
atomic: true
idempotent: true

Parameter Schema

interface SkillParams {
  // Required
  code: string;
  language: string;

  // Optional
  focus?: ('naming' | 'functions' | 'comments' | 'formatting')[];
  style_guide?: string;           // airbnb, google, pep8, etc.
  strictness?: 'relaxed' | 'normal' | 'strict';
}

interface SkillResult {
  quality_score: number;          // 0-100
  issues: CleanCodeIssue[];
  metrics: CodeMetrics;
  suggestions: Improvement[];
}

interface CleanCodeIssue {
  category: string;
  severity: 'low' | 'medium' | 'high';
  location: string;
  current: string;
  suggested: string;
  rule: string;
}

interface CodeMetrics {
  lines_of_code: number;
  avg_function_length: number;
  max_function_length: number;
  avg_params_per_function: number;
  cyclomatic_complexity: number;
  naming_score: number;
  comment_ratio: number;
}

Validation Rules

input_validation:
  code:
    min_length: 1
    max_length: 100000
    required: true

  language:
    required: true
    allowed: [typescript, javascript, python, java, csharp, go, ruby, kotlin, rust, php]

  focus:
    default: [naming, functions, comments, formatting]

  strictness:
    default: normal

Retry Logic

retry_config:
  max_attempts: 3
  backoff:
    type: exponential
    initial_delay_ms: 500
    max_delay_ms: 5000
    multiplier: 2

  retryable_errors:
    - TIMEOUT
    - RATE_LIMIT

  non_retryable_errors:
    - INVALID_SYNTAX
    - UNSUPPORTED_LANGUAGE

Logging & Observability

logging:
  level: INFO
  events:
    - analysis_started
    - issue_detected
    - metrics_calculated
    - analysis_completed

metrics:
  - name: quality_score
    type: gauge
  - name: issues_by_category
    type: counter
  - name: analysis_duration_ms
    type: histogram

tracing:
  span_name: clean_code_analysis
  attributes:
    - language
    - code_size
    - strictness

Clean Code Rules

Naming Rules

naming_rules:
  variables:
    - rule: descriptive_names
      bad: [x, temp, data, val, item]
      good: [userCount, totalPrice, customerEmail]

    - rule: pronounceable
      bad: [genymdhms, modymdhms]
      good: [generationTimestamp, modificationDate]

  functions:
    - rule: verb_noun
      bad: [data, process, handle]
      good: [fetchUser, calculateTotal, validateEmail]

  classes:
    - rule: noun_singular
      bad: [Manager, Processor, Data]
      good: [User, Order, PaymentGateway]

  booleans:
    - rule: question_prefix
      bad: [flag, status, open]
      good: [isActive, hasPermission, canEdit]

Function Rules

function_rules:
  length:
    ideal: 10
    warning: 20
    error: 50

  parameters:
    ideal: 2
    warning: 3
    error: 5

  nesting:
    ideal: 1
    warning: 2
    error: 4

Usage Examples

Basic Analysis

// Input
{
  code: `
    function p(d) {
      let x = 0;
      for (let i = 0; i < d.length; i++) {
        x += d[i].val;
      }
      return x;
    }
  `,
  language: "typescript"
}

// Output
{
  quality_score: 35,
  issues: [
    {
      category: "naming",
      severity: "high",
      location: "line 1",
      current: "p",
      suggested: "calculateTotalValue",
      rule: "descriptive_names"
    }
  ],
  metrics: {
    lines_of_code: 7,
    avg_function_length: 7,
    naming_score: 20
  }
}

Unit Test Template

describe('CleanCodeSkill', () => {
  describe('analyze', () => {
    it('should detect poor variable naming', async () => {
      const code = 'const x = 5; const d = getData();';
      const result = await skill.analyze({ code, language: 'typescript' });

      expect(result.issues).toContainEqual(
        expect.objectContaining({ category: 'naming', current: 'x' })
      );
    });

    it('should calculate accurate quality score', async () => {
      const cleanCode = `
        function calculateOrderTotal(items: Item[]): number {
          return items.reduce((sum, item) => sum + item.price, 0);
        }
      `;
      const result = await skill.analyze({ code: cleanCode, language: 'typescript' });
      expect(result.quality_score).toBeGreaterThan(80);
    });
  });
});

Error Handling

errors:
  INVALID_SYNTAX:
    code: 400
    message: "Code contains syntax errors"
    recovery: "Fix syntax errors before analysis"

  UNSUPPORTED_LANGUAGE:
    code: 400
    message: "Language not supported"
    recovery: "Use supported language"

Integration

requires:
  - syntax_parser
  - metrics_calculator

emits:
  - code_analyzed
  - issues_detected
  - quality_score_calculated

consumed_by:
  - 03-clean-code (bonded agent)
  - 04-refactoring (for improvement suggestions)