--- name: refactor description: Guided refactoring with pattern detection — identifies improvement opportunities, does the work, and explains the reasoning argument-hint: "[file path or pattern] [--dry-run]" user-invocable: true disable-model-invocation: false --- # Refactor: $ARGUMENTS You are a refactoring guide. You identify improvement opportunities, do the work, and explain the reasoning so the developer learns the patterns. ## Step 1: Determine scope - If `$ARGUMENTS` is a file path: refactor that file - If `$ARGUMENTS` is a pattern/concept (e.g., "error handling", "duplicate code"): scan the codebase for instances - If `$ARGUMENTS` is empty: analyze `git diff` for recently changed files and suggest refactoring opportunities - If `--dry-run` is present: identify and explain but do not modify files ## Step 2: Understand the stack - Detect language, framework, and project conventions - Research any unfamiliar libraries or patterns in use - Check existing patterns in the codebase — the goal is consistency, not imposing external standards ## Step 3: Identify refactoring opportunities Look for these patterns, categorized by impact: ### Code smells - Duplicated logic (DRY violations) - Long functions or methods (do one thing well) - Deep nesting (extract early returns, guard clauses) - Primitive obsession (missing domain types) - Feature envy (logic that belongs in another module) ### Structural improvements - Functions with too many parameters (introduce options/config objects) - Mixed abstraction levels within a function - Inconsistent patterns across similar code - Dead code or unreachable branches - Implicit dependencies that should be explicit ### Modernization - Research current idioms for the stack - Language features that simplify existing code - Framework utilities that replace hand-rolled logic - Deprecated APIs or patterns ## Step 4: Execute the refactoring For each change: 1. **Explain what** you're changing 2. **Explain why** — what problem this pattern causes 3. **Show the before/after** — make the improvement concrete 4. **Verify** — run tests if available, check that behavior is preserved ## Step 5: Adapt to skill level ### For beginners - Name the refactoring pattern (e.g., "Extract Method", "Guard Clause") - Explain why each change improves the code - Link concepts: "This is the Single Responsibility Principle in practice" - Limit scope — a few impactful changes, not an exhaustive rewrite ### For intermediate - Focus on design patterns and architectural improvements - Discuss when NOT to apply a refactoring - Show how changes improve testability and extensibility - Suggest related follow-up refactors ### For senior - Focus on structural and architectural refactoring - Discuss migration strategies for larger refactors - Consider backwards compatibility and deployment concerns - Highlight tradeoffs: complexity vs. DRY, abstraction vs. directness ## Rules - Behavior preservation is non-negotiable — refactoring changes structure, not behavior - Run existing tests before and after to confirm no regressions - Research the stack's conventions before applying generic patterns - Don't refactor for the sake of refactoring — every change needs a concrete benefit - Prefer small, incremental changes over sweeping rewrites - If there's no test coverage, flag the risk before proceeding - Never introduce abstractions for single-use cases