원클릭으로
refactor
Refactor existing code for quality, performance, or maintainability. Enforces core quality principles with ratchet gate.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Refactor existing code for quality, performance, or maintainability. Enforces core quality principles with ratchet gate.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Autonomous build loop with Karpathy ratcheting, GAN evaluator, and session chaining. Iterates story groups until all features pass or stopping criteria met.
Change the behavior of existing code — story-driven by default, or --issue N for a GitHub bug fix. Test-first, full verification, code review.
Code generation quality principles — TDD, typing, error handling, logging, API integration, LLM integration.
Brownfield change route — take an existing-code feature request from intent to a reviewed PR, scaling from a single /change to an epic via /spec→/design→/auto. Linear-tracked, backed by a committed DeepWiki.
[Internal pipeline stage — run by /auto self-heal and /implement validation when lint/type error volume is high; invoke directly only as a power user.] Turn compiler/linter output into a sharded work queue; fix per package with optional adversarial review — no full monorepo suite mid-shard.
[Internal pipeline stage — run by /auto (follow with /gate); invoke directly only as a power user.] Generate production code and tests for a story group using agent teams for parallel execution.
| name | refactor |
| description | Refactor existing code for quality, performance, or maintainability. Enforces core quality principles with ratchet gate. |
| argument-hint | [file-or-module-path] |
| context | fork |
Ultracode tip: A whole-repo
--sweepis a broad "scan many files, report the conclusion" task — run/effort ultracodebefore it for wider coverage. A targeted/refactor <path>is narrow and deterministic; leave ultracode off (/effort high) for those.
/refactor src/service/extraction.py
/refactor src/repository/
/refactor --sweep # whole-repo entropy scan (formerly /lint-drift)
/refactor --sweep --auto-fix # sweep + auto-commit CLEANUP-class items
/refactor --mechanical # bulk mechanical transform via specs/migrate/ (Bun Phase B)
Provide a file path or directory for a targeted refactor. Use --sweep for a whole-repo entropy scan that reports accumulated drift and routes findings back into the per-principle fix flow. Use --mechanical for a large pattern→pattern transform (port, framework swap, monorepo split) driven by specs/migrate/ mapping artifacts — not for principle-by-principle cleanup. The skill analyzes the target against core quality principles, plans the changes, and executes them one principle at a time (except --mechanical, which follows the migrate flow below).
Refactoring improves the internal structure of existing code without changing its observable behavior. No new features. No behavior changes. Every change must trace to a violation of the core quality principles.
For tiny cleanup that is obviously safe and local (for example one unused import, one typo in a comment, one lint-only change), use /vibe instead. Use /refactor when the change affects structure, module boundaries, tests, or multiple files.
/refactor --mechanical)For bulk faithful transforms (language port, framework upgrade call-sites, monorepo split) where the behaviour oracle is the existing suite — not a new product feature.
specs/migrate/ exists. If missing, copy templates from .claude/templates/migrate/ (README.md, MAPPING.md, CONSTRAINTS.tsv, CANARY.md) into specs/migrate/.MAPPING.md (and optional CONSTRAINTS.tsv). Do not fan out code until the mapping is specific enough that two independent readers would make the same mechanical choice.code-reviewer instances on specs/migrate/MAPPING.md (+ CONSTRAINTS.tsv if present) with fresh context; merge with merge-review-verdicts.js --policy union if both produce verdict JSON, or require a human ack for high-risk ports. Fix mapping conflicts before any production edit.specs/migrate/CANARY.md. A canary failure revises the mapping — do not extend a broken pattern.fix-from-diagnostics when the fan-out produces a large type/lint wall.review-tier.js).code-reviewer spawn to apply .claude/skills/code-gen/references/semantic-divergence.md (assert side effects, rounding, bounds, Drop/defer, placeholder constants). Record open hazards in MAPPING.md → Semantic divergence watchlist.keeping-refactors-pure when behaviour is unchanged). Prefer review-attributed subjects after dual review:
git commit -m "$(node .claude/scripts/review-commit-msg.js --subject 'port: canary batch' --from-audit specs/reviews/adversarial-review-audit.json)"
This mode is not /build or /sprint. If the work needs new product behaviour, use /change or /feature instead.
/refactor --sweep)/refactor <path> fixes a targeted area. /refactor --sweep runs the whole-repo entropy scan (this absorbs the former /lint-drift skill): it reports accumulated drift and routes the findings back into the per-principle fix flow below. Entropy control for agent-generated code — as agents replicate patterns, drift accumulates.
What the sweep scans:
code-graph.json, not grep): orphan/dead files (fan_in == 0), layer-violation import directions, unstable hubs, cycles. Run /code-map first if the graph is missing or stale (stale = .claude/state/graph-dirty.jsonl non-empty — the graph-refresh Stop hook normally drains it); prefer the graph over grep. Always grep for dynamic references (getattr, registries, importlib) before declaring anything dead.code-map nor a targeted refactor finds it).code-gen/SKILL.md (do not restate them); the length/type cases are also enforced live by the hooks — the sweep catches what predates them.Sweep workflow:
code-graph.json (/code-map) if missing or stale..claude/state/last-drift-scan.txt, a commit SHA); full scan if no marker.specs/reviews/drift-report.md — category, file:line, suggested fix, severity (CLEANUP / REFACTOR / DEBT).--auto-fix, CLEANUP-class items may be auto-committed — they must pass the full ratchet gate..claude/state/last-drift-scan.txt.When to sweep: after every ~5 /auto iterations, before a release, or when learned-rules.md grows past ~10 rules (pattern-accumulation signal). Do not refactor code outside the current change's scope without recording it as drift first.
Read .claude/skills/code-gen/SKILL.md in full. Its core quality principles are the refactoring standard. Every change planned in Step 4 must cite a specific principle.
Context-first (Iron Law) — REQUIRED when specs/brownfield/code-graph.json exists and is not a placeholder. Before broad source reads or unconstrained search over the target:
node .claude/scripts/context-pack.js --diff --budget 1600 "<refactor goal or target path>"
# blast radius for renames/moves (when you have a node id or path):
node .claude/skills/code-map/scripts/code_wiki.js query --graph specs/brownfield/code-graph.json --callers <id>
Read only pack read_next ranges (and skeletons + Read(offset, limit) for god files). Use task_map and caller results as the impact seed. If confidence is low / no_match, one narrow rg then re-pack — do not multi-file explore. If the graph is missing on a non-trivial codebase, recommend /brownfield before broad refactoring.
If maps exist and pack confidence is low, optionally read architecture-map.md, risk-map.md, or change-strategy.md — do not front-load every essay when the pack is high-confidence. Locate symbols via pack ranges first, then symbol-map.md (Lstart-Lend); for files flagged in skeletons/, read the .skel.md and then only the relevant symbol slice with Read(offset, limit) instead of the whole file.
Coverage preflight — REQUIRED SUB-SKILL: checking-coverage-before-change for every symbol in the target path before the first edit. COVERED symbols give you the regression oracle to run after each step; UNCOVERED symbols route to pinning-down-behavior (or sprouting-instead-of-editing) before any in-place edit.
Migration preflight — REQUIRED SUB-SKILL: checking-migration-safety if the refactor touches ORM models or schema files (e.g. renaming a model field). A behavior-preserving refactor that requires a schema migration is two deployables, not one commit.
Canvas sync preflight: if specs/design/reasons-canvas.md exists and the refactor moves, renames, splits, deletes, or creates governed source files, update the Canvas Operations and Governs sections before the refactor is considered complete. After the file movement/change, run npm run canvas-sync; a mismatch is a hard-block because a refactor must not leave the living design pointing at stale paths.
For each file in the target path:
code-gen/references/architecture.md)any (TypeScript) or missing type hints (Python). Count unannotated parameters and return types.Record findings in a structured list before proceeding.
Map each finding from Step 2 to one of the core quality principles:
any, missing annotations, untyped domain concepts.except, untyped catches, swallowed errors.Only violations of these principles justify a change. Do not refactor code that complies with the principles.
Invoke superpowers:writing-plans to produce a structured refactoring plan. This ensures the plan is reviewed before execution and prevents ad-hoc changes that drift from the quality principles.
Produce a written plan before touching any code:
File: src/service/extraction.py
Change: Split extract_data() into extract_raw(), validate_schema(), transform_fields()
Principle: #3 — extract_data() is 87 lines
Risk: One caller in api/routes.py — update import after split
File: src/service/extraction.py
Change: Add return type annotation to all 4 functions
Principle: #2 — return types missing
Risk: None
List every file, what will change, which principle it violates, and any known call-site impact.
Apply changes for one principle across all affected files. Then run the test suite. Then proceed to the next principle.
Canary a large mechanical fix first. When a single principle's fix spans more than ~10 files (typical of a --sweep --auto-fix batch, or a large targeted refactor), apply it to a small trial batch — 3 files, or the smallest representative sample — and run tests, lint, and type checks on that batch before extending the same mechanical edit to the rest. A canary failure is a fast, cheap signal about the mechanical pattern itself; discovering the same defect after applying it to all N files means bisecting after the fact. Skip this for small batches (~10 files or fewer) — the canary's overhead isn't worth it.
Order of execution:
After each principle: run tests, run lint, run type checks. If anything breaks, fix it before moving to the next principle.
When committing, follow keeping-refactors-pure: commit with HARNESS_COMMIT_KIND=refactor git commit … — the pre-commit hook then blocks any staged test/snapshot edits (a pure refactor leaves them byte-identical). Any behavioral fix discovered en route goes in a separate behavior commit.
/simplify)After the principle-driven refactor is complete and the suite is green (Step 5), run Claude Code's native /simplify over the refactor's changed files to catch mechanical cleanups the manual pass missed — duplicate logic that should reuse a helper, redundant branches, needless intermediate variables, altitude/efficiency tweaks. Native /simplify applies the kind of fix the harness reviewers only report, so it is genuinely additive — not a duplicate of code-reviewer, which owns the structural / SOLID / module-depth judgment /simplify does not do.
Fence it with the same behavior-preservation discipline as the rest of this skill:
/simplify is quality-only (it does not hunt bugs) and assumes already-correct code./simplify operates on the changed code; do not let it wander outside the refactor's target path. Reject any edit to a file the refactor did not already touch./simplify turns a test red, that edit was not behavior-preserving — revert that specific change, never the test.keeping-refactors-pure (HARNESS_COMMIT_KIND=refactor). The pre-commit hook blocks staged test edits, so a cleanup that quietly rewrites a test is caught automatically.Skip this step when the refactor's entire purpose was a single mechanical change /simplify would itself propose — there is nothing left to clean.
After all changes are complete, spawn the code-reviewer agent (harness-provided: .claude/agents/code-reviewer.md) on the full diff. Native /simplify (Step 6) already absorbed the mechanical cleanups; the reviewer now judges structure — SOLID, module depth, abstraction quality, public-interface testing — which /simplify does not touch.
The reviewer will return findings at three severity levels:
Address every BLOCK finding. Re-run the reviewer after each fix cycle. Maximum 3 retry cycles.
If BLOCK findings remain after 3 cycles, stop and report the unresolved issues. Do not ship code with unresolved BLOCK findings.
/change.The target path contains refactored code that:
getattr, decorator registries, and plugin systems reference symbols by string. Verify with a project-wide search before deleting.