Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-1246GitHub issuePublicDecided· Out of scope

Agent windows (org.omarchy.agent) miss the terminal scroll_touchpad rule, making touchpad scrolling ~10x slower

Reported by jr00n · filed Aug 29, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

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

Agent windows (org.omarchy.agent) miss the terminal scroll_touchpad rule, making touchpad scrolling ~10x slowerrevision 1 · captured 2026-09-28 21:24 UTC via poll

Agent windows (org.omarchy.agent) are excluded from the terminal
scroll_touchpad rule, making touchpad scrolling ~10x slower than in a
regular terminal window.

What happens

default/hypr/input.lua speeds up touchpad scrolling per terminal class:

-- default/hypr/input.lua:82
o.window("(Alacritty|kitty|foot)", { scroll_touchpad = 1.5 })
o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })

But omarchy-agent deliberately gives every agent window a fixed app-id:

# /usr/bin/omarchy-agent:111
# A fixed app-id rather than the default org.omarchy.<binary>, so every agent
# window shares one class for window rules and themes to single out.
exec omarchy-launch-tui --app-id=org.omarchy.agent "${command[@]}"

org.omarchy.agent does not match (Alacritty|kitty|foot), so agent windows
get no scroll_touchpad rule at all and fall back to 1.0.

A second factor compounds it. foot only applies its own
scrollback.multiplier (7.0 in Omarchy's config/foot/foot.ini) when it
scrolls its own scrollback. Once the client enables the alternate screen with
mouse reporting, the multiplier is skipped:

/* foot 1.27.0, input.c:3368 */
static double
mouse_scroll_multiplier(const struct terminal *term, const struct seat *seat)
{
    return (term->grid == &term->normal ||
            (term_mouse_grabbed(term, seat) && term->alt_scrolling))
        ? term->conf->scrollback.multiplier
        : 1.0;
}

Agents run a fullscreen TUI, so that is always the case for them.

Combined effect on a touchpad:

windowwindow rulefoot multipliereffective
regular foot window1.57.010.5x
org.omarchy.agent1.0 (no rule)1.01x

Steps to reproduce

  1. Default terminal set to foot, on a laptop touchpad.
  2. Open a regular terminal and run any pager or TUI that scrolls its scrollback.

Two-finger scroll moves at a normal pace.
3. Super + Shift + Ctrl + A to open an agent window, let it produce enough
output to scroll, and two-finger scroll. It crawls.

Expected

Touchpad scrolling in an agent window should feel the same as in a regular
terminal window.

Workaround

-- ~/.config/hypr/input.lua
o.window("org.omarchy.agent", { scroll_touchpad = 10.0 })

10.0 is the maximum Hyprland accepts for scrolltouchpad; 10.5 is rejected
with value 10.50 is more than the maximum of 10.00.

Note on a proper fix

Simply adding org.omarchy.agent to the existing rule would not be enough —
1.5 only works for windows that also get foot's 7.0 scrollback multiplier,
which a fullscreen TUI never does. Agent windows need roughly the product of
the two (~10).

There is also a wrinkle: because omarchy-agent pins one app-id for every
terminal, the class no longer says which terminal is running, while the
existing rules are deliberately per-terminal (0.2 for ghostty vs 1.5 for
foot/alacritty/kitty). A correct fix probably has to pick the value in
omarchy-agent / omarchy-launch-tui where the terminal is known, rather
than in a class-based window rule.

System

  • Omarchy 4.0.1-2 (omarchy and omarchy-settings both 4.0.1-2)
  • Hyprland on Arch (aarch64, Apple Silicon / Asahi)
  • Terminal: foot 1.27.0
  • Agent: Claude Code, tui: fullscreen
View raw text
Agent windows (`org.omarchy.agent`) are excluded from the terminal
`scroll_touchpad` rule, making touchpad scrolling ~10x slower than in a
regular terminal window.

## What happens

`default/hypr/input.lua` speeds up touchpad scrolling per terminal class:

```lua
-- default/hypr/input.lua:82
o.window("(Alacritty|kitty|foot)", { scroll_touchpad = 1.5 })
o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })
```

But `omarchy-agent` deliberately gives every agent window a fixed app-id:

```sh
# /usr/bin/omarchy-agent:111
# A fixed app-id rather than the default org.omarchy.<binary>, so every agent
# window shares one class for window rules and themes to single out.
exec omarchy-launch-tui --app-id=org.omarchy.agent "${command[@]}"
```

`org.omarchy.agent` does not match `(Alacritty|kitty|foot)`, so agent windows
get no `scroll_touchpad` rule at all and fall back to 1.0.

A second factor compounds it. foot only applies its own
`scrollback.multiplier` (7.0 in Omarchy's `config/foot/foot.ini`) when it
scrolls its own scrollback. Once the client enables the alternate screen with
mouse reporting, the multiplier is skipped:

```c
/* foot 1.27.0, input.c:3368 */
static double
mouse_scroll_multiplier(const struct terminal *term, const struct seat *seat)
{
    return (term->grid == &term->normal ||
            (term_mouse_grabbed(term, seat) && term->alt_scrolling))
        ? term->conf->scrollback.multiplier
        : 1.0;
}
```

Agents run a fullscreen TUI, so that is always the case for them.

Combined effect on a touchpad:

| window | window rule | foot multiplier | effective |
|---|---|---|---|
| regular `foot` window | 1.5 | 7.0 | 10.5x |
| `org.omarchy.agent` | 1.0 (no rule) | 1.0 | 1x |

## Steps to reproduce

1. Default terminal set to foot, on a laptop touchpad.
2. Open a regular terminal and run any pager or TUI that scrolls its scrollback.
   Two-finger scroll moves at a normal pace.
3. `Super + Shift + Ctrl + A` to open an agent window, let it produce enough
   output to scroll, and two-finger scroll. It crawls.

## Expected

Touchpad scrolling in an agent window should feel the same as in a regular
terminal window.

## Workaround

```lua
-- ~/.config/hypr/input.lua
o.window("org.omarchy.agent", { scroll_touchpad = 10.0 })
```

10.0 is the maximum Hyprland accepts for `scrolltouchpad`; 10.5 is rejected
with `value 10.50 is more than the maximum of 10.00`.

## Note on a proper fix

Simply adding `org.omarchy.agent` to the existing rule would not be enough —
1.5 only works for windows that also get foot's 7.0 scrollback multiplier,
which a fullscreen TUI never does. Agent windows need roughly the product of
the two (~10).

There is also a wrinkle: because `omarchy-agent` pins one app-id for every
terminal, the class no longer says which terminal is running, while the
existing rules are deliberately per-terminal (0.2 for ghostty vs 1.5 for
foot/alacritty/kitty). A correct fix probably has to pick the value in
`omarchy-agent` / `omarchy-launch-tui` where the terminal is known, rather
than in a class-based window rule.

## System

- Omarchy 4.0.1-2 (`omarchy` and `omarchy-settings` both 4.0.1-2)
- Hyprland on Arch (aarch64, Apple Silicon / Asahi)
- Terminal: foot 1.27.0
- Agent: Claude Code, `tui: fullscreen`

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:00 UTC