* test: retire two agent-status ipc cases whose fixture arms reach identical code
Follow-on from the wave-30 sweep: an auditor continued into its own disclosed unread list and
read the `useIpcEvents-agent-status-*` family. 2 case declarations removed across 2 files, 152
lines gone. No production code touched.
- `useIpcEvents-agent-status-queue-ordering.test.ts` — `applies ready push events for an
unmounted inactive terminal tab`. Character-identical to `applies ready push events for
inactive terminal tabs with empty layout snapshots` in
`useIpcEvents-agent-status-hook-titles.test.ts` — same event, same prompt strings, same
six-argument `setAgentStatus` assertion — except for one fixture field:
`terminalLayoutsByTabId: {}` versus `{'tab-future': {root: null, ...}}`. The deciding line is
`agent-status-pane-routing-index.ts:209`, `if (layout?.root)`. Both `undefined?.root` and
`{root: null}.root` are falsy, so both arms skip the leaf-membership branch and every
downstream line is identical. The `hook-titles` copy is kept because it has a genuine local
contrast arm — `buffers ready push events until a mounted tab contains the pane leaf`, with
`root: {leafId: STALE_LEAF_ID}` producing `exists: false`, buffering and
`agent_hook_unattributed` telemetry. The queue-ordering copy had no such pairing.
- `useIpcEvents-agent-status-pane-teardown.test.ts` — `does not retain a Cursor spinner terminal
title when the hook reports done`. Production IS mirrored here
(`SYNTHETIC_AGENT_TITLE_PROFILES` has 9 entries), so the mirrored-production check applied:
what differs between the codex and cursor rows is `synthesizeWorkingTitle: false`, and neither
case asserts it. Both exercise only `done -> idleLabel` through one shared path in
`resolveAgentStatusTerminalTitle`. The unique contribution is owned verbatim by
`src/renderer/src/lib/agent-status-terminal-title.test.ts`, same glyph and same string, and the
Codex survivor asserts a strict superset — it additionally pins `updateTabTitle('tab-future',
'Codex ready')` called exactly once.
Reported, not fixed: `ipc-events-agent-status-store-test-fixtures.ts:84` hand-copies the
monotonicity rule as `updatedAt < existing.updatedAt`, while production's decision lives in
`agent-status-live-entry-builder.ts` and additionally weighs retirement fences, recently-closed
tabs, pane-authority aliases and per-connection watermarks. Rather than reason about the risk the
auditor instrumented the branch and ran all eight files: never taken, 56 of 56 cases. So it is
dead test-support code today rather than a stale premise — and a trap for the first staleness case
anyone writes in these files, which would pass against the simplified copy. Left unmodified
because the module is shared with three specs outside the audited chunk.
Verified: 172 test files / 1,084 cases pass in `src/renderer/src/hooks`;
`check-reliability-gates.mjs` 140 gates; neither deleted title appears in the gate manifest; both
named owners confirmed present.
* test: retire two runtime cases subsumed by an honestly-named neighbour
Final chunks of the 2,269-file backlog, `src/renderer/src/runtime`. 2 case declarations removed
across 2 files, 30 lines gone. No production code touched.
Both deletions share a shape: the surviving neighbour is not merely equivalent, it is the case
whose NAME tells the truth about what the code does.
- `paired-reconnect-sidebar-agent-count.test.ts` — `the erased rows are exactly the panes whose
status only the client wrote`. Two defects at once. It computes `missing` by filtering the same
`reconnected.rowPaneKeys` that the immediately preceding case already asserts equals the full
pane set, so `expect(missing).toEqual([])` cannot fail where that case passes. And its title
promises a characterisation its own assertion denies: it claims the erased rows ARE the
client-only panes, while asserting the erased set is empty. Its comment describes a "causal
boundary" that `toEqual([])` never establishes. Owner: `keeps a sidebar row for every still-live
pane after a long sleep`, immediately above.
- `runtime-terminal-inspection.test.ts` — `can record a runtime input marker from a PTY id
mapping`. Its fixture sets `experimentalAgentHibernation: true`, and that flag appears ZERO
times in `runtime-terminal-inspection.ts` — `recordRuntimeTerminalInputForPtyId` resolves a pane
key and records, reading no setting. The surviving case sets the same flag to `false` and asserts
the identical `toBe(123)` from the identical call, so the two differ only in an inert field.
Owner: `records runtime input markers even before hibernation is enabled`, whose name documents
the flag-independence the pair accidentally demonstrates.
Verified: 209 test files / 1,703 cases pass in `src/renderer/src/runtime`;
`check-reliability-gates.mjs` 140 gates; neither deleted title appears in the gate manifest.
* test: retire cases whose varied field production returns from one branch
Final chunk of the backlog sweep, `renderer/runtime` tab-sync. 4 case declarations removed
across 2 files, 57 lines gone. No production code touched.
- `web-session-tabs-sync-agent-handoff.test.ts` — `keeps stale local agent tabs when the host
mirror is for a different agent`. `shouldReplaceTerminalTab` has no agent-kind branch, and
`launchAgent` appears ZERO times in `terminal-surfaces.ts` — its own comment says "agent kind
is not session identity". Both this and its sibling enter the same `exactProvisionalHandoffs`-empty
branch, and the sibling (same-agent) is the one that would go red if agent-kind matching were
reintroduced. This one cannot.
- `web-session-tabs-sync-client-owned-page-content.test.ts` — three cases asserting `loading`,
`canGoBack` and `canGoForward` individually. `resolveMirroredBrowserPageContent` returns all
five fields from a single `if (clientHostsMirroredBrowserPage(tab) && existingPage)` branch, so
no production path preserves one and drops another. Six per-field cases ran off a byte-identical
fixture. Kept the `title` case (the reported bug) and the `url` case (production documents url
as independently load-bearing for the next snapshot's url-equality arm), plus two cases the
per-field reads cannot cover: one asserting different state slices, one asserting patch-key
omission.
Reported, not fixed: `web-runtime-session-tab-activate-close.test.ts` asserts a stale-terminal
refusal is indistinguishable from a real close, while its own comment says "Any fix must make
these two outcomes distinguishable". As a plain `it` it will go red when the bug is fixed and read
as a regression; `it.fails` is the honest shape. Second instance of that pattern in this audit.
Verified: both files green (24 cases); `check-reliability-gates.mjs` 140 gates; neither deleted
title in the gate manifest.
Orca
中文 · 日本語 · 한국어 · Español · Français · 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
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
- Running
orca serveon a headless Linux server? See the headless Linux server guide.
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.
- iOS: Download on the App Store
- Android: Download APK 0.0.50 · 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 11.
-
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 sponored/provided by SignPath.io, certificate by SignPath Foundation.
License
Orca is free and open source under the MIT License.










