JJ Liebig 8c8cb49c23 fix(windows): read agent command lines without PROCESS_VM_READ (#4708)
* 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-28 13:16:10 +02:00
2026-05-09 23:16:24 +03:00

herdr

herdr

herdr.dev · install · quick start · docs

English · 简体中文

Apache 2.0 license total GitHub release downloads GitHub stars latest stable release Homebrew version follow @herdrdev on X


https://github.com/user-attachments/assets/043ec09f-4bdd-41d5-aee0-8fda6b83e267

the runtime your coding agents live on.

  • detach without stopping work — herdr keeps terminals running in a background server when you close the client or lose your SSH connection. after a server or machine restart, herdr restores the saved layout and can resume supported agent sessions; the original processes do not survive. session state →
  • several machines, one window — keep local work and saved ssh machines together, with a combined agent list and independent reconnects. remote machines →
  • never hunt for the stuck one — every pane is marked working, blocked, or idle. when an agent stops and needs an answer, herdr says so.
  • agent-native — agents drive herdr through the cli and socket api: they can spawn panes, prompt each other, and wait until another agent is genuinely blocked. agent skill →
  • runs what you already run — claude code, codex, cursor, opencode, grok and the rest. herdr doesn't wrap or replace them; it owns their terminals.
  • keyboard and mouse, both first-class — tmux-style prefix keys and click, drag, split. pick per moment, not per tool.
  • plugins — extend panes and workflows. browse the marketplace →
  • one rust binary, no electron — runs in whatever terminal you already use.

install

curl -fsSL https://herdr.dev/install.sh | sh

or brew install herdr · mise use -g herdr · windows: powershell -ExecutionPolicy Bypass -c "irm https://herdr.dev/install.ps1 | iex" · endpoint-protected Windows · binaries

then start it where the work lives:

herdr

run your agents, split panes, walk away. ctrl+b q detaches, herdr reattaches. quick start →

docs

everything lives at herdr.dev/docs: quick start · concepts · supported agents · keyboard · configuration · session state · connecting machines · remote · integrations · plugins · socket api

thanks

every past sponsor and backer is listed in SPONSORS.md — thank you 🐑

enterprise / partnership: hey@herdr.dev

agent instructions

if you are an ai agent helping with this repository, read AGENTS.md before making changes and read CONTRIBUTING.md before opening issues or PRs.

development

git clone https://github.com/herdrdev/herdr
cd herdr
cargo build --release

just test        # unit tests
just check       # formatting, tests, and maintenance checks

license

Herdr is licensed under the Apache License 2.0.

Languages
Rust 93.8%
Python 2.7%
PowerShell 1.3%
TypeScript 0.9%
Shell 0.5%
Other 0.7%