Change Tracker — Per-File Accept/Reject
A VS Code extension that gives you ground-truth, file-level review of edits made by
Claude Code (or anything else: yourself, another agent, a script).
The idea comes from the gap you noticed: Claude Code's "what I built" summary is the
model describing its own work, so it can be wrong or incomplete. This extension ignores
descriptions entirely. It reads the actual files on disk, compares them to a snapshot
you took, and lets you Accept or Reject each changed file individually — the way
Copilot Chat lets you accept/reject per file.
No git operations. Everything is stored locally.
How it works
- Take a checkpoint before you let Claude Code make changes. The extension snapshots
the current contents of your tracked files into local storage (the extension's own
per-workspace storage folder — not your repo, not git).
- Let Claude Code edit. It writes to disk as usual.
- The Change Tracker panel (activity bar, left) lists every file that now differs from
the checkpoint, with
+added (green) / -removed (red) line counts and an
M / A / D status.
- Click a file to open a real diff (Checkpoint ↔ Working). It jumps straight to the
first edited region rather than the top of the file. Use the diff editor's
next/previous-change arrows (top-right of the diff editor) — or the keyboard shortcuts —
to step through every other edit in that file.
- Hover a file and use the inline buttons:
- ✓ Accept — keep the change. The checkpoint advances to the new content, and the
file leaves the list.
- ⟲ Reject — restore the file to its checkpoint state on disk. (For a newly added
file, Reject deletes it — sent to Trash so it's recoverable. For a deleted file,
Reject recreates it.)
- Accept All / Reject All are in the panel's
… overflow menu.
Because it diffs the filesystem, it is completely tool-agnostic and trustworthy: whatever
landed on disk is what you see, no matter what any chat panel claimed.
Install / run
You need Node.js and VS Code.
Option A — try it instantly (Extension Development Host):
npm install
npm run compile
Then open this folder in VS Code and press F5. A second VS Code window opens with the
extension loaded. Open your project in that window and use the Change Tracker panel.
Option B — install it permanently as a .vsix:
npm install
npm install -g @vscode/vsce # one-time
vsce package # produces change-tracker-0.1.0.vsix
Then in VS Code: Extensions panel → … → Install from VSIX… → pick the file.
Typical session with Claude Code
1. Open your project in VS Code.
2. Change Tracker panel → Take Checkpoint.
3. Ask Claude Code to do its thing.
4. Change Tracker shows the real changed files. Click each to verify the diff.
5. Accept the ones that are right; Reject the ones that aren't.
Settings
| Setting |
Default |
What it does |
changeTracker.include |
**/* |
Files to snapshot at checkpoint time. |
changeTracker.exclude |
node_modules, .git, dist, out, build, … |
Files to ignore. VS Code's files.exclude / search.exclude also apply. |
changeTracker.maxFileSizeKB |
1024 |
Files larger than this are skipped (keeps it fast). |
changeTracker.autoRefresh |
true |
Re-scan automatically when files change on disk. |
Privacy / data
Everything stays on your machine. The extension makes no network requests and sends
no telemetry — its only imports are the VS Code API, Node's crypto (for local file
hashing), and path. The webview runs under a strict default-src 'none' content-security
policy, so it cannot load anything remote. Checkpoint snapshots are written to the
extension's own per-workspace storage folder on your disk, and git is never touched.
Tests
npm test runs the unit tests for the diff-count logic (Node's built-in test runner; no
extra dependencies). The filesystem/UI behaviors are covered by the manual checklist in
CHECKLIST.md in the source tree.
Limitations (v0.1)
- Single workspace folder. It tracks the first folder in a multi-root workspace.
- Text files only. Binary files (detected by a NUL byte) and files over the size limit
are skipped.
- Open + unsaved editors: Reject overwrites the file on disk. If you have unsaved
changes to that file in an editor, save or close it first to avoid a reload conflict.
The panel is a webview styled with VS Code's own theme tokens, so the green/red counts and
M/A/D badges follow your active color theme (they reuse the same colors git uses in
the Source Control view).
Why not just use git or raise a PR to Claude Code?
You asked specifically to avoid git automation and to keep things local — done. And the
core of Claude Code is proprietary, so there's no PR to send for this behavior; a local
VS Code extension is the right shape. See the chat for how to file the idea with Anthropic
if you want.
Project layout
src/extension.ts activation, commands, file watcher, accept/reject
src/baselineStore.ts local snapshot + manifest persistence
src/changeModel.ts enumerates files, diffs against the checkpoint
src/webviewProvider.ts the changed-files panel (webview; colored +/- counts)
src/baselineContentProvider.ts serves checkpoint content for the diff editor
src/diffUtil.ts LCS-based +added / -removed line counting
MIT licensed.