aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-09-29fix: summarize old servers and saved machines after herdr update (#4722)Can Celik
* fix: summarize old servers and saved machines after herdr update * fix: include reconnect and per-session restart commands in update summary
2026-09-28fix: capture Windows host default colors at startup (#4710)JJ Liebig
refs #1530 refs #4369
2026-09-28docs: publish preview documentationkangal-bot
2026-09-28perf: send scrolling pane output as row shifts and skip blank cells (#4711)Can Celik
* perf: send scrolling pane output as row shifts and skip blank cells * fix: keep expanded scroll patches disjoint for the fast presentation path
2026-09-28fix(windows): read agent command lines without PROCESS_VM_READ (#4708)JJ Liebig
* fix(windows): read agent command lines without PROCESS_VM_READ Windows process command lines were read by opening each process with PROCESS_VM_READ and walking its PEB. Hardened runtimes (Electron/Node) and security products deny that access, so those processes resolved to a bare `node.exe`/`bun.exe` name with no argv, argv0, or cmdline. A runtime-wrapped agent launched from such a process was then indistinguishable from an unrelated runtime process, and the pane stayed on the shell with `agent_status: unknown`. Prefer `NtQueryInformationProcess` with `ProcessCommandLineInformation` (Windows 8.1+), which needs only `PROCESS_QUERY_LIMITED_INFORMATION`, and keep the existing PEB read as a fallback for processes that do not expose a stored command line. The fallback still requires `PROCESS_VM_READ`, so this only widens coverage. refs #4579 * fix(windows): handle growing command lines before failure test The retry added for a command line that grows between the size probe and the read was unreachable. NTSTATUS is signed, so STATUS_BUFFER_OVERFLOW, STATUS_BUFFER_TOO_SMALL, and STATUS_INFO_LENGTH_MISMATCH are all negative and were treated as failures by the earlier `status < 0` check. Check the growth statuses first and retry once with the reported size. Also read the returned UNICODE_STRING header unaligned, since a Vec<u8> buffer only guarantees byte alignment. * test(windows): keep command-line marker test process alive Passing the marker as a second argument to `ping` let `ping` exit as soon as it saw one target, so the command-line query could race the process exit. Move the marker into a `rem` after `&` so it stays in cmd.exe's own command line and `ping -n 11` keeps the process alive for the read.
2026-09-28feat: support multiple prefix keys (#4653)JJ Liebig
* feat: support multiple prefix keys keys.prefix accepts an array in addition to a single string so one config can define several prefix keys. Every configured prefix enters the same prefix mode, and the help panel lists them all. Published keybinding profiles keep the primary prefix as a scalar and carry the rest in an optional extra_prefixes field so older clients keep working with the primary prefix. * fix: reject an empty prefix list on reload An explicitly empty keys.prefix array now stays empty through config parsing so validation rejects it and a reload keeps the current keybindings instead of silently falling back to ctrl+b.
2026-09-27test: fix pane shell idle foreground-command race (#4691)JJ Liebig
The interactive-shell idle test sent SIGINT as soon as it observed the shell was busy. That condition can be true before the shell finishes moving the command into its own foreground process group, so the interrupt could arrive before the command reset its signal dispositions. The command then survived in a stale foreground group while the shell showed a prompt, and the pane was never observed idle again. Run cat and end it with EOF instead. cat blocks on stdin, so the busy state is stable, and EOF avoids the interrupt/job-control race.
2026-09-27fix: make release test robust to diff.noPrefix git config (#4663)Michael Hackner
`git apply` by default expects `-p1`, which is the default behavior of `git diff`, but this can be overridden by config. Specify it explicitly so it works regardless.
2026-09-27fix: bound external event batches in the server loop (#4671)Eric Yue
2026-09-27perf: skip frame clones for unchanged retained graphics (#4672)Eric Yue
2026-09-27perf: avoid rebuilding bsp subtrees when splitting panes (#4670)Eric Yue
2026-09-27perf: use keyed terminal lookup for named targets (#4669)Eric Yue
2026-09-27feat: simplify ssh machine setup discovery (#4204)JJ Liebig
2026-09-27docs: add a guide for adding herdr support to your agentOgulcan Celik
2026-09-27fix: keep offscreen kitty images loaded instead of resending them on scroll ↵Can Celik
(#4686)
2026-09-27feat: let agents report their own resume command (#4687)Can Celik
* feat: let agents report their own resume command * fix: keep reported resume commands tied to accepted sessions and current owners
2026-09-27feat: accept mouse events on terminal session control (#4685)Can Celik
2026-09-27feat: default machine add label to the ssh host (#4678)David Heinemeier Hansson
* feat: default machine add label to the ssh host `herdr machine add <ssh-target>` no longer requires `--label`. Without one, the machine is named after the SSH host with any `user@` prefix removed, so `herdr machine add dev@workbox` shows up as `workbox`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix: make default machine labels unique per session and handle ssh urls --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-27refactor: extract libghostty-vt binding into ghostty-vt workspace crate (#4661)Can Celik
* refactor: extract libghostty-vt binding into ghostty-vt workspace crate * fix: build libghostty-vt into each build's out dir
2026-09-26ci: reuse compiler state on every os and save caches only from masterOgulcan Celik
2026-09-26fix: keep api listener alive after transient accept errors (#4659)Can Celik
* fix: keep api listener alive after transient accept errors refs #4601 * fix: drop repeated api accept failure logs refs #4601
2026-09-26refactor: encode kitty placements in a single pass (#4657)Can Celik
2026-09-26fix: refresh host palette on terminal redraw (#4349)David Heinemeier Hansson
* fix: refresh host palette on terminal redraw * fix: count overlapping host palette queries --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-26fix: create a symlink on non-elevated windows in docs test (#4654)JJ Liebig
* fix: create a symlink on non-elevated windows in docs test Windows terminals without Developer Mode or elevation cannot create file symlinks, so the versions publishing integration test failed with EPERM before it could reach the non-ordinary-file rejection. Fall back to a directory junction, which is creatable without elevation and hits the same rejection path. * fix: detect docs snapshot reparse points with lstat Classify entries with lstat instead of the readdir dirent so symlinks and Windows junctions are rejected regardless of how a runtime classifies them. This keeps the versions integration test's non-ordinary-file assertion meaningful on non-elevated Windows, where the fixture can only create a directory junction.
2026-09-26fix: crop kitty images around overlays instead of hiding them (#4652)Can Celik
2026-09-26fix: accept plugin install options before the repository (#4453)akbash
refs #4446 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-26fix: retain mouse input grace for split csi prefixes (#4636)akbash
refs #4630 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-25fix: preserve shift on ctrl+shift+letter for legacy panes (#4597)Ainesh Chatterjee
Panes whose app has not enabled the kitty keyboard protocol received ctrl+shift+letter as the same C0 byte as ctrl+letter. Encode the chord as CSI-u instead, matching Ghostty's legacy encoder. refs #4581 Co-authored-by: ain3sh <ainesh.chatterjee@gmail.com>
2026-09-24fix: keep copy mode active during projection updates (#4281)Marco Mayer
* fix: keep copy mode active during projection updates refs #3812 * fix: preserve linewise selections during projection gaps refs #3812 --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-24docs: explain tmux auto-attach guard in herdr panes (#4592)JJ Liebig
2026-09-24perf: avoid repeated scrollback page lookups (#4553)JJ Liebig
refs #4506
2026-09-24perf: avoid redundant client ANSI encoding work (#4552)JJ Liebig
refs #4546
2026-09-24feat!: replace the custom graphics api with optimized native kitty rendering ↵Can Celik
(#4561) * feat!: replace the custom graphics api with optimized native kitty rendering * fix: enable safe kitty optimizations automatically --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-24test: qualify Win32 and Kitty input paths by default (#4587)JJ Liebig
2026-09-24fix: report partial Windows input coverage and clear clipboard for tests (#4566)JJ Liebig
* fix: report partial Windows input coverage and clear clipboard for tests * fix: require evidence from each Windows input channel * fix: reject clipboard format count errors
2026-09-24fix: match navigator search terms independently (#4535)Eric Yue
* fix: match navigator search terms independently refs #4273 * docs: remove redundant navigator search note refs #4273
2026-09-24fix: avoid inferring codex idle from terminal output (#4563)JJ Liebig
refs #4507
2026-09-23fix: prevent cursor flicker on status redraw (#4554)JJ Liebig
* fix: prevent cursor flicker on status redraw * fix: avoid stale cursor during resize
2026-09-23test: wait for complete handoff pid markers (#4538)Eric Yue
* test: wait for complete handoff pid markers * test: wait for complete handoff pid markers
2026-09-23test(windows): capture native console input records (#4520)JJ Liebig
refs #4470
2026-09-23fix: prevent Windows non-text keys from triggering the space prefix (#4510)akbash
refs #4470 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-23fix: keep synchronized pane frames atomic (#4508)JJ Liebig
refs #2968
2026-09-22fix: detect npm-installed omp on windows (#4502)JJ Liebig
refs #4313
2026-09-22fix: recognize Windows daemons in non-killing jobs (#4489)JJ Liebig
refs #4309
2026-09-22fix: move worktree lookups async (#4492)JJ Liebig
2026-09-22fix: reuse ssh authentication and add machine recovery commands (#4490)Can Celik
* fix: reuse ssh authentication and add in-app mfa recovery refs #3763 * refactor: move ssh recovery to machine cli refs #3763
2026-09-22fix: recognize codex mention completion popups (#4495)JJ Liebig
refs #4220
2026-09-22fix: preserve hook agent status across live handoff (#4493)Can Celik
2026-09-22fix: track opencode subagent status per pane (#4357)Can Celik
refs #1362
2026-09-22fix: stagger restored agent startups (#4487)JJ Liebig
* fix: stagger restored agent startups refs #4102 * fix: report startup delay changes requiring restart refs #4102