AI agent skill · by @greenfield-inc
Refactor Simple
Read-only code quality analysis of the branch against the remote default branch for small to medium changes - classifies the diff, derives conventions from the target repo, and writes a refactor plan to ./tmp/. Usually run by the refactor orchestrator; use directly for a quick pre-PR check on 2-10 files.
Archived 2026-10-23 · Source updated 2026-10-12. Check the original repository for the latest version.
SKILL.md instructions
# Simple Refactor
**Read-only code quality analysis for small to medium changes.**
Safe to run anytime. Analyzes the branch against the target repository's own
conventions and writes a refactor plan without modifying files.
## What This Does
Fast, focused code quality analysis that:
1. Classifies your changes (size, type, complexity)
2. Learns the conventions of the repository you are in
3. Identifies code smells and convention violations in the lines you changed
4. Generates a refactor plan with auto-fixable and manual issues
5. Writes the plan to `./tmp/` for review
## When to Use
- **Small changes** (2-5 files, 50-200 lines)
- **Medium changes** (5-10 files, 200-500 lines)
- **Bug fixes** and **enhancements**
- Quick pre-PR quality check
For large features (>10 files, >500 lines), use `refactor-deep` instead. Simple and
deep are the whole set: simple is the cheap pass with the cleanest
signal-to-noise, deep is the one that finds real defects in big diffs. Run
both on a large PR when you want coverage; their findings overlap by about
half and the rest is complementary.
## Process
### 1. Classify Changes
Diff against the merge-base with the remote default branch, never a bare local
`main` - a stale local `main` pulls unrelated commits into the review and every
finding in them becomes a false positive.
Resolve the PR/current branch's relevant remote and that remote's default
branch before running these commands. If either is ambiguous or unavailable,
report the blocked comparison; do not guess a remote or silently review an
empty diff. Record the resolved remote, base ref, and merge-base for helpers.
```bash
# Resolve the relevant remote from the PR/current branch configuration first.
# Set REFACTOR_REMOTE to that verified name; do not assume origin.
git remote show "$REFACTOR_REMOTE"
# Resolve its actual default branch and set BASE to the verified remote ref.
# Fetch that branch explicitly if the ref is missing/stale, then verify it.
git rev-parse --verify "$BASE^{commit}"
MB=$(git merge-base "$BASE" HEAD)
git diff "$MB" --name-status
git diff "$MB" --numstat
git diff "$MB" --stat
```
Also enumerate non-ignored untracked files with
`git ls-files --others --exclude-standard -z`. Treat these as added files:
include their full contents and handwritten line counts in sizing and analysis,
applying the same generated/vendor/lockfile exclusions. Pass this file inventory
to every analyzer; plain `git diff` omits it. Do not stage files to inspect them.
`$BASE` is the remote's real default branch (`main`, `master`, `develop`),
never an assumed name. Diffing from the merge-base to the working tree - one
revision, not two - includes committed, staged, and unstaged work, so a
pre-PR run sees the edits that are not committed yet.
If the branch is behind `$BASE`, note it once as "rebase before merge"; it is
not a finding and does not lower the score.
**Determine:**
- **Size**: Tiny (<50) | Small (50-200) | Medium (200-500)
- **Type**: Bug Fix | Enhancement | Refactor
- **Complexity**: Trivial | Simple | Moderate
- **Layers**: Backend | Frontend | Both
Size counts changed source lines. A lockfile, generated file, or vendored
directory can add thousands of lines and no complexity - say so and classify
on the hand-written change.
### 2. Learn the Repository's Conventions
Conventions come from the repository you are in, never from a rule remembered
from another repo. In order:
1. Read `CLAUDE.md` / `AGENTS.md` at the root and in every directory the diff
touches. These state the conventions the maintainers actually enforce.
2. Read two or three exemplar files that neighbour the changed code - files
the maintainers clearly consider done - and note how they import, structure,
handle errors, and document.
3. Before flagging any convention violation, confirm the convention exists
here. `grep` how many existing files already do the thing. If the codebase
does it everywhere, it is the convention, not a violation.
An import style is a finding only when the target repository's guidance and
existing code establish that convention. Explain the actual impact rather than
assigning severity from a preference remembered from another project.
**Pattern Matrix:**
- **Tiny/Bug Fix** → Universal smells only
- **Small/Enhancement** → Universal + the repo's basic architecture rules
- **Medium** → Universal + architecture + documentation for new files
**Universal Smells (any repository):**
- Long functions (>100 lines), deep nesting (>3 levels)
- Magic numbers/strings
- Missing or swallowed error handling on new paths
- Unused imports/variables, commented-out code, TODOs without context
- Duplicate logic: two similar functions, hooks, or types where one with
options would do
- New public surface without a file-level or symbol-level comment when the
neighbouring code has them
**Repo-Derived Rules (Small+):** import style, layering (where logic is allowed
to live), state-management and hook patterns, error types, test conventions -
whatever steps 1-3 above surfaced, cited to the file that states them.
### 3. Analyze Files
Read the changed files and the non-ignored untracked file inventory gathered above:
```bash
git diff "$MB" --name-only
```
**Pre-existing vs introduced:** only issues in lines this branch adds or
changes count against the PR. Pre-existing debt in touched files may be listed
under Info as "pre-existing, not against this PR" and never lowers the score.
Read enough surrounding code to tell the difference - a `git blame` on the
line settles it.
### 4. Generate Report
Write the plan to `./tmp/simple-refactor-plan-[timestamp].md`:
```markdown
# Simple Refactor Plan
## Classification
- Size: [X] ([N] hand-written lines; [M] generated/lockfile lines excluded)
- Type: [X]
- Complexity: [X]
- Diff base: merge-base with $BASE at [sha], to working tree
- Conventions sourced from: [files read in step 2]
## Quality Score: X/10
## Issues Found
### Critical (Must Fix)
- [file:line] Description
→ Convention: [file that states it, or "universal"]
→ Fix: How to fix
→ Auto-fixable: Yes/No
### Warnings (Should Fix)
- [file:line] Description
→ Suggestion: Improvement
→ Auto-fixable: Yes/No
### Info (Nice to Have)
- [file:line] Suggestion
- [file:line] Pre-existing, not against this PR: description
## Auto-Fixable Issues: X
## Manual Fixes Required: Y
## Convention Compliance
✓/✗ [each repo-derived rule checked, with its source file]
## Recommendations
1. Hand this plan to `refactor-apply` (auto-fixable first)
2. Manually fix [specific issues]
3. Re-run `refactor-simple` to verify
## References
- Exemplar files studied: [paths]
- Convention sources: [paths]
```
An empty Critical section is a valid, common result. Do not manufacture
findings to fill the template; "no PR-introduced defects" is the honest
baseline for a clean change and should score accordingly.
### 5. Show Next Steps
```
📊 Analysis complete!
Plan written to: ./tmp/simple-refactor-plan-[timestamp].md
Quality Score: X/10
Auto-fixable: X issues · Manual fixes: Y issues
Issues found: [one line each for criticals and warnings]
Return the plan path to the caller. When run standalone, ask before running `refactor-apply`.
```
**IMPORTANT:** This skill never applies fixes. Standalone, ask the user
before proceeding to `refactor-apply`; under `refactor`, the orchestrator
owns that gate.
## Command Arguments
- `--strict`: Treat Medium as Large (stricter enforcement)
- `--classify-as=<type>`: Override type classification
- `--size=<size>`: Override size classification
## Success Checklist
- [ ] Diffed from the merge-base with the remote default branch to the working tree
- [ ] Changes classified, generated lines excluded from size
- [ ] Conventions read from THIS repo's guidance files and exemplars
- [ ] Every convention finding confirmed by grep before it was written
- [ ] Pre-existing debt separated from PR-introduced issues
- [ ] Auto-fixable vs manual separated
- [ ] Plan written to ./tmp/
- [ ] No files modified (read-only)
---
**This command is read-only and safe.** It analyzes code against the
conventions of the repository you are in and writes a refactor plan for you
to review. Run `refactor-apply` after reviewing the plan to apply fixes.