Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings. Opens revdiff in tmux/zellij/herdr/kitty/wezterm/cmux/ghostty/iterm2/emacs-vterm, captures annotations, and addresses them. Works in git, hg, and jj repos (auto-detected). Activates on "revdiff", "review diff", "review changes", "annotate diff", "git review with revdiff", "hg review with revdiff", "review jj change", "interactive diff revie
.claude/skills/umputun-revdiff/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-15 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 160% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-21 | ✓→✗ | ▼ Worse | 118% | 0% |
| case-12 | ✓→✓ | = Same ✓ | 97% | 0% |
This skill is specific to the pi harness. Use the revdiff pi extension for interactive review sessions.
Call the revdiff_review tool only when the user explicitly asks for revdiff, an interactive annotation pass, or captured revdiff annotations. Do not call it for ordinary autonomous requests like "review the code", "review my changes", or "review the diff"; handle those by inspecting the code directly. Do not tell the user to run /revdiff; slash commands are user-invoked only.
When the user invokes /skill:revdiff <input>, treat <input> as a request to launch revdiff unless it is clearly a usage/configuration question or an existing-history request. First figure out the concrete reference point(s) or file target the user asked for, then call revdiff_review. Do not stop after printing the resolved ref.
Reference resolution rules:
in ~/source/repo), use that directory for any git/ref/path resolution, omit that directory phrase from the revdiff args, and pass the directory as the revdiff_review tool's cwd parameter.prev commit, previous commit, last commit → HEAD~1; head-3, head 3, HEAD~3, previous 3 commits, last 3 commits → HEAD~3.last tag or latest tag → run git describe --tags --abbrev=0, then pass that tag as args.2 weeks ago, yesterday, last Friday → run git rev-list -1 --before=<phrase> HEAD, then pass the resulting commit hash as args.args: "--only <path>".all files exclude vendor and dist → args: "--all-files --exclude=vendor --exclude=dist".Tool examples:
/revdiffargs: "main": review the current branch against mainargs: "--staged": review staged changesargs: "--untracked": review untracked files with working-tree changesargs: "--only README.md": review one standalone fileargs: "--all-files --exclude vendor": review all tracked files except vendorargs: "--no-tree": review with the file tree pane hiddenargs: "--page-overlap=2": keep 2 lines from the previous screen when pagingargs: "--description='why this refactor matters' main": include review context in the info popupargs: "--description-file=/tmp/revdiff-desc.md main": include longer markdown review contextargs: "--annotations=/tmp/revdiff-review.md main": preload in-session review notesargs: "main", cwd: "~/source/repo": run revdiff from a specific working directory when the session was started elsewhere.args: "--stdin" with a unified diff piped to stdin (e.g. gh pr diff 123, git format-patch -1 --stdout, a .patch file): review a multi-file diff that lives outside the working tree — revdiff parses it as a real diff (one tree entry per file, hunk navigation, per-file annotations) instead of a context-only bufferAfter revdiff_review returns annotations, address them directly from the tool result content. Do not read revdiff history after a successful captured-annotation result. Exit code 10 is success-with-annotations and is handled by the extension; do not report it as a failure. If it returns no annotations, report that no annotations were captured and stop. Do not relaunch revdiff after any no-annotation result unless the user explicitly asks for another review.
When annotations arrive from /revdiff or revdiff_review:
revdiff_review call returns no annotations, stop. Do not relaunch revdiff after a no-annotation result unless the user explicitly asks for another review.Continue review — rerun the original revdiff_review targetDone with review — stoprevdiff_review target only after repository files changed or when the user chooses to continue reviewing; preserve the original cwd parameter when one was used.--untracked on reruns when agent-created files should be included./revdiff [args] — alias for /skill:revdiff [args]; the skill resolves the request and calls revdiff_review./skill:revdiff <request> — explicit skill command; same behavior as /revdiff <request>.text/revdiff /revdiff HEAD~1 /revdiff main /revdiff --staged /revdiff --untracked /revdiff --all-files --include src /revdiff --all-files --exclude vendor /revdiff --only README.md /revdiff --no-tree /revdiff --page-overlap=2 /revdiff HEAD~3 --description="why this refactor matters" /revdiff HEAD~3 --description-file=/tmp/revdiff-desc.md /revdiff main --annotations=/tmp/revdiff-review.md gh pr diff 123 | revdiff --stdin git format-patch -1 --stdout | revdiff --stdin
text/revdiff prev commit /revdiff last tag /revdiff 2 weeks ago /revdiff all files exclude vendor and dist /revdiff README.md
Behavior:
--stagedHEAD~1--stagedrevdiff_review returns them in the tool result; the agent processes that result directly.--untracked so those files appear in the review tree.--description or --description-file so the info popup explains the review context.If the user says "use my latest revdiff annotations", "pull up my last revdiff review", or similar, do not launch revdiff again. Read the newest markdown file from the revdiff history directory and process its annotations through the same annotation handling loop. Also use history as a fallback only when a revdiff launch reports annotations but the tool did not return annotation text, or when the review did not complete and recent history may contain the saved annotations.
revdiff also writes to history when the process is terminated by a signal (a SIGHUP from a lost connection, or a SIGTERM), saving the current annotations there — never the -o output — so a review cut short mid-session is still recoverable from history.
$REVDIFF_HISTORY_DIR when set; otherwise use ~/.config/revdiff/history/.## file:line (type) format, usually followed by captured diff context.When the user wants to review comments already present in the current conversation, write those comments to a temporary markdown file using revdiff's annotation output format, then run revdiff_review with --annotations=<tempfile> plus the normal review target args. This preloads the notes into the review session so the user can accept, edit, or add annotations in context.
revdiff binary in the current terminal session, temporarily suspending pi while revdiff is running.revdiff is not on PATH, set REVDIFF_BIN to its absolute path.REVDIFF_EXIT_CODE_ON_ANNOTATIONS; 10 means annotations were captured, not failure.O to flush annotations to the output file mid-session, but the pi flow does not need it: pi is suspended until revdiff exits and returns the captured annotations on quit. The keep-open flush loop matters only for standalone use outside pi.Other measured skills in the registry, with their headline benchmark lift.