Brennan BensonandClaude Opus 5.5 842e4e0077 perf(native-chat): draw only the visible rows of an opened tool run (#41552)
* perf(native-chat): draw only the visible rows of an opened tool run

An opened tool run rendered every call it held, so a long autonomous stretch
kept thousands of rows, their DOM and their per-row state alive while only a
dozen were visible in the run's capped box.

The run now owns a keyed window over its rows (the shared TanStack
virtualizer plus the existing row+offset scroll anchor):
- rows keep today's keys and order; small runs and Find-with-a-query draw
  every row through the same keyed tree, so nothing remounts at the switch
- the reader is remembered as a row and offset (pixel top while unmeasured),
  following the end only for new work, and forgetting on close as before
- the box's cap keeps the measured height of opened details, including ones
  scrolled out of view; the full task list now remembers its open state
- the first/last rows, a diff reveal target, recently interacted rows, the
  focused row's Tab neighbours and a text selection's span stay drawn

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): finish tool-run follow, keep reveals, bound per-move work

Review repairs for the windowed tool run:
- a follow started by new work always gets its completion frame, so a
  result that adds no row cannot leave it armed to chase later detail growth
- the row anchor restores only when rows arrive or the pane shows again,
  so a diff reveal or the reader's own scrolling is not pulled back
- opened-detail room is kept incrementally and travels with the run's
  remembered position across outer windowing
- focus neighbours, item keys and window rows no longer cost work per move
  proportional to the run's length; selection is tracked only while visible
- thoughts with no words are not keyboard stops; the restored row stays
  drawn until the reader moves

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): finish hidden follows, let reveals win, keep draw-all scrolling free

Second review repair for the windowed tool run:
- a follow is certified only by a real, visible tail measurement, and that
  measurement wakes it even when no size changed; a hidden pane resumes it
- a diff reveal cancels any pending restore and follow on every request
- a hidden pane returns to its row (not its reset pixel offset) on show
- draw-every-row mode (Find, short runs) rebuilds nothing as the reader
  scrolls; selection spans re-derive after the pane was hidden
- remembered detail heights are copied only when one changes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): certify a tool-run follow only by a laid-out tail

A follow's landing is confirmed only when the last row that draws something
has a real, non-zero size; a measurement callback carrying a cached or zero
size no longer ends it early, and a run whose rows draw nothing has no
landing to wait for.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep draw-all tool runs cheap per scroll and prove follow wake paths

Draw-all (Find) no longer records the scroll anchor or rebuilds the selection span
on every scroll, and its trailing spacer skips the end scan. Tests now cover a task
list crossing the window threshold and Find, and pin both follow-completion paths.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): skip anchor scans under a wide selection and recover the reader's row after

A selection wider than a window keeps its rows drawn, so recording the anchor on
each scroll would scan them all; recording now waits, as it does under Find. The
reader's row is then taken from the virtualizer's offsets when recording resumes
or the pane hides, so showing it again does not return to an older row.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): type the tool-run selection-span gate and settle the anchor on hide

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): merge duplicate tool-run window import

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(native-chat): prune the structured session's compiler bailout after the main sync

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep the tool-run measurement callback current without a render-time ref write

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep a reader who jumps past an open run's drawn rows where they jumped

The window redraws inside the scroll that moves it, and a restore still pending
from earlier work could run first and send the reader back to the row they left.
The reader's own scroll now points the anchor at their row from the window's
offsets before that redraw.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): re-point the anchor on reader scrolls only while the run is windowed

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep a hidden tool run's saved row from its box's reset offset

A hidden box resets its offset and may report that as a scroll or as the offset
at unmount. Scroll recording (the run's and the anchor hook's) and the hook's
unmount record now wait while the pane is hidden, so the row kept at hide time is
the one a returning reader lands on.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): give an opened tool run sole ownership of its reader's place

The run and the shared scroll-anchor hook each decided when a saved row still owned
the box, and each local exclusion left another path for a stale restore or capture.
The run now keeps one row-and-offset place from the window's full measurement model,
admits a landing only on mount or show, lets every reader scroll retire pending
work first, records nothing while hidden, and takes a reveal before any landing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): confirm every tool-run landing correction and model the browser's scroll report in tests

A real change (size, row list, the held row's measurement) now grants a landing a
fresh, bounded confirmation budget, so a correction made after an earlier budget ran
out is still confirmed. A pending landing's own writes no longer re-arm following.
The reader harness delivers the scroll event a browser sends after an offset change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): keep the reveal-return case on one memory record and before the reveal's scroll report

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): return the reader harness's scroll writes to their earlier behaviour (rig-stop ruling)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep a revealed file's own row as the tool run's saved place

A reveal now records the card's row and offset from the page as the card aligns,
rather than reading the window's size model, which may still hold that row's
collapsed height. Remount tests report the landing's own scroll the way a browser
would; the pinned reveal case needs no report.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): read an opened tool run's reader place from the rows actually drawn

The window's size model can hold a row's old height for a frame after it grows, so a
scroll report read through it could record a later row than the reader sees. Capture
now takes the row at the box top from the drawn rows' own geometry, found by a binary
search over the run's in-flow children, and uses the model only where the top lies in
an undrawn gap; a box with no geometry keeps the last place.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): type the reader-position owner test's rows without assertions

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-11-12 23:06:24 -08:00
2026-03-16 22:27:51 -07:00
2026-03-28 10:19:14 -07:00

Orca Orca

GitHub stars Total downloads across all releases License: MIT Join the Orca Discord Follow Orca on X Supported platforms: macOS, Windows, and Linux

中文 · 日本語 · 한국어 · Español · Français · Português · Türkçe · Русский

The AI Orchestrator for 100x builders.
Run Claude Code, Codex, and any other coding agent in parallel, each in its own worktree. Chat or terminal, on your laptop or in the cloud, with diffs, a browser, and a CLI in one app.

Download Orca

Orca desktop app with a coordinator agent running worker agents in parallel workspaces, and the Orca mobile app in the corner

Features

Chat or Terminal

Run any agent in Chat UI or as the raw CLI, and move a conversation between the two without losing context.

Docs →

The same agent conversation in Chat UI and in the terminal, side by side

Orchestrate Agents

Hand a big task to one agent. It splits the work, starts worker agents in their own workspaces, and brings their results back to you.

Docs →

A coordinator agent splitting a task between two worker agents and reporting their results

Run Anywhere

Pair a Remote Orca Server, work on any SSH host, or give a worktree its own cloud VM. Your agents keep running when your laptop sleeps.

Docs →

Choosing which machine a new worktree runs on, from this computer to an SSH host or a per-workspace environment

Mobile App

Pair Orca with the mobile app to get pinged when an agent needs you, reply in chat, and keep work moving on any of your machines when you are away from your desk.

iOS App Store · Android APK · Docs →

The Orca mobile app getting a notification that Claude needs input, opening the session, and replying so the agent opens the PR

Review AI Output

Review diffs, leave notes on exact changed lines, and send focused feedback back to an agent.

Docs →

A note on a changed diff line sent back to the agent

Git Integration

Draft commit messages and pull requests from the diff, then send failing checks or PR review comments back to an agent to fix.

Docs →

Drafting a commit and pull request, then sending a review comment back to the agent

Parallel Worktrees

Quickly split tasks into isolated environments, so multiple agents can work side by side without interfering with each other.

Docs →

Creating a new worktree with its own agent next to other running worktrees

Design Mode

Click any element in Orca's browser to copy its HTML, styles, and selector, then paste it into your agent's chat.

Docs →

Picking a button in Orca's browser and sending it to the agent's chat

GitHub & Linear, Native

See your GitHub and Linear tasks in one place, and start a workspace for each when you're ready to build.

Docs →

GitHub and Linear issues in Orca, with a workspace started from a Linear issue

Orca CLI

Anything you can do in Orca, your agents can do too: create worktrees, start workers, drive the browser and desktop apps, and schedule automations, all from the command line.

Docs →

An agent running orca worktree create to start a worker in a new worktree

Plugins

Themes, editors, languages, and panels from the community, installed in a click.

Browse plugins →

Installing the Orca Midnight theme from the plugin catalog

Split Anything

Put agents, terminals, browsers, and diffs side by side in split panes shaped to the task.

Docs →

Dragging tabs into split panes with an agent, browser, terminal, and diff

Also in the box:

  • Drag Files to Agents: drag files from the explorer, or images from your desktop, straight into an agent's prompt.
  • Jump Anywhere: one shortcut jumps to any workspace or tab across every repo and host.
  • Rich Previews: open images, PDFs, and Markdown right in the workspace, next to the agent that made them.
  • Mobile Emulator: run an iOS Simulator or Android emulator beside your agent, and let it tap, type, and check its own work.
  • Dictation: press a shortcut and talk. Orca types what you say into the agent's prompt or terminal.
  • Usage & Accounts: see how much of your agent limits you've used and when they reset, and switch accounts without logging out.
  • Automations: schedule prompts to run on any repo: nightly dependency bumps, weekly triage, flaky-test sweeps.
  • Computer Use: when there's no CLI or API, agents can see and drive desktop apps and external browsers.
  • And many, many more: we ship daily, so this list is perpetually behind. The changelog is the real feature list.

Supported Agents

Works with any CLI agent — if it runs in a terminal, it runs in Orca.

Claude Code logo Claude Code   Codex logo Codex   Grok logo Grok   Cursor logo Cursor   GitHub Copilot logo GitHub Copilot   Muse logo Muse   DeepSeek Harness logo DeepSeek Harness   ZCode logo ZCode   OpenCode logo OpenCode   MiMo Code logo MiMo Code   Amp logo Amp   OpenClaude logo OpenClaude   Antigravity logo Antigravity   Pi logo Pi   oh-my-pi logo oh-my-pi   Hermes Agent logo Hermes Agent   Devin logo Devin   Goose logo Goose   Auggie logo Auggie   Autohand Code logo Autohand Code   Charm logo Charm   Cline logo Cline   CodeBuddy logo CodeBuddy   Codebuff logo Codebuff   Freebuff logo Freebuff   Command Code logo Command Code   Continue logo Continue   Droid logo Droid   Kilocode logo Kilocode   Kimi logo Kimi   Kiro logo Kiro   Mistral Vibe logo Mistral Vibe   Qwen Code logo Qwen Code   Rovo Dev logo Rovo Dev   + any CLI agent


Install

Desktop — macOS, Windows, Linux

Or via a package manager:

# macOS (Homebrew)
# Always use the full name; bare `orca` is an unrelated Plotly cask.
brew install --cask stablyai/orca/orca
# Upgrade an existing install
brew upgrade --cask stablyai/orca/orca
# Release candidates (conflicts with the stable cask; uninstall it first)
brew install --cask stablyai/orca/orca@rc

# Arch Linux (AUR) — or stably-orca-git to build from source
yay -S stably-orca-bin

Mobile App — iOS, Android

Pair with your desktop app to monitor and steer your agents from your phone.


Community & Support

  • Discord: Join the community on Discord.

  • Twitter / X: Follow @orca_build for updates and announcements.

  • WeChat: Scan to join an Orca community WeChat group.

    WeChat QR code for the Orca community
  • Feedback & Ideas: We ship fast. Missing something? Request a new feature.

  • Privacy: See the privacy & telemetry docs for what anonymous usage data Orca collects and how to opt out.

  • Show Support: Star this repo to follow along with our daily ships.


Developing

Want to contribute or run locally? See our CONTRIBUTING.md guide.

Orca contributors

GitHub star history chart for stablyai/orca

Signed Builds

Windows code signing sponsored/provided by SignPath.io, certificate by SignPath Foundation.

License

Orca is free and open source under the MIT License.

S
Description
Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.
Readme MIT
2.7 GiB
Languages
TypeScript 95.5%
JavaScript 3.5%
Swift 0.3%
CSS 0.2%
Python 0.1%
Other 0.1%