Skip to content

Releases: nornzach/oh-my-pi-gui

omp GUI v0.7.3

Choose a tag to compare

@nornzach nornzach released this 11 Aug 05:51

Changed

  • Live execution state moved into the conversation: todos, plan review, subagents, and the message queue now render as collapsible live cards between the transcript and composer. Todo editing, plan approval and feedback, subagent transcripts, and queue management remain fully interactive.
  • Unified content column: transcript, composer, dock, settings, and management pages now share one centered, viewport-adaptive layout.
  • Global surface unification: content surfaces are transparent over the canvas with hairline separation; color is reserved for navigation, overlays, interaction states, semantic fills, code, and form fields.
  • Unified type scale across chat, tools, panels, settings, dialogs, and layout.

Added

  • Todo change archive: semantic todo-list changes appear as expandable read-only snapshots in the transcript.
  • Cross-lane queue moves between steering and follow-up lanes.
  • Dock height budget capped at 45% of the window height with independent scrolling.

Fixed

  • Responsive conversation sizing: starter cards, transcript, composer, and title bar now shrink to the actual available workspace width without clipping or horizontal overflow.

Removed

  • Todo, Plan, Agents, and Queue workspace-drawer tabs and the composer activity strip. Diff, Files, and Logs remain in the drawer.

Downloads

  • omp-0.7.3-arm64.dmg — Apple Silicon (M1/M2/M3/M4)
  • omp-0.7.3.dmg — Intel x64

Both builds bundle the omp agent sidecar; no separate Bun, Node, or omp installation is required. The builds are unsigned, so first launch may require right-click → Open.

omp GUI v0.7.2

Choose a tag to compare

@nornzach nornzach released this 10 Aug 15:12

Native management, responsive layouts, and reliable updates

Added

  • Dedicated Skills, MCP, Security Center, SSH Hosts, and Updates pages backed by native omp RPC.
  • Scope-aware skill management with full instruction previews.
  • Repository security scans and reusable SSH host management in Settings.

Improved

  • Responsive settings, center content, dialogs, drawers, tabs, and panels across compact and wide displays.
  • Cleaner visual hierarchy with flat page surfaces, restrained status color, fewer borders, and no arbitrary tinted containers.
  • Long Skills/MCP/inventory content uses the available page height instead of a clipped fixed preview.
  • Settings navigation is grouped by OMP capabilities, extensions, operations, configuration, and application.

Fixed

  • Auto-update discovery and error reporting.
  • Dialog stacking, focus ownership, compact-window containment, and reachable footer actions.
  • Blank message/tool bands and inconsistent rendering status treatments.
  • Release publishing now includes architecture-aware latest-mac.yml, ZIP update payloads, and blockmaps for both Apple Silicon and Intel.

Downloads

  • Apple Silicon: omp-0.7.2-arm64.dmg
  • Intel: omp-0.7.2.dmg

The builds are currently unsigned. On first launch, right-click the app and choose Open, or run xattr -cr /Applications/omp.app.

v0.7.1 — Faster tabs & agent views

Choose a tag to compare

@nornzach nornzach released this 10 Aug 04:26

Added

  • Six designed light themes: Porcelain, Linen, Sage Paper, Sakura Mist, Glacier, and Sandstone add distinct low-glare palettes while preserving the complete GUI token contract.
  • Markdown image rendering: assistant output can display remote, data/blob, and local image sources; local files are read through the bounded preload bridge and failures degrade to an explicit fallback instead of an empty block.

Changed

  • Subagent workspace views: the Agents drawer now presents a real parent/child spawn tree plus a graph view, uses the sidecar's concise UI label instead of dumping the full delegated prompt into the heading, keeps completed rows legible, exposes expandable transcripts, and derives elapsed time from the agent's own runtime sample so opening the drawer never restarts the clock.
  • Lower-churn streaming renderer: text/thinking updates are throttled at the presentation edge, hidden or empty rows stay out of the virtual layout, and the transcript follows appended content only while the reader remains near the end.

Fixed

  • Active-tab routing and hydration races: tab status, session hydration, queue/subagent state, approvals, extension UI, composer drafts, and streaming snapshots are now applied only to the tab and session that own them. Fresh tabs can become usable even when their ready event beats the full route wiring, and rapid switches discard stale hydration replies.
  • Long-transcript session switching: switching to a session anchors the transcript at its real end instead of an arbitrary virtualized position, while intentional user scrolling is preserved during subsequent streaming.
  • Composer dispatch isolation: delayed submits, queued shorthand, paste blobs, and restored failures keep their originating tab/session identity and cannot leak into a tab selected after Enter.
  • Chat-tab workspace safety: agent-only drawer tabs and modes are clamped out of tool-free chat sessions instead of showing stale data from the previous agent tab.
  • Unknown subagent statuses: future or provider-specific status strings now degrade to a muted label instead of dereferencing missing metadata and crashing the renderer.

v0.7.0 — Renderer recovery & execution timeline

Choose a tag to compare

@nornzach nornzach released this 08 Aug 15:24

Full Changelog: v0.6.1...v0.7.0

v0.6.1 — Renderer crash recovery & diagnostics

Choose a tag to compare

@nornzach nornzach released this 07 Aug 09:22

Added

  • Persistent, rotating JSONL diagnostics for React, JavaScript, preload, window, renderer, GPU, and utility-process failures.
  • A root-level recovery screen now shows the runtime error and log path instead of leaving an unexplained blank window.

Fixed

  • White screens after Chromium renderer exit now recover automatically, with the exit reason and code recorded before a rate-limited reload.
  • Packaged data fonts are allowed by the renderer CSP, removing a noisy startup error.

Verification

  • 619 tests passed; TypeScript check and production build passed.
  • arm64 and x86_64 bundled sidecars passed their smoke probes.
  • Both mounted DMGs launched with their matching sidecar architecture.
  • Fault injection confirmed renderer exit logging and automatic renderer recovery.

Checksums

  • omp-0.6.1-arm64.dmg: aa95bbd39d1011530c43bd3503153e78eebc34016448f6a2fa38817f439c2c12
  • omp-0.6.1.dmg: d9540d7a54f1d3dce7b9979df525d77121d44e95f77b79fab53a39528dba744c

v0.6.0 — Chat sessions, workspace mgmt, parallel tabs

Choose a tag to compare

@nornzach nornzach released this 07 Aug 08:46

v0.6.0 — Chat Sessions, Workspace Management, Parallel Tabs

Major feature release bringing full TUI parity for session types and workspace organization.

New Features

Chat Sessions

  • Tool-free conversation mode (kind: "chat" in session headers)
  • New-tab menu: Agent (workspace chooser) or Chat (direct tab)
  • Type-isolated switching — agent/chat sessions never mix
  • Trimmed composer (no slash commands, file refs, or queue syntax in chat mode)

Workspace Group Management

  • Right-click workspace headers: pin/unpin (float to top), rename (inline), delete (with confirmation)
  • Workspace aliases persist across restarts

Session Tabs — Full Parallel System

  • Independent sidecar per tab (session, run, queue, subagents fully isolated)
  • Background tabs execute autonomously with streaming dots and done badges
  • State snapshot/restore on tab switch
  • Type-aware switching: cross-kind clicks open new tab of the correct type

Fixes

  • ContextMenu click race: menu items now fire reliably (pointerdown → click listener)
  • Session list churn: 350ms debounced refresh, silent background updates
  • Sidebar ghosting: removed View Transitions artifacts on pin/rename/delete

Downloads

  • Apple Silicon (M1/M2/M3/M4): omp-0.6.0-arm64.dmg
  • Intel: omp-0.6.0.dmg

Open the DMG and drag omp into Applications. Unsigned build: right-click → Open on first launch.


Full changelog: CHANGELOG.md
Monorepo sync: upstream v17.2.10 (125 commits merged)

omp GUI v0.5.1 — Session Tabs Hardening

Choose a tag to compare

@nornzach nornzach released this 06 Aug 11:14

[0.5.1] - 2026-08-06

Fixed

  • Session-tabs hardening pass (full architecture audit + click-through repro): session-file ownership is now tracked pool-wide and duplicate attaches are refused/redirected on every open path — spawn-tab, sidebar/session-picker switch, session-tree "switch to this point", and "open in new window" (a foreign owner's window is focused instead) — closing the double-attach that silently forked transcripts when two sidecars shared one session file. Extension-UI/approval and host tool/URI responses now route to the sidecar that RAISED the request (never the currently-active tab), so answering an approval while viewing another tab can no longer approve the wrong session. Resuming a session into a new tab skips the redundant switch_session when the sidecar already holds it, removing an unconditional-abort hazard for the first typed message. Closing a tab whose sidecar is mid-run now inline-confirms (✓/✕, 3s auto-cancel) instead of silently killing the work; retryPending clears on tab switch; a failed SET_ACTIVE_TAB surfaces an error toast and re-converges from GET_TABS; hydrate clears the zombie streaming bubble when returning to a background-settled tab and re-asserts the subagent subscription; tab chips label by session title with an #n suffix for untitled duplicates.

omp GUI v0.5.0 — Session Tabs

Choose a tag to compare

@nornzach nornzach released this 06 Aug 10:15

[0.5.0] - 2026-08-06

Added

  • Session tabs — multi-session parallelism inside ONE window: each tab owns its own sidecar process (independent session, run, queue, and subagents), so a running task no longer forces a new window — press + in the new tab strip (below the title bar) to start a parallel session next to the current one, exactly the Claude Code / Codex model. Background tabs keep executing autonomously (a tab's streaming dot shows activity; a done badge appears when its run finishes while you're elsewhere); switching tabs snapshots and restores the full session state (transcript, todos, subagents, queue lanes, model state, composer draft) and reattaches the renderer to that tab's sidecar with zero duplicated event listeners. Tabs close individually (releasing their sidecar; pool cap of 10 is now shared across tabs and windows), the busy-session switch dialog now offers "open in a new tab" as the recommended parallel path, and sessions can be opened straight into a new tab.

omp GUI v0.4.1 — Auto-update Flow

Choose a tag to compare

@nornzach nornzach released this 06 Aug 09:19

[0.4.1] - 2026-08-06

Added

  • Auto-update flow: the app now discovers, stages, and applies updates from GitHub Releases end to end. A banner announces new versions ("新版本 x.y.z 已发布") with per-version dismissal; downloads run user-initiated (autoDownload stays off) with a live progress bar (percent + transferred/total, differential via release blockmaps); a "重启安装" prompt applies the staged update via quit-and-install. Settings → 界面 gains an 应用更新 row (current version + manual check + live status). The main-process updater drives a single status machine (idle/checking/available/downloading/downloaded/not-available/error) replayed to every window; OMP_DEV_UPDATE_CHECK=1 + dev-app-update.yml enables the same flow from electron-vite preview for development.

omp GUI v0.4.0 — TUI Parity & Activity Dock

Choose a tag to compare

@nornzach nornzach released this 06 Aug 08:51

[0.4.0] - 2026-08-06

Added

  • Activity Dock — execution state is now visible. A persistent ActivityStrip above the composer shows ➤ 队列 N · 引导 M while messages are queued and 🤖 N 个子代理 ▾ while subagents run, each jumping to its drawer tab; queued messages also render as grey pending bubbles at the stream tail with one-click removal. A new 队列 drawer tab (riding the new get_queue/queue_remove/queue_move/queue_clear RPCs with stable per-lane queue ids) manages both lanes: dnd-kit reorder plus hover-revealed ▲/▼ move buttons and per-item × delete, per-lane clear, count badges. Queue state is pushed live over a new queue_update frame emitted on every queue mutation (enqueue/drain/remove/move/clear), so the strip, panel, and bubbles track drains instantly instead of going stale until the next prompt. Composer mode chips are now stateful (accent + check + live tooltips: plan state, goal objective, loop limit) and the footer gains active-mode badges (计划/目标/循环/vibe/暂停). The agents tab's instance cards are labeled by task/assignment instead of bare type names, with status badges, elapsed time, model, and view-messages/abort/revive actions.

  • Realtime voice, collaboration, and debugger windows complete the last three previously TUI-only interactive surfaces. Voice mode now starts the sidecar's native live controller, streams phase/transcript/audio-level updates, supports mute, and tears down on close; collaboration can host or join editable/read-only relay sessions, display/copy/open share links and live participants, leave cleanly, and expose /collab/join/leave; the debugger console sends the complete DAP action schema through the agent's existing debug tool and renders structured results.

  • Native /btw, /tan, /omfg, and agent pause flows: ephemeral side questions stream outside the transcript and can be copied or promoted into a branch, tangential work dispatches through the background-agent controller, repeated-behavior complaints run the interactive TTSR rule forge, and pause/resume uses a process-wide gate shared by the main turn and subagents.

  • Queue shorthand in the composer (TUI queue-input.ts parity): drafts starting with -> or => show a "➤ Queue" chip, enumerated lists (1. / i. / a. sequences with uniform indent and punctuation) preview a "splits into N" badge, and submitting dispatches one queued message per item — first item prompts with streamingBehavior:"followUp" when idle, the rest follow up, images ride on the first item only. Bare -> with no images warns instead of enqueueing; partial dispatch failures restore the remainder as a renumbered queue draft. The composer auto-inserts a newline after a bare prefix, and items that name extension commands route through prompt (the followUp path would reject them server-side).

  • Backward model cycling (⇧⌃P) now truly cycles backward via the new cycle_model.direction RPC arg (previously it rode the forward cycle as a wire gap).

  • Retry last failed turn (⌥R / palette "Retry Last Turn") now uses the new retry RPC — the server knows what "failed turn" means — replacing the client-side re-send, which remains available as the distinct palette action "Resend Last Message".

  • Native /clear: typed /clear and the palette "Clear Context" action now drop the conversation context in place via the new clear_context RPC (keeping the session id), with the dropped-message count toasted and the transcript/context bar rehydrated. Previously /clear was an alias for starting a new session, and a typed /clear could fall through to the model as literal text while idle.

  • Per-agent abort and revive in the Agent Hub (TUI hub x/r parity): live rows get an inline-confirmed abort, parked rows get a revive, both riding the new abort_subagent/revive_subagent RPCs with translated refusal reasons (advisor read-only, main agent, not found, not parked).

  • Paste "Save as file": the large-paste card's third action now persists the blob into the session's local:// store via the new write_local_paste RPC (agent-side name allocation, multi-window safe) and inserts the local://paste-N.md reference for the agent to read on demand. Falls back to the inline marker on write failure.

  • Large-paste handling (TUI editor parity): pasted text over 10 lines or 1000 chars collapses to a [Paste #N] marker with the blob held in memory and expanded inline at submit time on every dispatch path (prompt, bash, python, queue items). Past paste.largeMenuThreshold lines (default 100) an inline card offers "paste inline" or "attach as wrapped block" (<attachment>) with a head/tail preview; Esc takes the default.

  • Keyboard shortcut top-up: ⌃T toggles thinking-block visibility (via hideThinkingBlock), ⌃Enter sends as follow-up, ⌥M opens the model picker, ⌥A opens the agent hub, and ⌘/ opens a new searchable keyboard-shortcuts panel — which is also the new native home of /hotkeys in the command palette (previously TUI-only).

  • Usage row segments: TTFT (when the message carries it) and an HH:MM message time now render alongside tokens/cost/duration/throughput, honoring display.showTokenUsage.

  • GFM task-list checkboxes now render in markdown (readonly), closing the sanitize gap that stripped <input> tags.

  • Session tree node actions: every node now offers three actions via its corner menu — "Switch to this point" (switch_leaf RPC, TUI tree-selector Enter parity, works on any node and restores the target's draft into the composer), "Branch from here" (user nodes), and "Open in new window" (fork_from RPC: an independent session file containing only the path to that node, opened in a parallel window). Keyboard Enter switches (Shift+Enter summarizes the abandoned branch first).

  • Foreign session import (⌘K → "Import External Session"): a wizard lists Claude/Codex sessions (titles, workspaces, times, message counts), multi-selects, and imports each as a fresh OMP copy via the new list_foreign_sessions/import_foreign_session RPCs — a single import opens it immediately. Sources are never modified; unavailable sources are greyed with the reason.

  • Composer completion chain: the autocomplete menu is now a provider chain (TUI getSuggestions order) adding slash-command argument completion (static subcommands + usage hints, dynamic MCP-server-name/directory candidates via get_command_arg_completions), GitHub #123pr:///issue:// completion, and emoji completion (:smi popup from a lazily loaded shortcode table, :name: inline replace on the closing colon, western emoticons on a terminator, submit-time expansion of stragglers — all gated by emojiAutocomplete). Commands with allowArgs: false close the menu after the name, and a contextual usage hint row shows the command's/subcommand's usage while you type.

  • Ctrl+G editor dialog: a fullscreen CodeMirror editor (markdown, history, soft wrap) for the draft — ⌘↵/Save writes back (expanded paste markers resolve to inline text and their blobs are consumed), Esc with unsaved changes arms a double-Esc discard guard, and an optional button round-trips the content through $VISUAL/$EDITOR via a main-process temp-file bridge.

  • Read-tool grouping (TUI read-tool-group parity): consecutive collapsible reads fold into one card (Read (N) with a ├─/└─ tree, same-file selector merges like path:1-5,7, single reads render ● Read <path:sel>), accreting across assistant messages until visible text/thinking, a non-read tool, or a user message breaks the run. Applies to both finalized history and the live streaming path in full-detail mode (compact mode's ProcessGroup still wins); expanding reveals the individual read cards with full content.

  • MCP server management (Extensions panel): an add-server wizard (stdio/http/sse transports, per-transport fields with validation parity — names may contain :, optional pre-flight connection test) plus upgraded server cards (scope/transport/auth-state badges, command or URL, tool count, expandable last error) with per-card 测试连接 and 重新授权 actions riding the new mcp_add/mcp_test/mcp_reauth RPCs. Connection tests use a throwaway manager and never disturb the live set; reauth drives the existing browser/code dialogs and rejects concurrent flows with oauth_busy.

  • Marketplace management (Inventory panel): add marketplaces by source (https/git/ssh/owner/repo/local path — bare names rejected client-side), refresh with cache-freshness notes, remove behind inline confirm, and install/upgrade/uninstall plugins from an expandable per-marketplace list — all via the new marketplace_action RPC with in-flight states and copyable failure detail.

  • Plugin config editor (Inventory panel): plugin rows open a detail drawer with enable toggle, feature checkboxes, and a schema-driven settings form (enum/chip/KV editors, validated JSON fallback). Server validation errors render under the field without losing your input; secret values are write-only (never echoed); per-field reset restores defaults.

  • Keybinding remapping: the shortcuts panel (⌘/) is now editable — click any remappable row and press a new chord, with user-user conflict errors and shadow-vs-default warnings, per-row reset and reset-all. Overrides are GUI-local prefs (never keybindings.yml), take effect immediately, and survive restarts. Chords require a real modifier so typing is never hijacked.

  • Launch profiles (Settings → 启动配置): per-workspace sidecar launch flags — system prompt / append prompt, extra directories (native picker), tool whitelist, no-rules / no-LSP / plan-yolo, profile, session dir, config overlay — with a truthful effective-command-line preview and a busy-aware "restart now" action. A 12-flag denylist guarantees code-controlled flags (--session, --mode, …) can never be smuggled in.

  • Markdown code line numbers: an optional gutter for code blocks in assistant messag...

Read more