See what your AI agent is actually doing to your code — in real time.
changes is a terminal UI for reviewing git diffs live. It watches your repos and refreshes instantly as files change. No IDE required, no re-running commands. Just run changes and watch.
Built for the workflow where your agent writes code and you audit it. All the screen real estate goes to the diff — not staging, committing, or pushing. You do that through your agent. This is your review pane.
I built this because I use lazygit — and it's great for git operations, but not great for reviewing agent changes. The diff pane is small, copying hunks is clunky, and it only handles one repo at a time. When you've got agents working across multiple repos simultaneously, you need something that gives all the screen real estate to the diff and makes it easy to copy code back to your agent.
It's also agent-agnostic. You shouldn't have to use a specific app or IDE just to get a good diff viewer — reviewing changes and running agents are two separate concerns. changes works with whatever you use: Claude Code, Codex, Cursor, Copilot, aider, or a shell script that calls sed. If it writes to files in a git repo, you can see the diff.
- Multi-repo tabs — watch agent changes across repos simultaneously
- Three diff modes — unstaged, staged, or branch diff (vs main / parent branch)
- Annotate hunks — right-click to add review comments,
Yto copy all as markdown for your agent - Copy hunks — double-click or press
y, includes any attached comments - Expand context — click gap indicators to reveal surrounding lines
- Graphite-compatible — auto-detects parent branch via
gt parent
brew install Bradley-Butcher/tap/changesDownload from GitHub Releases:
# macOS (Apple Silicon)
curl -sSL https://github.com/Bradley-Butcher/Changes/releases/latest/download/changes-aarch64-apple-darwin.tar.gz | tar xz
sudo mv changes /usr/local/bin/
# macOS (Intel)
curl -sSL https://github.com/Bradley-Butcher/Changes/releases/latest/download/changes-x86_64-apple-darwin.tar.gz | tar xz
sudo mv changes /usr/local/bin/
# Linux (x86_64)
curl -sSL https://github.com/Bradley-Butcher/Changes/releases/latest/download/changes-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv changes /usr/local/bin/cargo install --path .# Watch the current directory (auto-discovers repos)
changes
# Watch a specific repo
changes /path/to/repo
# Watch a directory containing multiple repos
changes /path/to/projectsIf you point it at a directory with multiple git repos, it opens them all in tabs. You can also add repos on the fly with a.
- Your agent is working across two repos. Run
changes /path/to/projects— both open in tabs - Scroll through the diff. See something wrong — right-click the hunk, type your feedback,
Ctrl+Dto save - Keep reviewing. Add more comments to other hunks across files
- When you're done, press
Y— all your comments get copied as markdown with the relevant code blocks - Paste into your agent. It gets something like:
### src/auth.rs:42-58
> use env var instead of hardcoded API key
\`\`\`diff
+ let key = "sk-1234567890";
+ client.set_api_key(key);
\`\`\`
### src/handler.rs:115-130
> don't remove the try/catch, the API can 500
\`\`\`diff
- let resp = client.call(req).await?;
+ let resp = client.call(req).await;
\`\`\`- Your agent fixes the issues.
changeslive-reloads. Comments are cleared. Review again.
| Key | Action |
|---|---|
m / s / b |
Switch mode: modified, staged, branch diff |
v |
Toggle unified / side-by-side view |
j / k |
Scroll |
J / K |
Jump to next / previous file |
f |
Fuzzy file picker |
Enter / Click header |
Collapse / expand file |
c / e |
Collapse / expand all |
y / Double-click |
Copy hunk to clipboard |
Right-click / n |
Add comment to hunk |
N |
Remove comment from hunk |
Y |
Copy all comments + hunks as markdown |
C |
Open comments browser |
D |
Clear all comments |
a / x |
Add / remove repo tab |
Tab / 1-9 |
Switch tabs |
| Click gap indicator | Expand context |
? |
Help |
q |
Quit |
make check # fmt, clippy, test, build
make fix # auto-fix formatting and lint
make test # tests only
make release # optimized buildMIT

