{"slug": "diffnotes-lets-your-coding-agent-explain-its-prs-inline", "title": "DiffNotes: Lets your coding agent explain its PRs inline", "summary": "DiffNotes, an MIT-licensed open-source tool hosted at diffnotes.dev, lets coding agents such as Claude Code, Codex and Cursor annotate pull requests with plain-language explanations, screenshots, screen recordings, Markdown reports, CSVs and small interactive HTML demos delivered through a skill or an MCP endpoint. The notes are stored on a DiffNotes server rather than posted to GitHub, GitLab or Bitbucket, and reviewers see them inside the diff via a Chrome, Edge, Brave or Arc browser extension; notes expire after a year by default and can be self-hosted so code context stays on the team's own infrastructure. Setup on the free hosted server takes about 3 minutes: a GitHub sign-in, one command for the agent, and one extension.", "body_md": "**Your coding agent explains the pull request. Your team reads it in the diff.**\n\nFree · hosted at diffnotes.dev or self-hosted · open source (MIT) · GitHub, GitLab, Bitbucket\n\n[**diffnotes.dev**](https://diffnotes.dev) · [live demo](https://diffnotes.dev/demo) · [quick start](#quick-start) · [self-host](#self-host) · [docs](https://diffnotes.dev/docs)\n\n- Your agent (Claude Code, Codex, Cursor…) **annotates a PR** : a plain-language “why” for each changed block, plus\nscreenshots, short screen recordings, Markdown reports, CSVs and small interactive HTML demos. Through the skill or the MCP endpoint.\n- The notes go to **a DiffNotes server** , never to GitHub, GitLab or Bitbucket: no bot comments, no notification noise. Use\nthe free one at[diffnotes.dev](https://diffnotes.dev) , or run your own and code context never leaves your infrastructure.\n- Reviewers with the **browser extension** (Chrome, Edge, Brave, Arc) see them**inside the diff on GitHub, GitLab or Bitbucket** : a summary box on top, notes on the\nchanged lines, image galleries, file previews, what changed since their last visit, one switch to hide everything.\n- Notes **expire on their own** (after a year by default). Files on disk or in any S3-compatible bucket (Backblaze B2, R2, S3, MinIO).\n- Up and running in **a few minutes** : a GitHub sign-in, one command for your agent, one extension (or one container of your own).\n\n| **Review faster** | Reviewers read *why* a block changed before reading*how* . Fewer “what does this do?” round trips. | \n| **Context from the author** | The agent that wrote the code explains it while it still knows the decisions and trade-offs. | \n| **Screenshots in the diff** | UI changes come with before/after or mobile/desktop shots next to the lines that caused them. | \n| **Zero noise** | Nothing is posted to the PR. The conversation stays for humans. | \n| **Your data** | Self-hosted, invite-only (or sign-up with GitHub), per-account access. Code context never leaves your infrastructure. | \n| **Any agent, any team** | One skill for every Agent Skills tool; one extension for several servers (teams, clients). | \n\n| On GitHub |  | \n|---|---|\n|  | **Summary box** above the files: the PR's summary, linked reports, a notes on/off switch, expand/collapse all. | \n|  | **Gallery** : several images in one note (mobile + desktop), ← → to flip, Esc to close. | \n|  | **Previews** of attached`.md` ,`.csv` and`.txt` files, rendered in place. | \n|  | **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. | \n|  | **Floating dock** once you scroll: note count, notes switch, summary popover. Long notes get*show more / less* . | \n\n| In the app |  | \n|---|---|\n|  | Every annotated PR, with its notes and attachments. | \n|  | **Accounts** with roles (owner, admin, member), invitations, repositories, storage per repository. | \n|  | **Super admin** : users, accounts, uploads, disk, and where files are stored. | \n\nOn the free server, about 3 minutes:\n\n1. **Sign in** at[diffnotes.dev](https://diffnotes.dev/login) with GitHub: you get a team account to invite people into.\n2. **Add the extension** from the[Chrome Web Store](https://chromewebstore.google.com/detail/fmnbgmeahjhfakpcmhimjjjplimdiibd) (Edge, Brave and Arc too). It opens a tab:**Sign in and connect** →**allow** . Nothing to copy.\n3. **Set up your agent** (Claude Code, Codex, Cursor, any Agent Skills tool):[diffnotes.dev/welcome](https://diffnotes.dev/welcome) gives one command with your token in it. Run it once.\n4. On a branch with an open pull request, ask your agent: **“annotate this PR with diffnotes”** , then open the PR's*Files changed* tab.\n\nNo 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](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/skill.md#mcp-instead-of-the-skill)).\n\nCode that must not leave your company: one container and a volume, on any Docker host.\n\n```\ndocker run -d -p 3000:3000 -v diffnotes:/data \\\n  -e ADMIN_EMAIL=you@your-company.com -e PUBLIC_URL=https://diffnotes.your-company.com ghcr.io/igorkasyanchuk/diffnotes\ndocker logs <container> | grep \"first admin\"        # the generated password\n```\n\nPut it behind HTTPS, then follow the quick start with your server's address. Docker Compose, Coolify, Render, Fly.io and\nRailway: [deploy](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/deploy.md); every setting: [install & configure](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/install.md).\n\n| [Install & configure](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/install.md) | Docker, environment variables, first admin, password reset, upgrades, backups | \n| [Deploy](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/deploy.md) | Docker Compose, Coolify, Render (one-click), Fly.io, Railway; one instance only | \n| [Agent skill](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/skill.md) | Install, token, how the agent writes notes, payload format, allowed files | \n| [Browser extension](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/extension.md) | Install (Chrome, Edge, Brave, Arc; Firefox and Safari as developer installs), several servers, GitHub / GitLab / Bitbucket, what you see, troubleshooting | \n| [Accounts & roles](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/accounts.md) | Owner / admin / member, invitations, repository rules, super admin, overview pages | \n| [File storage](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/storage.md) | Disk or S3-compatible (Backblaze B2, Cloudflare R2, AWS S3, MinIO), expiry | \n| [Security](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/security.md) | Access model, upload checks, sandboxing, tokens, secrets; report a vulnerability: [SECURITY.md](https://github.com/igorkasyanchuk/diffnotes/blob/main/SECURITY.md) | \n| [API](https://github.com/igorkasyanchuk/diffnotes/blob/main/docs/api.md) | The HTTP API the skill and the extension use | \n| [Development](https://github.com/igorkasyanchuk/diffnotes/blob/main/AGENTS.md) | Stack, layout, commands, code rules | \n| [Changelog](https://github.com/igorkasyanchuk/diffnotes/blob/main/CHANGELOG.md) | What changed in each version; releases are tagged `vX.Y.Z` | \n| [Privacy](https://diffnotes.dev/privacy) ·[Terms](https://diffnotes.dev/terms) | What the extension and a server keep; the license and the hosted service's terms (every server serves both) | \n\nIssues and pull requests are welcome: [open an issue](https://github.com/igorkasyanchuk/diffnotes/issues) for a bug or an\nidea, and see [AGENTS.md](https://github.com/igorkasyanchuk/diffnotes/blob/main/AGENTS.md) for the stack and the checks to run. Security reports go privately: [SECURITY.md](https://github.com/igorkasyanchuk/diffnotes/blob/main/SECURITY.md).\nIf DiffNotes saves your reviewers time, a ⭐ helps other people find it.\n\n[MIT](https://github.com/igorkasyanchuk/diffnotes/blob/main/LICENSE): use it, change it, host it, sell it; keep the copyright notice. Terms of the hosted service: [diffnotes.dev/terms](https://diffnotes.dev/terms).", "url": "https://wpnews.pro/news/diffnotes-lets-your-coding-agent-explain-its-prs-inline", "canonical_source": "https://github.com/igorkasyanchuk/diffnotes", "published_at": "2026-10-31 14:52:18+00:00", "updated_at": "2026-10-31 15:22:01.613322+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "agent-protocols"], "entities": ["DiffNotes", "Claude Code", "Codex", "Cursor", "GitHub", "GitLab", "Bitbucket", "Chrome Web Store"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/diffnotes-lets-your-coding-agent-explain-its-prs-inline", "markdown": "https://wpnews.pro/news/diffnotes-lets-your-coding-agent-explain-its-prs-inline.md", "text": "https://wpnews.pro/news/diffnotes-lets-your-coding-agent-explain-its-prs-inline.txt", "jsonld": "https://wpnews.pro/news/diffnotes-lets-your-coding-agent-explain-its-prs-inline.jsonld"}}