Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Intelligent refactor command. Triggers: refactor, refactoring, cleanup, restructure, extract, simplify, modernize.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 416% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 195% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 372% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 257% | 0% |
export const REFACTOR_TEMPLATE = # Intelligent Refactor Command
\\\ /refactor <refactoring-target> --scope=<file|module|project>] --strategy=<safe|aggressive>]
Arguments: refactoring-target: What to refactor. Can be:
Options: --scope: Refactoring scope (default: module)
--strategy: Risk tolerance (default: safe)
\\\
Performs intelligent, deterministic refactoring with full codebase awareness. Unlike blind search-and-replace, this command:
BEFORE ANY ACTION, classify and validate the request.
| Signal | Classification | Action | |--------|----------------|--------| | Specific file/symbol | Explicit | Proceed to codebase analysis | | "Refactor X to Y" | Clear transformation | Proceed to codebase analysis | | "Improve", "Clean up" | Open-ended | MUST ask: "What specific improvement?" | | Ambiguous scope | Uncertain | MUST ask: "Which modules/files?" | | Missing context | Incomplete | MUST ask: "What's the desired outcome?" |
Before proceeding, confirm:
If ANY of above is unclear, ASK CLARIFYING QUESTION:
\\\ I want to make sure I understand the refactoring goal correctly.
What I understood: interpretation] What I'm unsure about: specific ambiguity]
Options I see:
My recommendation: suggestion with reasoning]
Should I proceed with recommendation], or would you prefer differently? \\\
IMMEDIATELY after understanding the request, create todos:
\\\ TodoWrite([ {"id": "phase-1", "content": "PHASE 1: Codebase Analysis - launch parallel explore agents", "status": "pending", "priority": "high"}, {"id": "phase-2", "content": "PHASE 2: Build Codemap - map dependencies and impact zones", "status": "pending", "priority": "high"}, {"id": "phase-3", "content": "PHASE 3: Test Assessment - analyze test coverage and verification strategy", "status": "pending", "priority": "high"}, {"id": "phase-4", "content": "PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan", "status": "pending", "priority": "high"}, {"id": "phase-5", "content": "PHASE 5: Execute Refactoring - step-by-step with continuous verification", "status": "pending", "priority": "high"}, {"id": "phase-6", "content": "PHASE 6: Final Verification - full test suite and regression check", "status": "pending", "priority": "high"} ]) \\\
Mark phase-1 as in_progress.
Fire ALL of these simultaneously using \call_omo_agent\:
\\\ // Agent 1: Find the refactoring target call_omo_agent( subagent_type="explore", run_in_background=true, prompt="Find all occurrences and definitions of TARGET]. Report: file paths, line numbers, usage patterns." )
// Agent 2: Find related code call_omo_agent( subagent_type="explore", run_in_background=true, prompt="Find all code that imports, uses, or depends on TARGET]. Report: dependency chains, import graphs." )
// Agent 3: Find similar patterns call_omo_agent( subagent_type="explore", run_in_background=true, prompt="Find similar code patterns to TARGET] in the codebase. Report: analogous implementations, established conventions." )
// Agent 4: Find tests call_omo_agent( subagent_type="explore", run_in_background=true, prompt="Find all test files related to TARGET]. Report: test file paths, test case names, coverage indicators." )
// Agent 5: Architecture context call_omo_agent( subagent_type="explore", run_in_background=true, prompt="Find architectural patterns and module organization around TARGET]. Report: module boundaries, layer structure, design patterns in use." ) \\\
While background agents are running, use direct tools:
\\\typescript // Find definition(s) LspGotoDefinition(filePath, line, character) // Where is it defined?
// Find ALL usages across workspace LspFindReferences(filePath, line, character, includeDeclaration=true)
// Get file structure LspDocumentSymbols(filePath) // Hierarchical outline LspWorkspaceSymbols(filePath, query="target_symbol]") // Search by name
// Get current diagnostics lsp_diagnostics(filePath) // Errors, warnings before we start \\\
\\\bash // Find structural patterns python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' --lang ts src/
sg --pattern 'old_pattern]' --rewrite 'new_pattern]' --lang ts src/ \\\
\\\ grep(pattern="[search_term]", path="src/", include="*.ts") \\\
\\\ background_output(task_id="[agent_1_id]") background_output(task_id="[agent_2_id]") ... \\\
Mark phase-1 as completed after all results collected.
Mark phase-2 as in_progress.
Based on Phase 1 results, build:
\\\
path/to/file.ts:L10-L50\ - Primary definitionpath/to/file2.ts:L25\ - Key usage\\\ [TARGET] ├── imports from: │ ├── module-a (types) │ └── module-b (utils) ├── imported by: │ ├── consumer-1.ts │ ├── consumer-2.ts │ └── consumer-3.ts └── used by: ├── handler.ts (direct call) └── service.ts (dependency injection) \\\
| Zone | Risk Level | Files Affected | Test Coverage | |------|------------|----------------|---------------| | Core | HIGH | 3 files | 85% covered | | Consumers | MEDIUM | 8 files | 70% covered | | Edge | LOW | 2 files | 50% covered |
\\\
Based on codemap:
Mark phase-2 as completed.
Mark phase-3 as in_progress.
\\\bash
cat package.json | jq '.scripts | keys] | select(test("test"))'
ls -la pytest.ini pyproject.toml setup.cfg
ls -la _test.go \\\
\\\ // Find all tests related to target call_omo_agent( subagent_type="explore", run_in_background=false, // Need this synchronously prompt="Analyze test coverage for TARGET]:
) \\\
Based on test analysis:
| Coverage Level | Strategy | |----------------|----------| | HIGH (>80%) | Run existing tests after each step | | MEDIUM (50-80%) | Run tests + add safety assertions | | LOW (<50%) | PAUSE: Propose adding tests first | | NONE | BLOCK: Refuse aggressive refactoring |
If coverage is LOW or NONE, ask user:
\\\ Test coverage for TARGET] is LEVEL].
Risk Assessment: Refactoring without adequate tests is dangerous.
Options:
Which approach do you prefer? \\\
\\\
bun test\ / \npm test\ / \pytest\ / etc.tsc --noEmit\ / \pyright\ / etc.After each refactoring step:
\\\
Mark phase-3 as completed.
Mark phase-4 as in_progress.
\\\ Task( subagent_type="plan", prompt="Create a detailed refactoring plan:
## Refactoring Goal User's original request]
## Codemap (from Phase 2) Insert codemap here]
## Test Coverage (from Phase 3) Insert verification plan here]
## Constraints
## Requirements
) \\\
After receiving plan from Plan agent:
Convert Plan agent output into granular todos:
\\\ TodoWrite([ // Each step from the plan becomes a todo {"id": "refactor-1", "content": "Step 1: [description]", "status": "pending", "priority": "high"}, {"id": "verify-1", "content": "Verify Step 1: run tests", "status": "pending", "priority": "high"}, {"id": "refactor-2", "content": "Step 2: [description]", "status": "pending", "priority": "medium"}, {"id": "verify-2", "content": "Verify Step 2: run tests", "status": "pending", "priority": "medium"}, // ... continue for all steps ]) \\\
Mark phase-4 as completed.
Mark phase-5 as in_progress.
For EACH refactoring step:
in_progress\Use appropriate tool:
For Symbol Renames: \\\typescript lsp_prepare_rename(filePath, line, character) // Validate rename is possible lsp_rename(filePath, line, character, newName) // Execute rename \\\
For Pattern Transformations: \\\bash // Preview first sg --pattern 'pattern]' --rewrite 'rewrite]' --lang ts path/to/file.ts
// If preview looks good, execute python3 scripts/ast_grep_helper.py replace 'pattern]' 'rewrite]' --lang ts path/to/file.ts --apply \\\
For Structural Changes: \\\typescript // Use Edit tool for precise changes edit(filePath, oldString, newString) \\\
\\\typescript // 1. Check diagnostics lsp_diagnostics(filePath) // Must be clean or same as baseline
// 2. Run tests bash("bun test") // Or appropriate test command
// 3. Type check bash("tsc --noEmit") // Or appropriate type check \\\
completed\If ANY verification fails:
NEVER proceed to next step with broken tests.
After each logical group of changes:
\\\bash git add changed-files] git commit -m "refactor(scope): description
details of what was changed and why]" \\\
Mark phase-5 as completed when all refactoring steps done.
Mark phase-6 as in_progress.
\\\bash
bun test # or npm test, pytest, go test, etc. \\\
\\\bash
tsc --noEmit # or equivalent \\\
\\\bash
eslint . # or equivalent \\\
\\\bash
bun run build # or npm run build, etc. \\\
\\\typescript // Check all changed files for (file of changedFiles) { lsp_diagnostics(file) // Must all be clean } \\\
\\\markdown
path/to/file.ts\ - what changed]path/to/file2.ts\ - what changed]All existing tests pass. No new errors introduced. \\\
Mark phase-6 as completed.
as any\, \@ts-ignore\, \@ts-expect-error\sg --pattern ... --rewrite ... --lang ...)If any of these occur, STOP and consult user:
You already know these tools. Use them intelligently:
Leverage LSP tools for precision analysis. Key patterns:
LspGotoDefinition\ to grasp contextLspFindReferences\ to map all usages before modificationlsp_prepare_rename\ → \lsp_rename\ for symbol renameslsp_diagnostics\ after every changeUse \ast-grep\ skill helper or \sg\ CLI for structural transformations. Critical: Always preview first, review, then execute.
explore\: Parallel codebase pattern discoveryplan\: Detailed refactoring plan generationoracle\: Read-only consultation for complex architectural decisions and debugginglibrarian\: Use proactively when encountering deprecated methods or library migration tasks. Query official docs and OSS examples for modern replacements.When you encounter deprecated methods/APIs during refactoring:
librarian\ to find the recommended modern alternativelibrarian\ to fetch latest API docs before making changesRemember: Refactoring without tests is reckless. Refactoring without understanding is destructive. This command ensures you do neither.
<user-request> $ARGUMENTS </user-request>
export const REFACTOR_TEAM_MODE_ADDENDUM =
Team mode is enabled for this session. The rules below override Phase 4-6 above. Follow this protocol instead of the in-session step-by-step execution.
When invoking the Plan agent in Phase 4.1, append this additional requirement to the prompt:
\\\
\\\
Classification rules the plan agent must apply to each step:
quick\: mechanical edits — LSP rename, extract variable, inline, simple move, signature change without call-site logic.unspecified-low\: logic-preserving refactors that need reasoning — extract function, restructure conditional, pattern transformation, cross-file API change.team\ path when \file_independent_steps >= 3\; recommend \legacy\ otherwise.Read the Team Staffing Recommendation from Phase 4. If any required field is missing, fail here and re-request the plan with the exact missing field names. Do not proceed with a partial plan.
Then choose the path:
team\ AND \file_independent_steps >= 3\. Members execute in parallel, Lead orchestrates, a \deep\ verifier lives outside the team.Record the chosen path in the TodoWrite list.
refactor-squad\ team executionPrecondition checks (fail hard if any step fails):
team-mode\ skill via the \skill\ tool for lifecycle, message protocol, and limits.team_list\ and verify no active \refactor-squad\ run exists; if one does, shutdown + delete the orphan before proceeding.~/.omo/teams/refactor-squad/config.json\ is missing, write it using the spec below.Team spec (\~/.omo/teams/refactor-squad/config.json\):
\\\json { "name": "refactor-squad", "lead": { "kind": "subagent_type", "subagent_type": "sisyphus" }, "members": [ { "kind": "category", "category": "quick", "prompt": "You handle mechanical refactoring steps (LSP rename, extract variable, inline, simple move, signature change). Use LSP tools for correctness. Apply the task description's per-step instructions verbatim — no scope expansion. After edits, run lsp_diagnostics on touched files. Report via team_send_message(teamRunId=<id>, to=\"lead\", summary=<files touched>, body=<lsp status + diff summary>) + team_task_update(status=completed). Never run tests — the external verifier handles that. Never git add, never --continue." }, { "kind": "category", "category": "quick", "prompt": "Same contract as peer quick worker." }, { "kind": "category", "category": "unspecified-low", "prompt": "You handle logic-preserving refactors that need reasoning (extract function, restructure conditional, pattern transformation, cross-file API change). Read the task description's plan step carefully. Use the ast-grep skill helper or sg CLI to preview structural rewrites first, review the preview, then execute. If the step is ambiguous or would require out-of-scope changes, STOP and send team_send_message(teamRunId=<id>, to=\"lead\", summary=\"UNCLEAR\", body=<reason>) + team_task_update(status=pending). Same reporting contract as peer quick workers. Never run tests." }, { "kind": "category", "category": "unspecified-low", "prompt": "Same contract as peer unspecified-low worker." } ] } \\\
Rationale for this composition:
deep\ reasoning (or \unspecified-high\ fallback). In-team category routing downcasts to sisyphus-junior, which is weaker than required — the verifier runs OUTSIDE the team as a \task(category="deep")\.Team lifecycle (one team, reused until Phase 6 cleanup):
team_create(teamName="refactor-squad")\. Record \teamRunId\.\\\ team_send_message( teamRunId=<id>, to="*", kind="announcement", summary="refactor-intent", body=<codemap summary + constraints + established patterns from Phase 2> ) \\\
\\\ team_send_message( teamRunId=<id>, to="*", kind="announcement", summary="verify-spec", body=<exact test/typecheck/lint commands + expected pass counts + regression indicators from Phase 3.4> ) \\\
team_task_create(teamRunId=<id>, subject="refactor step <N>: <short>", description=<per-step instructions from plan, including target files and line ranges, rollback strategy>, blockedBy=<from plan's per_step_assignment>)\.Lead monitoring loop:
While any team task is \pending | claimed | in_progress\:
<system-reminder>\ or member messages. Avoid tight polling; a single \team_status\ check is acceptable if no notification arrives within roughly 10 seconds of expected completion.\\\ task( category="deep", load_skills=[], run_in_background=true, description="verify step <N>", prompt=<files touched + verify-spec commands + instruction to return "PASS" or "FAIL:<failing test + specific error + suggested revert hunks>"> ) \\\ If \deep\ is unavailable, fall back to \category="unspecified-high"\. Do not create a commit checkpoint until the verifier returns PASS.
team_task_update(status=pending)\ on the original step + \team_send_message(teamRunId=<id>, to=<original member>, summary="retry", body=<specific failure from verifier>)\. Runtime reassigns.task()\ outside the team, broadcast an updated Intent Card fragment, then reassign.Proceed to Phase 6 only when every team task is \completed\ AND every paired verifier task returned PASS.
If Phase 5 used the team path, dismantle \refactor-squad\ BEFORE producing the 6.6 summary. Every exit path — success, escalation, abort — must cleanup; orphan teams poison the next session's precondition check.
team_shutdown_request\ for each member, then \team_approve_shutdown\ if members do not self-approve within a reasonable window.team_delete(teamRunId=<id>)\.team_list\ to confirm no residual \refactor-squad\ run.The \~/.omo/teams/refactor-squad/config.json\ declaration stays on disk; next session reuses it.
Append to the 6.6 summary a "Dispatch path" line and, when team path was used, team metrics (teamRunId, tasks created, verifier runs, team lifetime).
oracle\ / \librarian\ / \deep\ into the team spec — oracle/librarian are team-ineligible, and \deep\ under category routing downcasts to sisyphus-junior. Use them via \task()\ outside the team when needed.Other measured skills in the registry, with their headline benchmark lift.