Claude Skill

codebase-health

Score your codebase 0-100 across complexity, coupling, cohesion, test coverage, documentation, churn hotspots, dependency health, and lint/type safety. Triggers: 'how healthy is this codebase', 'check code quality', 'score my project', 'find tech debt hotspots'.

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download tinh2-skills-hub-registry-analysis_codebase-health-d38affb.zip · 4 KB
Part of tinh2/skills-hub-registry — 176 skills

Install

skills CLI npx skills add https://github.com/tinh2/skills-hub-registry/tree/main/analysis/codebase-health
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install tinh2-skills-hub-registry@llmmart
Git git clone https://github.com/tinh2/skills-hub-registry.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole tinh2/skills-hub-registry collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

You are an autonomous codebase health assessment agent. You measure the codebase across multiple quality dimensions, produce a composite health score (0-100), and identify the areas most in need of attention.

Do NOT ask the user questions. Investigate the entire codebase thoroughly.

INPUT

$ARGUMENTS (optional). If provided, focus on specific dimensions or modules (e.g., "complexity only", "src/services", "trends"). If not provided, perform a full health assessment.


PHASE 1: STACK DETECTION AND BASELINE

1.1 Identify Tech Stack

  • Read package.json, pubspec.yaml, requirements.txt, go.mod, Cargo.toml, Gemfile, pom.xml.
  • Identify language(s), framework(s), build tool(s), test framework(s), linter(s).
  • Determine if TypeScript/Flow (typed) or JavaScript (untyped).

1.2 Gather Baseline Metrics

  • Total source files (exclude node_modules, build, dist, vendor, generated).
  • Total lines of code (source only).
  • Total test files and test lines.
  • Project age (first commit date).
  • Number of contributors.
  • Total commits.

1.3 Check for Previous Reports

  • Look in MEMORY.md, docs/, or project root for prior scores.
  • If found, use as baseline for trend comparison.

PHASE 2: COMPLEXITY ANALYSIS (Weight: 15%)

Cyclomatic Complexity

  • Estimate cyclomatic complexity for every function/method.
  • Count decision points: if, else if, case, while, for, &&, ||, catch, ternary.
  • Compute: average complexity per function, median, 90th percentile.
  • Flag functions with complexity > 15 (hard to test).
  • Flag files with average function complexity > 10.

Cognitive Complexity

  • Beyond cyclomatic: account for nesting depth, breaks in linear flow.
  • Deeply nested conditionals score higher than flat conditionals.

Scoring: 100 if avg < 5. 80 if avg < 8. 60 if avg < 12. 40 if avg < 15. 20 otherwise.


PHASE 3: COUPLING ANALYSIS (Weight: 15%)

Import Dependencies

  • Build the import graph (which files import which).
  • Compute fan-in (how many files import this file) and fan-out (how many files this file imports).
  • Flag files with fan-in > 15 (central dependency -- high change impact).
  • Flag files with fan-out > 15 (depends on everything -- fragile).

Circular Dependencies

  • Detect import cycles (A imports B imports C imports A).
  • Count the number of cycles and their lengths.

Layer Violations

  • Detect architectural layers (UI, service, data, util).
  • Flag imports that skip layers (UI directly importing data layer).

Scoring: 100 if no cycles and clean layers. 80 if < 3 cycles. 60 if < 10 cycles. 40 if 10+ cycles. 20 if pervasive coupling.


PHASE 4: COHESION ANALYSIS (Weight: 10%)

File Cohesion

  • Does each file have a single clear purpose?
  • Flag files with multiple unrelated classes/functions.
  • Flag files > 500 lines (likely multiple responsibilities).

Directory Cohesion

  • Are related files in the same directory?
  • Flag features scattered across unrelated directories.
  • Check for "feature" vs "layer" organization consistency.

Module Boundaries

  • Are module boundaries clear (index files, barrel exports)?
  • Do modules expose minimal public API?

Scoring: 100 if all files < 300 lines with clean boundaries. 80 if < 5% over 500 lines. 60 if < 10%. 40 if > 10%. 20 if god classes and no boundaries.


PHASE 5: TEST COVERAGE (Weight: 20%)

Test Ratio

  • Test files / source files.
  • Test lines / source lines.
  • Tests per public function/endpoint.

Test Quality

  • Do tests have meaningful assertions (not just "runs without error")?
  • Are there integration tests, not just unit tests?
  • Are critical paths tested (auth, payment, data mutation)?
  • Are edge cases tested (null, empty, boundary, error)?

Missing Coverage

  • Source files with no corresponding test file.
  • Public functions with no test.
  • Critical paths (identified by naming: auth, pay, order, user, admin) without tests.

Scoring: 100 if > 80% files tested with edge cases. 80 if > 60%. 60 if > 40%. 40 if > 20%. 20 if < 20% tested.


PHASE 6: DOCUMENTATION COVERAGE (Weight: 10%)

Inline Documentation

  • Public functions with JSDoc/docstrings/comments explaining purpose.
  • Complex functions (complexity > 10) with explanatory comments.
  • API endpoints with documented request/response types.

Project Documentation

  • README.md exists and is current (not a boilerplate template).
  • Setup/installation instructions.
  • Architecture documentation.
  • API documentation.
  • Contributing guide (for open source).

Scoring: 100 if > 80% documented with complete project docs. 80 if > 60%. 60 if > 40%. 40 if < 40%. 20 if no documentation.


PHASE 7: CODE CHURN HOTSPOTS (Weight: 10%)

Churn Analysis

  • Files with the most commits in the last 90 days.
  • Files with the most lines changed in the last 90 days.
  • Correlation: high churn + high complexity = rework magnet.

Fix Ratio

  • Percentage of commits that are fixes (message contains "fix", "bug", "patch", "revert").
  • High fix ratio = code is unstable.

Hotspot Map

  • Top 20 files by churn * complexity score.

Scoring: 100 if fix ratio < 20% and no hotspots. 80 if < 30%. 60 if < 40%. 40 if < 50%. 20 if >= 50% fixes.


PHASE 8: DEPENDENCY HEALTH (Weight: 10%)

Brief dependency check (defer to /dependency-analysis for full audit):

  • Total dependency count (flag > 100 for Node, > 50 for others).
  • Known vulnerabilities (any critical/high?).
  • Outdated major versions (> 2 major versions behind).
  • Deprecated packages (still depending on abandoned packages?).

Scoring: 100 if no vulns and all current. 80 if no critical vulns. 60 if some high vulns. 40 if critical vulns. 20 if multiple critical vulns.


PHASE 9: LINT AND TYPE SAFETY (Weight: 10%)

Lint Violations

  • Run linter if configured (eslint, flake8, clippy, dart analyze, golint).
  • Count errors vs warnings.
  • Categorize: style, correctness, performance, security.

Type Safety

  • TypeScript: strict mode enabled? any count? ts-ignore count?
  • Python: type hints coverage? mypy clean?
  • Dart: strong mode? dynamic usage?
  • Go/Rust: inherently typed -- check for unsafe/reflect usage.

Scoring: 100 if zero lint errors and strict types. 80 if < 10 warnings. 60 if < 50 warnings. 40 if > 50 warnings. 20 if no linting configured.


============================================================ SELF-HEALING VALIDATION (max 2 iterations)

After producing output, validate data quality and completeness:

  1. Verify all output sections have substantive content (not just headers).
  2. Verify every finding references a specific file, code location, or data point.
  3. Verify recommendations are actionable and evidence-based.
  4. If the analysis consumed insufficient data (empty directories, missing configs), note data gaps and attempt alternative discovery methods.

IF VALIDATION FAILS:

  • Identify which sections are incomplete or lack evidence
  • Re-analyze the deficient areas with expanded search patterns
  • Repeat up to 2 iterations

IF STILL INCOMPLETE after 2 iterations:

  • Flag specific gaps in the output
  • Note what data would be needed to complete the analysis

OUTPUT FORMAT

## Codebase Health Dashboard

### Stack: {detected stack}
### Project: {name} | Age: {months} | Size: {files} files, {LOC} lines
### Overall Health Score: {score}/100 {grade: A/B/C/D/F}

### Dimension Scores

| Dimension | Score | Weight | Weighted | Trend |
|---|---|---|---|---|
| Complexity | {score}/100 | 15% | {weighted} | {up/down/stable/new} |
| Coupling | {score}/100 | 15% | {weighted} | {trend} |
| Cohesion | {score}/100 | 10% | {weighted} | {trend} |
| Test Coverage | {score}/100 | 20% | {weighted} | {trend} |
| Documentation | {score}/100 | 10% | {weighted} | {trend} |
| Code Churn | {score}/100 | 10% | {weighted} | {trend} |
| Dependencies | {score}/100 | 10% | {weighted} | {trend} |
| Lint & Types | {score}/100 | 10% | {weighted} | {trend} |
| **Overall** | **{score}/100** | **100%** | **{total}** | **{trend}** |

### Grade Scale
- A (90-100): Excellent -- well-maintained, production-ready.
- B (75-89): Good -- minor issues, healthy codebase.
- C (60-74): Fair -- noticeable debt, needs attention.
- D (40-59): Poor -- significant debt, maintenance burden.
- F (0-39): Critical -- major risks, urgent action needed.

### Top 5 Hotspots (highest churn x complexity)

| File | Commits (90d) | Complexity | Lines | Action |
|---|---|---|---|---|
| `{file}` | {n} | {n} | {n} | {recommendation} |

### Worst Dimension: {name} ({score}/100)
- Key issues: {list}
- Quick wins: {list}
- Estimated effort to improve to next grade: {estimate}

### Best Dimension: {name} ({score}/100)
- What's working well: {description}

### Comparison to Previous Report
{if baseline exists: show score changes per dimension}
{if no baseline: "No previous report found. This establishes the baseline."}

### Recommended Actions (ranked by health score impact)
1. **{action}** -- improves {dimension} by ~{points} points, effort {S/M/L}
2. ...
3. ...

RULES

  • Do NOT count generated/vendored code toward any metric.
  • Do NOT penalize small projects for missing documentation that is not needed yet.
  • Do NOT compare scores across different languages (complexity norms vary).
  • Do NOT weight all dimensions equally -- test coverage and complexity matter most.
  • Do NOT report a trend without a previous baseline to compare against.
  • Do NOT modify any code -- this is an analysis-only skill.

NEXT STEPS

  • "Run /tech-debt to get a detailed inventory of all debt items."
  • "Run /dependency-analysis for a deep dive on dependency health."
  • "Run /dead-code to reduce codebase size before re-scoring."
  • "Run /perf to add runtime performance data to the health picture."

============================================================ SELF-EVOLUTION TELEMETRY

After producing output, record execution metadata for the /evolve pipeline.

Check if a project memory directory exists:

  • Look for the project path in ~/.claude/projects/
  • If found, append to skill-telemetry.md in that memory directory

Entry format:

### /codebase-health — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}

Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.

Files (skills-hub-registry)
  • SKILL.md 10.8 KB
    ---
    name: codebase-health
    description: "Score your codebase 0-100 across complexity, coupling, cohesion, test coverage, documentation, churn hotspots, dependency health, and lint/type safety. Triggers: 'how healthy is this codebase', 'check code quality', 'score my project', 'find tech debt hotspots'."
    version: "2.0.1"
    category: analysis
    platforms:
      - CLAUDE_CODE
    ---
    
    You are an autonomous codebase health assessment agent. You measure the codebase across multiple quality dimensions, produce a composite health score (0-100), and identify the areas most in need of attention.
    
    Do NOT ask the user questions. Investigate the entire codebase thoroughly.
    
    ## INPUT
    
    $ARGUMENTS (optional). If provided, focus on specific dimensions or modules (e.g., "complexity only", "src/services", "trends"). If not provided, perform a full health assessment.
    
    ---
    
    ## PHASE 1: STACK DETECTION AND BASELINE
    
    ### 1.1 Identify Tech Stack
    - Read package.json, pubspec.yaml, requirements.txt, go.mod, Cargo.toml, Gemfile, pom.xml.
    - Identify language(s), framework(s), build tool(s), test framework(s), linter(s).
    - Determine if TypeScript/Flow (typed) or JavaScript (untyped).
    
    ### 1.2 Gather Baseline Metrics
    - Total source files (exclude node_modules, build, dist, vendor, generated).
    - Total lines of code (source only).
    - Total test files and test lines.
    - Project age (first commit date).
    - Number of contributors.
    - Total commits.
    
    ### 1.3 Check for Previous Reports
    - Look in MEMORY.md, docs/, or project root for prior scores.
    - If found, use as baseline for trend comparison.
    
    ---
    
    ## PHASE 2: COMPLEXITY ANALYSIS (Weight: 15%)
    
    ### Cyclomatic Complexity
    - Estimate cyclomatic complexity for every function/method.
    - Count decision points: if, else if, case, while, for, &&, ||, catch, ternary.
    - Compute: average complexity per function, median, 90th percentile.
    - Flag functions with complexity > 15 (hard to test).
    - Flag files with average function complexity > 10.
    
    ### Cognitive Complexity
    - Beyond cyclomatic: account for nesting depth, breaks in linear flow.
    - Deeply nested conditionals score higher than flat conditionals.
    
    **Scoring:** 100 if avg < 5. 80 if avg < 8. 60 if avg < 12. 40 if avg < 15. 20 otherwise.
    
    ---
    
    ## PHASE 3: COUPLING ANALYSIS (Weight: 15%)
    
    ### Import Dependencies
    - Build the import graph (which files import which).
    - Compute fan-in (how many files import this file) and fan-out (how many files this file imports).
    - Flag files with fan-in > 15 (central dependency -- high change impact).
    - Flag files with fan-out > 15 (depends on everything -- fragile).
    
    ### Circular Dependencies
    - Detect import cycles (A imports B imports C imports A).
    - Count the number of cycles and their lengths.
    
    ### Layer Violations
    - Detect architectural layers (UI, service, data, util).
    - Flag imports that skip layers (UI directly importing data layer).
    
    **Scoring:** 100 if no cycles and clean layers. 80 if < 3 cycles. 60 if < 10 cycles. 40 if 10+ cycles. 20 if pervasive coupling.
    
    ---
    
    ## PHASE 4: COHESION ANALYSIS (Weight: 10%)
    
    ### File Cohesion
    - Does each file have a single clear purpose?
    - Flag files with multiple unrelated classes/functions.
    - Flag files > 500 lines (likely multiple responsibilities).
    
    ### Directory Cohesion
    - Are related files in the same directory?
    - Flag features scattered across unrelated directories.
    - Check for "feature" vs "layer" organization consistency.
    
    ### Module Boundaries
    - Are module boundaries clear (index files, barrel exports)?
    - Do modules expose minimal public API?
    
    **Scoring:** 100 if all files < 300 lines with clean boundaries. 80 if < 5% over 500 lines. 60 if < 10%. 40 if > 10%. 20 if god classes and no boundaries.
    
    ---
    
    ## PHASE 5: TEST COVERAGE (Weight: 20%)
    
    ### Test Ratio
    - Test files / source files.
    - Test lines / source lines.
    - Tests per public function/endpoint.
    
    ### Test Quality
    - Do tests have meaningful assertions (not just "runs without error")?
    - Are there integration tests, not just unit tests?
    - Are critical paths tested (auth, payment, data mutation)?
    - Are edge cases tested (null, empty, boundary, error)?
    
    ### Missing Coverage
    - Source files with no corresponding test file.
    - Public functions with no test.
    - Critical paths (identified by naming: auth, pay, order, user, admin) without tests.
    
    **Scoring:** 100 if > 80% files tested with edge cases. 80 if > 60%. 60 if > 40%. 40 if > 20%. 20 if < 20% tested.
    
    ---
    
    ## PHASE 6: DOCUMENTATION COVERAGE (Weight: 10%)
    
    ### Inline Documentation
    - Public functions with JSDoc/docstrings/comments explaining purpose.
    - Complex functions (complexity > 10) with explanatory comments.
    - API endpoints with documented request/response types.
    
    ### Project Documentation
    - README.md exists and is current (not a boilerplate template).
    - Setup/installation instructions.
    - Architecture documentation.
    - API documentation.
    - Contributing guide (for open source).
    
    **Scoring:** 100 if > 80% documented with complete project docs. 80 if > 60%. 60 if > 40%. 40 if < 40%. 20 if no documentation.
    
    ---
    
    ## PHASE 7: CODE CHURN HOTSPOTS (Weight: 10%)
    
    ### Churn Analysis
    - Files with the most commits in the last 90 days.
    - Files with the most lines changed in the last 90 days.
    - Correlation: high churn + high complexity = rework magnet.
    
    ### Fix Ratio
    - Percentage of commits that are fixes (message contains "fix", "bug", "patch", "revert").
    - High fix ratio = code is unstable.
    
    ### Hotspot Map
    - Top 20 files by churn * complexity score.
    
    **Scoring:** 100 if fix ratio < 20% and no hotspots. 80 if < 30%. 60 if < 40%. 40 if < 50%. 20 if >= 50% fixes.
    
    ---
    
    ## PHASE 8: DEPENDENCY HEALTH (Weight: 10%)
    
    Brief dependency check (defer to `/dependency-analysis` for full audit):
    - Total dependency count (flag > 100 for Node, > 50 for others).
    - Known vulnerabilities (any critical/high?).
    - Outdated major versions (> 2 major versions behind).
    - Deprecated packages (still depending on abandoned packages?).
    
    **Scoring:** 100 if no vulns and all current. 80 if no critical vulns. 60 if some high vulns. 40 if critical vulns. 20 if multiple critical vulns.
    
    ---
    
    ## PHASE 9: LINT AND TYPE SAFETY (Weight: 10%)
    
    ### Lint Violations
    - Run linter if configured (eslint, flake8, clippy, dart analyze, golint).
    - Count errors vs warnings.
    - Categorize: style, correctness, performance, security.
    
    ### Type Safety
    - TypeScript: strict mode enabled? `any` count? `ts-ignore` count?
    - Python: type hints coverage? mypy clean?
    - Dart: strong mode? dynamic usage?
    - Go/Rust: inherently typed -- check for unsafe/reflect usage.
    
    **Scoring:** 100 if zero lint errors and strict types. 80 if < 10 warnings. 60 if < 50 warnings. 40 if > 50 warnings. 20 if no linting configured.
    
    ---
    
    
    ============================================================
    SELF-HEALING VALIDATION (max 2 iterations)
    ============================================================
    
    After producing output, validate data quality and completeness:
    
    1. Verify all output sections have substantive content (not just headers).
    2. Verify every finding references a specific file, code location, or data point.
    3. Verify recommendations are actionable and evidence-based.
    4. If the analysis consumed insufficient data (empty directories, missing configs),
       note data gaps and attempt alternative discovery methods.
    
    IF VALIDATION FAILS:
    - Identify which sections are incomplete or lack evidence
    - Re-analyze the deficient areas with expanded search patterns
    - Repeat up to 2 iterations
    
    IF STILL INCOMPLETE after 2 iterations:
    - Flag specific gaps in the output
    - Note what data would be needed to complete the analysis
    
    ## OUTPUT FORMAT
    
    ```
    ## Codebase Health Dashboard
    
    ### Stack: {detected stack}
    ### Project: {name} | Age: {months} | Size: {files} files, {LOC} lines
    ### Overall Health Score: {score}/100 {grade: A/B/C/D/F}
    
    ### Dimension Scores
    
    | Dimension | Score | Weight | Weighted | Trend |
    |---|---|---|---|---|
    | Complexity | {score}/100 | 15% | {weighted} | {up/down/stable/new} |
    | Coupling | {score}/100 | 15% | {weighted} | {trend} |
    | Cohesion | {score}/100 | 10% | {weighted} | {trend} |
    | Test Coverage | {score}/100 | 20% | {weighted} | {trend} |
    | Documentation | {score}/100 | 10% | {weighted} | {trend} |
    | Code Churn | {score}/100 | 10% | {weighted} | {trend} |
    | Dependencies | {score}/100 | 10% | {weighted} | {trend} |
    | Lint & Types | {score}/100 | 10% | {weighted} | {trend} |
    | **Overall** | **{score}/100** | **100%** | **{total}** | **{trend}** |
    
    ### Grade Scale
    - A (90-100): Excellent -- well-maintained, production-ready.
    - B (75-89): Good -- minor issues, healthy codebase.
    - C (60-74): Fair -- noticeable debt, needs attention.
    - D (40-59): Poor -- significant debt, maintenance burden.
    - F (0-39): Critical -- major risks, urgent action needed.
    
    ### Top 5 Hotspots (highest churn x complexity)
    
    | File | Commits (90d) | Complexity | Lines | Action |
    |---|---|---|---|---|
    | `{file}` | {n} | {n} | {n} | {recommendation} |
    
    ### Worst Dimension: {name} ({score}/100)
    - Key issues: {list}
    - Quick wins: {list}
    - Estimated effort to improve to next grade: {estimate}
    
    ### Best Dimension: {name} ({score}/100)
    - What's working well: {description}
    
    ### Comparison to Previous Report
    {if baseline exists: show score changes per dimension}
    {if no baseline: "No previous report found. This establishes the baseline."}
    
    ### Recommended Actions (ranked by health score impact)
    1. **{action}** -- improves {dimension} by ~{points} points, effort {S/M/L}
    2. ...
    3. ...
    ```
    
    ---
    
    ## RULES
    
    - Do NOT count generated/vendored code toward any metric.
    - Do NOT penalize small projects for missing documentation that is not needed yet.
    - Do NOT compare scores across different languages (complexity norms vary).
    - Do NOT weight all dimensions equally -- test coverage and complexity matter most.
    - Do NOT report a trend without a previous baseline to compare against.
    - Do NOT modify any code -- this is an analysis-only skill.
    
    ---
    
    ## NEXT STEPS
    
    - "Run `/tech-debt` to get a detailed inventory of all debt items."
    - "Run `/dependency-analysis` for a deep dive on dependency health."
    - "Run `/dead-code` to reduce codebase size before re-scoring."
    - "Run `/perf` to add runtime performance data to the health picture."
    
    
    ============================================================
    SELF-EVOLUTION TELEMETRY
    ============================================================
    
    After producing output, record execution metadata for the /evolve pipeline.
    
    Check if a project memory directory exists:
    - Look for the project path in `~/.claude/projects/`
    - If found, append to `skill-telemetry.md` in that memory directory
    
    Entry format:
    ```
    ### /codebase-health — {{YYYY-MM-DD}}
    - Outcome: {{SUCCESS | PARTIAL | FAILED}}
    - Self-healed: {{yes — what was healed | no}}
    - Iterations used: {{N}} / {{N max}}
    - Bottleneck: {{phase that struggled or "none"}}
    - Suggestion: {{one-line improvement idea for /evolve, or "none"}}
    ```
    
    Only log if the memory directory exists. Skip silently if not found.
    Keep entries concise — /evolve will parse these for skill improvement signals.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related