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

Theme change interrupts/kills running opencode sessions (omarchy-restart-opencode broadcasts SIGUSR2)

Reported by ADIBAINS · filed Aug 24, 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

Theme change interrupts/kills running opencode sessions (omarchy-restart-opencode broadcasts SIGUSR2)revision 1 · captured 2026-09-28 21:24 UTC via poll

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