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.
plugin enable and bar put report success without placing a widget listed in plugins[]
Reported by kevinbsr · 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
omarchy plugin enable <id> and omarchy bar put <id> both report success and place nothing when the widget's id is already listed in config.plugins[] but is not on the bar. The shell's own listing keeps reporting the plugin as disabled afterwards, so the two disagree and the user is told the opposite of what happened.
Reproduce
Put a bar-widget's id in plugins in ~/.config/omarchy/shell.json without placing it in bar.layout:
"plugins": [{ "id": "agx.screen-time" }]Then:
$ omarchy plugin enable agx.screen-time
Enabled agx.screen-time # exit 0
$ omarchy bar put agx.screen-time --section right
agx.screen-time is on the bar # exit 0
$ omarchy-shell shell listPlugins | jq -r '.[]|select(.id=="agx.screen-time")|.enabled'
falseshell.json is byte-identical before and after both commands — neither wrote anything. The widget is not on the bar.
I hit this with three plugins in that state at once (agx.screen-time, oma.nearby, omaconnect, all kinds: ["service", "bar-widget"]). The only way out was editing shell.json by hand, because every command that is supposed to fix it claims it already did.
Cause
PluginRegistry.setEnabled decides whether to place the widget with findEntryLocation:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L522
var location = findEntryLocation(config, key)
...
if (!location.found && isBarWidget) {
// ... place it in bar.layout
} else if (!location.found && !isFirstParty) {
config.plugins.push(entry)
}But findEntryLocation searches bar.layout and config.plugins[]:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L242-L246
So a bar-widget sitting in plugins[] reports found: true, both branches are skipped, and setEnabled still returns true — which the CLI prints as success.
The two questions have been conflated. findEntryLocation answers "is this plugin configured anywhere?", but the bar-widget branch needs "is this widget on the bar?" — and inBar() already answers exactly that.
putBarWidget guards with inBar(id) correctly, then delegates to setEnabled and inherits the same conflation:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L321-L339
Its "" return means three different things — "already on the bar", "not mine to touch", and "placed it" — so omarchy-bar's "is on the bar" message can't distinguish the no-op from the success it was written for. The comment at bin/omarchy-bar:300 says both outcomes are the same answer to the caller; this is a third outcome wearing the same answer.
Suggested fix
In the bar-widget branch of setEnabled, test bar presence rather than configuration presence — findBarLocation / inBar instead of findEntryLocation — so a widget listed only in plugins[] still gets placed. A widget in both places is arguably worth cleaning up out of plugins[] at the same time.
Happy to send a PR if the direction looks right.
Found while debugging a bar-widget that hosts other widgets. Reported with the help of Claude Code.
View raw text
`omarchy plugin enable <id>` and `omarchy bar put <id>` both report success and place nothing when the widget's id is already listed in `config.plugins[]` but is not on the bar. The shell's own listing keeps reporting the plugin as disabled afterwards, so the two disagree and the user is told the opposite of what happened.
## Reproduce
Put a bar-widget's id in `plugins` in `~/.config/omarchy/shell.json` without placing it in `bar.layout`:
```json
"plugins": [{ "id": "agx.screen-time" }]
```
Then:
```
$ omarchy plugin enable agx.screen-time
Enabled agx.screen-time # exit 0
$ omarchy bar put agx.screen-time --section right
agx.screen-time is on the bar # exit 0
$ omarchy-shell shell listPlugins | jq -r '.[]|select(.id=="agx.screen-time")|.enabled'
false
```
`shell.json` is byte-identical before and after both commands — neither wrote anything. The widget is not on the bar.
I hit this with three plugins in that state at once (`agx.screen-time`, `oma.nearby`, `omaconnect`, all `kinds: ["service", "bar-widget"]`). The only way out was editing `shell.json` by hand, because every command that is supposed to fix it claims it already did.
## Cause
`PluginRegistry.setEnabled` decides whether to place the widget with `findEntryLocation`:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L522
```js
var location = findEntryLocation(config, key)
...
if (!location.found && isBarWidget) {
// ... place it in bar.layout
} else if (!location.found && !isFirstParty) {
config.plugins.push(entry)
}
```
But `findEntryLocation` searches `bar.layout` **and** `config.plugins[]`:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L242-L246
So a bar-widget sitting in `plugins[]` reports `found: true`, both branches are skipped, and `setEnabled` still returns `true` — which the CLI prints as success.
The two questions have been conflated. `findEntryLocation` answers "is this plugin configured anywhere?", but the bar-widget branch needs "is this widget on the bar?" — and `inBar()` already answers exactly that.
`putBarWidget` guards with `inBar(id)` correctly, then delegates to `setEnabled` and inherits the same conflation:
https://github.com/omacom/omarchy/blob/quattro/shell/services/PluginRegistry.qml#L321-L339
Its `""` return means three different things — "already on the bar", "not mine to touch", and "placed it" — so `omarchy-bar`'s "is on the bar" message can't distinguish the no-op from the success it was written for. The comment at `bin/omarchy-bar:300` says both outcomes are the same answer to the caller; this is a third outcome wearing the same answer.
## Suggested fix
In the bar-widget branch of `setEnabled`, test bar presence rather than configuration presence — `findBarLocation` / `inBar` instead of `findEntryLocation` — so a widget listed only in `plugins[]` still gets placed. A widget in both places is arguably worth cleaning up out of `plugins[]` at the same time.
Happy to send a PR if the direction looks right.
---
Found while debugging a bar-widget that hosts other widgets. Reported with the help of 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.
- Out of scopeDecided by agents · verified · 2026-10-09 11:24 UTC