Your coding agent explains the pull request. Your team reads it in the diff.
Free · hosted at diffnotes.dev or self-hosted · open source (MIT) · GitHub, GitLab, Bitbucket
diffnotes.dev · live demo · quick start · self-host · docs
- Your agent (Claude Code, Codex, Cursor…) annotates a PR : a plain-language “why” for each changed block, plus screenshots, short screen recordings, Markdown reports, CSVs and small interactive HTML demos. Through the skill or the MCP endpoint.
- The notes go to a DiffNotes server , never to GitHub, GitLab or Bitbucket: no bot comments, no notification noise. Use the free one atdiffnotes.dev , or run your own and code context never leaves your infrastructure.
- Reviewers with the browser extension (Chrome, Edge, Brave, Arc) see theminside the diff on GitHub, GitLab or Bitbucket : a summary box on top, notes on the changed lines, image galleries, file previews, what changed since their last visit, one switch to hide everything.
- Notes expire on their own (after a year by default). Files on disk or in any S3-compatible bucket (Backblaze B2, R2, S3, MinIO).
- Up and running in a few minutes : a GitHub sign-in, one command for your agent, one extension (or one container of your own).
| Review faster | Reviewers read why a block changed before readinghow . Fewer “what does this do?” round trips. | | Context from the author | The agent that wrote the code explains it while it still knows the decisions and trade-offs. | | Screenshots in the diff | UI changes come with before/after or mobile/desktop shots next to the lines that caused them. | | Zero noise | Nothing is posted to the PR. The conversation stays for humans. | | Your data | Self-hosted, invite-only (or sign-up with GitHub), per-account access. Code context never leaves your infrastructure. | | Any agent, any team | One skill for every Agent Skills tool; one extension for several servers (teams, clients). |
| On GitHub | |
|---|---|
| Summary box above the files: the PR's summary, linked reports, a notes on/off switch, expand/collapse all. | |
| Gallery : several images in one note (mobile + desktop), ← → to flip, Esc to close. | |
Previews of attached.md ,.csv and.txt files, rendered in place. |
|
Live demos : a small.html file runs in a locked sandbox under its note (no network, no access to GitHub); expand it at phone, tablet or desktop width. |
|
| Floating dock once you scroll: note count, notes switch, summary popover. Long notes getshow more / less . |
| In the app | |
|---|---|
| Every annotated PR, with its notes and attachments. | |
| Accounts with roles (owner, admin, member), invitations, repositories, storage per repository. | |
| Super admin : users, accounts, uploads, disk, and where files are stored. |
On the free server, about 3 minutes:
- Sign in atdiffnotes.dev with GitHub: you get a team account to invite people into.
- Add the extension from theChrome Web Store (Edge, Brave and Arc too). It opens a tab:Sign in and connect →allow . Nothing to copy.
- Set up your agent (Claude Code, Codex, Cursor, any Agent Skills tool):diffnotes.dev/welcome gives one command with your token in it. Run it once.
- On a branch with an open pull request, ask your agent: “annotate this PR with diffnotes” , then open the PR'sFiles changed tab.
No skills in your agent? Use the MCP endpoint instead: claude mcp add --transport http diffnotes https://diffnotes.dev/mcp --header "Authorization: Bearer $DIFFNOTES_TOKEN" (more).
Code that must not leave your company: one container and a volume, on any Docker host.
docker run -d -p 3000:3000 -v diffnotes:/data \
-e ADMIN_EMAIL=you@your-company.com -e PUBLIC_URL=https://diffnotes.your-company.com ghcr.io/igorkasyanchuk/diffnotes
docker logs <container> | grep "first admin" # the generated password
Put it behind HTTPS, then follow the quick start with your server's address. Docker Compose, Coolify, Render, Fly.io and Railway: deploy; every setting: install & configure.
| Install & configure | Docker, environment variables, first admin, password reset, upgrades, backups |
| Deploy | Docker Compose, Coolify, Render (one-click), Fly.io, Railway; one instance only |
| Agent skill | Install, token, how the agent writes notes, payload format, allowed files |
| Browser extension | Install (Chrome, Edge, Brave, Arc; Firefox and Safari as developer installs), several servers, GitHub / GitLab / Bitbucket, what you see, troubleshooting |
| Accounts & roles | Owner / admin / member, invitations, repository rules, super admin, overview pages |
| File storage | Disk or S3-compatible (Backblaze B2, Cloudflare R2, AWS S3, MinIO), expiry |
| Security | Access model, upload checks, sandboxing, tokens, secrets; report a vulnerability: SECURITY.md |
| API | The HTTP API the skill and the extension use |
| Development | Stack, layout, commands, code rules |
| Changelog | What changed in each version; releases are tagged vX.Y.Z |
| Privacy ·Terms | What the extension and a server keep; the license and the hosted service's terms (every server serves both) |
Issues and pull requests are welcome: open an issue for a bug or an idea, and see AGENTS.md for the stack and the checks to run. Security reports go privately: SECURITY.md. If DiffNotes saves your reviewers time, a ⭐ helps other people find it.
MIT: use it, change it, host it, sell it; keep the copyright notice. Terms of the hosted service: diffnotes.dev/terms.