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.
omarchy-agent-usage-claude logs one stderr line per unreadable transcript, filling $XDG_RUNTIME_DIR and killing the compositor with SIGBUS
Reported by StefanMaron · filed Sep 1, 2026Closed upstream on 2026-10-04 by the bot omarchybot; the closing comment says it was fixed by PR #14049. GitHub close reason: completed.
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?
- Not yet mapped to any requirement or component.
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
Summary
/usr/bin/omarchy-agent-usage-claude scans ~/.claude/projects/**/*.jsonl and writes one line to stderr for every file it cannot open:
except Exception as exc:
print(f"Ignoring unreadable Claude project file {path}: {exc}", file=sys.stderr)(scan_projects, line 197)
There is no deduplication and no limit. The agents bar widget runs the command on a schedule (refreshIntervalSec, default 900), quickshell captures its stderr into the instance log, and the log grows without bound.
On my machine ~/.claude/projects/-app/ holds 90,105 root-owned transcripts, mode 600, left behind by Claude Code running as root inside a container with the home directory mounted. Every scan writes 90,105 lines. The instance log reached 3.35 GB across log.log and log.qslog in about 13 hours and filled /run/user/1000 (3.2 GB).
What breaks once the tmpfs is full
The next client that asks for a shm screen copy kills Hyprland. The compositor maps the client's shm buffer from $XDG_RUNTIME_DIR and writes the pixels into it. With no space left, the kernel cannot allocate a backing page, so the store raises SIGBUS.
Confirmed from the core dump. The fault address and the mapping it lands in:
$1 = (void *) 0x7f7952802010
0x00007f7952800000 0x00007f7953ae6000 /run/user/1000/.hyprpicker_uyi5bhSignal SIGBUS, si_code: BUS_ADRERR. Stack:
#0 libnvidia-eglcore.so.610.57.04
...
#10 Render::GL::CGLFramebuffer::readPixels
#11 Screenshare::CScreenshareFrame::copyShm
#12 Screenshare::CScreenshareFrame::copy
#13 Screenshare::CScreenshareManager::onOutputCommitThe NVIDIA frames are the driver's copy loop performing the faulting write, not the cause.
This happened three times — Aug 30 21:52, Sep 1 08:57, Sep 1 22:15 — with identical stacks. The trigger each time was SUPER + PRINT (hyprpicker -a). Xwayland also fails to start in this state, because xkbcomp cannot write its keymap: Cannot close "/run/user/1000/server-0.xkm" properly (not enough space?).
Steps to reproduce
- Create files under
~/.claude/projects/that the user cannot read:
sudo mkdir -p ~/.claude/projects/-test
sudo bash -c 'for i in $(seq 1 50000); do : > ~/.claude/projects/-test/$i.jsonl; done'
sudo chmod 600 ~/.claude/projects/-test/*.jsonl- Leave the agents bar widget enabled.
- Watch
$XDG_RUNTIME_DIR/quickshell/by-id/*/log.loggrow by one line per file per refresh. - With the tmpfs full, press
SUPER + PRINT. Hyprland dies with SIGBUS.
Expected
The warning should be deduplicated, counted, or dropped after the first few. A directory the user cannot read is a normal condition, not something worth one log line per file per refresh.
Separately, the quickshell instance log should have a size cap. Issue #7506 is a different cause with the same result: an uncapped instance log filling $XDG_RUNTIME_DIR. There it broke app launching; here it kills the compositor. A cap would contain both.
System
- omarchy 4.0.2-1
- omarchy-settings 4.0.2-1
- quickshell 0.3.1-1
- hyprland 0.56.2-1
- Linux 7.1.9-arch1-2, NVIDIA 610.57.04
/run/user/1000is 3.2 GB
Filed by Claude Opus 5 via Claude Code.
View raw text
## Summary
`/usr/bin/omarchy-agent-usage-claude` scans `~/.claude/projects/**/*.jsonl` and writes one line to stderr for every file it cannot open:
```python
except Exception as exc:
print(f"Ignoring unreadable Claude project file {path}: {exc}", file=sys.stderr)
```
(`scan_projects`, line 197)
There is no deduplication and no limit. The agents bar widget runs the command on a schedule (`refreshIntervalSec`, default 900), quickshell captures its stderr into the instance log, and the log grows without bound.
On my machine `~/.claude/projects/-app/` holds 90,105 root-owned transcripts, mode 600, left behind by Claude Code running as root inside a container with the home directory mounted. Every scan writes 90,105 lines. The instance log reached 3.35 GB across `log.log` and `log.qslog` in about 13 hours and filled `/run/user/1000` (3.2 GB).
## What breaks once the tmpfs is full
The next client that asks for a shm screen copy kills Hyprland. The compositor maps the client's shm buffer from `$XDG_RUNTIME_DIR` and writes the pixels into it. With no space left, the kernel cannot allocate a backing page, so the store raises SIGBUS.
Confirmed from the core dump. The fault address and the mapping it lands in:
```
$1 = (void *) 0x7f7952802010
0x00007f7952800000 0x00007f7953ae6000 /run/user/1000/.hyprpicker_uyi5bh
```
Signal `SIGBUS`, `si_code: BUS_ADRERR`. Stack:
```
#0 libnvidia-eglcore.so.610.57.04
...
#10 Render::GL::CGLFramebuffer::readPixels
#11 Screenshare::CScreenshareFrame::copyShm
#12 Screenshare::CScreenshareFrame::copy
#13 Screenshare::CScreenshareManager::onOutputCommit
```
The NVIDIA frames are the driver's copy loop performing the faulting write, not the cause.
This happened three times — Aug 30 21:52, Sep 1 08:57, Sep 1 22:15 — with identical stacks. The trigger each time was `SUPER + PRINT` (`hyprpicker -a`). Xwayland also fails to start in this state, because xkbcomp cannot write its keymap: `Cannot close "/run/user/1000/server-0.xkm" properly (not enough space?)`.
## Steps to reproduce
1. Create files under `~/.claude/projects/` that the user cannot read:
```bash
sudo mkdir -p ~/.claude/projects/-test
sudo bash -c 'for i in $(seq 1 50000); do : > ~/.claude/projects/-test/$i.jsonl; done'
sudo chmod 600 ~/.claude/projects/-test/*.jsonl
```
2. Leave the agents bar widget enabled.
3. Watch `$XDG_RUNTIME_DIR/quickshell/by-id/*/log.log` grow by one line per file per refresh.
4. With the tmpfs full, press `SUPER + PRINT`. Hyprland dies with SIGBUS.
## Expected
The warning should be deduplicated, counted, or dropped after the first few. A directory the user cannot read is a normal condition, not something worth one log line per file per refresh.
Separately, the quickshell instance log should have a size cap. Issue #7506 is a different cause with the same result: an uncapped instance log filling `$XDG_RUNTIME_DIR`. There it broke app launching; here it kills the compositor. A cap would contain both.
## System
- omarchy 4.0.2-1
- omarchy-settings 4.0.2-1
- quickshell 0.3.1-1
- hyprland 0.56.2-1
- Linux 7.1.9-arch1-2, NVIDIA 610.57.04
- `/run/user/1000` is 3.2 GB
Filed by Claude Opus 5 via Claude Code.
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.
No decision has been recorded yet.