github stablyai/orca v1.4.252

one hour ago

Fork chats from any reply, Plan mode & a faster phone ✨

  • 🗂️ Organize workspaces across machines: Nest workspaces under a folder workspace, including workspaces on other machines.
  • 🌿 Do more with Chat UI: Fork any finished response to try another direction while the original chat stays as it was. In Claude or Codex chats, type /plan to switch to Plan mode, which persists when you reopen the chat.
  • 📱 A smoother experience on your phone: The phone opens and reconnects sooner, scrolls and streams chats more smoothly, reads Markdown and math better, and keeps unsent chat, review and Tasks text across reconnects.
  • 🏠 Start working right away: New profiles open in a folder workspace at your home folder, and "Set up later" opens your default agent instead of asking you to add a project.
  • 🎙️ Better dictation: Pick your dictation language, keep the first and last words, see Listening while the model loads, and get on-device text back about a third sooner.
  • 🧭 Know where a chat runs: The chat composer shows the machine, workspace and branch, and chats show a card for each pull request the agent opens.
  • ⚡ Snappier desktop chats: One chat's status change no longer wakes every chat, the model picker opens without walking every worktree, and long replies stream without re-rendering.

Highlights

  • Chat: Fork from any finished response, use Plan mode in Claude and Codex chats, and open a running subagent from the agents strip. Codex approvals show the proposed files and diffs, OpenCode can ask choice questions, and Claude's built-in server tools show as normal tool cards. Holding Cmd/Ctrl in a busy chat shows what Cmd/Ctrl+Enter will do, app shortcuts work from the chat editor, and oversized pasted images shrink to fit instead of failing. Signed-out OpenCode, Pi and OMP chats offer a Sign in button.
  • Phone: Markdown is easier to read and renders math, GitHub alerts, task boxes and images. Rename a workspace from its menu, see automatic continue and Switch Account on usage-limit notices, and keep chat sends, PR text, review notes and Tasks drafts when a connection drops. The phone dials the relay right away when that worked last time, keeps terminal output across a network switch, and streams busy terminals without falling behind.
  • Agents & accounts: Antigravity Chat can sign in with Gemini Enterprise, reports quota for every saved account and manages accounts inside WSL. orca account can select and remove any saved account. Antigravity IDE joins the Open In presets.
  • Remote hosts: SSH says plainly when a host now serves a different Orca server, disconnects a host whose server you stopped, and honors IdentitiesOnly on manual hosts. Sleeping recipe VMs wake when any client opens them, orca serve can bind to one address, and browsing through a paired server is faster on high-latency links. Browser tabs show when an SSH host is controlling them, with a way to stop it.
  • Source control & Tasks: Phone branch switches are refused with a plain reason when they would move uncommitted work or land mid-rebase. Checks show when they ran and how long they took. Tasks can filter GitHub PRs and GitLab MRs by state and by who wrote or reviews them, and pasted images upload before a GitHub draft is published.
  • Workspaces & plugins: Multi-repo folder workspaces can parent workspaces, and workspaces can nest under parents on other machines. orca plugin installs, updates and removes plugins and manages catalogs, plugin pages show more about their publisher, and look-alike plugin names show who published them.

Compatibility & upgrade notes

  • macOS 13.4 minimum: Orca now needs macOS 13.4 or later (previously macOS 12). Macs on older versions stay on their last compatible build through the in-app updater and see a notice, and Homebrew refuses the upgrade on macOS 13.0–13.3. Any Mac on macOS 13 can update to macOS 13.7 to keep getting Orca updates.
  • Dictation model: The Zipformer EN dictation model is no longer offered. If you had it selected, Orca moves you to Parakeet v2, which you may need to download in Settings › Voice before dictation works.
  • New profiles: Fresh desktop profiles open in a folder workspace at your home folder, named ~. Existing profiles are unchanged. "Set up later" in onboarding now opens your default agent.
  • Pairing codes expire: Unused desktop pairing codes now expire: the phone QR code after 10 minutes and the pair-another-computer link after 60 minutes. Devices that are already paired are unaffected.
  • Chat UI settings: The changed files card and opened pull request cards are now controlled from Settings › Chat UI › Turn activity, as Turn diffs and Opened pull requests.
  • Local browser proxy: The local browser control proxy now requires a per-session token that only Orca's own agent-browser launches receive, so other programs on your machine can no longer use it.
  • Downgrading: Chats that used Plan mode can't be opened by v1.4.251 if you downgrade. They open again after you upgrade back.

Product experience

Native chat & agents

Branch a chat from any reply, plan before building, see where a chat runs and keep long chats fast.

Agents & accounts

Sign in to Antigravity with Gemini Enterprise, manage more accounts and make Antigravity steadier on Linux and WSL.

  • Allow Gemini Enterprise sign-in for Antigravity Chat by @brennanb2025 in #38737
  • feat(antigravity): manage accounts in the selected WSL distro by @nwparker in #39007
  • feat(antigravity): report last-known quota for every saved account by @nwparker in #39005
  • feat(cli): select and remove any saved agent account from orca account by @nwparker in #38944
  • feat(onboarding): install Antigravity in an explicit setup terminal by @nwparker in #39172
  • Fail Antigravity worker readiness fast when agy is signed out by @nwparker in #38901
  • fix(agent-hooks): repair Antigravity hooks after a Windows install or wiped config by @nwparker in #38899
  • fix(antigravity): read quota from the selected WSL runtime by @nwparker in #38985
  • fix(antigravity): say Antigravity Chat isn't available on Windows instead of silently opening a terminal by @nwparker in #38997
  • fix(antigravity): switch agy accounts through the Linux Secret Service keyring by @nwparker in #38996
  • fix(antigravity): wait for agy's composer before pasting continuation context by @nwparker in #38939
  • fix(antigravity): write workspace trust inside the WSL distro an agent runs in by @nwparker in #38981
  • Read an idle Antigravity composer above a custom statusLine by @nwparker in #38930
  • fix(automations): accept Antigravity model and effort extra arguments by @nwparker in #39161
  • feat(settings): add Antigravity IDE to the Open In Apps presets by @nwparker in #39237
  • fix(trust): remove only the Codex and agy workspace trust entries Orca created when a worktree is removed by @nwparker in #38969
  • docs: clarify multi-account setup and concurrency for Codex and Antigravity by @nwparker in #38880

Dictation & voice

Pick your dictation language, keep every word you say and get text back sooner.

  • fix(speech): add a dictation language setting that Whisper, SenseVoice and OpenAI use by @AmoabaKelvin in #39102
  • fix(speech): keep the first words of streaming dictation by @AmoabaKelvin in #39107
  • fix(dictation): keep the last word when you stop dictating by @AmoabaKelvin in #39109
  • fix(dictation): hold-to-dictate keeps what you said when settings change or the window loses focus by @AmoabaKelvin in #39132
  • fix(dictation): handle cloud dictation's 10-minute cap, stalled uploads and bad API keys by @AmoabaKelvin in #39114
  • fix(dictation): show Listening while the speech model loads, and link start toasts to Voice settings by @AmoabaKelvin in #39136
  • fix(speech): send dictation's live text only when it changes by @AmoabaKelvin in #39108
  • perf(speech): decode on-device dictation on up to 4 threads by @AmoabaKelvin in #39104
  • fix(terminal): finish a paste in its terminal when dictation or overlays move focus mid-paste by @AmoabaKelvin in #39112
  • fix(speech): stop offering the Zipformer EN dictation model and move its users to Parakeet v2 by @AmoabaKelvin in #39173

Terminals, performance & updates

Move to macOS 13.4, keep terminal scrollback and zoom, paste file paths and do less work on every switch.

  • fix(packaging): require macOS 13.4, the minimum the on-device speech engine runs on by @AmoabaKelvin in #39135
  • Keep macOS 13.0–13.3 Homebrew users on the Orca they can open by @AmoabaKelvin in #39264
  • fix(release): refuse macOS minimums the update gate cannot map exactly by @nwparker in #38822
  • Remove allow-dyld-environment-variables from macOS entitlements by @vorabrijesh in #37685
  • fix(terminal): keep per-pane zoom when a terminal pane remounts by @mmarabel in #8588
  • fix(terminal): paste copied files as full paths instead of their names by @nwparker in #38970
  • fix(terminal): keep cold-restored scrollback in a tab hidden at relaunch by @nwparker in #38878
  • fix(terminal): retry scrollback anchor restore when xterm clamps after resize by @emmahyde in #38228
  • fix(terminal): read lines that end in CR CR LF instead of returning them empty by @nwparker in #38838
  • fix(terminal): report focus-out to ?1004 programs when their last viewer leaves by @nwparker in #38730
  • fix(windows): reject a failed process-table snapshot instead of crashing the terminal host by @registered2nd in #37820
  • chore(diagnostics): log the three silent paths that drop terminal tabs by @nwparker in #38873
  • fix(shell): parent native file pickers to the window that requested them by @ethznn in #37779
  • perf(terminal): copy the retained transcript window once per output chunk by @OrcaWin in #38482
  • perf(terminal): cut renderer per-chunk classifier cost on coloured output by @OrcaWin in #38489
  • perf(renderer): cut per-store-write selector fan-out and DOM blink churn on switches by @OrcaWin in #38505
  • perf(renderer): derive state instead of syncing it in effects (surfaces) by @OrcaWin in #38797
  • perf(renderer): reset dialog state during render instead of in effects (dialogs) by @OrcaWin in #38803
  • perf: avoid repeated publisher scans during workspace purge by @brennanb2025 in #39232

SSH & remote servers

Explain SSH and server problems plainly, keep remote terminals honest and wake sleeping VMs from anywhere.

  • fix(ssh): leave an unlinked host disconnected, and name it when a project needs its server by @nwparker in #38746
  • fix(ssh): say when a managed host now serves a different Orca server, and drop the Tailscale hint on SSH tunnels by @nwparker in #38745
  • fix(ssh): apply a manual target's IdentitiesOnly setting on the built-in transport by @nwparker in #37926
  • fix(ssh): blame an SSH directory upload failure by cause, not exit order by @nwparker in #38772
  • fix(remote): let Remove drop a managed server saved under two SSH aliases by @nwparker in #39048
  • Move automation run history out of the signed SSH migration manifest by @nwparker in #38718
  • fix(remote): drop a restored agent's row when its server closes the tab by @nwparker in #38758
  • End a remote pane whose session exited before its shell was ready by @nwparker in #38747
  • fix(terminal): adopted daemon terminals take title and output from their stream by @nwparker in #38760
  • fix(terminal): give remote Windows panes the ConPTY resize model by @nwparker in #38715
  • Bind serve-host terminals to their workspace at create so deleting one workspace can't stop another's agents by @nwparker in #38864
  • fix(orcad): a supervised server does not start without its terminal daemon, and orcad defends its instance lock by @nwparker in #38709
  • fix(orcad): keep Snap Chromium profiles where the snap can write by @nwparker in #38843
  • feat(serve): add bind address option by @ddlw in #35095
  • Route federation ack and import over the shared control connection by @nwparker in #38735
  • Let a paired host expand ~ in the paths its terminals print by @nwparker in #38711
  • Open a granted host file the way a workspace file opens by @nwparker in #38742
  • perf(runtime): hash granted file downloads once instead of per page by @nwparker in #38820
  • fix(terminal): a host with a window keeps a pane a paired client moved to a new tab by @nwparker in #38840
  • fix(agent-sleep): a tab a paired client is showing or typing into is in use by @nwparker in #38768
  • fix(workspace): give recipe VM wakes one owner, serialized with suspends by @nwparker in #38842
  • fix(workspace): wake a sleeping recipe VM when a client opens its workspace by @nwparker in #39038

Browser & emulator

Show when a host drives your browser tabs, browse faster through remote servers and find emulator devices quickly.

  • feat(browser): show when an SSH host is controlling Orca browser tabs, and let people stop it by @nwparker in #39212
  • fix(browser): ask a connected desktop to host when open-url finds no browser host by @nwparker in #38762
  • fix(browser): larger tunnel windows for high-latency links, bounded by connection credit by @nwparker in #38839
  • fix(browser): keep screenshots from drawing shifted by the page's scroll offset by @AmoabaKelvin in #38827
  • fix(browser): name the previewed file in HTML preview annotations by @nwparker in #38771
  • fix(browser): ask for Full Disk Access when macOS blocks a cookie import by @gavande1 in #38497
  • fix(browser): keep client hints alive under the temporary tab UA override by @jeky22 in #38046
  • perf(browser): throttle password detector whole-document walks by @nwparker in #38821
  • feat(emulator): group and search the device picker by @gentslava in #36548
  • feat(emulator): remember the last successful device by @gentslava in #36558

Source control & editor

Switch branches safely, see when checks ran and filter Tasks by who wrote or reviews a PR.

Phone & paired devices

Make the phone faster to open, easier to read and less likely to lose what you typed.

Workspaces, sidebar & onboarding

Start new profiles in your home folder, nest workspaces across machines and tidy the sidebar.

  • Open fresh desktop profiles in a ~ folder workspace by @brennanb2025 in #37898
  • Honor agent defaults when setting up later by @brennanb2025 in #38028
  • Let multi-repo folder workspaces parent and nest workspaces, including on other machines by @Jinwoo-H in #38904
  • Nest workspaces under parents on other machines by @Jinwoo-H in #38740
  • Attach existing worktrees to folder workspaces from the CLI by @brennanb2025 in #39018
  • Bound the lifetime of claimed worktree preparations by @brennanb2025 in #38773
  • Keep long setup commands from hiding workspace setup controls by @brennanb2025 in #38824
  • fix(sidebar): highlight the focused chat in workspace card agent rows by @qq2144 in #38367
  • fix(sidebar): include Pinned in collapse all projects by @AmethystLiang in #39145
  • fix(sidebar): keep the selected card's host pill outline visible in dim themes by @nwparker in #39054
  • fix(sidebar): quiet the host pill outline on the selected workspace card by @nwparker in #38841
  • fix(automations): Run now returns the saved pending row; launcher parity by @Jinwoo-H in #38217
  • fix(automations): run lists send byte-bounded previews; Run Details reads one full row by @Jinwoo-H in #38218
  • fix(i18n): translate recent desktop and mobile copy by @AmethystLiang in #39233

Plugins & CLI

Manage plugins from the CLI, tell look-alike plugins apart and keep CLI commands working.

  • cli: add orca plugin install, update, uninstall and catalog list/add/rm by @nwparker in #36647
  • Redesign plugin details with publisher discovery by @AmethystLiang in #39181
  • Show the publisher when two plugins or themes share a name by @nwparker in #39205
  • fix(plugins): ship plugin author typings in packaged builds by @nwparker in #38751
  • fix(plugins): forward editor.merges from isolated guest editor frames by @emaarco in #38546
  • fix(plugins): re-review any plugin whose catalog moves it to another repository by @nwparker in #36643
  • fix(plugins): say that full-access plugins can also control Orca by @nwparker in #37933
  • fix(plugins): warn, not fail, when a language pack translates protected security text by @nwparker in #39187
  • feat(cli): add orca host rm, and clean up after every SSH target removal in main by @nwparker in #38774
  • feat(cli): rename a chat tab with orca chat rename by @AmoabaKelvin in #38719
  • fix(cli): point positional terminal handles at --terminal by @nwparker in #38793
  • fix(cli): use the terminal's worktree when cwd is outside every worktree by @anmol0b in #38086
  • fix(cli): refuse oversized local runtime requests before sending them by @gsxdsm in #37734
  • fix(cli): keep remote read-only commands working when environment usage can't be recorded by @nwparker in #39052

Security & trust

Ask before running code you didn't approve and lock down local servers, files and pairing.

  • fix(hooks): run worktree setup only when its content matches the approved script by @nwparker in #37977
  • fix(hooks): run a created worktree's setup once its own content is approved by @nwparker in #37978
  • fix(hooks): ask before running a committed .orca/issue-command by @nwparker in #37931
  • fix(automations): store the approved setup hash and skip setup when a run's branch differs by @nwparker in #37979
  • fix(setup): review imported setup scripts in a dialog before saving by @nwparker in #37937
  • fix(shell): open linked scripts in the editor and reveal programs instead of launching them by @nwparker in #37930
  • fix(editors): launch Open In editors by id from settings by @nwparker in #37934
  • fix(browser): require a per-session token on the local CDP proxy by @nwparker in #37938
  • feat(runtime): cap unauthenticated WebSocket connections per source and record client source class by @nwparker in #39206
  • fix(pairing): a registry save can no longer put back a device revoked while it was writing by @nwparker in #39192
  • fix(files): restrict staged saves to their owner by @Adolanium in #36343
  • fix(relay): authorize reserve routes before reading request bodies by @Adolanium in #36346

Tests, CI & maintenance

Trim low-value tests, reorganize code by owner, fix e2e specs and maintain CI.

  • test: fail unit tests that run a real agent CLI from PATH by @nwparker in #38961
  • test: remove 1148 low-value IPC and filesystem tests by @OrcaWin in #38817
  • test: remove 1186 low-value Git and IPC tests by @OrcaWin in #38812
  • test: remove 1292 low-value IPC, SSH and workspace tests by @OrcaWin in #38828
  • test: remove 1296 low-value mock and projection tests by @OrcaWin in #38837
  • test: remove 137 low-value automation and account tests by @OrcaWin in #38755
  • test: remove 286 low-value session history tests by @OrcaWin in #38754
  • test: remove 319 low-value daemon and terminal tests by @OrcaWin in #38783
  • test: remove 383 low-value runtime and account tests by @OrcaWin in #38770
  • test: remove 431 low-value profile, daemon, and journal tests by @OrcaWin in #38905
  • test: remove 477 low-value agent and platform tests by @OrcaWin in #38778
  • test: remove 497 low-value mock and projection tests by @OrcaWin in #38846
  • test: remove 507 low-value session and browser tests by @OrcaWin in #38973
  • test: remove 513 low-value persistence and benchmark tests by @OrcaWin in #38922
  • test: remove 52 low-value plugin, checks, and runtime tests by @OrcaWin in #38909
  • test: remove 548 low-value usage and lifecycle tests by @OrcaWin in #38965
  • test: remove 561 low-value mock and projection tests by @OrcaWin in #38881
  • test: remove 594 low-value Codex tests by @OrcaWin in #38775
  • test: remove 599 low-value persistence and migration tests by @OrcaWin in #38913
  • test: remove 607 low-value daemon and terminal tests by @OrcaWin in #38790
  • test: remove 677 low-value mock and projection tests by @OrcaWin in #38885
  • test: remove 697 low-value agent and plugin tests by @OrcaWin in #38932
  • test: remove 859 low-value runtime and account tests by @OrcaWin in #38763
  • test: remove 864 low-value chat and mobile test cases by @OrcaWin in #38871
  • test: remove 872 low-value PTY and shell tests by @OrcaWin in #38943
  • test: remove 987 low-value runtime and Git tests by @OrcaWin in #38799
  • refactor(main): group RPC and orchestration modules by feature ownership by @nwparker in #38813
  • refactor(main): group session lifecycle and journal modules by owner by @nwparker in #38638
  • refactor(renderer): organize launch, workspace, browser and search owners by @nwparker in #38845
  • refactor(renderer): organize terminal PTY transport owners by @nwparker in #39134
  • refactor(terminal): group rendering and parking owners by @nwparker in #39146
  • refactor(terminal): organize input, clipboard, links and completion owners by @nwparker in #39113
  • refactor(terminal): organize PTY connection lifecycle owners by @nwparker in #39188
  • refactor(ipc): remove the unused shell:copyFile handler by @nwparker in #37928
  • refactor(native-chat): split transcript slots under the line limit by @brennanb2025 in #38978
  • refactor(agent-session): share the model-snapshot rules with the phone by @AmoabaKelvin in #39023
  • Resolve workspace lineage parents in one shared module by @Jinwoo-H in #38835
  • test(acp): point the restored-model test at the moved host test fixtures by @brennanb2025 in #39144
  • fix(test): point the ACP restored-model test at the moved host test helpers by @Jinwoo-H in #39140
  • fix(test): follow the terminal RPC module move by @1aifanatic in #39097
  • fix(tooling): point orca.yaml setup and mobile typecheck at moved scripts by @AmoabaKelvin in #38941
  • fix(mobile): point typecheck scripts at the moved typecheck runner by @brennanb2025 in #38925
  • fix(mobile): unbreak main after the speed batch (review test, page budget) by @AmoabaKelvin in #39094
  • ci(e2e): drop the dictation route to a deleted spec by @brennanb2025 in #39149
  • ci(mobile): fix the moved journal file paths that fail the path-literal check by @brennanb2025 in #39133
  • test(agent-hooks): warm encoded PowerShell before timing Windows payload delivery by @nwparker in #39171
  • test(e2e): align GitHub project board spec with click-wake and localized error toasts by @nwparker in #39193
  • test(e2e): answer the close confirmation when closing a disconnected managed SSH tab by @brennanb2025 in #38757
  • test(e2e): check same-path editor models across two real hosts by @nwparker in #39208
  • test(e2e): drive the other-agents permission menu in agent-auto-permissions by @nwparker in #39202
  • test(e2e): fix paired HTML preview link spec after preview links began honoring in-app preference by @nwparker in #39190
  • test(e2e): give each CSV preview its own link in csv-url-links by @nwparker in #39196
  • test(e2e): keep the client-hosted browser tour off the address-bar convergence spec by @nwparker in #39197
  • test(e2e): keep the descendant-kill stand-in's marker path out of argv by @nwparker in #39201
  • test(e2e): measure terminal link tooltip geometry against the pane bottom padding by @nwparker in #39195
  • test(e2e): pair runtime-host recovery spec with two distinct servers by @nwparker in #39198
  • test(e2e): restart the WSL move fence spec from a phase startup recovery keeps by @nwparker in #39200
  • test(e2e): wait for the editor to see each pointer selection before Markdown Find takes focus by @nwparker in #39204
  • test(e2e): wait for the shell-ready deadline after a startup exec by @nwparker in #39203
  • ci: bound every job in pull-request workflows with timeout-minutes by @zanmlakar in #28784
  • fix(ci): run dependency audit when its scanner scripts change by @nwparker in #38819
  • docs: add a security policy pointing to private vulnerability reporting by @nwparker in #38926
  • Update README downloads badge by @buf0-bot[bot] in #38752
  • Update README downloads badge by @buf0-bot[bot] in #39026
  • Update README downloads badge by @buf0-bot[bot] in #39125

New Contributors

Full Changelog: v1.4.251...v1.4.252

Don't miss a new orca release

NewReleases is sending notifications on new releases.