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-781GitHub issuePublicDecided· Out of scope

Hermes setup: Nous unavailable-model list hides selectable rows, making arrow navigation appear frozen

Reported by stravis11 · filed Sep 9, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 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

Hermes setup: Nous unavailable-model list hides selectable rows, making arrow navigation appear frozenrevision 1 · captured 2026-09-28 21:23 UTC via poll

System details

Omarchy 4.0.3-1; Hermes Agent package 0.19.0 (Omarchy mise wrapper, Python 3.13); Ghostty 1.3.1-arch2 (xterm-ghostty); kernel 7.2.3-arch1-3; Intel Core Ultra 9 285; Intel Arrow Lake-S graphics + NVIDIA RTX A1000

What's wrong?

Launching Hermes through Omarchy's AI agent selector, starting setup, and choosing Nous reaches a ‘Select default model’ screen that appears frozen: Up/Down produces no visible selection change.

This is a verified layout defect in the installed Hermes dependency, reported here because it blocks the Hermes onboarding flow exposed by Omarchy. The fix likely belongs upstream in Hermes; no defect in Omarchy's keyboard forwarding was established.

Steps to reproduce

  1. Launch Omarchy's AI agent selector and select Hermes.
  2. Start setup and choose Nous.
  3. Reach model selection with enough unavailable-model information to fill the terminal.
  4. Press Up/Down: selectable choices and their cursor are off-screen.

The account tier was not independently inspected. The same failure was reproduced without credentials using a long description in the menu implementation.

Expected

Navigation hints and selectable rows remain visible regardless of the length of the unavailable-model list.

Confirmed cause

In hermes_cli/auth.py, _prompt_model_selection() puts unavailable models in the description passed to curses_radiolist(). In hermes_cli/curses_ui.py, curses_radiolist()._draw_header() allows that description to consume almost the entire terminal height, then returns a starting row for choices below the drawable area. Arrows still move the cursor internally, but the cursor and choices cannot be drawn.

Minimal reproduction (no account/network required)

Run with Hermes's Python interpreter in a terminal approximately 24 rows tall:

from hermes_cli.curses_ui import curses_radiolist

result = curses_radiolist(
    'Select default model:',
    ['Available model A', 'Available model B'],
    description='\n'.join(
        'Unavailable model ' + str(i) for i in range(30)
    ),
)
print('SELECTED', result)

Before the fix, only the description and navigation hint are visible. Down followed by Enter returns index 1, proving that keyboard input works while the selection is invisible.

Tested local fix

Limit the description height and reserve space for the choices. Replace the description loop inside curses_radiolist()._draw_header() with:

description_budget = max(0, max_y - 8)
visible_description = desc_lines[:description_budget]
if len(desc_lines) > description_budget and visible_description:
    omitted = len(desc_lines) - description_budget + 1
    visible_description[-1] = (
        f'  ... {omitted} more information lines hidden'
    )
for dline in visible_description:
    stdscr.addnstr(row, 0, dline, max_x - 1, curses.A_NORMAL)
    row += 1

After this change, the same 24-row reproduction displays both choices, Down visibly moves to the second choice, and Enter returns index 1. The patch was applied locally with a backup; after relaunching Hermes, the affected user confirmed that it fixed the actual Nous setup problem. A package update may overwrite this workaround.

Diagnostics

omarchy debug --no-sudo --print was attempted, but this installation reports ‘Unknown Omarchy command’; no omarchy-debug binary was found under /usr/share/omarchy/bin/. The minimal reproduction isolates the problem without account logs.

Report prepared with Codex from local source inspection, terminal reproduction, and user confirmation.

View raw text
### System details

Omarchy 4.0.3-1; Hermes Agent package 0.19.0 (Omarchy mise wrapper, Python 3.13); Ghostty 1.3.1-arch2 (xterm-ghostty); kernel 7.2.3-arch1-3; Intel Core Ultra 9 285; Intel Arrow Lake-S graphics + NVIDIA RTX A1000

### What's wrong?

Launching Hermes through Omarchy's AI agent selector, starting setup, and choosing **Nous** reaches a ‘Select default model’ screen that appears frozen: Up/Down produces no visible selection change.

This is a verified layout defect in the installed Hermes dependency, reported here because it blocks the Hermes onboarding flow exposed by Omarchy. The fix likely belongs upstream in Hermes; no defect in Omarchy's keyboard forwarding was established.

### Steps to reproduce

1. Launch Omarchy's AI agent selector and select Hermes.
2. Start setup and choose Nous.
3. Reach model selection with enough unavailable-model information to fill the terminal.
4. Press Up/Down: selectable choices and their cursor are off-screen.

The account tier was not independently inspected. The same failure was reproduced without credentials using a long description in the menu implementation.

### Expected

Navigation hints and selectable rows remain visible regardless of the length of the unavailable-model list.

### Confirmed cause

In `hermes_cli/auth.py`, `_prompt_model_selection()` puts unavailable models in the description passed to `curses_radiolist()`. In `hermes_cli/curses_ui.py`, `curses_radiolist()._draw_header()` allows that description to consume almost the entire terminal height, then returns a starting row for choices below the drawable area. Arrows still move the cursor internally, but the cursor and choices cannot be drawn.

### Minimal reproduction (no account/network required)

Run with Hermes's Python interpreter in a terminal approximately 24 rows tall:

```python
from hermes_cli.curses_ui import curses_radiolist

result = curses_radiolist(
    'Select default model:',
    ['Available model A', 'Available model B'],
    description='\n'.join(
        'Unavailable model ' + str(i) for i in range(30)
    ),
)
print('SELECTED', result)
```

Before the fix, only the description and navigation hint are visible. Down followed by Enter returns index 1, proving that keyboard input works while the selection is invisible.

### Tested local fix

Limit the description height and reserve space for the choices. Replace the description loop inside `curses_radiolist()._draw_header()` with:

```python
description_budget = max(0, max_y - 8)
visible_description = desc_lines[:description_budget]
if len(desc_lines) > description_budget and visible_description:
    omitted = len(desc_lines) - description_budget + 1
    visible_description[-1] = (
        f'  ... {omitted} more information lines hidden'
    )
for dline in visible_description:
    stdscr.addnstr(row, 0, dline, max_x - 1, curses.A_NORMAL)
    row += 1
```

After this change, the same 24-row reproduction displays both choices, Down visibly moves to the second choice, and Enter returns index 1. The patch was applied locally with a backup; after relaunching Hermes, the affected user confirmed that it fixed the actual Nous setup problem. A package update may overwrite this workaround.

### Diagnostics

`omarchy debug --no-sudo --print` was attempted, but this installation reports ‘Unknown Omarchy command’; no `omarchy-debug` binary was found under `/usr/share/omarchy/bin/`. The minimal reproduction isolates the problem without account logs.

Report prepared with Codex from local source inspection, terminal reproduction, and user confirmation.

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 11:18 UTC