Orca changelog
Back to Orca34 releases since September 2026 · GitHub releases, checked Oct 26, 2026
1.4.240Latest
This release gives the built-in browser searchable history, makes agent activity easier to follow, and improves recovery across chats and remote terminals. You’ll also find Lean and Zig syntax highlighting, support for larger quick-command collections, and a new orca ports command for finding your dev servers.
- Conversations that stay with you: Claude chats now show turns made outside Orca. Retained messages return after reconnect without reopening the chat, and crash recovery no longer guesses that a sent message was undelivered.
- A browser with a better memory: Search your browsing history, reopen pages, remove unwanted suggestions, and clear history with Undo. Pages can also use files you pick, save or drop through File System Access.
- Remote work with fewer interruptions: Slow connections survive missed wake probes, reconnect notices explain what is happening, SSH terminals wait for sign-in, and new splits stay on the paired server.
- Agent status you can trust: Completed Codex subagents stop showing as Working, running main tasks stay visible through /side conversations, and Codex MCP tools that require approval get an approval card.
- More room for your workflow: Save more than 40 quick commands, find a worktree’s detected dev-server ports with orca ports, and reclaim old dependency installs and build output from development worktrees.
- Polish where it counts: Lean and Zig highlighting, clearer session-search excerpts, smoother Mac trackpad scrolling in terminal apps, and better protection for unmerged branches and worktrees shared between Windows and WSL.
Phone & web updates: Updating Orca on the computer serving your phone or browser updates the served interface. This release also keeps running Codex tasks visible on paired and mobile views during /side conversations and fixes browser-picked or dropped chat attachments uploading to the paired server.
- Native chat (experimental): Update paired and SSH hosts alongside Orca for the latest chat, agent-status and launch fixes. Codex’s new approval cards cover MCP tool approvals that do not require form fields; general MCP forms and URL-based verification are not supported by this change.
- Browser history: Open History from the page menu, or use Cmd+Y on macOS and Ctrl+H on Linux and Windows. Search, remove individual entries, or clear the last hour, today or all time, with Undo for clearing.
- Detected ports: orca ports supports workspace selection and JSON output on runtimes with host-scoped port scanning. Direct SSH hosts do not support detection yet; native folder workspaces require --all to list the host’s listeners.
- Development cleanup: Manual pnpm reclaim-space and automatic cleanup on development launches can reclaim ignored, untracked dependency installs and generated output in old sibling worktrees, using a default 30-day cutoff. Selected, invoking and excluded worktrees remain protected. Stop sibling apps, agents, installs, builds and tests before applying manual cleanup; reclaimed installs and output need reinstalling or rebuilding when used again.
- Terminal file links: The earlier change to open a file link in the workspace where it was clicked was reverted in this release.
Native chat (experimental)
*Catch up on conversations, reconnect without extra steps, and answer agent prompts with clearer controls.*
- Show turns made outside Orca in an existing Claude chat
- Show retained chat messages after reconnect without reopening the chat
- Keep sent messages from being falsely marked undelivered after a crash, and stop scanning the transcript on every reopen
- Show approval cards for Codex MCP tools that require permission
- Submit Claude question-preview answers with Enter
- Match terminal pane split and close menus in chat
- Display unknown HTML tags as text instead of dropping them
- Alert the orchestration coordinator when a chat worker errors
- Deliver follow-ups to running Codex goals using the choices the goal inherits
- Upload chat attachments picked or dropped in a web client to the paired server
Agent activity & integrations
*See the task that is actually running, keep completed work settled, and launch agents with the right session and settings.*
- Record Stop immediately and settle subagents when their exit is confirmed
- Clear stale Working status for completed Codex subagents
- Show reference-origin icons and native-chat origins in the sidebar
- Retain completion subtitles for paired workspaces
- Remove Claude teammates stopped with TaskStop from the sidebar
- Keep agent questions visible when a stale program report says Working
- Preserve running-agent hook status through idle title repaints
- Restart initial agent-detection probes when their results are invalidated
- Keep Codex status tied to the main task through /side chats after restart
- Keep a running Codex turn visible on paired and mobile views while /side is shown
- Resume Claude panes whose environment scrubbing removed their pane identity
- Find Antigravity’s usage command in the same environment used to launch agents
- Refresh OpenCode credential status after saving
- Read Kimi Code 2.x usage from its scoped OAuth configuration
- Bound retries when generating an agent’s first-work name
- Prevent Claude agent-hook runs from creating phantom subagent rows
- Accept OpenCode release ranges when selecting a launch-time model
- Preserve concurrent edits during a remote Hermes reinstall
- Keep a cold-restored terminal’s agent session without showing an old Done status
- Attribute shared Hermes gateway events to the correct session pane
- Let branded Pi forks reach launch readiness by setting their initial session title
- Preserve a fresh agent’s chat identity when an older shell title arrives
- Mark a Pi answer unread before the compaction that follows it
- Back off Antigravity usage reads that trigger browser sign-in
- Let paired hosts plan terminal-agent launches from the composer
Browser
*Find a page again, manage what appears in suggestions, and use web apps with local files more naturally.*
- Add searchable browsing history, removable suggestions and Chrome-style Escape behavior in the address bar
- Let pages use files picked, saved or dropped through File System Access
- Render dark-scheme documents on a dark canvas in previews
- Refresh browser profiles changed outside the window without a reload
- Keep a closed host page from lingering as a window-saved browser tab
Terminals & remote connections
*Type, scroll, split and reconnect with fewer interruptions, while keeping sessions on the host where they belong.*
- Wait for SSH sign-in before starting a terminal opened during authentication
- Start a split on the paired server even when it follows immediately after opening a tab
- Keep slow remote connections open when a wake probe is missed
- Show one reconnect notice per server, explain the cause, and account for measured connection latency
- Reattach remote panes on the host’s next snapshot after a host-exit settlement
- Remove an exited original pane on paired clients consistently with split panes
- Record why remote connections closed in app diagnostics
- Preserve terminal output and parsing order through resizes
- Avoid republishing session tabs on every Codex thread-name spinner tick
- Keep keys typed before a pane’s terminal is ready
- Keep Mac trackpad flicks continuous in full-screen terminal apps
- Prevent “104;255” from leaking into agent prompts after a tab switch
- Recheck previously missing paths so terminal file links become clickable
- Prevent terminal creation from reviving tabs that were already closed
- Restart shell panes in split agent tabs as shells
- Report when a terminal has stopped accepting input instead of claiming delivery
- Answer background terminal startup queries while the paired view is paused
- Limit Reconnect & Delete to the selected SSH workspace
- Move managed SSH tunnels away from saved local ports that cannot be bound
- Match SSH conversion manifest signing to the host’s parsing
- Stop paired desktops from republishing mirrored editor tabs
- Keep probed host capabilities available after host-status updates
- Prevent a server liveness check from mistaking its own shell for the server
- Allow different workspaces to sleep at the same time without failing
- Add opt-in proxy connection reuse for system SSH on Windows
- Start managed servers with a smaller V8 young generation
- Respect both configured and cell-reported relay connection limits
- Move relay hosts off an isolated cell while its replacement starts
- Use a consistent numeric locale for POSIX agent-hook curl timeouts
- Remove eager regex lookbehind from paired web routes for browser compatibility
Source control, workspaces & Windows / WSL
*Keep project actions on the right host, protect branches and worktrees, and let cold WSL distributions finish starting.*
- Recognize GitLab SSH-over-443 remotes
- Recognize Bitbucket remotes using ssh.bitbucket.org
- Preserve Source Control section collapse state
- Back off failed GitLab authentication probes
- Hide stale merged PRs after the workspace HEAD changes
- Protect worktrees created by the other Git installation on Windows or WSL from pruning
- Include the registry addon when relocating the Windows daemon host
- Retry Git reads after transient wsl.exe service errors during distro startup
- Keep the worktree watcher from interrupting a cold WSL distro’s boot
- Avoid synchronous WSL home-directory probes at startup and premature termination of a booting distro
- Preserve unmerged branches even when they have no net file changes
- Use the paired server’s own repository ID when an SSH row shares its path
- Search and offer Linear issues from the same host in Create worktree
- Remove flags that Kimi Code rejects from Source Control AI commands
Developer tools & everyday polish
*Find running dev servers, keep larger command collections, and make the small interactions feel more considered.*
- List a worktree’s detected dev-server ports with orca ports, including workspace selection and JSON output
- Explain that direct SSH hosts do not support port detection yet
- Reclaim old dependency installs and generated output across sibling worktrees with manual cleanup
- Include old worktree installs and generated output in automatic development cleanup
- Save quick-command lists with more than 40 entries
- Keep long quick-command dropdowns responsive with virtualization
- Improve Resource Manager tab sizing and sort PTYs by workspace activity
- Keep search highlights visible in long session excerpts
- Enable Lean syntax highlighting
- Highlight Zig source files and diffs
- Group Copilot sessions under their workspace in AI Vault, using the original prompt as the title
- Preserve transient AI Vault panel state
- Restore focus after renaming a floating tab
- Dismiss notifications without closing modal editors
- Reveal full shortcut titles on hover
- Accept normalized Markdown save confirmations from Linear
- Keep localized sidebar Send controls from overlapping
- Report conflicts with shortcuts consumed first by the main process
- Show workspace names in the resume dialog while workspaces load
- Handle dashboard pop-out readiness while the window is hidden
- List a web client’s paired server once in automations
- Explain when headless terminal creation cannot find a workspace
Tests, builds & maintenance
*Broader behavioral coverage across platforms, remote connections, persistence and mobile; fewer redundant tests; and continued module organization. Local affected-test runs also cache loaded dependencies.*
<details> <summary>All test, build and maintenance changes</summary>
- test: exercise real platform, provider, and spool boundaries
- refactor: colocate remote runtime passthrough socket
- test: strengthen hook lifecycle and transcript boundaries
- test: remove workflow string checks and strengthen provider assertions
- test: strengthen stateful assertions and remove redundant checks
- refactor: colocate remote runtime error classification
- test: strengthen hook, navigation, and release coverage
- test: strengthen hook, release, and mobile transport coverage
- refactor: colocate structured session cancellation contract
- refactor: colocate remote runtime socket cleanup
- refactor: colocate orcad migration tests and fixtures
- test: expect legacy failure reads to reuse the published display
- refactor: colocate persistence settings and automation tests
- test: remove duplicate coverage and strengthen boundary assertions
- Fix main lint: move native-chat adapter error classes into their own file
- test: consolidate UUID coverage and verify input boundaries
- ci: use grep instead of rg in dependency audit prep
- refactor: group Parcel watcher child process ownership
- test(e2e): stop restarted serve hosts with SIGTERM so the PTY daemon survives
- ci: fail when a checked-in test file has no runner
- test: consolidate redundant checks and strengthen boundary coverage
- test: consolidate duplicates and strengthen behavioral boundaries
- test(chat): respect frame ownership after creation protection expires
- test: consolidate image-send coverage and repair contract assertions
- test: consolidate refusal cases and repair boundary coverage
- refactor(renderer): group session tab activation and cancellation
- test: remove duplicate mobile coverage and strengthen regression assertions
- refactor(renderer): group GitHub task mutation owners
- feat(telemetry): count Windows-drive WSL repos with WSL-made worktrees
- test: trim redundant cases and repair session and hook assertions
- refactor(renderer): group GitHub task read and refresh owners
- test: remove redundant cases and strengthen session boundary coverage
- test: trim duplicate assertions and repair restore and document coverage
- test: trim duplicate search coverage and strengthen file and image assertions
- refactor(runtime): group session teardown and tab ownership
- test: remove redundant cases and strengthen browser and attachment coverage
- test: strengthen RPC cancellation, release rejection, and mobile prompts
- test: strengthen runtime, harness, and mobile review coverage
- refactor(shared): group native-chat stream and provider rules
- test: repair GitHub, native preparation, and shared assertions
- test: consolidate capability inventories and strengthen runtime assertions
- refactor(shared): colocate Jira rules and direct imports
- test: tighten parser completion and mobile transport assertions
- test: consolidate duplicate coverage and repair weak assertions
- test: consolidate duplicate assertions and strengthen runtime checks
- test: strengthen transport, status, and permission assertions
- refactor(codex): colocate app-server protocol owners
- test: repair benchmark runners and strengthen policy boundaries
- test: strengthen routing, scheduling, and session assertions
- refactor(persistence): colocate terminal topology tests
- test: remove duplicate capability coverage and strengthen boundary assertions
- refactor(persistence): colocate workspace and repository tests
- test: remove synthetic compatibility checks and strengthen workspace coverage
- test: trim redundant checks and strengthen workspace persistence
- test: trim redundant checks and strengthen retained coverage
- refactor(persistence): colocate loading and security tests
- test: remove shallow capability checks and repair boundary assertions
- refactor(persistence): colocate test fixtures and harness
- test: remove ineffective checks and strengthen settings and notifications
- test: remove ineffective checks and strengthen persistence and mobile coverage
- refactor(tasks): colocate source summary hook
- test: remove ineffective cases and strengthen behavioral coverage
- refactor: colocate Task Page source availability hook
- test: repair behavioral coverage and remove export inventory
- refactor: group browser cookie source modules
- test: exercise real mobile controller and repair weak assertions
- test: repair masked coverage and remove five low-value checks
- test: repair masked assertions and remove eight low-value checks
- test: expose masked assertions and consolidate duplicate checks
- test: strengthen persisted state, terminal, and mobile assertions
- refactor: group repository execution settings
- test: replace weak checks with behavioral coverage
- refactor: group runtime session ownership
- test: strengthen persistence, session and failure-result assertions
- test: remove redundant cases and strengthen state-transition assertions
- refactor: group cookie import orchestration and cleanup
- perf(test): cache local dependencies for affected Vitest runs
- test: remove redundant cases and strengthen persistence, terminal and mobile checks
- test(agent-hooks): warm Windows PowerShell before timing hook launchers
- Revert "fix(terminal): a file link opens in the workspace it was clicked in"
- Test AI Vault title-only search fallback
- test(e2e): click a managed SSH terminal link only after the terminal refits beside the browser
- test: remove redundant cases and repair audit assertions
- test(runtime): a deadline-free PTY read stops at its cap while newer listings keep overtaking it
- test(file-watch): wait for the coalesced refresh instead of a 250ms clock
- test: run every suite that opens profile-state SQLite under Node
- test: delete the PTY pane-copy census
</details>
- @anmol0b made their first contribution in
- @lorenzozanee made their first contribution in
- @MimeLyc made their first contribution in
- @degisftw made their first contribution in
- @davidgarciab made their first contribution in
- @m-a-king made their first contribution in
- @1aifanatic made their first contribution in
- @febyeji made their first contribution in
- @siddiqueirshad made their first contribution in
- @ivermin1123 made their first contribution in
- @Shy7777 made their first contribution in
- @thefrikidude made their first contribution in
1.4.239
Two releases today! Check out the v1.4.238 release notes too. That release brought shared unsaved edits across workspaces, richer agent chats and remote account setup, a more capable browser, and smoother phone controls.
Set up agent skills in one click, keep browser sessions separate between projects, and move more easily between chat and terminal. This release also strengthens the essentials: shared files stay in sync, SSH sessions recover more reliably, and phone interactions feel more predictable.
- Skills, ready wherever you work: Install Orca’s skills in one click from setup screens, and install or update them on paired servers and SSH hosts with Orca’s own installer.
- A browser that fits your projects: Choose shared, per-repo or per-workspace profiles for new tabs. Keep local app logins separate, use a familiar page context menu, and get clearer explanations when a page cannot load.
- More fluid agent conversations: Split into a fresh chat beside your current one, continue with a terminal agent from the pane header, and keep queued messages and multiple image attachments intact.
- Safer edits, quieter background work: Shared file views stay current after undo and discard. Non-UTF-8 files ask before conversion, file watching recovers after slowdowns, and Orca watches fewer unrelated files.
- Remote work with a way back: Recover supported managed SSH servers from a stale lock in Settings, restore terminals after password sign-in, and keep a paired server’s SSH access link through restarts.
- Better from your phone: Tapping a notification opens the agent that sent it, agent chat tabs can start dictation, terminal copy commands reach the phone clipboard, and Android scrolling keeps the keyboard out of the way.
- Everyday polish, across languages: Better Korean input, Bengali and other Indic terminal rendering, more complete translations, Jira user pickers, and PR comment links that jump straight to the editor.
Phone updates: Updating Orca on the computer serving your phone updates the served interface. Native download, progress and navigation improvements require an updated native phone app.
- Browser profiles: Choose Settings → Browser → Profile for new tabs. Shared remains the default; per-repo and per-workspace profiles apply to new tabs. Paired-server pages use the server’s own profiles.
- Native chat (experimental): Update paired and SSH hosts alongside Orca for the latest chat and launch fixes. Chat availability now checks the chat runtime separately from the terminal CLI, including supported Antigravity setups.
- SSH recovery: Recover server… is available for supported managed Linux SSH hosts reporting a stale-lock refusal. It checks the lock and asks you to confirm that no other machine sharing that home is running Orca before clearing it. Phones point you to desktop Settings.
- Experimental groundwork: Connector work remains behind the off-by-default experimentalConnectors flag. The layout-owner groundwork remains disabled. The empty-group launch actions and child-workspace status toggle were reverted before release.
Agents, skills & setup
*Get agent skills onto the machines where you work, with clearer launch choices and startup feedback.*
- Update Orca's skills with Orca's own installer instead of npx skills
- Install and update Orca's skills on paired servers and SSH hosts
- Install Orca's skills with one click on every setup screen
- Chat agents are offered wherever their chat program runs, not only where their CLI is installed
- Explain agent startup failures in plain words
- Agents: store each agent's permission itself; terminals and new chats read it
- Apply paired host preferences to launch menus
- fix(agents): + quick launch on a paired host uses the desktop's launch settings
- Negotiate agent launches with paired runtimes
- Pair structured launches with the CLI runtime
- Keep agent environment values with spaces when the field loses focus
- Retain managed WSL selection across distro casing
- Allow independent hidden account restarts to progress
- Start the default agent in the first folder added after skipping onboarding
- Read Cursor Unified Ultra current-period quotas
- Show OpenCode provider quota failures as usage limits
- Keep Claude weekly usage from jumping back to an idle session’s old value
- Refine Agent Dashboard lifecycle handling
- Respect completed setup when CLI registration is unavailable
Native chat (experimental)
*Keep conversations moving, split off a fresh chat, and reach pane actions without leaving the conversation.*
- Split into a fresh chat beside the current conversation
- Add terminal-style pane header actions
- Send pi and acp messages after a model-only change
- A missing claude or codex cli no longer stalls the model picker on every open
- Keep every image chip when several images are dropped at once
- Show spelling suggestions when right-clicking chat inputs
- Continue the chat when a background subagent wakes an idle parent
- Retain unlisted reported Codex models
- Keep queued messages in the chat's own record, so a refused one can't be skipped
- Allow inline visuals to declare open
- Preserve accepted command outcomes across agent startup
- A nested claude -p no longer takes over its parent pane's status
- Keep a finished turn done when the agent reports an approval at idle
- Show task names for Codex subagents
Browser
*Separate project sessions, open links where you expect them, and get clearer page controls and recovery.*
- Per-repo or per-workspace browser profile for new tabs
- feat(browser): Chrome-style page context menu and DevTools window shortcuts
- Say why a page failed to load and reload it when it can
- Open links beside their pane, focus link tabs, honor window.close()
- Markup controls sit below the page in a mobile viewport instead of covering it
- Remove browser tab favicon drop shadows
- Open local html file links in the browser link routing picks
- Remote tunnel matches Chromium for IPv6 bypass rules and <-loopback>
Phone
*Reach the right agent, dictate from chat, and keep terminal gestures and clipboard actions predictable.*
- Tapping a phone push opens the agent that sent it
- Start dictation from agent chat tabs
- Keep the android keyboard closed when you scroll or swipe the terminal
- Send multi-line chat messages as one bracketed paste
- Copy OSC 52 terminal writes, like Claude Code's /btw copy, to the phone clipboard
- Decode page-bundle download windows natively
- Download only the page assets the cached generation lacks
- One download bar whose fill follows progress on the native driver
- The shell returns to a screen already on its stack
- Finish bundle downloads over slow links with smaller ranges
- Keep a terminal tab's chat identity while its handle is unchanged
- Add Copy path beside Copy in mobile Markdown footer
- Improve contrast of mobile Markdown copy buttons
- Keep mobile agent icons visible on retained routes
Editor, files & performance
*Keep every view of a file current and reduce unnecessary background work.*
- Every view of a shared file stays current after undo or discard, and non-UTF-8 files ask before converting
- Saving a file, then closing that tab mid-save, no longer leaves its other tabs looking clean (STA-11786)
- File watching rides out a slow system instead of restarting, and turns itself back on after a cooldown
- Watch only the files Orca needs in its settings folder and .git, instead of the whole folders
- Open files dragged from the explorer in the target editor group
- Keep paragraphs starting with "Dr.", "A." or "iv." out of ordered lists
- Render authored Markdown breaks as rich-editor line breaks
- Let Cmd/Ctrl +/- zoom an open image
- Resume media previews from their last playback position
- Retain explicitly opened directory symlinks during refresh
- Keep readable documents after traversal errors
- Preserve requested line across Preview teardown
- Collapse mirrored Markdown aliases with shared backing identity
- Scope runtime connection and parking subscriptions
- Bound per-write chat selector work and guard ownership scans
- Prepare separator variants once per query
- Decode image and encrypted reply bytes without character arrays
- Avoid redundant CRLF normalization when syncing Monaco
- Avoid full-recording copies when encoding dictation
- Accumulate MJPEG chunks instead of re-joining partial frames
Terminals, SSH & remote servers
*Recover interrupted remote work and keep terminal output, file links and workspace lifecycle actions dependable.*
- feat(ssh): Recover server for a managed host refused on a stale lock, and surface that refusal in seconds
- Add --reclaim-stale-lock for a lock no start can judge after a reboot on a shared home
- Allow SSH migration recovery without stopping preserved relay terminals
- Restored SSH terminals recover after password sign-in
- Keep a paired server's SSH access link across its restarts, and let it relink
- Preserve runtime recovery steps
- Never block or over-read on an SSH identity file
- Never present a half-built synchronized-output frame on reveal or recovery
- A timed-out CLI split names its pending pane, and a retry can never re-run its command
- fix(terminal): Cmd/Ctrl+click opens the clicked path on a paired server when more paths follow
- A file link opens in the workspace it was clicked in
- Resolve Markdown file destinations before bare paths
- Verify an exact stop through an overlapping liveness inventory
- Scope daemon inventories for safe worktree teardown
- Clear route proof during synthetic exits
- Retire predecessor exit evidence on replacement
- Scope launch-session verdicts to managed environments
- The browser client advertises the desktop's chat capabilities, so its host opens chats
- Main runs workspace sleep; the window follows (P3b)
- Targeted resume of a recorded agent session, sharing an in-flight claim with pane resume
- End a resume claim when the hook store reports it, not at the next claim
- A slept server run opens its own tab from a paired desktop
- Add main-owned project move pause barrier
- Stop the terminal host scope from looping systemd with uresourced on Fedora
- Keep Linux controls readable when their positions stall
- Keep Windows tree termination at normal scheduling priority
- Offload macOS deletion spawns and reduce branch cleanup
- Preserve binary output through termination barriers
- Shape Bengali and other Indic clusters in the WebGL renderer
- Focus the neighboring pane when a split pane closes
Projects, source control & integrations
*Jump from reviews to code, fill Jira user fields, and keep project actions tied to the right work.*
- Open pr comment file:line locations in the editor
- Pick Jira users for required Reporter and custom user fields
- Import JiraUser from its real module in the issue user field
- Find issues and #N in the new-workspace gitlab source
- Fix GitHub PR auto-merge eligibility
- Retain authentication guidance for push failures
- Reject cached same-branch PRs with foreign heads
- Preserve workspace PR history during automatic cleanup
- Unify single and multiple PR hover details
- Refresh automation run history before opening a run
- Explain unsupported and unresolved worktree parents
- Show activity status with worktree-style counts
- Retain the imported project group target
- Show Remove Project label in PR panel for main worktree
- Label hosted reviews per provider in the space-manager panel
- Treat HTTP 404 as no-PR in the hosted-review branch lookup
- Resume workspace cycling after closing the last tab
- List issue comments oldest first
- Keep submitted comments cleared
- Retain session row measurements while hidden
- Finish SSH-signed commits without hanging
- Close the board when a right-sidebar tab is clicked
- Include undated Cursor sessions in time filters
Language, accessibility & interface polish
*More natural text input, clearer translations, and controls that work better with touch and assistive tools.*
- Send on the Enter that commits a Hangul composition
- Submit on the Enter that commits Korean in every text field
- Complete six locale catalogs and include community Portuguese translations
- Translate recent UI copy
- Describe Korean descendant sleep as closing panels
- Correct Chinese technical mistranslations
- End autolinked urls at CJK punctuation in chat, terminal and mobile
- Render CJK bold that ends in punctuation in desktop and phone chats
- Switch workspaces when accessibility tools press a sidebar row
- Use focusable tooltip menu triggers
- Reveal project header actions on touch devices by @buf0-bot[bot] in
- Align multiline filter toggle row text and icons to top-left
- Shimmer stale reference metadata without layout shifts
Tests, builds & maintenance
Dependency security fixes, broader regression coverage, release-build improvements and continued cleanup.
<details> <summary>All maintenance changes</summary>
- refactor: colocate Jira favourite-filter contracts
- Let a worker start helpers on the Run it works for
- refactor: colocate repository Jira project settings
- refactor: colocate repository worktree defaults
- refactor: colocate repository AI persistence queue
- refactor(runtime): share the phone push's terminal-agent turn news
- refactor(automations): share the idle agent-turn completion rule
- refactor: colocate Linear list-scoping owners
- Track transcript content truncation across session readers
- refactor: colocate relay assignment admission owners
- Stop reviving a session outside the cell's map, keep the seat feed on live sessions, and log demote outcomes
- Add Orca's own bundled-skill planner and installer (not wired in yet)
- docs(chat): explain structured sessions and conversation handoffs
- Exclude root development configs from desktop packages
- Reject unsupported renderer-owned tab properties
- Preserve rename boundaries in React Doctor gate
- Main lints and typechecks again after #32018
- Reject ask waits above the documented 30-minute maximum
- Reject task messages for another implicit Run
- Show launch actions in empty tab groups
- docs: condense test anti-pattern guidance
- refactor: colocate repository draft input and tests
- test: consolidate discovery coverage and replace copied oracles
- test: retire copied oracles and implementation inventories
- test: remove classification inventories and verify settled boundaries
- test: keep explicit regressions without legacy algorithm copies
- ci: avoid slow Ubuntu mirrors during WebKit setup
- Show child workspace statuses in the children toggle
- [comment audit] Shorten preload comments
- test: trim redundant coverage and track comprehensive audit
- test: drain guarded saves before fixture cleanup
- refactor(renderer): colocate Task Page pagination rules
- Bundle Zod once per isolated Vitest invocation
- Use incremental tsrs locally and update Bun to 1.4.4
- test: trim redundant coverage and fix vacuous assertions
- Retain ambiguous unit-test import consumers
- test: exercise real boundaries and trim redundant cases
- Retain full coverage for shared unit runtime inputs
- test: audit delayed replies and database boundaries
- refactor(jira): colocate status error parsing with Jira owners
- Retain TypeScript project input consumers
- ci: move Linux package and relay jobs to the Blacksmith pool
- test: audit CLI output and deferred delivery boundaries
- ci: speed up full unit shards with eight-core workers
- [comment audit] Shorten process-host comments
- test: audit CLI dispatch and mobile host boundaries
- [comment audit] Shorten CLI parsing and host-routing comments
- [comment audit] Shorten remaining CLI root comments
- ci: record WSL provisioning and cleanup lifecycle receipts
- ci: warm the Windows 2025 native cache used by WSL
- [comment audit] Shorten CLI handler comments
- [comment audit] Shorten CLI runtime and command-spec comments
- ci: move WSL Linux producers to the Blacksmith pool
- [comment audit] Shorten top-level main process A–G comments
- test: strengthen CLI, ACP, mobile web and CI coverage (audit 7)
- [comment audit] Shorten top-level main process H–K comments
- ci: verify indirect unit input ownership in shadow selection
- ci: move the SSH mobile producer to the Blacksmith pool
- test: strengthen CLI, lifecycle, bundle and build coverage (audit 8)
- [comment audit] Shorten top-level main process L–O comments
- Revert "fix(workspace): show launch actions in empty tab groups"
- Revert child workspace status summary toggle
- [comment audit] Shorten persistence and PTY root comments
- Resolve security advisories across desktop, mobile, and docs
- test: strengthen hook delivery, CLI and mobile shell coverage (audit 9)
- test: clean up structured session prompt hook fixture
- refactor(task-page): colocate repository selection modules
- ci: route PR headless change detection off hosted queue
- [comment audit] Consolidate completed code comment cleanup
- ci: move routine checks and unsigned builds to Blacksmith
- refactor(task-page): colocate Linear composition modules
- ci: send dependency review notices to release Slack
- refactor(jira): colocate shared contracts and capabilities
- test: keep Activity search contracts without operation counters
- test: reduce mobile relay integration startup imports
- refactor(terminal): split terminal-file-open-routing.ts back under the line limit
- Record renderer long-task measurements
- test: avoid unrelated application startup in shutdown suites
- test: verify terminal chunk yields without waiting for Enter delay
- test: retain moved-code gate behavior without replace counters
- test: reuse maintenance worker setup for compatibility cases
- test: reduce editor ownership test startup with existing slice fixture
- chore(deps): apply reviewed maintenance updates and record full audit
- docs: remove checked-in audit documents and artifacts
- Patch vulnerable Zod collections in mobile and docs
- Count region selection on every assign lane, fallback only for new placements
- Spill onto a reserve seat in either region before relay_capacity_exhausted
- refactor: group remote runtime requests and subscriptions
- Let roll tooling read a reserve-mode cell and count its drain
- [comment audit] Continue main-process comment cleanup
- test: strengthen hook, build, and mobile lifecycle coverage
- refactor(shared): group remote runtime shared-control lifecycle
- test: strengthen CLI expectations and consolidate repeated scenarios
- Consolidate structured status projection at each host feed
- test: remove copied inventory and strengthen CLI, preload, and Cloud boundaries
- refactor(worktrees): remove unreachable legacy worktree list IPC
- refactor(rate-limits): remove unreachable setPollingInterval and refreshMiniMax IPC
- refactor(dashboard): remove unreachable popout spawn/sleep IPC
- test: verify runtime delivery and remove real-time socket waits
- Resolve body-parser and happy-dom security findings
- refactor: remove four unreachable preload IPC bridges
- test: replace hook shape checks with execution and delivery assertions
- chore(ipc): remove unreachable hooks:createIssueCommandRunner IPC
- refactor(ipc): remove unreachable runtime-environment provisioning and control-retry IPC
- ci(windows): route real installer probes by changed inputs
- test: verify hook delivery and exit cleanup through observable state
- refactor(shared): colocate remote runtime Tailscale guidance
- test: strengthen retirement controls and remove redundant waits
- refactor(agent-status): reuse the shared bounded-string guard
- test: tighten hook and relay coverage and consolidate launcher checks
- refactor: colocate remote runtime connect bound
- test: replace self-fulfilling checks with production boundary assertions
- [comment audit] Clean up IPC, host lifecycle and native-chat comments
- Refu…
1.4.238
This release makes it easier to move between agents, files, browsers and remote machines. Tabs of the same file now share unsaved edits, native chats pick up turns made elsewhere, and the phone gets more dependable terminal gestures and richer tab controls.
- Your edits stay together: Tabs of the same file share unsaved text across workspaces. Conflict review sees that live text, workspace deletion lists unsaved files, and stale Markdown or notebook edits no longer overwrite newer work.
- Chats that keep up: Codex and Pi show turns made outside the chat. Long pastes can become text attachments, Codex questions get answer cards, and OMP gains image sending and actionable plan-review cards.
- More control over agents: Pick chat or terminal when creating a workspace, set that choice for your default agent, add Claude and Codex accounts on supported remote servers, and install shared skills for 11 more agents.
- A more capable browser: A workspace-aware new tab, address-bar suggestions, remembered site permissions, per-site appearance and zoom, and page-loading progress on desktop and phone.
- A smoother phone experience: See agent activity in tabs, rename with a double-tap, scroll back through earlier chat messages, select terminal text more naturally, and return to your terminal reading position after resuming.
- Better visibility and recovery: Inspect local terminals in Resource Manager, use plain SSH when a host’s move to an Orca server is blocked, and keep pairings through managed-server updates and recovery.
- Everyday polish: Brazilian Portuguese, language selection during onboarding, searchable release builds, clearer history-scan progress, and Resolve with AI for paused merges, rebases and cherry-picks—even after file conflicts are fixed.
Phone updates: Updating Orca on the computer serving your phone updates the served interface. The new Home → New Workspace entry and native iOS dictation fixes require an updated native phone app; the home-screen entry ships with the next app build.
- Remote accounts: Update the paired server for the new Claude and Codex Add Account flow. Windows servers and older hosts retain the orca account add guidance. Credentials stay on the server; remote re-authentication of an existing account is outside this change.
- Native chat (experimental): Update paired and SSH hosts alongside Orca for the latest chat fixes. Agent version checks now accept newer releases and prereleases that meet the required minimum; a known older version shows update guidance.
- Resource Manager: The new PTYs view covers local terminals. Ending a terminal requires host support for verifying the selected session; older hosts refuse unchecked termination.
- HTML files: Opening HTML in preview by default was reverted for this release.
- Experimental groundwork: Layout-owner and sidebar changes listed below remain disabled. Connector configuration is off by default, and the new optional agent-write controls have no existing callers enabled.
Native chat (experimental)
*Continue conversations across chat and terminal, answer agent questions, and share images and long prompts more easily.*
- Show turns made outside Orca in an existing Codex chat
- Show turns made outside Orca in an existing Pi chat
- Attach long pastes as text files and flag oversized messages before sending
- Codex async questions show an answer card on desktop and phone
- OMP's plan review shows as a plan card you can answer from desktop and mobile chat
- Questions over 16 KB show their card with every option
- OMP chats send images; an ACP agent's own startup answer decides
- Keep newer agent versions and eligible prereleases available for chat, with clear guidance when an installed version is too old
- Keep model choices coherent across Claude updates
- Typing fast after focus moves keeps keys in order
- Retire ghost queued continuation bubbles
- Show a prompt hook's block as its own row for every agent
- A cancelled approval card closes even when the journal was briefly full
- Open inline images directly in preview dialog
- Handle inline image preview edge cases
- Set minimum width for native chat table cells
- Gate draft image ownership checks by local attachments
- Avoid repeated skill catalog scans while building the picker
Agents, accounts & skills
*Choose chat or terminal when starting work, add accounts on a remote server, and install shared skills for more agents.*
- Choose chat or terminal CLI in Create worktree, Create folder and continuation pickers
- Set the default agent to open as a chat or a terminal CLI
- Add Claude and Codex accounts on supported remote servers from a paired desktop
- Restart WSL Claude panes after an account switch
- Install shared skills for 11 more agents and stop Qoder listing skills twice
- Preserve Cursor identity across imported Claude hooks
- Renaming a terminal no longer hides its running agent
- Route OMP question cards to terminal
Phone: tabs, chat & workspaces
*Read earlier messages without losing your place, see agent activity in the tab strip, and keep workspace actions on the right computer.*
- Tab strip shows terminal and chat agent state, reveals the next tab, renames on double-tap
- Load earlier chat messages on scroll-up, keeping the reader's place
- Phone terminal and chat tab names match the desktop
- Closing the tab a phone shows returns it to the tab it viewed before
- Keep closed terminal tabs from reappearing after quick closes
- New Tab drawer reopens with its agents and refreshes them when desktop does
- Keep a Codex chat on screen when Codex shows its idle title on a headless host
- Floating-panel chats started from a phone show on the desktop
- Mobile chat composer uses desktop's placeholder
- Attach Codex images when agent identity is missing
- Refresh chat file suggestions when the desktop connection changes
- Load the right agent history when you switch computers
- Prepare Home’s New Workspace drawer; the home-screen entry requires the next native phone app build
- Open Create Workspace after source drawer closes
- Detect New Workspace agents in the selected repo runtime
- Load folder workspace agent presets on the correct host
- Keep your setup-script choice when the repository list refreshes
- Warn about agents that cannot wake on a windowless server only when the workspace has sleeping agents
- Recover workspace features after temporary connection checks fail
- Keep selected mobile options visible while locked
- Announce locked picker notice on iOS
Phone: terminals, voice & touch
*Select text more naturally, return to the same reading position, and keep scrolling, dictation and keyboard input dependable.*
- Drag terminal selection with the long-press finger
- Select Unicode words at rendered cell boundaries
- Keep terminal scroll gestures from becoming taps
- Preserve prompt taps after terminal scrolling
- Start phone terminal scrolling without a timer delay
- Retain terminal reading position after resume
- Prevent stale terminal sizing and stream callbacks from affecting a newer phone session
- Clear old touch gestures before replaying a terminal snapshot
- Cancel stale shortcut list drags
- Preserve native iOS dictation placeholders
- Restore dictation after iOS audio interruptions
- Mount sessions with saved preferences
- Terminal settings show the saved "When you leave the mobile app" choice
- Render offline Nerd Font symbols on first terminal display
- Apply desktop terminal WebGL rendering fixes on phone
- Fill the background below the final terminal row
- Keep terminal wait feedback visible with a draft
- Terminal Paste says why when nothing is pasted
- Handle Android terminal keyboard chords in OTA sessions
- Remember your latest choice for opening terminal links
- Keep newer quick-command edits when an earlier save finishes
Phone: files, reviews & connections
*Keep drafts with their files, preserve recent edits, and recover more clearly from connection and loading failures.*
- Keep review-note drafts with the file they belong to
- Keep generated commit messages in the workspace that requested them
- Show Retry when a commit's changed files fail to load
- Refresh open subfolders and keep deeply nested filenames visible
- Keep a closed branch preview from reopening when loading finishes
- Keep the notification switch from flipping back after you enable it
- Stop a slow connection save from sending you back twice
- Use port 443 for explicit WSS host edits
- Distinguish delayed connection deadlines from unreachable hosts
- Speed up phone diff-review note lookup by file path
Browser
*Open a workspace-aware new tab, find sites from the address bar, and control permissions, appearance and zoom per site.*
- New tab page with a workspace card and suggested sites
- Chrome-style new tab and address bar suggestions
- Allow/Block prompts for site permissions, remembered per site
- Per-site appearance and zoom, from the page menu and Cmd/Ctrl +/-/0
- Show every page load, link clicks included, as a line along the address bar on desktop and mobile
Editor, files & source control
*Share unsaved text across tabs of the same file, protect edits during saves and workspace removal, and get help with paused Git operations.*
- Keep tabs of the same file in sync with one shared record of unsaved edits
- Show a file’s live unsaved text from any workspace in read-only conflict review
- List unsaved files before deleting a workspace, and refuse removals that would lose them silently
- Offer back unsaved edits when a workspace is removed without a prompt
- Let saves finish safely and keep discarded text off disk after Don’t Save
- Stale delayed edits in notebook and rich Markdown views no longer overwrite newer text
- Guard autosave, skip identical writes, and avoid autosaving non-UTF-8 files
- Parse remote .tsx files correctly and keep their imports on the remote host
- Combine untracked files into Changes
- Offer Resolve with AI for paused merge, rebase, and cherry-pick
- Polish explorer search layout and collapsible filters
- Avoid repeated suffix scans for unfinished wiki links
Terminals, SSH & remote servers
*Inspect local terminals in Resource Manager, reconnect more reliably, and keep remote pairing and account changes intact.*
- Inspect local terminals in Resource Manager’s PTYs view and end a selected terminal after host verification
- Every start in a deleted folder opens at the workspace root and says so
- Repaint desktop after phone fit ends
- Repaint an idle full-screen program when a reconnect can't image its pane
- Copy from remote Codex panes to the viewing device’s clipboard
- Fix terminal URLs split across padded output rows
- Link a framed multi-row URL when an overlay shows through
- Settle a restored remote pane whose host session already exited
- Set ORCA_WORKSPACE_ID in every terminal Orca starts
- Set ORCA_WORKSPACE_ID in WSL terminals too
- Keep desktop take-back from stale phone input
- Release remote streams when the renderer reloads
- Share this host: only offer addresses the server actually answers (no dead IPv6 links)
- A managed host's 'no desktop is sharing its browser' error names the browser routing setting too
- Name what blocks an SSH host's move, and offer Move anyway in the terminal pane
- Open a plain SSH terminal to a host whose move to its Orca server is blocked
- Say what plain SSH is for beside its button, and polish the plain SSH window
- Resolve repository SSH hosts consistently when routing runtime actions
- Use consistent connect, Update and Force decisions for SSH and WSL servers
- Keep the enrolled pairing across a managed server's update, rollback and recovery
- Prove an unrecorded orcad by kernel identity before adopting it
- Pair again from the distro when a WSL host refuses the enrolled token
- Editing project groups no longer marks a moved host as changed
- Stop floating terminal metadata from blocking SSH access links
- Prevent new terminals during a server stop and protect rollback and restart transitions
- Name a missing shared library when the pinned Node runtime can't start
- Ship computer use with the server and say when it is unavailable
- Stabilize remote host status bar during retries
- A workspace created on a paired server shows one set of default tabs when the same path exists on another host
- Open the stdio bridge without re-probing the distro's platform
- Keep the server bundle ASCII so V8 stores it at half the size
- Avoid repeated scans while finding PR URL schemes in terminals
History, settings & everyday use
*Search larger projects, follow history scans, choose your language during setup, and find release builds more easily.*
- Project search works for projects with hundreds of worktrees
- Pi and OMP keep their own agent on a transcript they both list
- Keep Session History checking totals fixed throughout a scan
- Show per-agent Session History reading progress
- Repair only the damaged parts of a profile instead of rolling back the whole profile
- Add search to the release build list
- Add Brazilian Portuguese UI localization
- Add onboarding language selection
- Preserve system language in both experiment cohorts
- Recover language selection after rejected catalog loads
- Restore localized editor safety copy
- Correct Korean sleep with descendants wording
- Clarify Japanese phone control and connection wording
- Preserve runtime entries after removing untracked settings
- Dim terminals and chats on the unfocused side like editors
- Remove directional tab-close actions and tracking
- A confirmed close of a pinned tab in a server workspace closes it instead of snapping back
- Label re-sent held tab closes as replays
- A worktree card fetches its Linear issue again only when the issue or its source changes
- Remove redundant host badges in every grouping
- Honor "only when desktop is away" on headless orca serve
- Reserve push database capacity so notification delivery can finish
- Keep busy-device notification checks on their database index
- Use database range indexes to bound push-notification retention work
- Avoid decoding Qoder history records twice
- Bound history scope-cache batch enumeration
- Speed up session updates by indexing stable layout records
- Limit buffered worker subprocess output without dropping bytes
- Record a daily aggregate WSL usage snapshot on Windows
Tests, builds & maintenance
*Release and security updates, plugin fixes, performance work, broader checks and continued module cleanup. The disabled groundwork below does not enable the new layout or sidebar behavior.*
- HTML preview by default was added and then reverted for this release by @AmethystLiang in and
- fix(plugins): a development plugin reloads an edit saved while its watcher was starting
- Prepare server template assembly alongside qualification
- Reuse Windows server native prebuilds across app version bumps
- refactor(renderer): read workspace records through typed selectors
- fix(relay-ops): keep one stalled director instance from tripping the reserve watch's 503 rule
- test(daemon): make real-socket backpressure assertion deterministic
- docs(mobile): clarify buffered terminal autocomplete scope
- chore(ratchet): drop the stale owner-adapter focus seed and prune the baseline
- refactor(ssh): delete SSH and orcad helpers nothing calls
- refactor(orcad): share one unverifiable terminal census
- chore(runtime): delete exports nothing reads
- refactor(ssh): import SSH and orcad names from the modules that define them
- refactor(execution-host): one resolver for the SSH target a repo row may dial
- refactor(repo-host): one helper for the hosts registering a repo id
- refactor(orcad): name the remote install helpers for what they install
- docs(ssh): describe the orcad connect path without the removed relay
- refactor(orcad): use the shared error and liveness helpers instead of local copies
- refactor(renderer): name the owner adapters for what they do (resolveOwnerOrLocal)
- ci: install verified fish 4 directly for shell contracts
- refactor(terminal): no catalog-less fail-open to the focused runtime in terminal spawn routing
- Trim unused rules from the editor's same-file check (keep WSL folding for discard holds)
- docs: plan quiet-first module organization cleanup
- fix(relay-ops): make each reserve-watch sample one Cloud Logging read
- fix(relay): release a drained host before telling it to leave
- refactor(ssh): the SSH host finder uses the host picker's overflow note and bounded-list shape
- refactor(ipc): group Linear handlers with direct owner imports
- refactor(ipc): group Jira handlers with concrete owner imports
- refactor(native-chat): one shared parser for the approval envelope
- refactor(jira): group attachment modules with concrete owner imports
- docs(readme): update star history chart
- fix: remediate dependency security advisories across workspaces
- refactor(sidebar): one shared feed client for the desktop window and the phone
- fix(pairing): normalize base64 consistently across clients
- refactor(linear): group issue-context reads under concrete owners
- fix(browser): bring the address bar back under the 400-line limit
- fix(security): update Node runtimes for October security releases
- Extract shared image clipboard copy utility
- Bring main back under the line limits (main lint is red)
- ci: fix protected-main downloads badge updates
- refactor(browser): group Chromium cookie import stages
- chore: remove unused shadcn generator dependency
- feat(connectors): add an off-by-default experimentalConnectors setting (no behaviour change)
- fix(ci): prepare historical VM rollback snapshots
- Update cloud relay runtimes, providers and security checks
- fix(ci): restore cloud and main checks during pnpm registry outages
- Move Relay deployment configuration into private cloud operations
- chore: remove five redundant Tiptap wrapper dependencies
- refactor(main): group ephemeral VM lifecycle modules
- chore: replace electron-toolkit utilities with Electron APIs
- refactor(settings): group repository identity modules
- ci: make workflow token permissions explicitly read-only
- test: remove obsolete @streamparser/json dependency
- ci: prevent benchmark candidate code from publishing caches
- ci: validate adhoc build provenance before executing source
- Stabilize pending admission refusal option retry test
- ci: skip unrelated relay integration on renderer-only PRs
- ci: remove completed relocation and pnpm cache experiments
- refactor(mobile): group platform-seam analysis tools
- ci: avoid global fan-out for routing test changes
- refactor(runtime): resolve a watched repo's host through the canonical routing API
- refactor(runtime): replace unchecked store casts in worktree queries with type guards
- refactor(worktrees): pick a repo's catalog watcher transport from its canonical SSH target
- ci: count every retry attempt in runner demand reports
- fix(plugins): validate example panel reply dispatch
- fix(docs): avoid backtracking in excerpt link destinations
- fix(ci): restrict candidate test workflows to read-only caches
- refactor(relay): group assignment cleanup and diagnostics
- refactor(ssh): split the ssh2 handshake, host key verification, system ssh probe and credential fallback out of SshConnection
- refactor(orcad): drop the toolchain probe's unread toolchainMissing verdict
- fix(images): avoid backtracking in data URI parameter parsing
- ci: improve shadow unit dependency precision
- ci: check dependency vulnerabilities on PRs and stable releases
- refactor(orcad): stop exporting declarations used only inside their own module
- test: isolate Windows tree-kill load fixture startup and cleanup
- ci: canary tiered WSL distribution qualification
- refactor(managed-server): stop exporting declarations used only inside their own module
- ci: build the SSH Windows mobile page once
- refac…
1.4.237
Orca just crossed 100,000 stars on GitHub! Every bug report, pull request, shared workflow and recommendation has helped us get here. Thank you for building with Orca and helping shape what comes next. ❤️
To celebrate, this release brings a more capable phone experience, more dependable agent conversations, and fixes that keep your work moving across desktops and remote machines.
- More done from your phone: Create and edit notes, save Markdown on headless hosts, follow relative file links, and see embedded images. Buffered terminal drafts can now survive workspace navigation, too.
- Chats you can come back to: Codex chats reopen correctly after undo, Claude keeps its rewound context across Orca rollbacks, and screenshots stay with the conversation. Codex’s skill picker now reflects the skills Codex actually loaded.
- Your work stays protected: Discard pauses autosave of the same file across workspaces. Read-only Markdown and CSV views protect your unsaved edits, and new, unstaged Markdown documents open straight into the rich editor.
- Voice beyond the desktop: Phone dictation works again through headless orca serve hosts, with a CLI command to configure the host’s OpenAI key.
- Smoother remote work: Reconnect hidden terminal tabs after a restart, keep browser logins when hosts pair again, and search SSH configurations with thousands of hosts without freezing the interface.
- Small details, better flow: Phone tabs follow desktop order, landscape layouts show the session title, keyboard controls keep their height, and worktree safety sweeps skip unchanged workspaces.
Phone updates: Updating Orca on the computer serving your phone also updates the phone’s served interface. Persistent terminal drafts additionally require an updated mobile shell.
- Native chat (experimental): Update paired and SSH hosts alongside Orca to get the latest chat fixes. Exact Codex skill-file selection is available on desktop with a supporting host; phone selections and older hosts retain plain-text skill names. Send a skill as a new message for Codex to apply it at the start of a turn.
- Headless dictation: Save the OpenAI key on the host doing the transcription with orca speech openai-key set (reads the key from stdin). Installed-app orca serve hosts on Linux and macOS can also use the bundled on-device recognizer; Windows, managed SSH and WSL servers use cloud models.
- CLI launch choice: Explicit --surface choices require an updated execution host. Omitting the option keeps your existing defaults.
Native chat (experimental)
*Pick the skills Codex actually loaded, return to conversations with confidence, and keep your chat history and attachments intact.*
- Use Codex’s own loaded-skill catalog in chat; desktop selections identify the exact skill file, including when names overlap
- Reopen Codex chats after undo and continue with the correct conversation history
- Keep Claude’s rewound context intact even after rolling back Orca
- Show prompts sent mid-turn and ! commands where Claude actually received them
- Keep screenshots dragged into a chat available for the lifetime of that chat
- Retry failed chat names, show naming errors on the tab hover card, and offer Regenerate name
- Keep resumed Claude chats ready to receive messages after settings updates
- Show Working only while Claude, Pi or ACP is handling work, while keeping Claude chat workers running
- Show sleeping native-chat workspaces as asleep and hide them when the sidebar filter calls for it
- Tie finished notifications to the correct hook-driven turn
- Clarify how to continue conversations between chat and terminal agents
Phone
*Move between workspaces without losing your draft, work on Markdown without an open desktop window, and enjoy a more consistent interface.*
- Open a worktree on the tab currently shown on desktop
- List session tabs in the same order as the desktop tab bar
- Keep unsent buffered terminal commands when leaving and reopening a workspace
- Create and edit notes on headless hosts
- Read and save Markdown tabs without an open desktop window, with conflict checks that protect unsaved desktop edits
- Keep a Markdown save on its original host if the workspace moves while saving
- Open relative file links from Markdown
- Display embedded images in Markdown previews
- Refresh staged files when returning from review
- Show the session title beside tabs when the phone is in landscape
- Blend the status-bar area into the workspace header
- Match the home-indicator area to the terminal input panel
- Preserve live terminal palettes when the selected theme has not changed
- Keep Claude chats intact after renaming their pane
- Show the bundled whale icon on DeepSeek Build tabs
- Keep the keyboard accessory row at a stable height when the dismiss button appears
- Keep dictation controls in sync with the host’s settings
- Simplify chat by removing the Tools toggle and its open-everything mode
Voice & agent launches
*Dictate from your phone through a headless server, and choose chat or terminal for an individual CLI launch.*
- Restore voice dictation on headless orca serve hosts, with cloud models on managed SSH, WSL and Windows servers
- Configure a headless host’s OpenAI dictation key with orca speech openai-key status, set and clear
- Choose --surface chat or --surface terminal for orca agent launch and agent-backed orca worktree create
Editor, files & performance
*Protect unsaved work across tabs and workspaces, make new Markdown documents immediately editable, and reduce background activity.*
- Open new, unstaged Markdown files from Source Control in the rich editor
- Pause autosave across workspaces during Source Control Discard, and prevent read-only Markdown or CSV tabs from overwriting unsaved edits
- Avoid an unnecessary reload of remote files after each restart
- Prevent restored-tab disk checks from looping or reporting false conflicts
- Skip unchanged worktrees during background safety sweeps
- Apply custom tab shortcuts immediately after switching worktrees with the keyboard
Terminals, SSH & remote servers
*Reconnect to surviving sessions, handle large SSH configurations, and keep remote updates and browser logins dependable.*
- Start agent terminals at their first real size without the previous 12-frame wait
- Attach to the successful connection when terminal reconnect attempts overlap
- Reconnect hidden terminal tabs to sessions that survived a restart
- Prevent a saved terminal folder on an unavailable network drive from freezing the window
- Keep mobile terminal snapshots aligned after removing terminal queries
- Keep the SSH Hosts list responsive and searchable with configurations containing 13,000 hosts
- Use the same bounded, searchable picker across host lists so large SSH configurations remain usable throughout Orca
- Preserve in-app browser logins when a WSL or managed SSH host pairs again
- Replace stale terminal daemons after they drain on Linux and WSL
- Restart the macOS serve supervisor from the updated app
- Prepare the macOS supervisor’s code copy in one step
- Prevent sidebar view settings from blocking SSH host migration
- Refuse new terminal creation while a server update is stopping the server
- Give Windows process-tree cleanup time to finish rather than leaving grandchildren behind
- Put sharing first in Remote Orca Servers settings
History, projects & source control
*Find conversations across machines more easily, and keep project actions tied to the host that owns them.*
- Keep scoped Session History working with very large transcript collections
- Give history searches through SSH-connected Orca servers the full all-hosts scan budget
- Include sessions saved under a symlinked workspace’s real path in Workspace history
- Label the source host when history search results span multiple machines
- Open PR cards, rows and dialogs on the host that returned the item when projects share a path
- Keep GitLab items and project dialogs on their owning host
- Save issue-source changes to the selected project row
- Use the caller’s host for GitHub routing and task filters
- Separate work-item cache entries by project row and host
- Find registered projects by ID, path and host during refreshes
- Clear repository cache entries without evicting another live host’s project
- Refuse ambiguous legacy automations instead of guessing which host should run them
- Reject workspace parents that would create a nesting loop, including before the worktree cache is loaded
- Fetch PR conflict-preview base branches through the shared fetch controller
Tests, builds & maintenance
*Faster release builds, broader platform coverage, dependency checks and continued editor cleanup. The layout-owner work below remains behind disabled build switches and is not enabled in this release.*
- ci(wsl): run the WSL orcad lane on Debian 12 and Fedora 41 too
- Refactor AGENTS.md for clarity and conciseness
- test(skills): synchronize Windows rename contention
- chore: remove CLAUDE.md
- docs: load Git guidance on demand [skip ci]
- docs: slim test agent instructions
- docs: remove redundant max-lines agent instructions [skip ci]
- ci: stop running WSL host tests for UI-only changes
- Update AGENTS.md with Useful Commands section
- Editor tab state is written to its buffer record, not copied into it afterwards (phase 1a)
- docs: clarify first-class platform, remote, and mobile priorities
- test(daemon): run the stalled-reader backpressure test over a Unix socket, not TCP loopback
- refactor(protocol): each area owns its published runtime capability list
- Native chat: remove unused journalCheckpoint and setConversationCommand
- Update AGENTS.md
- build(cli): typecheck the CLI by following its imports, not a hand list
- Format AGENTS.md so main's formatting check passes
- refactor(wsl-hosts): add flow in wsl-host-registration; liveness split into state, evidence and monitor
- docs: add test anti-pattern reference
- Add the rules that decide which editor tabs are the same file (phase 1b-1, unused)
- Speed up adhoc releases with shared JavaScript and Blacksmith runners
- Close prompt, Discard, save flush and restart save each decided in one place per buffer record (phase 1b-2, no behaviour change)
- fix(ci): use one Zod identity in the E2E typecheck
- Overlap adhoc release gates and cache qualified server templates
- fix(deps): root and mobile resolve one zod, and CI fails if they drift
- Overlap native qualification setup with the mobile bundle build
- Batch macOS code signing for adhoc releases
- docs(orca-cli): teach agents cross-project parents and re-parenting
- style: format a test file so main passes the formatting check
- test(claude): isolate real CLI fixtures and cover chat option requests
- Carry batched macOS signing and qualified-template caching into production
- test(vitest): derive the Node SQLite test list from imports
- ci: one list for Windows boundary tests and one step for ratchets
- Build adhoc Mac architectures in parallel
- fix(release): avoid API rate limits waiting for the mobile bundle
<details> <summary>Layout groundwork (disabled)</summary>
- Layout-owner build: main answers terminal questions from its own layout (A1, dark)
- A CLI or phone file on a layout-owner server opens in the tab group a paired desktop shows (switch-on builds only)
- Layout-owner build: a CLI send, wait or read starts a saved pane that has no terminal yet (dark)
- The window shows tab, title, move and divider changes only from main's update, never drawing them itself (dark, layout-owner build only)
- Layout-owner build: phones see main's terminal and editor rows (A2, dark)
- A paired desktop shows the held-terminal banner and Reopen for a server's held terminals (switch-on builds only)
- Pin why main's pane list republish waits for a microtask (switch-on builds only)
- test(layout): pin the layout-owner save format for downgrade, and keep main's touched-records save with an exhaustive guard (dark, layout-owner build only)
- Layout groundwork (switched off): main starts every split and new pane, the window only attaches
- fix(runtime): a server with no window answers its first terminal create, not 'handle stale' (switch-on builds only)
- Layout-owner build: main shows live terminals that lost their tab, at the same moments the window did (dark)
</details>
1.4.235
Thank you so much for using Orca and for your continued support! ❤️
This release makes conversations easier to revisit, keeps more of your agent's work, and cuts background editor activity when you're juggling workspaces.
- Rewind Claude chats: Use Rewind to here on a message that started a turn, edit your prompt, and take the conversation in a new direction. Claude continues from the history you kept.
- Your chat, your settings: Each conversation remembers its own model, effort and Fast settings. Switching models keeps compatible choices, and changes to an agent's defaults no longer silently move a chat that has recorded its settings.
- Keep more of your agent's work: Completed replies and tool results are saved in full rather than cut off at the preview limit. Use Show full output on desktop or phone, or Show full message on phone, to load more content from shortened previews.
- Less waiting, less background work: New Chat opens the composer immediately, Codex chats get the time they need to start, and the workspace jump palette is preloaded. The editor watches active, recent and at-risk workspaces instead of every workspace with an open tab.
- A better phone experience: Live chats reconnect from where they left off, project groups stay in step with desktop, and ready cloud dictation models can be selected from the phone. Workspace creation starts preparing the checkout while you fill in the form.
- Everyday polish: Edit images in queued desktop messages, see machine labels only when project names collide, and get more reliable workspace lists, file-conflict handling and remote workflows.
Phone updates: Updating Orca on your desktop also updates the app on your connected phone—the phone loads it directly from your desktop.
Native chat (experimental): Keep paired and SSH hosts updated alongside Orca for the latest chat features. Full-content loading requires host support; content discarded by older versions cannot be recovered. Very large items may still be shortened for display or delivery.
Cloud dictation: Select a ready cloud model from the phone's dictation setup or Settings → Voice. Configure its API key on the computer serving the phone first.
Native chat (experimental)
*Revisit Claude conversations, keep each chat’s settings consistent, and work with images and long outputs more comfortably.*
- Rewind Claude chats from messages that started a turn, continuing with the conversation you kept
- Remember model, effort, speed and Fast choices per conversation, including across restarts
- Save completed replies and tool results in full, with controls to load more from shortened previews
- Edit images in queued desktop messages: remove, paste, drop or attach
- Open the New Chat composer immediately while the host gets ready
- Wait for Codex when opening or resuming a chat instead of failing after 30 seconds
- Name chats from the first message immediately, even if automatic title generation fails
- Avoid starting user MCP servers and hooks for background Claude runs
- Clarify labels for switching agents between terminal and chat
- Polish the appearance of chat question options
Phone
*Keep conversations and project groups current, create workspaces with less waiting, and select cloud dictation models directly from your phone.*
- Reconnect a chat’s live feed from its last received row when the stream ends
- Update projects, project groups and workspace rows together so phone grouping stays in sync
- Prepare the worktree checkout while the new-workspace form is open
- Select ready cloud dictation models from setup and Settings → Voice
- Show mobile home statistics when connected to an orca serve host
- Keep chat composer controls inside their row
- Keep session tab icons full size beside long titles
Editor, performance & file safety
*Reduce background file watching, speed up workspace navigation, and make reloads and save conflicts more dependable across tabs and devices.*
- Watch active, recent and at-risk workspaces; refresh open files when you return to an unwatched workspace
- Preload the workspace jump palette before first use
- Improve save-conflict checks, Undo after reload, autosave during heavy file activity and chat-start error messages
- Release superseded and closed editor-tab watch probes and disk-check records
- Avoid reapplying terminal bindings that already match when saving state
Workspaces, SSH & remote servers
*Keep workspace lists current, make same-named projects easier to distinguish, and improve remote server transitions and permissions.*
- Show machine labels only when projects have the same name
- Keep the desktop workspace list current while hidden and include workspaces created on paired servers or other clients
- Refuse ambiguous same-path project routing instead of following the Active Server selection
- Allow an older SSH host to move to its managed server while a relay shell identified by its tab remains running
- Make orca open-url on a manually started server ask for a paired desktop rather than an SSH setting
- Respect the login umask for remote worktrees instead of making them owner-only
- Improve WSL migration checks for path casing, panes without restore folders and stale agent records
Settings & security
*Keep Experimental settings accessible after language updates and tighten permissions for newly created Codex configuration files.*
- Prevent Experimental settings from crashing after language-pack updates
- Create new Codex config.toml files with owner-only permissions
Relay service
*Give each relay director revision its own instance limit during rollouts.*
- Use a separate instance maximum per director revision rather than splitting a shared service cap
Tests, CI & maintenance
*Expanded compatibility and regression coverage, leaner release builds, and continued terminal-layout groundwork. Layout-owner changes below remain behind a feature switch and are not enabled product features in this release.*
- Layout groundwork (disabled): open CLI- and phone-requested files in the visible tab group
- Layout groundwork (disabled): surface running terminals without visible panes and determine startup reconnections
- Test custom terminal titles with older phone layouts
- Include headless server specs in the manually enabled layout CI run
- Layout groundwork (disabled): advertise layout-change support to paired desktops
- Test terminal readiness after a layout-owner server restart loses a pane binding
- Test file opening from older phone layouts against a layout-owner build
- Layout groundwork (disabled): use consistent file identities in layout updates
- Test that windowless host reloads preserve terminals created by main
- Layout groundwork (disabled): apply individual layout records instead of rebuilding the whole session
- Layout groundwork (disabled): render paired-server workspaces from the server’s layout stream
- Format the files changed by the full chat-output update
- Layout groundwork (disabled): let main create, start and close terminal tabs and panes
- Update nine end-to-end specs to match intended product behavior
- Bump the mobile app to 0.0.58 and Android versionCode to 22
- Keep Windows daemon teardown tests from counting processes with reused parent IDs
- Layout groundwork (disabled): restore each terminal pane once at its saved size and identify sleeping or held panes
- Add checks for host-aware repository routing and migrate existing callers
- Test that SSH health probes stay responsive while the SSH layer is stuck
- Update Zod to 4.6.7 for recursive schema type compatibility
- Test Claude dispatch metadata received after stopping a turn
- Reduce duplicate release builds and history downloads
1.4.233
Thank you so much for using Orca and for your continued support! ❤️
We shipped two releases today! If you missed it, check out the v1.4.232 release notes too. Highlights include Manual / Auto / Yolo agent permissions, OpenCode 2 in native chat, a better phone composer with file attachments and inline skills, smoother SSH recovery, and a smaller app with faster Mac updates.
Phone updates: Updating Orca on your desktop also updates the app on your connected phone—the phone loads it directly from your desktop.
- SSH & remote workspaces: Connecting to an SSH host works when neither machine can download Node.js, with a one-click mirror Orca remembers and retries. Older Windows hosts (Windows 10 1809 and Server 2019) can run Orca's server, and tunnels recover when a port is held by an old SSH connection.
- Remote servers in Settings: Remote Orca Servers is one list instead of six sections, and SSH hosts can be removed in bulk and stay removed. Orca tells you when the same server was saved twice, and adding a server you already saved updates it instead.
- Phone: Creating a workspace from the phone is much faster, the workspace list stays in step with the desktop, and session tab icons keep their size beside long titles.
- Editor: Orca refuses to save over changes made to a file on disk that you haven't seen, and Reload and Undo behave predictably afterwards.
- Everyday polish: Projects with the same name on different machines keep short names and show which machine they're on. Long saved conversations use far less memory when Orca scans them for Session History.
SSH, managed servers & remote
*SSH hosts connect in more situations, Remote Orca Servers is one clear list, and edits always go to the machine that owns the workspace.*
- One-click Node.js mirror when neither machine can download Node
- Retry with the saved Node.js mirror once a running connect fails the same way
- Ship node-pty's winpty backend so Windows 1809 / Server 2019 hosts can deploy
- A managed tunnel whose forward can't start takes the stdio bridge, and reclaims a port an old ControlMaster holds
- A legacy relay restarted at the same socket never takes over an open tab
- Detect Linux libraries reliably across SSH and WSL
- Remote Orca Servers: one list instead of six sections; SSH Hosts: bulk remove that stays removed
- Adding a server you already saved updates it instead of saving it twice
- Say which saved servers are the same machine paired twice, and how to fix it
- Say "Orca on <host>" instead of "managed server" in the UI
- A moved SSH host lists once in a project's Available Hosts
- New local projects never dedupe onto an SSH project at the same path
- PR/MR worktree base refuses SSH projects named only by executionHostId
- Worktree create sends the host --project/--host selected
- Editor writes and unqualified removals route by the rows, never the Active Server focus
- No owner route reads the Active Server focus, so a local row never routes to the focused server
- A damaged browser file list disables only the browser client, not the remote server
- A live orcad's browser helper pauses for macOS desktop installs
Phone
*Create workspaces from the phone much faster, and keep the phone's workspace list and session tabs accurate.*
- Prepare the worktree checkout while the new-workspace form is open
- Phone list resends lost option changes, trusts the feed's row facts, and retries a failed feed read
- Keep session tab icons full size beside long titles
Workspaces, sidebar & tabs
*Same-named projects on different machines are easy to tell apart, and the sidebar's agent status and visibility settings stay accurate.*
- Keep project names short and show their machine
- One agent phase history, so a compaction raises no unread and a title-started turn pushes its finish
- Visibility settings refresh workspace rows; pre-gap paired-server answers stay unverifiable
Editor, files & Markdown
*Saving no longer overwrites changes made on disk behind your back, and previews and renames act on the right file.*
- Refuse saves that would overwrite unnoticed disk changes
- Disk-checked save follow-ups: repeatable stale reloads, Markdown whitespace, Undo of Reload
- Markdown preview of a terminal-opened file reads with its source tab's grant
- A rename retargets only editors whose own owner is the renaming host
Browser
*Browser screenshots from an SSH host are checked when they're taken and when they're answered.*
- An SSH host's capture is admitted at each capture and at its answer
Performance & reliability
*Long saved conversations no longer take several times their size in memory while Orca indexes them.*
- [mem] Stream saved transcripts and stage large search writes
Relay service
*The hosted relay keeps desktops in their own region and spreads traffic evenly while it is updated.*
- Give region-correction reconnects and roll re-placements the in-region reserve fallback
- Move director traffic in two steps so a deploy does not land on one instance
- Let the same-cap trust probe outlast load-balancer warm-up
Tests, CI & maintenance
*Faster, lighter builds and checks; the new layout and sidebar work remains behind disabled build switches.*
- Run cell-flags and reserve-watch on the paid runner pool
- Keep Mac qualification runs out of the release build's concurrency group
- Build Windows alongside Mac and preserve signing quota
- Cut end-to-end typecheck memory with Bun
- Halve CLI compile memory with Bun typechecking
- Stop the cold-authority scope test depending on the clock
- Shared switch-on fixtures so 71 layout tests pass with main owning the layout
- A test-only switch-on server template that packaging refuses
- No empty extra terminal tab from an old saved terminal record (dark, layout-owner build only)
- Agent titles from one status batch reach main as one rename (dark, layout-owner build only)
- Main sends one layout update per action, with only what changed (dark, layout-owner build only)
- Same-id workspaces on two hosts sort, nest and stay retained on their own; nested groups and project order hold in host sections (dark switch)
- A read Done no longer hides a pane that is still Working in Smart (dark switch)
- Update WeChat QR code for group 13
1.4.232
Thank you so much for using Orca and for your continued support! ❤️
- Auto permissions, in chat and terminal: Choose Manual | Auto | Yolo in Settings → Agents. Auto lets supported Claude and Codex agents handle approvals, and new native chats follow your choice too. You can choose a separate permission mode for other agents; existing chats keep their own settings.
- Native chat (experimental): Open OpenCode 2 directly in chat, find Codex skills by typing $, and pan and zoom image previews. Rewind works in long conversations, and usage limits show when they reset with a Continue button to pick the conversation back up.
- A better phone composer: Attach files as well as photos, insert skills inline, and choose model, effort and permissions from one sheet. Faster recovery after switching apps and more responsive terminal scrolling make it easier to keep working away from your desk.
- Smoother SSH work: Managed servers recover from lost pairing over SSH, tunnels follow a restarted server's port, and unsaved editor drafts survive the move to a managed server. File uploads work better over high-latency links, and a configurable Node.js mirror helps on networks that block nodejs.org.
- More control over your workspace: Space responds faster, lets you inspect changed files before cleanup, and puts row actions in a dedicated menu. Browser pages can ask for a username and password, and Orca asks before a page opens another app.
- A lighter app and faster Mac updates: Shared desktop and browser assets, fewer duplicate resources and smaller tour animations reduce the app's footprint. macOS updates avoid background installer throttling, helping Orca get back to your work sooner.
Native chat (experimental): Some chat features require support from the remote host. Keep paired and SSH hosts updated alongside Orca to use the latest capabilities.
Auto permissions: Availability depends on the agent, model and host version. Changing the default applies to new sessions; existing native chats retain their saved permissions.
Native chat (experimental)
*OpenCode 2 opens in chat, Codex and Pi skills are easier to find, image previews support pan and zoom, and long conversations are easier to resume and rewind. Usage limits explain the pause and offer Continue, while sent images and visuals stay with the chat.*
- feat(opencode): open OpenCode 2 in the chat view and list 2.x models before the first message
- feat(native-chat): pan and zoom chat image previews like mermaid diagrams
- fix(native-chat): move a chat visual's Open and Share buttons above it
- Mark completed Codex reviews Done when Stop is absent
- Resume terminal conversations in native chat without waiting for History
- fix(native-chat): clicking Send or Stop keeps focus in the message box
- fix(native-chat): a Claude chat keeps a model its CLI stopped listing
- Fix thinking status translations in zh, ja, ko, and fr
- Native chat: rewind works at any chat length
- feat(native-chat): /resume in a structured chat opens Agent Session History
- feat(native-chat): + menu shows chat, disabled chat and CLI rows
- fix(codex): a Codex chat keeps its Orca identity when the user's Codex config strips command environment variables
- Sleep stops a workspace's native chat agents
- Refuse chat resume until terminal writers have exited
- fix(native-chat): show the model picker in a new OMP or Antigravity chat
- Accept messages while any agent starts, and bound each startup step
- fix: make chat and terminal switch labels consistent
- fix(native-chat): save a Codex message's receipt from either of Codex's reports of it, not only the first
- fix(native-chat): a new chat in a twin workspace refuses instead of starting on this computer
- fix: distinguish history resumes from active-tab switches
- fix(native-chat): a usage limit reads as a pause with its reset time and a Continue, not a failure
- A chat's visuals and sent images live as long as the chat
- feat(native-chat): $ opens Codex skills in the composer
- fix(native-chat): keep transcript text clear of the message rail
- fix(native-chat): keep a typed [Image #N] when the message has no such image
- fix(native-chat): list Pi skills in the / menu as /skill:<name>
- fix(native-chat): hide history before /clear
- fix(native-chat): keep /model, /effort, /clear and /compact in the / menu after an agent reports its commands
- fix(native-chat): link Antigravity sign-in instructions to settings
- fix(native-chat): say which request a chat start ran out of time on, and log the original error
Agents, accounts & permissions
*Set Auto permissions for supported agents and carry that choice into new chats. Antigravity sign-in is clearer, Claude usage estimates account for model versions and long context, and MiniMax and GLM Coding Plan keys can be saved on the remote host that uses them.*
- fix(cloud-auth): show that a sign-in is in progress, with copy-link and cancel, on every Orca sign-in button
- fix(usage): price Claude models by exact version, add Sonnet 5.5, flag unpriced models
- Check Claude sign-in duplicates against the listed account identity
- fix(usage): price Claude long-context requests per request, and price Haiku 5.5
- fix(windows): codex and claude get a prompt's double quotes intact in PowerShell
- feat(settings): sign Antigravity chats in from Accounts
- feat(agent-status): read OSC 7501 program status beside hooks
- feat(agent-status): show OSC 7501 program status in rows and tabs
- fix(agent-status): never drop a running helper for lack of room
- fix(accounts): copy Devin commands through Orca clipboard bridge
- fix(settings): Antigravity's sign-in reads as an Account line, never an empty box
- fix(linear): show a saved Linear credential that cannot be decrypted
- feat(agents): add Auto to the global agent permission switch
- feat(native-chat): apply per-agent Auto permission defaults
- feat(accounts): save MiniMax and GLM Coding Plan keys on the Settings host
- fix(codex): keep Orca's terminal identity in Codex commands when the user's Codex config strips environment variables
- fix(status-bar): keep this computer's providers visible as "Not configured on <host>" under a remote workspace
- Show short Antigravity pool labels in status bar
Phone
*The redesigned chat composer adds file attachments, inline skills and one place for model, effort and permissions. Chat reading position, queued-message editing, terminal scrolling, reconnection and completion notifications get attention too.*
- fix(mobile): show a renamed terminal tab's name on the phone
- feat(mobile): redesign the chat composer with file attachments and inline skills
- fix(mobile): keep typed commit messages, restore failed shortcut removals, name icon buttons
- fix(mobile): page GitHub tasks by number and drop pages from an old selection
- fix(mobile): one button style for the session header and tab strip; size tabs to titles
- One background-process read of "Notify About Hidden Workspaces" for phone pushes and the host unread flag
- fix(mobile): faster relay recovery after an app switch and on a late desktop data link
- fix(mobile): edit a queued message in a plain text box with compact cancel and save buttons
- Keep phone chat history in one window while preserving reading position
- perf(push): deliver queued notifications without waiting for the poll
- perf(mobile): shorten output batching during terminal scroll gestures
- fix(notifications): a server with no window pushes phones when a terminal agent finishes or needs input
- fix(mobile): let an add or removal replace corrupt stored terminal keys
SSH, managed servers & remote workspaces
*Reconnect and re-pair more reliably, keep tab closes through reloads, preserve unsaved editor drafts during migration, and upload files faster over high-latency links. Setup handles more hosts and restricted networks, with clearer disk-space, download and connection errors.*
- fix(renderer): restored SSH session placeholders carry the host a listing would stamp
- fix(open-in): open a managed server's workspace in VS Code over Remote-SSH
- fix(terminal): reattach a restored terminal while an older daemon cannot answer
- fix(ssh): rehome a cold-start converted workspace the scan missed, and notify replayed background-turn completions
- fix(ssh): follow a relaunched managed server's port; match quoted Windows forward argv
- fix(terminal): relay-era SSH panes open printed file paths on the host's server
- fix(ssh): managed servers install through SSH gateways that cut long commands
- fix(ssh): relinking a stopped managed server keeps the project groups it holds, and later moves don't re-send them
- fix(ssh): make room for the pre-activation snapshot on remote hosts, and say why a capture failed
- fix(ssh): a cancelled or revoked host's browser command stops on the desktop
- fix(ssh): closing a bridged relay tab stops its shell, even across a restart
- fix(ssh): keep SFTP uploads pipelined so a high-latency link doesn't crawl
- fix(ssh): say the host's disk is full when a managed-server install runs out of space
- fix(ssh): say a noexec home can't run Orca's server, instead of "install an older version"
- fix(remote): keep a paired host's undelivered tab close across a reload
- fix(ssh): a network cut during a managed-server install no longer hangs, and says contact was lost
- fix(orcad): orca open-url opens the page on the paired desktop
- fix(orcad-migration): a pane saved in two tabs refuses on this desktop and names the tabs, not a server conflict
- fix(remote): a removed server's saved tab closes go with it; a same-machine re-pair keeps them
- fix(ssh): an overlapping managed-server update check sees the failure the first one recorded
- fix(orcad-migration): refuse before fencing a manifest no catalog request can carry
- fix(ssh): a bridged relay terminal's proven exit reaches the runtime from every close route
- fix(managed-server): snapshot capture and restore run on BusyBox before 1.30
- fix(ssh): an SSH server update counts terminals again just before it stops the server
- fix(session-tabs): a held paired-tab close survives an undecided re-pair, and a dropped one shows its tab at once
- fix(ssh): a managed tunnel follows the server's port after another desktop restarts it
- fix(ssh): Disconnect closes the managed server tunnels the SSH session carried
- fix(ssh): a system SSH forward owns its listener even when ssh_config sets a ControlMaster
- fix(ssh): two overlapping bridged-terminal attaches hand back the viewer they replace
- fix(ssh): orca open-url on a managed SSH host opens the page on the desktop through the browser bridge
- fix(orcad-migration): a host fenced on a manifest no request can carry can be cancelled by its id
- fix(ssh): say when this computer can't download Node for a managed server, and where an offline copy goes
- fix(wsl): keep the desktop pairing across host restarts
- fix(hosts): preserve complete status changes in the renderer
- fix(wsl): reconnect hosts when a retained connection stops answering
- fix(ssh): a legacy relay terminal stays with the relay that runs it when another relay lists the same id
- fix(ssh): download the pinned Node on the host when this computer can't reach it
- fix(ssh): a forward edit cut short by Disconnect keeps the host's saved port forwards
- feat(ssh): let a nodejs.org mirror serve the pinned Node on this computer and the host
- feat(orcad-migration): unsaved drafts stay on this desktop and are renamed to the server on commit
- fix(ssh): pair again over SSH when a managed server drops this desktop, instead of reconnecting forever
Workspaces, sidebar & tabs
*Workspace actions consistently target the machine you chose, even when another host has a matching project or path. Space adds faster selection, inspectable changed files and a dedicated actions menu; bulk tab closes ask for confirmation.*
- fix(renderer): a created or lineage-refreshed worktree replaces only its own host's copy
- fix(source-control): clear unavailable branch line totals
- fix(i18n): clarify closing all tabs to the left and right
- Confirm before bulk-closing tabs
- fix(sidebar): show the project name on ungrouped compact cards
- fix(git): stop starting Git in deleted project folders and for removed projects
- fix(sidebar): run previous and next worktree shortcuts from a text field
- fix(runtime): project removal and edits stay on the selected project's host
- fix(projects): a project added from the CLI, web or a paired desktop through a symlink or subfolder shows its workspaces
- fix(projects): setup edits and removals name the host, so the twin on another host is never touched
- fix(runtime): one teardown policy per kind; removal closes host browser pages everywhere, headless sleep stops terminals
- fix(projects): refuse to file a folder under a project its own GitHub remote contradicts
- fix(runtime): a new terminal the host can't confirm says why, instead of nothing
- fix(projects): removing a project on this computer stops its chats, pages and every terminal on the host
- fix(runtime): a project removal stops its workspaces' terminals together under one deadline; every teardown is classified by kind
- fix(runtime): a terminal spawn names its host; the removed-project fence keys by host (R4-2)
- fix(projects): a project move names the row it moves; a paired server's twin by its SSH target
- The workspace you're on disappearing lands you where a sidebar delete does, whatever removed it
- fix(cli): --environment connects to the server a differently-cased name resolved to
- fix(persistence): an id-only worktree write refuses same-id twins instead of taking the first writer's copy
- fix(runtime): a runtime worktree removal prunes the scan snapshots and label routes like the desktop one
- fix(projects): link cloned and existing folders for GitLab and other non-GitHub remotes
- fix(sidebar): a status or order drag writes the card you dragged, not its twin on another host
- fix(renderer): restoring or re-selecting a workspace keeps the host it was selected on
- fix(sidebar-inputs): a failed domain read is retried by the next flush or phone read
- fix(runtime): a terminal start on an SSH twin no longer wakes or is refused by this computer's sleep
- fix(sidebar): a Pinned drop or menu pin pins the card you chose, not its twin on another host
- fix(renderer): host writes route only through the strict owner, and twin projections stay on their host (review-5 #2 #9 #11)
- fix(runtime): a failed orphan adoption write rolls back instead of keeping the adopted tabs
- fix(worktrees): a sort order and a minted push remote land on the copy that named them
- fix(space): speed up selection and support reviewed workspace cleanup
- fix(runtime): a moved shell history waits only on this machine's shells; a phone never clears a twin's unread flag
- Give Space rows a dedicated actions menu
- fix(sidebar): a pin's reveal follows only the focused copy, by its own host
Terminals & shortcuts
*Renamed panes stay in sync with their host, restarting a failed terminal opens a plain shell, and Copy works correctly on remapped Latin keyboard layouts.*
- fix(shortcuts): Cmd+C no longer pastes on remapped Latin keyboard layouts
- fix(terminal): client pane names reach a desktop host's window, and open panes follow the host's
- fix(terminal): Restart on a failed terminal opens a plain shell instead of Codex
Editor, files & source control
*File links open beside their source tab group, HTML file URLs open as document previews, WSL repositories opened through UNC paths support staging and discarding, and diff views remember their position. Restoring a deleted file and creating a starter MCP config also check for intervening file changes; this protection does not yet apply to general editor saves.*
- fix(drops): name extensionless dropped images by their bytes
- Open file links beside their source tab's group
- Open HTML file URLs as document previews
- fix(editor): opening a quoted lettered list with an unquoted continuation no longer crashes
- feat(files): guarded file writes that refuse to overwrite a changed file
- fix(git): stage and discard files in WSL repos opened by UNC path
- fix(github): treat SSH certificate org remotes (org-<id>@github.com) as GitHub
- fix(git): drop SSH host from clone folder names
- fix(git): forward stdin on buffered Git reads
- fix(diff-comments): a review note on a twin worktree saves to the open copy and names its host
- fix(diff): restore the All Changes view when its tab is reopened
- fix(diff): keep combined diff position stable across worktree switches
Browser
*Sign in to sites that ask for a username and password, confirm before a page opens another app, and follow links between local HTML files. Remote browser sizing and clicks are more accurate, and automation respects text composition and revoked host access.*
- fix(browser): a remote viewer larger than the host's browser pane sees the whole page and clicks land under the cursor
- fix(browser): switch client-hosted profiles by staging the replacement guest
- fix(browser): let a local HTML page follow its own file:// links
- fix(browser): refuse agent clicks while the user is mid-IME composition
- feat(browser): ask before a page opens another app
- fix(browser): label popups from committed document origins
- feat(browser): ask for a username and password when a site needs one
- fix(browser): a press an SSH host left held across commands is let go of when the host is revoked
Automations & orchestration
*Scheduled runs can send work into an existing agent session and keep completed per-run sessions asleep for later. CLI host and project selection, pane titles and automation follow-up results are clearer, with less repeated work behind agent updates.*
- fix(cli): --host and --project accept the names host list and project list print
- fix(terminal): report the host's saved pane names in terminal.list, and make clearing the last one stick
- feat(cli): set the title of one terminal pane
- fix(automations): headless reuse-session sends the prompt into the existing agent
- fix(cli): refuse server names --environment cannot tell apart, and say how to pick one of twin projects
- perf(orchestration): stop recompiling a mailbox lookup on every agent title
- fix(automations): headless keeps finished per-run sessions asleep instead of closing them
- perf(automations): release completed run observers
- Clarify automation run CLI results and follow-up targets
Performance, reliability & diagnostics
*Session History avoids repeated transcript scans and keeps older workspace sessions visible. File watching, search, memory cleanup and saving after a full-disk error are more resilient, while crash reports capture better evidence for diagnosis.*
- fix(macos): the TCC prompt watcher's log stream dies with Orca, and old orphans are reclaimed
- fix(watcher): stop unwatched windows from being re-subscribed to local watchers
- fix(watcher): flush file changes on a steady cadence instead of waiting for quiet
- Session History: the Workspace tab stops re-reading every transcript to find its sessions
- Session History: a repeat open keeps every older session of the workspace
- fix(crash-reporting): renderer crash reports say whether the window was hung or blank
- fix(diagnostics): crash bundles always keep the terminal daemon's newest log lines
- fix(crash-reporting): Windows native crash reports say what the fault touched and which code ran
- fix(persistence): a commit that runs out of disk no longer stops all later saves
- Session History: the "Reading N / M files" count reaches its total
- perf: preserve matching Terminal settings sections during search
- perf(file-explorer): reject nonmatching names before path checks
- perf(gitlab): skip unused review details in Checks
- [mem] fix(memory): release consumed buffers, abandoned waits, and deleted diff views
- Spe…
1.4.230
Thank you so much for using Orca and for your continued support! ❤️
- Native chat (experimental): Use Antigravity in chat, choose which agents open as chats, and install a missing agent from the chat itself. Paste copied files as attachments, queue images, and see clearer feedback while attachments and queue actions are pending.
- Accounts & agents: After switching Claude accounts, restart running sessions on the new account. Remove downloaded agent runtimes from Settings, and edit or delete Linear comments through the Orca CLI.
- Phone: Edit queued messages in place, follow tool runs with desktop-style cards, and see your conversation immediately when resuming from history. Landscape phones put session tabs in the top bar, and Tasks makes clear which desktop you’re using.
- SSH & remote workspaces: Disconnect stays disconnected, sleeping workspaces stay asleep, and closed tabs stay closed after reconnecting. Clearer server update and re-pairing messages help you recover a connection.
- Everyday polish: Quick Command shortcuts follow the focused split, tab previews wait for the full hover delay, and file headers offer Reveal in Finder. Workspace cleanup better protects same-path projects on other machines.
Native chat (experimental): Some chat features require support from the remote host. Keep the host updated alongside Orca to use the latest capabilities.
The orca command on SSH hosts: Existing hosts retain explicitly saved CLI control preferences; an unset preference is migrated to off. To allow commands on a connected SSH host to open and control this desktop’s Orca browser tabs for that host’s workspaces, enable Allow this host’s orca CLI to control Orca under Settings → SSH Hosts → edit the host → Advanced Connection.
Native chat (experimental)
*Choose which agents open as chats, use Antigravity, attach files and images more reliably, and see clearer queue, model and input-ownership feedback.*
- Offer Install when a chat’s host is missing the agent it needs
- Chat: dropped files hold Send until they're attached
- A queue action still on its way greys its controls, like the phone
- Image messages wait in the queue like text
- Chat: pasting a copied file attaches it, like dropping it
- Choose which agents open in native chat
- A sign-in prompt on an ACP agent's error output ends the start or turn signed out
- An agent can run each chat's own permission mode itself
- Hide Orca's chat-naming requests from Session History
- A running Claude chat keeps its model when two Claude Code versions list differently
- Use Antigravity in native chat through its ACP server
- A refused steer leaves its turn as the chat's latest request
- A Codex chat is Working only while Codex holds the send
- Pause an agent's chat starts while its shared sign-in changes
- The queue button you pressed shows a working spinner
- Mark each attached image as [Image #N] where it sits in the prompt
- Keep a restored agent’s status unconfirmed after 30 minutes instead of marking it done
- Show why the chat composer is locked and offer Take back when a phone holds the input
- Antigravity install: one clear message in the chat, with the message box staying in place
- Session History: the scan line under the search box no longer jumps during a refresh
- Sign in to Antigravity chats with the server’s own Google sign-in
- Move a chat visual's Open and Share buttons above it
- A Claude chat keeps a model its CLI stopped listing
Agents, integrations & accounts
*Switch Claude accounts with a restart offer, manage downloaded runtimes, edit Linear comments, and keep terminal sessions and GitLab task searches reliable.*
- Edit and delete Linear comments from the Orca CLI
- Remove a downloaded agent runtime from its Settings row
- Follow an Orca Claude account switch when the shell sets CLAUDE_CONFIG_DIR
- Offer to restart running Claude sessions on the new account after a switch
- Remove a downloaded agent runtime only after nothing on its host can still run it
- Let jcode's own client start its per-pane server
- Run the Antigravity usage check with agy's auto-update off
- Quit no longer warns about terminals a paired Orca server keeps running
- Resume a relaunched workspace's sleeping agents only when shown
- One spawn step writes a terminal's pane identity for both ways Orca opens terminals
- Tell users once that the diff panel in a Claude pane is Claude's own
- Keep OMP prompt markers from ending an agent’s turn so phone chat can find its session
- Avoid duplicate snapshot replays after reveal
- Keep OMP prompt markers from triggering unnecessary terminal repair
- Limit concurrent GitLab project requests to keep task searches within the queue limit
SSH, managed servers & remote
*Keep disconnects, sleeping workspaces and closed tabs consistent, preserve workspace identity during server moves, and recover with clearer update and re-pairing guidance.*
- Stop suggesting --host to listings that reject it
- Explain why file open fails on a server with no app window
- A host converted to its managed server keeps its workspaces' visit recency
- Link a folder workspace the server kept when a re-created SSH host moves again
- A password SSH host waits for you at launch instead of prompting
- Make the host's tab name the one source for CLI and desktop renames
- A slept remote workspace stays asleep through terminal orphan recovery
- A Disconnect stays disconnected, and Settings and the status bar agree
- Orca serve on orcad serves the browser client and answers plain HTTP
- A tab closed while a managed host is disconnected stays closed; deflake the shared-home spec
- Paired clients see a folder-upgraded Git project under the host workspace id
- Move the open workspace to the server's linked project when joining an existing server
- Saved terminal history no longer blocks a host's move to its Orca server
- Say when a managed server may be behind this app, and retry a failed update once per launch
- A late relay-era attach releases only its own viewer, never a successor's
- Report a legacy relay host active once a day while it bridges terminals
- SSH host management on a server without the desktop app says why it can't (D3)
- A connection never redials a host the user disconnected before its teardown runs
- Refuse a migration request too large for the host's sealed frame before sending it
- Overlapping update checks never both try a host the first one just failed on
- Show Re-pair required for revoked servers and let you re-pair in place
Phone
*Edit queued messages in place, follow tool runs, resume conversations with their history visible, and navigate files, Tasks and landscape session tabs more smoothly.*
- Edit queued messages in place
- One Working line in every chat; drop the floating 'Agent is working' pill
- The chat's Working line uses desktop's spinner
- Keep a headless host's chat tab through snapshot rebuilds
- Prevent markdown and file tab reload and screen flicker on retap and revisit
- Show the update screen instead of native screens when the desktop has no page
- Allow Markdown refresh during desktop tab snapshots
- Draw the host Accounts screen from the desktop's page
- Ask which desktop to open Tasks on when several are connected
- Show which desktop the mobile Tasks screen is for
- A compact phone queue: shorter header, a capped scrolling list, and an editor that fits the card
- Draw chat tool runs the way desktop does
- Render Source Control on the phone for large branches
- A session resumed from the phone's history shows its conversation before the first new turn
- Break the transport and terminal-document import cycles, and gate cycles after mobile's install
- Put the session tabs in the top bar on a landscape phone
Workspaces, sidebar & tabs
*Protect same-path workspaces on different machines, explain cross-host actions, keep shortcuts on the focused split, and make notices and tab previews steadier.*
- Main produces per-workspace activity facts, checked against the window in dev and test
- Stop the notice stack flickering under a resting mouse, and fit the force-delete button to its notice
- ResolveOwner refuses folder and project-group twins instead of guessing this computer
- Main publishes desktop focus, pins, project and host order, and SSH/WSL host state, checked against the window in dev and test
- Main keeps one live set of paired-server rows, checked against the window in dev and test
- Main produces per-workspace PR facts, checked against the window in dev and test
- Main keeps a registry of workspace creations in progress, checked against the window in dev and test
- Ui.setCollapsed changes one section's collapse without undoing another device
- Say so when a project cannot join a group on another host
- Draw a project group once when two hosts publish it under one id
- A host-scoped purge leaves a surviving twin's tabs and edits alone
- Destructive host callers refuse an ambiguous owner instead of reading it as local
- Fold getExplicitRuntimeEnvironmentIdForWorktree callers into resolveOwner
- Confirm before sleeping a workspace that another host's copy shares
- Shrink twin-removal teardown to the attributed close actions
- Tighten the host-identity stack
- Stop CLI-created worktrees flashing into a filtered sidebar
- Say a Linear task-status skip was for a multi-host workspace
- Apply Quick Command shortcuts and pane actions to the focused split
- Show when a paired server’s access is revoked or an update is required
- Wait for the full hover delay before showing each tab preview
Editor, files & Markdown
*Reveal files from their header menu and run notebook cells only when their workspace belongs to this computer.*
- Reveal a file in Finder from its header menu
- Run cells only when the resolved owner is this computer
Browser
*Open hosting-provider websites from Cmd/Ctrl+J and clean up browser tabs on hosts without a browser engine.*
- Let Cmd+J open hosting-provider domains like github.io
- A client-hosted ghost tab closes on a host with no browser engine
Performance & reliability
*Retry failed shell PATH checks and speed up development typechecking with a pinned Bun dependency.*
- Retry the shell PATH check and fall back when the shell cannot launch
- Pin Bun as a devDependency and typecheck with it
Tests, CI & maintenance
*Broader regression coverage, dependency updates and internal cleanup support the changes above. Work on host-owned layouts and sidebar state remains behind disabled build switches.*
- Brand host-scoped worktree and repo keys for new code
- Agree with main on main-made terminal tabs and sleeping-agent records (dark, layout-owner build only)
- Agree with main on first-group ids, tab order and the preview flag (dark, layout-owner build only)
- Record chat tab opens and closes in main (dark, layout-owner build only)
- Record the chat pane the window picks in main (dark, layout-owner build only)
- Open into the window's emptied pane beside a split branch in one layout command (dark, layout-owner build only)
- Write no false preview flag on a new or promoted tab (dark, layout-owner build only)
- Record simulator tab opens and closes in main (dark, layout-owner build only)
- Put main's sidebar inputs behind the ORCA_SIDEBAR_INPUTS dark build switch
- Main serves workspace icons as small data URLs for the phone (dark)
- Floating editor files keep one id from open (dark, layout-owner build only)
- Main keeps the list's time rules on one clock, checked against the window (dark)
- Main's layout Loader keeps one pane per terminal on restore (dark, layout-owner build only)
- Main records a Quick Command tab's label when the tab is created (dark, layout-owner build only)
- Save-divergence detector: skip empty workspaces, see dropped tab-bar entries and kept pane trees (dark, layout-owner build only)
- A background agent tab keeps its live title when another tab opens (dark, layout-owner build only)
- Dark phone feed of the sidebar inputs (sidebarInputs.read)
- Pane titles stay layout: the window stops writing tab names as pane titles, and main loads them as the window does (dark, layout-owner build only)
- Main's temporal owner reads the catalog the way the window does (dark)
- Main produces this host's workspace rows, checked against the window (dark)
- One placement helper for drawn tab opens (dark, layout-owner build only)
- Main drops the layout of workspaces the catalog no longer validates (dark, layout-owner build only)
- Reopening a file in its open tab sends the main process the changed file record (dark, layout-owner build only)
- Main repairs a terminal stored in two panes once at startup (dark, layout-owner build only)
- Main records when a workspace's default tabs were applied (dark, layout-owner build only)
- Main keeps editor tabs under owned ids and in-place re-owns in step (dark, layout-owner build only)
- Refuse a layout change on a workspace a WSL move has paused (dark, layout-owner build only)
- Main routes folders by the window's host rule and never stops layout frames (dark, layout-owner build only)
- Phone and old-client tab lists keep editor tabs under owned ids (dark, layout-owner build only)
- One comparison-only worktreeIdentityKey replaces three key wrappers
- One worktree path equality; the ipc copy folded WSL ext4 tails
- The host that owns a workspace stamps its Recent and Smart keys (dark)
- After a restart, the host clears sort tiers nothing backs any more (dark)
- Drop the runtimeWorktreeIdsEqual alias; name the WSL hook relay gate for what it gates
- Main routes a project registered on two machines to the same owner the window saves to (dark, layout-owner build only)
- Window saves stop carrying tab and pane layout; main keeps its own (dark, layout-owner build only)
- The window's layout stream reconnects after a drop; a retried quit still sends resume records (dark, layout-owner build only)
- Only the tabs the window just changed wait for main's answer; the window-wide layout hold goes (dark, layout-owner build only)
- Sort Recent and Smart by the owning host's stamps, hold order under the pointer (dark)
- Renderer hydration cutoffs read main's status retention window
- One isRemoteExecutionHostPtyId, on prefix semantics
- Drop remote-pty checks the shared predicate already covers
- One isLocalExecutionHost in shared
- Import orcad helpers from their owning modules; delete the orcad-runtime-lifecycle re-export shim
- Move runtime/relay to runtime/mobile-cloud-relay
- Import mobile-cloud-relay and browser-host helpers from their owning modules
- SSH pane terminals and local-to-SSH tab moves reach main directly (dark, layout-owner build only)
- Import system-ssh and ssh -G modules directly; delete the ssh-system-fallback re-export shim
- Fence the legacy relay in ssh/legacy-relay/; live deploy primitives drop the relay name
- Move orcad activation into src/main/managed-server/activation/
- Move port forwarding and hostile-host test harnesses into their own folders
- Move the managed server's install and deploy code into src/main/managed-server/install/
- Move the managed server's lifecycle into src/main/managed-server/lifecycle/
- Move host state into src/main/managed-server/host-state/
- Group system-ssh transport, ssh config and remote exec into their own folders
- Group SSH and runtime-environment IPC handlers into ipc/ssh/ and ipc/runtime-environments/
- Import ipc helpers from their owning modules, not re-export shims
- Import renderer runtime, shared remote-runtime and orcad helpers from their owning modules
- Import runtime helpers from their owning modules, not re-export shims
- Import worktree, watcher and runtime-environment helpers from their owning modules
- Send a browser tab's window times to main with its open (dark, layout-owner build only)
- Move runtime/browser-host-* into runtime/browser-host/
- The common-dir check uses areWorktreePathsEqual
- Every build is the OTA shell; drop the native/OTA build switch
- Delete native screens the OTA shell no longer reaches
- Name the vm transcript and mobile pending-write caps for what they count
- Host-twin fixture and twin isolation suite for destructive and selection actions
- Test that main and the window agree on a worktree identity rekey (tests only)
- Read isStructuredTab from the shared module the newest release defines it in
- Open and close structured chat tabs with an isolated Claude stand-in
- Ratchet importers of the deprecated runtime-owner resolvers
- Fix a timing-dependent hang in the PTY launch race test (CI only)
- Update vulnerable dependencies and prune stale overrides
- Make the hidden split-pane exit test exit cleanly (test only)
- Wait for git status before the discard confirmation test acts (test only)
- Reduce lint dependencies with Oxlint
- Pin the CocoaPods installer used by iOS releases
- Guard: older sessions' moved editor tabs get the right workspace id (tests only)
- Lock routine React Doctor and Knip execution
- Remove unused desktop and mobile declarations
- Ship the locked skills installer instead of executing npx
- Simplify CocoaPods pin checks by reusing existing Ruby CI
- Start the managed-SSH lane for remote product changes no route names
- Revert bundled skills installer; restore pinned skills@1.7.2
- Fail when Electron and orcad wire the runtime differently without a reason
- Delete the rollout-flag module nothing reads
- Delete the never-served TLS branch of the LAN WebSocket server
- Freeze the clock in the explicit-binary timeout test
- Delete unimported SSH, renderer and orchestration modules
- ORCA_FEATURE_REMOTE_AGENT_HOOKS now only gates the WSL hook relay
- Fail when orca serve's serve-selection entry or its chunks stay packed (#27404 guard)
- Fail when CI config, workflows or e2e code name a src/ file that no longer exists
- Orca serve's command line makes orcad serve the web client (#30120 regression)
- Start the managed-SSH lane for every helper only its specs import
- Native-ignore watcher test waits on delivered events, not a fixed sleep
- Start the remote host lanes and cross-version job for the transport code they execute
- Windows CLI matrix convert cell uses the convert helper that exists
- Pin the 12 hand-kept error-code lists to their callers' policy
- Path-literal check scans live gate references; historical gate commands move to currentCommand
- ComposeWorktreeId plus a ratchet on hand-built worktree ids
- Resolve macOS tmpdir realpath in create-intent and clone tests
- Tighten the round-2 parity, serve and watcher tests
- Compatibility folders name their entry modules instead of an index barrel
- Ratchet type errors under tests/ so a broken spec import can't land unnoticed
- Ratchet the legacy relay fence (importers of ssh/legacy-relay/ and COMPAT seams)
- Format the resume and transcript files main left unformatted
- @zhangxaochen made their first contribution in
- @maxmilian made their first contribution in
1.4.229
Thank you so much for using Orca and for your continued support! ❤️
- Native chat (experimental): Review turn-by-turn edits inline, expand diagrams to pan and zoom, share chat visuals with a click, and see Claude goals and Codex context usage. Keyboard answers, an unread divider and Copy on Select make long conversations easier to navigate.
- Shared skills: Shared-skill installation now supports 20 additional agents, with broader WSL discovery and the right install locations for tools such as Kiro, Qoder and CodeBuddy.
- Phone: Workspace filters, grouping and sorting now follow the desktop’s shared choices. Long-press for linked issues and notes, work with server workspaces and browser pages, or continue a supported chat in a new terminal conversation.
- SSH and remote terminals: Reconnect fixes preserve split panes, paste order and managed-server project groups. Sleeping agents resume their conversations, and removing one machine’s project leaves its same-path counterpart alone.
- Workspaces and everyday polish: Open a website from Cmd/Ctrl+J, watch checkout progress as a worktree is created, and clean up workspaces with an explicit confirmation before stopping running agents.
- Jira planning: Switch between issue lists and boards, focus on the current sprint, reuse saved JQL and Jira favourites, and start workspaces from desktop or phone. Your agents can read and update Jira tickets through the Orca CLI, too.
Native chat (experimental): Features that depend on a remote host are available when that host supports them. Update the host alongside Orca to get the latest capabilities.
The orca command on SSH hosts: Existing hosts keep their saved Orca CLI control preference. To let agents there manage workspaces or control the desktop browser, turn on Allow this host’s orca CLI to control Orca under Settings → SSH Hosts → edit the host → Advanced Connection.
Automations
*Create and edit automations on SSH projects with older paired servers, and keep scheduled work attached to the right host.*
- Stop offering Blank Terminal in agent-only pickers (automations)
- Start server-run automations' agents through the launch executor
- Display valid multi-day automation schedules
- Automation runs, CLI tabs and folder-workspace browser tabs follow the owner
- Find folder-workspace targets on the Automations page
- Stop offering Resume workspace for runs that never started an agent (STA-10103)
- Format the jobs-file limit consistently
- Remove Hermes automation support
- Sleep a finished run's terminal instead of closing it
- Run Now matches the managed server's setup after an SSH host moves
- Page automations runs so a paired server's history fits its replies
- Automations create/edit for an SSH project work against an older paired server
Native chat (experimental)
*Review edits inline, expand diagrams, share visuals, follow Claude goals and Codex context usage, and keep long conversations easier to read and continue.*
- Re-land Claude per-account folders with the upgrade and proxy fixes
- Save a new chat's first message during create
- A new Pi chat names the model it will run on its first frame
- Start orchestration workers as native chats for every agent that has native chat
- Highlight code blocks and shell commands
- Open a chat visual in its own tab instead of the sidebar
- Keep Chat UI users with a Terminal default on the terminal, with a chat mode switch in the upgrade tip
- Let a Codex chat stop a command it left running in the background
- Add "Copy sign-in link instead" for Claude accounts (STA-9912)
- Every new-chat request opens its own chat
- Native chat: identify a paired device by its device id, never its credential
- Match model picker type to the options menu
- Every agent reports its learned default model once, when a chat starts
- Floating-workspace chats of every native-chat agent keep links in the folder they started in
- Keep select-all and copy in a chat from reaching the terminal underneath
- Accept sends through their own receipt
- Edit a queued message in place, even while a question is open
- Settle a reply cut off by a server restart
- Hide agent message controls while the turn runs
- Drop the redundant 'Waiting for your answer' line from queued cards
- Show attached files as filename pills in the composer
- Offer Codex Ultrafast as a speed choice
- Let a Codex chat stop a sub-agent from the background-tasks strip
- Lazy WSL tier for Claude, Grok and omp lookup by id
- Resume a WSL session only in its own namespace, with a Linux Pi path
- Retire the pending image bubble when the CLI records its path as text
- Retire a first send's echo in transcript time, not this client's
- Reduce memory used to count Codex usage and avoid partial totals
- Update Claude usage without rereading the whole conversation
- Give each animation a reduced-motion state
- Let a Grok chat list and stop the commands it left running in the background
- Preserve running subagent rows in long chats
- Honor inactive Claude account retry deadlines
- Read ZCode conversations in their recorded order
- Register a short PostCompact hook command
- Fix Codex usage bypassing configured proxy routing
- A new chat's model and effort pickers match their first frame before the agent starts
- A closed chat tab stays closed instead of coming back on the right
- Put Continue in the card that says the reply stopped
- One shared subagent tracker for Claude, Codex and Grok chat rows
- Let managed SSH Claude chats load the agent SDK
- Offer resume after restart for chats whose only work was in the background
- Copy in remote Orca Server Codex sessions reaches your clipboard
- Keep diagram source mounted and retire reveal history
- Keep SSH chat providers alive after the desktop disconnects
- Native chat: queued-message actions and question answers accept through their own receipt
- One set of rules for chat text size, colour, hover and focus
- Use quote icon for Add to chat
- Jump to messages without scrolling animation
- Native chat: every agent launches through one composed launch path
- Offer Resume in New Native Chat only while the tab's agent is running
- Show hook failure details in error cards
- Honor Chat UI setting for worktree agent creation
- Show turn edit diffs inline in native chat
- Terminal header button: Resume in New Native Chat replaces Show chat view
- Message rail lights a message sent while the agent was working
- Name orchestration worker chat tabs after their task title
- Wrap long lines in code blocks
- Start the Codex usage probe off the main thread so focus doesn't freeze the UI
- Native chat: read one saved row per subagent (part 1 of 2)
- Name the agent when it refuses a message
- Require Codex 0.136.0 for chats
- Move Chat UI's chat settings from Experimental to the Chat page
- Register the Windows statusLine so usage updates without Git Bash
- Session History shows OpenCode, Grok, OMP and Pi chats as chats and refuses a second terminal writer
- Move the start-refusal table out so Lint passes on main
- Each Claude/Codex chat gets its own permission mode
- Replace chat upgrade switch with primary Enable Now button
- Native chat tabs show their recorded provider, not one guessed from the title
- Host writes one saved row per subagent
- Make Enable Now the full-width action in the chat upgrade tip
- Seed the chat permission default from Claude's and Codex's own arguments
- Move Permissions for new chats into the Chat page's Behavior section
- Fix delayed agent launches such as sleep 30 && claude
- Show Codex model capacity failures as red agent status
- Record the Codex capacity capture's known replay divergence
- Drop the duplicate Codex capacity replay baseline entry
- Drop the duplicate Codex capacity replay entry
- Restore the single Codex capacity replay entry
- Expand mermaid diagrams into a pan and zoom viewer
- Load long chats on the phone by keeping every update within its limit
- Chats from before permission modes keep the mode they were running with
- Resume in New Native Chat for Grok and OMP terminal conversations
- Stop is saved before it acts, and a late or repeated Stop does nothing
- Show context usage in Codex chats
- Slash-menu command names no longer look oversized
- Copy the Codex TOML parser into packaged Orca
- Combine model and options into one picker
- Phone Stop reaches a message the agent hasn't answered; unreadable task list reports unconfirmed
- A Claude model that's gone switches to the list's default when you send
- Store a chat's permission mode on its own, so a model pick can't reset it
- Pass the clock to a recorded option pick
- Drop the duplicate now key left by crossing fixes
- Questions an agent sends as permission requests are never auto-answered
- Resume in New Native Chat for OpenCode
- Native chat: a message stopped before the agent got it reaches the agent with your next send
- Native chat: record which agent run wrote each journal item (1/5, rebuild of #26867)
- Resume in New Native Chat for Pi
- Share a chat visual from the chat
- Resume in New CLI for OpenCode and OMP chats
- Add a "New" line above unseen messages
- Send typing after a click to the chat's composer
- Copy chat selections when Copy on Select is on
- Chat scratch folders expire after 30 days unused
- Native chat: one current-work projection for every host reader, death recorded first (2/5, rebuild of #26867)
- Use short effort label in the native chat model pill
- Recognize missing history before chat creation
- Focus the composer after a keyboard switch between chats
- Show and focus the field in pi text dialogs
- Show Claude's /goal in the goal banner
- Start OMP on cmd.exe when setup runs first
- Keep Claude skills tagged as skills after the agent changes folder
- Resume large terminal conversations in a new native chat
- Chat agents can declare a managed runtime that a start runs but never installs
- Open a native chat copy in the CLI without waiting for History
- One queue header that becomes the pause row; drop the composer Resume and the send dialog
- Support arrow-key answers in chat question cards
- Paste clipboard images into a chat on a managed SSH host or paired server
- Fix terminal daemon restart leaving older Codex conversations locked
- Chat agents can run with their own temp folder, cleared when they exit
- A reclamation primitive removes all but the kept managed runtime release
- Settle acknowledged messages after a paged reconnect
- Acting on one chat no longer waits on checks of every other chat
- Link a bare file name once the chat's folder has it
- Fix keyboard focus when revealing a chat in another pane
- Save agent prompts whole, bounded by what a chat message carries
- A slash command that starts a turn shows one Worked-for bar
- Keep the "New" line in place when a turn is expanded
- Native chat: one settlement transaction for everything an ended run left (4/5, rebuild of #26867)
- Enable Claude plugin images and bounded terminal file transport
- Keep idle Claude sessions selected during nested Codex work
- Never run a chat on an older host with more access than Ask for approval allows
- A transcript lookup miss creates no Codex directories
- Keep saved visuals from before the chat-scratch rename
- Offer Claude's own / commands (like /goal) in a chat before Claude starts
- Stop following the end when the reader scrolls over a visual
- Offer actions for what you right-click in chat
- Fix extra terminal during background native-chat setup
- Wait for agent readiness without blocking native chat
- Keep Claude's /color, /doctor and /reload-plugins in the chat / menu
- Identify the owner when resume creation is refused
- Keep pending chat decisions available outside loaded history
- Dictate into the composer when it lacks focus
- OMP, OpenCode and Grok chats follow their own permission mode
- Decide provider failures by kind, never by searching the payload
- A managed runtime installs only when asked, with progress and cancel
- A dot between the queue header's label and its count
- Hosts install a managed runtime over RPC, and mark agents whose program Orca provides
- The app follows a host's managed runtime install state, shared by every surface
- Verify the actual CLI conversation during resume
- Idle cleanup and commands read the helpers the agent reported, not the capped status store
- One install row shows and drives a managed runtime install, for Settings and chat
Agents, integrations & orchestration
*Plan work in Jira with boards, saved filters and current-sprint views, find the right task, and keep agent launches and session status consistent across machines.*
- Report Kiro agent status and list Kiro sessions in history
- Show the usage unit once in the status bar
- Start plain new-tab agent launches through the host's agent.launch
- One host-routed agent-detection entry point
- Route the first-work branch rename by the repo's execution host
- A session dropped on a pane edge splits the pane in paired-runtime workspaces
- Throttle and background last-status.json writes
- An old Windows or unknown-platform host asks to update instead of answering its default list
- Exclude label groups from assignable labels
- Show DeepSeek icon for observed Build sessions
- Name Agent Dashboard column regions
- One agent inventory per host and execution context
- Review providers resolve the repo on its host
- A server's late account result stays with that server
- GitHub Projects boards read from the task page's source host
- Keep Coding Plan credentials and quota tied to the selected account
- Open ZCode sign-in in the existing setup terminal
- Remove a rejected GLM key when restore fails
- Stop feature branches from borrowing unrelated PRs
- Avoid downloading unchanged paired-runtime session history
- Keep nested models off parent panes
- Session History: resume folder workspace chats in their own folder
- Account switchers and CLI cards follow the focused repo's host
- Edit agent launch settings on the workspace host
- Launch agents in existing workspaces
- Register forward-slash Windows hook paths for Grok, Devin, ZCode and Antigravity
- After a restart, an agent tab asks the terminal host what is running, never "Couldn't confirm the agent started"
- Cap Cursor's Retry-After at 24h and share one Retry-After parser
- Host plans agent launches with the window's runtime rule and one runtime fact (C1)
- Stop retried failed worker starts from piling up live agents
- Show "Network issue" for any provider whose usage request fails on the network
- Usage requests answer authenticated-proxy challenges on a cold start
- Preserve open chat status when terminals close
- A focused WSL host shows and switches its distro's accounts
- Launches a WSL host starts itself use the account selected for its distro
- Add "None" agent option that opens only the setup script
- Retire any restored agent row whose terminal died while Orca was closed (STA-10194)
- Refresh Source Control only for the worktree whose git index changed
- Open a server agent's notification on its server
- Refuse an agent whose WSL runtime needs repair under its own code, in the settings page's words
- Fix CLI delivery and fresh launch environments for managed SSH agents
- AI-button and OpenCode-model tabs start their agent in their own terminal
- Refuse desktop resumes of chat-owned conversations
- Trust a WSL share path's distro in the agent list, over Orca's cached distro list
- Keep status refresh for worktrees whose admin dirs differ only by case
- Clear agent selections in workspace creation and settings
- Finish agent-selection cleanup and restore merge validation
- Keep issue titles readable in narrow panels
- Keep description and comment hyperlinks clickable
- Let agents read and update Jira tickets safely
- Support scoped Cloud API tokens
- Keep edits and comments visible while saving
- Generate issue titles on the connection host
- Fix Jira Cloud All and classify presets by ticket status
- Resolve Jira keys in workspace references
- Show every linked Jira workspace and add a Has Workspace view
- Notice Jira and Linear state changes from other processes
- Add row quick copy and reusable prompt templates
- Save and reuse named Jira JQL filters on the execution host
- Choose planning columns in the issue list
- Choose Jira key casing and keep canonical Jira keys in review titles
- Collect required fields before changing status
- Restore Jira CI lint checks without changing behavior
- Make existing Jira assignees searchable and add Assign to me
- View Jira work on a board and filter the current sprint
- Load attachment images outside issue Markdown
- Remember repository project defaults
- Split Jira issue workspace hooks and IPC param checks
- Refuse a picked OpenCode model in any WSL share repo
- Show whole credit balances in usage displays
- Find a repo's project the way the window does
- Stop Jira search loops when saved filters fail to load
- Add bounded site-specific favourite filter catalogue
- Avoid blank shells when launching new workspaces
- Use favourite filters within their source site
- Show linked workspaces in Has Workspace by matching the Jira login, not its label
- Session History: show the scan's progress in a strip under the search box
- Keep collapsed sidebar agent cards steady when the child arrow appears
- Session History: let a scan run until it finishes instead of stopping it after 130 s
- Stop nested reviews from collapsing Claude children
- Resolve SSH host aliases for account binding
- Clear a Claude permission wait when its approved tool fails
- Keep scan notices from burying the session list
- Show usage from the host that owns the accounts
- Removing a worktree drops its sleeping-agent records
- Remote worker liveness reports exited when the host proves the agent gone
- Quote resume commands for a Windows SSH host's own shell
- Release a Claude permission wait that ended during an SSH disconnect
- The wake sweep no longer forks sessions owned by a disconnected SSH pane or a stale-workspace record
- A proven agent exit survives restarts, late hooks and same-second attaches
- Open disk usage in a separate window
- Open the browser for a WSL account sign-in
- Bound retained agent exits
- New-agent shortcut, Explain and direct launches ask the workspace's own host for its agents
- A resumed agent's chat is readable on the phone before its first new turn
- Direct work-item and checks-fix launches quote for the execution host
- Let npm-installed agents generate commit messages on Windows
- Native-chat agents get their mail notice right away, the same way for every agent
- Session History: stop re-reading unchanged transcripts past 4,096 files
- Bold an agent row only while looking at it can clear it
- Session History: save the parse cache one row per transcript, so restarts re-read nothing
- Load MR reviewer choices from the paired server that owns the repo
- Fill the label and reviewer pickers and stop replacing issue assignees
- No false "Couldn't launch" toast while a new agent's terminal is still starting
- Delete the active or a running-agent workspace like a sidebar delete
SSH, managed servers & remote
*Reconnect after sleep or a network drop, recover split panes without losing their siblings, resume sleeping agents, and preserve each machine’s projects and running work.*
- Show help before server startup
- Start AI commit messages from the same shell environment chats use
- Host registry stops minting client SSH hosts from a server's nested target
- Folder workspaces can answer "paired server"
- Keep MCP repository settings on their selected host
- Extract subprocess handling into @orca/process-host
- Keep a floating terminal floating when its cwd is inside a workspace
- Bounded OpenClaw discovery; title filter when a host's search is off
- A tab stream the host ends resubscribes on the retry backoff
- Automatic tab activation no longer wakes a wo…
1.4.227
Thank you so much for using Orca and for your continued support! ❤️
- Native chats have their own permission mode. Choose permissions for each new Claude or Codex chat from Settings → Chat → Behavior; existing chats keep the mode they were already using, and changing models no longer resets it.
- Native chat sessions are easier to continue. You can resume large terminal conversations in a new native chat, recover chats whose only work ran in the background after a restart, and see every supported chat provider accurately in Session History.
- Claude accounts and Codex chat setup are smoother. Claude accounts again use separate folders, the sign-in link can be copied, Codex chats require version 0.136.0 or later, and Codex Ultrafast is available as a speed choice.
- Browser automation gives your keyboard back reliably. Agent browser commands target the intended page, and browser popups behave more like Chrome.
- Also: worktree cleanup is safer, read macOS notifications disappear from Notification Center, long chats load better on phones, and cold session-history reads avoid unnecessary reindexing.
UI / workspace
*Safer worktree cleanup, tidier macOS notifications and small translation cleanup.*
- fix(worktrees): never delete a folder git no longer tracks
- fix(notifications): remove read macOS notifications from Notification Center by pane thread
- fix(i18n): drop chat-mode keys removed from en.json in #28113
Orchestration
*Retries no longer leave failed worker starts piling up as live agents.*
- fix(orchestration): stop retried failed worker starts from piling up live agents
Agents / native chat
*Each Claude and Codex chat keeps its own permission mode, chats are easier to resume and manage, Claude accounts return with safer sign-in, and chat settings and model handling are more consistent.*
- feat(native-chat): each Claude/Codex chat gets its own permission mode
- fix(native-chat): chats from before permission modes keep the mode they were running with
- fix(native-chat): seed the chat permission default from Claude's and Codex's own arguments
- feat(settings): move Permissions for new chats into the Chat page's Behavior section
- fix(native-chat): store a chat's permission mode on its own, so a model pick can't reset it
- feat(native-chat): require Codex 0.136.0 for chats
- feat(native-chat): offer Codex Ultrafast as a speed choice
- Re-land Claude per-account folders with the upgrade and proxy fixes
- Add "Copy sign-in link instead" for Claude accounts (STA-9912)
- fix(native-chat): offer resume after restart for chats whose only work was in the background
- fix(native-chat): resume large terminal conversations in a new native chat
- Terminal header button: Resume in New Native Chat replaces Show chat view
- fix(tab-bar): offer Resume in New Native Chat only while the tab's agent is running
- Session History shows OpenCode, Grok, OMP and Pi chats as chats and refuses a second terminal writer
- Session History: resume folder workspace chats in their own folder
- Resume dialog: show a finished resume as a result, not a picker
- Save a new chat's first message during create
- fix(native-chat): settle a reply cut off by a server restart
- Open a chat visual in its own tab instead of the sidebar
- Let a Codex chat stop a command it left running in the background
- fix(native-chat): preserve running subagent rows in long chats
- A new Pi chat names the model it will run on its first frame
- Keep Chat UI users with a Terminal default on the terminal, with a chat mode switch in the upgrade tip
- Floating-workspace chats of every native-chat agent keep links in the folder they started in
- Every agent reports its learned default model once, when a chat starts
- Let a Grok chat list and stop the commands it left running in the background
- Let a Codex chat stop a sub-agent from the background-tasks strip
- fix(native-chat): a new chat's model and effort pickers match their first frame before the agent starts
- Native chat: every agent launches through one composed launch path
- Edit agent launch settings on the workspace host
- One shared subagent tracker for Claude, Codex and Grok chat rows
- Native chat: read one saved row per subagent (part 1 of 2)
- feat(chat): host writes one saved row per subagent
- feat(settings): move Chat UI's chat settings from Experimental to the Chat page
- fix(tab-bar): native chat tabs show their recorded provider, not one guessed from the title
- Replace chat upgrade switch with primary Enable Now button
- Make Enable Now the full-width action in the chat upgrade tip
Remote server / SSH
*Paired devices are identified by their device ID instead of a credential.*
- native chat: identify a paired device by its device id, never its credential
Browser
*Popups follow Chrome’s behavior more closely, while agent browser actions stay focused on the intended page and return the keyboard when they finish.*
- Open links and window.open in Orca tabs the way Chrome does
- Fix browser login popups and menu actions in native windows
- Auto-hide menu bar in web popups and re-layout when revealed
- fix(browser): agent bringToFront and activateTarget no longer take your keyboard (1/3)
- fix(browser): agent keys and text go to the page, never into your terminal (2/3)
- fix(browser): agent clicks give your keyboard back (3/3)
- fix(browser): require a target for ambiguous keypress commands
- fix(browser): refuse web pages on the agent-browser CDP proxy
GitHub / source control
*AI commit messages now start from the same shell environment that chats use.*
- Start AI commit messages from the same shell environment chats use
Performance
*Windows notifications no longer freeze Orca, and cold session-history reads skip unchanged transcript reindexing.*
- perf(notifications): stop every Windows notification from freezing Orca
- Skip reindexing unchanged transcripts on cold session list reads
Mobile
*Long chats preserve each update within its limit, remember the reader’s place, and open every supported native-chat provider on the phone.*
- fix(native-chat): load long chats on the phone by keeping every update within its limit
- fix(mobile): keep the chat where the reader scrolled to
- fix(mobile): open Grok, OpenCode, OMP and Pi chats on the phone
1.4.226
- fix(sidebar): stop the workspace link icon lighting up on hover
- Share any HTML file from the editor and the remote preview
- Use a minimize icon in the Update skills dialog
- fix(diff): stop closed diff editors from leaking through Monaco's gutter menu
- refactor(automations): main creates an automation workspace's setup and default tabs
- feat(crash-reporting): name the code behind a renderer out-of-memory crash
- fix(i18n): correct Korean Settings translations
- fix(i18n): translate Settings help as whole sentences instead of fragments
- fix(editor): keep a pinned duplicate open on close and ignore setActiveFile for a missing file
- fix(floating-workspace): open the floating panel instead of blanking the main window on host reveals
- Close worktree ready notification when its workspace opens
- refactor(runtime): main alone starts setup and default tabs for an activated create
- Show folder workspaces in the Cmd+J jump palette
- refactor(main): share one caller-signal + timeout helper
- fix(notifications): remove read macOS notifications from Notification Center by pane thread
- fix(automations): format the jobs-file limit consistently
- fix: update status bar and tray labels when language changes
- Preserve significant spaces in Explorer contents search
- fix(process-host): accept string stdin in synchronous runs
- Fix Vercel recipe failures on stock macOS Bash
- fix(cli): warn when a workspace status has no board column
- fix(speech): release dictation window listeners after stop
- fix: nest settings translation keys for language packs
- fix(files): never write through a dangling symlink
- feat(new-workspace): add "None" agent option that opens only the setup script
- chore(i18n): translate 259 new keys to es/fr/ja/ko/zh
- fix(i18n): correct literal-sense Japanese mistranslations
- Clear agent selections in workspace creation and settings
- feat(cli): open files at a requested line and column
- fix(jira): keep issue titles readable in narrow panels
- fix(jira): keep description and comment hyperlinks clickable
- feat(cli): let agents read and update Jira tickets safely
- fix(jira): support scoped Cloud API tokens
- fix(jira): keep edits and comments visible while saving
- Search connected tasks by keyword from Cmd+J
- feat(jira): generate issue titles on the connection host
- Fix Jira Cloud All and classify presets by ticket status
- feat(cli): resolve Jira keys in workspace references
- Show every linked Jira workspace and add a Has Workspace view
- fix(integrations): notice Jira and Linear state changes from other processes
- feat(jira): add row quick copy and reusable prompt templates
- Save and reuse named Jira JQL filters on the execution host
- feat(jira): choose planning columns in the issue list
- Filter Jira preset views by multiple workflow statuses
- Choose Jira key casing and keep canonical Jira keys in review titles
- fix(jira): collect required fields before changing status
- Make existing Jira assignees searchable and add Assign to me
- View Jira work on a board and filter the current sprint
- feat(jira): load attachment images outside issue Markdown
- feat(jira): remember repository project defaults
- refactor(unread): one workspace-attention module owns every unread transition
- Split Jira issue workspace hooks and IPC param checks
- fix(unread): a pane is read when it is on screen; closing a waiting tab clears its dot
- fix(chat): name orchestration worker chat tabs after their task title
- fix(orchestration): stop retried failed worker starts from piling up live agents
- Shorten worker sub-dispatch instructions
- Show turn edit diffs inline in native chat
- Terminal header button: Resume in New Native Chat replaces Show chat view
- fix(native-chat): message rail lights a message sent while the agent was working
- Keep a "chats resumed" entry in the bottom bar until you've seen the result
- feat(native-chat): wrap long lines in code blocks
- fix(rate-limits): start the Codex usage probe off the main thread so focus doesn't freeze the UI
- Native chat: read one saved row per subagent (part 1 of 2)
- fix(chat): name the agent when it refuses a message
- feat(native-chat): require Codex 0.136.0 for chats
- feat(settings): move Chat UI's chat settings from Experimental to the Chat page
- refactor(chat): give the start-refusal resumable table its own module
- Session History shows OpenCode, Grok, OMP and Pi chats as chats and refuses a second terminal writer
- feat(native-chat): each Claude/Codex chat gets its own permission mode
- Replace chat upgrade switch with primary Enable Now button
- fix(i18n): drop chat-mode keys removed from en.json in #28113
- fix(tab-bar): native chat tabs show their recorded provider, not one guessed from the title
- feat(chat): host writes one saved row per subagent
- Resume toast: say what happened and name its action
- Make Enable Now the full-width action in the chat upgrade tip
- fix(native-chat): seed the chat permission default from Claude's and Codex's own arguments
- chore(session): delete three session paths nothing calls any more
- feat(settings): move Permissions for new chats into the Chat page's Behavior section
- After a restart, an agent tab asks the terminal host what is running, never "Couldn't confirm the agent started"
- Fix delayed agent launches such as sleep 30 && claude
- Show Codex model capacity failures as red agent status
- feat(native-chat): expand mermaid diagrams into a pan and zoom viewer
- fix(automations): stop offering Resume workspace for runs that never started an agent (STA-10103)
- fix(native-chat): chats from before permission modes keep the mode they were running with
- fix(usage): cap Cursor's Retry-After at 24h and share one Retry-After parser
- Resume in New Native Chat for Grok and OMP terminal conversations
- Host plans agent launches with the window's runtime rule and one runtime fact (C1)
- fix(native-chat): Stop is saved before it acts, and a late or repeated Stop does nothing
- fix(usage): show "Network issue" for any provider whose usage request fails on the network
- feat(native-chat): show context usage in Codex chats
- refactor(session-history): one decision for a row's open and resume offers
- fix(usage): usage requests answer authenticated-proxy challenges on a cold start
- fix(agent-status): preserve open chat status when terminals close
- fix(native-chat): slash-menu command names no longer look oversized
- fix(packaging): copy the Codex TOML parser into packaged Orca
- feat(native-chat): combine model and options into one picker
- fix(agent-status): retire any restored agent row whose terminal died while Orca was closed (STA-10194)
- fix: a Claude model that's gone switches to the list's default when you send
- AI buttons stop writing a launch record
- fix(native-chat): store a chat's permission mode on its own, so a model pick can't reset it
- refactor(native-chat): rename the chat visuals folder to the chat scratch folder
- fix(native-chat): pass the clock to a recorded option pick
- AI-button and OpenCode-model tabs start their agent in their own terminal
- fix(session-history): refuse desktop resumes of chat-owned conversations
- fix(native-chat): drop the duplicate now key left by crossing fixes
- feat(acp): questions an agent sends as permission requests are never auto-answered
- Resume in New Native Chat for OpenCode
- Native chat: a message stopped before the agent got it reaches the agent with your next send
- feat(runtime-files): the host serves a chat's scratch folder as a file root
- fix(browser): settle WSL tunnel reads so responses past 256 KiB complete
- fix(kimi): give Kimi a Windows .cmd status hook that cmd.exe can run
- fix(agent-hooks): register forward-slash Windows hook paths for Grok, Devin, ZCode and Antigravity
- fix(daemon): verify daemon PID identity from the native Windows process table, not PowerShell
- fix(claude): register the Windows statusLine so usage updates without Git Bash
- fix(wsl): start every host wsl.exe call through process-host so no console window flashes
- fix(wsl): run WSL git with Windows Git line-ending settings on checkouts Windows Git wrote
- fix(wsl): recheck watcher-reported paths with full stat on Windows Git drive checkouts
- fix(daemon): keep the relocated Windows daemon host's conpty.dll under the path limit
- feat(wsl): orcad host transport over wsl.exe (WSL-via-orcad C1)
- feat(wsl): detached distro holder re-adopted from a pid file (WSL-via-orcad C3)
- feat(wsl): deploy and launch orcad inside a WSL distro (WSL-via-orcad C4)
- fix(windows): restrict secure files in-process instead of spawning icacls
- feat(wsl): connect to a WSL distro's orcad over wsl.exe stdio only (WSL-via-orcad C5)
- feat(wsl): liveness, failure classification and recovery for WSL orcad (WSL-via-orcad C6)
- feat(wsl): accounts shim for agents on a WSL orcad host (WSL-via-orcad C9)
- feat(wsl): account env for agent tabs on a WSL orcad host (WSL-via-orcad C9b)
- feat(wsl): WSL distro hosts, main-process wiring and persistence (WSL-via-orcad C7a, experimental)
- refactor(orcad-migration): migration source abstraction, capability-gated source.kind, path-rewrite stage (WSL-via-orcad D0)
- feat(wsl): Add WSL distro host UI and status (WSL-via-orcad C7b, experimental)
- feat(wsl): Windows path actions for WSL hosts through one owner-routed capability (WSL-via-orcad C8)
- refactor(wsl): register WSL host IPC only when the WSL host service exists
- fix(wsl-host): orcad's own git sees the login shell's SSH agent, proxy and signing env
- refactor(wsl): checked command-channel construction and the shared keyed queue
- fix(orcad): keep Codex status hooks in a managed account home on a WSL host, and list its sessions
- Support restarting Windows Orca as administrator
- feat(wsl-mover): decide every piece of project state and add a losslessness check (D1b-1)
- feat(wsl-mover): accept local WSL projects on the migration wire, only in their own distro (D1b-2)
- refactor(wsl): reuse the WSL-host predicate, error helper and a shared owner lookup
- fix(accounts): a focused WSL host shows and switches its distro's accounts
- fix(accounts): launches a WSL host starts itself use the account selected for its distro
- fix(wsl-host): let an app update reach a WSL host orcad (E1)
- feat(wsl-mover): choose which projects a distro move takes and rewrite their paths (D1b-3)
- fix(agent-launch): refuse an agent whose WSL runtime needs repair under its own code, in the settings page's words
- feat(wsl-mover): bind the host to its distro registration and preflight every moved path (D1b-4)
- fix(agent-detection): trust a WSL share path's distro in the agent list, over Orca's cached distro list
- feat(wsl-mover): a journal and fence for local WSL moves, on one shared journal store (D1b-5a)
- feat(wsl-mover): terminal gate, last-folder capture and exit proof for a WSL move (D1b-5b)
- feat(wsl-mover): fence moving projects from new terminals and hide them once the host owns them (D1b-5c)
- chore: upgrade terminal dependencies to matching payload betas
- fix(layout): save terminal rows in the tab groups' order
- fix(terminal): keep the tab when a reattach finds its process gone
- fix(terminal): show a host-created setup split in the window that holds its tab
- feat(daemon): pace automatic terminal restores on the desktop too
- fix(terminal): name a new tab's first pane so its saved layout is never empty
- feat(linux): run the AppImage terminal daemon off the mount, on the extracted copy's bundled Node
- fix(terminal-daemon): status says live, exited or unverifiable, and shows the process ceiling
- fix(daemon): a stop requested from outside never counts as a crash
- fix(linux): unpack the AppImage copy in the background so the first daemon runs from it
- fix(layout): restore the saved active group as a window does in the session-tabs projection
- fix(terminal): a slow window no longer makes orca terminal create fail and then duplicate
- Start a startup terminal while Orca's window is hidden instead of waiting for it to be shown
- fix(terminal): send only the text a Linux IME commits, not the candidate key
- fix(terminal): retain CRLF split across output chunks
- Preserve valid terminal file links when another candidate fails
- fix(terminal): keep the text of an IME key pressed before a commit finalizes
- fix(keybindings): match modifier chords pressed during IME composition by physical key
- fix(terminal): don't report kitty releases for key presses the app never received
- fix(terminal): store the Terminal shell setting trimmed so agent tabs start like plain tabs
- refactor(pty): one failure cleanup and agent_error for both terminal spawn paths
- fix(terminal): judge an agent's --shell against the runtime it runs in
- fix(orcad): identify instances by kernel start ticks, not drifting wall-clock start time
- fix(runtime): stop a project's terminals before the host forgets the project
- fix(terminal): keep a named terminal's title across an orca serve restart
- fix(ssh): let existing profiles migrate without losing client history
- build(linux): carry the pinned Node inside the AppImage so serve's slot works offline
- fix(serve): clearer headless-display and supervisor messages on Linux
- fix(linux): direct AppImage serve honours the chosen profile and --supervise
- fix(linux): register the stable launcher when serving from an extracted AppImage
- fix(ssh): show managed hosts once in the connection menu
- fix(linux): a supervised serve run from the AppImage stays in place
- fix(linux): a supervised AppImage serve follows a replaced AppImage
- fix(remote): keep a paired pane when the desktop has not opened it yet
- fix(remote-runtime): wait for the desktop's terminal list before opening a terminal
- fix(ssh): a disconnect keeps an old relay terminal's tab on that terminal instead of starting a new shell
- fix(ssh): a host whose ssh_config forwards a port can still open its server tunnel (STA-10471)
- fix(ssh): an SSH host comes back after restarting Orca instead of staying offline (STA-10476)
- fix(ssh): Cancel on an SSH password prompt no longer brings it straight back
- fix(ssh): a system-SSH host whose sshd refuses forwarding reaches its managed server over exec
- fix(ssh): the stdio bridge clears an ssh -L an earlier Orca left on its port
- feat(notifications): open a server agent's notification on its server
- Fix CLI delivery and fresh launch environments for managed SSH agents
- fix(orcad): stamp the build commit so orca skills install works on SSH and headless hosts
- fix(runtime): save a windowless host's chat tabs in its layout
- fix(ssh): a new desktop can connect to a host already running a different Orca server version
- fix(ssh): a password host no longer asks again after every reconnect
- fix(cloud-auth): one owner for the cloud session; never drop a rotated token, stop after a 401
- fix(ssh): the CLI, phone and paired clients no longer list a converted host's retained rows
- fix(serve): restore a remote server's browser tabs after it restarts
- fix(browser): annotation card and outline follow the picked element
- Auto-hide menu bar in web popups and re-layout when revealed
- feat(browser): collapse the annotation panel to one row
- fix(browser): require a target for ambiguous keypress commands
- fix: distinguish unreadable cookies from related import skips
- Fix browser login popups and menu actions in native windows
- fix(browser): agent bringToFront and activateTarget no longer take your keyboard (1/3)
- fix(browser): agent keys and text go to the page, never into your terminal (2/3)
- Stop orphaned background browsers from blocking Orca updates
- fix(browser): agent clicks give your keyboard back (3/3)
- Fix linked reviews stuck loading on detached workspaces
- Refresh Source Control only for the worktree whose git index changed
- fix(source-control): keep status refresh for worktrees whose admin dirs differ only by case
- fix(worktrees): never delete a folder git no longer tracks
- Keep CI failure excerpts bounded and strip malformed ANSI controls linearly
- perf(agent-hooks): drop the extra PowerShell per hook event for Gemini, dsh, Kiro, Droid and Command Code
- perf(copilot): run the Windows status hook as a direct .cmd, faster and UTF-8 safe
- perf(pty): check WSL working directories off the main thread
- perf(claude): run the Windows Claude hook as a signed native claude-hook.exe
- perf(mobile): skip re-rendering unchanged worktree rows
- perf(runtime): stop re-sending the worktree list to mobile pollers on every terminal chunk
- perf: reuse verified Node and run the layout check with Bun
- perf(wsl): pooled wsl.exe command loops and orcad compile cache on the WSL wake path (C4 follow-up)
- perf(wsl): skip re-hashing unchanged orcad artifacts and guest Node runtime on the WSL wake path (C4c)
- perf(session-history): stop a cancelled scan inside the file it is reading
- perf(native-chat): read the composer's text and caret straight from the editor
- perf(session-history): end a scan only when it stops making progress
- perf(session-history): keep a timed-out scan's finished transcripts
- perf(worktrees): fetch the base while the host's create picks a name
- perf(ai-vault): share concurrent Codex title-index reads
- feat(mobile): show the OTA download as a progress bar
- fix(mobile): drop the download bar glide so it always matches the MB counter
- fix(mobile): keep a not-sent message in place on the phone, using the desktop's logic
- chore(mobile): bump to 0.0.55 and Android versionCode 20
- fix(mobile): copy complete chat replies and loaded markdown
- fix(mobile): load markdown tabs from any desktop split group; center load-error Retry
- Link the Android APK through a stable URL and bump it on release
- fix(emulator): stop only the named simulator's stream helper (STA-10307)
- fix(native-chat): load long chats on the phone by keeping every update within its limit
- fix(native-chat): phone Stop reaches a message the agent hasn't answered; unreadable task list reports unconfirmed
- feat(mobile): show and use the desktop's server workspaces on the phone
- feat(mobile): create workspaces on the desktop's servers from the phone
- feat(mobile): view and drive server browser pages the desktop renders
- fix(mobile): keep the chat where the reader scrolled to
- fix(mobile): check a server workspace's SSH state on that server
- feat(mobile): list the desktop's server projects on the phone's Tasks screen
- fix(tasks): make mobile and desktop searches agree
- feat(tasks): browse Jira and start workspaces on mobile
- [CI] Advance test clocks and preserve cleanup checks
- fix(ci): point the main sync-spawn ratchet at the shared ratchet library
- [CI] Reduce transcript waits and redundant runner demand
- test(orcad): retry launcher-isolation teardown when Windows holds node.exe (EBUSY)
- [CI] Reduce repeated test imports, waits and unrelated jobs
- fix(native-chat): move the start-refusal table out so Lint passes on main
- docs(native-chat): say why /clear is refused while the agent works instead of queued
- [CI] Warm only Linux for compiler recipe changes
- fix(lint): move the doc preview guest-focus handoff into its own hook
- Speed up daemon smoke checks and keep compiler slots busy
- Fix main CI failures in preview lint and history cleanup
- [CI] Reduce repeated test imports, waits and unrelated Codex jobs
- Speed up Mobile Checks by overlapping typechecks and tests
- docs(readme): point the Android APK links at 0.0.55
- ci(windows): build the agent hook before packaging in installer e2e workflows
- [CI] Reuse test compilation and reduce avoidable test waits
- test(daemon): a Node-hosted launcher keeps a busy Electron-hosted daemon and its terminals
- fix(ci): route the worktree ready toast's host check by its owner, not the Active Server setting
- Cache mobile typechecks and overlap CI setup
- fix(ci): record the Codex capacity capture's known replay divergence
- fix(ci): drop the duplicate Codex capa…
1.4.225
Thank you so much for using Orca and for your continued support! ❤️
- SSH and managed servers: New SSH connections now use Orca's managed server. Terminals left running by v1.4.224 keep working in their existing tabs through the upgrade and reconnect; new terminals open on the managed server. Saved port forwards return, Windows managed-host terminals get the orca CLI, and managed Claude chats keep their provider running after the desktop disconnects. Hosts that cannot run the managed server show a clear reason; the old SSH fallback is no longer available.
- Native chat (experimental): Code blocks and shell commands are highlighted, attached files show as filename pills, and you can edit a queued message even while the agent is asking a question. Codex offers Ultrafast and can stop background commands and subagents; Grok can list and stop its background commands too. A new chat saves its first message immediately, closed chats stay closed, and interrupted replies put Continue in the explanation card. Mermaid diagrams work better in dark mode, and chat visuals can open in their own tab.
- Agents and accounts: Kiro reports agent status and appears in Session History. Claude accounts use separate folders and offer Copy sign-in link instead. Orchestration workers can start as native chats for supported agents, agent launch settings are edited on the workspace's own host, and account switching and MCP settings stay with the selected host.
- Remote work: The Ports panel scans and stops ports on the workspace's own computer, Resource Manager lists that host's processes, and Agent Dashboard can show terminal previews from the owning host. Files, project creation, pull request and merge request actions, account results and settings follow the computer that owns them. Re-pairing the same server keeps its environment, and one unreadable saved record no longer makes the whole server unusable.
- Serving and updates: orca serve --supervise gains a supervisor that runs from a copy outside the app, and orca serve service install, status and uninstall manage a service. Updates preserve Codex sign-in before a headless restart, macOS terminal permissions survive app updates, and automatic terminal restores are paced and limited to avoid runaway restarts. Linux keeps AppImage copies that are still in use and shows a persistent restart banner if a terminal background service's files are gone.
- Phone and iPad: Grok, OpenCode, OMP and Pi chats open on the phone. iPad keeps chat drafts and the host sidebar reachable, workspace badges show SSH host health, tool results stay with the right command, and terminal views accept a fresh snapshot after a stream ends.
- Workspaces and automations: You can copy stable tab references and manage workspace references from the CLI, and launch an agent in an existing workspace from the CLI. Folder workspaces appear as automation targets, multi-day schedules display correctly, removed folder workspaces no longer leave blank sidebar rows, and the worktree is ready notification stays until you dismiss it. Feature branches no longer borrow unrelated pull requests.
- Windows, WSL and Linux: Windows notifications no longer freeze Orca, CodeBuddy hooks work without PowerShell 7, and quitting Claude or Codex in cmd.exe or Git Bash removes it from the running list. WSL paths open in Cursor's WSL mode, background work leaves stopped distributions asleep, Windows-drive searches use the host's ripgrep, and Wayland clipboard text stays current.
- Reliability and performance: Orca is more reliable and responsive, with safer terminal restores, stronger connection recovery, less main-thread work, and faster background and CI workflows.
- Also: Nim and Typst highlighting no longer lets a long line freeze the window, HTML previews load authorized web fonts, links open in Orca tabs like they do in Chrome, cancelled browser-tab drags leave tabs clickable, and terminal output, usage counting and project discovery do less work on the main thread.
SSH hosts that cannot run the managed server: This version no longer falls back to the old SSH runtime. If the host is unsupported, Settings → SSH Hosts explains why. Use an older Orca version to keep connecting to a host the managed server cannot support.
The orca command in older SSH terminals: Terminals kept running from v1.4.224 still accept typing, output and resizing, but orca commands are unavailable inside those older terminals. Run them in a new terminal on the same host.
Tab order after a cold restart: If the terminal background process is killed before Orca reopens, the saved terminal-tab order can disagree with the tab bar. This remains a known layout issue.
OpenCode 2: If you update from v1.4.219 or earlier, OpenCode 2 panes that were already running may show no status until you restart OpenCode in them. If you downgrade Orca after updating, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Native chat (experimental)
*Code blocks and commands are highlighted, attachments appear as filename pills, queued messages can be edited while a question is open, and interrupted replies offer Continue in the explanation card. Codex and Grok can stop their background work, chats keep their first message and stay closed after you close them, and diagrams work better in dark mode.*
- Save a new chat's first message during create
- A new Pi chat names the model it will run on its first frame
- feat(native-chat): highlight code blocks and shell commands
- Open a chat visual in its own tab instead of the sidebar
- Keep Chat UI users with a Terminal default on the terminal, with a chat mode switch in the upgrade tip
- Let a Codex chat stop a command it left running in the background
- fix(native-chat): every new-chat request opens its own chat
- native chat: identify a paired device by its device id, never its credential
- fix(native-chat): match model picker type to the options menu
- Every agent reports its learned default model once, when a chat starts
- Floating-workspace chats of every native-chat agent keep links in the folder they started in
- Keep select-all and copy in a chat from reaching the terminal underneath
- fix(native-chat): accept sends through their own receipt
- fix(native-chat): edit a queued message in place, even while a question is open
- fix(native-chat): settle a reply cut off by a server restart
- fix(native-chat): hide agent message controls while the turn runs
- fix(native-chat): drop the redundant 'Waiting for your answer' line from queued cards
- feat(native-chat): show attached files as filename pills in the composer
- feat(native-chat): offer Codex Ultrafast as a speed choice
- Let a Codex chat stop a sub-agent from the background-tasks strip
- fix(native-chat): lazy WSL tier for Claude, Grok and omp lookup by id
- fix(native-chat): retire the pending image bubble when the CLI records its path as text
- fix(native-chat): retire a first send's echo in transcript time, not this client's
- Keep tool results with the right command and reveal all results on mobile
- fix(native-chat): give each animation a reduced-motion state
- Let a Grok chat list and stop the commands it left running in the background
- fix(native-chat): preserve running subagent rows in long chats
- fix(native-chat): read ZCode conversations in their recorded order
- fix(native-chat): a new chat's model and effort pickers match their first frame before the agent starts
- A closed chat tab stays closed instead of coming back on the right
- Theme Mermaid diagrams for dark mode
- fix(native-chat): put Continue in the card that says the reply stopped
- One shared subagent tracker for Claude, Codex and Grok chat rows
- Session History: resume folder workspace chats in their own folder
- fix(native-chat): offer resume after restart for chats whose only work was in the background
- fix(native-chat): keep diagram source mounted and retire reveal history
- native chat: queued-message actions and question answers accept through their own receipt
- fix(native-chat): one set of rules for chat text size, colour, hover and focus
- fix(native-chat): use quote icon for Add to chat
- fix(chat): jump to messages without scrolling animation
- Native chat: every agent launches through one composed launch path
- fix(tab-bar): offer Resume in New Native Chat only while the tab's agent is running
- fix(chat): show hook failure details in error cards
- Resume dialog: show a finished resume as a result, not a picker
Agents, accounts & orchestration
*Kiro reports its status and appears in Session History, Claude accounts use separate folders and offer a sign-in link you can copy, and orchestration workers can start as native chats. Agent settings, account results and MCP settings stay with the computer that runs the work.*
- feat(kiro): report Kiro agent status and list Kiro sessions in history
- Re-land Claude per-account folders with the upgrade and proxy fixes
- Start orchestration workers as native chats for every agent that has native chat
- Add "Copy sign-in link instead" for Claude accounts (STA-9912)
- Keep MCP repository settings on their selected host
- fix(agents): one host-routed agent-detection entry point
- fix(agent-hooks): route the first-work branch rename by the repo's execution host
- fix(ai-vault): bounded OpenClaw discovery; title filter when a host's search is off
- fix(ai-vault): resume a WSL session only in its own namespace, with a Linux Pi path
- fix(pi): name workflow child rows by their step key, not only the agent
- fix(agents): show DeepSeek icon for observed Build sessions
- fix(zcode): keep Coding Plan credentials and quota tied to the selected account
- feat(accounts): open ZCode sign-in in the existing setup terminal
- Honor inactive Claude account retry deadlines
- fix(accounts): remove a rejected GLM key when restore fails
- fix(orcad): install agent status hooks when a managed host starts
- fix(claude): register a short PostCompact hook command
- fix(agent-status): keep nested models off parent panes
- fix(zsh): keep deferred line-init defined for plugins that call it by name
- Fix Codex usage bypassing configured proxy routing
- Fix cold proxy authentication in the desktop HTTP client
- fix(renderer): account switchers and CLI cards follow the focused repo's host
- Edit agent launch settings on the workspace host
SSH, managed servers & remote
*New SSH connections use the managed Orca server, while terminals left running by v1.4.224 keep working in their existing tabs. Saved port forwards return, remote files open on their own computer, and projects, reviews, settings, ports and processes follow the host that owns them.*
- fix(hosts): host registry stops minting client SSH hosts from a server's nested target
- fix(folders): folder workspaces can answer "paired server"
- Allow paired-server files to drop into their own terminals
- fix(session-tabs): a tab stream the host ends resubscribes on the retry backoff
- fix(ssh): a direct-SSH host republish no longer steals this view's tab selection
- fix(session-tabs): a restored terminal row is retired only by its own host PTY
- fix(terminal): honor the OpenSSH DefaultShell on Windows SSH hosts running orcad
- fix(session-tabs): a returning paired publisher is repaired by an authoritative census
- fix(hosts): the unresolved-owner sentinel is never routable
- fix(runtime): worktree create enforces the lineage host boundary
- fix(repos): every repo catalog uses the host-catalog fence
- fix(web): usage and account switching come from the paired server
- fix(web): Jira reaches the server
- fix(hosts): a server whose status answers is selectable while shared control connects
- fix(cli): orca file open and diff open name their owner
- fix(agents): an old Windows or unknown-platform host asks to update instead of answering its default list
- fix(pairing): advertise a key and fallback port the host can actually serve
- fix(shell): OS open actions follow the file's owner, not the focused server
- fix(pairing): pairing with this same Orca profile is refused
- feat(hosts): servers publish a host descriptor
- feat(ports): host-scoped port scan and stop on the server
- feat(pairing): re-pairing the same server keeps its environment
- fix(cli): check the runtime source before sending
- feat(runtime): the host refuses a request meant for another runtime
- fix(agents): one agent inventory per host and execution context
- fix(files): a paired-server link outside its workspace opens in the host workspace that holds it
- fix(files): client drops on a remote composer upload through the import transaction
- fix(files): links to this computer in a remote terminal open on the client with trusted provenance
- fix(terminals): terminal IDs, agent rows and dashboard rows follow the owner
- fix(terminals): automation runs, CLI tabs and folder-workspace browser tabs follow the owner
- fix(review): review providers resolve the repo on its host
- fix(review): PR reads and actions follow the ownership table
- feat(terminals): dashboard terminal previews from the owning host
- fix(ports): the ports panel scans and stops on the workspace's own host
- fix(skills): say an SSH repo was not scanned instead of dropping it silently
- fix(hosts): agent launch platform and shell come from the execution host
- fix(accounts): a server's late account result stays with that server
- feat(hosts): Resource Manager lists the owning host's processes
- feat(settings): host-owned settings panes choose their host explicitly
- fix(web): the paired server is the web client's only host
- fix(sources): GitHub Projects boards read from the task page's source host
- fix(orcad): provide the orca CLI in Windows managed-host terminals
- feat(ssh): a paired client can manage the server's own SSH hosts (ssh.target-management.v1)
- fix(projects): create on a server's SSH project; Add Project SSH lists the server's targets
- fix(ssh): restore saved port forwards on managed hosts and show their Ports tab
- fix(files): a managed terminal links and opens a host file outside its workspace
- fix(vm): a recipe VM's SSH root runs on a managed Orca server
- fix(ssh): a restore racing a disconnect never leaves a forward behind
- refactor(ssh): connect fails for hosts orcad can't serve; remove the relay client path
- fix(e2ee): stop dropping terminal output on a backed-up legacy connection
- fix(remote): move tabs into a split-off group on the server too
- fix(runtime): refresh open clients after project setup changes
- fix(ssh): a fast remote folder listing no longer shows a false error
- fix(ssh): remove the relay-only remote workspace sync so reconnect never sticks on pulling
- fix(browser): refuse web pages on the agent-browser CDP proxy
- fix(pty): only force-kill processes in the terminal's own Linux session
- fix(runtime): reuse cached worktree rows when the admin probe cannot answer
- feat(runtime): device-key authentication and per-installation key migration (host)
- fix: let managed SSH Claude chats load the agent SDK
- feat(runtime): session-only browser keys and opt-in for pairing from plain-http pages (host)
- feat(web): the browser signs in with a non-extractable device key, or pairs for this session only
- fix(codex): copy in remote Orca Server Codex sessions reaches your clipboard
- Keep SSH chat providers alive after the desktop disconnects
- fix(runtime): keep remote servers usable when one saved record can't be read
- fix(ssh): keep 1.4.224's running terminals working after the upgrade (legacy relay bridge)
- fix(ssh): an old relay terminal's tab shows output again after a reconnect
- fix(ssh): never start a hidden orcad shell for a tab the legacy relay bridge serves
Serving, updates & terminal recovery
*orca serve gains supervised operation and service management, automatic terminal restores are paced and limited, and updates preserve more of the server and terminal state. macOS terminal permissions survive app updates, and Linux shows a persistent recovery banner when a terminal background service loses its AppImage files.*
- fix(orcad): show help before server startup
- fix(packaging): unpack the orcad serve-selection entry so orca serve can run it
- fix(linux): stop the AppImage crashpad handler before the mount goes away
- feat(daemon): observe-only fork gate for automatic terminal restores
- fix(linux): launch the AppImage terminal daemon through its own mount
- feat(daemon): pace automatic terminal restores on headless hosts
- feat(daemon): pause automatic restores after a same-boot crash
- fix(serve): report secrets unavailable instead of hanging on an unreachable macOS keychain
- feat(daemon): process-growth breaker that pauses automatic restores
- fix(daemon): drop a legacy daemon that can no longer accept a connection
- fix(daemon): count a claimed agent resume as automatic even without a history seed
- fix(serve): keep the isolated profile off the login keychain
- fix(updater): stop promising a manual update enables remote updates
- fix(updater): install macOS orca serve updates instead of waiting on Squirrel forever
- feat(terminal): declare restore intent and keep deferred panes sleeping
- fix(serve): decide a duplicate or doomed Electron serve before exec
- feat(serve): let the owner resume paused automatic restores
- feat(daemon): cap terminals per execution host
- feat(daemon): one automatic-restore budget per execution host
- fix(daemon): keep tweetnacl out of the relocated Windows daemon-host graph; guard daemon externals at build
- feat(daemon): the host keeps its own record of old-client restores it refuses
- fix(macos): preserve terminal permissions across app updates with a small signed helper
- feat(macos): show terminal-host Full Disk Access, tag stable-copy daemons, and give Helpers folder strings
- fix(terminal): don't duplicate terminals a newer Orca still runs after a downgrade
- feat(serve): supervised mode for orca serve --supervise
- feat(updater): auto-park registered serve supervisors during a desktop install
- feat(serve): orca serve service install|status|uninstall
- fix(serve): initialize the updater in headless Electron serve
- feat(daemon): opt-in OS ceiling on terminal processes, reported per host
- fix(serve): save Codex auth before a headless serve update restart
- fix(serve): explain what to run when an SSH host's orca cannot start or install a server
- fix(linux): keep extracted AppImage copies that something still runs from
- fix(updater): clear a cancelled macOS install request before staging the next update
- feat(serve): run the --supervise supervisor from a copy outside the app
- fix(serve): give the first AppImage serve one unpacking deadline and progress
- fix(daemon): stop giving new terminals to a daemon whose AppImage files are gone
- feat(terminal): persistent banner to restart a terminal daemon whose files are gone
Phone & paired clients
*Grok, OpenCode, OMP and Pi chats open on the phone, iPad keeps drafts and the sidebar reachable, SSH workspace badges show host health, and phone terminals accept fresh snapshots after their stream ends.*
- fix(mobile): size onboarding slides to the modal sheet on iPad
- fix(mobile): one host sidebar on iPad, with the page owning the host area
- fix(mobile): keep chat drafts and the sidebar reachable on iPad
- fix(mobile-pairing): preselect LAN for a signed-out desktop
- fix(mobile): a new pairing scan supersedes a stale relay pairing journal
- fix(mobile): agents for workspaces another runtime owns show why
- feat(push): accept a notification's workspace server
- feat(mobile): show SSH host health on the workspace row badge
- feat(runtime): let a paired desktop register its phones as phone devices
- feat(mobile): relay a paired phone's server-workspace requests through the desktop (hidden)
- feat(mobile): let…
1.4.224
Thank you so much for using Orca and for your continued support! ❤️
- Automations can now set the agent's model and effort for each run. In the automation editor, open Advanced and fill in Extra agent arguments (or use --extra-agent-args with orca automations create and edit), for example -model haiku --effort high. This works today for Claude, Codex, Grok and CodeBuddy (model and effort), Cursor (model, which carries its effort) and OMP (model), and support for more agents is coming soon. Each run starts a fresh session, and your other automations keep the host's defaults. Separately, scheduled runs in an existing workspace on an Orca server now hand the task to agents that read it after they start, such as Aider, Goose and Amp, instead of leaving them idle.
- SSH hosts now run a managed Orca server. Orca ships its own runtime and sets it up when you connect, so connections no longer fail because a host has the wrong Node version or no build tools. A host with no open terminals switches on its next connect and brings its projects, folders and open editor tabs along. A host with open terminals keeps working as before and offers Move to a managed Orca server, which restarts those terminals. A host that can't run it keeps its current connection, and Settings → SSH Hosts says why. You can see, update, roll back, Recover or Forget each server in Settings → Managed servers.
- Native chat (experimental): If you turned on Chat UI with chat as your default view, supported agents now open in the structured chat by default. If Terminal was your default, new agent tabs stay in the terminal, and a one-time tip explains the change and lets you turn chat mode on. You can move a conversation between chat and a terminal from the tab's right-click menu or from Agent Session History (Resume in New CLI / Resume in New Native Chat).
- More in native chat: Recent versions of OpenCode (including 2.x), Pi and OMP open as structured chats on this computer. Agents can draw charts, diagrams and mockups right inside a reply, on desktop and phone (switch it off under Settings → Chat → Inline visuals). Cmd/Ctrl+F searches a chat, you can quote part of a reply with Add to chat, Up/Down recalls every prompt you sent, number keys answer an agent's questions, and long messages and runs of tool calls fold into one row. The model picker no longer waits for the agent to start, Codex and Pi say they're signed out before you send, and a reply Orca had to cut off says why and offers Continue. Grok shows its subagents, and Grok, OpenCode and OMP can /compact.
- SSH and remote terminals: Keys you type during a network outage arrive exactly once and in order, scrollback and pane size survive a reconnect, and open tabs reattach after a managed server update. Shell startup files that print text, folders with tens of thousands of entries and 64-bit ARM Linux servers no longer break or drop the connection. Files, browser tabs, links and drag-and-drop stay on the machine they belong to when two machines share a path. orca serve now loads its SSH hosts, and quitting a window on a serving machine no longer stops the server.
- Phone: A browser tab opened on the phone loads while the desktop is minimized or in its screen saver, chat visuals and subagents show in the phone's native chat, and videos and music files play in previews.
- Workspaces and editing: You can attach several pull requests, merge requests and tasks to one workspace. Hovering a tab shows its full title with icon and program, Force Delete can remember Always force delete, and Continue in New Session is now Hand Off to Another Agent. Markdown shows GitHub-style callouts such as > [!NOTE], PDFs zoom with pinch and Cmd/Ctrl+=/-, and files dragged in from Finder or File Explorer land in the exact pane, folder or editor you drop them on.
- Also: The usage meters in the status bar now default to a shorter Compact view unless you chose one (Detailed is still available), Stage All stages every change even when the list is capped at 1,000, and Orca detects the GitHub CLI even when a gh launcher hangs.
The orca command on SSH hosts: By default, orca commands run on an SSH host reach only that host's own terminals and orchestration messages. To let agents there create worktrees, open terminals or dispatch work through orca, turn on Allow this host's orca CLI to control Orca for that host (Settings → SSH Hosts → edit the host → Advanced Connection).
Downgrading to v1.4.223: Terminals started in v1.4.224 can't be reached from v1.4.223 until you update again. Extra pull requests, merge requests and tasks you attached to a folder workspace are removed. If Chat UI was on, it may be off after you update again; turn it back on in Settings → Experimental. SSH hosts that moved to a managed server work over the old connection in v1.4.223; if you add or remove projects there, the host shows "Changed on an older Orca" after you update and offers Move the new projects. Orca still refuses to install versions older than v1.4.214 from its version picker. To go back to one of those, run orca profile state rollback --latest-json with Orca closed, then install the old version by hand.
Terminals after updating: This version starts a new terminal background service for new terminals. Terminals that were already open keep running on the previous one, so changes in this release apply only to terminals opened after the update.
Native chats from v1.4.217 or older: If you used native chat (experimental) on v1.4.217 or older and update straight to v1.4.224, your earlier native chats won't appear. Their files stay on disk.
Relaunching from shell history: When an agent's launch command is long or spans several lines, the shell history holds a short one-time line instead, so pressing up-arrow and Enter does not start the agent again.
Workspaces created from the phone: Creating a workspace from an issue, pull request or Linear item with an agent on the phone still moves the desktop to that workspace.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: If you update from v1.4.219 or earlier, OpenCode 2 panes that were already running may show no status until you restart OpenCode in them. If you downgrade Orca after updating, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Automations
*Each automation can set its own model and effort, and server-run automations in an existing workspace now deliver their task to agents that read it after they start.*
- Let automations pass extra agent arguments on each run
- Send scheduled automation prompts to agents that read them after they start
Native chat (experimental)
*Structured chat becomes the Chat UI default (Terminal-default users stay put), OpenCode, Pi and OMP join as structured chats, agents can show inline visuals, and chats gain find, quoting, prompt recall, tidier tool rows, clearer sign-in and stop messages, and a steadier message queue.*
- Default experimental native chat to structured chat
- Keep Chat UI users with a Terminal default on the terminal, with a chat mode switch in the upgrade tip
- Show pre-upgrade Experimental Chat UI users a one-time native chat upgrade tip
- Offer Resume in New CLI / Native Chat from the tab right-click menu
- feat(session-history): Resume in New CLI forks a native chat's conversation into the terminal
- OpenCode structured chat over the Agent Client Protocol
- feat(opencode): open OpenCode 2.x in the structured chat too
- Add Pi structured native chat through its RPC mode
- feat(omp): open OMP in the structured chat over ACP
- Show model and effort choices for every agent before its session starts
- fix(native-chat): return focus to the composer after picking a model or effort
- feat(native-chat): show agent-written visuals inline in structured chats
- feat(native-chat): teach chat agents to show inline visuals in their own folder
- Native chat: add an inline visuals switch and simplify the skill
- Native chat: inline visuals for Grok, OpenCode and OMP chats
- Let in-page links switch sections inside a chat visual
- Native chat: Cmd/Ctrl+F finds in the chat
- feat(native-chat): quote a selection from an agent reply into the composer
- fix(native-chat): recall every sent prompt with Up/Down in the composer
- feat(native-chat): fold long sent messages behind a toggle
- fix(native-chat): read a queued message in full
- fix(native-chat): fold thoughts and tool calls between replies into one row
- feat(native-chat): compact tool runs with a bounded call list
- feat(native-chat): preview each rail tick with its reply, and land jumps at the top
- feat(native-chat): number keys and auto-advance for questions
- feat(native-chat): make native chat replies flow in and the transcript glide when following
- Fix Mermaid diagrams that stay on error after replies finish
- Native chat: open files from tool rows through the terminal's file link menu
- fix(native-chat): underline a file path only once its workspace confirms it exists
- fix(native-chat): show right-click Copy and Paste only where they apply
- feat(acp): compact Grok, OpenCode and OMP chats
- feat(grok): show Grok's subagents as subagent rows
- fix(omp): show exit 0 for a command that finished normally
- fix(acp): keep OMP replies that follow its reasoning
- fix(acp): start chats for agents that report no model
- fix(acp): show agent details when a chat message fails
- Native chat: say when Codex is signed out or the agent isn't installed, without disabling Send
- Show "Pi isn't signed in" in native chat before the first send
- Show sign-in guidance for all native chat agents
- Show OMP sign-in guidance when OMP reports no model selected
- feat(native-chat): say in the chat why Orca stopped a reply, and offer Continue
- feat(native-chat): show each interrupted chat's workspace as its read-only sidebar card
- feat(native-chat): show each chat's resume as it happens, and start more at once
- Hold messages in the host until a chat's agent has finished starting
- fix(native-chat): a local chat this computer can't run opens the agent in a terminal
- feat(native-chat): attach files to a structured chat on a paired server
- fix(native-chat): show an SSH session's chat history on the phone and desktop
- fix(native-chat): no saved outbox on the desktop; one send at a time, and the host owns what it accepted
- fix(native-chat): a message kept after a quit or close waits in order and follows the chat's next turn
- fix(native-chat): never refuse a queued card because 20 were waiting, and keep the queue from covering the chat
- fix(native-chat): never refuse a user's write because the retry record is full
- fix(native-chat): a /compact sent while the agent works waits in line instead of being refused
- Label a message stopped before the agent began on it plainly as "Stopped"
- feat(native-chat): show an agent message's sender by its current title, clickable on the queued card too
- Keep native chat /clear in the same conversation
- Stop native chat jumping when Codex starts a foreground command
- fix(native-chat): show host outages in the notice card
- Keep picked skills and pending uploads when native chat composers close
- Release clipboard previews when the chat composer closes
- fix(native-chat): settle a dead agent's leftover work in one write that always fits
- Resolve native chat workspaces from catalog snapshots
Agents, integrations & orchestration
*Session hand-off gets a clearer name, DeepSeek Harness reports when it is idle, OpenCode 2 resumes keep their launch mode, phone and CLI workspace creates match the desktop, and Windows agent hooks start faster.*
- Detect installed GitHub CLI behind hung launchers
- feat(agent-sessions): rename "Continue in New Session" to "Hand Off to Another Agent"
- fix(runtime): settle DSH tui-idle on its hook-store done
- Honor OpenCode 2 launch mode when resuming sessions
- Start worktree.create's agent through the launch executor
- Start orchestration workers and remote workers through the launch executor
- fix(worktrees): a phone or CLI create keeps a sparse preset only when its folders match
- fix(worktrees): a phone or CLI create puts the agent in the first orca.yaml default tab, as the desktop does
- fix: dispatch Muse Windows hooks directly on safe profile paths
- fix(hooks): speed up guarded Unicode Windows hook launches
- perf: skip unused Grok login-shell probe when installing agent hooks
SSH, managed servers & remote
*SSH hosts move to a managed Orca server, remote terminals keep typed input, scrollback and size across outages, and files, links, browser tabs and drops stay on the machine they belong to.*
- Phase 3: every SSH host runs a managed Orca server (orcad), replacing the relay, and orca serve runs on it
- Phase 3.5: fix the top SSH/remote issues at the root cause
- Phase 3.7: fix SSH/remote failures found by adversarial real-host testing
- fix(remote-terminal): keep the disconnected-input grace honest across retries
- Provide Orca CLI on managed Linux and macOS servers
- Keep managed servers unverifiable until they answer
- Avoid claiming an unverifiable managed server has stopped
- Reconnect managed servers through the current SSH connection
- Refresh SSH status after manual managed-server updates
- Explain the Active Server stop refusal in Settings
- Keep open Remote Settings in sync with saved servers
- Retry failed catalog reads when SSH hosts move to Remote
- Keep migrated folder workspaces under their Remote host
- Keep remote folder sidebar rows distinct across execution hosts
- Keep Git identity probes from blocking SSH host reconversion
- Report browser placement support from the installed provider
- Keep new browser tabs on SSH routing after managed conversion
- Preserve retained desktop browser pages during SSH conversion
- Distinguish remote browser failures from server connection failures
- Wait for editor ownership before listing remote Markdown
- Preserve editor file identity during SSH host conversion
- Restore editor file watching when remote host contact returns
- Restore remote explorer updates after server recovery
- Keep explorer file watches on the selected remote host
- Reset explorer files when switching remote hosts at the same path
- Move shared file watches when the selected remote host changes
- Keep managed workspace paths out of desktop editor launches
- Keep managed status warnings out of desktop gitignore writes
- Wait for managed editor saves before discarding Git changes
- Keep remote file deletion from saving and closing desktop drafts
- Keep managed file Copy from selecting a desktop file
- Keep remote terminal path links on their own host
- Keep remote file drops from opening desktop browser files
- Keep workspace file drops on the terminal's host
- Keep an unplaceable workspace owner out of desktop Open in launches
- fix: admit relay bulk frames once under backpressure
- fix(serve): restore the saved active tab group after a cold start
Phone
*Browser tabs stream while the desktop sleeps, chat visuals and subagents show on the phone, media files play, and big images and Markdown use less time and memory.*
- fix(browser): keep the desktop drawing while a phone streams a browser tab
- fix(window): stop a covered window drawing after a phone stream, and keep a streamed foreground tab live
- feat(mobile): show chat visuals inline in the phone's native chat
- feat(mobile): show a native chat's subagents like desktop
- Allow another phone send after delivery is unconfirmed
- feat: play video and music files in mobile previews
- Release closed Markdown documents on mobile
- Use native Base64 encoding for mobile image bytes when available
- Use browser crypto to speed up mobile image fingerprints
- Avoid rebuilding committed mobile files while typing
- Stop repeated GitLab detail requests on mobile
- refactor(mobile): remove the hybrid-shell toggle; the build decides
Workspaces, sidebar & tabs
*Tab hover cards show full titles, Force Delete can remember your choice, the usage bar defaults to Compact, and sidebar headers and workspace refreshes behave better.*
- Show whole-tab hover cards with icons and smooth tab-to-tab slides
- fix(sidebar): keep project headers from overlapping the pinned host
- fix: keep workspace search filter button on one line
- Add saved force-delete preference to workspace deletion menu
- Add Always force delete dropdown to the workspace deletion dialog
- Remove local branch deletion success notification
- Keep one local project after concurrent registration
- Default status-bar usage to Compact and explain the change once
- Fix Compact usage notice focus and older-host compatibility
- Keep usage overflow chip width stable as hidden count changes
- fix(floating-workspace): keep file links from blanking the main window
- Avoid refreshing GitHub accounts while editing project names
- Avoid repeated session copies when deleting project groups
- Avoid refreshing every repository after deleting one worktree
- perf: preserve unrelated authorization roots after desktop removal
- perf: group Space decision inputs by workspace
Editor, files & Markdown
*GitHub-style callouts, PDF zoom, large Markdown with HTML in rich mode, live Markdown links, OS file drops that land where you drop them, and faster notebooks and Markdown.*
- feat(markdown): render GitHub-style callouts
- fix(editor): route zoom gestures and app zoom to the PDF viewer
- Allow large markdown documents with HTML in rich mode
- Fix alternate browser clicks in rich Markdown
- Refresh rich Markdown links when document metadata changes
- Refresh open Markdown links when workspace files change
- fix(file-drop): explorer, project sidebar, tab strip and editor own OS file drops (STA-6940 PR5)
- fix(file-drop): deliver terminal files to the pane under the cursor (STA-6940 PR4/6)
- [STA-6940] Deliver chat, workspace composer, and feedback file drops at their elements (3/6)
- Remove legacy OS file-drop routing (STA-6940 PR6/6)
- perf: save completed notebook runs in one document update
- Avoid rescanning accumulated notebook stream output
- Skip repeated ANSI parsing scans for plain notebook output
- Scan Markdown inline-code spans once when highlighting links
- perf: skip redundant image scans in image-free Markdown previews
- perf: skip Markdown fence scans when no toggle opens
- Filter unrelated workspace events before Explorer defers them
- Avoid repeatedly extracting source text for the copy-context hint
Browser, skills & feedback
*The browser comment box no longer covers what you annotate, and cookie imports, browser commands, feedback and skill downloads clean up after themselves.*
- fix(browser): keep the annotation composer off the element it annotates
- Release cookie snapshots when import preparation fails
- Release completed browser helper drain timers
- Release feedback requests after response handling completes
- Cancel abandoned skill package download responses
- fix(skills): keep archive abort errors observed before reading
- perf(skills): avoid repeated placement scans during batch deletion
Performance & reliability
*Less CPU and memory for terminal redraws, checkpoints, Codex output and chat recovery, and profile saves that warn instead of failing on a slow disk.*
- Avoid retaining an unused OpenCode database worker
- Close rejected optional OpenCode billing requests
- Remove repeated row…
1.4.223
Thank you so much for using Orca and for your continued support! ❤️
Orca Server 2.0 is coming soon, with improvements to make remote work more reliable. The current Remote Server remains experimental and may have bugs.
- Native chat (experimental): With "Use updated structured native chat" turned on (Settings → Chat UI), Grok now opens as a structured chat on this computer and on paired Orca servers; SSH and WSL keep the terminal chat. You can rewind a conversation to an earlier message, search the model list, pick workspace files by typing @, and set text size, code size, width and contrast, or match your terminal, on a new Settings → Chat page. Chats are named after their first message, alert you when they stop to ask for approval, keep an unsent draft through a reload or quit, and use the Command and Arguments saved in Settings → Agents. Claude chats now open for API-key users, and Windows chats no longer refuse to start.
- SSH workspaces: Open files, live agent tabs and paused Claude or Codex resume offers survive an SSH reconnect and a restart, and tabs you closed long ago no longer come back as empty shells. Clicking an SSH worktree whose last tab you closed opens a terminal again.
- Remote servers and the phone: A paired terminal accepts typing again after its host app relaunches, remote browser tabs come back after a network drop, and the phone keeps every terminal after orca serve restarts. Starting an agent from the phone shows its tab right away and no longer moves your desktop window; creating a workspace on a remote host no longer pulls other connected desktops to it.
- Agents and terminals: Long or multi-line agent launch commands on macOS and Linux reach the agent whole instead of being cut off or run line by line, and startup commands now use a real Enter. A pane you close just before quitting no longer comes back, and a pane dragged into its own tab no longer appears in two tabs. Claude's spinner clears when you cancel with Escape, and Codex keeps its working status when Escape only closes search. Orca no longer rewrites your ~/.codex hooks on every Codex launch, and helper processes it starts for Claude, Codex and OpenCode stop when Orca quits or crashes.
- Accounts and agents: Switching Claude accounts keeps your MCP server sign-ins. Pi and OMP show their background helpers as rows, Rovo Dev is detected through acli, and Grok 4.7 is in the model list.
- Sidebar and workspaces: Orca remembers whether the left sidebar was open. The agent activity view gets filters, a right-click menu and multi-select. A workspace that contains nested worktrees can be deleted together with them, in the background. Revealing a remote workspace no longer expands your local sections, and the Dock badge clears when you visit the workspace.
- Files and search: Audio and video files play in Orca. Quarto and R Markdown files are highlighted. You can reveal a changed file in Source Control, or a file path in a terminal, in Finder or File Explorer. Quick Open matches multi-part queries and opens files at the requested location, and abandoned searches stop.
- Tasks and review: GitHub Projects Board views show as a kanban you can drag cards across, private Linear images in task descriptions load, and GitLab merge request and issue actions in SSH workspaces reach the right server.
- Also: A completion sound now plays for an agent that finishes right after another, and screenshot markup has an eraser.
Native chats from v1.4.217 or older *(release manager: drop this item if it does not apply)*: If you used native chat (experimental) on v1.4.217 or older and update straight to v1.4.223, your earlier native chats won't appear. Their files stay on disk.
Terminals after updating: This version starts a new terminal background service for new terminals. Terminals that were already open keep running on the previous one, so changes such as whole long launch commands apply only to terminals opened after the update. This also means the OpenCode, Pi and Qoder detection improvements from v1.4.222 now work in new terminals without restarting anything.
Relaunching from shell history: When an agent's launch command is long or spans several lines, the shell history holds a short one-time line instead, so pressing up-arrow and Enter does not start the agent again.
Workspaces created from the phone: Creating a workspace from an issue, pull request or Linear item with an agent on the phone still moves the desktop to that workspace.
Downgrading: Orca now refuses to install versions older than v1.4.214 from its version picker. To go back to one of those, run orca profile state rollback --latest-json with Orca closed, then install the old version by hand.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: If you update from v1.4.219 or earlier, OpenCode 2 panes that were already running may show no status until you restart OpenCode in them. If you downgrade Orca after updating, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Native chat (experimental)
*Grok can run as a structured chat, you can rewind a conversation, search models, mention files with @ and tune how chats look, chats get names and approval alerts, drafts and Stops keep your text, and chats start more reliably for Codex, API-key Claude users, Windows and custom agent commands.*
- fix(native-chat): reasoning rows with a real open/finished state, and readable Claude thinking
- Add confirmed conversation rewind from structured chat messages
- feat(native-chat): Grok as a structured chat over the Agent Client Protocol
- feat(native-chat): record fresh sessions after failed restoration
- feat(native-chat): searchable model picker
- feat(native-chat): suggest files on @ and name the triggers
- Add chat appearance settings: text size, code size, width
- Add chat contrast and "Match terminal interface"
- Add a Chat settings page for structured native chat
- Soften native chat colors and code surfaces
- Show native chat tool calls as plain sentences
- fix(native-chat): let code blocks grow to their full height
- fix(native-chat): show the message rail from the first user message
- feat(native-chat): a solid, fading Jump to latest
- Name native Claude and Codex chats after their first message
- Give native chat names one source for tabs, sidebar and AI Vault (list and search)
- fix(native-chat): alert when a structured chat asks for approval or input mid-turn
- fix(native-chat): an unsent draft survives a reload or quit
- feat(native-chat): the chat reads "Stopping…" from your Stop until the turn actually ends
- feat(native-chat): keep a message a Stop took back on screen, with one stop row after it
- fix(native-chat): keep a Stop's note with the turn it waited for and stopped
- feat(native-chat): publish where each submission was sent and the turn a stopped one was answered into
- fix(native-chat): hold a queued message until the turn ahead opens (follow-up to the Stop-event plan, fixes STA-9348)
- fix(native-chat): a Stop Codex took settles the message whose turn never opened (follow-up to #25217)
- fix(native-chat): queued messages carry on in order after any turn, and nothing sends by itself after a restart
- fix(native-chat): keep a message accepted before a quit or crash as a held card
- fix(native-chat): the agent's exit ends its record, and an unconfirmed stop is joined instead of held
- Show a tool call you stopped as interrupted, not failed
- fix(native-chat): a long reply keeps its Working bar and Stop after a reload, from the host's turn
- fix(native-chat): a prompt card owns the chat input until its answer lands (terminal-backed chat, desktop and phone)
- fix(native-chat): sending brings the latest into view and follows the reply
- fix(native-chat): a chat you return to drops background tasks that finished while it was hidden
- fix(native-chat): stop flashing a reconnecting line on a stream drop
- fix(native-chat): mark a chat whose start failed on its tab and workspace row
- fix(native-chat): say each chat outcome once and drop internal-only surfaces
- fix(native-chat): chat copy that promised a retry, an update, or a coming change
- feat(native-chat): one notice card above the message box for the chat's own errors
- fix(native-chat): say which retry a Claude retry is on and what it last failed with
- fix(native-chat): a sent image no longer flickers to its "Pasted image" placeholder while the agent works
- feat(native-chat): attach several files from one picker selection
- feat(native-chat): copy chat images from the right-click menu
- feat(native-chat): answer /context in chat view for OpenClaude and OMP
- feat(floating-workspace): render the floating panel through the shared workspace surface
- fix(native-chat): start a Codex chat without waiting on the background model probe
- Fix Codex chat creation after its own model listing fails
- fix(claude): start a Claude chat with its saved options and send the first message at once
- fix(claude): API-key Claude users are told they're not signed in
- fix(native-chat): start Windows chats without reading process creation times
- fix(native-chat): ignore the terminal launch command when starting a native chat
- fix(native-chat): honor saved agent Command and Arguments
- fix(native-chat): refuse a Command that can't run instead of silently running the stock CLI
- Fix transcript replacements racing chat publication
- fix(mobile-chat): a failed message's text is added to the draft, and an expired resend no longer blocks that text
Orchestration & agent launch
*Agents started from the phone get their tab at once and leave the desktop where it is, an existing chat can be an orchestration worker, and finished workers stop being recovered over and over.*
- feat(agent-launch): show an agent's tab at once, where the caller asked
- fix(agent-launch): a phone's launch leaves the desktop window where it is
- feat(agent-launch): host-assigned caller identity and a launch record written when the tab exists (unification 1 of 3)
- feat(orchestration): a native chat can be a dispatch worker, like a terminal agent
- feat(orchestration): a native chat gets the orchestration pointer a CLI agent gets, through the same send as your messages
- feat(native-chat): show which agent a chat message is from, and open it
- fix(orchestration): serve a /clear'd native-chat worker through the session running it
- fix(orchestration): word the worker brief for a chat worker
- Stop repeated recovery of finished workers
Agents, accounts & integrations
*Switching Claude accounts keeps MCP sign-ins, Codex hook approval no longer rewrites ~/.codex on every launch, Escape no longer leaves Claude or Codex status wrong, helper processes stop when Orca quits, Pi and OMP show their background helpers, Rovo Dev is detected, and Grok 4.7 is listed.*
- fix(claude-accounts): preserve shared MCP OAuth credentials across an account switch
- fix(codex): write Orca's hook into ~/.codex only when something changed
- fix(codex): approve Orca's hook in managed Codex homes with Codex's own hash
- fix(codex): never write a Codex config.toml that Codex can't load, and approve both symlink spellings
- Fix Claude's stuck spinner after Escape cancellation
- fix(codex): keep working status when Escape closes search or permissions
- Wait for Codex's live composer before pasting linked issue drafts
- Fix premature Claude automation completion and inherited CI failures
- feat(pi): show Pi and OMP background children as rows
- fix(omp): stop the tab spinner sticking after subagents finish
- fix(agent-status): retire a removed worktree's hook-status rows
- fix: stop Claude and agent helper processes when Orca quits or crashes (STA-9254, 1 of 2)
- fix: stop Codex and OpenCode helper servers when Orca quits or crashes (STA-9254, 2 of 2)
- fix(rovo): detect and launch Rovo Dev through acli
- fix(grok): add Grok 4.7 to the fallback model catalog
Terminal
*Long agent launch commands arrive whole, startup commands use a real Enter, and closed or dragged-out panes no longer come back or appear twice.*
- Stage long agent launch lines where they are typed, so they arrive whole (step 2 of 7)
- fix(terminal): submit startup commands with Enter on every platform
- fix(terminal): keep a pane closed just before quit from coming back on relaunch
- refactor(terminal): move a dragged-out pane in main before the window opens its tab
- Fix ownership for terminal and chat file drops (STA-6940, PR 1/6)
SSH, remote servers & phone
*SSH workspaces keep their tabs, open files and resume offers across reconnects and restarts, and paired terminals, remote browser tabs and phone terminal lists recover after a host restarts or the network drops.*
- fix(session): at startup, a local copy never overrides an SSH-owned workspace's own copy
- fix(ssh): bind reattached SSH panes into the target's own session partition
- fix(ssh): open a terminal in an emptied worktree when the host holds a tab this client can't place
- fix(ai-vault): resume sessions whose worktree was deleted
- fix(remote-runtime): a paired terminal accepts input again after its host app relaunches
- fix(remote-browser): host client browser pages again when a paired host comes back after an outage
- fix(serve): keep every terminal on the phone after orca serve restarts
- fix(runtime): build the host terminal model when a phone opens an idle terminal
- Keep remote worktree creation from navigating paired clients
- fix: recover deleted Active Server defaults and preserve editor hosts
Workspaces, sidebar & tabs
*The sidebar remembers if it was open, the activity view gets filters and multi-select, nested worktrees can be deleted, host sections collapse independently, and tab tooltips and scrolling are calmer.*
- fix(sidebar): remember whether the left sidebar is open across restarts
- feat(activity): filters, matching header, row right-click menu, and stay in the activity view
- feat(activity): multi-select agent rows with a bulk right-click menu
- Add confirmed deletion of nested worktrees
- Run nested workspace deletion in the background
- Keep local pins collapsed when revealing a remote workspace
- Keep sidebar section collapse independent across execution hosts
- Fix send picker reveal under collapsed hosts and parents
- fix(dock): clear stale workspace unread counts
- fix(worktrees): decide setup before git worktree add on the host's create
- fix(worktrees): when the host can't fetch a remote base, create from the local branch and say so
- fix(repos): stop reporting clones that never ran as successful
- fix(tabs): stop tab and close tooltips firing while grazing the strip
- perf(tab-bar): scrolling the tab strip no longer re-renders every tab
Editor, files & search
*Audio and video files play in Orca, Quarto and R Markdown are highlighted, files can be revealed in your file manager, and Quick Open finds and opens files more precisely.*
- feat: stream desktop audio and video previews with native controls
- feat(editor): highlight Quarto and R Markdown files instead of plain text
- feat(files): reveal Source Control files and terminal file links in the file manager
- Improve Quick Open matching, file locations and recent history
- Cancel abandoned file searches and prevent stale results
- Bound file-search inventories and release abandoned Markdown data
- fix(markdown): strengthen dark table grid lines
Source control, tasks & issues
*GitHub Projects Board views work as a kanban, review cards poll GitHub less, private Linear images load, and GitLab writes in SSH workspaces reach the right server.*
- feat(github-projects): render Board project views as a kanban with drag-and-drop
- Refresh visible reviews automatically and stop settled merged polling
- Fix private Linear images in task descriptions
- fix(jira): tolerate malformed nested Jira status fields
- fix(git): fall back to branch-safe author names for prefixes
- fix(gitlab): route SSH workspace writes through GITLAB_HOST
Browser, feedback & notifications
*Screenshot markup gets an eraser, Comet is found on Windows, every completion sound plays, and oversized feedback screenshots are re-encoded to fit without losing detail.*
- feat(browser): add an eraser to screenshot markup
- fix(browser): detect Comet in its Windows vendor directory
- fix(notifications): replay completion sounds reliably
- fix(feedback): optimize oversized screenshots without losing detail
Profiles, settings & languages
*Profiles save with less work at quit and update and keep saving after the app stalls, and Japanese and Chinese wording is fixed and translated.*
- Retire automatic profile JSON snapshots with safe recovery and downgrade
- Keep profile saving alive after a stalled main loop
- fix(i18n): polish Japanese onboarding checklist copy
- fix(i18n): fix garbled Japanese name suggestion and reversed ja/zh quotes
- chore(i18n): translate 76 new keys to es/fr/ja/ko/zh
- chore(i18n): use 智能体 for Chinese Agent copy
Relay service
*Server-side capacity, deploy and monitoring work for Orca's relay service.*
- feat(relay): drain pace window as a reviewed same-cap input, with drain-aware 503 gates
- feat(relay): report lane service times, 503 causes, per-site hold p99 and a director-vs-cell lock-wait split
- fix(relay): commit the cell counter in one round trip; cells boot without the database
- fix(relay): read reconcile's counter units after the cell lock
- feat(relay): one-command director deploy driver
- fix(relay): deploy driver builds the checked commit, prompts on their own line, summarises progress
- feat(relay): give Asia cell c34 a promotion wave so it can become a general cell
- chore(relay): move Asia cell c34 to the general same-cap lists after promotion
Tests, CI & maintenance
*Groundwork that is not switched on yet (Claude account profiles, terminal layout changes), the shared building blocks behind Grok's structured chat, faster and cheaper test runs, fixes that kept main building, and a limit on how far shared YAML defaults can expand.*
- feat(claude): prepare account profiles and shared history (Step 1 of 4)
- Claude account profiles: dormant routing and consumers (Step 2 of 4)
- Claude account profiles: dormant WSL guest setup (Step 3 of 4)
- fix(claude): share account history on Windows with junctions and a same-drive hardlink
- Extract provider process supervision and stream reading from Codex
- Add standalone Agent Client Protocol client layer
- refactor(native-chat): keep the provider resume handle opaque to shared code
- refactor(native-chat): structured agents declare their capabilities instead of shared code naming Claude and Codex
- feat(native-chat): open structured chat's wire and stored records to registered agents, behind a negotiated capability
- Share the managed process lifecycle for structured providers
- Admit one provider event's journal writes as one queued operation, decided when it runs
- Add a shared timeline assembler for structured agent chats (not wired yet)
- Translate ACP traffic into shared timeline events
- Let ACP connections own their agent processes
- refactor(native-chat): remove the records-file and per-chat journal imports
- feat(agent-launch): the desktop AI buttons start their agent through agent.launch
- refactor(composer): delete the full-create path no caller reaches
- [STA-6940] Prepare file drops for element owners (PR 2 of 6)
- refactor(codex): remove code the ~/.c…
1.4.222
Thank you so much for using Orca and for your continued support! ❤️
Orca Server 2.0 is coming soon, with improvements to make remote work more reliable. The current Remote Server remains experimental and may have bugs.
- OpenCode workers: A worker started with orca orchestration worker-start --agent opencode no longer leaves its task sitting unsent in OpenCode's input box on a busy machine; Orca now waits until OpenCode can actually submit it. A worker can use a requested model without changing the default for your other launches, OpenCode 2.0.12 sends its first prompt on its own, and Orca's OpenCode plugin is installed where that terminal's OpenCode actually reads its settings.
- Sidebar and workspaces: A remote computer you reveal in the sidebar no longer disappears again while Orca saves the setting. Dragging a workspace whose children are collapsed now moves it, dragging workspaces can no longer crash the sidebar, the delete dialog stops jumping while its checks load, and Create worktree closes right away while setup scripts are checked in the background.
- CSV files: Large CSV files open without loading the whole file at once. You can resize columns, open links, edit cells, add or remove rows and columns, copy and paste ranges, and sort or filter, and column widths are remembered.
- Editor: Tabs for files outside your projects no longer come back as "Access denied" after a restart. Files with the same path on different computers keep separate text and Undo history. Image pastes and large Markdown pastes land where you started them, and notebook cells pick up changes made on disk.
- Typing in Japanese, Chinese or Korean: Pressing Enter to confirm text no longer also submits the field, creates the file, or sends the comment, across Orca.
- Native chat (experimental): Opening a chat never deletes its history, even one saved by a newer Orca. Messages show "Sending…" until the host confirms them and "Not sent" with the reason if delivery failed. Stop only marks the turn it actually stopped, a failed start no longer blocks new chats, the model list comes from the machine that runs the chat, and a reply cut off by a crash or quit reads as finished with one explanation.
- Agents and accounts: The usage menu shows Claude usage credits, OpenCode Zen balance and Codex credits next to usage limits. Restart after switching Codex accounts resumes the same conversation instead of leaving a blank terminal. A saved model pick and a configured agent argument no longer send the same flag twice and stop the agent from starting, and Cursor usage reads the right account.
- Remote terminals: Coming back to a remote tab running Claude Code no longer shows old shell output through Claude's screen.
- Jira: You can pick the assignee when creating a Jira issue.
Agent detection after updating: If you update from v1.4.221, improvements to OpenCode, Pi, and Qoder detection take effect after the terminal background service restarts. Existing terminals keep running through the update.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: If you update from v1.4.219 or earlier, OpenCode 2 panes that were already running may show no status until you restart OpenCode in them. If you downgrade Orca after updating, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Codex: After you upgrade, Codex launches use Orca's managed Codex home until Codex approves Orca's new status hook. A resumed pane that uses ~/.codex can pause for up to 30 seconds.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Codex & orchestration
*OpenCode workers receive their task once OpenCode can submit it and can use their own model, long launch prompts from the phone are pasted once the agent is ready, and switching Codex accounts resumes the same conversation.*
- fix(orchestration): give an OpenCode worker its task only once OpenCode can submit it
- Validate OpenCode worker model preferences on the execution host
- Keep OpenCode worker model selection separate from the default
- feat(agent-launch): keep long prompts off the launch line and paste them after readiness (step 1 of 7)
- fix(codex): resume account switches without blanking the terminal
Native chat
*Opening a chat never deletes its history, messages show whether they were sent, Stop and failed starts behave correctly, and the model list comes from the machine that runs the chat.*
- fix(native-chat): never delete chat history on read; a chat Orca can't load says why once
- fix(native-chat): show "Sending…" on a message until the host confirms it
- fix(native-chat): show a message Orca accepted and then failed to deliver as "Not sent" in the chat
- A resent chat message gets its recorded answer, never an early refusal or a made-up record
- fix(native-chat): a Stop binds only the turn it actually stopped
- fix(native-chat): start a new chat after an earlier start failed
- fix(native-chat): show a reply cut off by an Orca crash or quit like a finished turn, with one explanation
- fix(native-chat): a new structured chat's model list comes from the machine that runs it
- fix(native-chat): a chat's finished-turn alerts come from the host recorded on its tab, not its workspace id
Agents, accounts & integrations
*Credit balances appear next to usage limits, OpenCode gets its plugin and first prompt more reliably, agents no longer fail to start on duplicate flags, and Cursor usage reads the right account.*
- Show provider credit balances alongside usage limits
- Fix duplicate session option flags and preserve argument values
- fix(cursor): keep usage cookies on the resolved account
- Submit initial OpenCode 2.0.12 prompts through the native startup plugin
- Install OpenCode hooks in the terminal's config directory
- Add repository OpenCode permission defaults
- fix(opencode): keep detached services from invalidating the foreground terminal
- Bound OpenCode history reads and repeated worker failures
Terminal
*Remote tabs running Claude Code no longer show old output through its screen, and the card shown while your phone controls a terminal is simpler.*
- fix(terminal): stop old output bleeding into Claude's screen when revisiting a remote tab
- Simplify the phone-control and phone-size terminal dialogs
Mobile app & paired clients
*Android chat scrolls without selecting words, working indicators keep turning, pinned workspaces follow the desktop setting, and the in-app Android download links point to 0.0.52.*
- fix(mobile): stop Android from selecting words while the chat transcript scrolls
- fix(mobile): keep the working rings turning on the OTA page
- fix(mobile): honour the desktop pinned-worktree placement setting
- Add shared workspace settings note and prevent filter modal expansion
- Update in-app Android APK links to mobile 0.0.52
Workspaces & sidebar
*Revealed remote computers stay visible, workspaces with collapsed children can be reordered without crashes, the delete dialog stays steady, Create worktree no longer waits on script checks, and Activity previews stay short.*
- fix(sidebar): preserve remote host visibility across stale UI updates
- Fix reordering workspaces with collapsed children
- Fix: settle sortEpoch in store to prevent React update depth exceeded
- Keep workspace deletion dialogs steady while changes load
- fix: close worktree dialog before slow script checks
- fix(activity): keep code blocks in row previews from rendering as scroll boxes
Input, settings & languages
*Enter used to confirm Japanese, Chinese or Korean text no longer submits fields, keep-awake descriptions explain what each platform does with a closed lid, and terminal shell settings are translated.*
- fix: prevent IME Enter from submitting text fields across Orca
- fix(ui): restore IME Enter protection in workspace details
- Update Caffeinate tooltip copy about MacBook lid behavior
- Clarify keep-awake tooltip behavior by platform
- Add translations for terminal shell settings
Editor, files & search
*Large CSVs open quickly and can be edited as a table, tabs for files outside your projects reopen after a restart, same-path files on different computers stay separate, pastes land where you started, and search previews hold less memory.*
- Keep large CSV previews responsive and add column resizing and links
- Edit CSV tables directly and remember column widths
- fix(editor): restored tabs for files outside your projects no longer fail with Access denied
- Isolate code editor text and Undo history by execution host
- Preserve image clipboard targets and content across editor changes
- Keep large Markdown pastes at their original selection
- Keep selected text navigation from rewriting document links
- Reuse source-line calculations for Markdown review selections
- Keep active notebook cells current after external reloads
- Bound search preview memory and stop canceled SSH scans
- Replace patched JSON parser with stream-json
Tasks & issues
*You can pick the assignee when creating a Jira issue, and the paired web client handles a missing Jira status.*
- feat(jira): pick the assignee when creating an issue — Automatic, me, or anyone
- fix(jira): stop the paired web client crashing on a missing Jira status
Relay service
*Server-side capacity and cleanup work for Orca's relay service.*
- feat(relay): declare Asia spare cell c34 as migration-only
- chore(relay): move US cells c32 and c33 to the general same-cap list after promotion
- fix(relay): skip the dead-cell sweep's host scan when no cell qualifies
- fix(relay): prune released control-connection reservations in bounded batches
- fix(relay): retain confirm results for a week and audit events for 90 days
- refactor(relay): stop creating three tables nothing writes
Tests, CI & maintenance
*PR checks spend less time on setup and on failing runs, contributor docs match the PR template, and code was reorganized with no change in behavior.*
- Reduce avoidable work in PR checks and SSH test setup
- Wait for PR preflight before admitting short required checks
- Reduce repeated CI setup and overlap mobile typechecks
- Reduce repeated terminal scans and unused Qoder test imports
- fix(test): pass getInsertionRange in the image-insert access test
- fix(test): give the image-insert store fakes an open-files list
- test(linear): cover numeric-leading issue identifiers
- refactor(terminal): one commit module for terminal topology closes, with a boundary check
- Group CSV editor code in its own folder
- Remove completed SSH picker E2E plan
- docs: align contributor guidance with the PR template
- @chokolademilch7 made their first contribution in
- @setodeve made their first contribution in
- @kazuki-hanai made their first contribution in
- @kazooooo-ma made their first contribution in
- @pqminh27 made their first contribution in
1.4.221
Thank you so much for using Orca and for your continued support! ❤️
Remote Server is an experimental feature and may have bugs. Remote Server 2.0 is coming this week and will eliminate most of them.
- Security fix for Copilot: When Orca marked a folder as trusted for GitHub Copilot, it could leave ~/.copilot/config.json readable by other users on the same machine. That file can hold your Copilot login tokens. v1.4.219 and v1.4.220 did this on SSH hosts too, where other people often share the machine. The file is now owner-only after Orca writes to it. A file an older Orca already opened up is fixed the next time Orca adds a new folder to it.
- Codex on Windows uses your own ~/.codex: Codex in Orca now uses the same folder as Codex outside Orca, as it already did on macOS and Linux. If you only signed in inside Orca, that sign-in is copied over so you stay logged in. Codex may ask again to trust a folder or approve a command, and MCP servers you added only inside Orca need to be added again; a one-time message explains this. Codex terminals that were open before the update keep working on Orca's old folder, keep their Orca-only MCP servers, and no longer show a restart dialog.
- Codex workers: worker-start now accepts max and ultra effort for Codex models Orca doesn't list yet, such as the gpt-6.x models, instead of refusing them.
- More agents and accounts: Qoder conversations appear in session history and search, Orca can launch Qoder CLI China and Qwen Code, and GLM Coding Plans can be linked without ZCode. OpenCode and Devin can keep separate account profiles, Antigravity gets an Accounts card, and Antigravity IDE and 2.0 conversations can continue in a new CLI conversation.
- Native chat (experimental): Workspaces on a paired Orca server open structured chats when chat is your default. OpenCode sessions can use Chat. A Claude subagent waiting on a permission prompt reads as waiting, and chat errors use plain wording without loading flashes or duplicate reports.
- Agent status and orchestration: Codex's "Implement this plan?" menu and open agent questions now count as waiting on you, so sent text no longer lands on the menu. OMP 18.4 workers start, and an agent now uses Orca's own orca command even when shell startup files put an older global install first.
- Files, Markdown and search: Semicolon-separated CSVs show as columns. Large Markdown previews load faster, Find in them opens faster, and oversized tables are readable. Typing with Find open no longer jumps the caret. Search finds the right files and tells you when it couldn't finish, and file updates recover after SSH reconnects or replaced folders.
- Workspaces and notifications: Desktop notifications can be turned off per machine. A worktree delete that git can't finish stays listed so you can retry, and workspaces in WSL-runtime projects on C:\ can be deleted again. Create PR asks your agent to write the PR details on an already pushed branch, and Jira search accepts plain words.
- Updates and memory: On macOS, Update & Restart no longer closes Orca and then waits forever on background Orca servers; Orca tells you what to close and lets you retry. Many fixes let Orca free memory held by closed tabs, previews, phone screens and idle caches.
Terminals you already had open: Updating starts a new terminal background service. Terminals open before the update keep running on the previous one. New terminals use the new service and get this release's terminal fixes, including the orca command fix above, OpenCode and Devin account profiles, and agent detection and resume for jcode, Qoder CLI China, Qwen Code and Cursor.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: If you update from v1.4.219 or earlier, OpenCode 2 panes that were already running may show no status until you restart OpenCode in them. If you downgrade Orca after updating, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
OpenCode workers: On a busy machine, an OpenCode worker started with orca orchestration worker-start, or an OpenCode tab launched with a prompt, can occasionally leave its task sitting unsent in OpenCode's input box. Pressing Enter in that pane sends it. A fix is on main and will ship in a later release.
Codex: After you upgrade, Codex launches use Orca's managed Codex home until Codex approves Orca's new status hook. A resumed pane that uses ~/.codex can pause for up to 30 seconds.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Codex & orchestration
*Codex on Windows now runs on your own ~/.codex without a restart prompt for terminals you already had open, Codex workers accept max and ultra effort on newer models, and orchestration recognizes Codex's plan menu, open agent questions and OMP 18.4.*
- feat(codex): run Windows Codex on the real ~/.codex
- fix(codex): keep Orca-only MCP servers when refreshing the retained shared home
- feat(codex): tell Windows users once that Codex in Orca now shares ~/.codex
- fix(codex): stop prompting a Codex restart when only its home changed
- fix(codex): skip the hook trust RPC when Codex's session index is unreadable
- fix: dismiss Codex account prompt and return focus to terminal
- fix(orchestration): accept max and ultra effort for Codex models Orca does not list yet
- fix(runtime): read Codex's 'Implement this plan?' menu as blocked
- fix(runtime): report an open agent question as blocked to tui-idle waits
- fix(runtime): settle Codex tui-idle waits on its hook done, leaving working rows to the rules
- fix(runtime): make OMP 18.4 workers ready at the composer and keep stale-title clears display-only
- Wait for OpenCode worker input before the first dispatch
- Resolve explicitly configured command aliases for workers
- feat: live updates for agent state rules
- Fix legacy worker recovery snapshot timing for rollback safety
- Reuse prepared statements for internal worker checks
- fix(orchestration): avoid loading task descriptions during promotion
- fix(codex): release full messages behind completed child previews
Native chat
*Structured chats open on the paired Orca server that owns the workspace, a Claude subagent waiting on permission reads as waiting, OpenCode sessions can use Chat, and errors use plain wording without loading flashes.*
- fix(native-chat): the desktop declares structured chat support to paired Orca servers
- feat(native-chat): open structured chats on the paired Orca server that owns the workspace
- feat(native-chat): a Claude subagent waiting on a permission prompt reads as waiting
- Support real OpenCode sessions in native Chat
- Preserve OpenCode reasoning and recorded patches in native history
- fix(native-chat): one ordered journal writer
- fix(native-chat): remove the "still starting" notice that flashed on chat launch
- fix(native-chat): no loading flash on open, one report for a failed start, no "Not reported" caption
- fix(native-chat): plain wording for chat errors and status rows
- Fix admission of later Claude question rows and real CLI verification
- Classify native chat waiting messages once
- Append subagent handoffs without recopying their message list
- fix(claude): inspect child tool IDs without rebuilding their output
- fix(journal): encode only the retained tool-output preview
- fix(chat): encode only the retained prefix when streamed output overflows
- fix(chat): let idle session readers release retired journal folds
Agents, accounts & integrations
*Copilot's settings file stays private, Qoder, Qwen Code and GLM Coding Plans join the supported agents and accounts, OpenCode and Devin can keep separate account profiles, and Antigravity, Cursor, OpenCode and jcode integrations are more reliable.*
- fix(agents): keep ~/.copilot/config.json owner-only when Orca trusts a folder
- Add Qoder session history and search
- Register supervised Qoder China and Qwen Code
- feat(accounts): link standalone GLM Coding Plans
- Add host-owned OpenCode and Devin managed account profiles
- Preserve saved account credentials after enrollment errors
- Remove canonical account directories for uppercase registered IDs
- Keep saved OpenCode Go keys in main-owned storage
- fix(opencode-go): don't fall back to OPENCODE_API_KEY when the credential database is unreadable
- Read OpenCode Go usage from the selected account
- Add verified native Antigravity Accounts on the owning runtime
- Continue Antigravity IDE and 2.0 history in new CLI conversations
- fix(antigravity): bound Windows hook stdin on the owning runtime
- fix(cursor): resume exact conversation after startup status replay
- fix(cursor): show the primary model pool in compact usage
- fix(opencode): read the binder's session store off the main thread; ship the reader worker in orcad
- Select OpenCode plugin exports from the execution host version
- fix(opencode): retry timed-out SSH plugin updates
- fix(opencode): submit admitted native startup briefs without overwriting input
- fix(opencode): keep overlay manifest cleanup inside owned directories
- fix(opencode): finish status installation with invalid TUI settings
- fix(opencode): keep shared-session TUI activity with its owning pane
- Pass wrapped OpenCode run prompts as positional messages
- Clean up retired OpenCode configuration copies safely
- fix(jcode): harden Windows hooks and negotiate remote history
- fix(jcode): report missing and outdated managed hooks
Terminal
*Agents keep using Orca's own CLI after shell startup, OpenCode receives its editing shortcuts in terminal-first mode, a change to one tab no longer redraws every tab, and closed terminals release their memory.*
- fix(daemon): bump the terminal daemon protocol to v40
- Keep Orca CLI first after shell startup
- Let terminal-first mode defer OpenCode editing shortcuts
- perf(tab-bar): a change to one tab no longer re-renders every tab
- Reuse terminal buffer cells during readiness scans
- Cancel pending cursor updates when a terminal closes
- fix(terminal): release retired status sources from the agent type cache
- fix(terminal): release retired scrollback layouts from status routing
- fix(terminal): release closed layouts while reveal frames are paused
- fix(terminal): cancel viewport retries when panes close
- Cancel terminal preview fit frames when the preview closes
- Release terminal side effects after they have been delivered
- Check daemon idle state without building discarded terminal inventories
SSH & remote hosts
*File updates survive quick SSH reconnects, Git keeps SSH settings and review context, and search keeps working with older Orca servers.*
- fix(files): keep watcher streams across SSH reconnect races
- fix(git): preserve SSH review context and worktree ownership
- fix(search): keep legacy host search and negotiate agent support
- Preserve Windows SSH upload failures unless pwsh is missing
- fix(ssh): keep terminal buffers out of failed workspace sync status
- fix(ssh): release response chunks after the sink accepts them
- Reuse event byte sizes when relay watchers notify several clients
- Avoid cloning terminal agent owners twice in relay listings
- fix(reconnect): release obsolete app state held by handle-gap watchers
Mobile app & paired clients
*The phone stops leaving feeds and screens running after you leave them, uses less memory for pictures, files and terminal catch-up, and the Android APK links point to 0.0.52.*
- fix(mobile): release notification and account streams from the transport
- Release waiting terminal output when a mobile subscription fails to start
- fix(mobile): release callbacks retained by canceled streams
- fix(mobile): release file previews after their tabs close
- fix(clipboard): decode uploaded images without joining all chunks
- fix(mobile): reduce base64 allocations for encrypted text frames
- fix(mobile): merge terminal backlogs without rescanning growing strings
- fix(files): release expired mobile path inventories while idle
- fix(mobile): avoid backtick match arrays when editing Markdown
- Delete unreturned clipboard cache files after a failed write
- Avoid restarting error timers on closed mobile relay links
- Avoid restarting error timers after mobile relay pairing closes
- Skip new mobile toast work after feedback owner cleanup
- Skip new legacy file inventories after mobile search cleanup
- Skip unused image-size calculations in mobile web browser requests
- Reuse the ancestor path while building mobile agent rows
- Check each project repository once while filtering mobile cards
- docs: update Android APK links to 0.0.52
Browser, notebooks & computer use
*Browser tabs, screencasts, uploads and document previews hold less memory, and closing a notebook cancels a kernel that was still starting.*
- fix(browser): avoid a redundant copy of live screencast images
- fix(browser): avoid a redundant copy of document preview bytes
- fix(browser): release upload buffers after native staging
- fix(browser): release obsolete state during close replay
- Stop copying every retained browser page before attachment
- Skip renderer callbacks after their request has ended
- Skip late browser grab toasts after their surface closes
- fix(notebook): cancel kernel starts when the notebook closes
- Avoid irrelevant scroll-action searches in Mac snapshots
Workspaces, sidebar & notifications
*Desktop notifications can be turned off per machine, a worktree delete that git can't finish stays listed so you can retry, WSL-runtime projects on C:\ can be deleted, and child workspaces get a shortcut.*
- Turn desktop notifications on or off per machine
- fix(worktrees): a worktree delete git fails partway stays listed and can be retried
- fix(filesystem): deleting a workspace no longer fails as 'outside allowed directories' in WSL-runtime C:\ projects
- fix(worktrees): list a folder once when git reports it twice
- feat(sidebar): bindable shortcut to show or hide child workspaces
- Read project activity once while sorting the sidebar
- Avoid Resource Manager renders when terminal removal leaves its inventory unchanged
- fix(activity): release unrelated editor state during the Undo window
- Prepare the Activity search query once per filtered list
- Skip discarded Kanban pruning for an empty selection
- chore(worktree): include create timing and spare outcome in the workspace create events
Editor, files & source control
*Semicolon CSVs show as columns, large Markdown previews and Find stay fast, search reports complete results, file watching recovers after folders are replaced, and Create PR writes PR details on an already pushed branch.*
- feat(csv-viewer): detect semicolon-separated CSVs
- Keep large Markdown previews responsive
- Speed up large Markdown Find and render oversized tables
- Remove Markdown parser patch and simplify preview processing
- Fix Markdown Find editing without moving the caret or viewport
- fix(markdown): reduce Find memory for ordinary text
- Cancel review animations and timers when the Markdown preview closes
- fix(editor): expire saved-file snapshots while the editor is idle
- fix(editor): avoid newline match arrays when saving LF Markdown
- fix(editor): release Markdown selection listeners after close
- Reduce Markdown discovery output by filtering filenames at the source
- Fix ripgrep result completeness, filename handling, and search errors
- Avoid duplicate ripgrep scans for full file inventories
- Avoid rebuilding visible file paths for single-row selection
- fix(quick-open): release expired legacy file inventories while idle
- fix(files): replace watcher subscriptions after native failure
- fix(files): retry failed shallow directory watch replacement
- fix(git): prevent duplicate watcher reconciliation pollers
- fix(plugins): restore development watchers after folder replacement
- fix(watchers): preserve directory identities when checking replacements
- fix(cli): orca file open opens PDFs and other binaries like the File Explorer
- fix(source-control): generate PR details before Create PR on a ready branch
- fix(source-control): default Codex to GPT-5.6 Terra low
- fix(source-control): generate clean OpenCode messages locally and over SSH
- fix(git): reduce queries and preserve data across execution hosts
- perf(git): reuse queries and stop canceled catalog scans
- Skip diff analysis after a result has been discarded
- Cancel plugin retry timers when their fetch is replaced
Tasks, issues & automations
*Jira search accepts plain words, fork issues stay in the repository you picked, unchanged work-item refreshes no longer make the app recheck everything, and closed Jira pages and automation rows release their memory.*
- fix(jira): search plain text when task search input isn't JQL
- Keep fork issue details and edits in the selected repository
- Skip store notifications when refreshed work items are unchanged
- fix(jira): expire cached attachment images while idle
- fix(jira): discard detail replies after closing an issue
- fix(automations): release unused run output from dashboard rows
Session history
*Saved agent conversations load and search with less memory, and a large history cache no longer pauses Orca.*
- Bound AI Vault cache loading and keep atomic saves responsive
- Reuse prepared reads while searching saved agent conversations
- fix(ai-vault): bound transcript text before joining message blocks
- fix(ai-vault): release expired host results while idle
- Discard completed AI Vault cancellation IDs in the relay worker
- Decode complete transcript lines without copying their bytes
- Decode single-piece saved-session tails without copying them
- refactor(ai-vault): delete the unused session-scanner worker thread
Updates & reliability
*On macOS, Update & Restart no longer closes Orca and waits forever on background Orca servers, and idle updater and speech timers are released.*
- fix(updater): keep macOS Orca open when background instances block updates
- Release completed updater setup timers and callbacks
- Clear unused speech worker timers after errors and exit
Relay service
*Server-side cleanup for Orca's relay and push services.*
- Release relay handshake timers when a host connection leaves
- Reuse the parsed notification when leasing a push delivery
Tests, CI & maintenance
*Release builds publish for patch releases cut from older code, CI spends less time on setup and waiting, and several flaky tests were fixed.*
- ci(release): skip the orcad template for tags that predate it
- ci(release): publish after a skipped orcad template
- Move ARM Mac CI to macOS 15 before runner retirement
- Allow cold node-pty setup on Windows ARM CI
- Overlap ARM SSH setup and independent observation waits
- Skip dependency installation for known headless build inputs
- Avoid rescanning shared chunks in the plain Node build guard
- Reuse discovered mobile chunks during static traversal
- fix(ci): prevent concurrent pnpm refresh during mobile typechecks
- Select the latest stable release tag in one pass
- Reuse pnpm verification records in Alpine CI
- Reduce scheduled CI cache warming to every six hours
- Skip slower Windows root package-store restores in CI
- Skip slower root package-store restores in Linux PR jobs
- Skip slower root package-store restores in macOS PR jobs
- Avoid repeated pnpm archive downloads in cache producers
- Use the measured pnpm lookup policy automatically in hosted root CI
- Reuse the headless detector compiler without installing full dependencies
- Stop mocked renderer imports from qualifying he…
1.4.220
Thank you so much for using Orca and for your continued support! ❤️
This patch is built from the October 2 daily build plus fixes picked from main. Pull requests that landed on main after that are not in this build.
- Native chat (experimental): The "Stop" button ends Claude's process, including background commands and subagents. If Codex refuses or never answers a stop request, Orca ends it too. Unsent messages stay unsent until Retry, steered messages are not duplicated, and interrupted turns show a clearer status.
- Chat polish: /clear switches chats immediately; the first message starts the new agent. Codex connection retries update one warning instead of stacking errors. You can send AI notes to open chats, and older Orca versions preserve newer chat histories as read-only.
- Agent status: Esc cancellation settles Codex panes promptly, while Ctrl+C used to copy or leave /side no longer looks like an interruption. OpenCode shows failed and stopped turns correctly. Slow SSH connections no longer make agents look gone.
- Usage meters: Antigravity shows its own quota without Gemini CLI sign-in or spending quota to check. Cursor sign-in checks no longer freeze on large databases or mistake a refused usage request for an expired login.
- Workspaces: Creation is faster in large repositories, removal no longer stalls chat or files, and a workspace finishing in the background no longer switches your view. Local main updates are safer, and sidebar host tags can be hidden.
- SSH hosts: An optional Orca runtime works without Node, npm, or a compiler on the host; Auto remains the default. Standard Windows SSH accounts work, and keystrokes typed during terminal reconnection are kept.
- Screenshot drops: Mac screenshot thumbnails can now be dropped into a local Claude Code terminal or the new-workspace composer. Orca gives the agent a readable copy of the temporary image; previously, some drops looked successful but the screenshot never reached Claude Code.
- Terminals and files: macOS Option shortcuts reach terminal apps, background terminals return to their original tab, and wide paired-server panes use their full width. Huge Markdown previews no longer freeze Orca; review-note visibility and shell-file highlighting are fixed.
- Stability and tools: Orca recovers from several Linux and Windows crash loops and retries failed window launches. The first Windows browser command no longer hangs, the iOS simulator works with Xcode 27, and orca file open stays in your current view unless given --focus.
Terminals open before this update keep using the previous background service; new terminals use the new one.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: OpenCode 2 panes that were already running before the update may show no status until you restart OpenCode in them. If you downgrade Orca after this update, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Codex: After you upgrade, Codex launches use Orca's managed Codex home until Codex approves Orca's new status hook. A resumed pane that uses ~/.codex can pause for up to 30 seconds.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Native chat
*Experimental structured chats stop reliably, never send a message you were told was not sent, report crashed turns honestly, and keep their history when an older Orca opens them.*
- fix(claude): a Stop ends Claude's process, and the next message resumes the conversation
- fix(native-chat): a Codex Stop that Codex refuses or never answers ends the Codex process
- fix(native-chat): after a Stop whose exit can't be confirmed, the next message retries the stop instead of failing
- fix(native-chat): Stop's pause is worked out from the chat's history, so a steered message is never re-sent
- fix(native-chat): a message the chat said was not sent is never sent later on its own
- fix(native-chat): a Stop still reads as yours after Orca restarts, because the turn's end reads the Stop's event
- fix(agent-status): a turn a crash cut off reads Interrupted, an unproven end Couldn't confirm
- fix(claude): end a message Claude started but never confirmed, and keep Claude running while it holds one
- fix(codex): steer a mid-turn send into the running turn by name
- fix(native-chat): every chat action press is its own action (re-land #23916 on main)
- fix(native-chat): /clear starts nothing; the new chat's first message starts its agent
- fix(native-chat): chat failure messages appear in the app's language
- fix(native-chat): a Codex stream retry is one warning row that updates in place
- fix(native-chat): a failed Codex turn shows its error, not a raw thread-status row
- fix(claude): an informational note is a warning row in its own words, never a raw frame row
- fix(native-chat): the working line shows only what the agent is doing now
- fix(native-chat): a resting chat lists its model the way the running agent does, so no stray effort picker appears
- feat(native-chat): the chat strip and the sidebar read the host's child records
- feat(native-chat): register Codex default-mode helpers as subagents
- fix(notes): send AI notes to open structured chat sessions
- fix(native-chat): a paired server admits structured chat by client capability, not its own chat setting
- fix(native-chat): an older Orca keeps a chat with a newer row kind read-only instead of deleting the rest of its history
- fix(native-chat): a failed startup chat-lease save no longer puts the app into "Session restore failed"
- refactor(native-chat): keep agent-session records in the chat journal database
- refactor(native-chat): structured chat failures always reach the diagnostics log
Codex & orchestration
*Codex panes settle when you cancel with Esc or press Ctrl+C to copy, orchestration finds Antigravity, Cline and Prime Agent ready, and chat agents can learn their own Orca session ID.*
- fix(codex): install Codex's Interrupt hook so an Esc-cancelled turn settles
- Fix Codex status after Ctrl+C copy and side-chat navigation
- feat(orchestration): tell each agent its own orchestration address
- fix(orchestration): call the Orca session ID orca_session_id everywhere agents see it
- fix(runtime): read Antigravity, Cline and Prime Agent readiness from the live screen
- refactor(runtime): read four agents' readiness from JSON rule files through one engine
- refactor(runtime): read Codex, Claude, OpenCode, Pi, OMP and Gemini readiness from rule files
- fix(runtime): settle tui-idle on hook state for agents whose hooks cover the whole turn
- fix(cli): orca file open no longer moves your view unless you pass --focus
Agents & agent integrations
*Antigravity and Cursor usage meters show real numbers, OpenCode shows failed and stopped turns, and agents are no longer marked as exited when Orca simply couldn't check.*
- fix(agent-status): preserve hook presence when process checks cannot answer (step 1 of 3)
- fix(opencode): preserve turn outcomes and avoid auto permission attention
- fix(opencode): keep absent session stores quiet
- fix(rate-limits): read real Antigravity quota from the agy CLI, not the Gemini mirror
- fix(status-bar): show Antigravity's model-group pools instead of an empty segment
- fix(antigravity): gate free quota reads by CLI version and usage preference
- fix(antigravity): discover skills from the CLI global config directory
- fix(antigravity): launch POSIX hooks through sh with bounded JSON stdin
- fix(cursor): read desktop login outside the main thread
- fix(cursor): distinguish usage failures from expired login
- fix(cursor): preserve UTF-8 in Windows hook transport
- fix(dsh): support 0.2 positional profiles and first workspace launch
- fix(ai-vault): follow ZCode stored transcript order
Terminal
*Mac screenshot thumbnails now reach Claude Code when dropped into a local terminal or the new-workspace composer. Wide panes use their full width, Option shortcuts work on ABC keyboards, OpenCode tabs respond to clicks, and a background terminal returns to its own tab.*
- Fix terminal width cutoff on wide panes
- Enable Option shortcuts for ABC keyboards in Auto mode
- fix(terminal): pass single-pane OpenCode tab clicks through drag strip
- fix(terminal): fill OpenCode DOM block glyphs in repainted rows
- fix(terminal): reattach a background terminal to its own tab instead of opening a duplicate
- fix(terminal): stop parking pass queueing no-op renders that trip React #185 during worktree removal
- fix(drop): make temporary Mac screenshots readable to Claude Code when dropped into a local terminal or new-workspace composer
SSH & remote hosts
*SSH hosts can run Orca on Orca's own Node so they need no Node, npm or compiler, Windows SSH hosts work for standard accounts, and typing during a reconnect is no longer lost.*
- feat(ssh): relay runtime fallback ladder, telemetry and host runtime setting
- feat(ssh): opt-in SSH relay on the pinned Node with prebuilt addons
- feat(ssh): pinned-Node relay on Windows SSH hosts
- feat(ssh): rung B glibc 2.17 compat runtime; gate remote vault on host node:sqlite
- feat(ssh): plain SSH terminals and SFTP browsing when no Orca runtime can run
- feat(ssh): runtime-store GC in production and exec-stdin upload fallback
- fix(ssh): collect relay versions only when provably exited; runtimes/ store GC
- fix(ssh): Windows hosts without Add-Type staging; runtime-store GC on Windows
- fix(ssh): launch the Windows relay outside sshd's job so standard users work
- fix(ssh): keep keystrokes typed while a restored SSH terminal reattaches
- fix(relay): treat EPIPE/ECONNRESET write failures as the client leaving
- fix(ssh): name missing build tools when the relay has no node-pty
- fix(ai-vault): require node:sqlite backup support in remote SQLite probes
- feat(ai-vault): read remote OpenCode history with the pinned Node; remove Bun
- feat(orcad): run orcad on the pinned Node instead of Bun
- refactor(orcad): make profile backup and preflight runtime-neutral
- build(orcad): server node-pty slots at glibc 2.28, plus a glibc 2.17 compat slot
- feat(packaging): ship the orcad server template in desktop builds
Mobile app & paired clients
*The phone page slides between screens, iOS fields take typed text again, held buttons keep working, and OpenCode no longer leaves the phone terminal blank.*
- feat(mobile): slide the page's host stack on push and Back
- fix(mobile): iOS shell keeps WebKit text interaction on so page fields take text
- fix(mobile): hold-to-dictate, repeat keys and the browser long-press survive the page's long-press
- Fix OpenCode startup parser crash in the mobile terminal engine
- Preserve Mermaid exports through mobile bundling
- Keep paired browser terminal insertion in the host's requested position
- fix(mobile): publish the Android APK's size and checksum with the release
Browser & emulator
*Annotate page element has a shortcut, the first browser command on Windows no longer hangs, and the iOS simulator works with Xcode 27.*
- feat(browser): add a rebindable shortcut for Annotate page element
- fix(browser): stop the first browser command on a new Windows tab hanging until it fails
- fix(emulator): take serve-sim 0.1.47 so the iOS simulator works on Xcode 27
Workspaces & sidebar
*A finished workspace no longer pulls you away from where you are, removing worktrees no longer stalls the app, creation is faster in large repositories, and the host tag on cards can be turned off.*
- fix(worktrees): a finished create no longer pulls you off the workspace you switched to
- fix(worktrees): let git delete removed checkouts so chat sends never wait behind them
- fix(worktree): update local main safely, once per branch, alongside the checkout
- fix(worktrees): keep creation fast in large repositories
- feat(sidebar): let the host pill be turned off per card
- Improve scroll indicator visibility with larger sizes and opacity
Editor, files & source control
*Huge Markdown previews no longer freeze Orca, the Review Notes setting works, shell dotfiles get colors, and commit messages and times read better.*
- fix(markdown): cap rendered size of large Markdown previews to stop renderer freezes
- fix(editor): honor the Markdown Review Notes setting
- fix(editor): highlight shell startup dotfiles
- fix(source-control): show git history commit times to the second
- fix(source-control): drop reasoning model think blocks from generated messages
- fix(files): ignore nested generated directories on macOS
Reliability & languages
*Orca recovers instead of crash-looping in small Linux containers, on Windows out of memory, and when the system briefly can't start its window, and Korean labels read naturally.*
- fix(linux): move Chromium shared memory off a tiny /dev/shm
- fix(recovery): prompt instead of reloading into a repeat Windows OOM when commit is exhausted
- fix: recover renderer launch failures in the running app
- fix(i18n): correct Korean working and shell labels
Windows & packaging
*Windows and Linux packages no longer include the macOS-only iOS Simulator helper, and dependencies are updated.*
- chore(deps): update reviewed dependencies across Orca
- feat(runtime): pin the Node 24.21.0 server runtime with an offline CI check
- fix(packaging): ship serve-sim only in macOS builds
Relay service
*Server-side work on Orca's relay fleet: new relay servers in Asia and the US, and server updates that no longer block sign-ins or get stuck.*
- fix(relay): re-place hosts off a draining cell without locking its row
- fix(relay): refuse a redial at once while the host's own release holds its row
- fix(relay): admit drained hosts through their own lane and stagger their return
- fix(relay): define restart-safe by the cell runtime, and refuse waves without headroom
- fix(relay): run the same-cap headroom gate in the modes the job actually receives
- fix(relay): let a draining cell pass restart-safe through refused redials
- fix(relay): anchor same-cap monitor evidence freshness to the run's authorisation, not job startup
- fix(relay): accept MIG version-name reconciliation and recreate stranded cells without rewriting the MIG
- refactor(relay): sample fleet health inside the same-cap roll instead of a separate monitor run
- fix(relay): gate the Asia canary on Asia-targeted region fallbacks only
- feat(relay): declare Asia cell c31 at the c30 shape
- chore(relay): move Asia cell c31 to the general same-cap lists after promotion
- feat(relay): declare US cells c32 and c33 at the 3,000-host shape
Reverted before release
*Twenty-six pieces of in-progress SSH and server work were merged and then taken back out, so none of their changes are in this release.*
- revert: take the 26 Phase 3 (#16741 port) PRs back out of main
- feat(relay): port the #16741 T1 seam (work drain, publication drain, release gate)
- feat(relay): route relay handlers through work admission; producer publication drain
- feat(relay): fence and drain file and git response streams on shutdown
- refactor(runtime-rpc): extract the Node WebSocket lifecycle; opt-in pinned port
- feat(ssh): port the SSH connection work ledger and transport close ledger (#16741 T2)
- feat(relay): await owned watcher and agent children on shutdown (#16741 T2 P1)
- feat(ssh): wire SshConnection through the work and transport close ledgers (#16741 T2 P2)
- feat(daemon): tag daemon stream data with the PTY incarnation id (#16741 T2 P4a)
- feat(profiles): carry markdown frontmatter visibility in project transfers (#16741 T2 P7)
- feat(session): retry failed renderer session writes and verify local folder PTYs (#16741 T2 P9)
- feat(ssh): track connection-manager drains, test probes and provider continuations (#16741 T2 P3+P8a)
- feat(daemon): idle retirement, session census and recovery-only provider (#16741 T2 P4b)
- fix(runtime): project the PTY incarnation onto mobile session tabs
- feat(ssh): add pty.resumeClient and split SSH PTY process listing (#16741 T2 P5+P6)
- feat(relay): capability-gated owner reset with a durable preparation journal (#16741 T3 R1)
- feat(ssh): remote orcad primitives on the pinned Node runtime (#16741 T6-1)
- feat(runtime): SSH access links for paired servers in a downgrade-safe sidecar (#16741 T5-1+T5-2)
- fix(runtime): fence runtime-environment subscriptions and status probes by identity (#16741 T5-3)
- feat(orcad): migration manifest and dormant-state contracts (#16741 T6-7)
- feat(ssh): crash-safe orcad activation, rollback and recovery (#16741 T6-2)
- feat(orcad): supervisable server — stop requests, managed stop receipts, lock-safe lifetime (#16741 T6-3)
- feat(ssh): remote orcad stop by request file and journaled decommission (#16741 T6-4)
- fix(ssh): orcad GC honors the activation journal; readiness requires proven daemon coverage (#16741 T6)
- feat(ssh): deploy and pair an empty managed orcad server over SSH (#16741 T6-5)
- feat(ssh): update, roll back, recover and stop a managed orcad server (#16741 T6-5 follow-up)
- feat(orcad): source-side dormant export of a relay-hosted SSH target (#16741 T6-8)
Tests, CI & maintenance
*Release builds pass their telemetry check, main builds again after crossed changes, CI spends less time on setup, and many flaky or stale tests were fixed.*
- refactor(native-chat): move the provider-exit proof out of structured-agent-session-adapter.ts so main's lint passes
- fix(native-chat): restore main typecheck after #24312 and #24334 crossed
- fix(build): import the Electron remote capability list from its own module
- fix(native-chat): move the chat-tab surface out of the session host so main passes lint
- ci(daemon): gate PRs on daemon protocol crossing from the newest release
- ci(daemon): runtime-launcher protocol ratchet and Node slot marker
- ci(ssh): hostile-host matrix for the relay runtime ladder
- ci(ssh): macOS SSH-host lane for the pinned relay; fix uploads under a symlinked root
- ci(ssh): Windows SSH-host lanes (inbox + preview OpenSSH) for the pinned relay
- ci: share PR planning setup and reuse the static native cache
- Free PR CI capacity by avoiding repeated setup and real-time test waits
- Reuse qualified Windows server builds and dependency verification records
- Speed up serializer checks and keep native caches stable
- ci: run every cross-version wire test, picked up by folder so new ones can't be skipped
- Reduce redundant headless server CI work
- Reduce CI setup costs and fixture failures
- Reuse prepared Windows native builds in SSH CI
- Stop stalled unit jobs after an hour
- Bound E2E package setup and retain cancellation traces
- Skip redundant package setup in SSH Linux builds
- Bound package setup for the E2E native-cache job
- test(native-chat): cancel the journal import test's tick before teardown
- test: stop main failing on three tests the store and close-cause changes crossed
- test(runtime): add a readiness census that pins every tui-idle verdict
- test(orcad): skip the live-terminal runtime hand-over across a protocol bump
- test(e2e): select the onboarding Codex card by its exact name
- test(e2e): fake Codex answers the --no-daemon --help probe without a spawn
- test(e2e): drag the manual-order worktree to a slot that changes the order
- test(e2e): give the sparse preset proof room to finish on CI
- test(e2e): retry the crash-recovery test's main-process reads on Electron's transient evaluate error
- Fix Codex Ctrl+C regression fixture on Linux
- test(e2e): dismiss the correct tour before screenshot markup
- test(wire): fix release fixtures and compatibility…
1.4.219
Thank you so much for using Orca and for your continued support! ❤️
This patch is built from the September 30 daily build plus fixes picked from main. Pull requests that landed on main after that are not in this build.
Codex terminals: When a Codex tab ends up sharing one background server with your other Codex tabs, a notice now appears at the top of that tab. On that server, closing one tab can end the others and agent status can be wrong. The notice offers a Fix that turns the sharing off and shows the exact command it runs. In a terminal that was opened before the update, it offers to open a new terminal instead. Typing codex in a plain fish tab now runs Codex on its own server, as it already did in zsh and bash. Opening a terminal no longer removes Orca's status hook from ~/.codex. Orca no longer writes a second copy of a folder's trust entry into Codex's config.toml, which stopped every codex command from working, and it cleans up copies it already wrote. The background Codex usage check no longer clicks "Update now" in Codex's update prompt and leaves Codex broken. Codex also starts without a trust prompt in worktrees of a bare repository. A Codex pane no longer freezes for about a second while you type.
Folder trust for agents: When Orca starts Claude Code, Codex, Cursor, Copilot, Qoder, or Antigravity in a folder, it now answers the agent's "Do you trust this folder?" question ahead of time. Orchestration workers, automations, and agents started from your phone no longer get stuck waiting at that prompt. You can turn this off in Settings → Agents → "Trust the folder when Orca starts an agent".
Agent status: With several OpenCode 2 panes open, each pane now shows its own Working and Done, not another pane's. On Windows, Claude Code status works again when Claude runs its hooks in Windows PowerShell 5.1. A Codex row stays in the sidebar while Codex runs, even after Codex renames its tab. A freshly started Hermes is shown as ready, not busy.
Native chat (experimental): A message you send while the agent is working now waits as a card above the message box, on desktop and on the phone. You can Steer it into the running turn, edit it, or delete it. Otherwise it is sent when the turn ends. A subagent's work appears in its own section instead of being mixed into the conversation. /compact gets its own row, and an unfinished /clear no longer locks the chat. Stop responds faster and no longer shows a false "Cancellation was not confirmed". Pasting text works when you are connected to a remote Orca server.
Orchestration: A worker's "I'm done" report is no longer rejected after its conversation is compacted. If Orca is briefly unreachable, the report is retried for about two minutes instead of being lost. worker-abandon now settles a stuck worker every time.
Files and editor: If you saved a new untitled note and then closed its tab, Orca deleted it. Saved notes are now kept. Clicking in the rich Markdown editor no longer jumps to the top of the file. Open files switch with the system's light and dark mode. Sparse checkouts open the file explorer at the folder you work in.
Terminal: Images whose file names have brackets or spaces, like download (1).png, now attach to an agent when you drop them in. When dropped files are skipped, the notice tells you why. With many tabs open, the tab you're on stays visible at the edge of the tab bar. Programs like Codex and Claude Code now get the right colors when they start late or in the background.
Linux and Windows: On Hyprland, sway, river, and niri, Orca now encrypts saved API keys and tokens when your keyring is running and unlocked. If a credential is saved without encryption, Settings now shows a warning next to it. On Windows, the orca command is now a native program, because antivirus kept deleting the old one. It runs without the Visual C++ Redistributable. The installer no longer carries a duplicate copy of Orca's relay files inside the app archive.
Terminals you already had open: The new color answers and the codex setup in fish tabs take effect in terminals opened after the update. Terminals that were already open keep their old behavior until you open new ones.
Windows on ARM: The ARM64 package ships an x64 orca.exe command-line tool. Windows 11 on ARM runs it under emulation. Windows 10 on ARM can't run it, so the orca command does not work there.
OpenCode 2: OpenCode 2 panes that were already running before the update may show no status until you restart OpenCode in them. If you downgrade Orca after this update, duplicate OpenCode status plugins are left behind. After opencode run exits, its pane can keep showing "Done"; a fix is pending in #24472.
Codex: After you upgrade, Codex launches use Orca's managed Codex home until Codex approves Orca's new status hook. A resumed pane that uses ~/.codex can pause for up to 30 seconds.
Claude folder trust: Folder pre-trust is on by default (Settings → Agents → "Trust the folder when Orca starts an agent"). On Alpine WSL, Orca can't copy the file permissions it needs, so Claude shows its own trust prompt instead.
Codex & orchestration
*Codex tabs warn when they share a server, Codex settings and hooks are no longer damaged, and orchestration worker reports get through more reliably.*
- feat(terminal): warn when a typed Codex joins Codex's shared server (STA-9051)
- feat(terminal): point an old terminal's Codex shared-server banner at a new terminal (STA-9051)
- fix(terminal): give plain fish tabs Orca's codex function without changing fish's startup
- fix(codex): opening a terminal no longer strips Codex hooks from the real ~/.codex
- fix(codex): recognise Codex's quoted spellings in config.toml, and repair Orca's duplicates
- fix(codex): trust the worktree Codex starts in, not a guessed repo root
- fix(rate-limits): stop driving a hidden Codex TUI to read usage
- fix(codex): start short-lived Codex app-servers on Windows without cmd.exe
- fix(orchestration): accept worker reports without the dispatch capability
- fix(orchestration): stop minting and printing the dispatch capability
- fix(orchestration): worker-abandon settles a stuck worker and records who did it
- fix(orchestration): retry worker_done while the Orca runtime is briefly unreachable
Agents & agent integrations
*Orca pre-trusts the folder when it starts an agent, OpenCode 2, Claude on Windows, and Hermes report status correctly, and onboarding focuses on installing skills.*
- feat(agents): pre-trust the folder wherever Orca starts an agent
- fix(claude): stop Orca making a WSL user's ~/.claude.json world-readable
- fix(opencode): report OpenCode 2 status from each pane's own TUI
- fix(claude): run Windows hooks without shell operators
- fix(runtime): treat Hermes session start as idle, not a running turn
- fix(onboarding): build the agent step around skills, not CLI registration
Native chat
*Experimental structured chats queue mid-turn messages as editable cards, give subagents their own sections, and handle Stop, /compact, /clear, and pasting more reliably.*
- feat(native-chat): hold mid-turn messages in a host-owned queue
- feat(native-chat): mid-turn messages wait as editable cards above the composer
- refactor(native-chat): a subagent's rows live in its own section, not in the parent's conversation
- fix(claude): a restarted provider continues the subagent roster earlier runs journaled
- fix(native-chat): turn facts come from the turn record, and /compact is a message the chat sends
- fix(native-chat): an unfinished /clear or refused Codex rewind no longer locks the chat
- fix(native-chat): a failed turn ends on its error instead of folding it
- fix(codex): a Codex Stop is the interrupt alone, so it no longer says "Cancellation was not confirmed"
- fix(codex): say a full Stop wait can overrun quit's eviction budget, and unref its timer
- fix(claude): a Stop naming the running turn acts at once, and a Stop in the gap is no longer lost
- fix(claude): a queued message Claude withdrew is settled from Claude's own cancelled event
- fix(codex): log a late reply to a timed-out request instead of showing it in the chat
- Fix Chat UI paste intake and pane routing
- fix(chat): decode Claude pastes and report terminal delivery uncertainty
- feat(native-chat): resuming interrupted chats runs in the status bar
- feat(native-chat): one structured-chat journal database per host, owned by one process
Terminal
*Codex panes no longer freeze while you type, programs get the right colors, and dropped files attach or explain why they were skipped.*
- fix(terminal): release xterm's DEC 2026 render hold instead of waiting out its 1s timeout
- fix(terminal): the terminal's owner answers colour queries for the terminal's whole life
- fix(terminal): attach dropped images whose filenames need shell quoting
- Show skip reasons in terminal drop upload reports
- fix(terminal): removing a workspace prunes that workspace's close records
Mobile app & paired clients
*The phone gets the mid-turn message cards, phone swipes no longer type escape text, agents started from the phone follow your chat or terminal choice, and the notification service delivers more phone notifications instead of letting them expire.*
- feat(mobile): mid-turn messages wait as cards above the phone composer
- fix(terminal): keep the mouse report format in desktop pane snapshots so phone swipes never type escape text
- fix(mobile): start + menu, quick command and diff-note agents through agent.launch
- fix(mobile): stop a closing phone stream from ending the terminal or chat feed that replaced it
- fix(mobile): the update-mobile wall opens the exact release
- fix(mobile): count opening a cached page generation as use; cache six hosts
- fix(push): give the push gateway six database connections per instance
- fix(push): run twelve delivery drains instead of four
- fix(push): size the claim-attempt budget from the drain count
Browser
*A browser tab with a phone-size preset always reports the identity of the size actually applied.*
- fix(browser): a tab's phone identity follows the viewport actually applied
Tabs & sidebar
*The current tab stays visible in a scrolling tab bar, and a running Codex keeps its sidebar row.*
- fix(tab-bar): keep the active tab visible when the tab strip scrolls
- fix(sidebar): an agent's row stays while it runs, whatever its tab title
Editor & files
*Saved untitled notes are kept, Markdown clicks no longer jump to the top, open files follow light and dark mode, and sparse checkouts open at a useful folder.*
- fix(editor): keep saved untitled notes when their tab closes
- Revert "fix(markdown): return focus to editor from find bar"
- fix(editor): follow system light and dark while the editor tab stays open
- feat(explorer): scope file trees to sparse checkout directories
Saved credentials
*On more Linux desktops, saved API keys and tokens are encrypted, and Settings warns when one is stored without encryption.*
- fix(secrets): seal credentials on Linux desktops Chromium cannot detect
- fix(secrets): stop telling Linux users to install a keyring they already run
- feat(secrets): warn in Settings when a credential is stored unencrypted
Windows & packaging
*The Windows orca command is now a native program that no longer resembles the malware antivirus kept flagging and runs without extra Microsoft runtimes. The app also ships without a duplicate copy of its relay files.*
- fix(windows): replace the managed CLI launcher with a native one
- fix(windows): link the CLI launcher's C runtime statically so orca.exe runs without the VC++ Redistributable
- fix(packaging): stop shipping the relay bundles inside app.asar
Reliability & performance
*Adding or removing a worktree rescans only that project, and fewer git calls block the app.*
- perf(git): relist only the repo whose worktrees changed, and stop blocking main on sync git
Tests, CI & maintenance
*Release builds pass their telemetry check again, the WeChat community link points to the current group, and many tests that could not fail were removed.*
- fix(release): accept the build identity as a later declarator in the minified telemetry check
- refactor(shared): bring constants.ts back under the max-lines limit
- docs(wechat): point community QR code at group 11
- fix(native-chat): main's draft-queue tests follow #23524's /clear (fixes main)
- test(e2e): stop main's static analysis failing on the tab strip test
- test(mobile): record RPC goldens without a pinned commit, and check recorded requests against the desktop's params rules
- test(claude): run the real Claude CLI tests only when opted in
- test: unit tests can no longer write a developer's real agent or Orca settings
- test: open, seed and read the agent-session record store through one test harness
- test(e2e): let the completed-worker fake Codex answer the --help probe
- Set iceCandidatePoolSize to 0 in WebRTC egress probe
- test: stop testing private internals through exports no caller needs
- test: drop private-internal and boundary-census tests with behavioral owners
- test: retire private-predicate duplicates in the renderer
- test: retire the last private-predicate duplicates in the leaked-internals sweep
- test: stop restating internal tuning constants, keep the ones that are contracts
- test: remove mock echoes and duplicate contracts that only reading finds
- test: retire browser and cookie-import cases their siblings already own
- test: retire renderer pane and completion-cadence cases siblings already own
- test: retire cases whose predicates never read the varied input
- test: retire native-chat cases their fixtures or predicates neutralize
- test: delete a suite that tested only itself, and trim browser-pane duplicates
- test: delete the source-grep tests an earlier detector's regex missed
- test: retire hook and installer cases whose guards or arithmetic cannot fail
- test: retire ai-vault cases whose inputs the scanner never reads
- test: retire codex cases whose setup is inert or whose name outruns its input
- test: retire cli cases that re-run a contract the sibling already owns
- test: retire relay, preload and shared cases that re-prove an owned contract
- test: retire src/main cases that replay a contract their owner already proves
- test: retire src/main/runtime cases that re-prove an owned contract
- test: retire renderer cases whose input cannot reach the behavior they name
- test: retire mobile, cloud, config and e2e cases their input cannot reach
- test: retire long-tail cases whose input cannot reach the behavior they name
- test: retire duplicate cases that replay an owner across a re-export or provider shim
- test: retire backlog cases that assert a shim, a literal, or an unread branch
- test: close the disclosed reading gap in agent-hooks, claude and store slices
- test: retire long-tail cases whose assertion is decided by the test itself
- test: retire cases whose named dimension the production signature cannot express
- test: retire cases whose fixture decides the outcome it asserts
- test: retire cases subsumed by an honestly-named neighbour
- @higherbros made their first contribution in
1.4.218
Thank you so much for using Orca and for your continued support! ❤️
This patch is built from the September 29 daily build plus fixes picked from main. Pull requests that landed on main after that are not in this build.
Codex terminals: Settings → Agents has a new "Run each Codex terminal on its own server" switch. It's on by default, which keeps agent status and closing tabs working correctly. Turn it off to go back to Codex's shared server and its agents overview. The switch applies to new terminals. A one-time notice explains the change and links to the switch. Codex started from a cmd.exe tab, by its full path, or after "wait for setup" finishes now runs on its own server too. A busy Codex 0.150–0.157 tab no longer shows as idle, and orchestration workers wait out Codex 0.157's startup screen before their brief is typed.
More agents: DeepSeek Harness, Freebuff, Qoder, and CodeBuddy are built in: you can launch them from Orca, and their status shows in the sidebar. ZCode CLI conversations appear in session history, and its Coding Plan quota shows in usage.
Terminal: A new Reset Terminal item in the terminal's right-click menu clears keyboard and mouse modes a crashed program left on. Orca no longer switches those modes off just because it guessed a program had died, so Shift+Enter and Option/Alt keys keep working in Codex and Claude Code after Ctrl+C. SSH terminals now clean up after a crashed program the same way local ones do. Having hundreds of terminals open no longer stops their output, and a failed terminal save no longer claims your disk is full.
Orca mobile app: On Windows hosts, phone swipes in a Codex terminal scroll again instead of typing junk into Codex after the desktop app restarts. If you update with terminals open, this takes effect once Orca's background terminal service restarts: after you close all terminals or reboot. The app also tells you when a newer version is available to install, and the keyboard now covers the page like it does on other screens in the app.
Browser: If a page in Orca's browser crashes, resizing its viewport no longer crashes Orca. The chosen size is applied when the page loads again. Browser tabs that are moved between groups no longer go blank.
Native chat (experimental): Structured chats can run orchestration themselves and receive worker results. Their status, errors, subagents, and stopped turns are now reported more accurately.
Reliability: A large diff no longer freezes Orca when many files change at once, and Cmd+J keeps the keyboard in the terminal when a workspace takes a moment to load.
Codex & orchestration
*Codex terminals get a setting to use their own server or Codex's shared one, more Codex launch types run on their own server, and orchestration workers start more reliably.*
- feat(settings): let Codex terminals opt back into Codex's shared server
- fix(terminal): run Orca's cmd.exe, path-named and setup-gated Codex launches without the shared server
- fix(runtime): stop a busy Codex 0.150-0.157 pane reading as tui-idle
- fix(runtime): wait out Codex 0.157's startup screen, and stop at Codex's startup dialogs, before typing a worker brief
- fix(runtime): reopen the quiet-foreground tui-idle lane for agents with no other rest signal
- fix(codex): restored Codex panes on a managed account resume instead of failing with SUN_LEN
- fix(agent-trust): bound the remaining Codex trust writes a launch waits on
- fix(codex): index a new account home before bridging history into it
- fix(codex): turning Codex off per agent keeps its hook entry off
- feat(orchestration): let a structured chat run orchestration as itself
- feat(orchestration): deliver worker results to a structured chat coordinator
- fix(terminal-wait): unattended launches report Claude's trust dialog instead of timing out or typing into it
- fix(zcode): wait for composer before first worker dispatch
Agents & agent integrations
*DeepSeek Harness, Freebuff, Qoder, and CodeBuddy are built in, ZCode history and quota are shown, and agent launches and hooks are more dependable.*
- feat(agents): add first-class DeepSeek Harness (dsh) support
- feat(agents): add Freebuff launch and sidebar status support
- feat: add first-class Qoder CLI support
- Add CodeBuddy as a built-in coding agent
- feat(ai-vault): show ZCode CLI session history
- feat(usage): show ZCode Coding Plan quota on current main
- fix(opencode): stop OpenCode 2 loading a stale plugin from the retired shared hooks dir
- fix(opencode): keep OpenCode 2 panes Working across plugin reloads
- fix(claude): write only the hook events and statusLine the user's Claude accepts
- fix(agent-launch): report a launch that failed before spawning as failed, with its cause
- fix(agent-launch): move only the requesting client's view to a launched tab
- Agent launches carry the surface that started them
- feat(analytics): persist local usage session identities
- perf(usage): persist a scan's analytics session IDs in one write
Native chat
*Experimental structured chats report status, errors, subagents, and stopped turns more accurately, and they can run orchestration.*
- fix(native-chat): render the terminal-backed chat through the structured chat's turn status
- feat(native-chat): Codex sessions write their subagents into the host status store
- refactor(sidebar): one subagent row for CLI and structured children, shared with the chat strip
- fix(native-chat): a message is accepted, then delivered
- fix(native-chat): the conversation outlives its agent
- fix(native-chat): close only the reopened chat when main closes its tab
- fix(native-chat): a request that failed reads as failed
- fix(native-chat): say a refused chat write in plain words, and keep it with the write it describes
- fix(native-chat): Stop is there from the moment a message is sent
- Show a resting Claude chat's effort instead of a blank picker
- fix(native-chat): the host writes chat failures for a person, with a typed fact beside them
- fix(native-chat): let a multi-question ask record list its questions
- fix(native-chat): a turn a proven crash cut short reads interrupted
- fix(native-chat): stop killing processes that only inherited a chat's spawn tag
- fix(codex): the provider supervisor outlives its provider group when stopped
- fix(claude): run structured Claude under the POSIX provider supervisor
- fix(native-chat): keep a Codex ask's questions in the order it asked them
- fix(native-chat): a failed Codex turn keeps its failure and "Worked for"
- fix(codex): a native chat's thread opens on the model the chat chose
- fix(native-chat): show the "Working for" bar while a turn runs
- fix(claude): withdraw a follow-up queued behind a stopped turn instead of dropping it silently
- fix(native-chat): keep a turn's bar on the prompt that opened it
- fix(native-chat): a subagent's words are presented as that subagent's, never the parent's
- fix(native-chat): each chat failure says why in plain words, on the thing that failed
- fix(codex): a message whose turn was stopped before Codex took it is withdrawn, not stuck
- fix(native-chat): a message Claude folds into its running turn no longer splits the turn
- fix(native-chat): stop flashing "still starting" on every chat launch
- fix(native-chat): group chat rows by the turn that produced them
- fix(native-chat): only Codex's turn completion ends a Codex turn
- fix(native-chat): an empty workspace opens the default agent as a chat when chat is the default view
- fix(native-chat): drop the Codex error path #23682 removed
- fix(native-chat): keep a child turn settling on an error Codex will not retry
Terminal
*Reset Terminal clears stuck input modes, Orca no longer switches off a live program's keyboard modes, and terminal saves and restores are more dependable.*
- feat(terminal): add Reset Terminal that clears leftover input modes on the host and pane
- fix(terminal): stop guessing that apps died and wiping their keyboard modes
- fix(terminal): keep a dead app's input modes recoverable after a refuted proof
- fix(terminal): clear the Kitty input mirror when a shell is confirmed
- fix(relay): reset input modes a dead program left on in SSH terminals
- fix(terminal): let unselected Cmd+C reach apps that own their selection
- fix(terminal): stop inline-image decoders exhausting the renderer's wasm memory budget
- fix(terminal): stop misdiagnosing save failures as a full disk
- Improve PTY device error messages with localization support
- fix(workspace): a restored workspace paints before its terminals reconnect
- fix(terminal): retry first-terminal seeding until a decision applies
- fix(terminal): every explicit terminal close commits through one main transaction
- fix(terminal): main records every tab close, and seeding reads the records
- fix(terminal): one intentional-stop register, and per-run spawn and input facts
- fix(terminal): stop a resume note from blanking a live remote agent pane
- fix(runtime): retire an exited terminal before its stream end
- fix(terminal): reveal splits while the source pane binds
- fix(terminal): preserve typing while a remote pane reattaches
Mobile app & paired clients
*Phone swipes scroll Codex on Windows hosts again, the app tells you when an update is available, and terminal streams and keyboard layout behave better.*
- fix(terminal): restore the mouse format with mouse tracking, so phone swipes don't type into Codex
- feat(mobile): tell users when a newer app binary is installable
- feat(mobile): the keyboard covers the page like a native screen, and the shell says its height
- fix(mobile): native desktop-mode keyboard lift stays on screen; metrics carry the row pitch
- fix(mobile): the page pushes its terminal frame into the document from RN layout
- fix(mobile): size a terminal's first subscribe from the document's reported cell box
- fix(mobile): start AI-button agents through agent.launch, never a bare shell
- fix(mobile): unsubscribe session tabs by request on the direct connection
- fix(mobile): release streams whose ready arrives after a replayed cancel
- fix(runtime): register phone terminal subscriptions when the request arrives
- fix(mobile): show one review sheet at a time so the review screen never freezes
- fix(runtime): let the phone end a terminal stream by the request that opened it
- fix(runtime): register phone tab-list streams when the request arrives
- fix(mobile): paired clients re-derive a kept terminal after a cold restore
- fix(mobile): send typed question answers as structured answers
- fix(runtime): answer terminal.subscribe at once for a pane the desktop already has mounted
- fix(mobile): left-align every line of the desktop host card
- fix(mobile): truncate oversize markdown reads instead of failing them
Browser
*A crashed page no longer takes Orca down when resized, and moved browser tabs no longer go blank.*
- fix(browser): a crashed page no longer crashes Orca when its viewport is resized
- fix(deps): take Electron 43.7.5 so detached webviews stop blanking browser tabs
- fix(browser): give a tab's identity one owner so viewport presets stop dropping client hints
- fix(browser): a failed SSH route keeps its card while the host redials
- fix(browser): restore hover after leaving a mobile viewport preset
- Browser tab placement review
Tabs, sidebar & status bar
*New-tab search ranks results better, Cmd+J keeps terminal focus, and sidebar and status bar layout is tidied up.*
- Tab opening ranking
- Fix terminal focus when Cmd+J wakes a workspace
- fix(sidebar): clip arrow overflow at the worktree card border
- fix(sidebar): move agent child disclosure to the right
- fix(status-bar): re-measure collapsing levels when only the collapsed width moves
- fix(setup): remove wait-for-setup helper text
Editor, diffs & files
*Large diffs no longer freeze Orca, and Markdown documents are found faster.*
- fix(renderer): stop the modal toast rule from freezing large diffs
- fix: bound combined diff editors and scope chat style invalidation
- fix(editor): preserve combined diff scroll on line focus
- Speed up Markdown document discovery with bundled ripgrep
SSH, Git & integrations
*Remote agent settings survive a failed read, partial-clone repositories are identified correctly, and Linear accepts team keys that start with a digit.*
- fix(ssh): don't overwrite remote agent config after a failed read
- fix: identify partial-clone repositories from the correct remote
- fix(linear): accept team keys that start with a digit
Reliability & performance
*Settings search, agent status updates, and the browser version of Orca do less redundant work.*
- perf: preserve matching General settings sections during search
- perf: preserve matching Accounts settings sections during search
- fix(agent-session): wait for in-flight session-store writes before teardown returns
- fix(agent-hooks): compare status rows structurally instead of serializing both
- fix(tab-group): measure fallback pane geometry once per tab group, only while visible
Tests, CI & maintenance
*CI runs faster and on cheaper runners, Windows releases require signed binaries, and a CI audit sharding change was reverted.*
- perf(ci): shard the anti-slop audit across processes instead of one JS runtime
- revert(ci): drop the anti-slop process sharding, which measured as noise on a 4-vCPU runner
- fix(windows): require signed release binaries and identify CLI launcher
- fix(release): stop the release policy from deleting pipeline-cut releases
- fix(i18n): prune the wait-for-setup help copy #23799 removed
- docs(readme): remove the TestFlight link
- docs: update GitHub star history chart
- ci: reduce repeated runner work and validate affected-test selection
- perf(ci): stop the orcad smoke idling 15s and the static job fetching mobile packages it skips
- perf(ci): take i18next-cli 1.74.1 so extraction stops re-scanning every key to find its leaves
- perf(ci): diff against the merge commit's first parent so PR checkouts can be shallow
- perf(ci): cache pnpm verification records on Linux
- perf(ci): run static analysis on the free ARM runner
- perf(ci): stop duplicating shared Linux download caches
- perf(ci): move six more jobs to the free ARM runner
- ci: skip unrelated installs and share xterm build dependencies
- ci: use faster gzip for temporary Linux test packages
- perf(ci): use four ARM test workers and remove repeated compilation
- perf(ci): plan the unit shards before the static-analysis gate instead of behind it
- perf(ci): take advisory unit-selection evidence off the gate
- perf(ci): spend fewer concurrency slots per pull request
- chore(ci): stop auto-filing community PRs onto the project board
- ci(e2e): run the SSH browser route e2e when its source changes
- fix(ci): keep a squash-merged RPC recording pin reachable through its pull request
- test(windows): stop the NSIS capability probe failing on a slow PowerShell cold start
- test(e2e): stabilize terminal shortcut Kitty and Ctrl+C tests
- test(usage): add long-context token fields to the Codex fixture
- test(e2e): fix failures and improve stability
- fix(bench): load benchmark modules under test through jiti
- test(e2e): keep the Kitty-arming app alive in the Option-composed input tests
- refactor(agent-resume): give each resume-note reader its own named check
- test(cross-version): a released client's capabilities come from its own release
- test(mobile): repin the RPC recording corpus to main after #22951
- test(native-chat): await the async history and journal snapshot in three tests
- test(mobile): repin the RPC recording corpus to main after #23080
- test(e2e): take the sidebar measured-row baseline with reduced motion
- test(claude): fix queued-send cancellation CI expectations
- fix(ci): repair terminal link handling and E2E recovery fixtures
- test: measure pointer gestures on the isolated visible display
- test: retire a dormant worker through host-owned status
- test(e2e): give wheel probes a running TUI fixture
- test: finish sidebar lazy imports before teardown
- test(browser): keep shortcut scope checks valid in narrow panes
- test(terminal): wait for decoy panes before host parking
- test(browser): create probe body before starting frame requests
- test: wait for remote terminal grid convergence after reveal
- test(mobile): repin the RPC recording corpus to main after #22762
- perf(test): remove obsolete structural snapshots
- test(native-chat): main's Codex child tests expect a turn to end on its own turn/completed
- test(status-bar): cover re-probing a roomier density level
- test: remove junk tests that assert source text instead of behavior
- test: remove assertion-free probes, copied inventories and export-shape checks
- @blaksmatic made their first contribution in
- @leilei3167 made their first contribution in
- @Alex-wangyang made their first contribution in
- @guanbear made their first contribution in
1.4.217
Thank you so much for using Orca and for your continued support! ❤️
This patch is built from the September 27 daily build plus fixes picked from main. Pull requests that landed on main after that are not in this build.
Codex: Codex workers start again on current Codex (0.158). Orca had been waiting for a welcome-screen label that Codex 0.158 removed, so every Codex worker timed out; Orca now recognizes Codex's empty input box instead. Starting a Codex worker with a model or reasoning effort no longer hangs either.
Codex tabs run on their own: On Codex 0.157 and newer, every Codex tab in Orca shared one background server started by the first tab, so status and results were credited to the wrong tab and closing the first tab dropped all the others. Each Codex tab in an Orca terminal now runs its own server, so closing one no longer drops the others. New terminals opened after updating get this; terminals already open keep the old behavior until reopened. To keep the shared server, add export ORCA_CODEX_ISOLATE=0 to your shell startup file. The trade-off of the default: Codex "Run in background", codex agents, and opening a session from the Codex desktop app or an IDE won't see sessions started in Orca, and many open tabs use more memory.
Status bar & workspace UI: The status bar fits small screens: extra agents fold into a "+N" badge before status labels shrink to icons. Compact agent rows show unread emphasis, and activity threads from floating terminal agents open the right pane.
Remote & SSH: SSH hosts that ask for a verification code or other multi-factor prompt are supported, remote file access follows repository ownership, and interrupted remote installs recover without deleting files still in use.
Editor & browser: Solidity, Typst, and Twig files are highlighted, Markdown source survives rich-text edits, and browser tools fold into a menu on narrow screens.
Reliability: Orchestration workers whose terminal can no longer be found are stopped properly instead of piling up, and many background tasks clean up after themselves when a window reloads or a request is cancelled.
Codex & orchestration
*Codex workers start again on Codex 0.158, each Codex tab in an Orca terminal runs on its own, and stopping a worker reliably ends its process.*
- fix(terminal): run Codex in Orca terminals without the shared background server
- fix(daemon): roll Codex no-daemon shell launch into a fresh v37 daemon
- fix(runtime): settle a quiet Codex composer as ready on every version
- fix(runtime): read Codex readiness from the live screen
- fix: await queued Codex trust preflight completion
- fix(orchestration): reland process-incarnation reap for stale worker terminal handles
- fix(orchestration): deliver dispatch mail and replies to the current lead
Other agents & native chat
*OpenCode, Hermes, Kimi, Grok, and Claude integrations handle edge cases more safely, and long questions in native chat can be expanded.*
- fix: dispose OpenCode 2 hooks after prompt setup and cleanup failures
- Respect disabled OpenCode variants and refresh WSL settings safely
- Preserve Hermes YAML configuration during hook installation
- fix(kimi): don't crash if config.toml is deleted mid-write
- fix(grok): show zero usage for an explicit zero quota
- fix(native-chat): let the "Asked" row unfold a long question
- fix(claude): release permission prompt abort listeners
- perf(native-chat): release obsolete transcript viewers after reloads
Status bar, sidebar & activity
*The status bar fits small screens, compact agent rows show unread state, and activity threads open floating terminal agents.*
- fix(status-bar): fold agents into +N before status labels go icon-only
- fix(sidebar): show unread emphasis in compact agent rows
- fix(sidebar): preserve list focus when selecting workspaces
- feat(activity): reveal threads in floating terminal workspace
Terminal
*Git Bash is detected by its install layout, Japanese file links stay intact, and Windows terminals are more robust.*
- fix(terminal): recognize a Git Bash launcher by its install layout
- fix(terminal): retain Japanese middle dots and tildes in file links
- fix(windows): preserve relocated terminals and native process scans
- fix(windows): synchronize native terminal table lifetime
- perf: cap shared-path scans and synchronize Windows PTY access
- perf: preserve terminal previews across unrelated settings updates
Editor, search & files
*Solidity, Typst, and Twig get syntax highlighting, Markdown source survives rich edits, and grouped search filters keep their commas.*
- fix(editor): highlight Solidity files
- feat(editor): highlight Typst files and diffs
- fix(editor): highlight Twig templates in files and diffs
- fix(editor): recognize all bundled Monaco language associations
- fix(editor): preserve Markdown source across rich edits
- fix(search): keep commas inside grouped file filters
- fix: remove PDF export temp files after setup failures
- perf: avoid rescanning partial notebook output frames
Browser
*Browser tools fold into a menu on narrow screens, and addresses with explicit ports open correctly.*
- Implement responsive toolbar overflow with tool folding
- fix(browser): open domains with explicit ports
Remote, SSH & WSL
*SSH supports multi-factor (keyboard-interactive) sign-in, remote file access respects repository ownership, and remote installs recover cleanly.*
- feat(ssh): support keyboard-interactive authentication (MFA)
- Keep SSH terminals parked after their own workspace updates
- fix: exclude canonical SSH roots from local file access
- fix: honor canonical SSH ownership in worktree listings
- fix: bind filesystem root grants to their repository owner
- fix(ssh): preserve interrupted installation outcomes through retries
- fix(ssh): recover abandoned caches without deleting live dependencies
- fix(ssh): name the missing unzip when Bun archive extraction cannot start
- Avoid store updates for unchanged SSH repository catalogs
- fix(worktrees): clear orphan cleanup on BusyBox WSL distros
- fix(projects): enrich git remote identity for runtime-addressed repo rows
- fix(persistence): report a discarded cross-host repo update instead of failing silently
Source control & code review
*Pull request and review lookups keep the newest result, and Gitea lookups refresh correctly.*
- fix: refresh strict Gitea lookups and synchronize Windows PTY access
- perf(github): coalesce stronger refreshes after pending requests
- fix: preserve newer pull request lookup ownership
- fix: preserve newer hosted review lookup ownership
- fix: observe linked-issue failures during review generation
- fix: retire stale review lookups after cache invalidation
Reliability & performance
*Orca releases abandoned work, listeners, and streams after reloads or cancellations, and skips redundant scans and updates.*
- perf(emulator): stop obsolete video streams after renderer reloads
- perf(mobile): coalesce stalled connection log persistence
- Cancel abandoned relay search work
- perf(push): keep retention sweeps from overlapping without slowing the drain
- perf(relay): release rejected first-frame connections [trade-off]
- perf(relay): release canceled AI Vault startup requests
- perf(history): coalesce tombstone directory rescans
- Scope relay capacity checks to the requested cell
- perf: avoid repeatedly encoding retained VM recipe output
- fix: close abandoned PDF.js development asset streams
- fix: release file watches when their renderer document ends
- fix: close abandoned static web asset readers
- fix: stop stale runtime event work after renderer cleanup
- fix: release dictation session listeners when speech workers exit
- perf: skip unused Linux accessibility child enumeration
- perf: skip store notifications for unchanged project and folder catalogs
- perf: skip macOS DNS probes for unrelated errors
- perf: share pending plugin translation startup requests
- perf: bound wildcard segment work in nested repository scans
- fix(relay): release capacity wait abort listeners
- fix(daemon): release terminal attach cancellation listeners
Internationalization (i18n)
*Diff note wording is clearer.*
- fix(i18n): clarify the recipient of diff notes
Tests, CI & maintenance
*CI runs faster and more in parallel, formatting and packaging are tidied up, and a short-lived mouse Back/Forward shortcut change was reverted.*
- Support mouse Back/Forward buttons in shortcuts
- Revert "Support mouse Back/Forward buttons in shortcuts"
- fix(design-system): replace hand-rolled diff draft-card shadow with shadow-xs
- fix(packaging): exclude root notes from app files
- fix(homebrew): remove deprecated URL verification parameter
- style: settle oxfmt 0.70 drift and stop formatting vendored licences
- test: target writer timeouts and diagnose Bun startup stalls
- fix(ci): preserve focused Playwright file selection
- ci: shard SSH tests, remove duplicate runs, and warm Windows caches
- ci: reuse test fixtures, native builds, and package images
- ci: scope orcad smoke and parallelize Linux packages
- ci: reuse mobile web route analysis and skip unrelated mobile tests
- Reuse mobile recording compilation and refresh desktop CI timings
- Run independent CI checks with native parallel Actions steps
- ci: overlap package and security preparation and share localization parsing
- ci: overlap shell, localization, and mobile route preparation
- ci: use ARM unit runners, overlap web builds, and reuse verifier fixtures
- ci: build independent Electron targets together for E2E
- ci: compile the E2E CLI once for all consumers
- @anajuliabit made their first contribution in
- @Chihen-Tai made their first contribution in
Show 14 older releases
1.4.216
Thank you so much for using Orca and for your continued support! ❤️
This patch is v1.4.215 plus one fix. Pull requests that landed on main after v1.4.215 are not in this build.
Status bar: On smaller screens and narrow windows, the status bar now stays on a single line instead of wrapping or getting cut off.
*When the window is narrow, the status bar condenses its items so everything fits on one line.*
- Fix status bar on smaller screen
1.4.215
Thank you so much for using Orca and for your continued support! ❤️
This patch is v1.4.214 plus one fix. Pull requests that landed on main after v1.4.214 are not in this build.
Profile: When the JSON and SQLite copies of your profile disagree, Orca asks whether to keep SQLite or JSON and applies that choice for you.
*Both copies are readable, but they disagree. Orca shows each copy's last-saved time and lets you pick one, instead of handing you a command to run.*
- feat: let users choose JSON or SQLite when profile copies diverge
1.4.214
Thank you so much for using Orca and for your continued support! ❤️
Notebooks: Interactive .ipynb notebooks now render natively with click-to-edit cells, backed by a persistent Jupyter kernel, automatic virtual environment setup when pip is locked out, and trust boundaries before workspace interpreter execution.
Agents & chat: Native chat displays real-time context window usage in the composer, adds a hover copy button to sent messages, auto-loads older history on scroll, and lets Codex 0.157+ start cleanly in Orca-managed homes without path-length failures (SUN_LEN). Subagent and child work status is tracked across Codex, Claude, Pi, and Grok, while ZCode joins as a first-class supported harness.
Terminal, editor & workspaces: Single terminal panes gain an explicit close button, remounted SSH tabs keep spawning their shell, and managed WSL terminals automatically provide the Orca CLI. Workspace folder toggles are instant, AI notes UI is revamped, and large file identities on Windows stay distinct.
Persistence & performance: Profile storage migrates to SQLite with background writes and bundled Bun for headless Orca. Bundled ripgrep powers local, WSL, and SSH searches, while concurrent transcript reads, readiness probes, and terminal marker scans receive major latency cuts.
Remote, relay & browser: Regional rehome operators accept newer production cells, relay drain times prevent dropped connections, and browser pixel captures only wait when required.
Mobile: The mobile OTA experience gains native safe area ownership, smoother streamed browser pane handling, Android live input echo fixes, and persistent machine naming after pairing.
Notebooks
*Interactive notebooks render with editable cells, run in a persistent Jupyter kernel, set up virtual environments automatically, and respect workspace trust.*
- feat(ipynb): render notebooks like a notebook, with seamless click-to-edit cells
- feat(ipynb): run notebook cells in a persistent Jupyter kernel
- feat(ipynb): create a .venv when pip is locked out, and show ipykernel setup progress
- fix(ipynb): run no workspace interpreter until the notebook is trusted
Agents, chat & launches
*Context window usage appears directly in the composer, Codex 0.157+ boots cleanly in Orca-managed homes, child work and subagents stay transparent, and ZCode joins as a supported harness.*
- fix(ai-vault-search): detach buffered transcript rows
- fix(native-chat): underline only file links a click can act on
- fix(opencode2): block the pane on every session-owned form
- feat(native-chat): one shell-environment setting for every structured chat
- fix(ai-vault-search): own buffered transcript rows before they pin the parent
- feat(agent-launch): let a caller reserve the chat session, and start terminal launches with the session picks
- fix(native-chat): dock the task strip on the goal tab
- fix(opencode-usage): merge a migrated session's two rows per column
- feat(agent-status): publish the main agent's own state beside the combined row state
- fix(opencode): give the opencode2 status plugin a distinct id
- fix(agents): stop claiming an unconfirmed OpenCode handoff succeeded
- fix(claude): resume a native chat from its real latest message
- fix(opencode2): resolve subagent session lineage so child work stops taking over the pane
- fix(rate-limits): read OpenCode Go usage with the Go API key
- fix(native-chat): show every user message on the message rail, not just loaded ones
- fix(native-chat): keep chats that failed to resume in the status bar and say what to do
- feat(agent-status): combine Codex child work through the shared main-agent status fold
- fix(orchestration): type a request ahead of pasted dispatch briefs so Claude workers follow them
- fix(opencode): retire a subagent's blocker when the root turn ends
- feat(native-chat): show context window usage in the composer
- fix(agent-status): count only agent work in stats, and read a Grok background subagent as working
- fix(native-chat): load older messages automatically before the reader reaches the top
- fix(native-chat): record which Codex agent produced each journal row
- feat(native-chat): add a hover copy button to sent messages
- feat(agent-session): let the host own a chat's tab id and let a create reserve it
- fix(claude): open structured chat without a startup deadline, and make Retry start fresh
- fix(skills): recognize symlinked provider skill roots
- fix(native-chat): date a session by its own lifecycle, not its subagents' work
- fix(agent-launch): a cwd at the workspace root no longer forces a terminal
- fix(pi): stop pi-subagents workflows from pinning a pane on working
- fix(agent-history): list older Pi sessions in Workspace and Project views
- fix(agent-status): end a Claude helper's turn when an API error stops it
- fix(pi): isolate status ownership in new terminals
- fix(agent-status): a cancel never hides live work
- fix(codex): a Codex native chat that never sent a message reopens after restart
- feat(agent-status): child work records say what the child is doing, how it ended, and when
- fix(native-chat): show the Codex and Claude model picker the moment a chat opens
- fix(native-chat): offer a resume for every chat that was working, and say what it was doing
- fix(terminal): make Codex restart replace the pane's process instead of reattaching it
- fix(native-chat): keep the background-task strip above a pending prompt card
- feat(agents): add first-class ZCode harness
- feat(zcode): explain a ZCode build that has no terminal UI
- refactor(native-chat): remove the unused terminal handoff
- fix(claude): let a Claude chat start again after its root exited with unverifiable descendants
- fix(native-chat): keep an idle chat alive while its subagents or background commands run
- feat(native-chat): Claude sessions write their subagents into the host status store
- feat(feature-tips): one-time tip for agent session search
- fix(codex): Codex 0.157+ starts in Orca-managed homes instead of failing with SUN_LEN
- fix(claude): prove a stopped chat's child processes gone when they exit with it
- fix(native-chat): send typed question answers as structured answers, not an option id
- refactor(agent-session): keep which conversation each chat tab shows in one host table
- fix(claude): end a Claude chat on its root's exit even when a descendant survived
- fix(native-chat): every journal append reaches the chats that are open
- fix(native-chat): report a chat's owner from its record, not its running agent
- fix(native-chat): name a chat write by its target, not the owner generation
- feat(rate-limits): add Cursor usage tracking
- fix(native-chat): keep terminal pane chat ownership stable
- fix(native-chat): preserve current pane ownership through toggles and restore
- Accept repeated leading BOMs in agent hooks
- fix(agents): honor environment prefixes in generation commands
- fix(native-chat): every lease latch has a way to die
- fix(codex): retain runtime MCP entries without losing revocation
- fix(native-chat): keep chat visible when detaching its pane
- fix(vault): read OpenCode SQLite inside WSL and SSH hosts
- Better add ai notes ui
Terminal
*Single panes gain an explicit close button, remounted SSH tabs keep spawning their shell, Linux IMEs handle candidate preedits, and managed WSL terminals automatically provide the Orca CLI.*
- refactor(tabs): delete the terminal tab's dead adopted-session field
- fix(terminal): let Linux IMEs keep the candidate key for a preedit they own
- fix(daemon): rebase durable checkpoints on the live terminal
- fix(terminal): one process-boundary ground for every known or proven boundary
- fix(terminal): ground a program that dies with input modes armed on the normal screen
- fix(terminal): prove an idle Git Bash prompt through its bin launcher
- fix(terminal): serialize only the visible width after a column shrink
- fix(terminal): stop dropping visible alt-screen output tagged as hidden-resize repaint
- Show close button for single terminal panes
- Provide the Orca CLI automatically in managed WSL terminals
- fix(terminal): damp park-verdict churn that is too slow to burst
- Wait for foreground job readiness before testing Ctrl-Z
- refactor(pty): make renderer delivery optional for headless runtimes
Editor, workspaces & startup
*Folder toggles respond instantly, startup window activation and CJK Windows ACLs are stabilized, worktree catalogs are versioned, and machine identities stay distinct across Windows and remote runtimes.*
- fix: explain Xcode-blocked Git once in the sidebar and rescan on return
- feat: name runtime machines
- revert: #18790 (orchestration incarnation reap fallback and bundled Freebuff agent)
- fix(file-explorer): toggle folder instantly on name click
- fix(worktrees): version every catalog publication so a stale listing cannot undo a create
- fix(floating-workspace): keep agent launches from moving the main window's tab
- refactor(orchestration): give structured sessions an orchestration actor column
- fix(feedback): send text-only report when screenshots exceed the upload limit
- fix(desktop): release a native chat when you leave it, so its idle clock can start
- fix(runtime-environments): don't crash when a server removed via the CLI still responds
- refactor(orchestration): resolve every caller and target to one orchestration party, keyed by the Orca session id
- fix(worktrees): keep failed orphan cleanup retryable
- fix: stop process-tree loops
- fix(editor): highlight scoped dotenv filenames on desktop and mobile
- fix(editor): use the bundled ABAP grammar
- fix(cli): preserve the WSL distro when adding managed accounts
- fix(jira): bypass collection caches on explicit refresh
- fix(pdf): keep the search counter in sync with selected matches
- fix(projects): refresh stale automatic GitHub icons during enrichment
- Preserve Kimi config permissions
- fix(toast): keep folder errors above standard modal backdrops
- Keep large Windows file identities distinct
- fix(tasks): read a malformed saved Linear team selection as sticky-all instead of crashing the page
- fix(types): describe command environments independently of Expo globals
- Prioritize workspace opening over replacement checkout preparation
- fix(sidebar): "Hide default branch" hides a folder project's root workspace
- fix(startup): hold desktop activations until the startup window exists
- fix(startup): read the install-dir package ACL as SDDL so a repaired folder reads clean on Chinese/Japanese/Korean Windows
- fix(windows): reuse shared PowerShell literal quoting at every hand-rolled escaper
- Leave Open Settings unbound by default
- fix(markdown): return focus to editor from find bar
- fix: route hook files through their stored repository owner
- fix: stop retired folder watchers from starting Git upgrades
- fix: preserve conflicting folders when local import creation fails
- fix: reject expired updater feed selections
- fix: stop abandoned local attachment checks after composer unmount
Persistence & performance
*Profile storage shifts to SQLite with background writes and Bun bundling, concurrent reads and readiness probes are deduplicated, and lingering file watchers and caches are cleanly released.*
- Persist profile state in SQLite with background writes
- perf(ci): reduce queue pressure without paid runners
- Bundle Bun for headless Orca and profile persistence
- fix(persistence): reclaim Windows profile locks after PID reuse
- perf(chat): share matching concurrent transcript reads
- perf(editor): skip unchanged draft publications
- fix(renderer): release retired store snapshots from selector caches
- Cancel abandoned renderer-owned reads
- perf(terminal): avoid intermediate history frame buffers
- perf(terminal): scan synchronized markers in linear work
- perf(editor): skip unchanged cursor-line store writes
- refactor(persistence): retire ordinary JSON profile writes
- Release failed filesystem watcher setup records
- perf(renderer): release unrelated state during cache saves
- perf: avoid copying unchanged artifact share records
- perf: reuse Muse usage filters within each snapshot
- perf: reuse target membership within folder lineage filtering
- fix: release chunked download resources with their renderer
- fix: close file watcher probes after failed writes
- perf: retire removed worktree head failure markers
- Release cursor positions with editor tab ownership
- perf(persistence): serialize selective SQLite saves once
- Release SQLite transaction queues when startup fails
- perf: reuse fresh selected folder checks on unrelated expiry
Remote, SSH & relay
*Regional rehome operators accept newer production cells, relay drain times prevent dropped connections, and SSH pending layouts survive reconnects.*
- fix(relay): accept production cells past c29 in the regional rehome operator
- fix(relay): drain a same-cap cell over 5 minutes, not 2
- feat(search): bundle ripgrep for local, WSL, and SSH search
- fix(web): keep Remote Web loading over plain HTTP without crypto.randomUUID
- Preserve pending SSH terminal layout edits
- fix(terminal): a remounted new SSH tab keeps the shell its old pane was still spawning
- perf(relay): share concurrent readiness probes
- perf(relay): skip abandoned queued control activation
- perf: avoid duplicate base64 decode on SSH uploads
- fix: stop retired relay load connections from rescheduling refreshes
Browser
*Pixel captures only wait when necessary, empty Chromium cookies import cleanly, and settings search cataloging avoids redundant work.*
- fix(browser): only pixel-capturing commands wait for the page to be drawn
- fix(browser): let pixel capture hold its own page drawn, without the desktop window
- refactor(browser): remove the unused screenshot-prep visibility helper
- fix(browser): import empty-value Chromium cookies instead of their domain hash
- perf: build browser settings search catalog once per render
- perf: stream the packaged browser installer checksum in CI
Mobile (OTA page)
*The over-the-air page gains native safe areas, smoother streamed browser panes, Android live input fixes, and persistent machine naming after pairing.*
- fix(mobile): keep the shell's window insets out of the page WebView (OTA phase C follow-up)
- fix(mobile): route the bottom drawer's keyboard through the platform seam (OTA phase C follow-up)
- fix(mobile-web): page inputs lose the browser focus ring and hairlines draw one device pixel (OTA phase C follow-up)
- feat(mobile): the page owns its safe area, like a native screen (OTA phase C follow-up)
- test(mobile): repin the recording corpus to main's tip after #22570
- fix(mobile): keep the streamed browser pane flipping on slow phones, and stop double taps
- test(mobile): repin the RPC recording corpus and session closure after #22392
- fix(mobile): restart the streamed browser pane on every return to the app
- docs: update translated Android APK links to 0.0.50
- feat(mobile): name the machine after pairing
- fix(mobile): the page's terminal shows its last rows above the command dock (OTA phase C follow-up)
- fix(mobile): keep terminal input working when reopening worktrees
- fix(mobile): the page's Live input on Android echoes each letter as typed (OTA phase C follow-up)
- fix(mobile): a terminal opens once at the phone's size, on the page and natively (OTA phase C follow-up)
- fix(mobile): update fflate for security advisory
- fix(mobile): give each host field one writer so relay routing can't revert edits
- refactor(mobile): the live input's composing range comes from a platform seam pair
- test(mobile): repin RPC goldens to main after #22956's squash
- fix(mobile): label direct paths with the shared Tailscale check
Internationalization (i18n)
*Translations expand across Spanish, French, Japanese, Korean, and Chinese with corrected turn statuses and localized artifact search.*
- fix(i18n): add missing translations for artifacts and browsing
- fix(i18n): align ko artifacts search keyword with value override
- docs: restore translated README assets reverted by stale APK bump
- fix(docs): update translated readme asset and WeChat links
- chore(i18n): translate 85 new keys to es/fr/ja/ko/zh
- chore(i18n): translate 113 new keys to es/fr/ja/ko/zh
- fix(i18n): correct duration and turn-status copy across locales
Tests, CI & documentation
*Redundant CI workflows and runner queues are trimmed, test isolation improves across worktrees and runtimes, and documentation is updated.*
- test(file-search): pin request-key listings against the real runtime shape
- test(runtime): stop worker-recovery retries from scanning inside later tests
- docs: remove duplicate Muse badge from README
- test(runtime): isolate per-repo worktree scan expiry from the shared timer queue
- test(opencode): cover the opencode2 host-env branch and stop inheriting ORCA_OPENCODE_AGENT
- docs(tui-agent-config): correct the OpenCode readiness-budget rationale
- test(terminal): pin Option-composed currency on a punctuation key
- test: remove redundant mobile and GitLab checks
- fix(release): run the tag's own skill freshness inventory tests in the release gate
- fix(lint): include .mts and .cts in line-limit checks
- Simplify .map().flat() to .flatMap() in onboarding tests
- chore(deps): refresh maintained dependencies
- test(terminal): re-pin the pane hook-order parity past #23049
- ci: verify mobile disposal and balance unit-test costs
- Reduce redundant CI runs, pnpm uploads, and fixture startups
- Improve pull request template for issue linking
- Optimize CI follow-up workflows
- Simplify filter-flatMap patterns to single flatMap operations
- @FumingPower3925 made their first contribution in
- @aaryanporwal made their first contribution in
1.4.212
- fix(codex): Codex 0.157+ starts in Orca-managed homes instead of failing with SUN_LEN
1.4.211
Thank you so much for using Orca and for your continued support! ❤️
Agents & chat: Native chat keeps its live tool state intact, shows Codex goals above the composer, and treats active child work as working. Muse Code is now a first-class supervised-worker harness with local usage reporting.
Workspaces, editor & browser: Large local workspaces can find files by name, preview tabs can be turned off, stale workspace listings cannot retire newly created workspaces, and browser shortcuts stay with the split or floating panel that received them.
Terminal, remote & reliability: Background-created terminals answer startup queries, explicit closes get enough time for a daemon verdict, and macOS adoption and folder-denial events carry code-identity telemetry. Asia relay capacity grows safely with cell-specific gates, lock-convoy alerts, and safer rehoming.
Mobile: The OTA page gains device Back support, safer draft handling, clearer re-pair and update recovery, and capability-negotiated, gzipped bundle ranges.
Editor, workspaces & browser
*Workspace lists stay correct, large folders are easier to search, editor behavior is configurable, and browser commands stay in their originating view.*
- fix(cli): describe Linear write support
- fix(sidebar): hang the subagent chevron in the card gutter
- fix(usage): price GPT-6 Sol/Luna, Opus 5.5 and Fable 5.1, and correct GPT-5.6 rates
- fix(usage): price Codex long context per request, not per aggregate
- fix(worktrees): a listing that predates a create can no longer retire the new workspace
- fix(explorer): find files by name in large local workspaces
- feat(editor): add a setting to turn off preview tabs
- fix(editor): map Salesforce Apex extensions to the apex language id
- feat(sidebar): copy workspace name from context menu
Orchestration & CLI
*Runtime connection denials are reported accurately, and supervised workers accept Muse model and effort settings.*
- fix(cli): report a denied runtime connection instead of a dead Orca
- feat(orchestration): accept Muse model and effort for supervised workers
Agents, chat & launches
*Live chat state stays legible, structured sessions reflect their child work, and Muse Code joins the supported agent harnesses.*
- fix(native-chat): hide delete for structured history
- fix(agent-status): a structured session with live child work reads as working
- refactor(ai-vault): read Codex's stated subagent parentage instead of a boolean
- fix(native-chat): journal rows name the agent that produced them
- feat(native-chat): notify on every settled structured turn
- feat(agents): add first-class Muse Code harness
- fix(opencode-usage): read OpenCode 2 session_v2 token totals
- fix(opencode2): only treat the question tool's form as a pane blocker
- fix(native-chat): keep a structured agent's tool line between tool calls
- feat(usage): add Muse Code local usage provider
- feat(agent-launch): let a caller reserve the pane its terminal launch creates
- feat(native-chat): show a Codex chat's goal above the composer, and set it from goal mode
- fix(native-chat): keep one live tool-run header from a call's start to the turn's end
Terminal
*Background-created terminals answer startup questions, explicit closes receive a fair daemon verdict, and macOS diagnostics identify the adopted code.*
- feat(telemetry): report the macOS daemon's code identity on adoption and folder-denial events
- fix(runtime): budget explicit terminal close for the daemon's immediate-kill verdict
- fix(runtime): answer startup terminal queries for background-created terminals
Remote, SSH & relay
*Asia relay capacity expands with measured gates, lock-aware rehoming, and rollout visibility.*
- feat(relay): declare Asia cell c30 at the c27 shape
- fix(cloud): compare the Asia topology budget gate against the measured 500-connection default
- fix(cloud): gate the Asia canary on its own cell's SQL failures, not the directors'
- chore(relay): treat Asia cell c30 as a general cell now that it is promoted
- fix(relay): stop rehoming hosts off Asia cells until the lock fix lands
- feat(relay): alert on relay cell table lock convoys
- fix(relay): lock only the target cell row, last and NOWAIT, in the rehome commit
Browser
*Browser commands stay with the split or floating panel that received them.*
- fix(browser): scope back/forward/reload/zoom/grab shortcuts to the originating split
- fix(browser): scope floating browser shortcuts to their own panel
Performance
*Mobile bundle delivery keeps more work in flight.*
- perf(mobile): keep four bundle chunk reads in flight across the whole manifest (OTA phase C follow-up)
Mobile (OTA page)
*The over-the-air page gains keyboard and navigation behavior, recovery guidance, safer cache cleanup, and efficient bundle delivery. Listed here for visibility only; the mobile app ships on its own release schedule.*
- fix(push): bound the delivery claim, delete finished batches, and keep a connection for requests
- fix(mobile): an accessory Enter ends the field's editing session, and the page's Enter survives a composition
- feat(mobile): the device Back key reaches the page
- feat(mobile): a failed hybrid-shell update is recorded on the device and shown in Troubleshoot
- fix(mobile): the page offers no control whose only effect is a re-dial it cannot make
- fix(mobile): removing a host deletes its page cache through the one process store
- fix(mobile): Back with an unsaved markdown draft prompts on the page too
- fix(mobile): the page's auth-failed banner offers Re-pair again
- feat(mobile-web-bundle): gzipped 384 KiB ranges over a capability-negotiated mobileWeb.bundle.range (OTA phase C follow-up)
Tests, CI & documentation
*Release checks stay targeted and the mobile recording corpus follows the relevant changes.*
- test(opencode): pin the installed OpenCode plugin to a v2-loadable default export
- test(mobile): repin the recording corpus to main's tip after #22376
- docs(wechat): point community QR code at group 10
- test(mobile): repin the recording corpus to main's tip after #22381
- test(mobile): move the session closure pin past the structured tool-line module
- Optimize cloud-verify workflow to scan HEAD instead of all history
- @AtejiMan made their first contribution in
- @bdJohnson72 made their first contribution in
1.4.210
Thank you so much for using Orca and for your continued support! ❤️
Agents & chat: Finished chats collapse to their answers, failed turns end instead of hanging, unread lights up when a structured chat finishes, and restart recovery stays in the status bar. Antigravity can run as a supervised worker, and terminal launches report back the pane they created.
Terminal, editor & workspaces: Terminal theme choice overrides Ghostty colors, the Linux daemon survives service restarts and reaps cleanly, and macOS tells you how to fix folder access. Large artifact and conflict lists are virtualized, stale search listings are fixed, and Monaco failures stay contained.
Remote & reliability: WSL guests keep the OpenCode agent variant, recreated SSH targets keep their generation floor, and same-cap relay waves clean up failed templates without touching the backend service.
Agents, chat & launches
*Structured chats settle cleanly, launches carry their context, and workspace lists stay responsive.*
- fix(sidebar): stop a workspace with a structured chat reading as asleep
- Fix stale listings when search query changes
- Virtualize artifacts list with reusable component
- Clear website annotations after successful delivery
- fix(native-chat): stop a subagent's output speaking for the agent that spawned it
- revert: defer subagent attribution until linkage refactor
- fix(native-chat): collapse a finished turn to its answer
- fix(native-chat): end a structured turn when the agent reports it failed
- feat(native-chat): light the unread indicators when a structured chat finishes
- fix(native-chat): navigate to open history sessions
- feat(native-chat): keep restart recovery available in status bar
- feat(agent-launch): carry the launch inputs the host cannot derive
- refactor(agent-launch): assemble host startup-plan inputs in one resolver
- feat(agent-launch): report the pane a terminal launch created
- refactor(floating-workspace): launch the default agent through the shared launcher
- feat: support Antigravity as supervised worker
Usage reporting
*Claude usage stays live and cost totals cover the newest models.*
- fix(rate-limits): keep polling Claude usage for Fable accounts during live sessions
- fix(usage): price GPT-6 Astra, and declare when the Codex cost total omits a model
Terminal
*Theme choice wins, background services survive restarts, and latency numbers stay honest.*
- fix(settings): make terminal theme selection override Ghostty colors
- fix(daemon): escape the terminal daemon into its own systemd scope so a service restart no longer kills every live PTY
- fix(macos): tell the user when Orca's terminal service can't read their folder, and walk them through the fix
- fix(daemon): reap terminal descendants during shutdown
- fix(linux): release orphaned processes when their owner exits
- fix(perf): measure terminal latency with presented CI frames
- fix(perf): calibrate report budgets without masking latency stalls
Editor, workspaces & source control
*Updates download reliably, large artifact and conflict lists stay fast, and editor failures stay contained.*
- fix(updater): send the gh token and cache the release picker's build list
- Lower filter chip contrast to indicate read-only status
- Refactor editor header file rename to breadcrumb morph UI
- fix(renderer): contain Monaco initialization failures
- Virtualize large conflict file trees
- refactor: use generic VirtualizedList in conflict review
- fix(browser): notify state on offscreen page navigation commit
Providers & assistants
*OpenCode launches keep their variant and plugins across hosts.*
- fix(opencode): support v2 plugins under the plain executable name
- fix(wsl): preserve OpenCode agent variant in guest
Remote, SSH & relay
*Recreated targets keep their floor and failed rollouts clean up after themselves.*
- fix(ssh): keep the generation floor when a target is removed and recreated
- fix(relay): keep the backend service out of the same-cap wave; the capacity role cannot update it
- fix(relay): let a same-cap cell plan delete the deposed template a failed wave left behind
Mobile (OTA page)
*The over-the-air page gains session routing, rich editing, dictation, capability checks, and keyboard and paint polish. Listed here for visibility only; the mobile app ships on its own release schedule.*
- feat(mobile): register the session page route (OTA phase C, C7.7)
- refactor(mobile): the bridge host mount reads one args ref, and the handshake fact lives in the session (OTA phase C, audit item 3)
- fix(mobile): hold every hybrid shell switch on a neutral state while the flag is unresolved (OTA phase C, ruling 33.7)
- feat(mobile): the microphone owns the wake lock, and the stop reply carries the tail (OTA phase C, ruling 36)
- fix(mobile): declare externalLink on the two page routes that reach the protocol wall (OTA phase C follow-up)
- fix(mobile): two more table parsers hold a pipe in a cell (OTA phase C follow-up)
- fix(mobile): catch the diff-comments loader rejection at the effect (OTA phase C follow-up)
- feat(mobile): the rich Markdown editor mounts on the page (OTA phase C, C7.10 C2)
- fix(mobile): the Android audio engine forgets a stop issued while paused
- fix(mobile): serialize a list the engine nested inside a paragraph (rich editor follow-up)
- fix(mobile): a same-build cache hit persists the fresh manifest (OTA phase D1)
- fix(mobile): a granted microphone tap launches no permission activity, and an aborted start says so
- feat(mobile): the shell tells a page which optional capabilities it has (OTA phase D, C8.1)
- refactor(mobile): the host-scoping rewrite moves out of the terminal's HTML
- fix(mobile): contain the older-history page's rejection at its own boundary, and re-record its family
- fix(mobile): the catch-all carries a deep link's query, and reads a trailing rest-segment pattern (OTA phase D, C8 carry-forwards)
- fix(mobile): the page runs one Zod (OTA phase C, C6.5 follow-up)
- fix(mobile): write live-input text through a seam the page can honour
- feat(mobile): one build-time switch picks native or OTA, default native (OTA phase E1)
- fix(mobile): the shell swaps the page's client identity so its terminal reaches init
- build(mobile): key Metro's transform cache on the shell build kind
- fix(mobile): the page stops writing, importing and requesting what it cannot use
- fix(mobile): a refused dictation start says why
- fix(mobile): a refused update serves the cached generation while the host is up
- fix(mobile): the page's live input stays above the soft keyboard
- fix(mobile): keep a painted frame under the page until its first paint
- fix(mobile): the page never removes a host, and stops bundling push
- @beattlekid made their first contribution in
1.4.209
Thank you so much for using Orca and for your continued support! ❤️
Agents & chat: Session search now shows the newest activity first, and launch prompts go straight to terminal agents. OpenCode, Claude, Pi, Antigravity and Devin launches are more reliable. Usage totals now price GPT-6, Opus 5.5 and Fable 5.1, and Codex usage no longer goes stale after a reset.
Terminal, editor & workspaces: Drag selection holds steady during redraws, middle-click paste works in mouse-tracking TUIs, and remote panes keep their scrollback across restarts. PDF zoom sticks across tabs and restarts, the new-worktree dialog keeps its buttons in view while you scroll, and large artifact and conflict lists stay fast.
Remote & reliability: WSL, SSH and Windows setups recover more cleanly, and relay rehomes and cell rollouts handle failures without taking a cell down.
Agents, chat & search
*Search is easier to trust, agent launches are more direct, and large workspace lists stay responsive.*
- feat(agent-launch): deliver a launch prompt to a terminal agent
- feat(session-search): sort search results by newest, and break relevance ties by recency
- Virtualize artifacts list with reusable component
- Virtualize large conflict file trees
- refactor: use generic VirtualizedList in conflict review
- Fix stale listings when search query changes
- refactor(agent-status): drop two superseded Codex attention workarounds
- fix(native-chat): scope a tool row's hover reveal to that row
- Clear website annotations after successful delivery
Usage reporting
*Codex, OpenCode, and Claude cost totals are more complete and stay fresh.*
- Fix stale Codex usage after reset
- fix: read OpenCode Go usage from the console API
- fix(opencode): include cache read and write usage totals
- fix(usage): price GPT-6 Astra, and declare when the Codex cost total omits a model
- fix(usage): price GPT-6 Sol/Luna, Opus 5.5 and Fable 5.1, and correct GPT-5.6 rates
Terminal
*Input, selection, paste, composed text, and remote scrollback are more consistent.*
- fix(terminal): keep Pi input visible in open synchronized frames
- fix(terminal): preserve Polish and Option-composed text in kitty panes
- fix(terminal): keep drag selection stable during redraws by @nwparker (release-branch fix, see
- fix(terminal): arm native-paste suppression on middle-click in mouse-tracking TUIs
- fix(terminal): let Shift+middle-click paste in mouse-tracking panes
- feat(terminal): configure interactive Unix shell arguments
- fix(terminal): persist a parked remote pane's scrollback across a hard restart
- fix(mobile): make OMP terminal momentum refresh-rate independent
Editor, workspaces & source control
*PDF work, Markdown navigation, worktree dialogs, and source-control hover states are more consistent.*
- fix(editor): persist PDF zoom across tabs and restarts
- fix(editor): open plain details blocks in rich markdown mode
- fix(editor): preserve Markdown preview when following wiki links
- Keep new worktree dialog actions visible while scrolling
- Consolidate source control tooltips to eliminate redundant hover text
- Fix Antigravity source-control model discovery and retired defaults
Providers & assistants
*OpenCode, Claude, Pi, Antigravity, and Devin launches behave better.*
- fix(opencode): preserve global config discovery
- fix(opencode): attribute shared-server sessions to their panes
- fix(opencode): isolate v1/v2 plugins and preserve WSL config
- fix(opencode): support v2 plugins under plain executable name by @nwparker (release-branch fix, see
- fix(opencode2): auto-submit quick command prompts by @nwparker (release-branch fix, see
- fix(claude): stream the provider history window
- fix(claude): prefill continuation context for manual submission
- fix(pi): keep panes working while async subagents run
- fix(orchestration): line-settle delay for antigravity multiline paste
- fix(antigravity): recognize non-Gemini tui-idle prompts
- fix(devin): skip workspace trust for Orca launches
Remote, SSH, WSL & Windows
*Guest materialization, profiles, rebuilds, and connection floors are more resilient.*
- fix(wsl): await Pi and OMP guest relay materialization
- fix(wsl): preserve OpenCode agent variant in guest by @nwparker (release-branch fix, see
- fix(worktree): recognise the Windows profile through WSL's drvfs view
- fix(windows): prune the unpatched conpty prebuild by header, not host arch
- fix(ssh): keep the generation floor when a target is removed and recreated
- fix(remote-runtime): stop an unhydrated host graph from reading as a closed terminal
- fix(rebuild): refuse to compile node-pty source that lacks the MSYS breakaway denial
Relay & reliability
*Rehomes, cells, and same-cap rollouts recover more cleanly.*
- fix(relay): abort rehomes whose host never arrived, without disabling the switch
- fix(relay): let the rehome evidence parser read a line the director grew
- fix(relay): stop a terminated checked-out PostgreSQL client from killing the cell
- fix(relay): re-place hosts off a cell isolated for a roll
- perf(relay): cut the cell LB drain to 60s and widen the same-cap batch to ten cells
- fix(relay): land the cell backend drain and request logging inside the same-cap wave
- fix(relay): bound the same-cap shadow gate in time and apply a resumed backend update
- fix(memory): release stale session registries
- fix(runtime): an outage is not a handle-gap verdict
Mobile (OTA page)
*The over-the-air page gains screencasting, terminal, media, preview, diagram, dictation, and route support. Listed here for visibility only; the mobile app ships on its own release schedule.*
- fix(mobile): measure the keyboard from visualViewport inside the page (OTA phase C, C4.2)
- feat(mobile): carry browser screencast frames over the bridge as base64 (OTA phase C, C6.1)
- feat(mobile): paint browser screencast frames through web siblings (OTA phase C, C6.2)
- feat(mobile): budget the browser pane's frames and put its inputs on the web seam (OTA phase C, C6.3+C6.4)
- feat(mobile): add the media verbs the page's pickers and paste will use (OTA phase C, C7.4)
- feat(mobile): take the session screen's inputs, links, clipboard and routers through the platform seams (OTA phase C, C7.2)
- feat(mobile): budget the terminal snapshot on serialized bytes and hold live output instead of ending the stream (OTA phase C, C7.3)
- feat(mobile): put the page's pickers, paste and editor fallbacks on the media verbs (OTA phase C, C7.6)
- fix(mobile): settle browser dialogs on the stream that reports them, map taps through the page scale, and sweep the frame budget on the real encoder (OTA phase C, C6.7)
- feat(mobile): mount the terminal document in the page over its own modules (OTA phase C, C7.5)
- feat(mobile): fire the page's haptics over the bridge notify (OTA phase C, C7.10 E)
- feat(mobile): render Mermaid diagrams on the page from one deferred engine artifact (OTA phase C, C7.10 B)
- feat(mobile): render the HTML preview on the page in a sealed srcdoc frame (OTA phase C, C7.10 A)
- feat(mobile): dictation on the OTA page over native audio verbs (Phase C, C7.10 PR D)
- feat(mobile): register the source-control and review page routes (OTA phase C, C4.4)
- feat(mobile): serve any manifest route through a [...page] catch-all (OTA phase C, C8)
- fix(mobile): keep an in-page hop local only when the session's grants cover it (OTA phase C, C2.9)
- fix(mobile): admit https: images on the web shell's CSP (OTA phase C, ruling 27)
- fix(mobile): four pre-existing rich Markdown editor defects (OTA phase C, C1 follow-up)
- fix(mobile): restore query-string's named exports under the 9.5.1 override
Internationalization
*Translated strings stay in sync with code changes.*
- fix(i18n): regenerate the runtime catalog and localize the cookie example from #21462
- fix(i18n): regenerate the runtime-required catalog for the source-control tooltip key
1.4.207
Thank you so much for using Orca and for your continued support! ❤️
This is a patch on top of v1.4.206.
File search: Quick Open and the file explorer no longer flash the previous results while a new search is loading.
File search
*A new query shows nothing from the last one until its own results arrive.*
- Fix stale listings when search query changes
1.4.206
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!
Agents & chat: Search your agent session history from the panel, across computers, and from orca search. OpenCode 2 is also now supported. Native chat treats plans as plans, reconnects chats that were running when Orca restarted, and OMP can pick models on desktop and mobile. Source Control AI can generate with OMP.
Workspaces, editor & source control: The compact branch picker is back in the composer, New Workspace can choose a base ref, and diffs can collapse unchanged regions. Review comments support multi-line ranges. Worktree create prefers Git first; WSL delete will not take the twin branch.
Terminal & remote: Pick a default terminal shell, search with a match count and Cmd+F parity, and configure URL-click / middle-click. Windows terminals spawn as the shell you asked for. Usage scans for Claude, Codex and OpenCode now run on a worker thread.
Mobile: Desktop can serve a mobile web bundle over the air. Tasks, files and agent history start moving onto that page shell, with clearer Back controls and a honest “host unreachable” state instead of an endless Connecting via Relay.
Workspaces, tabs & editor
*The composer is compact again, diffs can hide the noise, and worktree create/delete is less likely to surprise you.*
- feat(composer): restore compact branch picker UX
- feat(composer): choose a base ref in the New Workspace composer
- feat(editor): add opt-in collapsed unchanged regions for file diffs
- feat(diff-comments): add multi-line range selection with drag and keyboard
- fix(editor): keep long file paths distinguishable
- fix(editor): preserve Markdown scroll after image layout
- fix: highlight bash fences in Markdown source mode
- fix(pdf): render CJK text with pdf.js resources
- Close workspace board when selecting a sidebar worktree
- fix(sidebar): keep the Projects filter when a project is added
- fix(sidebar): distinguish sleeping workspaces in the new card style
- fix(sidebar): keep group headers visible when measured rows grow
- Make selected dialog higher contrast
- feat(settings): confirm before stopping running terminals
- fix(settings): keep integration connect dialog drafts on backdrop click
- fix(settings): preserve multiline proxy bypass rules
- fix(worktree-create): prioritize creation Git and defer background preparation
- fix(worktree): keep a WSL checkout case so delete cannot take the twin branch
- fix(worktree): ask the execution host whose home a remote delete would take
- fix(worktrees): route unstamped local worktrees local in the two states #16841 still fails closed
- fix(session): an emptied workspace still survives the reconnect merge
Source control & GitHub
*OMP can generate review text, and GitHub Enterprise Managed User logins validate.*
- feat(source-control-ai): support OMP generation
- feat(github): bind projects to a specific gh account
- fix(github): accept Enterprise Managed User logins in owner slug validation
- Show the Source Control AI CLI arguments box only where it actually works
Browser
*Viewport presets respect UI zoom, and screenshot markup works on client-hosted pages.*
- Fix browser viewport presets incorrectly scaled by UI zoom
- fix(browser): enable screenshot markup on client-hosted pages
- fix(browser): make the browser identity one process-wide choice
Session search
*Find past agent sessions in the history panel, on every computer, and from the CLI.*
- feat(session-search): add panel search and opt-in consent
- feat(session-history): add local search settings and index controls
- feat(session-search): search every computer from the history panel
- feat(session-search): merge all-computers search across hosts
- feat(session-search): enable indexing on paired servers from a client
- feat(settings): connected computers rows for session history indexing
- feat(cli): orca search over the agent session index
- feat(cli): show orca search now the settings toggle ships
- fix(session-search): index OpenCode SQLite sessions
- fix(ai-vault): index Codex agent replies whose content blocks are typed Text
- fix(ai-vault): discover and parse Devin sessions on Windows
- fix(ai-vault): say OpenCode-in-WSL is not searchable from Windows yet
Native chat, OMP & providers
*OpenCode 2 beta, clearer plans and questions, and OMP that stays attached to the right pane and model.*
- feat(agents): add OpenCode 2 beta support
- feat(native-chat): render a proposed plan as a plan, not a generic approval
- fix(native-chat): replace the raw question tool row with an awaiting-input row
- Offer to reconnect native chats that were working when Orca restarted
- Native chat keeps scrolling to bottom
- fix(native-chat): deliver queued messages while the chat pane is hidden
- feat(omp): discover and switch native-chat models on desktop and mobile
- fix(omp): start new tasks without auto-resuming old sessions
- fix(omp): attach desktop and mobile images through file mentions
- fix(omp): keep child sessions from reporting into the parent pane
- fix(claude): single-own turn identity so Stop reaches a provider-opened turn
- fix(claude): judge Stop against the turn the journal published
- fix(pi): ignore idle utility dialogs in completion status
- fix(pi): do not install extensions for disabled agents
- feat(agent-launch): one executor for agent launches, exposed as agent.launch
Terminal
*Default shell, better find, images, and Windows terminals that actually are the shell you picked.*
- feat(settings): choose the default terminal shell
- feat(terminal): search match count + Cmd+F focus parity
- feat(terminal): configure URL click and middle-click behavior
- feat(terminal): inline images via @xterm/addon-image
- fix(terminal): let a runtime-created Windows terminal BE the requested shell
- fix(terminal): align CJK IME preedit spacing
- fix(terminal): clear stale agent identity after shell exit
- fix(cli,relay): stop reading an unsignalable pid as a dead one
Mobile
*Desktop can ship a mobile web bundle; tasks, files and history start rendering from that page.*
- feat(mobile): native shell view serving a mobile web generation from a private origin
- feat(mobile): serve the tasks screen from the page
- feat(mobile): serve the files explorer and preview from the page
- feat(mobile): render agent session history from the desktop's bundle
- feat(mobile): clarify the notification opt-in screen
- feat(mobile): say why a host is unreachable instead of "Connecting via Relay…"
- feat(mobile): answer native verbs on the shell, clipboard first
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance improvements</b></summary>
*Usage scans for Claude, Codex and OpenCode now run on a worker thread (the move called out as upcoming in v1.4.205). Terminal output skips SGR and kitty scans on plain PTY text. Automations run history virtualizes large tables.*
- perf(usage): run the Claude/Codex/OpenCode usage scans on a worker thread
- perf(usage): resolve each cwd's worktree once per scan
- perf(codex-usage): resume rollout scans at the last parsed byte
- perf(terminal): skip background SGR scans without ESC
- perf(terminal): skip kitty scans for plain PTY output
- Virtualize automations run history table for large histories
- perf: always show project names and remove notification scans
- Bound AI Vault transcript record assembly before allocation
- fix(browser): bound CDP output for stalled clients
- perf(renderer): stop one pane title update from scanning the global sleeping-record inventory
</details>
<details> <summary><b>Reliability, tests & delivery</b></summary>
- fix(runtime): persist acknowledged terminal tab retirement
- fix(runtime): reject stale inventory after PTY lifecycle changes
- fix(daemon): pause producers when stream backlogs grow
- fix(crash-reporting): stop periodic emitters from evicting the crash trail
- fix(deps): update vulnerable transitive packages
- Sort dev builds by timestamp instead of semver
</details>
- @100space made their first contribution in
- @gon2gon2 made their first contribution in
- @Lucasfarg made their first contribution in
- @Tkotm76 made their first contribution in
- @KAPUIST made their first contribution in
- @llevintza made their first contribution in
- @yteruel31 made their first contribution in
- @fbartho made their first contribution in
- @lattenee made their first contribution in
1.4.205
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!
Agents & chat: Native chat adds a message rail for jumping between your prompts, keeps a resumed transcript pinned to its end, holds a detached reader in place as messages grow, and cancels pending prompts precisely. OMP conversations resume from session history under their saved names, agent-status ingress moves behind a single admission point, and a timed-out hook now actually terminates its process tree.
Workspaces, editor & source control: A failed archive hook blocks worktree removal instead of deleting anyway, and worktree registrations survive prunable git-file states. Stage, unstage and discard failures surface with retry, automations repair cron step expansion and stop tick latency counting against the missed-run grace, code blocks gain a copy button, and Tiptap moves up behind Markdown compatibility guards.
Terminal & remote: Terminal renames survive pane hydration, handles persist across PTY incarnation rotation, and PTY child-process checks preserve an unverifiable verdict instead of guessing. Relay failures become diagnosable by acquisition versus execution phase, and streamed remote records are bounded.
Performance: Codex usage scans do far less work — attribution resolved once per scan, and grown rollouts resumed at the last parsed byte — which takes a large cold scan from minutes to under a minute. They still run on the main process; the worker-thread move lands in a later release.
Workspaces, tabs & editor
*Safer worktree removal, clearer failure reporting, and a Tiptap upgrade with Markdown compatibility guards.*
- Add copy button to code blocks
- fix(composer): clarify failed attachment drops
- Distinguish pane load failures from empty states
- fix(worktrees): safely remove prunable git-file registrations
- fix(worktrees): preserve unverifiable disk witness
- fix(worktree): block removal when the archive hook fails
- fix(automations): repair cron step expansion and day restriction [HELD — semantic half]
- fix(automations): stop tick latency counting against the missed-run grace
- Improve microphone permission errors and drop failure reporting
- Report clipboard and composer drop failures
- fix(deps): migrate Tiptap security updates with Markdown compatibility guards
- feat(design-system): gate renderer UI with @shadcn/lint
- fix(ui): contain idle caret paint so agent panes stop burning CPU
Source control
*Staging failures are recoverable and Git spawn errors say what actually went wrong.*
- Surface stage, unstage and discard failures with retry capability
- fix(source-control): prevent text wrapping in section headers and action buttons
- fix(git): distinguish binary absence from missing cwd on spawn ENOENT
Agent reliability & native chat
*Chat navigation and transcript positioning improve, and agent state is reported through one ingress point.*
- fix(native-chat): bound a dispatch reason before it reaches the journal row
- fix(native-chat): keep a resumed transcript pinned to its end
- fix(codex): settle a structured send on admission, and stop minting a colliding identity
- fix(omp): preserve status after terminal title owner rewrite
- fix(agents): find OMP by its full project name
- fix(omp): preserve saved conversation names in session history
- fix(agent-session): honour the backup-recovery fence floor on surface release
- fix(hooks): actually terminate a timed-out hook's process tree
- fix(native-chat): cancel pending prompts precisely
- fix: resume OMP child conversations from session history
- fix(ai-vault): expand nested OMP session history
- fix(native-chat): let a reader park just above the latest message
- fix(native-chat): preserve detached transcript position during growth
- feat(native-chat): add a message rail for jumping between your prompts
- refactor(agent-status): isolate legacy status ingress behind one admission point
- fix(runtime): apply the tui-idle evidence ranking to mailbox delivery
- fix(orchestration): require the registered pane key to prove structured worker identity
Terminal
*Renames, handles and PTY verdicts survive rotation, hydration and uncertainty.*
- fix(omp): preserve zsh startup with global aliases
- fix(terminal): retain renames before renderer pane hydration
- fix: keep OMP terminals when folder workspaces become Git repos
- Fix PTY child process verdict to preserve unverifiable state
- fix(runtime): preserve terminal handles across PTY incarnation rotation
- fix(pty): preserve child-process inspection uncertainty
Mobile
*Mobile continues its typed-RPC migration.*
- Bump mobile app.json to 0.0.50
- refactor(mobile): migrate the small domains onto RpcOperation (step 4)
Relay & cloud
*Relay failures are diagnosable by phase, and streamed remote records are bounded.*
- fix(ai-vault): bound streamed remote JSONL records
- feat(runtime): stream file uploads instead of buffering whole files
- Expose preloaded PostgreSQL statement statistics for relay diagnostics
- Diagnose relay PostgreSQL failures by acquisition versus execution phase
- fix(relay): open the real null device when detaching Windows stdio
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance improvements</b></summary>
*Targeted optimizations remove repeated work from the Codex, OpenCode and Claude usage scanners and from no-op store updates. These reduce the cost of a scan; they do not yet move it off the main process.*
Highlights include resolving each cwd's worktree once per scan rather than per event, resuming grown Codex rollouts at the last parsed byte behind a boundary digest and inode check, and preserving state identity across no-op updater paths so selectors stop re-running.
- fix(store): stop two no-op writes from re-running every selector in the app
- fix(store): preserve state identity across no-op updater paths
- perf(usage): resolve each cwd's worktree once per scan
- perf(codex-usage): resume rollout scans at the last parsed byte
</details>
<details> <summary><b>Reliability, tests & delivery</b></summary>
- fix(ci): stop hourly versions dropping below a tagged or already-shipped build
- test: add a verified OMP native-chat mock scenario
- test(mobile): pin each RPC golden to the recorder inputs that can reach it, not the whole directory
- ci: keep the baseline Git build off the compatibility matrix lanes
- fix(ci): stop defining pilot mutant tests inside a conditional
- test(native-chat): split the windowing test harness out of the suite
- chore(lint): add anti-slop oxlint plugin (pinned, all rules off)
- chore(lint): enable anti-slop no-reduce-accumulator-copy and no-widen-then-assert
- fix(lint): keep root postinstall as the sole Electron binary install owner
- test(package): let the postinstall contract allow unrelated chained steps
- fix(lint): enable anti-slop/no-unknown-type-aliases
- refactor(lint): enable anti-slop/no-reflect-apply
- fix(lint): enable anti-slop/no-module-mocking
- test(package): reject an Electron install takeover by exact command
- fix(lint): enable anti-slop/no-reflect-get
- fix(lint): enable anti-slop/no-object-parameters
- fix(lint): enable anti-slop/no-shape-in-symbol-names
- fix(git): avoid Windows tree kills after the command has exited
- build(release): compile the Windows relay process-table addon
</details>
1.4.204
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!
Agents & chat: Native chat adds file drag-and-drop and provider-aware Fast mode, resumes structured chats cleanly after restart, hides idle activity, and fixes tail-read cursor and Claude-turn reopening; Grok completion/hook attribution and Claude SessionEnd handling are more correct, and agent status keys rows by agent instead of pane.
Workspaces & mobile: Workspaces re-seed after agent selection, recover from activation failures, and retire orphaned chat tabs; mobile continues the typed-RPC migration across settings, source-control, and workspace creation while preserving delivery and fixing streaming jumps.
Performance: Orca batches terminal file-link checks, dispatches browser input in-process, avoids repeated remote capability probes, skips redundant persistence flushes, and bounds WSL skill discovery.
Workspaces, tabs & browser
*Safer workspace recovery, more responsive browser input, and clearer project views.*
- fix(worktrees): retire the chat tab of a chat with no child when its workspace goes
- fix(browser): press keys through a US-layout CDP key table instead of a subprocess per keystroke
- fix(workspaces): re-seed a gate-reported empty workspace after an agent selection
- fix(workspaces): recover a real terminal when activation throws for a planless agent create
- fix(github): name an unfiltered empty project view instead of blaming a filter
Agent reliability & native chat
*Chat adds drag-and-drop and Fast mode, recovers more gracefully, and reports agent state more accurately.*
- fix(native-chat): wait for the runtime capability probe before resolving the creation launch route
- feat(ai-vault-search): public session search contract and transports
- fix(tasks): preserve repository results under GitHub search quota
- fix(ai-vault): stream oversized remote session transcripts
- fix(grok): stop replayed Claude/Cursor hooks reporting Grok panes as Claude
- feat(native-chat): support file drag and drop
- refactor(attention): move the agent attention boundary off terminal panes
- fix(grok): defer managed hook pane guard expansion to shell
- refactor(orchestration): derive delivery eligibility from messages
- fix(grok): announce a completion once, when Grok is actually finished
- feat(native-chat): add provider-aware Fast mode
- fix(claude): subscribe to SessionEnd on capable versions, and correct a false comment
- feat(agent-status): run-identity types for keying rows by agent instead of pane
- fix(hooks): report a timed-out hook as unverifiable and terminate its process tree
- fix(session-search): read oversized numeric file IDs on Windows
- feat(native-chat): show a drop target on the whole chat pane
- fix(native-chat): let the provider reopen a Claude turn it resumed itself
- fix(native-chat): resume structured chats cleanly after restart
- fix(ai-vault): ignore non-absolute env overrides for agent scan roots
- fix(grok): stop SessionStart orca-status hook hanging for 10s
- fix(native-chat): stop a bounded tail read from moving the chat cursor past unapplied rows
- feat(ai-vault-search): construct the session search indexer in the scanner service behind a setting
- fix(native-chat): hide activity while awaiting input
Mobile
*Mobile continues its typed-RPC migration while keeping delivery and streaming stable.*
- refactor(mobile): migrate settings reads to RpcOperation
- fix(mobile): give native chat one tail-follow owner so streaming stops jumping
- fix(mobile): preserve delivery ambiguity across transport cutover
- test(mobile): consolidate the RPC migration's verification infrastructure
- refactor(mobile): send the source-control domain through typed RpcOperations
- fix(mobile): two known main bugs the RPC migration preserved
- test(mobile): pin each RPC golden to its own scenario input, not the whole manifest
- refactor(mobile): send the task workspace-creation domain through typed RpcOperations
Relay & cloud
*Probes and identity validation have tighter bounds and failure handling.*
- fix(rpc): validate provider-specific fields in TaskProviderIdentity
- fix(ssh): bound relay incumbent lsof probe
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance improvements</b></summary>
*Targeted optimizations reduce unnecessary work across terminal, browser, remote, persistence, and skill-discovery paths.*
Highlights include batched terminal file-link checks on their owning host, in-process browser pointer dispatch, fewer remote capability probes during file imports, skipped redundant whole-state flushes on terminal reattach, and bounded WSL skill discovery.
- perf(terminal): batch file-link checks on their owning host
- perf(skills): bound WSL installed skill discovery
- perf(remote): avoid repeated capability probes during file imports
- perf(persistence): skip redundant whole-state flushes on terminal reattach
- perf(browser): dispatch coordinate pointer input in process instead of one subprocess per event
</details>
<details> <summary><b>Reliability, tests & delivery</b></summary>
- fix(runtime): reject malformed file Base64 padding
- fix: show unexpected signout notice only once across versions
- fix(auth): report callback failures instead of cancellation
- fix(git): skip upstream remote probes when the remote is absent
- fix(terminal): drop the agent gutter from copied selections
- fix(pty): pace the EAGAIN write retry so a stalled reader can't saturate the daemon thread
</details>
- @atreidesend made their first contribution in
- @PPP-JH made their first contribution in
- @manuaudio made their first contribution in
- @bjornrun made their first contribution in
- @nireak made their first contribution in
1.4.203
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!
Reliability & security: Electron is updated to address a glibc environment use-after-free, browser cookie migration is more reliable, and worktree creation now completes cleanly after post-create failures.
Agents & chat: Native chat recovers restart-stranded sends from provider history, agent status no longer depends on a retained runtime row store, and provider/model validation is more resilient.
Workspaces & mobile: Folder workspaces retain their saved names and groups, sidebar nesting is easier to work with, and mobile restores push, cold-start, notification, Markdown, and workspace-routing behavior.
Performance: Orca reduces cold-switching, browser, terminal, SSH, mobile, history, plugin, and relay overhead across a broad set of targeted improvements.
Workspaces, tabs & browser
*Safer workspace creation, more reliable browser data, and clearer navigation around your projects.*
- fix(browser): decode Chromium SameSite storage values (135 cookies silently lost per profile)
- fix(workspaces): complete a worktree create when a post-create step throws
- Fix landing footer menu placement
- Make sidebar nesting easier while preserving animated reordering
- fix(browser): move cookie scoping off psl's stale suffix list
- fix(tabs): cancel split drags when the window loses focus
- fix(resource-manager): show saved folder workspace names and groups
- fix(sidebar): show agent activity before workspace activation
Agent reliability & native chat
*Agents recover more gracefully, and chat makes safer decisions when provider state or configuration changes.*
- refactor(agent-status): delete the runtime's retained row store (PR 1b)
- fix(source-control): pass the Antigravity prompt to agy --print
- fix(hooks): stop orphaned managed markers from consuming user TOML
- fix(codex): reconcile marketplace and plugin tables through the config mirror
- feat(ai-vault-search): session search query engine over the index
- fix(native-chat): shrink skill pill text
- fix(claude): refuse a structured model the provider does not list
- fix(claude-accounts): stop path resolution from creating the config directory
- fix(ai-vault): close OpenCode handles when query_only setup fails
- fix(skills): evict removed runtime discovery cache
- fix(automations): isolate the scheduler tick and refuse oversized cron steps
- fix(runtime): stop a name-only agent title from satisfying tui-idle
- fix(agent-hooks): stop navigation Escape from inferring completion
- fix(ai-vault): re-read a transcript rewritten to its previous size
- refactor(native-chat): give each structured dispatch state exactly one meaning
- feat(native-chat): decide a restart-stranded send against provider history
Mobile
*Mobile restores its notification and startup paths while keeping workspace and Markdown handling responsive.*
- Restore mobile push and fix cold-start dismissals
- feat(mobile): add typed RPC operations and fence raw requests
- fix: prevent infinite loops in mobile Markdown rendering
- fix(mobile): reuse current workspace on notification taps
Relay & cloud
*Rollout gates, monitoring, and relay rehoming have stronger compatibility and failure handling.*
- feat(relay): support protocol 3 in cell rollout gates
- fix(relay): bound idle rehome polling and skip disabled scans
- fix(relay): reuse canary across completed rollout batches
- fix(cloud): tolerate sparse director errors in rollout monitor
- fix(cloud): diagnose wrapped relay trust probe failures
- test(relay): differential coverage for the single-pass host-data owner lookup
- test(rpc): add a compile-time params catalog parity gate
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance improvements</b></summary>
*Targeted optimizations reduce unnecessary work across the interface, terminals, SSH and relay paths, browser and workspace indexing, mobile rendering, chat/history scans, Git, plugins, and AI-vault searches.*
Highlights include faster cold worktree switching, bounded remote transcript and terminal scans, fewer browser and tab inventory copies, lighter mobile Markdown and Linear grouping work, and more efficient Git, plugin, and session indexing.
</details>
<details> <summary><b>Reliability, tests & delivery</b></summary>
- fix(deps): take Electron 43.7.0 for the glibc environ use-after-free
- fix(terminal): re-run deferred tab admission when a plan installs mid-activation
- fix(e2e): remove four real flake sources and one caret race
- fix(e2e): run worktree first-paint probe on a mapped window
- test: replace fixed UI waits with observable readiness
- ci: reuse immutable package setup across shutdown checks
- ci: narrow pnpm cache keys and shallow development checkouts
- ci: balance existing unit and E2E shards using recorded timings
- refactor(renderer): improve IPC error handling with clamped and unclamped variants
- refactor(preload): drop the unused raw electron IPC bridge
- fix(runtime): GC expired proven-absent leaf PTY verdicts
- fix(editor): eliminate multi-second Markdown blank-run scans
- fix(chat): bound journal replay memory by live history
- chore: remove 20.7 MiB of duplicate and unused media
- fix(updater): open background check errors from the status bar
- refactor(windows): vendor the registry addon as @orca/windows-registry
- chore(deps): pin serve-sim to an exact version
- Add code quality lint for type assertions
- fix(ci): cache the vendored addon where node-gyp actually writes it
- fix(ci): match the truncated windows-process-tree virtual store dir
- build(macos): parallelize native helpers with complete cancellation
- Reduce native dependency installs to the host platform
- test(scripts): widen the Windows shim ratchet to catch package bin spawns
</details>
- @espetro made their first contribution in
1.4.201
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!
Native chat: Claude subagent activity and Codex background tasks are now visible in chat. Completed turns show changed files, and task updates stream into the composer.
Orchestration: Worker-terminal ownership is established at creation. Startup, mobile input, and older federation coordinators have additional recovery safeguards.
Workspace & browser: Background browser tabs load on open, and creating a chat preserves the active worktree.
Workspaces, tabs & browser
*Keep the current worktree selected, and trust a newly opened browser tab to be ready when you visit it.*
Tabs & browser
- fix(browser): load newly opened background tabs
- Unify tab surface selection across workspace activation
- fix(native-chat): keep worktree active during chat creation
Native chat
*The conversation gives you a much better read on what an agent did, is doing, and has delegated.*
Agent activity & results
- feat(native-chat): show Claude subagent activity on the shared carrier
- feat(native-chat): report Codex background tasks in the chat strip
- Summarize turn file changes and preserve resolved prompt receipts
- Render task checklists with update diffs and a composer progress panel
Composer & controls
- fix(native-chat): place effort to the right of model picker
- Show picker-selected native chat skills as pills
- fix(native-chat): expand Claude slash commands sent with an attachment
- fix(native-chat): reveal message chrome on keyboard focus, not any focus
- fix(native-chat): keep collapsible chevrons beside their header text
- fix(renderer): align native chat pane layering
Chat & workspace routing
- Unify native chat and workspace tab command dispatch
- fix(native-chat): unify launch routing and support structured worker placement
Automations
*Workers have a clearer owner from their first moment and are less likely to get stranded during recovery, federation, or mobile use.*
- fix(orchestration): own a worker terminal from creation, not after the boot wait
- fix(orchestration): fence worker release on mobile keystrokes
- fix(orchestration): worker-start settles readiness on observed turn start, not write acceptance
- fix(orchestration): unify structured-session status across worktree ps and sidebar
- fix(orchestration): accept a missing Run id from older federation coordinators
- fix(orchestration): file mail from terminals in no Run under an unbound Run
- test(orchestration): pin the Run-required contract for unbound direct mail
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance: interface, chat & workspaces</b></summary>
- perf: preserve store state on unchanged document titles
- perf: index document history workspace and path identities
- perf: index unified tabs for browser palette entries
- perf: append to owned project source lists without repeated copying
- perf: lazily index workspace tabs during terminal binding replay
- perf: replay pending chat asks with a FIFO cursor
- perf: group chat history sequences lazily within result windows
- perf: measure sidebar row geometry once before sorting delete anchors
- perf: index discovered skill IDs and names for batch selection
- perf: skip fuzzy ranking when exact file matches fill the window
- perf: index tab membership when rebasing authoritative sessions
- perf: reuse collators when sorting discovered skills
- perf: reuse collators when scanning Warp themes
- perf: index selected ancestor coverage during sidebar drag
- perf: index Resource Manager labels and accumulated workspace rows
- perf: scope activation inventory to the owning host and workspace
- perf: index closed browser page IDs during focus cleanup
- perf: index observable skill installations by locked name
- perf(runtime): skip hibernation inventories without completed agents
- perf(workspaces): skip unchanged heartbeat subscriber work
- perf: resolve current-workspace document addresses before catalog scans
- perf: materialize only the requested recent plugin audit lines
- perf: stop merging OS-opened files at the pending queue cap
</details>
<details> <summary><b>Performance: terminals, tunnels & runtime</b></summary>
- perf: track pane alias singleton or ambiguity without copying buckets
- perf: retire exhausted buckets from host-balanced listings
- perf: avoid repeated pending SOCKS payload copies
- perf(terminal): avoid quadratic status-marker scans in output bursts
- perf: index selected-host SSH leases by PTY
- perf: drop oversized diagnostic records before retaining serialized text
- perf: bound tool pairing and avoid unused attribution arrays
- perf: validate terminal adoption MRU membership with group sets
- perf: index terminal neighbor order and remaining membership
- perf: count command-line escapes without regex match arrays
- perf: check backfill date cardinality before expanding ranges
- perf: probe requested pane keys instead of enumerating records
- perf(terminal): skip plain text between partial escape sequences
- perf(terminal): release oversized backing strings behind pending controls
- perf(terminal): skip ordinary output in preview control scans
- perf(terminal): own retained tail rows so they stop pinning their chunks
- perf: check tunnel queue capacity before copying frame payloads
- perf: stop queued metadata work after watcher cancellation
</details>
<details> <summary><b>Performance: data & integrations</b></summary>
- perf: prune metadata caches only when an entry can expire
- perf: skip folder-scope construction for separate repository imports
- perf: index usage session breakdowns during aggregation and merge
- perf: reuse AI-vault path matchers and query and sort keys
- perf: cache AI-vault project attribution by host and cwd
- perf: select checks-panel workspace attribution in one pass
- perf: cache update timestamps for Linear and Jira result sorting
- perf: reuse naturally ordered unique Codex trust ranges
- perf: reuse normalized task-page repository selection
</details>
<details> <summary><b>Reliability & maintenance</b></summary>
- test(ci): replace fixed teardown waits with bounded polls
- fix(lint): preserve deliberate collator benchmark baselines
- fix(native-chat): merge duplicate native-chat-types import
- refactor(ai-vault): split the session scanner into a transcript reader and consumers
</details>
1.4.200
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!
Native chat: Claude subagent activity and Codex background tasks are now visible in chat. Completed turns show changed files, and task updates stream into the composer.
Orchestration: Worker-terminal ownership is established at creation. Startup, mobile input, and older federation coordinators have additional recovery safeguards.
Workspace & browser: Background browser tabs load on open, and creating a chat preserves the active worktree.
Workspaces, tabs & browser
*Keep the current worktree selected, and trust a newly opened browser tab to be ready when you visit it.*
Tabs & browser
- fix(browser): load newly opened background tabs
- Unify tab surface selection across workspace activation
- fix(native-chat): keep worktree active during chat creation
Native chat
*The conversation gives you a much better read on what an agent did, is doing, and has delegated.*
Agent activity & results
- feat(native-chat): show Claude subagent activity on the shared carrier
- feat(native-chat): report Codex background tasks in the chat strip
- Summarize turn file changes and preserve resolved prompt receipts
- Render task checklists with update diffs and a composer progress panel
Composer & controls
- fix(native-chat): place effort to the right of model picker
- Show picker-selected native chat skills as pills
- fix(native-chat): expand Claude slash commands sent with an attachment
- fix(native-chat): reveal message chrome on keyboard focus, not any focus
- fix(native-chat): keep collapsible chevrons beside their header text
- fix(renderer): align native chat pane layering
Chat & workspace routing
- Unify native chat and workspace tab command dispatch
- fix(native-chat): unify launch routing and support structured worker placement
Automations
*Workers have a clearer owner from their first moment and are less likely to get stranded during recovery, federation, or mobile use.*
- fix(orchestration): own a worker terminal from creation, not after the boot wait
- fix(orchestration): fence worker release on mobile keystrokes
- fix(orchestration): worker-start settles readiness on observed turn start, not write acceptance
- fix(orchestration): unify structured-session status across worktree ps and sidebar
- fix(orchestration): accept a missing Run id from older federation coordinators
- fix(orchestration): file mail from terminals in no Run under an unbound Run
- test(orchestration): pin the Run-required contract for unbound direct mail
*Nothing here changes what you see — it changes how smoothly Orca behaves under real workloads. Expanded below if you want the detail.*
<details> <summary><b>Performance: interface, chat & workspaces</b></summary>
- perf: preserve store state on unchanged document titles
- perf: index document history workspace and path identities
- perf: index unified tabs for browser palette entries
- perf: append to owned project source lists without repeated copying
- perf: lazily index workspace tabs during terminal binding replay
- perf: replay pending chat asks with a FIFO cursor
- perf: group chat history sequences lazily within result windows
- perf: measure sidebar row geometry once before sorting delete anchors
- perf: index discovered skill IDs and names for batch selection
- perf: skip fuzzy ranking when exact file matches fill the window
- perf: index tab membership when rebasing authoritative sessions
- perf: reuse collators when sorting discovered skills
- perf: reuse collators when scanning Warp themes
- perf: index selected ancestor coverage during sidebar drag
- perf: index Resource Manager labels and accumulated workspace rows
- perf: scope activation inventory to the owning host and workspace
- perf: index closed browser page IDs during focus cleanup
- perf: index observable skill installations by locked name
- perf(runtime): skip hibernation inventories without completed agents
- perf(workspaces): skip unchanged heartbeat subscriber work
- perf: resolve current-workspace document addresses before catalog scans
- perf: materialize only the requested recent plugin audit lines
- perf: stop merging OS-opened files at the pending queue cap
</details>
<details> <summary><b>Performance: terminals, tunnels & runtime</b></summary>
- perf: track pane alias singleton or ambiguity without copying buckets
- perf: retire exhausted buckets from host-balanced listings
- perf: avoid repeated pending SOCKS payload copies
- perf(terminal): avoid quadratic status-marker scans in output bursts
- perf: index selected-host SSH leases by PTY
- perf: drop oversized diagnostic records before retaining serialized text
- perf: bound tool pairing and avoid unused attribution arrays
- perf: validate terminal adoption MRU membership with group sets
- perf: index terminal neighbor order and remaining membership
- perf: count command-line escapes without regex match arrays
- perf: check backfill date cardinality before expanding ranges
- perf: probe requested pane keys instead of enumerating records
- perf(terminal): skip plain text between partial escape sequences
- perf(terminal): release oversized backing strings behind pending controls
- perf(terminal): skip ordinary output in preview control scans
- perf(terminal): own retained tail rows so they stop pinning their chunks
- perf: check tunnel queue capacity before copying frame payloads
- perf: stop queued metadata work after watcher cancellation
</details>
<details> <summary><b>Performance: data & integrations</b></summary>
- perf: prune metadata caches only when an entry can expire
- perf: skip folder-scope construction for separate repository imports
- perf: index usage session breakdowns during aggregation and merge
- perf: reuse AI-vault path matchers and query and sort keys
- perf: cache AI-vault project attribution by host and cwd
- perf: select checks-panel workspace attribution in one pass
- perf: cache update timestamps for Linear and Jira result sorting
- perf: reuse naturally ordered unique Codex trust ranges
- perf: reuse normalized task-page repository selection
</details>
<details> <summary><b>Reliability & maintenance</b></summary>
- test(ci): replace fixed teardown waits with bounded polls
- fix(lint): preserve deliberate collator benchmark baselines
- fix(native-chat): merge duplicate native-chat-types import
- refactor(ai-vault): split the session scanner into a transcript reader and consumers
</details>