## herdrdev/herdr — v0.9.0…v0.9.1

_135 commits._

### Features
- **feat: add cursor-based editing to text inputs (#3698)** (b0f21ed)
- **feat: add ctrl-hover highlighting and fix wrapped links (#4074)** (f8e5922)
- **feat: install windows remote host packages (#3687)** (5916765)
- **feat: add Letta Code detection and restore (#3107)** (fc1cb77)
- **feat: support conditional sidebar token hiding (#3925)** (5827145)
- **feat: route cli commands to saved ssh machines (#3918)** (043b804)
- **feat: navigate and highlight workspaces across machines (#3755)** (b9ce968)

### Fixes
- **fix: avoid workstation sdk requirement in preview checks** (2c29fb2)
- **fix: address release promotion review findings** (3f78f17)
- **fix: offer forced removal for worktrees with submodules (#4238)** (aff9987)
- **fix: require exact session names before deletion (#4233)** (ab15da2)
- **fix: let local agent clicks cancel remote handoffs (#4236)** (68ae6ad)
- **fix: keep local usable when remote machines stall (#4234)** (d1a53b2)
- **Enable incremental surface updates** — Added support for surface delta encoding to send only changed portions of screen updates instead of full frames, reducing bandwidth usage. This builds on the existing surface reuse capability with a new negotiation protocol that clients and servers can opt into during connection handshake. (1806119)
- **Fix macOS services after logout** — macOS servers now preserve service context across user logout, preventing SSH and DNS failures. When automatically started, servers maintain a per-user service context so services remain available even after logging out, fixing issues where user lookup and DNS would fail with errors like "No user exists for uid 501" or "Could not resolve host". (266b8e3)
- **Backup sessions before replacing them** — When a session file can't be read or parsed, Herdr now preserves the original file as a backup in a `session-backups/` folder before creating a new session. It keeps the three most recent backups and logs the path for recovery, allowing users to manually restore a session if needed. (4428e16)
- **Prevent dynamic Microsoft C runtime** — Added validation to reject Windows executables that depend on the dynamic Microsoft C/C++ runtime (like VCRUNTIME140.dll or the Universal CRT) instead of linking it statically. The check runs when staging the executable and again before archiving to prevent accidental regressions. (f70a1f8)
- **Fix Windows pane directory casing** — Fixed an issue on Windows where pane launch directories weren't respecting the correct case of folder names, which could cause problems when opening new panes. The fix normalizes directory paths to match their actual stored names on disk before launching new panes. (9db1eed)
- **Fix Windows mouse encoding persistence** — Fixed a bug on Windows where mouse encoding settings (SGR format) were being incorrectly reset after native mouse capture was enabled. The terminal now preserves the SGR encoding that Windows ConPTY sets, preventing conflicting mode changes. (ee064a0)
- **Keep selections alive during pane output** — Mouse drag selections and selections started with keyboard shortcuts now remain active when new output arrives or the pane redraws, even if part of the selection scrolls out of view. The copied text reflects the current content in the selected range rather than a frozen snapshot. (963f78f)
- **Fix pane move client location tracking** — Fixed an issue where moving a pane without focus could cause a client viewing that pane to lose its position and incorrectly follow unrelated focus changes. The fix ensures that pane move operations properly reconcile client locations, just like other workspace topology changes do. (7808478)
- **Fix pane move focus propagation** — When users move panes with focus enabled, the change now properly propagates to all connected clients. This fix ensures that pane movements (like switching between split panes) are correctly reflected across all attached sessions. (f236ba5)
- **fix: reveal newly focused workspaces in the machines sidebar** (9bd5f4e)
- **fix: reveal the full last tab in overflowing tab strips (#4152)** (052779c)
- **fix(windows): prefer VT input for SSH clients (#4148)** (32503f8)
- **fix(windows): batch input trace diagnostics (#4146)** (734faae)
- **fix: reject stale pane surfaces after reconnect (#4141)** (f867dab)
- **fix: map pixel mouse by integer cell pitch (#4140)** (b0c05e6)
- **fix: protect integration configs from failed writes (#3973)** (5e38e5f)
- **fix: avoid resending terminal cells for metadata updates (#4137)** (d8b3669)
- **fix: keep modified enter compatible with legacy panes (#4110)** (4c3b613)
- **fix(windows): avoid lossy native Win32 input mode (#4133)** (01a9733)
- **fix: scope window titles to each client view (#4130)** (ad41567)
- **fix: restore saved machine screens after reconnect (#4126)** (b515454)
- **fix: default pane splits to the calling pane (#4123)** (03749ae)
- **fix: detect pi working border (#4113)** (7fe5a7c)
- **fix: detect codex activity with static titles and queued inputs (#4099)** (7e51b28)
- **fix: remove stale maintainer username** (970b926)
- **fix: preserve agent panel scroll when switching machines (#4101)** (be03b7a)
- **fix: clean up idle ssh bridges and back off flapping connections (#4083)** (c77af18)
- **fix: hide only kitty image placements overlapping overlays (#4081)** (21c1f8c)
- **fix(client): re-assert host mouse modes after a terminal reconnect (#4079)** (247f6d1)
- **fix(windows): restore mouse reporting when reattaching (#4080)** (aa961df)
- **fix: scope agent views to the selected machine (#3784)** (3b478e6)
- **fix: clarify agent integration settings description** (4e1096b)
- **fix: keep plugins working after client-only updates (#4077)** (6075d25)
- **fix(linux): bound the foreground process-tree scan (#3674)** (b847e6c)
- **fix: clean up failed terminal observer setup (#4071)** (8d213f8)
- **fix(input): accept parameterized CSI-tilde F1-F4 keys (#4067)** (a7a1410)
- **fix: recognize kitty CSI-u codepoints for F1 through F12 (#2378)** (0305fdb)
- **fix: auto-expire worktree action error banners (#4063)** (3834fd3)
- **fix: keep an agent name through a process-exit observation (#3574)** (f0cb0e0)
- **fix(windows): keep powershell cwd reporting in login mode (#4065)** (ff32bd4)
- **fix(windows): honor default_shell in login shell mode (#4060)** (38bc172)
- **fix(ui): keep muted sidebar and tab labels readable (#4062)** (5f26879)
- **fix: keep hermes enabled list valid yaml (#4056)** (981fe83)
- **fix(windows): disable host mouse reporting on terminal restore (#4055)** (cb06df6)
- **fix(remote): resolve ssh host aliases from git bash on windows (#4054)** (3be3523)
- **fix: detect kimi npm shim on windows (#4053)** (63ea231)
- **fix(server): transfer handoff descriptors in batches (#3411)** (d66c39d)
- **fix: retain validated split mouse reports across idle gaps (#4048)** (7505c08)
- **fix(input): preserve super-modified pane keys (#4044)** (858ad4e)
- **fix: restrict claude session hooks to native sources (#4046)** (a5e1c94)
- **fix: decouple pixel mouse from pane graphics (#4045)** (9631f8e)
- **fix: order ui accent before nested config tables (#2698)** (f48cd6a)
- **fix: disconnect stalled terminal observers (#4039)** (fc44f61)
- **Prevent WSL agent read blocking** — Fixed a performance issue on Linux/WSL where reading certain system processes could cause the agent to hang. The change optimizes how the agent reads process information to avoid blocking operations. (bafbc09)
- **Fix flaky Windows endpoint test** — Adjusted a test that was timing out under CI load by reducing the test frame size from 1 MiB to 256 KiB and increasing the flush deadline from 10 seconds to 30 seconds, accounting for Windows's 2ms read cadence. (3b9f58b)
- **fix: update grok session after new (#2683)** (aa6b531)
- **fix: restore alternate-screen pane width (#4016)** (98a8c6c)
- **fix: honor space row gaps across machines (#3740)** (5eafc61)
- **fix: recognize codex composer sparkles (#4015)** (e3a46f4)
- **fix: allow retrying partial worktree removal (#3315)** (96f2324)
- **fix: batch queued endpoint input frames (#4004)** (d184b41)
- **fix: keep windows endpoint writes progressing (#3721)** (c17dc3f)
- **fix: finish windows ssh setup after bridge exit (#3719)** (6cf4bbb)
- **fix: ignore nested OMP session reports (#3994)** (a5d5f6f)
- **fix: preserve complete alternate-screen history reads (#3979)** (cc36a29)
- **fix: suppress Windows dead-key fallback characters in remote panes (#3972)** (9ad65d9)
- **fix: opencode v2 lifecycle reporting (#3757)** (fb5525f)
- **fix: preserve whole-word selection while dragging (#3969)** (a0474ae)
- **fix(remote): show SSH authentication output (#3609)** (1a7c691)
- **fix(config): keep utf8 bom from breaking config reads and writes (#3962)** (eba7758)
- **fix: lint all targets on windows (#3963)** (c7a7cc4)
- **fix: flush Windows Codex paste burst before prompt submit (#3961)** (871ff8b)
- **fix: detect cline launchers and idle states (#3959)** (f3cbe03)
- **fix: preserve local direct kitty graphics transport (#3957)** (cd7edeb)
- **fix: recognize claude unicode spinner during active turns (#3953)** (a05c403)
- **fix: preserve plugin registry symlinks (#3927)** (560cb8c)
- **fix: explain zig version requirement on build failure (#3931)** (61ca85d)
- **fix: keep terminal snapshots consistent while scrolling (#3928)** (6e7d415)
- **fix: bound mouse selection repaint cadence (#3901)** (90e947a)
- **fix: accept machine add options before the SSH target (#3897)** (bf76cef)
- **fix(input): accept WezTerm control key reports (#3592)** (241a1e0)
- **fix: preserve focused viewer geometry during activation (#3746)** (406c9e4)
- **fix: use host background for pane selection highlights (#3894)** (3813af0)
- **fix(windows): preserve legacy mouse reports over ssh (#3742)** (7265a2b)
- **fix(linux): identify Herdr desktop notifications (#3639)** (a520603)
- **fix: accept session names after option terminator (#3222)** (6a93b75)
- **fix: keep spaces sidebar stable during resize (#3862)** (e1bb3df)
- **fix: stop token selection at CJK punctuation (#3708)** (0911056)
- **fix(pi): support Windows session paths (#3729)** (6fe8f81)
- **fix: restore connected session navigator tree glyphs (#3861)** (120c682)
- **fix: project public agent focus to attached clients (#3764)** (985d344)
- **fix: retain double-click selections and make tests root-safe (#3854)** (1f1b20c)
- **fix: restore plugin focus events for client navigation (#3850)** (1682cab)
- **fix: avoid full-screen copies for retained client updates (#3837)** (1f773dd)
- **fix: restore autofocus when creating worktrees (#3787)** (8be4cf7)
- **fix: support preinstalled windows remote hosts (#3661)** (8996fc5)
- **fix: collapse worktree groups with saved machines (#3781)** (68c7b78)
- **fix: show ssh errors during machine setup (#3733)** (9e01168)
- **fix: reduce idle ssh cpu without dropping final output (#3728)** (62431db)

### Backend
- **release: v0.9.1** (065ef9d)

### Tests
- **test: wait for app readiness before late session injection (#4224)** (0d14759)
- **Stabilize integration test timing** — Fixed flaky integration tests by waiting for shell readiness before sending commands and improving how the tests locate and interact with UI elements. The tests now properly wait for a shell marker to be written before starting agents, and use dynamic sidebar row detection instead of assuming fixed positions. (3570768)
- **test: deflake recent CI failures (#4139)** (e61206c)
- **test(windows): deflake media player invalid media assertion (#4082)** (add3dd2)
- **test: deflake federated local input race (#4066)** (1e3c625)
- **test: deflake windows metadata ttl expiry assertion (#4050)** (5c0ecc6)
- **test: relax windows docs snapshot timeout (#4049)** (540b20f)
- **test: make windows cross-check path assertions portable (#3954)** (02b1b49)

### Docs
- **docs: prepare 0.9.1 release documentation** (4905a97)
- **docs: enable nesting in throwaway repro setup** (38d002d)
- **docs: publish preview documentation** (792b2ba)
- **docs: publish release distribution for v0.9.0** (a9f3ad5)

### Chore
- **ci: promote stable releases from protected previews (#4241)** (36db8ff)
- **Added new approved contributor** — vinayshah1998 has been approved as a contributor to the project. (fc54876)
- **ci: restore zig local build cache reuse (#4118)** (0af53b7)
- **ci: migrate remaining pinned actions to node24 (#4023)** (2746ac7)
- **chore: add jjliebig as approved contributor and maintainer** (8be8bff)
- **ci: reuse compiler state across validation runs (#3956)** (b11ac85)
- **chore: add one-time windows cross-check setup** (2778411)
- **ci: trigger nix updates after stable releases** (0345791)
- **chore: upgrade libghostty and preserve terminal behavior (#3906)** (425c861)
- **chore: move marketplace worker to website repository** (ffa0892)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/herdrdev/herdr?utm_source=github-action)._