Added
- CLI help now points coding agents to Herdr's plain-text guide, documentation index, and built-in control skill.
- Added Qwen Code detection for idle, working, and user-confirmation states, plus optional native session restore. (#2730, #2743)
- Herdr now keeps the outer terminal window title in sync with the session through
ui.window_title, so window managers and terminal tab bars show the active workspace and the host the panes actually run on. (#2627, thanks @dhh) - The desktop tab bar now has configurable right-aligned status entries for zoom state, hostname, date/time, literal text, and asynchronously refreshed command output.
- Optional
keys.move_tab_previousandkeys.move_tab_nextbindings now reorder the active tab in place, wrapping at either end. (#2561, thanks @dhh) - Optional
keys.resize_pane_left,keys.resize_pane_down,keys.resize_pane_up, andkeys.resize_pane_rightbindings now resize the focused pane in one keystroke without entering resize mode. (#2558, thanks @dhh) - Windows clients can now use
herdr --remoteto attach to Herdr servers on Linux and macOS. (#2329) - Cursor Agent CLI, MastraCode, Hermes Agent, and Grok CLI integrations now install and run natively on Windows.
- Panes can now route normal right-click gestures to mouse-reporting applications through the pane menu,
herdr pane input,pane.input.set, or thepane split --right-click panelaunch option. ui.pane_outer_borderscan now keep or hide the outside edges of split-pane borders independently from internal dividers. (#2535, thanks @dhh)theme.custom.sidebar_bgcan now give the desktop sidebar its own background without changing built-in theme defaults.- Settings and
ui.status_indicators = "symbols"can now use distinct static shapes for blocked, working, done, idle, and unknown agent states. (#2260) - Navigate-mode selection rows now use a dedicated per-theme cursor color, customizable via
theme.custom.selection_bg, so the cursor stays distinguishable from the active Space and Agent highlight. - Copy mode now supports
B,E, andWmotions over whitespace-delimited big words. (#2270, thanks @jplew) - The plugin marketplace now discovers valid manifests at repository roots and subdirectories, groups multiple plugins under each repository, and publishes their versions and exact default-branch commits.
Changed
- Windows support is now generally available through stable releases and uses the stable update channel by default. Existing preview installs stay on preview until explicitly switched.
- Headless servers now use a configurable 120×40 virtual terminal instead of 80×24 when no client is attached, giving newly created panes a practical default size. (#2828)
- Desktop tab labels are now centered in their tabs, so the active-tab highlight has symmetric padding. (#2570, thanks @dhh)
- Experimental pane graphics now support bounded named layers, acknowledged full-RGBA primary-layer direct file frames on audited local terminals, owned BGRA fallback, exact pixel mouse input, and placement-only resize replay.
Fixed
- Unix CLI commands now exit quietly when a downstream pipe closes instead of panicking with exit 101. (#2994)
- The terminal theme now keeps the active Space row fill visible when the Navigate cursor lands on it, in both expanded and collapsed sidebars. (#2987)
- Busy multi-pane sessions now avoid redundant hidden-pane wakeups and full terminal-state formatting in pane-scaled paths, preventing CPU regressions from high-rate background output, scrollbars, and enhanced keyboard modes. (#2550, #2901, #2962)
- Chinese IME commits now reach panes on macOS when the focused application requests printable key-release events. (#2924)
- Windows now recognizes
Ctrl+1throughCtrl+9keybindings instead of decoding those key records as control characters. (#2910) - PowerShell panes now keep their process-reported working directory synchronized with the shell's logical location. (#2879, thanks @Pimpmuckl)
- Foreground typing no longer waits behind render cadence consumed by output from panes in hidden tabs. (#2890)
- The Windows ARM64 installer now waits for x64 emulation to release the verified executable before activating the downloaded release. (#2916)
- On Unix, Ctrl-click URL openers are now reaped after they exit, preventing defunct child processes from accumulating on long-running servers. (#2903)
- Windows updates now reuse only verified local packages, avoiding security-tool download blocks while preserving checksum validation. (#2751, #2816, thanks @Pimpmuckl)
- Herdr no longer sends the full OSC 4 palette query burst under WSL, preventing reply fragments from leaking into the shell through ConPTY. (#2440)
- Qwen Code panes now use locale-independent terminal-title states and localized confirmation fallbacks, preventing active or blocked turns from appearing idle. (#2756)
- Claude Code panes now recognize and strip every half-circle title spinner frame, preventing active turns from appearing idle and keeping titles clean. (#2707, #2709, #2760, #2762)
- Copilot prompts now focus the target pane before sending input, so background panes do not silently drop prompts. (#1698, #2734, thanks @xkrogen)
- Agent hooks now invoke the running Herdr binary instead of whichever binary appears first on
PATH. (#2722, thanks @Pimpmuckl) - Closing a terminal running
herdr --remoteno longer produces a local client core dump while the remote session stays alive. (#2424) - Active Space and Agent rows now use dedicated theme colors that remain visible when the host terminal background matches the selected Herdr theme. (#2792)
agent promptnow rejects agents already waiting at approval or question dialogs withagent_blocked, without sending text or Enter. (#2788)agent startnow waits for new pane shells and first-run agent prompts to become ready instead of racing them or reporting premature readiness. (#2410, #2537, #2773, #2774, thanks @Pimpmuckl)prefix+enow preserves logical lines when opening soft-wrapped scrollback in an editor. (#2733)- Alternate-screen pane reads avoid unnecessary ANSI formatting work, reducing read latency for TUI agents. (#2387, #2426)
- Tab bar clicks are now properly registered when using Ghostty in native fullscreen. (#796, #2736, thanks @HackAttack)
- Prefix keybindings now disambiguate layout-aware shifted punctuation, so a shifted
\no longer triggersprefix+|on keyboard layouts where the same key produces both characters. (#2674) - Remote clients now continue redrawing at very large terminal sizes instead of freezing when a full ANSI frame exceeds the transport limit. (#2670)
- Windows Git status refreshes now reuse repository configuration instead of repeatedly triggering security scans for WSL repositories. (#2643, #2688, thanks @Pimpmuckl)
- Windows idle agent detection now shares process snapshots across panes, reducing CPU use in sessions with many Git Bash panes. (#2459, #2494, #2642, #2651, thanks @Pimpmuckl)
- Embedded bare repositories now derive the correct repository name and worktree location. (#2657, #2660)
- Root-repository workspaces now retain their saved labels across update restarts. (#2594, #2727)
- Elevated Windows panes no longer expose PowerShell's administrator decoration as the terminal title. (#2632, thanks @Pimpmuckl)
- Modal name inputs now anchor the host IME cursor to the text field instead of the pane behind the dialog. (#1755, #2569, thanks @kataokatsuki)
- Session Navigator movement ignores modified
j,k, and arrow keys instead of consuming unrelated pane input. (#1981, #2377, thanks @atomsbaza) - OpenCode panes now track the root conversation selected in their own TUI for native restore without adopting activity from attached clients. (#2450)
- Server stop requests now bypass pane and API traffic, preventing busy sessions from blocking shutdown or admitting a client while shutdown is pending. (#2612)
- Fish
Ctrl+Altkeybindings now work in panes after legacy Alt-prefixed control bytes are decoded with both modifiers. (#2514) - Windows recent-history reads no longer perform redundant snapshots, restoring
recentoutput while reducing read cost. (#962, #2474, thanks @Pimpmuckl) - The Windows installer now activates releases with an atomic directory swap, preventing interrupted updates from leaving an empty release directory. (#2356, #2530, thanks @Pimpmuckl)
herdr config checknow reports unknown built-in theme names instead of silently accepting them. (#2452)- macOS
herdr --remoteclients now keep the accepted bridge socket blocking, preventing an immediate disconnect after the protocol handshake. (#2478, thanks @mathijshenquet) - Prefix keybindings now preserve Shift in WezTerm Kitty keyboard mode, so commands such as config reload no longer trigger their unshifted action. (#2435)
- Pane applications now receive modifyOtherKeys releases and shifted alternate reports without dropped releases or leaked Ctrl+Tab sequences. (#2296, #2302, #2303)
- Detaching now restores host keyboard reporting, preventing enhanced keyboard sequences from leaking into the shell after Herdr exits. (#2393, #2395)
- Default mouse reports are decoded instead of leaking escape bytes into the focused pane. (#2309, #2312)
- BEL characters emitted by pane programs now reach the outer terminal so its audible and visual bell settings can react. (#2453)
- Stable direct installs, self-updates, and remote helper downloads now require and verify the SHA-256 digest published for each GitHub release asset.
pane readandpane wait-outputnow accept--flag=valueand options before or after the pane ID. (#2183, thanks @KyleCo76)pane current,pane get, andpane layout --currentnow resolve the calling pane instead of another client's focused pane. (#2297, #2298)- Configs containing the retired Herdr-written
ui.agent_panel_scopesetting no longer report it as an unknown key after upgrades. (#2292) - Claude Code confirmation prompts using
Enter to confirm · Esc to cancelnow reportblockedinstead ofidle. (#2268) - Kiro CLI prompts now have positive idle detection instead of remaining in an unknown state. (#2301, thanks @smileynet)
- Cursor's Run Everything footer no longer produces a false blocked state. (#1763, #2220, thanks @Nagi-ovo)
- Versioned Python agent wrappers such as
python3.13are now detected. (#2188, thanks @plarson) - Pi state reporting now ignores RPC, JSON, and print-mode helper processes that are not interactive TUI sessions. (#2159, thanks @rhjoh)
- Collapsed workspace and Agent rows keep their status and active indicators visible, including with ten or more workspaces. (#2216, #2239, #2382, thanks @ianks)
- Sidebar agent lists keep scrolling when differently sized clients are attached to the same session. (#2255, thanks @aiworkflowpro)
- The Session Navigator now searches renamed single-tab labels. (#2320)
- New splits return focus to the pane they were opened from. (#2266, thanks @jondkinney)
- Halfwidth Katakana voiced and semi-voiced marks now render in the correct cell. (#2257, thanks @kazunari-kamata)
- Ctrl-clicking a URL no longer forwards its release after the browser takes host focus, preventing duplicate tabs. (#2290, #2291, thanks @kataokatsuki)
- OSC 4 palette overrides now render with the requested color instead of forwarding the palette index. (#2162, thanks @hamidi-dev)
- Host terminal appearance is re-queried when focus returns, keeping automatic light and dark themes current. (#2416, #2417)
- The bundled and installable Herdr agent skill now matches this stable release's CLI and lifecycle behavior. (#2847)
pane send-keysandagent send-keysnow preserve Shift when sendingshift+tab, allowing agent permission modes to be cycled programmatically. (#1561, thanks @keinstn and @tomohisa)