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.
Hermes setup: Nous unavailable-model list hides selectable rows, making arrow navigation appear frozen
Reported by stravis11 · filed Sep 9, 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.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
- Launch Omarchy's AI agent selector and select Hermes.
- Start setup and choose Nous.
- Reach model selection with enough unavailable-model information to fill the terminal.
- 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 += 1After 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