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

omarchy bar set <id> <key> '[]' --json always fails: an empty array is dropped before it reaches the shell

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 bar set <id> <key> '[]' --json always fails: an empty array is dropped before it reaches the shellrevision 1 · captured 2026-09-28 21:29 UTC via poll

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

Clearing a list-valued widget setting is the documented --json form, and it never works — an argument that is exactly an empty array is dropped before it reaches the shell.

$ omarchy-bar set omarchy.clock format "HH:mm"                # plain form: fine
Set format on omarchy.clock

$ omarchy-bar set omarchy.tray hidden "[]" --json
Too few arguments provided (4 required but 3 were provided.)
Function definition: function setBarWidget(id: string, key: string, valueJson: string, selectorJson: string): string

The argument is present in bash and missing by the time the IPC handler counts:

$ bash -x $OMARCHY_PATH/bin/omarchy-bar set omarchy.tray hidden "[]" --json 2>&1 | grep setBarWidget
++ omarchy-shell shell setBarWidget omarchy.tray hidden '[]' '{}'      # four arguments

It is not omarchy-bar's quoting — bypassing it entirely fails the same way, and only for []:

$ qs ipc -n -p $OMARCHY_PATH/shell call -- shell setBarWidget omarchy.tray hidden "[]" "{}"
Too few arguments provided (4 required but 3 were provided.)

$ for v in "[]" "[1]" "{}" '"x"' null 0 false; do
>   printf '%-8s -> ' "$v"; omarchy-shell shell setBarWidget omarchy.tray hidden "$v" "{}"; done
[]       -> Too few arguments provided (4 required but 3 were provided.)
[1]      -> ok
{}       -> ok
"x"      -> ok
null     -> ok
0        -> ok
false    -> ok

Position-independent — [] as argument 1 or argument 4 is dropped the same way, and [ ] fails too.

The root cause is in qs ipc call's argument handling, so it is not Omarchy's to fix directly. But bin/omarchy-bar:361 → bin/omarchy-shell:59 routes empty arrays through it, so the only documented way to clear the tray's hidden/pinned or the indicators' items is broken, and what the user sees is a raw IPC internals dump. Sending null and treating it as "clear", or base64-encoding the value the way applyTheme already does, would work around it.

This is also the only CLI route that could rescue the state in the tray-visibility bug filed alongside this one.


Correction, after an independent review of this report:

Narrower than filed. The empty array is lost in CLI11's variadic argument parser on the shipped Quickshell revision, and it affects top-level array transport generally. But clearing tray or indicator state is still possible -- via null --json, omarchy bar defaults, the tray manager, direct config editing, or CLI11's [[]] escape -- so this is not the only route to clearing a list setting.

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

Clearing a list-valued widget setting is the documented `--json` form, and it never works — an argument that is exactly an empty array is dropped before it reaches the shell.

```
$ omarchy-bar set omarchy.clock format "HH:mm"                # plain form: fine
Set format on omarchy.clock

$ omarchy-bar set omarchy.tray hidden "[]" --json
Too few arguments provided (4 required but 3 were provided.)
Function definition: function setBarWidget(id: string, key: string, valueJson: string, selectorJson: string): string
```

The argument is present in bash and missing by the time the IPC handler counts:

```
$ bash -x $OMARCHY_PATH/bin/omarchy-bar set omarchy.tray hidden "[]" --json 2>&1 | grep setBarWidget
++ omarchy-shell shell setBarWidget omarchy.tray hidden '[]' '{}'      # four arguments
```

It is not `omarchy-bar`'s quoting — bypassing it entirely fails the same way, and only for `[]`:

```
$ qs ipc -n -p $OMARCHY_PATH/shell call -- shell setBarWidget omarchy.tray hidden "[]" "{}"
Too few arguments provided (4 required but 3 were provided.)

$ for v in "[]" "[1]" "{}" '"x"' null 0 false; do
>   printf '%-8s -> ' "$v"; omarchy-shell shell setBarWidget omarchy.tray hidden "$v" "{}"; done
[]       -> Too few arguments provided (4 required but 3 were provided.)
[1]      -> ok
{}       -> ok
"x"      -> ok
null     -> ok
0        -> ok
false    -> ok
```

Position-independent — `[]` as argument 1 or argument 4 is dropped the same way, and `[ ]` fails too.

The root cause is in `qs ipc call`'s argument handling, so it is not Omarchy's to fix directly. But `bin/omarchy-bar:361` → `bin/omarchy-shell:59` routes empty arrays through it, so the only documented way to clear the tray's `hidden`/`pinned` or the indicators' `items` is broken, and what the user sees is a raw IPC internals dump. Sending `null` and treating it as "clear", or base64-encoding the value the way `applyTheme` already does, would work around it.

This is also the only CLI route that could rescue the state in the tray-visibility bug filed alongside this one.

---

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

Narrower than filed. The empty array is lost in CLI11's variadic argument parser on the shipped Quickshell revision, and it affects top-level array transport generally. But clearing tray or indicator state is still possible -- via `null --json`, `omarchy bar defaults`, the tray manager, direct config editing, or CLI11's `[[]]` escape -- so this is not the only route to clearing a list setting.

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:26 UTC