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.
Theme change interrupts/kills running opencode sessions (omarchy-restart-opencode broadcasts SIGUSR2)
Reported by ADIBAINS · filed Aug 24, 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
Title
Theme change interrupts/kills running opencode sessions (omarchy-restart-opencode broadcasts SIGUSR2)
Body
Summary
Every omarchy theme set <name> runs omarchy-restart-opencode, which does a blanketkillall -SIGUSR2 opencode across all opencode processes. Any opencode process without a
SIGUSR2 handler terminates (default signal disposition), and even interactive TUI sessions
take a forced config reload that aborts in-flight generation. Changing theme while opencode
is working interrupts it — unlike Claude Code on the same system, which omarchy retints
passively via a watched file.
System details
- Omarchy: 4.0.0.r1816.g43bfe9b-1
- Kernel: 7.1.9-arch1-2
- CPU: 12th Gen Intel(R) Core(TM) i5-12450HX
- GPU: Intel Alder Lake-S UHD Graphics
- opencode: 1.18.21 (via mise)
Version
Omarchy 4.0.0.r1816.g43bfe9b-1 (Arch Linux, Hyprland)
Root cause
bin/omarchy-theme-setincludesomarchy-restart-opencodeinpost_theme_commands
and runs it on every theme apply.
- bin/omarchy-restart-opencode = pgrep -x opencode && killall -SIGUSR2 opencode.
- In opencode (verified against v1.18.x binaries), only the interactive TUI registers
SIGUSR2 handlers (config reload + rescan of ~/.config/opencode/themes/*.json).
Headless processes — opencode run, servers, spawned agents — have no handler and are
killed by the default disposition.
- Notably, omarchy ships no generated theme artifact for opencode at all (no opencode
template under default/themed/, nothing in stock themes). So the signal delivers no
Omarchy colors; unless a user maintains their own ~/.config/opencode/themes/*.json,
this call has no upside and only interrupts running work.
Reproduction
- Start a task that takes a while:
opencode run "Write the numbers from 1 to 80, one per line" - While it is mid-run, from another terminal:
omarchy theme set <any-theme> - The run dies immediately.
Targeted-signal confirmation of what the broadcast does:
$ opencode run "Write the numbers from 1 to 80, one per line" &
$ kill -USR2 <pid> # exactly what omarchy-restart-opencode does
User defined signal 2 exit code 140 (128+SIGUSR2), task produced nothingInteractive TUI sessions survive the signal itself but get their active generation
interrupted by the forced server reload.
For comparison: omarchy-theme-set-claude writes ~/.claude/themes/omarchy.json, which
Claude Code hot-reloads by file watch — running sessions retint without any signal.
Codex isn't signaled at all. Only opencode gets the kill-the-process treatment.
Expected
Changing themes should not terminate or disrupt running coding-agent sessions.
Suggested fix
Drop omarchy-restart-opencode from post_theme_commands in bin/omarchy-theme-set.
Since omarchy generates no opencode theme data today, removing it changes no visual
behavior. If opencode integration is wanted later, the Claude pattern is the model:
generate a theme file opencode can pick up passively rather than signaling processes.
Notes
- PR #4566 touched this same script but only silenced the "no process found" error.
- Local stopgap for affected users: shadow
omarchy-restart-opencodewith a no-op
earlier in PATH (e.g. via a prepended dir in ~/.bash_profile, since
post_theme_commands run through bash -lc).
Attachments
- Full repro transcript and exit codes available on request (captured locally).
View raw text
# Title Theme change interrupts/kills running opencode sessions (`omarchy-restart-opencode` broadcasts SIGUSR2) # Body ## Summary Every `omarchy theme set <name>` runs `omarchy-restart-opencode`, which does a blanket `killall -SIGUSR2 opencode` across all opencode processes. Any opencode process without a SIGUSR2 handler terminates (default signal disposition), and even interactive TUI sessions take a forced config reload that aborts in-flight generation. Changing theme while opencode is working interrupts it — unlike Claude Code on the same system, which omarchy retints passively via a watched file. ## System details - Omarchy: 4.0.0.r1816.g43bfe9b-1 - Kernel: 7.1.9-arch1-2 - CPU: 12th Gen Intel(R) Core(TM) i5-12450HX - GPU: Intel Alder Lake-S UHD Graphics - opencode: 1.18.21 (via mise) ## Version Omarchy 4.0.0.r1816.g43bfe9b-1 (Arch Linux, Hyprland) ## Root cause - `bin/omarchy-theme-set` includes `omarchy-restart-opencode` in `post_theme_commands` and runs it on every theme apply. - `bin/omarchy-restart-opencode` = `pgrep -x opencode && killall -SIGUSR2 opencode`. - In opencode (verified against v1.18.x binaries), only the interactive TUI registers SIGUSR2 handlers (config reload + rescan of `~/.config/opencode/themes/*.json`). Headless processes — `opencode run`, servers, spawned agents — have no handler and are killed by the default disposition. - Notably, omarchy ships no generated theme artifact for opencode at all (no opencode template under `default/themed/`, nothing in stock themes). So the signal delivers no Omarchy colors; unless a user maintains their own `~/.config/opencode/themes/*.json`, this call has no upside and only interrupts running work. ## Reproduction 1. Start a task that takes a while: `opencode run "Write the numbers from 1 to 80, one per line"` 2. While it is mid-run, from another terminal: `omarchy theme set <any-theme>` 3. The run dies immediately. Targeted-signal confirmation of what the broadcast does: ``` $ opencode run "Write the numbers from 1 to 80, one per line" & $ kill -USR2 <pid> # exactly what omarchy-restart-opencode does User defined signal 2 exit code 140 (128+SIGUSR2), task produced nothing ``` Interactive TUI sessions survive the signal itself but get their active generation interrupted by the forced server reload. For comparison: `omarchy-theme-set-claude` writes `~/.claude/themes/omarchy.json`, which Claude Code hot-reloads by file watch — running sessions retint without any signal. Codex isn't signaled at all. Only opencode gets the kill-the-process treatment. ## Expected Changing themes should not terminate or disrupt running coding-agent sessions. ## Suggested fix Drop `omarchy-restart-opencode` from `post_theme_commands` in `bin/omarchy-theme-set`. Since omarchy generates no opencode theme data today, removing it changes no visual behavior. If opencode integration is wanted later, the Claude pattern is the model: generate a theme file opencode can pick up passively rather than signaling processes. ## Notes - PR #4566 touched this same script but only silenced the "no process found" error. - Local stopgap for affected users: shadow `omarchy-restart-opencode` with a no-op earlier in PATH (e.g. via a prepended dir in `~/.bash_profile`, since `post_theme_commands` run through `bash -lc`). ## Attachments - Full repro transcript and exit codes available on request (captured locally).
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:35 UTC