Reviewing diffs is a chore fine, actually.
diffle opens any git diff in your browser, wires in the language servers you already have, and lets you write in the margins. Then yy hands every note back to your agent as one prompt.
pixi exec difflepixi global install difflenpx @moritzwilksch/difflenpm install -g @moritzwilksch/difflenix run github:moritzwilksch/difflenix profile install github:moritzwilksch/difflecurl -fsSL https://diffle.app/install.sh | shirm https://diffle.app/install.ps1 | iexReview in diffle.
Hand off to your agent.
Click a line, drag over a block, or press C for the whole file. Every note includes the file path, line range and the code it's about, so your agent knows exactly what you mean. Also perfect for directly posting as a comment.
- c
- line
- C
- file
- yy
- copy all
what lands in your agent's chat:
shortlink/app.py:19-20
> forwarded = request.headers.get("x-forwarded-for")
> client = forwarded or request.client.host
`x-forwarded-for` is client-controlled, so a new value per request dodges the limit. Only trust it behind our proxy.
---
shortlink/ratelimit.py:24
> now = time.time()
Use `time.monotonic()`: a wall-clock jump would refill or drain every bucket.A diff that understands your code.
diffle boots the language servers already on your PATH — pyrefly or ty, rust-analyzer, gopls, tsserver. Hover for signatures. Jump to the definition. Peek at every caller without leaving the review.
- gd
- definition
- gy
- type
- gA
- every reference
- space
- peek
Scroll. Move.
Vim motions through lines, hunks, files and every commit in the range. Mark files viewed, filter the tree, search all of it.
- j k
- line
- ] [
- hunk
- J K
- file
- < >
- commit
- v
- viewed
- g/
- search all
Any range.
Any commit.
Any branch.
Same revision syntax plus a few shortcuts for the diffs you open ten times a day. Everything runs locally and offline, except fetching PRs.
diffle workingdiffle maindiffle pr 27diffle show a1b2c3ddiffle main..feat