Intelligent refactor command. Triggers: refactor, refactoring, cleanup, restructure, extract, simplify, modernize.
npx skills add https://github.com/code-yeongyu/oh-my-openagent --skill refactor
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:
[User's original request]
[Insert codemap here]
[Insert verification plan here]
)
\\\`
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.`
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation
Use when completing tasks, implementing major features, or before merging to verify work meets requirements
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
Comprehensive GitHub code review with AI-powered swarm coordination
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid overcomplication, make surgical changes, surface assumptions, and define verifiable success criteria.
Use this skill to review code. It supports both local changes (staged or working tree) and remote Pull Requests (by ID or URL). It focuses on correctness, maintainability, and adherence to project standards.
Refactor bloated AGENTS.md, CLAUDE.md, or similar agent instruction files to follow progressive disclosure principles. Splits monolithic files into organized, linked documentation.
Create high-quality git commits: review/stage intended changes, split into logical commits, and write clear commit messages (including Conventional Commits). Use when the user asks to commit, craft a commit message, stage changes, or split work into multiple commits.
Take code-yeongyu/refactor from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.