by umputun
TUI for reviewing diffs, files, and documents with inline annotations
# Add to your Claude Code skills
git clone https://github.com/umputun/revdiffLast scanned: 5/19/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-19T07:45:32.976Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}revdiff is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by umputun. TUI for reviewing diffs, files, and documents with inline annotations. It has 794 GitHub stars.
Yes. revdiff passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/umputun/revdiff" and add it to your Claude Code skills directory (see the Installation section above).
revdiff is primarily written in Go. It is open-source under umputun on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh revdiff against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
TUI for reviewing diffs, files, and documents with inline annotations. Outputs structured annotations to stdout on quit, making it easy to pipe results into AI agents, scripts, or other tools.
Built for a specific use case: reviewing code changes, plans, and documents without leaving a terminal-based AI coding session (e.g., Claude Code). Just enough UI to navigate diffs and files, annotate specific lines, and return the results to the calling process - no more, no less.
--word-diff or toggle with Wv↪ continuation markers, toggle with w; optional --wrap-indent N for hanging-indent continuations (handy for markdown lists)--page-overlap N carries the bottom N lines of the screen to the top of the next one on PgUp/PgDn, so the seam between screens keeps context; the carryover is approximate on wrapped or annotated lines, which occupy several rows but are a single cursor stop« / » markers at the edges to signal hidden content off-screen┃ segment on pane right borders indicates the visible portion of long diffs, file trees, and markdown TOCs; thumb size and position track scroll progress automaticallyLold → new and renders only the real line changes instead of a full delete-and-addHEAD → @-, HEAD~N → @ plus N+1 dashes); --all-files supportedB/ search within diff with n/N match navigation@): browse all annotations across files, jump to any annotation?) showing all keybindings organized by sectioni) showing launch scope (mode, VCS, ref, filters, file/status counts, aggregate +/- line stats), the optional --description prose, and the commit log subject + body for every commit in the current ref range (git/hg/jj) — useful for restoring narrative context when reviewing PR-style diffs--all-files (git ls-files or jj file list), filter with --include and --exclude--only files outside a VCS repo (or not in any diff) are shown as context-only with full annotation support--stdin, optionally naming it with --stdin-name. When the piped content sniffs as a git unified diff, revdiff parses it as a real multi-file diff (review gh pr diff or git format-patch -1 --stdout output directly); otherwise the input is shown as a single context-only buffer.~/.config/revdiff/history/ on quit as a safety net--dump-keys
git, hg, or jj (used to generate diffs; optional when using --only or --stdin)Homebrew (macOS/Linux):
brew install umputun/apps/revdiff
Arch Linux (AUR):
paru -S revdiff
Debian/Ubuntu (.deb):
# download the latest .deb for your architecture from GitHub Releases
sudo dpkg -i revdiff_*.deb
RPM-based (Fedora, RHEL, etc.):
# download the latest .rpm for your architecture from GitHub Releases
sudo rpm -i revdiff_*.rpm
Binary releases: download from GitHub Releases (deb, rpm, archives for linux/darwin amd64/arm64).
revdiff ships with a Claude Code plugin for interactive code review directly from a Claude session. The plugin launches revdiff as a terminal overlay, captures annotations, and feeds them back to Claude for processing.
The plugin requires one of the following terminals since Claude Code itself cannot display interactive TUI applications - the overlay runs revdiff in a separate terminal layer on top of the current session:
| Terminal | Overlay method | Detection |
|---|---|---|
| agterm | agtermctl session overlay open … --block (full-pane overlay, blocks until quit) |
$AGTERM_SESSION_ID env var |
| tmux | display-popup (blocks until quit) |
$TMUX env var |
| Zellij | zellij run --floating |
$ZELLIJ env var |
| herdr | herdr tab create + herdr pane run (new tab) |
$HERDR_ENV env var |
| kitty | kitty @ launch --type=overlay |
$KITTY_LISTEN_ON env var |
| wezterm | wezterm cli split-pane |
$WEZTERM_PANE env var |
| Kaku | kaku cli split-pane (same API as wezterm) |
$WEZTERM_PANE env var |
| cmux | cmux new-split + cmux send |
$CMUX_SURFACE_ID, __CFBundleIdentifier=com.cmuxterm.app, or GHOSTTY_RESOURCES_DIR / GHOSTTY_BIN_DIR containing cmux.app |
| ghostty | AppleScript split + zoom (macOS only) | $TERM_PROGRAM + AppleScript probe |
| iTerm2 | osascript split pane (macOS only) |
$ITERM_SESSION_ID env var |
| Emacs vterm | New frame via emacsclient |
$INSIDE_EMACS env var |
Priority: agterm → tmux → Zellij → herdr → kitty → wezterm/Kaku → cmux → ghostty → iTerm2 → Emacs vterm (first detected wins). If none are available, the plugin exits with an error.
Note: cmux is detected before ghostty when
$CMUX_SURFACE_IDis set,__CFBundleIdentifier=com.cmuxterm.app, orGHOSTTY_RESOURCES_DIR/GHOSTTY_BIN_DIRcontainscmux.app. The cmux block uses the cmux CLI (new-split+send --surface) instead of Ghostty's AppleScript API.
Note: iTerm2 uses a split pane (vertical or horizontal, auto-detected from terminal dimensions) rather than a full-screen overlay. The iTerm2 AppleScript API does not expose a zoom command, so the split view shares screen space with the invoking session.
Note: Ghostty and iTerm2 launchers use
osascript(Apple Events), which is blocked by Claude Code's sandbox. If you use these terminals with sandbox enabled, add the launcher toexcludedCommandsin your Claude Codesettings.json:{ "permissions": { "excludedCommands": ["*/launch-revdiff.sh*"] } }Terminals that use CLI tools instead of AppleScript (agterm, tmux, Zellij, herdr, kitty, wezterm, Kaku, cmux) are not affected.
Disconnect-resilient tmux window mode: set
REVDIFF_TMUX_WINDOW=1in the launcher's environment to open revdiff in a persistent, server-owned tmux window instead of a client-owneddisplay-popup. A dropped SSH or tmux client tears down a popup and kills the review, but a server-owned window survives the disconnect — reattach and the live review is still there. This is a launcher environment variable, not a revdiff flag.
Pane-scoped overlay (agterm): set
REVDIFF_AGTERM_PANE=1in the launcher's environment to open revdiff in the agent's own split pane instead of over the whole session, leaving the sibling pane live and visible. It applies only when that session is split — the session-wide overlay stands otherwise, and the launcher retries session-wide if agterm refuses the pane. The review gets pane width rather than session width, which is why it is opt-in. This is a launcher environment variable, not a revdiff flag.
Install:
# add marketplace and install
/plugin marketplace add umputun/revdiff
/plugin install revdiff@revdiff
Use with /revdiff command:
/revdiff -- smart detection: uncommitted, last commit, or branch diff
/revdiff HEAD~1 -- review last commit
/revdiff main -- review current branch against main
/revdiff --staged -- review