Skip to content

Repository files navigation

Disparchy Ask screen with a multiline prompt, selected providers, and stacked Clear and Send actions

Disparchy

One prompt. The checked providers answer together.

Write one prompt, choose the providers, and compare their answers side by side. Disparchy brings local AI CLIs and compatible HTTP endpoints into one focused panel.

Omarchy Quickshell Version License

Plugin id: dkfiander.disparchy · Install: ~/.config/omarchy/plugins/dkfiander.disparchy/
Repo: DonnieFi/Disparchy · Architecture: docs/architecture.md


The idea

You keep one prompt. Each checked provider runs on its own with its own model, and a failure in one column leaves the others running. The Ask screen gives the prompt room, with Clear above Send and Cancel taking Send’s place while a run is active.

Provider Talks to Default
Claude claude sonnet
Codex codex exec CLI default
Grok grok CLI default
Antigravity agy CLI default
Cursor cursor-agent CLI default
OpenClaw gateway on port 18789, or the local node. An API key uses POST /v1/chat/completions CLI default, or openclaw/default with a key
Hermes hermes chat --oneshot. An API key uses POST /v1/chat/completions Hermes default, or hermes-agent with a key
Ollama http://127.0.0.1:11434 URL editable in Setup
LM Studio http://127.0.0.1:1234 URL editable in Setup

The first five providers are shown on the bar by default. Change that in Setup, where providers sit in two columns with status, endpoint, and enable controls. Auto-paste is a Setup preference and starts off. Model lists come from each CLI when you open the panel. Token counts are estimates based on character count divided by four.

Disparchy dispatch mark in light and dark colours

The dispatch mark carries the idea in one shape: one prompt opening into three answer lanes. The bar and panel header use the same mark, recoloured by the theme. Light and dark SVG/PNG files live in assets/dispatch-mark.

History stores past runs locally. Comparison cards render common Markdown and grow with the answer. When the grid is taller than the screen, the result area scrolls vertically. The screenshot above shows the blank Ask screen; the image below previews the theme-aware dispatch mark.


Install

Plugins run unsandboxed inside your long-lived omarchy-shell process. Only add repos you trust. Read the QML and bin/ before you enable this one (Omarchy shell plugins).

omarchy plugin add https://github.com/DonnieFi/Disparchy.git --enable
omarchy bar move dkfiander.disparchy --section right

From a checkout, ./install copies the files the shell loads into ~/.config/omarchy/plugins/dkfiander.disparchy. A symlink is replaced. An existing copy is refreshed. It stages in a new private directory (mktemp -d) beside plugins/ and removes only that directory, so nothing that existed before the run is deleted. Runtime state under $XDG_STATE_HOME/omarchy/dkfiander.disparchy/ is left alone.

./install
omarchy-shell shell rescanPlugins
omarchy plugin enable dkfiander.disparchy

After installing or updating, run omarchy-restart-shell.

Validate:

omarchy plugin validate .
# or
omarchy plugin validate ~/.config/omarchy/plugins/dkfiander.disparchy

Open:

omarchy-shell shell summon dkfiander.disparchy '{}'

QML changes need a shell restart. The runner is a new Python process on each send, so bin/disparchy-run updates without one.

omarchy restart shell

A locked session refuses that restart.

Optional key. The plugin does not write this for you. Put it in ~/.config/hypr/bindings.lua. Super+Shift+M is Omarchy's Music key, so Disparchy uses A. If A is already ChatGPT, unbind it first.

hl.unbind("SUPER + SHIFT + A")
o.bind("SUPER + SHIFT + A", "Disparchy", "omarchy-shell shell toggle dkfiander.disparchy '{}'")

Usage

Action How
Open or close Click the dispatch mark, or Super+Shift+A if you added the bind. Esc closes
Ask Type a prompt. Enter or Send compares replies; Shift+Enter adds a line
Arm a provider Check its box. The arrow opens the model list
Setup Setup shows or hides providers on the bar. Click the status word to sign in
History History lists past runs. Back returns to the prompt
Auto-paste Setup → Auto-paste clipboard fills an empty prompt when the panel opens. Off by default
Clear Clear empties the prompt and hides the current answers. Dim when there is nothing to clear
Cancel Cancel shows while a run is in flight. Pending columns become cancelled
Read an answer Markdown formatting is shown in each result card, which grows with the answer. The result area scrolls vertically when the grid is taller than the screen. Copy keeps the original text

A checkbox arms that provider for the next send. Setup decides whether the provider appears on the row at all. HTTP rows stay available when enabled, even if the server is down.

Status words on a Setup row:

Word Meaning
install CLI is not on PATH
sign in CLI is installed and the local probe says signed out
open CLI is ready. Click to launch it
gateway OpenClaw's gateway on 127.0.0.1:18789 answered
local node OpenClaw is installed and the gateway is down
reachable Ollama or LM Studio answered
endpoint down The HTTP URL did not answer

Sign-in opens a held terminal, xdg-terminal-exec, with that CLI's login command. HTTP rows have no login launch.

The header pill reads Idle, N armed, N running, Setup, or N saved.

The footer reads in N · out N · ≈ N this run · ≈ N saved. Each column ends with ≈ N out.


Configure

Bar-widget settings, also stored in shell.json under the widget entry:

Key Default Notes
timeoutSec 90 15–300, per provider
historyMaxRuns 50 10–200
modelClaude sonnet Used when you have not picked a model
modelCodex empty Empty means the CLI default
modelGrok empty Empty means the CLI default
modelAntigravity empty Empty means the CLI default
modelCursor empty Empty means the CLI default

Which providers are on the bar, which models you picked, and whether auto-paste is on, live in selection.json. That file is not in the widget schema.

Runtime state lives under $XDG_STATE_HOME/omarchy/dkfiander.disparchy/. When that variable is unset, the directory is ~/.local/state/omarchy/dkfiander.disparchy/. Nothing here is written into the plugin tree, because the shell watches that tree and reloads on every write. Only bin/disparchy-run reads and writes API keys.

File Purpose
selection.json Armed models, enabled providers, HTTP URLs, autoPaste
auth.json API keys for OpenClaw and Hermes. Only the runner reads and writes this file, at mode 0600. It refuses a symlink or a file readable by group or others
history.json Past runs
prompt.txt The prompt file each send reads
status.json Last provider probe. Rewritten by the panel

Remove

omarchy plugin remove dkfiander.disparchy

That disables and removes the installed plugin. Runtime state under ~/.local/state/omarchy/dkfiander.disparchy/ is left alone. Delete that directory if you want a clean slate.


Dependencies

Need Required? Notes
Omarchy 4 / Quattro + Quickshell yes Bar widget host
Python 3 yes bin/disparchy-run, stdlib only
wl-paste and wl-copy for auto-paste and copy Text clipboard
claude, codex, grok, agy, cursor-agent optional Each one you want on the row
openclaw optional Gateway on port 18789, otherwise the local node
hermes optional Must already be the real CLI. A stub installer at that name will run on Send
Ollama or LM Studio optional HTTP. Defaults above

Missing CLIs show as install. They are not send errors.


IPC

Target dkfiander.disparchy.

omarchy-shell shell summon dkfiander.disparchy '{}'
omarchy-shell shell hide dkfiander.disparchy
omarchy-shell dkfiander.disparchy open
omarchy-shell dkfiander.disparchy close
omarchy-shell dkfiander.disparchy toggle
omarchy-shell dkfiander.disparchy setup
omarchy-shell dkfiander.disparchy history

The panel does not register a second IPC handler. Open, close, show, hide, and toggle are on the bar widget.


How it works

prompt.txt  ──►  disparchy-run --cli … --prompt-file …
                      │
        ┌─────────────┼──────────────┐
        ▼             ▼              ▼
   local CLIs     HTTP POST     OpenClaw
                      │
                      ▼
              one column each

Up to six providers run at once. A seventh waits for a free slot. Cancel stops the queue. Columns already running finish or time out on their own.

The runner never passes --force, --yolo, --always-approve, or --dangerously-skip-permissions. It does not read ~/.grok/auth.json. An OpenClaw or Hermes API key stays in auth.json. The runner finds that file itself and, when a key is saved, puts it on the Authorization header. Setup's key field is write-only: Save runs disparchy-run --set-key <cli> with the text on stdin. copy hands the answer to wl-copy on stdin, not as an argument. The prompt never appears on a command line: Claude, Codex, Cursor, and Antigravity read it from stdin, and Grok, OpenClaw, and Hermes read the prompt file. Codex runs as codex exec --skip-git-repo-check -, because $HOME is not a trusted git directory.

Command lines, the selection file, and the caps are in docs/architecture.md.


Versions

Version lives in manifest.json only. Releases bump it, add a CHANGELOG.md entry, and should be tagged vX.Y.Z.


Credits

Built for Omarchy / Quickshell. The header, status pill, and tabs follow Lanarchy.

MIT. See LICENSE.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages