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.
Add an opt-in user request dispatcher hook to omarchy-agent
Reported by Atroci · filed Sep 20, 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
Problem
Omarchy already has a single launch path for the selected coding agent through omarchy-agent. It is used by the keyboard shortcut, a, and omarchy agent prompt.
External controllers can currently integrate through individual harness hooks, but there is no generic way to inspect a prompted request before Omarchy launches the fallback agent.
This makes it difficult to build optional routers without adding each router to Omarchy's default-agent list.
Related work:
- Custom coding agents discussion #10090
- Extensible agent harnesses #10171
- User usage collector discovery #9602
- Collector extension PR #12353
Proposed extension
After omarchy-agent resolves the default agent and parses an optional prompt, check for an executable user-owned dispatcher:
~/.config/omarchy/agents/request-dispatchThe launcher would call it with argv such as:
--fallback-agent claude
--cwd /path/to/project
--prompt "Review this project"The contract can stay small:
- Exit
0: the dispatcher handled the request. Omarchy exits without launching the fallback. - Any other exit status: continue with the existing Omarchy launch path.
- No dispatcher, or no prompt: preserve current behavior.
- Pass values as argv. Do not evaluate a shell command string.
- Do not add router-specific logic to Omarchy.
- Do not add the dispatcher to the default-agent picker.
A controller such as Sabi could use this hook to inspect the repository, active sessions and available harnesses. If it can prove that a request was accepted or started elsewhere, it exits successfully. If the controller is unavailable or uncertain, it returns nonzero and Omarchy launches the configured default agent as usual.
This keeps Omarchy responsible for agent installation, command flags, terminal behavior and fallback handling. The external controller owns routing policy and execution receipts.
Acceptance criteria
- With no dispatcher installed, existing tests and behavior remain unchanged.
- A promptless
omarchy agentlaunch remains unchanged. - A dispatcher can handle a prompt without starting a second agent.
- A dispatcher that declines falls through to the current default-agent case.
- Arguments containing spaces and shell metacharacters are passed safely.
- The hook is documented as an opt-in user extension.
This is deliberately narrower than adding Sabi as another default agent. Sabi can remain an external routing layer, while Omarchy gets a reusable extension point.
View raw text
## Problem Omarchy already has a single launch path for the selected coding agent through `omarchy-agent`. It is used by the keyboard shortcut, `a`, and `omarchy agent prompt`. External controllers can currently integrate through individual harness hooks, but there is no generic way to inspect a prompted request before Omarchy launches the fallback agent. This makes it difficult to build optional routers without adding each router to Omarchy's default-agent list. Related work: - [Custom coding agents discussion #10090](https://github.com/omacom/omarchy/discussions/10090) - [Extensible agent harnesses #10171](https://github.com/omacom/omarchy/pull/10171) - [User usage collector discovery #9602](https://github.com/omacom/omarchy/issues/9602) - [Collector extension PR #12353](https://github.com/omacom/omarchy/pull/12353) ## Proposed extension After `omarchy-agent` resolves the default agent and parses an optional prompt, check for an executable user-owned dispatcher: ```text ~/.config/omarchy/agents/request-dispatch ``` The launcher would call it with argv such as: ```text --fallback-agent claude --cwd /path/to/project --prompt "Review this project" ``` The contract can stay small: - Exit `0`: the dispatcher handled the request. Omarchy exits without launching the fallback. - Any other exit status: continue with the existing Omarchy launch path. - No dispatcher, or no prompt: preserve current behavior. - Pass values as argv. Do not evaluate a shell command string. - Do not add router-specific logic to Omarchy. - Do not add the dispatcher to the default-agent picker. A controller such as [Sabi](https://github.com/vizuh/sabi) could use this hook to inspect the repository, active sessions and available harnesses. If it can prove that a request was accepted or started elsewhere, it exits successfully. If the controller is unavailable or uncertain, it returns nonzero and Omarchy launches the configured default agent as usual. This keeps Omarchy responsible for agent installation, command flags, terminal behavior and fallback handling. The external controller owns routing policy and execution receipts. ## Acceptance criteria 1. With no dispatcher installed, existing tests and behavior remain unchanged. 2. A promptless `omarchy agent` launch remains unchanged. 3. A dispatcher can handle a prompt without starting a second agent. 4. A dispatcher that declines falls through to the current default-agent case. 5. Arguments containing spaces and shell metacharacters are passed safely. 6. The hook is documented as an opt-in user extension. This is deliberately narrower than adding Sabi as another default agent. Sabi can remain an external routing layer, while Omarchy gets a reusable extension point.
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 16:30 UTC