* Hold queued follow-ups after an accepted turn fails * Hold queued follow-ups until a Resume follows the failure A Resume written while a turn was still running (for example after a Stop that could not end it) waived that turn's later failure, so one queued card was sent into the failure. The newest-turn projection now remembers the journal position where the newest turn first settled as failed, and only a Resume written after that position releases the hold. After restore or removal the position is the rebuild point, so an earlier Resume is not credited. Nothing new is saved. Publication now checks running work once and reads pending sends from the input order's index instead of every saved submission, and the scaling test counts every walk of the item map, including the ones drafts make. * Give the forked-rewind test's replacement item its owner fence The replacement item now carries ownerFence 0, the fence the failed turn was written under, so the test type-checks against the required field. * Check only pending sends when deciding whether a held queue's pause shows Sends recovered as unknown after a restart stay in the unsettled set forever, so every queue update while a failure or Stop pause showed walked all of them. The input order now also keeps the pending sends on their own, and the pause check reads that list. Both lists share one small cached index. A scaling test seeds recovered sends and confirms repeated publication reads none of them. * Give the failed-queue scaling test's send rows the journal's own handle form * Let a /compact that fails on its own terms leave the queue hold as it was A queued /compact that Orca or the agent refuses, or that ends with its own "compaction failed" verdict, no longer pauses the cards behind it, and no longer lifts a pause an earlier failure set. A compaction that hits a usage limit or the agent's own error still holds them, even when that row arrives after the compaction ended. Continue after a usage limit now runs ahead of the held cards; its test says so. * Hold the queue on the failure beneath refused commands, whenever its evidence lands The queue's failure hold now follows the newest turn that can decide it, re-derived from the saved turns and failure rows instead of a number remembered when a command arrived. A /compact that fails on its own terms (Orca's refusal, Claude's or Codex's verdict, or an ACP agent's own "compaction failed" row such as Grok's refusal) neither holds nor releases the cards waiting behind it. A usage limit, sign-in or provider error on a command still holds them, even when that row lands after a newer refused command or before the command's own turn row. Fixing the failure beneath a refused command now releases the hold, and ordinary failed turns without a failure row (an ACP agent stopping at its token limit) still hold as before. * Keep the failure hold's turns in creation order so each row updates only what it touches The queue's failure hold used to walk every command since the last ordinary turn on each command or evidence row, and rebuilt from the whole history whenever one of those commands was removed. A long run of refused /compact commands, or rewinding them, made that work grow with the conversation. Turns and context clears now sit in a balanced tree ordered by creation, with each subtree caching its newest turn, newest ordinary turn or clear, and newest turn that can decide the hold. Adding, revising or removing one costs a single root-to-leaf path, reads stay constant, and removals keep the same conservative boundary a rebuild gave, without rescanning. The cost contracts drive real isolated transactions at 100 and 1,000 commands and allow no history or projection walks. * Count map walks in the failure-hold cost test with plain spies instead of Reflect * Build the failure-hold tests' status rows with real failure words so they typecheck The scaling test now words its usage-limit and refusal rows through the same failure-words helper the host uses, and the queued /compact test reads the command turn's item key from the identity it was handed instead of a field the run type does not declare. * Re-flag only the waiting cards a queue pause can hold when the pause changes A change in the queue's pause (a new or cleared failure, Resume, Stop, a context clear or a reopen) used to rebuild the card index from every saved card, withdrawn and sent history included. The index now keeps the set of waiting cards with no per-card hold and, on a pause change, updates only those whose flag actually changed; the other cards' summaries, the legacy domain index and an unchanged clear list are kept. Held and actionable results are unchanged. * Keep an older direct send ahead of newer cards after a sent card settles After a queued card was sent and accepted, its history was released, but the card kept its old place in the index a direct send was ordered against. A later Stop and chat close then recovered a newer queued card ahead of the older direct send. A pause change now gives those cards the same place a full rebuild did, visiting only cards changed since the last pause change; cards placed by an earlier rebuild share one value that moves with each pause change. * Hold the queue on a failure at read time instead of rebuilding the card index A failed turn holds every waiting card alike, so the card index no longer rebuilds when a failure starts or ends. It keeps main's ordering, rebuilds only on Stop, clear and reopen as main does, and hides the waiting card and command from reads while a failure holds the queue. This removes the incremental re-stamping layer, which reordered tied cards restored from an older build and kept growing work and memory across pauses. * Check that a held queue walks no card history during the fold, not only after it The failed-queue card contract now warms the legacy domain, watches every Map the card index owns, and checks each ensure keeps its indexes and walks nothing. Across fold, adopt and read the canonical cards are walked exactly once per item row, the existing command-refusal scan, and never for a Resume. * Read the card index fields in the failure-hold cost test directly instead of through Reflect * Drop the two type casts from the queue failure cost test * Hold orchestration messages that arrive while a failed turn holds the queue A message from another agent arriving while the chat sat idle after a failed turn went straight to the agent, and if that turn succeeded it also released the person's held cards. Such a message now waits as a held card with the rest; the person's own send still recovers, and Resume or the card's Send delivers it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Update usage-limit continue tests for failure-held cards The edited-card test now presses Resume after the limit failure, so its card is resumed but edit-held and the continuation is still superseded. A new test covers the continuation running ahead of a failure-held card, which stays held during that turn and drains after it succeeds. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Combine compact test imports after main merge --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Orca
中文 · 日本語 · 한국어 · Español · Français · Português · Türkçe · Русский
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
Features
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
Codex
Grok
Cursor
GitHub Copilot
Muse
DeepSeek Harness
ZCode
OpenCode
MiMo Code
Amp
OpenClaude
Antigravity
Pi
oh-my-pi
Hermes Agent
Devin
Goose
Auggie
Autohand Code
Charm
Cline
CodeBuddy
Codebuff
Freebuff
Command Code
Continue
Droid
Kilocode
Kimi
Kiro
Mistral Vibe
Qwen Code
Rovo Dev
+ any CLI agent
Install
Desktop — macOS, Windows, Linux
- Download from onOrca.dev
- Or grab a build directly: macOS Apple Silicon · macOS Intel · Windows (.exe) · Linux AppImage · All builds
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
# 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.
- iOS: Download on the App Store
- Android: Download APK · Install guide
Community & Support
-
Discord: Join the community on Discord.
-
Twitter / X: Follow @orca_build for updates and announcements.
-
WeChat: Scan to join the Orca community WeChat group.
-
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.
The relay that pairs the mobile app with a desktop host is also in this repository under
cloud/, with a separate pnpm workspace and setup guide.
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.










