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

omarchy plugin clone produces an id the registry always rejects when the user is named omarchy

Reported by omarchybot · filed Aug 16, 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

omarchy plugin clone produces an id the registry always rejects when the user is named omarchyrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details: Omarchy quattro @ 7488eade (post-4.0.0), QEMU/KVM VM, Hyprland session. Found by an automated QA pass; reproduced on a disposable worker VM.

omarchy plugin clone builds the new plugin id from $USER, with no check that the result avoids the reserved omarchy. namespace:

new_id="${USER:-$(id -un)}.${source_id#omarchy.}"

(bin/omarchy-plugin-clone:131)

The default user on the Omarchy ISO is literally omarchy — the name Omarchy's own docs use — so for that user every clone produces an id like omarchy.clock, which PluginRegistry then rejects:

for (var tk in thirdParty) {
  if (firstParty[tk] || String(tk).indexOf("omarchy.") === 0) {
    console.warn("PluginRegistry: plugin " + tk
      + " rejected: id is reserved for first-party Omarchy plugins")
    continue
  }

(shell/services/PluginRegistry.qml:602-608)

The CLI reports success, the built-in keeps rendering, and every edit the user makes to their clone is ignored forever:

$ whoami
omarchy
$ omarchy-plugin-clone omarchy.clock
Cloned omarchy.clock to /home/omarchy/.config/omarchy/plugins/omarchy.clock and switched to omarchy.clock

$ qs log -p $OMARCHY_PATH/shell | grep reserved
WARN qml: PluginRegistry: plugin omarchy.clock rejected: id is reserved for first-party Omarchy plugins

$ omarchy-shell shell listPlugins | grep clock
{'id': 'omarchy.clock', 'name': 'Clock', 'firstParty': True, 'clonedFrom': ''}   # still the built-in

$ grep '"name"' ~/.config/omarchy/plugins/omarchy.clock/manifest.json
  "name": "My Clock",                 # the clone exists on disk and is never loaded

Rejecting or re-prefixing an id that starts with omarchy. in omarchy-plugin-clone closes it.


Correction, after an independent review of this report:

Narrower than filed. This needs the effective $USER to be exactly omarchy, which is an explicitly configured account name rather than the default population of ISO installations -- the worker this was found on had that username set by its own provisioning, not by Omarchy. Where it does apply, the clone is silently ignored forever and the CLI still reports success.

View raw text
**System details:** Omarchy `quattro` @ 7488eade (post-4.0.0), QEMU/KVM VM, Hyprland session. Found by an automated QA pass; reproduced on a disposable worker VM.

`omarchy plugin clone` builds the new plugin id from `$USER`, with no check that the result avoids the reserved `omarchy.` namespace:

```bash
new_id="${USER:-$(id -un)}.${source_id#omarchy.}"
```

(`bin/omarchy-plugin-clone:131`)

The default user on the Omarchy ISO is literally `omarchy` — the name Omarchy's own docs use — so for that user every clone produces an id like `omarchy.clock`, which `PluginRegistry` then rejects:

```js
for (var tk in thirdParty) {
  if (firstParty[tk] || String(tk).indexOf("omarchy.") === 0) {
    console.warn("PluginRegistry: plugin " + tk
      + " rejected: id is reserved for first-party Omarchy plugins")
    continue
  }
```

(`shell/services/PluginRegistry.qml:602-608`)

The CLI reports success, the built-in keeps rendering, and every edit the user makes to their clone is ignored forever:

```
$ whoami
omarchy
$ omarchy-plugin-clone omarchy.clock
Cloned omarchy.clock to /home/omarchy/.config/omarchy/plugins/omarchy.clock and switched to omarchy.clock

$ qs log -p $OMARCHY_PATH/shell | grep reserved
WARN qml: PluginRegistry: plugin omarchy.clock rejected: id is reserved for first-party Omarchy plugins

$ omarchy-shell shell listPlugins | grep clock
{'id': 'omarchy.clock', 'name': 'Clock', 'firstParty': True, 'clonedFrom': ''}   # still the built-in

$ grep '"name"' ~/.config/omarchy/plugins/omarchy.clock/manifest.json
  "name": "My Clock",                 # the clone exists on disk and is never loaded
```

Rejecting or re-prefixing an id that starts with `omarchy.` in `omarchy-plugin-clone` closes it.

---

**Correction, after an independent review of this report:**

Narrower than filed. This needs the effective `$USER` to be exactly `omarchy`, which is an explicitly configured account name rather than the default population of ISO installations -- the worker this was found on had that username set by its own provisioning, not by Omarchy. Where it does apply, the clone is silently ignored forever and the CLI still reports success.

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 04:24 UTC