Git History Bug Audit
ben-manes/caffeine
Audits a module by walking its git history commit by commit, tracking unresolved issues forward, and reporting the ones that survive to HEAD as findings.
Review diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings.
$ npx skills add umputun/revdiff --skill revdiff -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install umputun/revdiff revdiff --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/codex/skills/revdiff .claude/skills/revdiff && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .claude/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiffType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add umputun/revdiff --skill revdiff -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install umputun/revdiff revdiff --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/codex/skills/revdiff .agents/skills/revdiff && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .agents/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add umputun/revdiff --skill revdiff -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install umputun/revdiff revdiff --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/codex/skills/revdiff .cursor/skills/revdiff && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .cursor/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/umputun/revdiff.git --path plugins/codex/skills/revdiff--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add umputun/revdiff --skill revdiff -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install umputun/revdiff revdiff --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/codex/skills/revdiff .gemini/skills/revdiff && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .gemini/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install umputun/revdiff revdiffInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add umputun/revdiff --skill revdiff -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/codex/skills/revdiff .github/skills/revdiff && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .github/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add umputun/revdiff --skill revdiff -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install umputun/revdiff revdiff --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/umputun/revdiff.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/codex/skills/revdiff .opencode/skills/revdiff && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "revdiff" agent skill from https://github.com/umputun/revdiff/tree/master/plugins/codex/skills/revdiff into .opencode/skills/revdiff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revdiff", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
revdiffReview diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings.
Revdiff is an agent skill from umputun/revdiff. 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 agterm/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 review"…
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `references/config.md`, `references/install.md` and `references/usage.md`).
It sits in Development. It works with Git and tmux. The repository describes itself as: TUI for reviewing diffs, files, and documents with inline annotations. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d2e4a78. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Revdiff loads about 5.6k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 228 tokens; SKILL.md has 2,765 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from umputun/revdiff at commit d2e4a78, republished under its MIT licence (© umputun). 2,765 words, ~5,569 tokens.
.claude/skills/revdiff/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Review diffs with inline annotations using revdiff TUI in a terminal overlay. Works in git, hg, and jj repos (auto-detected).
Resolve <plugin-root> from this skill's absolute path in the available-skills catalogue. It is the directory containing this plugin's .codex-plugin/plugin.json. Then set:
SCRIPT_DIR="<plugin-root>/skills/revdiff/scripts"Replace <plugin-root> with the resolved absolute path before running the command. Use $SCRIPT_DIR in place of script paths throughout this skill.
Note: the launcher override chain (user via ${CLAUDE_PLUGIN_DATA} → bundled) is Claude-only. Codex users can customize the launcher in a local marketplace checkout and reinstall the plugin.
--only mode)If the user asks a question about revdiff (configuration, themes, keybindings, installation, usage) rather than requesting a review session, consult the reference files in references/ and answer directly. Do NOT launch the TUI for informational questions.
references/install.md — installation methods and plugin setupreferences/config.md — config file, options, colors, chroma themesreferences/usage.md — examples, key bindings, output formatIf the user says things like "locate my review", "use my latest revdiff annotations", "pull up the review I just did in another terminal", or "what did I annotate earlier" — the user ran revdiff outside this plugin flow and wants Codex to process the stored annotations. Read the most recent file from the persistent history directory via the helper script, then process the annotations through Step 3.5 classification as if they had come from a fresh launcher call:
$SCRIPT_DIR/read-latest-history.shThe script resolves the history dir from $REVDIFF_HISTORY_DIR (default ~/.config/revdiff/history), finds the repo subdir via VCS root basename (jj/git/hg), and prints the newest .md file found. Each history file contains a header (path, refs, and — when available — a git commit hash), the annotations in ## file:line (type) format, and the raw git diff for annotated files. The commit: line and diff block are captured from git only; in hg/jj repos the diff block will be empty and no commit hash is recorded. See references/usage.md "Review History" section for directory layout, stdin/only handling, and override options.
The history file is also the recovery path when a review is cut short by a lost connection: on signal termination (a SIGHUP from a dropped SSH/tmux client, or a SIGTERM) revdiff saves the current annotations to history — never the -o output — so read-latest-history.sh still recovers them.
When the user asks to open an in-session review in revdiff (the conversation already contains review comments produced earlier in the session), write those comments to a temp file (e.g. /tmp/revdiff-review-XXXXXX.md) using the format documented in references/usage.md ("Output Format" section), then run the normal launcher flow (Step 1 ref detection, Step 2 invocation) with --annotations=<temp-path> appended. Step 3 onward handles the curated annotations as usual.
Some review targets are not the current repo state: a GitHub PR diff, a patch file on disk, or git format-patch -1 --stdout output. Pipe the unified diff into revdiff --stdin and the input is parsed as a real multi-file diff (one tree entry per file, hunk navigation, per-file annotations) instead of a context-only buffer. revdiff auto-detects the unified-diff signature; on a malformed patch the input falls back silently to raw-text mode.
Use this instead of the normal launcher flow when:
gh pr diff output", or supplies a patch URL/pathExample invocations (route through the same launcher as the normal flow):
gh pr diff 123 | $SCRIPT_DIR/launch-revdiff.sh --stdin
git format-patch -1 --stdout | $SCRIPT_DIR/launch-revdiff.sh --stdin
cat /tmp/feature.patch | $SCRIPT_DIR/launch-revdiff.sh --stdin--stdin is mutually exclusive with refs, --staged, --only, --all-files, --include, --exclude, and --annotations, so do not combine with the Step 1 ref detection — go directly to Step 3 once the launcher returns. Annotations come back keyed by the real file paths from the diff (not by --stdin-name).
All-files mode: If $ARGUMENTS matches "all files", "all-files", or "browse all files" (with optional "exclude <prefix>" parts), use all-files mode:
--all-files to the launcher--exclude=<prefix>--all-files --exclude=vendorFile review mode: If $ARGUMENTS is a single token that points at a file on disk (e.g., docs/plans/feature.md, /tmp/notes.txt, README.md, main.go, file.blah), treat it as file review:
test -f "$ARGUMENTS" — if the file exists, it's file review mode/ or ./, or contains / and has a file extension (e.g., src/app.go), even when the file is not yet reachable from the current directory--only=<filepath> (no ref argument)main — both a branch name and a potential filename without extension) → prefer ref mode; ask the user only if neither test -f nor git rev-parse --verify resolvesRef mode: If $ARGUMENTS contains explicit ref(s) (e.g., HEAD~1, main, or main feature for two-ref diff), use as-is.
Auto-detect: If no ref provided, run the smart detection script:
$SCRIPT_DIR/detect-ref.shThe script outputs structured fields:
branch, main_branch, is_main, has_uncommitted, has_staged_onlysuggested_ref — the ref to pass to revdiff (empty = uncommitted changes)use_staged — if true, pass --staged to the launcher (staged-only changes detected)needs_ask — if true, ask the user before proceedingWhen use_staged: true, pass --staged to the launcher. This means all changes are in the index (staged) with nothing unstaged — without --staged, revdiff would show an empty diff.
When needs_ask: true (on a feature branch with uncommitted changes), present the user with options as a numbered list and wait for their response:
When needs_ask: false, use suggested_ref directly:
--staged (staged changes)HEAD~1 (last commit)When you are launching revdiff for the user (e.g., right after a refactor or analysis), pass --description="..." so the info popup (i key) explains what the change is and what to look at — markdown is supported. For longer prose, write the markdown to a temp file and pass --description-file=/tmp/revdiff-desc-XXXXXX.md. The two flags are mutually exclusive; both are optional. Skip when there's no useful context to add.
When the recent change likely created new untracked files (new packages, new test files, new docs, new scripts that haven't been git add-ed yet), pass --untracked so those files appear in the tree. Use this in working-tree mode (no ref, no --staged); skip it for ref-to-ref reviews where untracked files are not part of the historical diff.
Pass --start-at-change only when the user explicitly asks for that cursor preference; never infer it automatically.
Pass --filter-unreviewed only when the user asks for the tree limited to files not marked reviewed; never infer it automatically. The F key toggles the same filter during the review.
Pass --cross-file-motion only when the user explicitly asks for cursor motion to continue into adjacent files; never infer it automatically.
Run the launcher script:
$SCRIPT_DIR/launch-revdiff.sh [base] [against] [--staged] [--untracked] [--filter-unreviewed] [--cross-file-motion] [--only=file1] [--all-files] [--exclude=prefix] [--description=text|--description-file=path]IMPORTANT — long-running command: The launcher blocks until the user finishes reviewing in the TUI overlay, which can exceed the default bash tool timeout. Set the bash timeout parameter to the maximum your harness allows (e.g. 1800000 or higher). Do NOT use run_in_background for this — background-task handling is unreliable for interactive TUI launchers. If the review outlasts the timeout cap, the fallback in Step 3 handles it.
Disconnect-resilient tmux window mode: when running under tmux, prefix the launcher with REVDIFF_TMUX_WINDOW=1 to open revdiff in a persistent, server-owned tmux window instead of a client-owned display-popup. The review then survives a dropped SSH or tmux client — reattach and it is still there. This is a launcher environment variable, not a revdiff flag.
Pane-scoped overlay (herdr): when running under herdr, REVDIFF_HERDR_PANE=1 opens revdiff in a zoomed split of the agent's own pane instead of a new fullscreen tab, keeping the agent pane one keypress away. The user sets it in the environment; it falls back to the tab overlay on an older herdr CLI. This is a launcher environment variable, not a revdiff flag.
Pane-scoped overlay (agterm): when running in an agterm split, REVDIFF_AGTERM_PANE=1 opens revdiff in the agent's own pane instead of over the whole session, leaving the sibling pane live and visible. The user sets it in the environment; it is ignored outside a split. This is a launcher environment variable, not a revdiff flag.
The script:
The bundled launcher sets REVDIFF_EXIT_CODE_ON_ANNOTATIONS; exit 10 means annotations were captured and is not a launcher failure. Treat other nonzero statuses as failures. On those failures the launcher relays revdiff's own stderr — report that text verbatim instead of guessing which argument was at fault.
When Codex runs inside an agterm session, the launcher opens revdiff in agterm's native full-pane overlay — its first-choice backend, checked ahead of tmux. That branch needs AGTERM_SESSION_ID and AGTERM_SOCKET in the launcher's environment.
Codex commands that require approval or escalation run in a fresh environment that strips every AGTERM_* variable (along with TERM_PROGRAM and GHOSTTY_*), keeping only PATH. Launched from there without those variables, the launcher skips the agterm branch and fails with no overlay terminal available.
Before escalating, read the values in the normal (unescalated) environment and inline them as literal values in the approved command:
AGTERM_SESSION_ID='<captured-id>' \
AGTERM_SOCKET='<captured-socket>' \
$SCRIPT_DIR/launch-revdiff.sh --only=<file>$AGTERM_SESSION_ID / $AGTERM_SOCKET inside the approved command — they are already unset there, so the expansion is empty. Read them first in the normal environment, then paste the literal strings.active session (agterm's default): that can open revdiff in an unrelated agterm window or session. The captured session id keeps the overlay on the reviewing session.Collecting launcher output: In the normal case the launcher returns synchronously with annotations on stdout — process them as described below. If the bash tool reports exit 10, read stdout and process it as annotations; do not call it a failure. If the bash tool instead reports a timeout, only the launcher process died, but revdiff itself is still open in the overlay and no annotations are lost: revdiff writes them to disk the moment the user quits, and O flushes them any time. Do NOT retry the launcher. Use the fallback:
O flush, quit-to-save); the user does not need them. Say something like: "The process waiting on your revdiff review timed out and exited — that's harmless, and any annotations you made are safe. Whenever you're done, message me and tell me to either load your annotations and continue, or that you're done and want to stop." Do NOT assume they want to load; quitting with no annotations, or choosing to stop, is a valid outcome.O and switched back).$TMPDIR when set, falling back to /tmp):output_file="$(ls -t "${TMPDIR:-/tmp}"/revdiff-output-* 2>/dev/null | head -1)"
if [ -n "$output_file" ] && [ -f "$output_file" ]; then
cat "$output_file"
fi$SCRIPT_DIR/read-latest-history.sh and process the annotations from its ## Annotations section (see "Using Existing Review History"). Only if both are empty did the user quit without annotating.Both reads return complete content: revdiff writes the output file atomically on exit, and the history entry is complete before the process exits. That guarantees no partial read, not that the file belongs to this review: with two reviews live under one $TMPDIR, the newest match may belong to the other one.
A reviewer may also keep revdiff open on purpose and press O to flush the current annotations to the same output file mid-session, without quitting. The flush uses the same atomic write, so the fallback read above still returns a complete file. When the user says something like "I flushed my notes, go ahead" while the overlay is still open, read the most recent output file exactly as in the timeout fallback and process the annotations; do NOT relaunch revdiff. After you finish the code changes, the reviewer reloads with R and continues in the same session. No launcher flags change for this — the launcher already passes an output file, and O reuses it.
If the script produces output, the user made annotations. The output format is:
## file.go:43 (+)
use errors.Is() instead of direct comparison
## store.go:18 (-)
don't remove this validationEach annotation block has:
## filename:line (type) — which file and line, (+) = added, (-) = removed, (file-level) = file noteSplit annotations into two categories:
Explanation requests — annotation matches either rule (case-insensitive):
??, ???, etc.) — a language-neutral shortcut for "please explain"explain, remind, describe, what is, what are, how does, how do, clarifyThese are questions the user wants answered, not code changes.
Code-change directives — everything else. These are instructions to modify code.
If explanation requests are found:
Answer each explanation request — read the referenced code, generate a clear markdown explanation
If there are also code-change directives in the same batch, note them as pending (they carry over to Step 4 after the explanation loop)
Enter the explanation loop:
a. Write the explanation to a temp markdown file (e.g., /tmp/revdiff-explain-XXXXXX.md)
b. Launch revdiff with --only=/tmp/revdiff-explain-XXXXXX.md via the launcher script — this opens the explanation as a scrollable markdown view with TOC sidebar
c. If user quits without annotations → explanation accepted, clean up temp file, proceed:
The explanation loop continues until the user quits without annotating. This allows a natural back-and-forth dialogue where the user can ask for more detail or corrections on specific parts of the explanation.
If no explanation requests — all annotations are code-change directives, proceed directly to Step 4.
Write the plan as a markdown list analyzing code-change annotations:
Wait for user confirmation before modifying code.
After user approves the plan, fix the actual source code. Each annotation is a directive.
After fixing (or after "Continue review" from Step 3.5), run the launcher script again with the same ref. The user can:
When the script produces no output, the review is complete. Inform the user.
User: "revdiff HEAD~1"
→ launch revdiff in tmux popup with HEAD~1 diff
→ user annotates: "handler.go:43 - use errors.Is()"
→ user quits
→ annotations captured
→ plan changes: "add errors.Is() check at handler.go:43"
→ user approves
→ fix applied
→ re-launch revdiff HEAD~1
→ user sees fix, quits without annotations
→ "review complete"User: "revdiff HEAD~3"
→ launch revdiff in tmux popup with HEAD~3 diff
→ user annotates: "server.go:72 - explain what this mutex protects"
→ user quits
→ annotation classified as explanation request (starts with "explain")
→ Codex reads server.go:72, generates markdown explanation
→ writes to /tmp/revdiff-explain-XXXXXX.md
→ launch revdiff --only=/tmp/revdiff-explain-XXXXXX.md (explanation view with TOC)
→ user reads explanation, annotates: "what about the race condition on line 80?"
→ Codex refines explanation, rewrites temp file
→ re-launch revdiff --only=/tmp/revdiff-explain-XXXXXX.md
→ user reads updated explanation, quits without annotations
→ explanation accepted, clean up temp file
→ re-launch revdiff HEAD~3 (back to diff review)
→ user quits without annotations
→ "review complete"User: "revdiff all files exclude vendor"
→ launch revdiff with --all-files --exclude=vendor
→ user browses all tracked files, annotates as needed
→ same annotation loop as aboveUser: "revdiff docs/plans/feature.md"
→ test -f docs/plans/feature.md succeeds → file review mode
→ launch revdiff with --only=docs/plans/feature.md (context-only view, no ref)
→ user annotates prose: "section 'Open questions':3 - drop this, resolved"
→ user quits
→ same annotation loop as above (applies to the file content)© umputun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts, references) in plugins/codex/skills/revdiff of umputun/revdiff.
Open the folder on GitHubat commit d2e4a78
Revdiff next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Revdiff this skillumputun/revdiff | 916 | — | ~5.6k | Automated safety check: Pass | MIT | |
| Git History Bug Auditben-manes/caffeine | 18k | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Using Tmux For Interactive Commandsobra/superpowers-lab | 429 | 2 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Pypi ReleasealchemiststudiosDOTai/tunacode | 125 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Clean Vmaxeldelafosse/loop | 281 | — | ~906 | Automated safety check: Pass | MIT | |
| Release Clawpatchopenclaw/clawpatch | 813 | — | ~1.1k | Automated safety check: Pass | MIT |
ben-manes/caffeine
Audits a module by walking its git history commit by commit, tracking unresolved issues forward, and reporting the ones that survive to HEAD as findings.
obra/superpowers-lab
A skill your agent uses when you need to run interactive CLI tools (vim, git rebase -i, Python REPL, etc.) that require real-time input/output - provides tmux-based approach for controlling…
alchemiststudiosDOTai/tunacode
This skill should be used when releasing tunacode-cli to PyPI.
axeldelafosse/loop
Safely clean the local loop VM by reporting and removing stale loop runs, inactive Next.js or Storybook servers, optional browser windows, and unused loop-created worktrees without disturbing active…
openclaw/clawpatch
clawpatch release: version/changelog, CI, npm publish, GitHub release, verify.
vaayne/mori
Use Mori CLI to enable agent-to-agent communication and coordination across Mori-managed panes.
umputun/revdiff
Review diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings.
umputun/revdiff
Pi-only interactive diff and file review with revdiff. An agent skill from umputun/revdiff.
umputun/revdiff
Review the last Codex assistant message (plan, analysis, or proposal) with inline annotations in a TUI overlay.
Categories
Review diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings. Revdiff is an agent skill from umputun/revdiff. Review diffs, files, and documents with inline annotations in a TUI overlay, or answer questions about revdiff usage, configuration, themes, and keybindings.
Revdiff fits situations like: development work in your project.
Run `npx skills add umputun/revdiff --skill revdiff -a claude-code`. Or copy the skill folder (plugins/codex/skills/revdiff in umputun/revdiff) into .claude/skills/revdiff in your project. Claude Code loads it when a task matches its description.
Run `npx skills add umputun/revdiff --skill revdiff -a codex`. Or copy the skill folder (plugins/codex/skills/revdiff in umputun/revdiff) into .agents/skills/revdiff in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add umputun/revdiff --skill revdiff -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/revdiff, .gemini/skills/revdiff, .github/skills/revdiff and .opencode/skills/revdiff in your project.
Going by SKILL.md and its folder, Revdiff needs a shell for the scripts in its folder and the command-line tools its instructions call (git and gh). Our summary lists: A Bash shell.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Revdiff is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 10k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Revdiff: Git History Bug Audit (ben-manes/caffeine, 18k stars), Using Tmux For Interactive Commands (obra/superpowers-lab, 429 stars), Pypi Release (alchemiststudiosDOTai/tunacode, 125 stars) and Clean Vm (axeldelafosse/loop, 281 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
umputun (a GitHub user) maintains it in umputun/revdiff, which has 916 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 7, 2026.
Source: umputun/revdiff on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.