Neil d74388f8a2 test: retire cases subsumed by an honestly-named neighbour (#24150)
* 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.
2026-09-30 06:47:16 -07:00
2026-09-30 12:44:27 +00:00
2026-09-26 20:50:46 +00:00
2026-05-04 20:42:03 -07: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

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 · Android APK 0.0.50 · 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   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)
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 to join the Orca community WeChat group 11.

    WeChat group 11 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.

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.

Orca contributors

GitHub star history chart for stablyai/orca

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.

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
1.7 GiB
Languages
TypeScript 95.2%
JavaScript 4%
Swift 0.2%
HCL 0.2%
CSS 0.1%