Claude-skill-registry codebase-health-auditor
Unified dead code detection, AST-based duplicate detection, and cleanup tool combining Legacy Tech Remover + Comprehensive Auditor + Architectural Cleanup with Knip, depcheck, TypeScript, Vue-specific analysis, file size/token limit detection, and AST-powered refactoring suggestions. Use for dead code, duplicates, oversized files, and architectural issues.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/codebase-health-auditor" ~/.claude/skills/majiayu000-claude-skill-registry-codebase-health-auditor && rm -rf "$T"
skills/data/codebase-health-auditor/SKILL.mdCodebase Health Auditor
Comprehensive dead code detection and safe cleanup for Vue 3 + TypeScript projects.
Overview
A unified skill that merges the best of Legacy Tech Remover and Comprehensive Auditor while adding modern tooling:
- File Size/Token Limit: Detects oversized files that block AI editing (>25K tokens)
- Knip: Unused files, exports, dependencies
- depcheck: Unused npm packages
- TypeScript: noUnusedLocals, noUnusedParameters
- Vue-specific: Unused props, emits, computed, watchers
- Legacy patterns: Deprecated libraries, orphaned directories
Quick Start
# Full audit (dry-run by default) node .claude/skills/codebase-health-auditor/scripts/orchestrator.js audit # Execute safe removals only node .claude/skills/codebase-health-auditor/scripts/orchestrator.js execute --safe-only # Single detector node .claude/skills/codebase-health-auditor/scripts/orchestrator.js detect --detector vue # CI mode node .claude/skills/codebase-health-auditor/scripts/orchestrator.js audit --ci
Detection Capabilities
1. Unused Files & Exports (via Knip)
- Files never imported anywhere
- Exported functions/classes never used
- Types/interfaces never referenced
2. Unused Dependencies (via depcheck)
- npm packages in package.json but never imported
- Missing dependencies (imported but not in package.json)
- devDependencies in wrong section
3. TypeScript Dead Code
- Unused local variables
- Unused function parameters
- Detects what TypeScript would flag if
/noUnusedLocals
were enablednoUnusedParameters
4. Vue-Specific Dead Code
- Unused props (defineProps not used in template/script)
- Unused emits (defineEmits never called)
- Unused computed properties
- Unused watchers
- Unused refs/reactive
- Unused imported components
5. Legacy Detection (ported from legacy-tech-remover)
- Deprecated libraries (moment, request, jQuery, etc.)
- Legacy config files (Grunt, Gulp, Travis CI)
- Orphaned directories (old/, legacy/, v1/, bak/)
- Files untouched for 2+ years
6. File Size & Token Limit Detection ⭐ NEW
Detects files that exceed token limits for AI editing tools like Claude Code.
Why this matters: Files over ~25,000 tokens become difficult or impossible for AI tools to edit effectively, causing truncation, context loss, and failed edits.
Token Thresholds
| Level | Tokens | ~Size | Meaning |
|---|---|---|---|
| WARNING | 15,000 | ~60KB | Getting large, monitor |
| CAUTION | 25,000 | ~100KB | Needs attention |
| CRITICAL | 35,000 | ~140KB | Urgent refactoring needed |
| BLOCKED | 50,000 | ~200KB | Blocks AI editing entirely |
Quick Usage
# Detect oversized files node .claude/skills/codebase-health-auditor/scripts/orchestrator.js detect --detector file-size # Custom threshold (e.g., only 20K+ tokens) node .claude/skills/codebase-health-auditor/scripts/orchestrator.js detect --detector file-size --min-tokens 20000 # Save report to file node .claude/skills/codebase-health-auditor/scripts/orchestrator.js detect --detector file-size --output ./audit-reports/file-size.json
Sample Output
📊 File Size Detection Results ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Files scanned: 156 Files over threshold: 3 By Risk Level: 🔴 CRITICAL: 1 files 🟡 CAUTION: 2 files ────────────────────────────────────────────────── Detailed Findings: 🔴 src/views/CanvasView.vue Tokens: 38,500 | Lines: 2,847 | Size: 154.2KB Suggestions: • 🔴 CRITICAL - High priority refactoring needed • Extract script logic into composables (src/composables/) • Split into smaller child components • URGENT: Major component decomposition needed • Consider: extract state to Pinia store 🟡 src/stores/canvas.ts Tokens: 28,200 | Lines: 1,245 | Size: 112.8KB Suggestions: • Split store into feature-specific modules • Extract actions/getters into separate files
Refactoring Suggestions
The detector provides context-aware suggestions based on file type:
Vue Components (.vue):
- Extract script logic into composables
- Split into smaller child components
- Consider state extraction to Pinia stores
TypeScript/JavaScript (.ts/.js):
- Split store into feature-specific modules
- Break into smaller, focused composables
- Apply single responsibility principle
- Extract utility functions to separate files
Risk Scoring
Each finding is categorized by risk level:
| Category | Score | Meaning | Action |
|---|---|---|---|
| SAFE | < 20 | Zero usage, high confidence | Auto-remove OK |
| CAUTION | 20-60 | Low/uncertain usage | Manual review |
| RISKY | > 60 | Possible indirect use | Migration needed |
Risk Factors
| Factor | Weight | Description |
|---|---|---|
| Usage Count | 30% | How many imports reference this |
| Last Modified | 15% | Git history recency |
| Test Coverage | 20% | Is the code tested? |
| Import Depth | 15% | Transitive dependency depth |
| File Type | 10% | Config files riskier than components |
| Tool Agreement | 10% | Multiple tools agree = higher confidence |
4-Phase Workflow
┌─────────────────────────────────────────┐ │ PHASE 1: DETECTION │ │ - Run all detectors in parallel │ │ - Deduplicate findings │ │ - Tag source (knip/depcheck/vue/etc) │ └───────────────────┬─────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ PHASE 2: ASSESSMENT │ │ - Calculate risk scores │ │ - Build dependency graph │ │ - Categorize: SAFE / CAUTION / RISKY │ └───────────────────┬─────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ PHASE 3: ACTION (if --execute) │ │ - Create backup branch │ │ - Remove SAFE items in batches │ │ - Validate build after each batch │ │ - Prompt for CAUTION items │ └───────────────────┬─────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ PHASE 4: REPORTING │ │ - Generate JSON report │ │ - Generate Markdown summary │ │ - CI exit codes │ └─────────────────────────────────────────┘
Configuration
Create
.claude/codebase-health-config.yml:
detection: knip: enabled: true ignore: ["**/*.test.ts", "**/*.stories.ts"] depcheck: enabled: true ignoreMatches: ["@types/*"] typescript: enabled: true noUnusedLocals: true noUnusedParameters: true vue: enabled: true detectUnusedProps: true detectUnusedEmits: true detectUnusedComputed: true detectUnusedWatchers: true legacy: enabled: true minYearsUntouched: 2 assessment: riskThresholds: safe: 20 caution: 60 protectedPaths: - "src/main.ts" - "src/App.vue" - "src/stores/**" protectedPackages: - "vue" - "pinia" - "vue-router" - "typescript" actions: defaultMode: "dry-run" batchSize: 5 validateAfterBatch: true gitIntegration: autoCommit: true commitPrefix: "[codebase-health]" createBackupBranch: true reporting: formats: ["json", "markdown"] outputDir: "./audit-reports" includeBlindSpots: true
Output Examples
Console Summary
Codebase Health Audit Complete Findings: SAFE (auto-remove OK): 23 items CAUTION (review needed): 18 items RISKY (migration needed): 6 items By Category: Unused exports: 15 Unused dependencies: 8 Unused Vue props: 12 Legacy patterns: 6 Orphaned files: 6 Estimated Impact: Files to remove: 12 Lines of code: 1,847 Bundle savings: ~245KB Run with --execute --safe-only to remove safe items.
JSON Report
{ "metadata": { "timestamp": "2026-01-09T...", "version": "1.0.0", "executionTime": 45.2 }, "summary": { "totalFindings": 47, "byRisk": { "SAFE": 23, "CAUTION": 18, "RISKY": 6 }, "byType": { "unused-export": 15, "unused-dependency": 8 } }, "findings": [...] }
Safety Features
- Dry-run by default: No changes without explicit
--execute - Backup branch: Creates
before changesbackup/health-audit-YYYYMMDD - Batch execution: Removes 5 items at a time, validates between
- Build validation: Runs
after each batchnpm run build - Rollback commands: Provides git revert commands in report
- Protected paths: Never suggests removing core files
False Positive Handling
In Code
// @codebase-health-ignore: Used dynamically export const unusedButNeeded = ...;
In Config
detection: ignore: - "src/utils/polyfills.ts" # Side-effect imports - "**/*.generated.ts" # Generated code
Known Blind Spots
- Dynamic imports:
cannot be statically analyzedimport(variable) - Reflection/metaprogramming
- Runtime code generation
- Framework magic (e.g., Vue's
,$attrs
)$slots - Side-effect-only imports
Integration
This skill supersedes:
(patterns ported)🧹 legacy-tech-remover
(static analysis integrated)📊 comprehensive-auditor
Works alongside:
- For ESLint-specific fixesdev-lint-cleanup
- To update docs after removaldocument-sync
CLI Options
| Option | Description |
|---|---|
| Run full audit (default: dry-run) |
| Execute removal plan |
| Run single detector |
| List available detectors |
| Project root directory |
| Save JSON report to file |
| Minimum tokens to report (file-size detector) |
| Only process SAFE items |
| CI mode with exit codes |
| Custom config file |
| Report output directory |
| Report formats |
Available Detectors
| Detector | Description |
|---|---|
| Detects files exceeding token limits for AI editing |
More detectors coming:
, unused-exports
, unused-deps
, vue-dead-codelegacy-patterns
Version: 1.0.0 Author: Claude Code Category: Code Maintenance Created: January 9, 2026