Change-by-Change Review

Review Claude Code edits directly in VS Code. See the original lines in red, the new lines in green, and choose Accept or Reject for each change.
Works with Claude Code in any permission mode, including auto mode. You can also snapshot a file to review your own edits.
What you can do
- Accept or reject individual changes, a whole file, or every pending file.
- Review changes in an inline diff or keep the normal editor with highlights.
- Find every file awaiting review in the Pending Changes panel.
- Move between changes with keyboard shortcuts.
- Undo and redo review decisions alongside your own typing.
Requirements
- VS Code 1.94 or later, or a compatible editor.
- Claude Code installed separately for automatic change capture.
- Node.js available on the
PATH where Claude Code runs. Check with node --version.
For WSL, Remote SSH, and dev containers, install the extension in the remote environment and run Claude Code there too.
Get started
- Install Change-by-Change Review by smithp from the Visual Studio Marketplace. For compatible editors that use Open VSX, use the Open VSX listing.
- Open your project. The extension automatically sets up its Claude Code hook.
- Start a new Claude Code session, or run
/hooks in an existing session, so the hook is picked up.
- Let Claude Code edit a file, then open the file or select it in Pending Changes in the bottom panel.
- Use Accept to keep a change or Reject to restore the original lines.
You can also install from the command line:
code --install-extension smithp.change-by-change-review
If you have a .vsix file, use Extensions: Install from VSIX... in the Command Palette. After replacing an installed version, run Developer: Reload Window.
Review your changes
A file awaiting review opens as — Changes to review. By default, the review shows old lines above new lines in a single column.
- Accept / Reject above a change applies to that change only.
- Accept file / Reject file at the top applies to every pending change in that file.
- Click a change's gutter icon to open its change bar and inspect the original lines.
- Select a change in Pending Changes to jump to it. The status bar also lets you choose a pending file.
Accepting keeps the current text. Rejecting restores the saved original text and saves the file. When every change in a file has been decided, that file leaves the pending list.
The Command Palette contains additional Change-by-Change Review commands:
| Command |
Use it to |
| Show files awaiting review |
Choose a pending file. |
| Accept / Reject all changes in all files |
Apply a decision across pending files. |
| Review in inline diff (old red, new green) |
Switch to the review diff. |
| Open as plain editor |
Return to the normal editor. |
| Snapshot this file (review my own edits from now on) |
Start a review baseline for your own edits. |
| Refresh |
Refresh the pending changes. |
Keyboard shortcuts
These are the default shortcuts while the editor has focus:
| Action |
Windows / Linux |
macOS |
| Accept change |
Alt+Y |
Ctrl+Cmd+Y |
| Reject change |
Alt+N |
Ctrl+Cmd+N |
| Accept file |
Alt+Enter |
Cmd+K, Cmd+Enter |
| Reject file |
Alt+Backspace |
Cmd+K, Cmd+Backspace |
| Next / previous change |
Ctrl+K, Alt+Down / Alt+Up |
Ctrl+Alt+Down / Ctrl+Alt+Up |
| Undo / redo typing and review decisions in the current file |
Ctrl+Z / Ctrl+Y or Ctrl+Shift+Z |
Cmd+Z / Cmd+Shift+Z |
| Undo / redo the newest review decision across files |
Ctrl+K, Ctrl+Z / Ctrl+K, Ctrl+Shift+Z |
Ctrl+Cmd+Z / Ctrl+Cmd+Shift+Z |
A comma separates two steps in a shortcut: press the first combination, release it, then press the second. Accept/reject and navigation shortcuts apply when the file has pending changes. You can customize shortcuts in Keyboard Shortcuts.
Alt+Enter keeps its normal behavior when Find is open or a Jupyter code cell is active. Alt+Backspace keeps its normal behavior when a comment box is open. Use the review links in those cases.
On macOS, agentChangeReview.keymap: "single" enables Cmd+Y / Cmd+N while the cursor is inside a change, and Cmd+Enter / Cmd+Backspace inside a review.
Undo and redo
In a file under review, the extension's keyboard shortcuts undo and redo your typing and review decisions in order. Undoing an Accept or Reject brings the change back for review.
Pending Claude Code edits stay in place until you Accept or Reject them. Edit > Undo from the menu can undo typing and text-changing Reject decisions, but cannot undo an Accept because Accept does not change the text. Use the keyboard shortcut or Undo last Accept / Reject for that.
Settings
Open Settings and search for Change-by-Change Review.
| Setting |
Default |
What it controls |
agentChangeReview.openAs |
inlineDiff |
Open pending files as an inline diff. Choose highlights to keep the normal editor with change markers. |
agentChangeReview.forceInlineDiff |
true |
Set VS Code's diff editor to one column and enable diff CodeLens. This also affects other diffs, including Git diffs. |
agentChangeReview.codeLens |
true |
Show Accept / Reject links above changes and at the top of the file. |
agentChangeReview.inlineBar |
always |
Show a change bar behind a gutter icon. auto shows it only in the plain editor; never hides it. |
agentChangeReview.expandBar |
false |
Open change bars automatically. |
agentChangeReview.autoAdvance |
true |
Move to the next change after a decision. |
agentChangeReview.keymap |
chords |
Use the default shortcuts or macOS single-key combinations described above. |
agentChangeReview.manageHook |
true |
Install and maintain the Claude Code capture hook automatically. |
agentChangeReview.filesChangedList |
true |
Add a Claude Code rule requesting clickable Files changed links at the end of replies that edit files. |
The hook
The hook saves a local copy of a file before Claude Code changes it. The extension compares that copy with the current file to show what needs review.
Automatic setup updates Claude Code's user settings in ~/.claude/settings.json, or the directory specified by CLAUDE_CONFIG_DIR. Existing settings are preserved, with a settings.json.bak backup when settings change. The extension also maintains rules/change-by-change-review.md in the same Claude Code configuration directory for the optional Files changed list.
On Windows, these folders are under your user profile. The hook runs with Node.js and uses a full path, so it works with PowerShell, Command Prompt, and Git Bash.
Manual hook setup
If automatic setup fails, first check that node --version works in a terminal on the machine where Claude Code runs. To manage the hook yourself, turn off agentChangeReview.manageHook.
Run Extensions: Open Extensions Folder, open the smithp.change-by-change-review-<version> folder, and run the included installer using its full path:
node "/full/path/to/smithp.change-by-change-review-<version>/hook/install.js"
You can pass additional Claude Code settings files to configure more than one profile:
node "/full/path/to/extension/hook/install.js" "/path/to/claude/settings.json" "/path/to/claude-work/settings.json"
For remote projects, run the installer in the remote environment. Then start a new Claude Code session or run /hooks.
Troubleshooting
| Problem |
What to check |
| No changes appear |
Confirm the hook setup message, check Node.js, and start a new Claude Code session. Use Refresh after checking setup. |
| Changes made by a terminal command are missing |
Bash capture requires a Git repository and skips Git-ignored files. |
| Changes appear in WSL but not in the editor |
Run Claude Code and the extension in the same WSL, remote, container, or local environment. |
| Another extension version is still running |
Run Developer: Reload Window after updating or removing an older copy. |
| The Comments panel opens unexpectedly |
Set VS Code's comments.openView to never if you do not want it to open automatically. |
Limits and local storage
- Review applies to text files. Binary files and files over 5 MB are skipped. Jupyter notebooks opened in the notebook editor are not decorated.
- Claude Code changes made through Bash are captured only for files Git does not ignore. Your own saves during a running Bash command can be included in that command's review.
- Your own typing in a file under review appears as a pending change until accepted.
- Undo protection covers external edits observed while the extension is running. Restarting the extension host does not reconstruct earlier editor undo history.
- Saved originals contain full file contents and are stored locally in
~/.claude-review/baselines/. Completed reviews older than seven days are cleaned up at a later extension startup.
- On Windows, Git Bash tools such as
sed -i can change CRLF line endings to LF, making every line appear changed. Reject restores the original endings.
- On Windows, the folder-name casing used by Claude Code and VS Code must match; the drive-letter casing may differ.
Uninstall
Uninstall the extension, then restart the editor to allow its uninstall hook to remove the managed hook entries and Files changed rule. Saved originals remain in ~/.claude-review/baselines/.
If your editor does not run the uninstall hook, remove the hook manually:
node ~/.claude-review/hook/uninstall.js
In Windows PowerShell:
node "$HOME\.claude-review\hook\uninstall.js"
Support
Report a problem with your editor version, operating system, and steps to reproduce it.
Independent extension by Smith Pateliya (publisher: smithp). Not affiliated with, sponsored by, or endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic, PBC. References to them describe compatibility with the user's separately installed Claude Code; they are not this extension's name or branding.
License
MIT. See LICENSE.