herdr-reviewr holds a comment until you press s, and the pane never touches the worktree
A code review + file viewer sidebar for herdr. Comment on a diff and send back to agent. Inspect diffs, files, and a PR state.
At a glance
- What is it?
- A Rust terminal pane for reading the diff an agent produced in a git worktree, built on ratatui with four diff scopes, line comments and a read-only pull request view. It reads GitHub, GitLab and Azure DevOps but writes to none of them, and two of its features quietly disappear when herdr is not running.
- Who is it for?
- herdr-reviewr fits a team that lets an agent write code inside a worktree and wants a human to read the result before the next turn, because the four scopes separate the agent's committed work from whatever is still unstaged, and nothing leaves the terminal until s is pressed. It is a poor fit on Windows, which the requirements leave out, and for anyone who needs the last-turn scope or the send action outside a herdr session, since both need herdr around.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 2, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Three releases on one afternoon, and the plugin install is what moves
The release history moves fast. v0.40.1 was published on 2026-10-02 at 14:06, v0.41.0 the same afternoon at 14:55, and v0.42.0 at 18:15, and that last number is the version declared in Cargo.toml, so the crate manifest and the tag agree. Installing is a plugin operation rather than a package manager one:
herdr plugin install persiyanov/herdr-reviewr
herdr plugin action invoke open --plugin persiyanov.reviewrUpdating means reinstalling, uninstalling and installing again, and the page notes that your configuration is keyed by plugin id and survives the round trip. reviewr also auto-opens whenever herdr creates a workspace for a worktree, whether the checkout is new or opened from disk, and a configuration value called auto_open set to false keeps it hidden until you ask. That plugin id is worth separating from the project name, because the shortcut binding for it is written as an id followed by an action, not as a name:
[[keys.command]]
key = "cmd+r"
type = "plugin_action"
command = "persiyanov.reviewr.toggle"Without herdr the pane is plain, and two features go with it
reviewr also runs as an ordinary terminal program, pointed at a repository, using a release binary from the releases page. The requirement list is short and unforgiving: herdr 0.7.5 or newer for the plugin system, git on PATH, a truecolor terminal with Unicode box drawing, and macOS or Linux. That platform line is the one to check first, since the pane is a full screen terminal application and a standalone binary is exactly the case where a Windows user would reach for it first. The cost of running it standalone is stated plainly: everything works except Send and the last turn scope, because those two need herdr around. So the standalone mode is a file and diff browser, not a review loop, and the review loop is the reason the plugin exists.
The four scopes separate committed work from the agent's turn
Diff scope is the mechanism the pane is built around, and there are four of them. Uncommitted compares the working tree against HEAD, covering staged, unstaged and untracked changes. Branch compares the working tree against the merge-base with the base branch, so it is uncommitted plus the branch's commits, with the base being your default branch until you pick another with B. Commits takes one commit or several in a row, chosen with G, which lets you read what the agent committed one step at a time without its unsaved edits mixed in. Last turn is the one that needs herdr: everything that changed in the worktree since its most recent turn started. The pane opens in the uncommitted scope, and the scope keys are u, b, t and g.
Comments sit in the pane until s, and quitting asks first
Writing to the agent is an explicit act. The flow is select lines with v, extend with j and k or by dragging the number gutter, press c to type a comment, and press s to send every comment to the agent's input. Before that s, the comments exist only inside the pane. The page states the two guarantees directly: it never edits your worktree and sends nothing on its own. Quitting is where the care shows, because q asks first when there are unsent comments and Q quits and drops them when asked. The other review keys stay local too, with l listing all comments, n and N jumping between them, d deleting, y copying them to the clipboard, and e editing the one under the cursor or handing the file to your editor.
The PR tab reads three forges and writes to none
The third tab is a read-only mirror of the branch's pull request, or merge request on GitLab: state, checks, description and comments, with the description rendered as markdown. Three forges are named, GitHub, GitLab and Azure DevOps, and each has a command line tool that has to be authenticated first, gh, glab, or az with the azure-devops extension. That authentication is the only optional requirement in the list, and only the PR tab needs it, so someone who never looks at the pull request can ignore all three. The page is explicit that reviewr never posts to the forge and never writes to it, and the tab's own keys are read-only shapes: j and k to move through description and comments, r to refresh, and o to open the pull request in a browser instead.
The test recipe unsets three variables before running cargo
The developer entry point is a justfile, and its test task is the interesting one. It runs env with HERDR_WORKSPACE_ID and HERDR_PANE_ID removed from the environment and HERDR_BIN_PATH set to false, then calls cargo test with all features. The comment above it explains why: the suite is cut off from the herdr it may run inside, so a test that reaches herdr gets a binary that refuses rather than a live agent pane. That is a deliberate isolation trick rather than a mock. Around it sit cargo fmt with a check mode for CI parity, cargo clippy over all targets and all features with warnings promoted to errors, a ci task that chains format check, lint and test before a release build, and a smoke-edit task that drives a python script against a real release binary.
The dependency list is annotated with what each crate is for
Cargo.toml is unusually talkative for a manifest. The syntect entry turns off default features and asks only for parsing, regex-fancy, dump-load and plist-load, with a comment explaining that the unmaintained yaml-rust never enters the tree because the project reads prebuilt binary syntax dumps, and that the onig engine is left out in favour of a pure-Rust one. The time crate is requested with parsing alone, on the grounds that it is already in the tree through ratatui's calendar widget and only needs to read RFC 3339 timestamps from a forge. neo_frizbee is pinned to 0.13.3 and named as the matcher fff-search scores with, reused so the base branch picker ranks names the way the search screen does. The lints block forbids unsafe code outright and warns on unreachable pub and missing debug implementations.
Editorial conclusion
herdr-reviewr fits a team that lets an agent write code inside a worktree and wants a human to read the result before the next turn, because the four scopes separate the agent's committed work from whatever is still unstaged, and nothing leaves the terminal until s is pressed. It is a poor fit on Windows, which the requirements leave out, and for anyone who needs the last-turn scope or the send action outside a herdr session, since both need herdr around. Before adopting it, check your terminal is truecolor with Unicode box drawing, decide whether you need gh, glab or az authenticated, and expect to reinstall to update, because the plugin install is what tracks releases.
Frequently asked questions
How do I install herdr-reviewr?
Prebuilt binaries need no Rust toolchain: run herdr plugin install persiyanov/herdr-reviewr, then herdr plugin action invoke open with the plugin id persiyanov.reviewr. It also runs standalone from a release binary, pointed at a repository path.
What does herdr-reviewr need before it will run?
herdr 0.7.5 or newer, git on PATH, a truecolor terminal with Unicode box drawing, and macOS or Linux. The PR tab additionally needs gh, glab or az with the azure-devops extension, authenticated.
What is lost when herdr-reviewr runs without herdr?
Send and the last turn scope. Every other feature still works in standalone mode, which makes the standalone build a diff and file browser rather than a review loop.
What are the four diff scopes in herdr-reviewr?
Uncommitted is the working tree against HEAD including staged, unstaged and untracked changes. Branch adds the branch's commits via the merge-base. Commits reads one commit or several in a row picked with G. Last turn is everything changed since the worktree's most recent turn began.
Does herdr-reviewr post anything to GitHub?
No. The PR tab is a read-only mirror of the pull request or merge request, with state, checks, description and comments, and the page states that reviewr never writes to the forge and never edits your worktree.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/persiyanov-herdr-reviewr)