keyboard-first minimal gui for the oh-my-pi
coding agent, in a desktop window
- background sessions
- git review with commit history and inline comments
- markdown, syntax highlighting, and rich diffs
- file attachments with image previews
Two things are different from upstream: the agent behind the UI, and how it ships.
- Backend is oh-my-pi.
omp-shim/re-implements the@earendil-works/pi-*surface on top of omp, andbun run shim:link(part ofdevandbuild) swaps the packages insidenode_modules, because a plain install restores the pi tarballs and drops the links. The shim is why/lists omp's builtin commands and why/btwcan answer a side question without touching the session. omp reads~/.ompfor its native modules and provider credentials, so oh-my-pi has to be installed and signed in. - It ships as one Linux AppImage with the server inside.
desktop/is a Tauri v2 shell: an undecorated window with its own title bar and File/Edit/View/Help menus, which starts the compiled Bun server as a sidecar on a free loopback port and owns its process group. Closing the window takes the server, its terminals and its headless Chrome with it; nothing is left behind. - Workspace panel on the right: file tree, real terminals, and a browser tile fed by CDP screencast frames from a headless Chrome, so the agent's own browsing is visible and clickable. Width is draggable and remembered.
- Session list grouped by workspace folder, collapsible, and noticeably faster to switch (click to paint about 200 ms, down from about 870 ms).
Linux x86_64. Needs a WebKitGTK 4.1 runtime (
webkit2gtk-4.1),fdfor file search, and Google Chrome for the browser tile.
curl -fsSL https://raw.githubusercontent.com/Lowell137/omp-ui/main/install.sh | bashThat puts the AppImage under ~/.local/share/omp-ui, links omp-ui into ~/.local/bin,
and adds a desktop entry. install.sh --uninstall removes all three;
bash install.sh <tag> installs a specific release.
bun install
bun run dev # server on http://127.0.0.1:31415
bash desktop/package-appimage.sh # -> ~/Downloads/omp-ui_0.1.0_amd64.AppImageThe AppImage step needs a Rust toolchain and appimagetool. cargo tauri build fails in
its own linuxdeploy stage on this host, so the script finishes packaging by hand.
Fork status: bun run lint and bun run check still report failures coming from the shim
and from SDK type drift between pi and omp, so the upstream Verify workflow is not enabled
here.
oh-my-pibehind theomp-shim/bridge, on top ofpi-uidatastarkita-jsxpierre-diffs
The AppImage above already runs the server inside itself. To use the browser UI without the desktop window, run the server directly:
bun install
bun run devthen open http://127.0.0.1:31415. bun run build compiles it
to a single dist/omp-ui executable, and omp-ui service install runs that one now and
at login (omp-ui service uninstall removes it).
requires bun 1.4+
bun ci
bun run devomp-ui stores its configuration in:
- linux:
~/.config/omp-ui/config.json - macos:
~/.config/omp-ui/config.json - windows:
%APPDATA%\omp-ui\config.json
all options with their defaults:
{
"$schema": "https://raw.githubusercontent.com/Lowell137/omp-ui/main/config.schema.json",
"autoTitle": {
"enabled": true,
"models": [
"openai-codex/gpt-5.6-luna:minimal",
"opencode-go/deepseek-v4.1-flash:off"
],
"prompt": "use lowercase"
},
"codeTheme": {
"dark": "pierre-dark-soft",
"light": "pierre-light"
},
"fonts": {
"mono": "system",
"sans": "system"
},
"gitView": {
"changesRatio": 0.5,
"gitPaneRatio": 0.5,
"layout": "split",
"mode": "all",
"reviewSidebarWidth": 272,
"tab": "git",
"wrap": true,
"workspacePanelWidth": 560
},
"keybindHints": true,
"keybinds": {
"new-chat": "ctrl o",
"new-temporary-chat": "ctrl alt o",
"resume-session": "ctrl r",
"previous-session": "ctrl ^",
"command-palette": "ctrl k",
"toggle-minimal-mode": "alt m",
"toggle-tool-output": "alt o",
"switch-model": "ctrl l",
"cycle-model": "ctrl p",
"cycle-thinking": "alt t",
"cycle-thinking-backward": "alt shift t",
"toggle-thinking": "ctrl alt t",
"toggle-review": "ctrl g",
"change-workspace": "ctrl /",
"cycle-model-backward": "ctrl shift p",
"toggle-sessions": "ctrl b",
"focus-prompt": "alt p",
"focus-conversation": "alt c",
"focus-sessions": "alt s",
"focus-workspace-files": "alt f",
"focus-workspace-changes": "alt g",
"focus-workspace-editor": "alt e"
},
"minimalMode": false,
"sessionSidebar": {
"collapsedWorkspaces": ["/home/me/tmp"],
"open": true,
"width": 288
},
"toolOutputHidden": false,
"toolbarHidden": false,
"updateCheck": true
}| key | action |
|---|---|
| ctrl/⌘ k | command palette |
| alt p | focus prompt |
| alt c | focus conversation |
| alt f | focus workspace files |
| alt g | focus git changes |
| alt e | focus file or diff |
| alt s | focus sessions |
| j / k or ↑ / ↓ | move or scroll focused pane |
| gg / G | top / bottom |
| ctrl/⌘ o | new session |
| ctrl/⌘ alt o | temporary chat |
| ctrl/⌘ 1–9 | switch session |
| ctrl/⌘ ^ | previous session |
| ctrl/⌘ r | session picker |
| ctrl/⌘ b | toggle session sidebar |
| ctrl/⌘ / | workspace picker |
| ctrl/⌘ g | toggle workspace |
| ctrl/⌘ l | model picker |
| ctrl/⌘ p | cycle favorite model |
| ctrl/⌘ shift p | cycle favorite model back |
| alt t | cycle thinking level |
| alt shift t | cycle thinking back |
| ctrl/⌘ alt t | toggle thinking blocks |
| alt m | toggle minimal mode |
| alt o | toggle tool output |
| / | slash commands |
| @ | file picker |
| alt enter | queue follow-up |
| alt ↑ | restore queued text |
mit