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.
Agents panel: a Local tab for self-hosted model usage
Reported by Ronin11 · filed Sep 16, 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
The gap
Each collector in the agents panel answers "what did this subscription cost me". That is the right question, and #12031 / #12032 make the Codex collector answer it honestly by dropping turns a local backend served.
But it leaves those turns counted by nobody. Run Codex CLI against Ollama, or opencode against a local gateway, and the work simply vanishes from the panel — which is correct for the Codex tab and wrong for the panel as a whole. On my machine that is a third of the day's tokens with nowhere to live.
The proposal
A local collector, so the panel has a home for work that ran on hardware you own. It counts exactly what the subscription collectors skip — the complement, not an overlap — across the same three sources they already read: native Codex rollouts, pi/omp sessions, and the opencode database.
The useful part is that "local" is a property of the endpoint, not a hardcoded runtime list. An endpoint qualifies when its URL resolves to a loopback, private, or link-local address, or to a bare or LAN hostname. So a model served by another box on your network counts the same as one on this machine — which matters to anyone with a GPU host in the basement:
| provider | endpoint | counted as |
|---|---|---|
homelab | http://server.home:11434/v1 | Local |
gpu | http://10.0.0.50:8000/v1 | Local |
lanbox | http://gpu-box:8080 (bare hostname) | Local |
ollama | no URL; well-known runtime | Local |
openrouter | https://openrouter.ai/api/v1 | neither |
openai | the subscription | Codex |
Provider ids with no URL to resolve (opencode and pi record the id but not the endpoint) fall back to a list of well-known runtimes — Ollama, LM Studio, llama.cpp, vLLM, LocalAI and friends — and a custom gateway can be named in ~/.config/omarchy/agents/local.json.
There are no limits and no balance to draw: nothing meters self-hosted work, so the tab shows token history alone.
Why it composes
- It partitions rather than overlaps. With the Codex fix in place, every rollout is counted by exactly one collector. On real data: 52,617 tokens before the fix = 31,580 on the Codex tab + 21,037 on the Local tab. No turn lost, none double-counted — asserted in the test, not just observed.
- Cross-device aggregation needs no code.
aggregateSnapshots()builds provider accumulators on demand for any id, so withsyncModeon, a homelab's numbers travel exactly like any other agent's. (Untested — I have only one machine.) - It self-hides. Like every other agent, the tab appears only once there is usage to show, so this costs nothing for people who never run a local model.
Deliberate non-goals
- A third-party API is counted by nobody. OpenRouter and friends are neither this subscription nor your own hardware. A case could be made for a fourth bucket; I did not want to invent one unasked.
- No `assets/local.svg`. The bar glyph stands in, and a mark invented by a drive-by contributor seemed like the wrong thing to put in this PR.
Status
Implemented and working in #12034, stacked on #12032. Happy to drop it if this is not a direction you want the panel to go — filing the request first so the design can be argued before the code is.
View raw text
## The gap Each collector in the agents panel answers "what did this subscription cost me". That is the right question, and #12031 / #12032 make the Codex collector answer it honestly by dropping turns a local backend served. But it leaves those turns counted by nobody. Run Codex CLI against Ollama, or opencode against a local gateway, and the work simply vanishes from the panel — which is correct for the Codex tab and wrong for the panel as a whole. On my machine that is a third of the day's tokens with nowhere to live. ## The proposal A `local` collector, so the panel has a home for work that ran on hardware you own. It counts exactly what the subscription collectors skip — the complement, not an overlap — across the same three sources they already read: native Codex rollouts, pi/omp sessions, and the opencode database. The useful part is that "local" is a property of the **endpoint**, not a hardcoded runtime list. An endpoint qualifies when its URL resolves to a loopback, private, or link-local address, or to a bare or LAN hostname. So a model served by another box on your network counts the same as one on this machine — which matters to anyone with a GPU host in the basement: | provider | endpoint | counted as | |---|---|---| | `homelab` | `http://server.home:11434/v1` | Local | | `gpu` | `http://10.0.0.50:8000/v1` | Local | | `lanbox` | `http://gpu-box:8080` (bare hostname) | Local | | `ollama` | no URL; well-known runtime | Local | | `openrouter` | `https://openrouter.ai/api/v1` | neither | | `openai` | the subscription | Codex | Provider ids with no URL to resolve (opencode and pi record the id but not the endpoint) fall back to a list of well-known runtimes — Ollama, LM Studio, llama.cpp, vLLM, LocalAI and friends — and a custom gateway can be named in `~/.config/omarchy/agents/local.json`. There are no limits and no balance to draw: nothing meters self-hosted work, so the tab shows token history alone. ## Why it composes - **It partitions rather than overlaps.** With the Codex fix in place, every rollout is counted by exactly one collector. On real data: 52,617 tokens before the fix = 31,580 on the Codex tab + 21,037 on the Local tab. No turn lost, none double-counted — asserted in the test, not just observed. - **Cross-device aggregation needs no code.** `aggregateSnapshots()` builds provider accumulators on demand for any id, so with `syncMode` on, a homelab's numbers travel exactly like any other agent's. (Untested — I have only one machine.) - **It self-hides.** Like every other agent, the tab appears only once there is usage to show, so this costs nothing for people who never run a local model. ## Deliberate non-goals - **A third-party API is counted by nobody.** OpenRouter and friends are neither this subscription nor your own hardware. A case could be made for a fourth bucket; I did not want to invent one unasked. - **No `assets/local.svg`.** The bar glyph stands in, and a mark invented by a drive-by contributor seemed like the wrong thing to put in this PR. ## Status Implemented and working in #12034, stacked on #12032. Happy to drop it if this is not a direction you want the panel to go — filing the request first so the design can be argued before the code is.
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 13:58 UTC