github stablyai/orca v1.4.214

latest release: v1.4.215
4 hours ago

Thank you so much for using Orca and for your continued support! ❤️

The short version

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.


Product experience

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 by @Jinwoo-H in #22519
  • feat(ipynb): run notebook cells in a persistent Jupyter kernel by @Jinwoo-H in #22581
  • feat(ipynb): create a .venv when pip is locked out, and show ipykernel setup progress by @Jinwoo-H in #22710
  • fix(ipynb): run no workspace interpreter until the notebook is trusted by @brennanb2025 in #22962

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 by @OrcaWin in #22545
  • fix(native-chat): underline only file links a click can act on by @brennanb2025 in #22370
  • fix(opencode2): block the pane on every session-owned form by @nwparker in #22548
  • feat(native-chat): one shell-environment setting for every structured chat by @brennanb2025 in #22387
  • fix(ai-vault-search): own buffered transcript rows before they pin the parent by @nwparker in #22563
  • feat(agent-launch): let a caller reserve the chat session, and start terminal launches with the session picks by @brennanb2025 in #22523
  • fix(native-chat): dock the task strip on the goal tab by @brennanb2025 in #22530
  • fix(opencode-usage): merge a migrated session's two rows per column by @nwparker in #22550
  • feat(agent-status): publish the main agent's own state beside the combined row state by @brennanb2025 in #22452
  • fix(opencode): give the opencode2 status plugin a distinct id by @nwparker in #22544
  • fix(agents): stop claiming an unconfirmed OpenCode handoff succeeded by @nwparker in #22546
  • fix(claude): resume a native chat from its real latest message by @brennanb2025 in #22395
  • fix(opencode2): resolve subagent session lineage so child work stops taking over the pane by @nwparker in #22444
  • fix(rate-limits): read OpenCode Go usage with the Go API key by @nwparker in #22551
  • fix(native-chat): show every user message on the message rail, not just loaded ones by @brennanb2025 in #22558
  • fix(native-chat): keep chats that failed to resume in the status bar and say what to do by @brennanb2025 in #22448
  • feat(agent-status): combine Codex child work through the shared main-agent status fold by @brennanb2025 in #22475
  • fix(orchestration): type a request ahead of pasted dispatch briefs so Claude workers follow them by @Jinwoo-H in #22582
  • fix(opencode): retire a subagent's blocker when the root turn ends by @nwparker in #22604
  • feat(native-chat): show context window usage in the composer by @brennanb2025 in #22301
  • fix(agent-status): count only agent work in stats, and read a Grok background subagent as working by @brennanb2025 in #22474
  • fix(native-chat): load older messages automatically before the reader reaches the top by @brennanb2025 in #22541
  • fix(native-chat): record which Codex agent produced each journal row by @brennanb2025 in #22532
  • feat(native-chat): add a hover copy button to sent messages by @brennanb2025 in #22721
  • feat(agent-session): let the host own a chat's tab id and let a create reserve it by @brennanb2025 in #22616
  • fix(claude): open structured chat without a startup deadline, and make Retry start fresh by @brennanb2025 in #22364
  • fix(skills): recognize symlinked provider skill roots by @aaryanporwal in #22606
  • fix(native-chat): date a session by its own lifecycle, not its subagents' work by @brennanb2025 in #22520
  • fix(agent-launch): a cwd at the workspace root no longer forces a terminal by @brennanb2025 in #22729
  • fix(pi): stop pi-subagents workflows from pinning a pane on working by @mmarabel in #22533
  • fix(agent-history): list older Pi sessions in Workspace and Project views by @mmarabel in #22482
  • fix(agent-status): end a Claude helper's turn when an API error stops it by @brennanb2025 in #22745
  • fix(pi): isolate status ownership in new terminals by @mmarabel in #22717
  • fix(agent-status): a cancel never hides live work by @brennanb2025 in #22476
  • fix(codex): a Codex native chat that never sent a message reopens after restart by @brennanb2025 in #22639
  • feat(agent-status): child work records say what the child is doing, how it ended, and when by @brennanb2025 in #22521
  • fix(native-chat): show the Codex and Claude model picker the moment a chat opens by @brennanb2025 in #22756
  • fix(native-chat): offer a resume for every chat that was working, and say what it was doing by @brennanb2025 in #22560
  • fix(terminal): make Codex restart replace the pane's process instead of reattaching it by @brennanb2025 in #22737
  • fix(native-chat): keep the background-task strip above a pending prompt card by @brennanb2025 in #22779
  • feat(agents): add first-class ZCode harness by @nwparker in #22464
  • feat(zcode): explain a ZCode build that has no terminal UI by @nwparker in #22730
  • refactor(native-chat): remove the unused terminal handoff by @brennanb2025 in #22783
  • fix(claude): let a Claude chat start again after its root exited with unverifiable descendants by @brennanb2025 in #22802
  • fix(native-chat): keep an idle chat alive while its subagents or background commands run by @brennanb2025 in #22794
  • feat(native-chat): Claude sessions write their subagents into the host status store by @brennanb2025 in #22536
  • feat(feature-tips): one-time tip for agent session search by @Jinwoo-H in #22923
  • fix(codex): Codex 0.157+ starts in Orca-managed homes instead of failing with SUN_LEN by @OrcaWin in #22878
  • fix(claude): prove a stopped chat's child processes gone when they exit with it by @brennanb2025 in #22918
  • fix(native-chat): send typed question answers as structured answers, not an option id by @brennanb2025 in #22793
  • refactor(agent-session): keep which conversation each chat tab shows in one host table by @brennanb2025 in #22709
  • fix(claude): end a Claude chat on its root's exit even when a descendant survived by @brennanb2025 in #22946
  • fix(native-chat): every journal append reaches the chats that are open by @brennanb2025 in #22811
  • fix(native-chat): report a chat's owner from its record, not its running agent by @brennanb2025 in #22808
  • fix(native-chat): name a chat write by its target, not the owner generation by @brennanb2025 in #22812
  • feat(rate-limits): add Cursor usage tracking by @nwparker in #22633
  • fix(native-chat): keep terminal pane chat ownership stable by @OrcaWin in #22984
  • fix(native-chat): preserve current pane ownership through toggles and restore by @OrcaWin in #23049
  • Accept repeated leading BOMs in agent hooks by @nwparker in #22414
  • fix(agents): honor environment prefixes in generation commands by @nwparker in #22427
  • fix(native-chat): every lease latch has a way to die by @brennanb2025 in #22820
  • fix(codex): retain runtime MCP entries without losing revocation by @nwparker in #22426
  • fix(native-chat): keep chat visible when detaching its pane by @OrcaWin in #23096
  • fix(vault): read OpenCode SQLite inside WSL and SSH hosts by @OrcaWin in #23128
  • Better add ai notes ui by @AmethystLiang in #21719

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 by @brennanb2025 in #22557
  • fix(terminal): let Linux IMEs keep the candidate key for a preedit they own by @nwparker in #22607
  • fix(daemon): rebase durable checkpoints on the live terminal by @Jinwoo-H in #22732
  • fix(terminal): one process-boundary ground for every known or proven boundary by @Jinwoo-H in #22735
  • fix(terminal): ground a program that dies with input modes armed on the normal screen by @Jinwoo-H in #22739
  • fix(terminal): prove an idle Git Bash prompt through its bin launcher by @Jinwoo-H in #22752
  • fix(terminal): serialize only the visible width after a column shrink by @Jinwoo-H in #22586
  • fix(terminal): stop dropping visible alt-screen output tagged as hidden-resize repaint by @Jinwoo-H in #22587
  • Show close button for single terminal panes by @AmethystLiang in #22770
  • Provide the Orca CLI automatically in managed WSL terminals by @OrcaWin in #22761
  • fix(terminal): damp park-verdict churn that is too slow to burst by @OrcaWin in #20851
  • Wait for foreground job readiness before testing Ctrl-Z by @OrcaWin in #23158
  • refactor(pty): make renderer delivery optional for headless runtimes by @OrcaWin in #23117

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 by @Jinwoo-H in #22552
  • feat: name runtime machines by @brennanb2025 in #22094
  • revert: #18790 (orchestration incarnation reap fallback and bundled Freebuff agent) by @brennanb2025 in #22601
  • fix(file-explorer): toggle folder instantly on name click by @LesleyMurfin in #22325
  • fix(worktrees): version every catalog publication so a stale listing cannot undo a create by @brennanb2025 in #22507
  • fix(floating-workspace): keep agent launches from moving the main window's tab by @brennanb2025 in #22603
  • refactor(orchestration): give structured sessions an orchestration actor column by @brennanb2025 in #22522
  • fix(feedback): send text-only report when screenshots exceed the upload limit by @mmarabel in #22508
  • fix(desktop): release a native chat when you leave it, so its idle clock can start by @brennanb2025 in #22801
  • fix(runtime-environments): don't crash when a server removed via the CLI still responds by @mmarabel in #22517
  • refactor(orchestration): resolve every caller and target to one orchestration party, keyed by the Orca session id by @brennanb2025 in #22555
  • fix(worktrees): keep failed orphan cleanup retryable by @nwparker in #22409
  • fix: stop process-tree loops by @nwparker in #22411
  • fix(editor): highlight scoped dotenv filenames on desktop and mobile by @nwparker in #22416
  • fix(editor): use the bundled ABAP grammar by @nwparker in #22417
  • fix(cli): preserve the WSL distro when adding managed accounts by @nwparker in #22418
  • fix(jira): bypass collection caches on explicit refresh by @nwparker in #22419
  • fix(pdf): keep the search counter in sync with selected matches by @nwparker in #22420
  • fix(projects): refresh stale automatic GitHub icons during enrichment by @nwparker in #22421
  • Preserve Kimi config permissions by @nwparker in #22422
  • fix(toast): keep folder errors above standard modal backdrops by @nwparker in #22423
  • Keep large Windows file identities distinct by @nwparker in #22424
  • fix(tasks): read a malformed saved Linear team selection as sticky-all instead of crashing the page by @OrcaWin in #22279
  • fix(types): describe command environments independently of Expo globals by @OrcaWin in #23073
  • Prioritize workspace opening over replacement checkout preparation by @nwparker in #23013
  • fix(sidebar): "Hide default branch" hides a folder project's root workspace by @OrcaWin in #22744
  • fix(startup): hold desktop activations until the startup window exists by @OrcaWin in #22495
  • fix(startup): read the install-dir package ACL as SDDL so a repaired folder reads clean on Chinese/Japanese/Korean Windows by @OrcaWin in #22490
  • fix(windows): reuse shared PowerShell literal quoting at every hand-rolled escaper by @OrcaWin in #23083
  • Leave Open Settings unbound by default by @nwparker in #23136
  • fix(markdown): return focus to editor from find bar by @nwparker in #23175
  • fix: route hook files through their stored repository owner by @nwparker in #23184
  • fix: stop retired folder watchers from starting Git upgrades by @nwparker in #23144
  • fix: preserve conflicting folders when local import creation fails by @nwparker in #23101
  • fix: reject expired updater feed selections by @nwparker in #23160
  • fix: stop abandoned local attachment checks after composer unmount by @nwparker in #23075

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 by @OrcaWin in #22612
  • perf(ci): reduce queue pressure without paid runners by @OrcaWin in #23053
  • Bundle Bun for headless Orca and profile persistence by @OrcaWin in #22635
  • fix(persistence): reclaim Windows profile locks after PID reuse by @OrcaWin in #23122
  • perf(chat): share matching concurrent transcript reads by @nwparker in #23172
  • perf(editor): skip unchanged draft publications by @nwparker in #23173
  • fix(renderer): release retired store snapshots from selector caches by @OrcaWin in #23187
  • Cancel abandoned renderer-owned reads by @nwparker in #22986
  • perf(terminal): avoid intermediate history frame buffers by @nwparker in #23005
  • perf(terminal): scan synchronized markers in linear work by @nwparker in #23015
  • perf(editor): skip unchanged cursor-line store writes by @nwparker in #22983
  • refactor(persistence): retire ordinary JSON profile writes by @OrcaWin in #23202
  • Release failed filesystem watcher setup records by @nwparker in #22995
  • perf(renderer): release unrelated state during cache saves by @nwparker in #23021
  • perf: avoid copying unchanged artifact share records by @nwparker in #23141
  • perf: reuse Muse usage filters within each snapshot by @nwparker in #23179
  • perf: reuse target membership within folder lineage filtering by @nwparker in #23185
  • fix: release chunked download resources with their renderer by @nwparker in #23108
  • fix: close file watcher probes after failed writes by @nwparker in #23124
  • perf: retire removed worktree head failure markers by @nwparker in #23135
  • Release cursor positions with editor tab ownership by @nwparker in #22988
  • perf(persistence): serialize selective SQLite saves once by @nwparker in #23171
  • Release SQLite transaction queues when startup fails by @nwparker in #22993
  • perf: reuse fresh selected folder checks on unrelated expiry by @nwparker in #23087

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 by @Jinwoo-H in #22518
  • fix(relay): drain a same-cap cell over 5 minutes, not 2 by @Jinwoo-H in #22584
  • feat(search): bundle ripgrep for local, WSL, and SSH search by @nwparker in #22396
  • fix(web): keep Remote Web loading over plain HTTP without crypto.randomUUID by @mmarabel in #22516
  • Preserve pending SSH terminal layout edits by @OrcaWin in #22991
  • fix(terminal): a remounted new SSH tab keeps the shell its old pane was still spawning by @OrcaWin in #22578
  • perf(relay): share concurrent readiness probes by @nwparker in #23012
  • perf(relay): skip abandoned queued control activation by @nwparker in #23029
  • perf: avoid duplicate base64 decode on SSH uploads by @nwparker in #23093
  • fix: stop retired relay load connections from rescheduling refreshes by @nwparker in #23071

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 by @Jinwoo-H in #22528
  • fix(browser): let pixel capture hold its own page drawn, without the desktop window by @Jinwoo-H in #22534
  • refactor(browser): remove the unused screenshot-prep visibility helper by @Jinwoo-H in #22526
  • fix(browser): import empty-value Chromium cookies instead of their domain hash by @Jinwoo-H in #22719
  • perf: build browser settings search catalog once per render by @nwparker in #23155
  • perf: stream the packaged browser installer checksum in CI by @nwparker in #23082

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) by @Jinwoo-H in #22549
  • fix(mobile): route the bottom drawer's keyboard through the platform seam (OTA phase C follow-up) by @Jinwoo-H in #22556
  • fix(mobile-web): page inputs lose the browser focus ring and hairlines draw one device pixel (OTA phase C follow-up) by @Jinwoo-H in #22569
  • feat(mobile): the page owns its safe area, like a native screen (OTA phase C follow-up) by @Jinwoo-H in #22570
  • test(mobile): repin the recording corpus to main's tip after #22570 by @Jinwoo-H in #22576
  • fix(mobile): keep the streamed browser pane flipping on slow phones, and stop double taps by @Jinwoo-H in #22392
  • test(mobile): repin the RPC recording corpus and session closure after #22392 by @Jinwoo-H in #22702
  • fix(mobile): restart the streamed browser pane on every return to the app by @Jinwoo-H in #22694
  • docs: update translated Android APK links to 0.0.50 by @AmethystLiang in #22740
  • feat(mobile): name the machine after pairing by @brennanb2025 in #22104
  • fix(mobile): the page's terminal shows its last rows above the command dock (OTA phase C follow-up) by @Jinwoo-H in #22806
  • fix(mobile): keep terminal input working when reopening worktrees by @shaharmor in #22505
  • fix(mobile): the page's Live input on Android echoes each letter as typed (OTA phase C follow-up) by @Jinwoo-H in #22958
  • fix(mobile): a terminal opens once at the phone's size, on the page and natively (OTA phase C follow-up) by @Jinwoo-H in #22960
  • fix(mobile): update fflate for security advisory by @nwparker in #22961
  • fix(mobile): give each host field one writer so relay routing can't revert edits by @Jinwoo-H in #22956
  • refactor(mobile): the live input's composing range comes from a platform seam pair by @Jinwoo-H in #23037
  • test(mobile): repin RPC goldens to main after #22956's squash by @Jinwoo-H in #23046
  • fix(mobile): label direct paths with the shared Tailscale check by @Jinwoo-H in #23039

Internationalization (i18n)

Translations expand across Spanish, French, Japanese, Korean, and Chinese with corrected turn statuses and localized artifact search.

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 by @AmethystLiang in #22312
  • test(runtime): stop worker-recovery retries from scanning inside later tests by @nwparker in #22567
  • docs: remove duplicate Muse badge from README by @FumingPower3925 in #22497
  • test(runtime): isolate per-repo worktree scan expiry from the shared timer queue by @brennanb2025 in #22575
  • test(opencode): cover the opencode2 host-env branch and stop inheriting ORCA_OPENCODE_AGENT by @nwparker in #22547
  • docs(tui-agent-config): correct the OpenCode readiness-budget rationale by @nwparker in #22593
  • test(terminal): pin Option-composed currency on a punctuation key by @nwparker in #22608
  • test: remove redundant mobile and GitLab checks by @AmethystLiang in #22748
  • fix(release): run the tag's own skill freshness inventory tests in the release gate by @brennanb2025 in #22775
  • fix(lint): include .mts and .cts in line-limit checks by @nwparker in #22413
  • Simplify .map().flat() to .flatMap() in onboarding tests by @AmethystLiang in #22917
  • chore(deps): refresh maintained dependencies by @nwparker in #22964
  • test(terminal): re-pin the pane hook-order parity past #23049 by @Jinwoo-H in #23090
  • ci: verify mobile disposal and balance unit-test costs by @OrcaWin in #23114
  • Reduce redundant CI runs, pnpm uploads, and fixture startups by @OrcaWin in #23145
  • Improve pull request template for issue linking by @nwparker in d3434a2
  • Optimize CI follow-up workflows by @OrcaWin in #23190
  • Simplify filter-flatMap patterns to single flatMap operations by @AmethystLiang in #23242

New Contributors

Full Changelog: v1.4.212...v1.4.214

Don't miss a new orca release

NewReleases is sending notifications on new releases.