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.
Terminal bell in the shared tmux session steals focus across workspaces
Reported by Chris24680 · filed Aug 20, 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
What happens
Pressing a key that produces no action in the shell — Escape, or a Tab
completion with no match — inside one SUPER+RETURN terminal switches the
active workspace to whichever workspace another terminal window is on. On a
single-window-per-workspace layout the effect reads as "my window suddenly went
fullscreen", which is what sent me looking in the wrong place first.
Expected
A terminal bell should not move focus between workspaces.
Steps to reproduce (stock install)
SUPER+RETURNon workspace 2 — a terminal opens.SUPER+3,SUPER+RETURN— a second terminal opens on workspace 3.- Return to workspace 2, focus that terminal, press
Escape(orTabon an
ambiguous completion).
4. Focus jumps to workspace 3.
Cause
Six defaults chain together, two of which are Omarchy's:
omarchy-launch-terminal-tmuxrunstmux attach || tmux new -s Work, so
every SUPER+RETURN terminal becomes an additional **client of the same
tmux session** rather than getting its own. (Bare attach also means the
Work session is only ever created when no session exists at all.)
2. tmux's default bell-action any + monitor-bell on relays a bell to
every attached client. Omarchy ships config/tmux/tmux.conf but does not
set either option, so the defaults stand.
3. readline's bell-style audible (Arch /etc/inputrc) emits BEL for a dead
key or a failed completion.
4. ghostty's default bell-features = no-system,no-audio,attention,title,no-border
turns that BEL into a window-manager attention request.
5. ghostty's gtk-single-instance = detect resolves to true, so both windows
are one process and the request lands on GTK's active window rather than the
surface that beeped — which is why the jump target is consistent.
6. default/hypr/looknfeel.lua:109 sets misc:focus_on_activate = true, so
Hyprland honours the request and switches workspace to reach that window.
Each default is reasonable alone. Omarchy is the only layer that can see all
three of its own pieces at once: the launcher that guarantees multiple clients
on one session, the tmux.conf that leaves the cross-client bell relay on, and
the compositor set to obey attention requests.
Suggested fix
One line in config/tmux/tmux.conf:
set -g bell-action currentcurrent rather than none keeps the bell visible on the client that caused
it, and loses nothing — a bell is meaningful to the person at that terminal,
not to a window on another workspace. Confirmed to fix it here.
(An alternative would be tmux new-session -A -s Work inomarchy-launch-terminal-tmux so each window gets its own session, but that
changes the launcher's intent — sharing one session looks deliberate.)
System details
- Omarchy 4.0.0-1
- Hyprland 0.56.2
- tmux 3.7b
- Ghostty 1.3.1-arch2
- CPU: Intel i7-9750H
- GPU: Intel UHD 630 + NVIDIA GTX 1660 Ti Mobile
View raw text
### What happens Pressing a key that produces no action in the shell — `Escape`, or a `Tab` completion with no match — inside one `SUPER+RETURN` terminal switches the active workspace to whichever workspace *another* terminal window is on. On a single-window-per-workspace layout the effect reads as "my window suddenly went fullscreen", which is what sent me looking in the wrong place first. ### Expected A terminal bell should not move focus between workspaces. ### Steps to reproduce (stock install) 1. `SUPER+RETURN` on workspace 2 — a terminal opens. 2. `SUPER+3`, `SUPER+RETURN` — a second terminal opens on workspace 3. 3. Return to workspace 2, focus that terminal, press `Escape` (or `Tab` on an ambiguous completion). 4. Focus jumps to workspace 3. ### Cause Six defaults chain together, two of which are Omarchy's: 1. `omarchy-launch-terminal-tmux` runs `tmux attach || tmux new -s Work`, so every `SUPER+RETURN` terminal becomes an additional **client of the same tmux session** rather than getting its own. (Bare `attach` also means the `Work` session is only ever created when no session exists at all.) 2. tmux's default `bell-action any` + `monitor-bell on` relays a bell to **every attached client**. Omarchy ships `config/tmux/tmux.conf` but does not set either option, so the defaults stand. 3. readline's `bell-style audible` (Arch `/etc/inputrc`) emits BEL for a dead key or a failed completion. 4. ghostty's default `bell-features = no-system,no-audio,attention,title,no-border` turns that BEL into a window-manager attention request. 5. ghostty's `gtk-single-instance = detect` resolves to true, so both windows are one process and the request lands on GTK's active window rather than the surface that beeped — which is why the jump target is consistent. 6. `default/hypr/looknfeel.lua:109` sets `misc:focus_on_activate = true`, so Hyprland honours the request and switches workspace to reach that window. Each default is reasonable alone. Omarchy is the only layer that can see all three of its own pieces at once: the launcher that guarantees multiple clients on one session, the `tmux.conf` that leaves the cross-client bell relay on, and the compositor set to obey attention requests. ### Suggested fix One line in `config/tmux/tmux.conf`: ```tmux set -g bell-action current ``` `current` rather than `none` keeps the bell visible on the client that caused it, and loses nothing — a bell is meaningful to the person at that terminal, not to a window on another workspace. Confirmed to fix it here. (An alternative would be `tmux new-session -A -s Work` in `omarchy-launch-terminal-tmux` so each window gets its own session, but that changes the launcher's intent — sharing one session looks deliberate.) ### System details - Omarchy 4.0.0-1 - Hyprland 0.56.2 - tmux 3.7b - Ghostty 1.3.1-arch2 - CPU: Intel i7-9750H - GPU: Intel UHD 630 + NVIDIA GTX 1660 Ti Mobile
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 08:16 UTC