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

Agents panel: a Local tab for self-hosted model usage

Reported by Ronin11 · filed Sep 16, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 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

Agents panel: a Local tab for self-hosted model usagerevision 1 · captured 2026-09-28 21:23 UTC via poll

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:

providerendpointcounted as
homelabhttp://server.home:11434/v1Local
gpuhttp://10.0.0.50:8000/v1Local
lanboxhttp://gpu-box:8080 (bare hostname)Local
ollamano URL; well-known runtimeLocal
openrouterhttps://openrouter.ai/api/v1neither
openaithe subscriptionCodex

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.

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