review-changes
Skill0 starsChanged 34 days agoMITView on GitHub
A smart review board for the code changes made during the current session, served entirely from localhost (no cloud, no upload of the diff anywhere). The LLM first triages every change: IMPORTANT ones (they change behavior, change architecture, or have a side effect) go to the user for an explicit decision as side-by-side old → new diffs; MINOR ones (renames, formatting, comments, behavior-preserving refactors) are pre-reviewed and decided by the LLM, and the user may optionally flip any of those decisions. Once every change has a decision, the LLM writes a table (short title + decision per change) and the user gives a final green light (apply) or red light (reject every modification). Use this after finishing an implementation task, before the user commits, instead of making them read a raw diff. Triggers include "/review-changes", "let me review this visually", "show me a visual diff", "open a review page for these changes", or any request to review AI-made edits the way a pull request would be reviewed. Decisions are applied at hunk granularity — reverting only the rejected parts, keeping the rest — without touching git (no add/commit/checkout/reset), so the user still stages and commits everything themselves.
34 other projects use a version of this.
Adopted by
Most recently taken up by
- Doist/todoist-aitheir own version, first seen Nov 9, 2026
- lklimek/claudiustheir own version, first seen Nov 8, 2026
- Doist/todoist-clitheir own version, first seen Nov 8, 2026
- salasebas/skillstheir own version, first seen Nov 8, 2026
- pumpkit-io/sdlctheir own version, first seen Nov 1, 2026
- alexandrecsp/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use explore-codebase, debug-issue and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
srclightSkillexplore-codebase
This skill should be used when the user asks to "explore this codebase", "understand this project", "give me an overview", "how does this work", "onboard me", "walk me through the architecture", "map the codebase", or any request to understand a codebase's structure, architecture, or design.
Also in 4 projects that use this
NVIDIASkilldebug-issue
Use when the user asks to debug, investigate, or fix a GitHub issue or supplies a repository bug report.
Also in 4 projects that use this
srclightSkillrefactor-safely
This skill should be used when the user asks to "refactor", "rename", "move", "change a function signature", "extract a method", "delete unused code", "clean up", or any modification that could break callers or dependents. Provides a pre-change safety checklist using srclight's graph tools to assess blast radius before touching code.
Also in 4 projects that use this
JetBrainsSkillfix-bug
End-to-end bug fix workflow for the Exposed project. Accepts a GitHub issue (#NUMBER), YouTrack issue (EXPOSED-NUMBER), or YouTrack URL (https://youtrack.jetbrains.com/issue/EXPOSED-NUMBER). Fetches the issue, creates a failing reproducer test, commits on a new branch, implements the fix, validates, and opens a PR. Use this skill whenever the user wants to fix a bug from an issue tracker, mentions a EXPOSED issue number, or references a GitHub issue to fix.
Also in 3 projects that use this
SentrySkillwrite-tests
Write tests following project conventions. Use when adding new tests or modifying existing ones.
Also in 3 projects that use this
GitHubSkillrefactor
Surgical code refactoring to improve maintainability without changing behavior. Covers extracting functions, renaming variables, breaking down god functions, improving type safety, eliminating code smells, and applying design patterns. Less drastic than repo-rebuilder; use for gradual improvements.
Also in 3 projects that use this
Other versions34 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 34
- tirth8205/code-review-graph★ 33ksame name
- docker/docs★ 4.7ksame name
- Doist/todoist-ai★ 563same name
- Doist/todoist-cli★ 331same name
- blockscout/frontend★ 310same name
- timothywarner-org/claude-code★ 223same name
- appclawhq/AppClaw★ 111same name
- munvard/dockterm★ 48same name
- uniffy-io/uniffy★ 26same name
- jjxmonster/skills★ 8same name
24 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 5 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 33 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 43
Only review files *you* edited or created in this session, not incidental uncommitted changes already sitting in the repo.
- Very specific: line 54
Only runs git status/git diff/git show.
- Very specific: line 61
Read review-data.json and write <scratchpad>/classification.json, one entry per hunk of a modified file (key "<path>::<hunkId>") and one …
- Distinctive: line 96
If a "minor" hunk is entangled with an important one (e.g.
- Very specific: line 115
Always build with the script, never hand-splice the JSON (diff data can contain a literal </script> that would blank the page).
- Distinctive: line 162
Read it back in one or two sentences, file by file.
- Distinctive: line 167
Never run git add, git commit, git checkout, git reset, or any other mutating git command anywhere in this flow — steps 2 and 7 are …
- Distinctive: line 176
If the user wants changes that aren't a clean per-hunk revert ("keep the idea but write it differently"), don't force it through …
“Common” is measured: kept by at least 6 in 10 of the 33 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Review changes — the review board
Entirely local: git diff data → LLM triage (important vs. minor) →
board page (user decides important changes, may veto/flip minor ones;
the page closes on submit) → LLM-written decision table in the terminal →
green/red light, asked in the terminal → decisions applied to disk. The diff never leaves the machine — a Python stdlib HTTP server bound to
127.0.0.1 and the user's own browser pointed at it.
When to use this
Offer it once you've finished a chunk of implementation work and before the user is expected to commit — "Want to run these changes through the review board before we wrap up?" Don't force it; if the user says no or just says "looks good", proceed normally. Also invoke directly when the user asks by name.
Set <scratchpad> to the session scratchpad directory. Delete any stale
decisions.json there before starting.
Step 1 — Know exactly which files you touched
Only review files you edited or created in this session, not incidental
uncommitted changes already sitting in the repo. Keep a list of paths as you go
(every Edit/Write call) and use that explicit list — don't rely on
git status picking up "everything uncommitted."
Step 2 — Extract the diff data (read-only)
python3 <skill_dir>/scripts/build_review_data.py <scratchpad>/review-data.json --paths <file1> <file2> ...Only runs git status/git diff/git show. Classifies each file as
modified / added / deleted and breaks text diffs into hunks (ids h0,
h1, … per file). If files is empty, tell the user there's nothing to review
and stop.
Step 3 — Triage every change (this is your job, not a script's)
Read review-data.json and write <scratchpad>/classification.json, one entry
per hunk of a modified file (key "<path>::<hunkId>") and one entry per
added/deleted file (key "<path>"). Binary files are skipped.
{ "items": {
"src/pay.py::h0": { "importance": "important", "reasons": ["behavior"],
"title": "Retry failed charges 3 times", "rationale": "A failed charge used to raise immediately." },
"src/pay.py::h1": { "importance": "minor", "title": "Rename tmp to charge_result",
"rationale": "Local variable rename, no behavior change.",
"llmDecision": "accept", "llmWhy": "Clearer name, all usages updated." }
} }Important = the change does at least one of:
behavior— alters what the code does for some input, output, condition, default, error path, or public contract;architecture— adds/removes/moves a module, layer, dependency, interface, or shifts a responsibility;side-effect— touches I/O, network, database, filesystem, global/shared state, config, env, permissions, scheduling, or deletes something.
Minor = none of the above: renames of locals, formatting/whitespace, comments and docs, import ordering, dead-code removal that provably changes nothing, behavior-preserving refactors, typo fixes in strings nobody parses.
Rules:
- When in doubt, important. A false alarm costs a click; a hidden behavior change costs trust. Anything you can't classify falls back to important automatically.
- Never auto-reject an important change — only minor ones get an
llmDecision. For minor ones, actually review them:acceptif correct and consistent with the surrounding code,rejectif sloppy, redundant, out-of-scope churn, or a mistake.llmWhyis one honest line. titleis short (~8 words), states the change, not the file.- If a "minor" hunk is entangled with an important one (e.g. the rename only makes sense because of the new behavior), classify it important.
Then merge it in:
python3 <skill_dir>/scripts/merge_classification.py <scratchpad>/review-data.json <scratchpad>/classification.jsonIt prints counts and lists any item that fell back to important — fix your classification if that list isn't empty by accident.
Step 4 — Build the page and serve it
python3 <skill_dir>/scripts/build_review_page.py <skill_dir>/assets/template.html <scratchpad>/review-data.json <scratchpad>/review.html
python3 <skill_dir>/scripts/serve_review.py <scratchpad>/review.html <scratchpad>/decisions.json <scratchpad>/server.urlAlways build with the script, never hand-splice the JSON (diff data can contain
a literal </script> that would blank the page). Run serve_review.py with
run_in_background: true: it binds 127.0.0.1 only, writes its URL to
server.url, opens the browser, and blocks until the user submits.
Tell the user the board opened (give the URL from server.url) and how it
works: the Important tab lists changes that need their decision (Submit
stays disabled until each one is decided); the Minor tab shows Claude's
pre-made decisions, which they can ignore or flip; Files shows one file at
a time with a full-file toggle.
Step 5 — Wait for the submission
The server exits on its own as soon as the user clicks Submit review (the
page then closes itself, or tells the user to come back to the terminal). The
background task's completion notification is the signal — don't poll. Then
decisions.json exists in <scratchpad>.
Step 6 — Write the decision table, then ask for the final light
python3 <skill_dir>/scripts/build_summary.py <scratchpad>/review-data.json <scratchpad>/decisions.jsonPrints one row per change — your short title, importance, final decision, and who decided (Claude, or the user, with an override flag).
Copy the whole table into your own reply text. The script's output is a
tool result, which the user usually does not see — a message that merely says
"here's the table" shows them nothing. Only after the table is visible in your
message, ask for the final light with AskUserQuestion: Green light (apply
the table) or Red light (reject every modification).
Step 7 — Apply the final light
- Green → apply the table:
python3 <skill_dir>/scripts/apply_review.py <scratchpad>/review-data.json <scratchpad>/decisions.json <repo_root> - Red → reject every modification:
python3 <skill_dir>/scripts/apply_review.py <scratchpad>/review-data.json <scratchpad>/decisions.json <repo_root> --reject-all
apply_review.py only reads/writes plain files (and may delete a rejected new
file or restore a rejected deletion). It never calls git. It prints a JSON
summary of what was kept, reverted, partially reverted, restored, or deleted.
Read it back in one or two sentences, file by file; flag any partially
reverted file so the user double-checks it.
Notes
- Never run
git add,git commit,git checkout,git reset, or any other mutating git command anywhere in this flow — steps 2 and 7 are read-only git / plain-filesystem operations only. - Decision precedence: user click > Claude's minor-change verdict. Important changes have no default — the page won't let the user submit until each has an explicit decision.
- A hunk or file missing from
decisions.jsonis treated as accepted byapply_review.py(keep what was written) rather than silently reverting something nobody looked at. - If the user wants changes that aren't a clean per-hunk revert ("keep the idea but write it differently"), don't force it through approve/reject — make the edit normally after applying the decision.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

