firstp1ck/pi-coding-agent-forge/refactoring-advisor

Claude Code and agent skill by firstp1ck/pi-coding-agent-forge

Trust tier 3
  • community
  • ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Source check pending

Checking that the SKILL.md file is still in the repository.

Agents should invoke this skill for refactors, code smells, migrations, duplication removal, module splitting, API cleanup, or restructuring plans. Emphasizes small safe steps, behavior preservation, and verification after each change.

Install

npx vskill@latest install firstp1ck/pi-coding-agent-forge/refactoring-advisor

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

Refactoring Advisor

Systematic code smell detection and safe refactoring planning. Every refactoring plan ensures the codebase compiles and passes tests at every intermediate step.

Quick Start

Identify and Plan a Refactoring
  1. Detect the smell: What's wrong and why does it matter?
  2. Assess the risk: What could break? How large is the blast radius?
  3. Check test coverage: Are the affected areas covered? If not, add tests first.
  4. Plan incremental steps: Each step should leave the code in a working state.
  5. Estimate effort: Size the work (S/M/L/XL) and identify dependencies.

Common Code Smells by Language

Rust
SmellDescriptionRefactoring
God structOne struct with too many fields/methodsExtract into smaller, focused structs
Unnecessary clones.clone() where borrowing would workReplace with borrows, use lifetimes
Stringly typedUsing String where an enum fitsIntroduce enum with From impls
Match explosionHuge match blocks that grow with every variantExtract match arms into methods, use trait dispatch
Unwrap sprawl.unwrap() scattered through non-test codeReplace with ? operator, proper error handling
Leaky abstractionpub on internal implementation detailsReduce to pub(crate) or pub(super)
Monolithic lib.rsEverything in one fileSplit into focused modules
Over-genericGenerics where a concrete type sufficesSimplify to concrete types until generics are needed
TypeScript / React
SmellDescriptionRefactoring
Prop drillingProps passed through 3+ component levelsExtract to context, composition, or custom hook
God componentComponent with 200+ lines or multiple responsibilitiesSplit into focused components
Barrel file bloatIndex files re-exporting everythingDirect imports, remove barrel files
Any escape hatchas any or // @ts-ignore hiding type issuesFix the types, use type guards or discriminated unions
useEffect spaghettiMultiple unrelated effects in one componentSplit effects, extract to custom hooks
Inline styles sprawlStyles defined inline instead of using design systemExtract to CSS modules, Tailwind classes, or styled components
Callback prop chainsPassing callbacks through many layersUse context or state management
State duplicationSame data stored in multiple state variablesDerive computed values, single source of truth
Django / Python
SmellDescriptionRefactoring
Fat viewsBusiness logic in views instead of servicesExtract to service layer
Circular importsModules importing each otherRestructure boundaries, use lazy imports
God modelOne model with 20+ fields and many methodsSplit into related models, use composition
N+1 queriesDatabase queried in a loopAdd select_related() / prefetch_related()
Magic stringsHardcoded strings for choices, status, etc.Use TextChoices / IntegerChoices enums
Untyped functionsMissing type hints on public functionsAdd type annotations, run mypy
Test-free codeNo tests for critical business logicAdd tests before refactoring
Signal spaghettiComplex logic hidden in Django signalsReplace with explicit method calls

Refactoring Safety Protocol

Before Any Refactoring
  1. Verify test coverage. Run existing tests. If the area being refactored has no tests, write characterization tests first.
  2. Create a checkpoint. Ensure all changes are committed. The refactoring starts from a clean state.
  3. Define the end state. What does "done" look like? How will you verify success?
During Refactoring
  1. One change at a time. Each commit should be a single, focused refactoring step.
  2. Compile after every change. (cargo check, tsc --noEmit, python -m py_compile)
  3. Run tests after every change. If tests fail, fix before proceeding.
  4. No behavior changes. Refactoring changes structure, not behavior. If behavior must change, do it in a separate step.
After Refactoring
  1. Full test suite passes.
  2. Clippy / ESLint / Ruff clean. No new warnings introduced.
  3. Review the diff. Does the change accomplish what was intended? Any accidental behavior changes?

Refactoring Plan Template

When proposing a refactoring, use this structure:

markdown
## Refactoring Plan: [Description]
**Target:** [File/module/component]
**Smell:** [What's wrong]
**Goal:** [What "done" looks like]
**Risk:** Low / Medium / High
**Effort:** S / M / L / XL
**Test coverage:** Adequate / Needs improvement first
### Pre-requisites
-[ ] Tests pass on current code
-[ ] [Any additional pre-reqs]
### Steps
1.**[Step 1 description]**
-Files affected: [list]
-Verification: `cargo check && cargo test`
2.**[Step 2 description]**
-Files affected: [list]
-Verification: `cargo check && cargo test`
[... more steps ...]
### Rollback
If issues arise: `git revert` to the last passing commit.
### Success Criteria
-[ ] All tests pass
-[ ] No new clippy/lint warnings
-[ ] [Specific architectural improvement verified]

Migration Strategies

Pattern: Strangler Fig

For gradually replacing a legacy module:

  1. Create the new module alongside the old one
  2. Route new features through the new module
  3. Gradually migrate existing callers
  4. Remove the old module when all callers are migrated

Best for: Large-scale replacements where a clean cut is risky.

Pattern: Branch by Abstraction

For replacing an implementation behind an interface:

  1. Introduce an abstraction (trait/interface) over the current implementation
  2. Update callers to use the abstraction
  3. Implement the new version behind the same abstraction
  4. Switch the wiring (dependency injection, feature flag)
  5. Remove the old implementation

Best for: Swapping implementations (database, API client, algorithm).

Pattern: Parallel Change (Expand-Contract)

For changing a widely-used interface:

  1. Expand: Add the new interface alongside the old one
  2. Migrate: Update callers one by one to use the new interface
  3. Contract: Remove the old interface

Best for: API changes, function signature updates, data structure migrations.


Integration

  • Data: Refactoring plans and outcomes logged to MEMORY.md
  • Tests: Always verify test coverage before and after. Use cargo test -- --test-threads=1, bun test, or uv run pytest
  • Tech debt: If a refactoring is deferred, add it to the tech debt registry in MEMORY.md

_Arc skill — Refactoring strategies and code smell detection_

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
5

Not refreshed yet.

Extension points

  • hookPre/post lifecycle hooks

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/firstp1ck/pi-coding-agent-forge/refactoring-advisor/badge)](https://verified-skill.com/skills/firstp1ck/pi-coding-agent-forge/refactoring-advisor)

Something wrong with this skill or its page? Tell us.