Thank you so much for using Orca and for your continued support! ❤️
Please note: It usually takes 48–72 hours for a landed PR to be released (except P0+ fixes). We have many more exciting PRs and features coming in later versions!
Notable changes
- The sidebar's two create affordances are now one Create menu: Add project sits next to New workspace at every window width, with consistent labels and a keyboard-shortcut hint.
- Structured native chat gains grouped tool batches, execution details, Codex subagent activity,
/clearand/compact, session rewind, resume from Agent Session History, renameable chat tabs, and structured Codex chat on native Windows. - Faster relay connects and reconnects, plus a broad performance pass across the renderer, store, terminals, native-chat journal, Git parsing, and catalog indexing.
Product experience
Workspaces & projects
- Unify sidebar create actions into single dropdown menu by @AmethystLiang in #19375
- fix(ui): keep source control headers readable in narrow sidebars by @nwparker in #19146
- fix(ui): ignore the persistent workspace list when detecting overlays by @nwparker in #18881
- Persist agents sidebar search visibility as pairing-local preference by @AmethystLiang in #19313
- fix(sidebar): reveal collapsed workspaces without clearing filters by @nwparker in #19398
- fix(runtime): stop a first status publication retiring in-flight worktree scans by @nwparker in #19357
- fix(sidebar): label pinned rows with their host on a multi-host sidebar by @nwparker in #19351
- fix: avoid duplicate repository groups during catalog refresh by @kiendle in #19170
Editor, browser & UI
- Recover branch compare on visibility change by @AmethystLiang in #19021
- Seed Cmd-J filter from sidebar scope by @AmethystLiang in #19036
- fix(browser): select full URL on initial address bar click by @Jinwoo-H in #19118
- Improve cmd j ranking by @AmethystLiang in #19005
- fix(gh): log when gh/glab is killed at its deadline by @nwparker in #18555
- fix(cmd-j): pass browser tab ownership into palette search by @nwparker in #18925
- fix: open editor rename after context menu releases focus by @nwparker in #18934
- fix: avoid starting browser helpers just to reset absent sessions by @nwparker in #18952
- fix: preserve renderer browser publication during client-hosted page updates by @nwparker in #18961
- fix(ports): coalesce advertised URL refresh bursts by @nwparker in #19150
- fix(cmd-j): remove duplicate browser ownership inputs by @nwparker in #19172
- fix: fence browser recovery to attach inventory placements by @nwparker in #18910
- fix(editor): support Shift+wheel scrolling in combined diffs by @brohoya in #11756
- Defer inactive browser pages across worktree switches by @AmethystLiang in #19326
- Rank activity status groups by attention level by @AmethystLiang in #19329
- fix(activity): show working agents under "unread only" by giving working turns a read receipt by @AmethystLiang in #19535
- Organize activity menu into filter and view sections by @AmethystLiang in #19547
- Log error details on session kill failure by @AmethystLiang in #19381
Settings & localization
- Add localization for activity view and sidebar by @OrcaWin in #18589
- fix(i18n): drop orphan TerminalPane.minimumContrast entries that broke main static analysis by @nwparker in #19566
Agents & workflow
Agents & native chat
- fix(chat): stop terminal focus recovery from stealing Cmd+C in the Chat UI by @brennanb2025 in #18751
- Add persistent turn-scoped chat activity indicator by @brennanb2025 in #19044
- fix(codex): keep large app-server replies alive by @brennanb2025 in #18590
- fix(native-chat): stop seeding a stray terminal beside a chat create by @brennanb2025 in #19123
- feat(native-chat): offer the link-action popover for chat links by @brennanb2025 in #19130
- fix: restore the full sidebar agent row for structured native chat by @brennanb2025 in #19137
- fix(native-chat): suppress provider user echoes in Claude and Codex by @brennanb2025 in #19136
- fix(native-chat): settle a structured send the provider proves it received after the ack window by @brennanb2025 in #19140
- Show provider activity in chat turn tails by @brennanb2025 in #19055
- fix(native-chat): auto-rename the workspace on a structured chat's first turn by @brennanb2025 in #19138
- Fix native chat completion sorting and restored activity timestamps by @brennanb2025 in #19144
- fix: recognize the kimi-code process as the kimi agent by @Aladex in #18634
- fix(rate-limits): stop reporting Grok usage as 0% when the API omits the percent by @TimothyVang in #17936
- Fix MiniMax China usage routing and credential handling by @weekbin in #14929
- Fix MiniMax credential-expiry reporting, region sync, and refresh by @nwparker in #19250
- fix(native-chat): remember structured chat model and effort picks by @brennanb2025 in #19147
- fix(native-chat): list the slash commands and skills a structured Claude session actually loaded by @brennanb2025 in #19127
- feat(chat): support structured /clear and /compact commands by @brennanb2025 in #19164
- feat(native-chat): resume an Agent Session History row into a new structured chat by @brennanb2025 in #19176
- fix(runtime): apply the structured-chat setting to every RPC caller by @brennanb2025 in #18700
- fix(native-chat): settle structured chat turns stranded by a restart by @brennanb2025 in #19122
- fix(codex): distinguish personal and enterprise accounts sharing an email by @nwparker in #19279
- fix(native-chat): make structured chat tabs renameable by @brennanb2025 in #19153
- feat(native-chat): show Codex subagent activity instead of opcode rows by @brennanb2025 in #18773
- fix(agent-status): stop a stale self-authored agent title from faking a pending question by @brennanb2025 in #19237
- feat(chat): add structured session rewind backend by @brennanb2025 in #19235
- fix(native-chat): stop an unanswered host from reading as one that refuses structured chat by @brennanb2025 in #19321
- fix(native-chat): scope composer file drops to the pane that received them by @brennanb2025 in #19328
- Show native chat message timestamps on hover by @brennanb2025 in #19218
- feat(native-chat): add execution details and tool row identity by @brennanb2025 in #19226
- fix(native-chat): render compaction notices, plan documents, and images by @brennanb2025 in #19228
- feat(native-chat): read a tool batch as a group by @brennanb2025 in #19372
- fix(pi): show input modals as waiting instead of working by @mmarabel in #18836
- Stabilize scrollbar gutter to prevent message list layout shift by @AmethystLiang in #19332
- fix(pi): finish the dialog-wait signal on every surface by @nwparker in #19533
Automations
- feat(orchestration): make multi-agent workflows durable by @Jinwoo-H in #16904
- fix(orchestration): keep worker lineage across app restart (STA-6366) by @Jinwoo-H in #19121
- feat(orchestration): orchestrate native-born structured chat sessions by @brennanb2025 in #18827
- fix(orchestration): recover Codex idle after completion title race by @Jinwoo-H in #19243
- fix(orchestration): avoid full message scans on working terminal titles by @brennanb2025 in #19390
- fix(orchestration): file federated worker mail under the coordinator Run by @Jinwoo-H in #19542
- fix(orchestration): refuse Task re-open under a live worker; allow stop re-issue on a stranded row by @Jinwoo-H in #19551
- Remove settled-worker automatic resume and hibernation fences by @Jinwoo-H in #19544
Terminal & CLI
- fix(terminal): preserve ordinary foreground command names by @nwparker in #18882
- fix: keep macOS shell ownership proof within recovery budget by @nwparker in #18932
- fix: prefer retained provider snapshots during hidden terminal recovery by @nwparker in #18972
- fix: preserve overlay focus during terminal mounting and layout by @nwparker in #18982
- fix: preserve terminal command probes across control frames by @nwparker in #19006
- fix: release floating terminal WebGL contexts while closed by @nwparker in #19000
- fix: eliminate quadratic whitespace trimming during fullscreen scrolling by @nwparker in #19214
- fix: repaint hidden output overflow after answered restore deadline by @nwparker in #18904
- fix(terminal): remount a pane left unbound by a spawn that returned no PTY id by @brennanb2025 in #19223
- fix(xterm): remove scrollback decorations by identity by @bbingz in #13178
- fix: preserve user input during terminal scrollback replay by @nwparker in #19075
- fix: preserve terminal retirement proof across renderer publications by @nwparker in #19002
- fix(terminal): fold-safe CAN/SUB and double-ESC handling in partial-escape tail by @nwparker in #19521
- Fix native PTY I/O failures disabling session termination by @AmethystLiang in #19523
- feat(terminal): make the contrast floor user-configurable (#10754) by @nwparker in #18126
Remote & platform
SSH, relay & remote
- fix(ssh-relay): daemon owns the endpoint credential; a losing start never rotates it by @Jinwoo-H in #19052
- fix: preserve paired host sessions during startup residue cleanup by @nwparker in #18922
- fix: honor remote terminal insertion in the calling client by @nwparker in #18995
- fix: keep paired tab updates live after runtime terminal fallback by @nwparker in #19022
- fix: avoid credit deadlock during large SSH PTY recovery by @nwparker in #19026
- feat(relay): time successful client accepts and control round trips by @Jinwoo-H in #19232
- fix(relay): rehome hosts to their preferred region in either direction by @Jinwoo-H in #19241
- perf(mobile): cut the relay reconnect critical path and admit dead sockets faster by @Jinwoo-H in #19236
- feat(relay): alert on far-cell placement and skewed region hints by @Jinwoo-H in #19253
- revert(mobile): hold the relay reconnect path and cache-first reconnect for a separate mobile pass by @Jinwoo-H in #19265
- relay: give the asia-east2 cells the regional rehome identity by @Jinwoo-H in #19239
- fix(relay): emit pending-conn details to hosts that advertise the capability (cell side) by @Jinwoo-H in #19266
- fix(relay): bound control RTT samples per ping and per flush window by @Jinwoo-H in #19268
- fix(relay-ops): let the rehome trust probe approve the asia-east2 cells by @Jinwoo-H in #19275
- fix(relay): stop rejecting the near region on a cold first probe by @Jinwoo-H in #19233
- fix(relay): attach a phone whose accept straddles a control rebind (desktop side) by @Jinwoo-H in #19238
- feat(relay): log the region probe and name the assigned cell by @Jinwoo-H in #19307
- fix(relay): never cache a region hint from a one-region catalog by @Jinwoo-H in #19349
- fix(clipboard): route runtime-owned SSH image paste through the runtime by @nwparker in #19352
- fix(remote): keep terminal tabs syncing after orphan recovery by @shaharmor in #19065
- fix(terminal): remove host-retired ghost panes in paired remote splits (#17770) by @nwparker in #19365
Windows & WSL
- fix(windows): unblock structured native chat by exposing process creation time by @brennanb2025 in #18986
- fix(windows): reject stale parent PID links in shutdown snapshots by @brennanb2025 in #19149
- fix: recognize working WSL1 without a WSL2 kernel by @nwparker in #19061
- fix: retain MSYS shell descendants in their terminal job by @nwparker in #19068
- feat(windows): enable structured Codex chat on native Windows by @brennanb2025 in #18519
- fix(agent-hooks): guard every Windows missing-target fallback before it reads stdin by @nwparker in #19415
Mobile
- feat(mobile): structured native Claude chat by @brennanb2025 in #18741
- feat: real background push notifications for the mobile app (#8129) by @Jinwoo-H in #18554
- revert: hold mobile push feature for user testing by @Jinwoo-H in #19203
- fix(mobile): stop double-scaling commit timestamps in history rows by @blade035 in #17731
- feat(mobile): draw the last known tab strip while a session reconnects by @Jinwoo-H in #19258
- feat(mobile): draw the last known tab strip while a session reconnects (mobile pass) by @Jinwoo-H in #19281
- feat(mobile): time relay dial stages so diagnostics say where a slow connect went by @Jinwoo-H in #19245
- revert(mobile): pull the relay connect-speed mobile pass pending a smaller, verified re-land by @Jinwoo-H in #19348
Quality & delivery
Performance: interface & workspace
- perf(store): keep the repo list's identity through workspace hydration by @nwparker in #19057
- perf(tabs): keep tab-model identity when reconciliation changed something else by @nwparker in #19063
- perf(mobile): skip the agent-status projection join when nothing changed by @nwparker in #19115
- perf(worktrees): stop worktree removal from replacing maps it never touched by @nwparker in #19058
- perf(selectors): stop two always-mounted selectors allocating per store write by @nwparker in #19113
- perf(store): detect Zustand rerender churn the current audit cannot see by @nwparker in #19059
- perf(agent-status): stop no-op retirements rebuilding the retired-pane-key map by @nwparker in #19142
- perf(worktrees): stop worktree teardown replacing arrays and maps it never touched by @nwparker in #19145
- perf(renderer): avoid per-second spinner animation events by @OrcaWin in #19407
- perf: memoize ancestry when selecting foreground agents by @OrcaWin in #19502
Performance: terminal & remote
- perf(terminals): stop closing a tab from replacing maps it never touched by @nwparker in #19060
- perf(terminals): keep shutdown maps' identity when there is nothing to clear by @nwparker in #19112
- perf(mobile): cut the relay reconnect critical path and admit dead sockets faster (mobile pass) by @Jinwoo-H in #19280
- perf(mobile): open a session with parallel startup RPCs and a pre-warmed terminal engine by @Jinwoo-H in #19260
- perf(mobile): race the direct and relay dials from t=0 on every reconnect by @Jinwoo-H in #19308
- perf(native-chat): bound journal reads during paged catch-up by @nwparker in #19360
- perf(native-chat): preserve historical tool rows while streaming by @nwparker in #19364
Performance: core & infrastructure
- perf: index selected team IDs and choose primary team in one pass by @OrcaWin in #19504
- perf: skip Git-status indexing without eligible editors by @OrcaWin in #19437
- perf: stop filesystem authorization at the first matching root by @OrcaWin in #19438
- perf: index editor ownership and restored workspace projections by @OrcaWin in #19444
- perf: index project table option and iteration order by @OrcaWin in #19476
- perf: stop clone URL discovery at the first usable source by @OrcaWin in #19477
- perf: clone only changed work-item pages by @OrcaWin in #19478
- perf: use counted membership for worker transcript roster twins by @OrcaWin in #19484
- perf: skip sorting when all final automation runs fit by @OrcaWin in #19485
- perf: parse Git history headers without splitting commit bodies by @OrcaWin in #19486
- perf: index forgotten Codex turns for bounded ordinal retention by @OrcaWin in #19488
- perf: cache matched and unmatched Claude usage cwd attribution by @OrcaWin in #19489
- perf: sum omitted workspace sizes without intermediate objects by @OrcaWin in #19491
- perf: index VM feature restoration and precompute sorting identities by @OrcaWin in #19457
- perf: reuse normalized path matchers for batch deletion by @OrcaWin in #19458
- perf: normalize only retained browser history candidates by @OrcaWin in #19460
- perf: index prior memberships during project identity succession by @OrcaWin in #19463
- perf: precompute Jira priority and timestamp sorting keys by @OrcaWin in #19472
- perf: parse external automation dates once per run by @OrcaWin in #19474
- perf: lazily index case-insensitive Windows environment keys by @OrcaWin in #19483
- perf: select highest usage totals without full sorting by @OrcaWin in #19490
- perf: count GitLab diff line prefixes without splitting all lines by @OrcaWin in #19505
Testing & reliability
- test: exercise packaged browser compatibility in scheduled CI by @nwparker in #19157
- test: refresh palette identities and structured-session journal fixtures by @nwparker in #19165
- test: refresh paired palette host-qualified row locators by @nwparker in #19175
- test: cover native Wayland Hangul in isolated CI by @nwparker in #19174
- test(e2e): scope paired preview link checks to confirmation by @nwparker in #18924
- test: await rendered remote agent placement before checking mirrors by @nwparker in #18983
- test: scope selected runtime project assertions to the sidebar by @nwparker in #19003
- test: confirm running-command prompts when closing tabs by @nwparker in #18965
- test: enable software WebGL for Linux CI headful specs by @nwparker in #19001
- test: restore snapshot path before draining hydration FIFO by @nwparker in #19186
- test: return paired browser state from the successful poll by @nwparker in #19189
- test: align worker recovery fixture with ownership policy by @nwparker in #19190
- fix(test): unbreak main — admit the adoption-replay create fixture through the structured-chat gate by @nwparker in #19246
- fix(test): give federation tests a real read-after-write sync barrier by @Jinwoo-H in #19262
- test(relay): prove the pending-conn capability header reaches acceptControl by @Jinwoo-H in #19274
- test(ssh): isolate the MFA fixture from the developer's real ~/.ssh by @brennanb2025 in #19300
- Fix sidebar create menu E2E races by @AmethystLiang in #19448
- test: cover input in five simultaneously flooding SSH panes by @nwparker in #19071
- test: fix automation and browser reconciliation e2e tests by @AmethystLiang in #19530
Release, CI & documentation
- docs(orchestration): never pick a worker model the user did not name by @Jinwoo-H in #19109
- skills: rewrite and trim the seven non-orchestration guides (do not merge without Jinwoo) by @Jinwoo-H in #18724
- fix(ci): stop Android release notes exceeding the GitHub body limit by @brennanb2025 in #19114
- Update mobile 0.0.48 Android download links by @brennanb2025 in #19117
- Revert "skills: rewrite the seven non-orchestration guides to one outcome-first standard (#18724)" by @Jinwoo-H in #19126
- skills: rewrite and trim the seven non-orchestration guides by @Jinwoo-H in #19128
- Restore independent push gateway deployment by @Jinwoo-H in #19225
- Fix push deployment source archive path by @Jinwoo-H in #19231
- Reorganize MiniMax modules and de-duplicate shared test state by @nwparker in #19197
- tools: add a phone-vantage relay connect benchmark by @Jinwoo-H in #19251
- chore(mobile): remove stale max-lines exceptions by @nwparker in #19366
- fix(deps): update desktop parsers for security and bounded resource use by @OrcaWin in #19361
- fix(deps): harden cloud HTTP, WebSocket and build dependencies by @OrcaWin in #19362
- chore(mobile): patch XML parser security in plist tooling by @OrcaWin in #19380
- chore(docs): patch brace expansion resource exhaustion fixes by @OrcaWin in #19382
- fix(deps): update react-i18next for TypeScript 7 and translation parsing by @OrcaWin in #19378
- fix(deps): update DOMPurify for sanitizer and document-context fixes by @OrcaWin in #19377
- fix(ci): read the changed-path list past the first pipe buffer by @nwparker in #19409
- fix(deps): upgrade Electron to 43.6 for startup performance and crash fixes by @OrcaWin in #19369
- Verify failure causality in PR checks fix prompt before making changes by @AmethystLiang in #19435
New Contributors
- @Aladex made their first contribution in #18634
- @weekbin made their first contribution in #14929
- @TimothyVang made their first contribution in #17936
- @brohoya made their first contribution in #11756
- @blade035 made their first contribution in #17731
- @kiendle made their first contribution in #19170
Full Changelog: v1.4.198...v1.4.199