Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
herdr: prompt drawn at row 1 with the previous screen left below it after an SSH session exits
Reported by rubberneck · filed Aug 15, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
Omarchy: 4.0.0-1 (stable) Kernel: 7.1.8-arch1-3 CPU: Intel Core i7-10700K GPU: AMD Navi 10 [Radeon RX 5700 XT] herdr: 0.8.0.r13-1 (upstream 0.8.0, stable channel) foot: 1.27.0-2 Hyprland: 0.56.2 TERM: xterm-256color Pane: 322x88 (dual 2560x1600)
herdr: prompt drawn at row 1 with the previous screen left below it after an SSH session exits
What happens
Inside a herdr pane, SSH to any host and log out. The next shell prompt is drawn
at the top of the pane, while the entire pre-logout screen (the SSH session's
output) remains on screen below it. The pane stays in this state until clear.
Expected: the prompt is drawn on the line after Connection to <host> closed.,
as it is in a plain terminal.
Steps to reproduce
- Open a herdr pane
ssh <any-host>exit- The new prompt appears at row 1; the old screen is still below it
Reproduced against an Ubuntu 24.04 host over a LAN connection; nothing unusual on
the remote side (default bash, standard MOTD).
The corruption is in herdr's screen model, not the rendering
This is the part I think matters most, because it rules out a repaint fix.
herdr's own API returns the same broken layout that is on screen:
herdr pane read <pane-id> --source visible --format textreturns, top to bottom:
Projects/lamebox/omarchy
❯ <- post-logout prompt, at row 1
Projects/lamebox/omarchy
❯ ls
<ls output>
Projects/lamebox/omarchy
❯ ssh m90q-01
<ssh session output>
$ exit
logout
Connection to m90q-01 closed. <- model ends here, no trailing promptSo the pane's model genuinely holds the prompt at row 1 with the old content
beneath it. Consequently no repaint (zoom toggle, focus change, resize) corrects
it — they faithfully redraw the bad model. Only clear helps, because it erases.
What was ruled out
| Test | Result |
|---|---|
Same steps in plain foot (no herdr) | correct — not a terminal bug |
atuin pty-proxy disabled (a third PTY layer) | still broken — not atuin |
seq 200; clear in herdr, no SSH | clears correctly — erase-display is fine generally |
clear after the breakage | fixes it |
ctrl+space z zoom toggle / focus change / resize | no effect |
Likely cause
Cursor tracking drifts across the SSH session. SSH sessions set scroll regions
(remote prompt, pager, MOTD), and by logout herdr's cursor model reports row 1,
so the local shell's prompt is written there without the intervening content
being erased.
This matches a root cause already diagnosed upstream in herdrdev/herdr:src/protocol/render_ansi.rs::write_changed_cells() performs coordinate-based
cell diffing with no scroll-region or insert-line awareness.
- https://github.com/herdrdev/herdr/issues/2793 — "Client re-presents stale pane
frames: every visible pane jumps to an older viewport position and snaps back"
(closed, not planned) — names the function above
- https://github.com/herdrdev/herdr/issues/2521 — "Interactive agent output
(menu/prompt) causes viewport to scroll up then snap back — coordinate-based
diff, not scroll-region aware" (closed, not planned)
- https://github.com/herdrdev/herdr/issues/283 — "Reduce visible wave effect when
scrolling pane scrollback" (closed, completed) — the earlier repaint issue the
other two are follow-ups to
Those two follow-ups describe idle/agent-output symptoms rather than this SSH
one, but the diagnosed mechanism is the same, and both were declined upstream.
Filing here because Omarchy ships omacom-io/herdr as the default terminal
workspace and that fork has issue creation disabled, so there is no other route
to report it against the version users actually run. Every Omarchy user who uses
SSH from a herdr pane will hit this.
Workaround (for anyone finding this issue)
The wrapper below runs after ssh exits but before bash draws its prompt — at
that moment the screen contents are still correct and only the cursor row is
wrong. It asks herdr where its content ends and parks the cursor one row below,
so nothing is scrolled or erased and the SSH output stays on screen:
ssh() {
command ssh "$@"
local rc=$? pane row lines
if [[ -n ${HERDR_SOCKET_PATH:-} ]]; then
pane=$(herdr pane current 2>/dev/null | sed -n 's/.*"pane_id":"\([^"]*\)".*/\1/p')
if [[ -n $pane ]]; then
row=$(herdr pane read "$pane" --source visible --format text 2>/dev/null \
| awk 'NF{n=NR} END{print n+0}')
lines=${LINES:-$(tput lines)}
if (( row > 0 )); then
if (( row >= lines )); then
printf '\033[%d;1H\n' "$lines"
else
printf '\033[%d;1H' $(( row + 1 ))
fi
fi
fi
fi
return $rc
}System
Omarchy: 4.0.0-1 (stable)
Kernel: 7.1.8-arch1-3
CPU: Intel Core i7-10700K
GPU: AMD Navi 10 [Radeon RX 5700 XT]
herdr: 0.8.0.r13-1 (upstream 0.8.0, stable channel)
foot: 1.27.0-2
Hyprland: 0.56.2
TERM: xterm-256color
Pane: 322x88 (dual 2560x1600)Note: contributing.md in the shipped omarchy agent skill still tells you to
run omarchy debug --no-sudo --print for diagnostics, but that command no longer
exists in 4.0.0 (Unknown Omarchy command: omarchy debug). Details above were
collected by hand.
View raw text
### System details
Omarchy: 4.0.0-1 (stable) Kernel: 7.1.8-arch1-3 CPU: Intel Core i7-10700K GPU: AMD Navi 10 [Radeon RX 5700 XT] herdr: 0.8.0.r13-1 (upstream 0.8.0, stable channel) foot: 1.27.0-2 Hyprland: 0.56.2 TERM: xterm-256color Pane: 322x88 (dual 2560x1600)
herdr: prompt drawn at row 1 with the previous screen left below it after an SSH session exits
## What happens
Inside a herdr pane, SSH to any host and log out. The next shell prompt is drawn
at the **top** of the pane, while the entire pre-logout screen (the SSH session's
output) remains on screen below it. The pane stays in this state until `clear`.
Expected: the prompt is drawn on the line after `Connection to <host> closed.`,
as it is in a plain terminal.
## Steps to reproduce
1. Open a herdr pane
2. `ssh <any-host>`
3. `exit`
4. The new prompt appears at row 1; the old screen is still below it
Reproduced against an Ubuntu 24.04 host over a LAN connection; nothing unusual on
the remote side (default bash, standard MOTD).
## The corruption is in herdr's screen model, not the rendering
This is the part I think matters most, because it rules out a repaint fix.
herdr's own API returns the same broken layout that is on screen:
```
herdr pane read <pane-id> --source visible --format text
```
returns, top to bottom:
```
Projects/lamebox/omarchy
❯ <- post-logout prompt, at row 1
Projects/lamebox/omarchy
❯ ls
<ls output>
Projects/lamebox/omarchy
❯ ssh m90q-01
<ssh session output>
$ exit
logout
Connection to m90q-01 closed. <- model ends here, no trailing prompt
```
So the pane's model genuinely holds the prompt at row 1 with the old content
beneath it. Consequently no repaint (zoom toggle, focus change, resize) corrects
it — they faithfully redraw the bad model. Only `clear` helps, because it erases.
## What was ruled out
| Test | Result |
|---|---|
| Same steps in plain `foot` (no herdr) | correct — not a terminal bug |
| `atuin pty-proxy` disabled (a third PTY layer) | still broken — not atuin |
| `seq 200; clear` in herdr, no SSH | clears correctly — erase-display is fine generally |
| `clear` after the breakage | fixes it |
| `ctrl+space z` zoom toggle / focus change / resize | no effect |
## Likely cause
Cursor tracking drifts across the SSH session. SSH sessions set scroll regions
(remote prompt, pager, MOTD), and by logout herdr's cursor model reports row 1,
so the local shell's prompt is written there without the intervening content
being erased.
This matches a root cause already diagnosed upstream in `herdrdev/herdr`:
`src/protocol/render_ansi.rs::write_changed_cells()` performs coordinate-based
cell diffing with no scroll-region or insert-line awareness.
- https://github.com/herdrdev/herdr/issues/2793 — "Client re-presents stale pane
frames: every visible pane jumps to an older viewport position and snaps back"
(closed, **not planned**) — names the function above
- https://github.com/herdrdev/herdr/issues/2521 — "Interactive agent output
(menu/prompt) causes viewport to scroll up then snap back — coordinate-based
diff, not scroll-region aware" (closed, **not planned**)
- https://github.com/herdrdev/herdr/issues/283 — "Reduce visible wave effect when
scrolling pane scrollback" (closed, completed) — the earlier repaint issue the
other two are follow-ups to
Those two follow-ups describe idle/agent-output symptoms rather than this SSH
one, but the diagnosed mechanism is the same, and both were declined upstream.
Filing here because Omarchy ships `omacom-io/herdr` as the default terminal
workspace and that fork has issue creation disabled, so there is no other route
to report it against the version users actually run. Every Omarchy user who uses
SSH from a herdr pane will hit this.
## Workaround (for anyone finding this issue)
The wrapper below runs after `ssh` exits but *before* bash draws its prompt — at
that moment the screen contents are still correct and only the cursor row is
wrong. It asks herdr where its content ends and parks the cursor one row below,
so nothing is scrolled or erased and the SSH output stays on screen:
```bash
ssh() {
command ssh "$@"
local rc=$? pane row lines
if [[ -n ${HERDR_SOCKET_PATH:-} ]]; then
pane=$(herdr pane current 2>/dev/null | sed -n 's/.*"pane_id":"\([^"]*\)".*/\1/p')
if [[ -n $pane ]]; then
row=$(herdr pane read "$pane" --source visible --format text 2>/dev/null \
| awk 'NF{n=NR} END{print n+0}')
lines=${LINES:-$(tput lines)}
if (( row > 0 )); then
if (( row >= lines )); then
printf '\033[%d;1H\n' "$lines"
else
printf '\033[%d;1H' $(( row + 1 ))
fi
fi
fi
fi
return $rc
}
```
## System
```
Omarchy: 4.0.0-1 (stable)
Kernel: 7.1.8-arch1-3
CPU: Intel Core i7-10700K
GPU: AMD Navi 10 [Radeon RX 5700 XT]
herdr: 0.8.0.r13-1 (upstream 0.8.0, stable channel)
foot: 1.27.0-2
Hyprland: 0.56.2
TERM: xterm-256color
Pane: 322x88 (dual 2560x1600)
```
Note: `contributing.md` in the shipped `omarchy` agent skill still tells you to
run `omarchy debug --no-sudo --print` for diagnostics, but that command no longer
exists in 4.0.0 (`Unknown Omarchy command: omarchy debug`). Details above were
collected by hand.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 04:14 UTC