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

omarchy-agent-usage-codex: 4s RPC timeout intermittently drops Codex usage/limits

Reported by matthewjaybarr-png · filed Sep 27, 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

omarchy-agent-usage-codex: 4s RPC timeout intermittently drops Codex usage/limitsrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happens

omarchy-agent-usage-codex spawns codex app-server and makes two JSON-RPC
calls to it — account/read then account/rateLimits/read — each bounded by
a 4-second timeout (rpc_request(..., timeout=4)).

A successful run typically completes in ~2s, but response time varies enough
that the call intermittently exceeds 4s. When it does, the script's exception
handler overwrites the entire result for that refresh:

except Exception as exc:
    result["usageStatusText"] = "Codex limits unavailable"
    result["authHelpText"] = str(exc)   # e.g. "account/read"

result["limits"] stays [] (its initial default), so any usage record
consumer reading the cached JSON — the bar widget and any app that reads
~/.local/state/omarchy/agents/usage/codex.json — loses the rate-limit
display for that whole refresh cycle, even though the previous cycle had
valid data.

Reproduction

Ran the collector 8 times back-to-back on an idle-ish machine:

for i in $(seq 8); do
  /usr/bin/omarchy-agent-usage-codex --force
done

3 of 8 runs failed with the exact signature above (`usageStatusText: "Codex
limits unavailable", authHelpText: "account/read"`), each taking ~5s
end-to-end vs ~2s for a success — consistent with hitting the 4s timeout on
account/read and returning shortly after.

Fix

The 4s timeout margin against codex app-server's actual response time is
too tight. Bumping both RPC timeouts (account/read,
account/rateLimits/read) from 4s to something like 10s resolves it in local
testing (0 failures in 6 subsequent runs). Patch is a one-line-per-call
change in fetch_codex_rpc().

Environment

  • omarchy package: 4.0.4-1
  • codex-cli: 0.157.1
View raw text
## What happens

`omarchy-agent-usage-codex` spawns `codex app-server` and makes two JSON-RPC
calls to it — `account/read` then `account/rateLimits/read` — each bounded by
a 4-second timeout (`rpc_request(..., timeout=4)`).

A successful run typically completes in ~2s, but response time varies enough
that the call intermittently exceeds 4s. When it does, the script's exception
handler overwrites the *entire* result for that refresh:

```python
except Exception as exc:
    result["usageStatusText"] = "Codex limits unavailable"
    result["authHelpText"] = str(exc)   # e.g. "account/read"
```

`result["limits"]` stays `[]` (its initial default), so any usage record
consumer reading the cached JSON — the bar widget and any app that reads
`~/.local/state/omarchy/agents/usage/codex.json` — loses the rate-limit
display for that whole refresh cycle, even though the previous cycle had
valid data.

## Reproduction

Ran the collector 8 times back-to-back on an idle-ish machine:

```
for i in $(seq 8); do
  /usr/bin/omarchy-agent-usage-codex --force
done
```

3 of 8 runs failed with the exact signature above (`usageStatusText: "Codex
limits unavailable"`, `authHelpText: "account/read"`), each taking ~5s
end-to-end vs ~2s for a success — consistent with hitting the 4s timeout on
`account/read` and returning shortly after.

## Fix

The 4s timeout margin against `codex app-server`'s actual response time is
too tight. Bumping both RPC timeouts (`account/read`,
`account/rateLimits/read`) from 4s to something like 10s resolves it in local
testing (0 failures in 6 subsequent runs). Patch is a one-line-per-call
change in `fetch_codex_rpc()`.

## Environment

- omarchy package: 4.0.4-1
- codex-cli: 0.157.1

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 19:33 UTC