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.
Shipped herdr config binds prefix+shift+k to close_workspace, silently shadowing herdr's default swap_pane_up
Reported by t1nk333r · filed Sep 3, 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
Summary
omarchy-settings ships /usr/share/omarchy/config/herdr/config.toml as the user's herdr config. It binds close_workspace = "prefix+shift+k", which is also herdr's own default for swap_pane_up. herdr resolves the chord to the config's action and never warns, so swap_pane_up is unreachable on a stock Omarchy install — no other chord is bound to it anywhere in the shipped file.
Because the same file sets confirm_close = false ("kill-window and kill-session never asked"), the chord that wins is an immediate, unconfirmed workspace kill.
Environment
- Omarchy
4.0.2-1,omarchy-settings 4.0.2-1,herdr 0.8.2-1 - Reproduced on a clean 4.0.2 VM install from the official ISO (unattended
cidatainstall), with no user customization at all — not specific to my machine. md5sum /usr/share/omarchy/config/herdr/config.toml→ea3c7a4726c27ed8ef93e8e527662d07, identical to the~/.config/herdr/config.tomla fresh install lands with.
The collision
Shipped config:
# line 18
prefix = "ctrl+space"
# line 66
close_workspace = "prefix+shift+k"
# line 81
confirm_close = falseherdr 0.8.2's canonical key reference (docs/next/website/src/data/config-reference.json) gives:
{ "key": "keys.swap_pane_up", "type": "keybinding", "default": "\"prefix+shift+k\"" }swap_pane_up is not overridden in the shipped config — the file sets no swap_pane_* key at all — so the default stays live and collides with close_workspace.
Note that herdr config check does not catch this. It reports config: ok for the shipped file, and in fact accepts a nonexistent key (bogus_key_xyz) and an invalid chord (prefix+totally_not_a_key) with the same output, so it cannot be relied on to detect the conflict.
Steps to reproduce
- Install Omarchy 4.0.2 (or
omarchy refresh config herdr/config.tomlto restore the shipped file). - Launch
herdr, create a workspace with two stacked panes, and create a second workspace so the effect is visible. - Focus the top pane and press
Ctrl+SpacethenShift+K.
Expected
Either swap_pane_up swaps the two panes, or — if close_workspace is intended to own that chord, mirroring tmux's bind K kill-session — swap_pane_up is explicitly rebound so it remains reachable.
Actual
The focused workspace and every pane in it are destroyed immediately, with no confirmation. The panes never swap. swap_pane_up cannot be triggered by any key in the shipped configuration.
Verified twice in the VM, deterministically. Before: workspace ~ with panes PANE-ONE-TOP / PANE-TWO-BOTTOM, plus workspace SECOND in the sidebar. After the chord: ~ is gone from the sidebar entirely, only SECOND remains with its single pane. Server log for the same instant:
INFO herdr::logging: workspace closed event="workspace.close" subsystem="workspace" outcome="ok" workspace_id="w1"
INFO herdr::logging: pane child exited event="pane.exit" ... signal: Some("Hangup")
INFO herdr::logging: pane child exited event="pane.exit" ... signal: Some("Hangup")
WARN herdr::app::actions: PaneDied for unknown pane pane=3
WARN herdr::app::actions: PaneDied for unknown pane pane=1No conflict, duplicate-binding or shadowing warning is logged by herdr at any point (grep -niE 'conflict|duplicat|unknown key|shadow' on both herdr-client.log and herdr-server.log returns nothing), which is why this is easy to miss.
Suggested fix
Keep close_workspace where it is — it mirrors tmux's bind K and matches the rest of the file's tmux-derived mapping — and give the swap_pane_* family explicit bindings off the prefix+shift+h/j/k/l defaults. prefix+shift+{left,down,up,right} is free in the shipped config and keeps the directional grouping:
swap_pane_left = "prefix+shift+left"
swap_pane_down = "prefix+shift+down"
swap_pane_up = "prefix+shift+up"
swap_pane_right = "prefix+shift+right"Only swap_pane_up strictly collides; moving all four keeps them consistent rather than splitting the family across two chord styles.
Worth noting separately: prefix+shift+k destroying a multi-pane workspace with confirm_close = false is a harsh default for a chord one key away from close_tab (prefix+k). That may be deliberate tmux parity, but it is a second reason not to leave a second action fighting for the same chord.
View raw text
## Summary
`omarchy-settings` ships `/usr/share/omarchy/config/herdr/config.toml` as the user's herdr config. It binds `close_workspace = "prefix+shift+k"`, which is also herdr's own default for `swap_pane_up`. herdr resolves the chord to the config's action and never warns, so `swap_pane_up` is unreachable on a stock Omarchy install — no other chord is bound to it anywhere in the shipped file.
Because the same file sets `confirm_close = false` ("kill-window and kill-session never asked"), the chord that wins is an immediate, unconfirmed workspace kill.
## Environment
- Omarchy `4.0.2-1`, `omarchy-settings 4.0.2-1`, `herdr 0.8.2-1`
- Reproduced on a **clean 4.0.2 VM install** from the official ISO (unattended `cidata` install), with no user customization at all — not specific to my machine.
- `md5sum /usr/share/omarchy/config/herdr/config.toml` → `ea3c7a4726c27ed8ef93e8e527662d07`, identical to the `~/.config/herdr/config.toml` a fresh install lands with.
## The collision
Shipped config:
```toml
# line 18
prefix = "ctrl+space"
# line 66
close_workspace = "prefix+shift+k"
# line 81
confirm_close = false
```
herdr 0.8.2's canonical key reference (`docs/next/website/src/data/config-reference.json`) gives:
```json
{ "key": "keys.swap_pane_up", "type": "keybinding", "default": "\"prefix+shift+k\"" }
```
`swap_pane_up` is not overridden in the shipped config — the file sets no `swap_pane_*` key at all — so the default stays live and collides with `close_workspace`.
Note that `herdr config check` does not catch this. It reports `config: ok` for the shipped file, and in fact accepts a nonexistent key (`bogus_key_xyz`) and an invalid chord (`prefix+totally_not_a_key`) with the same output, so it cannot be relied on to detect the conflict.
## Steps to reproduce
1. Install Omarchy 4.0.2 (or `omarchy refresh config herdr/config.toml` to restore the shipped file).
2. Launch `herdr`, create a workspace with two stacked panes, and create a second workspace so the effect is visible.
3. Focus the top pane and press `Ctrl+Space` then `Shift+K`.
## Expected
Either `swap_pane_up` swaps the two panes, or — if `close_workspace` is intended to own that chord, mirroring tmux's `bind K kill-session` — `swap_pane_up` is explicitly rebound so it remains reachable.
## Actual
The focused workspace and every pane in it are destroyed immediately, with no confirmation. The panes never swap. `swap_pane_up` cannot be triggered by any key in the shipped configuration.
Verified twice in the VM, deterministically. Before: workspace `~` with panes `PANE-ONE-TOP` / `PANE-TWO-BOTTOM`, plus workspace `SECOND` in the sidebar. After the chord: `~` is gone from the sidebar entirely, only `SECOND` remains with its single pane. Server log for the same instant:
```
INFO herdr::logging: workspace closed event="workspace.close" subsystem="workspace" outcome="ok" workspace_id="w1"
INFO herdr::logging: pane child exited event="pane.exit" ... signal: Some("Hangup")
INFO herdr::logging: pane child exited event="pane.exit" ... signal: Some("Hangup")
WARN herdr::app::actions: PaneDied for unknown pane pane=3
WARN herdr::app::actions: PaneDied for unknown pane pane=1
```
No conflict, duplicate-binding or shadowing warning is logged by herdr at any point (`grep -niE 'conflict|duplicat|unknown key|shadow'` on both `herdr-client.log` and `herdr-server.log` returns nothing), which is why this is easy to miss.
## Suggested fix
Keep `close_workspace` where it is — it mirrors tmux's `bind K` and matches the rest of the file's tmux-derived mapping — and give the `swap_pane_*` family explicit bindings off the `prefix+shift+h/j/k/l` defaults. `prefix+shift+{left,down,up,right}` is free in the shipped config and keeps the directional grouping:
```toml
swap_pane_left = "prefix+shift+left"
swap_pane_down = "prefix+shift+down"
swap_pane_up = "prefix+shift+up"
swap_pane_right = "prefix+shift+right"
```
Only `swap_pane_up` strictly collides; moving all four keeps them consistent rather than splitting the family across two chord styles.
Worth noting separately: `prefix+shift+k` destroying a multi-pane workspace with `confirm_close = false` is a harsh default for a chord one key away from `close_tab` (`prefix+k`). That may be deliberate tmux parity, but it is a second reason not to leave a second action fighting for the same chord.
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 10:42 UTC