docs
Skill4 starsChanged 11 days agoMITView on GitHub
The skill teaches a coding agent to explain a pull request to its reviewers and upload that explanation to DiffNotes. It works with Claude Code, Codex, Cursor and other tools that read Agent Skills. The full text the agent reads is skill/diffnotes/SKILL.md, also served by your server at /skill/SKILL.md. The setup page (/welcome, set up my agent) makes a token and gives you one command with it: It writes the skill to ~/.claude/skills/diffnotes, ~/.agents/skills/diffnotes and, when Cursor is installed, ~/.cursor/skills/diffnotes,…
- Reads credentials
165 other projects use a version of this.
Adopted by
Most recently taken up by
- Adelie-Squad/solosquadtheir own version, first seen Nov 8, 2026
- hhtower/price-comparisontheir own version, first seen Nov 8, 2026
- vladtrc/iw4Ltheir own version, first seen Nov 8, 2026
- tiankonglan/TomeWikitheir own version, first seen Nov 8, 2026
- Canonry/aeo-audittheir own version, first seen Nov 8, 2026
- minio/skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use import-memory, perf and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
amirbironSkillimport-memory
Import a memory export from another AI assistant into Claude's memory — conversationally, additively, and with the content treated as data.
Also in 3 projects that use this
MicrosoftSkillperf
Speed and memory performance rules for Rust crates, the Node addon, webui-framework, and webui-delivery.
Also in 4 projects that use this
diego-tobalinaSkillbuild-fix
Fix build and compilation errors systematically. Run when build fails.
Also in 3 projects that use this
JkudjoSkillincident
Production incident response — structured triage, hypothesis tree, safe remediation, incident record
Also in 4 projects that use this
vbrevikSkillwork
Use when the user says 'plan', 'todo', 'copy plan', 'append plan', 'resume plan', 'priorities', or 'what's next'.
Also in 7 projects that use this
mbwsimsSkillimpact
This skill should be used when the user asks to "check the impact", "what will break if I change this", "blast radius", "impact analysis", "what depends on this", "who imports this", "is it safe to change this", mentions "/impact", or wants to understand the consequences of modifying a specific file or function before making changes.
Also in 3 projects that use this
Other versions165 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 165
- remotion-dev/remotion★ 72ksame name
- PrefectHQ/fastmcp★ 28ksame name
- jlowin/fastmcp★ 28ksame name
- ccusage/ccusage★ 19ksame name
- ryoppippi/ccusage★ 19ksame name
- micronaut-projects/micronaut-core★ 6.4ksame name
- latitude-dev/latitude-llm★ 4.7ksame name
- samuelgursky/davinci-resolve-mcp★ 4ksame name
- TanStack/ai★ 3.3ksame name
- patrykandpatrick/vico★ 3.2ksame name
155 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 129 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
Run the install again to update the skill.
- Distinctive: line 50
When shipping the PR takes more than a merge (a migration, a new env var, a flag, steps in order), the agent adds a
- Distinctive: line 58
Put how your team wants PRs annotated next to the code, so it is reviewed in PRs like the code (the skill reads it from the PR's base …
“Common” is measured: kept by at least 6 in 10 of the 129 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent skill
← README
The skill teaches a coding agent to explain a pull request to its reviewers and upload that explanation to DiffNotes.
It works with Claude Code, Codex, Cursor and other tools that read Agent Skills. The full text the agent
reads is skill/diffnotes/SKILL.md, also served by your server at /skill/SKILL.md.
Install
The setup page (/welcome, set up my agent) makes a token and gives you one command with it:
curl -fsSL https://reviews.example.com/install.sh | DIFFNOTES_SETUP_TOKEN=dn_… shIt writes the skill to ~/.claude/skills/diffnotes, ~/.agents/skills/diffnotes and, when Cursor is installed,
~/.cursor/skills/diffnotes, and saves the server and the token to ~/.config/diffnotes/env (mode 600), which the skill
reads whenever DIFFNOTES_TOKEN isn't set: no shell profile to edit, no restart. Without DIFFNOTES_SETUP_TOKEN it installs
only the skill. Variables in your shell profile still work and win over the file:
export DIFFNOTES_URL=https://reviews.example.com
export DIFFNOTES_TOKEN=dn_…Run the install again to update the skill. Each copy carries the version it was installed at (metadata.version: the release plus a hash of the skill with your server's limits in it, so a change between releases or a changed limit counts); when the
server has moved on (/skill/version), the agent tells you to re-run the install. It never fetches and follows a newer
skill on its own: instructions change only when you install them. It also removes a copy installed under the old name, reviews42; that one read
REVIEWS42_URL / REVIEWS42_TOKEN, so rename them to DIFFNOTES_URL / DIFFNOTES_TOKEN (old r42_… tokens keep working).
Use
Open the PR's branch in your agent and ask: “annotate this PR with diffnotes”. The agent:
- finds the PR (
gh pr view) and reads the change from git, not from memory; - writes one short note per changed block, a card per new/renamed/deleted file, and a summary; tests and generated files are skipped;
- adds screenshots when the change is visible (for responsive UI: the same screen at mobile and desktop width, in one note → a gallery);
- uploads everything in one request and reports the link.
Re-running after a push replaces your previous notes and files (teammates' stay), so it is safe to repeat. Before every upload the agent
checks each note against the current diff (a small script in the skill: the file must be changed in the PR and the
lines inside one changed block) and only uploads what is true at the PR's head commit. After new commits it reads the
stored notes, keeps and fixes the ones that still hold and drops the rest; with nothing left to say it deletes them
(DELETE /api/v1/pulls/…; with an admin's token and teammates' notes on the PR, it uploads an empty set instead, so
theirs stay). People can delete their notes on a PR from its page (admins: all of them), and a note's author or an admin can remove
it right in the diff. Notes can also carry a risk level (a "where to look hardest" list for reviewers), before /
after image pairs (shown with a drag handle), short screen recordings, Mermaid flowcharts (drawn as diagrams) and
links to each other (#note:path:line).
When shipping the PR takes more than a merge (a migration, a new env var, a flag, steps in order), the agent adds a
deploy card, pinned at the top of the summary. A repository's rules can require
a risk on every note, a deploy card or screenshots; the agent adds what an upload is refused for and sends it again.
With a preview deploy (Vercel, Netlify, Render…, found from the PR's GitHub deployments), notes on visible changes get
try it on the preview ↗ at the right path; a stacked PR shows its stack, bottom first, with this one highlighted.
.diffnotes.yml
Put how your team wants PRs annotated next to the code, so it is reviewed in PRs like the code (the skill reads it from the PR's base branch, so a PR can't loosen the rules for itself; every key is optional):
language: en # notes, titles, summary and deploy card in this language
tone: short, no jargon
skip: [docs/**, "*.snap"] # never annotated (tests and generated files never are)
screenshots: [web/**] # a visible change here gets a screenshot or recording
risk: required # every note rates its risk
deploy: required # always a deploy card
summary: What it does for the user first, then why.
notes: Call it a basket, never a cart.
detail: normal # brief | normal | thorough: how many notes, how longIt shapes how the agent writes; it can't make it run commands or skip the skill's own rules (no secrets, only what is true at the head). To enforce rules on every upload, whoever the agent is, set the server's repository rules too.
Your own style
detail sets how much the agent writes: brief (only where a reviewer would stop: changed behaviour, tricky logic,
risk; nearby blocks share a note), normal (a note per changed block, the default) or thorough (every block plus a
note on each edited file's part, edge cases included). Each person can override it for themselves in their shell profile,
next to the token, and add their own hints; they win over the repository's detail and notes, never over what it
requires (risk, deploy, screenshots, skip):
export DIFFNOTES_DETAIL=brief
export DIFFNOTES_HINTS="Explain SQL changes with the query plan. Keep titles under five words."What a note looks like
{
"title": "Express shipping at checkout",
"head_sha": "4f2c…",
"summary": "Adds an express option. Empty carts stop early. See the [test report](attachment:report.md).",
"deploy": "- migration: `add_express_fee`, reversible\n- env: `EXPRESS_FEE=499`\n- rollback: unset it; the option hides, no data is lost",
"preview": "https://pr-42.shop.vercel.app",
"annotations": [
{ "path": "app/checkout.ts", "line": 43, "end_line": 45, "title": "Charge the express fee", "try": "/checkout",
"body": "Empty carts used to reach the payment provider with 0; now they return early.\n\n " },
{ "path": "app/express.ts", "body": "New: the express fee and its label." },
{ "path": "app/old_rates.ts", "line": 8, "side": "LEFT", "body": "Old flat rate, removed." }
]
}line/end_line are new-side line numbers (side: "LEFT" for removed lines); no line means a file-level card.
Bodies are Markdown: headings, lists, task lists, tables, quotes, code, links and images (uploaded ones: an image from
another site shows as a link). Long notes are cut with
show more, so the point goes first.
curl -sS --fail-with-body -X PUT "$DIFFNOTES_URL/api/v1/pulls/acme/shop/42" -H "authorization: Bearer $DIFFNOTES_TOKEN" \
-F payload=@diffnotes.json -F file=@mobile.png -F file=@desktop.png -F file=@report.mdFiles
| Allowed | Checked | Shown as |
.png .jpg .jpeg .gif .webp | the file must really be that image format | thumbnails, gallery |
.mp4 .webm | the file must really be MP4 (ftyp) / WebM (EBML header) | an inline video, muted, with controls |
.md | UTF-8 text, no NUL bytes | rendered Markdown preview |
.csv | UTF-8 text | a table |
.txt | UTF-8 text | plain text |
.html | UTF-8 text | a live, sandboxed demo under the note; expand opens it at phone, tablet or desktop width |
An .html demo must be one self-contained file (inline <style> and <script>, images as data: URIs): it runs with
no network access, no cookies or storage, no forms or popups. See security.
Up to 1 MB per file, 2 MB per video, 30 files and 20 MB per PR (defaults: MAX_FILE_MB, MAX_VIDEO_MB,
MAX_FILES, MAX_PULL_MB; the skill served by your server states its own values). SVG, PDF, archives and other video
formats (.mov) are refused with 415. Details in security.
A screen recording is for what a screenshot can't show: an animation, a drag, a multi-step flow. Keep it a few
seconds and cropped; the skill records with Playwright's recordVideo and shrinks the clip with ffmpeg when needed.
MCP instead of the skill
Any MCP client can annotate PRs through the server's /mcp endpoint, with the same token and no skill file: the tools
upload_notes, get_notes and delete_notes carry the skill's key rules in their descriptions. The skill still writes
better notes (it checks every note against the diff before uploading), so prefer it where your agent supports skills.
# Claude Code
claude mcp add --transport http diffnotes https://reviews.example.com/mcp --header "Authorization: Bearer $DIFFNOTES_TOKEN"Cursor, ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{ "mcpServers": { "diffnotes": { "url": "https://reviews.example.com/mcp", "headers": { "Authorization": "Bearer ${env:DIFFNOTES_TOKEN}" } } } }Codex, ~/.codex/config.toml:
[mcp_servers.diffnotes]
url = "https://reviews.example.com/mcp"
bearer_token_env_var = "DIFFNOTES_TOKEN"Details in API.
No secrets in notes
The skill (and the MCP tool descriptions) tell the agent never to upload API keys, passwords, tokens, private keys,
connection strings, .env values, session cookies or personal and customer data, in words or in screenshots and
recordings: it names the thing ("the Stripe key") instead of the value and crops or blurs it out of images. Still,
treat notes like any shared document: everyone in the account can read them until they expire.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

