Use when reviewing code quality, before refactoring, when complexity increases, when code feels "hard to change", during code review, or when onboarding to unfamiliar code - systematic identification of code smells with specific refactoring recipes
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: code-smell-detection
description: Use when reviewing code quality, before refactoring, when complexity increases, when code feels "hard to change", during code review, or when onboarding to unfamiliar code - systematic identification of code smells with specific refactoring recipes
---
# Code Smell Detection
**Persona:** Code quality auditor who catalogs issues without judgment, focusing on objective metrics.
**Core principle:** Detect smells early, refactor incrementally, prevent accumulation.
## Should NOT Attempt
- Refactoring while detecting (separate concerns)
- Flagging style preferences as smells (smell != dislike)
- Reporting smells without refactoring recipes
- Detecting smells in generated or vendored code
## Smell Categories
### Bloaters (Too Big)
| Smell | Detection | Refactoring |
|-------|-----------|-------------|
| Long Method | >20 lines, multiple indents | Extract Method |
| Large Class | >300 lines, many responsibilities | Extract Class |
| Long Parameter List | >3 parameters | Introduce Parameter Object |
| Primitive Obsession | Strings for IDs, ints for money | Value Object |
| Data Clumps | Same 3+ fields appear together | Extract Class |
### Change Preventers (Hard to Modify)
| Smell | Detection | Refactoring |
|-------|-----------|-------------|
| Divergent Change | One class changed for many reasons | Extract Class per reason |
| Shotgun Surgery | One change requires many file edits | Move Method, Inline Class |
### Couplers (Too Connected)
| Smell | Detection | Refactoring |
|-------|-----------|-------------|
| Feature Envy | Method uses another class more than own | Move Method |
| Message Chains | a.b().c().d() | Hide Delegate |
### Dispensables (Remove)
| Smell | Detection | Refactoring |
|-------|-----------|-------------|
| Dead Code | Unreachable, unused | Delete |
| Duplicate Code | Same logic in multiple places | Extract Method/Class |
| Comments | Explaining bad code | Refactor code to be clear |
## Detection
```bash
# Long methods/Large files
find ./src -name "*.py" -exec wc -l {} \; | awk '$1 > 300'
# Feature Envy: Count method's references to own vs other class
# If other > own, method belongs elsewhere
```
## Refactoring Recipe: Extract Method
```python
# Before: Long method with comment sections
def process_order(order):
# Validate order
if not order.items: raise ValueError("Empty order")
# Calculate totals
total = sum(item.price for item in order.items) * 1.1
# Notify
send_email(order.customer.email, f"Total: {total}")
# After: Extracted methods
def process_order(order):
validate_order(order)
total = calculate_total(order)
notify_customer(order.customer, total)
```
## Prioritization
| Severity | Smells | Action |
|----------|--------|--------|
| High | Duplicate code, Feature envy, God class | Fix immediately |
| Medium | Long methods, Long params, Data clumps | Fix when touching file |
| Low | Comments, Lazy class | Fix during cleanup |
## Output Format
```markdown
## Code Smell Report: {path}
### High Priority
| File:Line | Smell | Evidence | Refactoring |
|-----------|-------|----------|-------------|
| user.py:45 | Long Method | 67 lines | Extract Method |
```
## Escalation Triggers
| Condition | Action |
|-----------|--------|
| >10 High severity smells | Escalate to `orchestrator` agent for planning |
| God class (>1000 lines) | Use `batch-editor` agent for systematic extraction |
| Circular dependencies | Escalate to architecture review |
| No test coverage | STOP. Add tests before ANY refactoring |
## Failure Behavior
If detection cannot complete:
- Report smells found so far with file:line references
- State reason for incomplete analysis (e.g., "Circular imports prevented full analysis")
- Recommend next steps (e.g., "Break circular dependency A→B→A first")
## Red Flags
- "It works, don't touch it" - Smells accumulate
- Refactoring without tests - Recipe for regression
## Related Skills
- **receiving-code-review**: Both focus on code quality improvement
- **verification-before-completion**: Verify fixes don't introduce new smells
## Integration
- **orchestrator** agent - Plan safe refactoring after detecting smells
- **code-reviewer** agent - Find dead code during review
- **test-driven-development** skill - Write tests before refactoring
No comments yet. Be the first to comment!