Your agent explains the pull request. Your team reads it in the diff.
A free account with GitHub, then one command sets up Claude Code, Codex, Cursor or any Agent Skills tool, and the extension connects in one click.
extension for Chrome, Edge, Brave and Arc · Firefox and Safari: developer install for now
Express shipping at checkout #42
| 41 | 41 | export async function checkout(cart: Cart) { |
| 42 | 42 | const total = sum(cart.items) |
DNCharge the express fee, stop on empty cartshigh riskline 43–45 An empty cart used to reach the payment provider with $0. It now returns early; express orders pay the fee. | ||
| 43 | - if (total > 0) await charge(cart.card, total) | |
| 43 | + if (total <= 0) return { status: "empty" } | |
| 44 | + const fee = cart.express ? EXPRESS_FEE : 0 | |
| 45 | + await charge(cart.card, total + fee) | |
| 44 | 46 | return { status: "paid" } |
| 12 | 12 | <CartSummary items={items} /> |
DNShipping picker on checkoutline 13–15 Customers choose standard or express before paying. Checked at three widths: standardexpress pay $42 standardexpress pay $42 standardexpress pay $42 | ||
| 13 | +<ShippingPicker | |
| 14 | + options={["standard", "express"]} | |
| 15 | + onChange={setShipping} /> | |
| 13 | 16 | <PayButton total={total} /> |
| 8 | 8 | <Line label="Subtotal" value={subtotal} /> |
| 9 | -<Line label="Total" value={subtotal} strong /> | |
DNThe total follows the shipping choiceline 9–10 Try it: pick express and watch the total. Standard 3–5 daysExpress tomorrowTotal $40.00$47.00 | ||
| 9 | +{express && <Line label="Express" value={EXPRESS_FEE} />} | |
| 10 | +<Line label="Total" value={subtotal + fee} strong /> | |
Review the why, not just the diff.
Your agent knows why every line changed. Ask it to “annotate this PR with diffnotes”, and your team reviews faster.
- sign up with GitHub
- add the extension, press Sign in
- one command sets up your agent
A coding agent attaches plain-language notes, screenshots and live demos to the lines it changed. Reviewers see them right inside the diff on GitHub, GitLab or Bitbucket, through a small browser extension. Nothing is posted to the PR.
not another review bot
Review bots read your diff from the outside and post their opinions as PR comments. DiffNotes is the other side: the agent that wrote the code explains what it changed and why, while it still knows the intent, the trade-offs and what to test. Nothing is posted to the pull request, and it works next to any review bot you already use.
why developers like it
review faster
Reviewers read why each block changed before reading how. Less back-and-forth, fewer “what does this do?” comments.
context from the author
The agent that wrote the code explains it while it still remembers why: decisions, trade-offs, what was left out.
screenshots, recordings, demos
Images next to the lines that caused them, a before / after slider for UI changes, short screen recordings of a flow, and small HTML demos you can click, locked in a sandbox.
where to look hardest
The agent flags the risky parts (money, auth, migrations) and the boring ones. Reviewers get a short list at the top and jump straight there.
diagrams in the diff
A flow or a state change drawn right above the code that implements it, from a Mermaid flowchart the agent writes. No library, no network.
notes that stay true
Before every upload the agent checks each note against the current diff; after new commits it fixes or drops stale ones, and reviewers see what changed since their last visit.
zero noise in the PR
Nothing is posted to the PR. No bot comments, no notification spam; the notes live beside the diff, only for your team.
your server, your data
Use the free server at diffnotes.dev, or run your own and code context never leaves your infrastructure. Notes expire on their own (after a year by default).
any agent, any team
Claude Code, Codex, Cursor and other Agent Skills tools, or any MCP client. Chrome, Edge, Brave and Arc; connect several servers in one browser for different teams or clients.
start in 5 minutes
Use this server: nothing to install on your side but the skill and the extension.
diffnotes.dev is run by Igor Kasyanchuk, who wrote DiffNotes. It is free, with no paid plan. Notes and files are deleted 365 days after a pull request's last upload; each account holds up to 10,000 pull requests and 1 GB of files. For code that must not leave your company, self-host it (option 2). Privacy.
- ~30 screate a free account
One click with GitHub: your user and a team account to invite people into.
- ~1 minadd the browser extension
From the Chrome Web Store (Edge, Brave and Arc too). It opens a tab by itself: press Sign in and connect, then allow. Nothing to copy.
- ~1 minset up your agent with one command
Claude Code, Codex, Cursor and other Agent Skills tools. The setup page gives you the command with your token in it: run it once, no shell profile to edit.
- ~1 minask your agent to explain a PR
On a pushed branch with an open pull request (GitHub, GitLab or Bitbucket). The agent finds it with
ghorglab, or asks you for its address. Then open the PR's “Files changed”.Use the diffnotes skill to annotate this pull request for its reviewers: explain each changed file and the non-obvious lines in plain language, flag the risky parts (auth, money, migrations), add before / after screenshots of UI changes, then upload the notes to DiffNotes.
self-host it
Keep code context on your own infrastructure. One container with a volume, free and open source (MIT), also for commercial use.
$ docker run -d -p 3000:3000 -v diffnotes:/data -e [email protected] \ -e PUBLIC_URL=https://diffnotes.your-company.com ghcr.io/igorkasyanchuk/diffnotes
Change ADMIN_EMAIL to yours and PUBLIC_URL to the address it will have. Put it behind HTTPS (Caddy, Coolify, Cloudflare…): the extension connects only to https servers (and localhost). Or docker compose up, Coolify, Render, Fly.io, Railway or any Docker host: see the deploy guides. The first admin password is printed in the logs. Then follow the steps of option 1 with your server's address.
Free on this server, or on yours. Your agent’s next pull request can carry its notes.