← All posts

Herdr · Multiplexers

Troubleshooting: Herdr not working after an upgrade

Two things break Herdr after a version upgrade: two binaries at different versions, and sessions still running the old one. How to check and fix both.

Herdr · MultiplexersSSH

If Herdr misbehaves in TermRover, especially after a version upgrade, there are two common causes.

1. Two binaries at different versions

One from a package manager, one from Herdr’s own update. Your login shell picks the newer one, so the machine looks fine. A non-interactive SSH command, which is what TermRover makes, can pick the older one.

Find them all:

for d in ~/.local/bin ~/.cargo/bin /opt/homebrew/bin /usr/local/bin /usr/bin /bin; do
  [ -x "$d/herdr" ] && printf '%s\t%s\n' "$d/herdr" "$("$d/herdr" --version)"
done
/home/you/.local/bin/herdr	herdr 0.9.0
/usr/bin/herdr	herdr 0.8.2

See which one TermRover gets:

$ ssh myhost 'command -v herdr'
/usr/bin/herdr

Remove the one you are not updating. Keep one per machine.

2. Sessions still running the old version

Upgrading the binary does not restart running sessions. They keep serving the old version until you stop them.

Stop every session, restart your shell, then start them again:

herdr session stop work      # repeat for each session
exec $SHELL -l               # pick up the new binary
herdr session attach work

Stopping a session exits the pane processes inside it.

To see which sessions are affected, ask each one for a snapshot. herdr session list reports running even for servers that refuse every call:

for s in $(herdr session list | awk 'NR>1 && $2=="running" {print $1}'); do
  herdr --session "$s" api snapshot >/dev/null 2>&1 && echo "ok    $s" || echo "STALE $s"
done

Run without the redirect, herdr --session work api snapshot prints the real reason, including whether the client or the server is the older side. One stale session takes the whole host offline in the Fleet.

Herdr not found? Tell TermRover where it is

Edit the host → AdvancedHerdr overridesExecutable path:

/home/you/.local/bin/herdr

On automatic, TermRover tries command -v herdr, then ~/.local/bin, ~/.cargo/bin, /opt/homebrew/bin, /usr/local/bin, /home/linuxbrew/.linuxbrew/bin, /opt/local/bin, /usr/bin, /bin. Anywhere else, set it yourself. Same field on iPhone, iPad, and Android.