Review the diff.
Redline it.
Hand it back to your agent.

diffle turns a local git diff into a close, exact read, the way a printer proofs a page. Comment on the precise code, then return structured feedback your coding agent can act on. No forge, no account, no hosted AI.

curl -fsSL https://diffle.dev/install | sh

Windows:irm https://diffle.dev/install.ps1 | iex

  • local-first
  • durable review records
  • MCP handoff
  • macOS · Linux · Windows
src/utils/git.ts+18 −4
40 export function resolveRef(ref: string) {
41 const base = ref || "HEAD";
42 return runGit(["rev-parse", base]);
42+ const sha = runGit(["rev-parse", "--verify", base]);
43+ if (!sha) throw new NoSuchRef(base);
youunresolved

resolveRef still throws on a fresh repo where HEAD has no commits — guard the empty case before rev-parse.

replyresolve
44+ return sha.trim();
45 }
the loop

One ritual, start to finish.

  1. inspectRender a live git comparison in the browser.
  2. commentAnchor notes to a line, a range, or a file.
  3. returnCompile the redline into agent-ready feedback.
  4. refreshRe-run the diff after the agent edits.
  5. resolveReply, reopen, and clear threads.
  6. approveSign off on a durable Review Record.

Review any comparison

Working tree, staged changes, a branch, a commit range, or the whole codebase, rendered in your browser with a file tree and syntax highlighting, not scrolled past in the terminal. Unified or side-by-side, your choice.

Every command and flag
terminal
$ diffle# working tree vs HEAD
$ diffle staged# staged changes only
$ diffle main# this branch vs main
$ diffle v1.0..v1.1# a commit range
$ diffle browse src/# the whole subtree

Comment on the exact code

Click a line, or drag across line numbers for a range. Leave threaded replies, resolve and reopen, and mark files viewed as you go. Every note is saved to a durable Review Record that survives restarts and re-runs.

Ranges, threads, and orphans
client/src/lib/api.tsline 88
88 const res = await fetch(url);
you

No timeout here — an agent hangs forever on a dead dev server.

agentresolved

Added an AbortController with a 10s timeout. Pushed to the branch.

Close the loop with your agent

Return the whole redline as structured feedback over a local MCP server; each comment carries its code context. Claude Code, Codex, or any MCP client fixes the code, replies inline, and requests a re-review. You refresh and sign off.

Wire up the MCP handoff
feedback.md2 unresolved
## Review feedback (2 comments)

src/utils/git.ts:42 unresolved
> resolveRef throws on a fresh repo where HEAD has
> no commits — guard before rev-parse.

client/src/lib/api.ts:88 unresolved
> fetch has no timeout; agents hang on a dead server.
see it in action

A full review, start to finish.

Open a diff, redline the exact code, and export a feedback bundle you can hand straight to an agent.

Install diffle

One self-contained binary. It embeds its own web client and needs no checkout, no Node, and no sidecar files. git on your PATH is the only prerequisite.

macOS · Linux
curl -fsSL https://diffle.dev/install | sh
Windows
irm https://diffle.dev/install.ps1 | iex
  • Stays local. No forge, no database, no hosted AI service.
  • Always current. diffle update verifies and swaps in place.
  • Yours to keep. Review Records live under your data directory.
Run your first review