| name | refactor |
| description | Safely restructure code in an isolated git worktree with test-preserved, incremental transformations |
| disable-model-invocation | true |
| effort | max |
Safely refactor code while preserving all existing behavior.
Refactoring goal: $ARGUMENTS
Instructions
Follow these phases in order. Each phase has a gate — do not proceed until the gate is satisfied. Apply all project rules and conventions that are in your context.
If the refactor touches browser UI, Playwright, dev-server ports, screenshots, or interactive Browser/Chrome inspection, apply ../_shared/ui-automation.md at scoping, environment setup, baseline, verification, delegation, and cleanup points.
Phase 1: Setup
Follow ../_shared/worktree-setup.md with branch prefix refactor.
Gate: Working directory is the new worktree on the correct branch, based on latest main. If .env* files existed in the source repo, they are all present in the worktree.
Phase 2: Scope
Start two tracks in parallel:
Background — Environment setup: First check for a reusable environment: if .env-setup-done exists in the worktree root AND every dependency manifest/lockfile present (package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, pyproject.toml, uv.lock, go.mod, go.sum) is older than the sentinel ([ "$f" -ot .env-setup-done ]), skip the launch and note the reuse — the setup from a prior run in this worktree is current. Otherwise, launch a background agent (run_in_background: true) to set up the dev environment per ../_shared/env-setup.md.
Foreground — Scoping:
- Parse the refactoring goal — what is being restructured and why?
- Identify all affected files by searching the codebase for the code to be changed and its dependents.
- Check test coverage for the affected code — what tests exist? What is untested?
- If test coverage is insufficient for safe refactoring, tell the user and suggest writing tests first before refactoring.
Gate: The scope is clear. Affected files and their test coverage are identified.
Phase 3: Baseline
Pre-gate: Check for .env-setup-done in the worktree root.
- If present: verify dependencies are installed (e.g.
node_modules/ exists, pip list succeeds, go env GOPATH works) and data symlinks resolve correctly.
- If
.env-setup-failed exists: surface the error and halt.
- If neither file exists: the background agent is still running — wait for it to finish before proceeding.
- Choose a baseline proof command from the affected scope. Prefer the smallest package/test command that covers the code being moved; use full
make test/make test-fast when the refactor crosses packages, touches shared infrastructure, or cannot be bounded.
- Run that baseline proof command.
- If it fails, stop and report. Do not refactor on a broken codebase. Suggest using
/agent-dashboard:fix first.
- Record the command and output as the regression baseline.
For UI baselines, prefer headless Playwright with worktree-local resources. Use interactive Browser/Chrome inspection only when the shared policy says it is warranted.
Gate: The scoped baseline passes. The proof command is recorded.
Phase 4: Transform
Effort note: When launched via the agent-dashboard's New Agent flow, this skill spawns with --effort high on the CLI, which Claude Code pins at the session level. The dynamic dispatcher in agent-state-fast.js bumps effort to max automatically while permission_mode='plan' (EnterPlanMode active) and drops back to high on exit — so planning runs at max effort without paying that cost during implementation. When invoked as a slash command inside an existing claude session, you can run /effort max before entering plan mode and /effort high (or lower) before implementation.
Delegation gate: Invoke /codex:setup to check Codex CLI availability. If the output contains "ready": true, delegate only if the user explicitly requested Codex delegation OR the refactor touches 10+ files / ~3,000+ lines of implementation. Below that threshold, the orchestration overhead costs more tokens than Claude implementing directly. If delegating, invoke /codex-delegate with the scope (Phase 2) and baseline (Phase 3) as implementation context, then skip to the phase gate. Otherwise, proceed below.
Apply the refactoring in small, atomic steps. For each step:
- Make a single, focused change (e.g., extract a function, rename a variable, move a file).
- Run the baseline proof command immediately after the change.
- If tests fail:
- Revert only the changed files (
git checkout -- <file1> <file2> ...)
- Analyze why it failed
- Try a different approach
- If tests pass, proceed to the next step.
Do not batch multiple changes between proof runs. One change, one proof run.
Gate: All transformations applied. The scoped proof passes after each step.
Phase 5: Cleanup
- Remove dead code — unused imports, functions, variables, files.
- Update any affected documentation or comments.
- Run the baseline proof one final time; run full
make test/make test-fast only if the cleanup widened the scope.
Gate: No dead code remains. The relevant proof passes.
Phase 6: Review, Commit, and Open PR
- Review all changes for correctness, security, and convention adherence.
- Verify that behavior is preserved — no new features, no bug fixes, only structural changes.
- Commit with a
refactor: conventional commit message that describes what was restructured and why.
- Open the PR by invoking
/agent-dashboard:pr. That skill owns conditional cleanup/formatting, final test gating when available, push, and gh pr create. Do not call gh pr create directly — a pr-skill-gate hook will block it.
Gate: Clean commit with conventional message. Behavior is unchanged. No critical or high-severity review issues. PR opened via /agent-dashboard:pr.
Phase 7: Cleanup (on merge)
Triggered when the user indicates the refactor has been merged upstream.
- Verify the branch is merged (warn if unmerged commits remain)
- Tear down environment resources: remove symlinks, stop dev servers or emulators, release any browser lease, remove worktree-local UI scratch state, delete
.env-setup-done/.env-setup-failed sentinel files
- Remove worktree and delete branch
- Confirm cleanup is complete