ADE for working with a fleet of parallel agents
Go to file
Jinjing c2b074bd15
fix(terminal): shape Arabic/RTL text on the cell grid via xterm character joiner (#7665)
* fix(terminal): shape Arabic/RTL runs on the cell grid via xterm character joiner (#5262)

Register a character joiner that groups contiguous RTL runs (tunneling
through neutral spaces/digits/punctuation between RTL words) so both the
WebGL and DOM renderers draw each run as one string, applying native
contextual shaping and BiDi ordering inside the run's grid-aligned cell
box. Buffer and PTY stream are untouched; xterm un-joins ranges holding
the cursor or a partial selection, keeping cursor visibility and
selection cell-accurate. Non-RTL lines early-return via a single
charCodeAt sweep.

Co-authored-by: Orca <help@stably.ai>

* Deregister Arabic shaping joiner when disposing pane

Since xterm.js does not automatically remove registered character joiners
upon terminal disposal, they must be explicitly deregistered to avoid
memory and registration leaks.

- Update `registerArabicShapingJoiner` to return a cleanup function.
- Store and call the cleanup handler when disposing a managed pane.
- Update tests to assert proper registration and deregistration.

* fix(terminal): gate RTL joining on live WebGL, tunnel ZWNJ/ZWJ/RLM, lock joiner lifecycle in tests

Review findings on the Arabic shaping branch:
- The DOM renderer sizes a joined span with one letter-spacing value applied
  per character, so joined RTL runs blew out row grid alignment whenever the
  WebGL renderer was unavailable (GPU off, auto policy, context loss). The
  joiner now only returns ranges while the pane's WebGL addon is live.
- ZWNJ/ZWJ/RLM (mandatory in Persian orthography) hard-broke RTL runs,
  rendering word halves in swapped visual order. They are now transparent
  inside a run without extending or counting toward it.
- openTerminal's existing unicode-ordering test failed at HEAD because the
  fake terminal lacked registerCharacterJoiner; the harness now implements
  the joiner API and a new test locks register-on-open/deregister-on-dispose.

Co-authored-by: Orca <help@stably.ai>

* fix(terminal): keep zero-width RTL marks from opening joined runs, treat ALM as transparent

Round-2 review findings:
- A combining mark (tashkeel/niqqud) orphaned after an LTR base could open
  an RTL run mid-cell; xterm rounds that string range to an empty joined
  cell range and the WebGL renderer draws an empty glyph over the next
  character. Marks now extend and count only in runs opened by a spacing
  RTL letter.
- ALM (U+061C) sat inside the strong-RTL block scan, so it opened and
  counted toward runs unlike RLM. It now joins the transparent set.
- New test locks openTerminal wiring the joiner predicate to
  pane.webglAddon (previously () => true would pass the suite).

Co-authored-by: Orca <help@stably.ai>

* fix(terminal): treat zero-width Cf controls in RTL blocks as run-transparent

Round-3 review finding: zero-width format controls that live inside the
strong-RTL scan ranges (Arabic number signs U+0600-0605, end of ayah U+06DD,
Syriac abbreviation mark U+070F, disputed end of ayah U+08E2) and the BOM/
ZWNBSP U+FEFF are width-0 in xterm. Like combining marks they could open a
run mid-cell, producing an empty joined cell range that blanks the following
glyph in the WebGL renderer. They are Cf not Mn, so canOpenRtlRun could not
catch them. Fold them into the run-transparent set (never open, count, or
break a run) and document the upstream standalone-width-0-cell join skew.

Co-authored-by: Orca <help@stably.ai>

* Document WebGL decoration limitation for Arabic shaping joiner

Add comments explaining a known upstream limitation in xterm.js WebGL
renderer where search-match highlights inside a joined run render
all-or-nothing, similar to ligatures.

---------

Co-authored-by: Orca <help@stably.ai>
2026-07-08 18:29:36 -07:00
.github ci(daemon): fail builds, packaging, and CI when the terminal daemon cannot start — and stop failing silently (#7849) 2026-07-08 19:46:14 -04:00
.husky fix(win32): resolve EPERM on userData writes, batch-file spawn failures, and native dep rebuild (#1152) 2026-04-26 22:29:58 -07:00
Casks Put the orca CLI on PATH at install time for headless hosts (#5842) 2026-06-19 15:46:29 -07:00
build-plugins fix(daemon): daemon cannot start in 1.4.129-rc.1 — electron require leaked into daemon-entry chunk (#7844) 2026-07-08 19:41:09 -04:00
config ci(daemon): fail builds, packaging, and CI when the terminal daemon cannot start — and stop failing silently (#7849) 2026-07-08 19:46:14 -04:00
docs Update README downloads badge 2026-07-08 12:50:39 +00:00
mobile fix(mobile): surface disconnected source-control states + keep the mobile WS fallback port stable (STA-1511) (#7855) 2026-07-08 18:28:59 -07:00
native fix: cache macos computer-use snapshot ax reads (#6130) 2026-06-22 20:57:13 -07:00
notes Revert WebGL context retention (#7169) 2026-07-02 17:55:37 -07:00
previews Redesign mobile driver overlay layout and clarify action copy (#5647) 2026-06-17 19:21:42 -07:00
resources feat(rate-limits): add MiniMax token control (#7387) 2026-07-04 23:33:25 -07:00
skills Clarify Orca orchestration tool boundary and sidebar lineage (#7522) 2026-07-06 00:05:49 -07:00
src fix(terminal): shape Arabic/RTL text on the cell grid via xterm character joiner (#7665) 2026-07-08 18:29:36 -07:00
tests test(e2e): relax hidden PTY timer drift gate 2026-07-06 23:01:51 -07:00
tools fix(win-update-e2e): install wait compared incomparable exe version formats (#7850) 2026-07-08 19:45:48 -04:00
.gitattributes Add project Windows runtime selection (#5519) 2026-06-17 16:08:14 -07:00
.gitignore perf(source-control): stop gh rate-limit storms and idle git-status spawn churn (#7595) 2026-07-06 15:12:56 -07:00
.npmrc Add mobile emulator (#4754) 2026-06-08 00:08:57 -07:00
.oxfmtrc.json
.oxlintrc.json lint(unicorn): enable prefer-number-properties, prefer-array-find, prefer-array-index-of (#7516) 2026-07-05 23:56:37 -07:00
AGENTS.md Add max-lines ratchet CI gate to block new line-limit bypasses (#7608) 2026-07-06 17:12:27 -07:00
CLAUDE.md Link CLAUDE.md to AGENTS.md 2026-05-04 20:42:03 -07:00
LICENSE
README.md Add backup WeChat QR to main README 2026-07-07 18:42:57 -07:00
components.json
electron.vite.config.ts fix(daemon): daemon cannot start in 1.4.129-rc.1 — electron require leaked into daemon-entry chunk (#7844) 2026-07-08 19:41:09 -04:00
orca.yaml Fix Windows setup hook script (#2106) 2026-05-16 17:44:42 -04:00
package.json release: v1.4.129-rc.3 2026-07-09 00:08:33 +00:00
pnpm-lock.yaml revert: back out the Windows terminal update-survival chain (#7421→#7499) (#7505) 2026-07-05 22:50:48 -07:00
tsconfig.json
vite.web.config.ts chore(lint): upgrade oxlint to 1.71 + enable 7 new rules (autofixed backlog) (#6841) 2026-06-29 22:38:29 -07:00

README.md

Orca Orca

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

Español · Português · 中文 · 日本語 · 한국어

The AI Orchestrator for 100x builders.
Run Codex, ClaudeCode, OpenCode or Pi side-by-side — each in its own worktree, tracked in one place.

Download Orca

Orca desktop app running agents in parallel worktrees, with the Orca mobile companion app in the corner

Features

Mobile Companion

Monitor and steer your agents from your phone — get notified when an agent finishes and send follow-ups from anywhere.

iOS App Store · TestFlight · Android APK 0.0.24 · Docs →

Orca desktop with the mobile companion app

Parallel Worktrees

Fan one prompt across five agents, each in its own isolated git worktree — compare the results and merge the winner.

Docs →

Parallel worktree orchestration

Terminal Splits

Ghostty-class terminals with WebGL rendering, infinite splits, and scrollback that survives restarts.

Docs →

Terminal splits

Design Mode

Click any UI element in a real Chromium window to send its HTML, CSS, and a cropped screenshot straight into your agent's prompt.

Docs →

Embedded browser and Design Mode

GitHub & Linear, Native

Browse PRs, issues, and project boards in-app — open a worktree from any task and review without a context switch.

Docs →

GitHub and Linear task workflows in Orca

SSH Worktrees

Run agents on a beefy remote box with full file editing, git, and terminals — auto-reconnect and port forwarding included.

Docs →

Remote worktrees over SSH

Annotate AI Diffs

Drop comments on any diff line and ship them back to the agent — review, edit, and commit without leaving Orca.

Docs →

Annotate AI-generated diffs

Drag Files to Agents

VS Code's editor with autosave everywhere — drag files or images straight into an agent prompt.

Docs →

Drag files and images into an agent prompt

Orca CLI

Agents drive Orca too — script every workflow with orca worktree create, snapshot, click, and fill.

Docs →

Script Orca from the CLI

Also in the box:

  • Quick open — Search across worktrees, files, agents, commands, and repo context without leaving your flow.
  • Account switcher & usage tracking — See Claude and Codex usage and rate-limit resets, and hot-swap accounts without re-logging in.
  • Rich repo previews — Preview Markdown, images, PDFs, and repo docs in the workspace.
  • Computer Use — Let agents operate desktop apps and visible UI when a workflow needs real interaction.
  • Notifications and unread state — Know when an agent finishes or needs attention, then mark threads unread to come back later.
  • 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   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   Codebuff logo Codebuff   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)
brew install --cask stablyai/orca/orca

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

Mobile Companion — 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 the QR code to join the community. If the first group is full, use the backup group.

    WeChat QR code for the Orca community Backup 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

License

Orca is free and open source under the MIT License.