Skip to content

Releases: JonasBaeumer/herdr-file-annotator

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 12:31
d2ac371

The release where the loop closes itself: non-blocking reviews now come back to the agent on their own.

The verdict nudge (#28)

show_changes had a dead end. The agent opened the pane and went idle; you reviewed and finished; nothing told the agent your feedback was waiting. MCP has no way for a server to wake an idle agent — but herdr does. The server knows which pane the agent lives in, so when your verdict lands with no collect_review call waiting on it, it types one line into the agent's own chat and submits it:

[herdr-annotator] The reviewer finished: request_changes with 3 annotations. Call collect_review to fetch the feedback and act on it.

The agent wakes, collects, and acts — a full guided-review round trip with nobody dispatching it. The nudge carries only the verdict name and annotation count; the feedback itself stays behind collect_review, consumed exactly once through the normal tool path. It is suppressed while a collect_review call is already polling, never fires for blocking review_changes, and works for any agent CLI in a herdr pane — nothing about it is Claude Code-specific. A pane closed without a verdict nudges too (neutrally — a deliberate stop isn't talked past), so the agent always learns the review is over.

Turn it off with notify_on_verdict = false (configuration); the full behavior is documented in MCP tools. Review hardening along the way: a lost-wakeup race (verdict landing in the exact window where a pending collect_review had silenced the nudge but no longer saw the mailbox) was found in review and fixed with a regression test pinning the window.

A face for the repo (#29)

The README now opens like a proper front door: an SVG banner (with a mini review pane showing an inline annotation, naturally) over live CI, release, herdr-requirement, and license badges.

Compatibility

Wire protocol unchanged (v2) — panes and servers from 0.6.0 onward interoperate. The nudge is entirely server-side; reconnect your agent's MCP server (/mcp in Claude Code) after updating so the new server binary is the one running. New config key notify_on_verdict defaults to on.

152 tests. Full changelog: v0.8.1...v0.9.0

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 30 Aug 13:38
6aee151

A precision patch on the tab fix, and a fully re-shot demo.

Tab stops measured the way the terminal draws

Follow-up to 0.8.0's tab-corruption fix (#23): expand_tabs counted columns one per character, so a tab after wide (CJK, emoji) or multi-codepoint text (ZWJ sequences, variation selectors) landed a stop off — a family emoji was counted as 8 cells instead of the 2 it renders as. Columns are now measured per grapheme cluster with unicode-width, the exact model the render path uses, so tab expansion, pan/clip math, and the terminal finally agree everywhere. ASCII behavior is byte-identical.

New hero demo

The README clip was re-recorded from scratch: it now starts with the user's own prompt typed into a Claude Code-style session (input bar, model line, auto mode), the agent responds and summons the pane on camera, the file tree and a focus fold feature in the tour, and every annotation is typed, not pasted.

142 tests. Wire-compatible with 0.6.x–0.8.0 (protocol v2 unchanged). Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.8.0...v0.8.1

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 13:48
ac9b5ef

The navigation release — plus the project's first outside contribution.

The file list is a tree now

Changed files render inside their folder structure: ▾ src/ rows group what's beneath them, files show their basename and +N -N counts. Collapse a folder with Enter or a click and its row tells you what it's hiding (▸ src/ (4)). Moving onto a file row previews it immediately, exactly like the flat list did — and reorganizing folders never disturbs which file is open, so you can tidy your view mid-review without losing your place. Agent-driven gotos expand collapsed folders automatically: guided navigation can never point you at something the tree is hiding.

Resize the split

[ / ] shrink and widen the file list from either pane, or just drag the divider with the mouse. One clamp policy for both: the file list never drops below a usable width, the code pane never loses its readable floor, and the bounds re-apply automatically when the terminal resizes. (b still hides the list entirely.)

Tab-indented files no longer corrupt the pane

First community contribution, by @bradub: raw tab characters reaching the terminal made reviews of tab-indented code (Go especially) unusable — the terminal expanded tabs at its own stops while the render buffer counted them as zero width, and the incremental redraw piled stale text from earlier frames onto the current view. Tabs are now expanded to proper column stops before any text reaches the render path, in both diff and source view. Reproduced, verified, and much appreciated.

140 tests. Wire-compatible with 0.6.x/0.7.x (protocol v2 unchanged). Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 16:32
41f57b2

The folding release: fold a long file down to just the parts that matter — driven by the agent as it explains, or by hand.

focus — the agent folds the file to what it's explaining

Fifth MCP tool, for guided walkthroughs: focus {file, regions: [{start, end}, …]} switches the pane to that file's source view, lands on the first region, and collapses everything between the regions into ⋯ N lines folded ⋯ pills. Call it again to refocus; an empty regions array clears the agent's focus without moving your cursor. You're never trapped: pills expand with Enter or a click, and a later goto into a folded stretch auto-expands it. Annotations hidden by a fold show up as a note badge on the pill (⋯ 24 lines folded · 1 note ⋯) and ride back with the verdict regardless.

f / F — fold it yourself

In source view, f folds the visual selection — or, with no selection, the indentation block under the cursor line: f on a def/fn header tucks the body away while the signature stays visible (multi-line signatures included; the closing ): / ) -> … { folds with the body). F reveals the whole file. Manual and agent-driven folds share one engine: touching folds merge into a single pill, and expanding a merged pill reveals everything it covered. The block detection is indentation-based and language-agnostic by design — for layouts it doesn't recognize, select the lines and f folds exactly those.

Sturdier guided navigation

Gotos that arrive while you're typing a comment are now queued and replayed in order once the box closes (previously only the latest survived, which could silently drop an earlier focus). A focus whose regions miss the file entirely folds nothing and moves nothing.

127 tests. Wire-compatible with 0.6.x (protocol v2; focus rides an optional field on the goto frame, older panes simply ignore it). Docs moved to docs/ — the README is now just the pitch and quick start. Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.6.1...v0.7.0

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 17 Aug 20:02
798b386

Two improvements straight from live guided-review sessions.

goto steers the view

The walkthrough tool gains an optional view argument: goto {file, line, view: "source"} flips the pane to the full post-change file (line numbers map directly), "diff" flips back, omitted keeps the current view. The whole guided experience — position AND presentation — is now expressible purely through MCP, no local side channels. Safety: a pushed view switch clears a live v selection (its anchor indexes the old view's rows), and a source request for a deleted/binary/unreadable file is ignored, keeping the useful diff on screen.

? help overlay, footer that fits

Press ? anywhere (except mid-typing) for a centered, scrollable key reference grouped by section, with your current context highlighted and source-view caveats noted. While it's open, q/Esc close the overlay — never the review. The footer shrinks to what matters: path:line · a approve · r request changes · q cancel · ? help, ending the right-edge hint overflow.

102 tests. Wire-compatible with 0.6.0 (protocol v2 unchanged). Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.6.0...v0.6.1

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 17 Aug 13:19
ae8b0ab

Guided review: review the diff while the agent keeps working — and let it walk you through the code.

New MCP tools

  • show_changes — opens the review pane and returns immediately. Same arguments as review_changes; no timeout, because nothing is blocked.
  • goto {file, line} — pushes navigation to the open pane. As the agent explains the diff in chat, the pane follows its pointer — hunk by hunk. Advisory: unknown files are ignored, lines clamp, an open comment box is never disturbed (the push is applied once you finish typing).
  • collect_review {wait_seconds?} — fetches the verdict and annotations when you finish; returns {"status": "pending"} until then (not an error). Annotations work exactly as in blocking mode.

Blocking review_changes is unchanged; the two modes guard against each other.

Under the hood

  • Protocol v2: tagged server→pane messages on a channel held open for the review's lifetime; verdicts read on a mailbox thread
  • Timed-out blocking reviews now shut the socket down cleanly (no leaked threads or file descriptors), and the pane exits as cancelled when the agent side disconnects — no reviews into the void
  • Protocol failures surface as errors instead of masquerading as human cancellations
  • e2e harnesses can no longer orphan their server child

94 tests. Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 17 Aug 09:02
2d5c4a1

The review-round UX release: everything since 0.4.2 came from live review feedback, hardened by ~50 Codex findings across PRs #2#4 and #6.

Wide code, small panes

  • Horizontal pan: / (or H/L, horizontal trackpad scroll) with the line-number gutter pinned; / clip markers; 0 resets; adaptive step in narrow panes so every column stays reachable
  • b collapses the file navigator; z toggles herdr's pane zoom

Comment UX

  • Writing a comment opens an inline dashed box under the selected lines with visible button chips: [ commit ⏎ ], [ tag ^T ], [ cancel esc ]
  • Saved notes get a slim tag-colored left bar; comments word-wrap to the pane; all input surfaces measure display columns (CJK-safe)

Source view

  • t toggles the diff to a clean, fully-highlighted view of the post-change file — review new files and logic without diff noise
  • Annotations anchor per view and work identically in both; cursor position survives the toggle

Hardening

  • Pan/clip boundaries are grapheme-cluster atomic (UAX #29): CJK, combining marks, ZWJ emoji, flags, and Indic conjuncts never render split
  • Column arithmetic uses the exact unicode-width version ratatui pins, so our math is the render layer's
  • Source view refuses symlinks (no reads outside the repo), caps file size and line count, and rejects files modified since the diff snapshot

82 tests (from 53). Install/update: herdr plugin install JonasBaeumer/herdr-file-annotator

Full Changelog: v0.4.2...v0.5.0

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 15 Aug 14:47

Annotation UX fixes from live review feedback.

  • The selected line range stays highlighted while you type the comment (it previously collapsed to the cursor row until saved)
  • Inline comments word-wrap to the pane width with indented continuation rows — long text no longer runs off the edge
  • The comment/summary input bar keeps the end of long text visible (leading ellipsis)

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 15 Aug 11:44

Mouse support.

  • Trackpad/wheel scrolls the diff (cursor follows only at the viewport edge) and the file list
  • Click places the diff cursor or selects a file; clicking an inline comment jumps to its line
  • Click-drag selects a line range — feeds the same annotation flow as v
  • Mouse is inert while a comment/summary input is open

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Aug 10:29

First installable release: herdr plugin install JonasBaeumer/herdr-file-annotator.

  • Agent-summoned, blocking code review: the agent calls the review_changes MCP tool, a review pane opens beside it inside herdr, and the agent waits for your verdict
  • Two-pane UI: file navigator (git-status markers, adds/dels) + syntax-highlighted diff with line-number gutter and hunk jumping
  • Line-anchored annotations: v range select, c comment (inline, GitHub-style), Ctrl-T tags (verify/fix/question/nit), x delete
  • Structured verdict JSON (approve / request_changes / cancel) with the annotations array returned to the agent
  • Config file: placement, split direction, focus, connect + review timeouts
  • Prebuilt binaries for macOS (arm64/x86_64) and Linux (x86_64/arm64, static musl), SHA-256-verified at install, cargo fallback

Full Changelog: https://github.com/JonasBaeumer/herdr-file-annotator/commits/v0.4.0