code-refactoring
npx skills add https://github.com/womendefiningai/claude-code-skills --skill code-refactoring
Agent 安装分布
Skill 文档
Code Refactoring Skill
ð¯ Purpose: Prevent Complexity Before It Becomes a Problem
Problem this solves: “I rarely know when to refactor, typically get caught by accident”
Solution: AI proactively monitors file sizes and complexity patterns, alerting you BEFORE making changes that would worsen the problem.
Works with: JavaScript/TypeScript (React, Node), Python, and general codebases.
ð CRITICAL FIRST STEP: Check for File Watcher Alerts
BEFORE doing anything else when this skill is invoked, ALWAYS check for unread alerts from the background file watcher:
node ~/.claude/plugins/marketplaces/custom-skills/code-refactoring/scripts/check-alerts.js
Why this is critical:
- The file watcher runs in the background monitoring code file sizes
- It writes alerts to
watcher-alerts.jsonwhen files are edited and exceed thresholds - These alerts tell you which files the user just edited that need refactoring attention
- You must check these alerts FIRST to provide real-time feedback
If alerts exist:
- Display the alerts using the check-alerts.js script output
- Ask the user if they want help refactoring the alerted files NOW or LATER
- Then proceed with the rest of the skill workflow
If no alerts:
- Continue with normal skill workflow (checking file sizes manually, etc.)
User can also manually check alerts with: /check-refactor-alerts
ð¤ AUTO-INVOKE CONDITIONS (AI Should Check These)
1. Before Editing Files (PREVENTIVE)
When AI is about to edit a file, check size first:
# Check file size before editing
wc -l [target-file]
# If result:
# 150-200 lines â â ï¸ WARN: Getting large, plan extraction
# 200-300 lines â ð¨ ALERT: Should split before adding more
# 300+ lines â ð STOP: Must refactor before editing
Example workflow:
User: "Add new feature to UserProfile.tsx"
AI: *Before editing, checks file size*
AI: *Sees 280 lines*
AI: *Auto-invokes code-refactoring skill*
Skill: "ð¨ UserProfile.tsx is 280 lines. Before adding features:
- Extract data to separate file
- Split modal into separate component
- Then add new feature safely"
2. During File Creation (PROACTIVE)
While creating new code file, track size:
- At 100 lines â â Good, continue
- At 150 lines â â ï¸ Pause, suggest structure
- At 200 lines â ð¨ Stop, extract now
Example workflow:
AI: *Creating new DashboardService.py*
AI: *Reaches 150 lines*
AI: *Auto-invokes code-refactoring skill*
Skill: "â ï¸ File reached 150 lines. Before continuing:
1. Extract data/config to constants file
2. Move helper functions to utils module
3. Continue with cleaner structure"
3. After Reading Files (REACTIVE)
When AI reads a file and discovers size issues:
# After reading, if file >300 lines, suggest refactor
wc -l filename
# If >300 lines, proactively suggest refactor BEFORE user asks for changes
Example workflow:
User: "Take a look at the analytics module"
AI: *Reads analytics.py*
AI: *Sees 450 lines*
AI: *Auto-invokes code-refactoring skill*
Skill: "ð analytics.py is 450 lines (150 lines over limit).
Refactor plan:
1. Extract constants to analytics_config.py (50 lines)
2. Create AnalyticsChart class (100 lines)
3. Create AnalyticsProcessor class (120 lines)
4. Keep Analytics as orchestrator (180 lines)
Should I proceed with refactoring before making other changes?"
4. Pattern Detection (AUTOMATIC)
AI should automatically detect these patterns and invoke skill:
Universal Patterns (All Languages)
- â Large data structures (>20 lines) â Suggest separate config/data file
- â Complex conditionals (5+ branches) â Suggest strategy pattern or dispatch table
- â Deeply nested logic (>3 levels) â Suggest extraction
- â Repeated code blocks â Suggest function/method extraction
- â Long parameter lists (>5 params) â Suggest config object or builder pattern
JavaScript/TypeScript/React Patterns
- â 5+ data items hardcoded â Suggest data file extraction
- â 4+ useState/useEffect hooks â Suggest custom hook extraction
- â Modal/Dialog code â Suggest separate component
- â Complex form (10+ fields) â Suggest separate form component
- â Large switch statements â Suggest lookup table or component map
Python Patterns
- â Class >300 lines â Suggest splitting into multiple classes
- â Function >50 lines â Suggest breaking into smaller functions
- â Module >500 lines â Suggest splitting into package
- â Too many methods (>15) â Suggest composition or mixins
- â Complex init (>20 lines) â Suggest factory method or builder
ð File Size Guidelines (Language-Specific)
JavaScript/TypeScript/React Components
- 100-200 lines: â Perfect for most components
- 200-300 lines: â ï¸ Good for complex components, watch closely
- 300+ lines: ð MUST split into logical sub-components
Python Modules
- 150-250 lines: â Good module size
- 250-400 lines: â ï¸ Consider splitting by responsibility
- 400+ lines: ð Split into multiple modules or package
Python Classes
- 100-200 lines: â Well-focused class
- 200-300 lines: â ï¸ Check single responsibility principle
- 300+ lines: ð Split into multiple classes or use composition
General Files (Any Language)
- 150-250 lines: â Maintainable size
- 250-400 lines: â ï¸ Getting complex
- 400+ lines: ð Refactor needed
ð Refactoring Analysis Template
When skill is invoked, provide this analysis:
## Code Refactoring Analysis: [Filename]
**Current State:** [X] lines - [â
Good / â ï¸ Warning / ð Critical]
**Identified Issues:**
- File size issues (>200 or >300 lines)
- Complex nested logic / too many responsibilities
- Language-specific patterns (hooks, data arrays, classes, etc.)
**Refactoring Recommendations:**
1. Extract [what] to [new-file] (saves [X] lines, [X] mins)
2. Extract [what] to [new-file] (saves [X] lines, [X] mins)
**Result:** Main file â [target] lines | Risk: [Low/Med/High] | Time: [X] mins
**Proceed?** [Yes/No/Later/Review]
For complete template with all fields, see FORMS.md
ð¨ Automatic Splitting Triggers
When ANY of these conditions occur, AUTO-INVOKE this skill:
Universal Triggers (All Languages)
- â File reaches 150 lines â Suggest extraction points
- â File reaches 200 lines â Alert and plan refactor
- â File reaches 300 lines â Stop and refactor first
- â Complex nested logic detected
- â Repeated code patterns found
JavaScript/TypeScript Triggers
- â Component reaches 150 lines â Extract next section
- â 3+ useState hooks â Extract to custom hook
- â Large data array â Move to data file immediately
- â Modal/Dialog code â Separate component from start
- â Complex form â Separate form component immediately
Python Triggers
- â Class reaches 250 lines â Plan class split
- â Function reaches 40 lines â Suggest breaking down
- â Module reaches 350 lines â Plan module split
- â 10+ methods in class â Consider composition
- â Complex init â Suggest factory pattern
ð Quick Decision Matrix
When to extract what (Quick Reference):
JavaScript/TypeScript/React:
- Data file: 5+ items, arrays >20 lines, config objects
- Sub-component: Modal/dialog, complex list items, distinct UI sections
- Custom hook: 4+ useState, complex logic, reusable state
Python:
- Config file: 5+ variables, large data (>20 lines), magic numbers
- New class: Class >300 lines, multiple responsibilities, 10+ methods
- Utility function: Repeated logic, pure functions, generic operations
- New module: File >400 lines, distinct responsibilities, testable independently
For detailed extraction patterns and examples, see REFERENCE.md
ð¡ Proactive Suggestions
AI should auto-suggest at these milestones:
- New file: Monitor size, alert at 150 lines
- 100 lines: Looking good, will alert at 150
- 150 lines: â ï¸ Check if should extract before continuing
- 200 lines: ð¨ Recommend refactoring now
- Reading large file: Offer refactoring plan before changes
ð§ EXECUTION PHASE (After User Approval)
IMPORTANT: This skill can EXECUTE refactoring, not just suggest it!
Step 1: Present Plan and Get User Approval
After analyzing file size and creating refactoring plan, always ask for approval:
## Refactoring Plan Ready
**File:** [filename] ([X] lines)
**Target:** Reduce to <[target] lines
### Proposed Changes:
1. Extract [data/component/class] to [new-file] (saves [X] lines)
2. Extract [component/function] to [new-file] (saves [X] lines)
3. Extract [hook/utility] to [new-file] (saves [X] lines)
**Result:** Main file reduced to ~[X] lines
**Estimated time:** [X] minutes
**Risk level:** Low (all changes are git-committed incrementally)
### Options:
**â
Yes** - Execute refactoring now (recommended)
- I'll split the file step-by-step
- Each step will be tested and committed
- You can rollback if needed
- Then I'll continue with your original request
**â No** - Skip refactoring
- I'll continue with your edit
- Warning: File will grow larger
- May become harder to maintain
**â° Later** - Save plan for later
- I'll save the plan to `refactoring-plan-[filename].md`
- You can execute it manually later
- I'll continue with your edit now
**ð Review** - Show detailed step-by-step execution plan
- I'll explain exactly what will happen
- Then you can choose Yes/No/Later
**Your choice?**
Step 2: Execute Refactoring (Only if User Says “Yes”)
When user approves, execute refactoring incrementally:
- Create backup commit (safety first)
- Verify starting state (lint, type-check, test must pass)
- Execute step-by-step (extract â verify â commit for each change)
- Final verification (full test suite)
- Rollback automatically if any step fails
Key execution principles:
- â Each step is atomic and committed separately
- â Each step is verified before proceeding
- â Automatic rollback on any failure
- â User can cancel at any time
For detailed execution procedures, safety measures, rollback procedures, and examples, see REFERENCE.md â “EXECUTION PHASE – Detailed Procedures”
Step 3: Continue With Original Request
After execution (success or skip):
Refactoring: â
Complete (or âï¸ Skipped)
Original request: "[user's request]"
Now proceeding with your request...
ð Integration with Other Skills
Works with:
ui-ux-audit– Check file sizes during UI auditstechnical-writing– Document refactored structureqa-testing– Ensure tests cover refactored code
Triggers:
- Before major edits to large files
- During file creation
- After reading files >200 lines
- When detecting size/complexity patterns
ð CODEBASE AUDIT MODE (For Existing Technical Debt)
Use this mode when user asks to:
- “Audit the codebase” or “find large files”
- Check for “technical debt” or “existing problems”
- “Scan for refactoring opportunities”
- Review legacy/inherited codebase
- Plan major refactoring initiative
Audit Workflow (Brief):
- Scan for oversized files by language/type
- Categorize by severity (Critical >300, High 200-300, Medium 150-200, Good <150)
- Prioritize using formula: (Size/100) + (Change Frequency à 2) + (Business Impact à 3)
- Create refactoring roadmap with time estimates
- Execute incrementally (one file per sprint)
Quick scan commands:
# Find oversized files by type
find src -name "*.tsx" -exec wc -l {} \; | awk '$1 > 200' | sort -rn
# Use helper script
bash scripts/check-size.sh src/ '*.tsx'
For detailed audit procedures, report templates, prioritization matrices, and batch analysis commands, see REFERENCE.md â “CODEBASE AUDIT MODE – Detailed Procedures”
ð Language-Specific Details
For detailed refactoring patterns specific to each language, see:
REFERENCE.md– Comprehensive language-specific guidesFORMS.md– Refactoring templates and checklists
To check file size quickly:
# Use the helper script
bash ~/.claude/plugins/marketplaces/custom-skills/code-refactoring/scripts/check-size.sh [filename]
â Success Criteria
Refactoring is successful when:
- â Main file within target size for language
- â All extracted files well-organized
- â No broken imports or references
- â All tests pass
- â Functionality unchanged
- â Code more maintainable and readable
- â Clear separation of concerns
- â Documentation updated
Remember: Prevention > Cure
This skill prevents “caught by accident” scenarios by:
- Checking BEFORE editing (preventive)
- Alerting DURING creation (proactive)
- Suggesting AFTER reading (reactive)
- Enforcing patterns automatically
The goal: Never again discover an oversized, complex file by accident.
Multi-language support: Works across JavaScript/TypeScript, Python, and general codebases with language-specific patterns.