ADE for working with a fleet of parallel agents
Go to file
Lesley Murfin 4d6c291eff
fix(windows): stop main-thread PowerShell ACL storm on env-store reads (#5011)
* fix(windows): stop main-thread PowerShell storm on env-store reads

Two changes fix the v1.4.52+ Windows performance regression (#4901 regression
against #4840) where 49 powershell.exe processes were spawned in 27 seconds
during load, saturating the Electron main thread and causing black terminals
and runtimeEnvironments:call timeouts.

Root cause: `readEnvironmentStore` calls `hardenExistingSecureFile` on every
read. The env-store parent directory's mtime churns constantly (every secure
write updates it), so the mtime-keyed idempotency cache never matched →
`bestEffortRestrictWindowsPath` (powershell, ~1-1.5s synchronous) fired on
every call. After #4901, the remote-runtime tab-sync loop reads the store
~2×/s, turning sporadic mtime misses into a continuous main-thread storm.

Fix 1 – path-cached directory hardening: add `hardenedDirectoryPathsThisProcess
(Set<string>)` that caches directory hardening by PATH for the process lifetime.
A directory's required ACL does not change when its mtime changes; only file
hardening retains the metadata-keyed cache so post-rename inode changes are
detected correctly.

Fix 2 – async ACL application: replace `execFileSync(powershell.exe, ...)` with
`execFile` (fire-and-forget). PowerShell cold-start is ~1-1.5s; the function is
already named `bestEffortRestrictWindowsPath` so async/optimistic caching is
correct. `applySecurePathRestriction` returns `true` optimistically on win32 so
the cache entry is written before the background process completes.

Tests: new regression tests verify the directory is hardened exactly once even
when its mtime changes between calls, that unchanged files are not re-hardened,
and that ACL application goes through async execFile (not execFileSync).

* fix(windows): apply credential-file ACL synchronously on write path

Follow-up rigor on the env-store PowerShell ACL storm fix (#5006). The
read-path storm fix (path-cached async directory hardening + async file
re-harden) is retained, but switching ALL ACL application to async opened a
narrow Windows-only security window: because writeFileSync({mode}) is a no-op
on Windows, writeSecureFile returned with the credential file still carrying
the parent directory's inherited (broader) ACL for the ~1-1.5s PowerShell
cold-start, affecting the e2ee keypair, device registry, and runtime env auth
store.

Fix: apply the credential FILE's ACL synchronously (execFileSync) on the
infrequent write path, before the atomic rename publishes it, and cache the
path as hardened only on confirmed success so a failed apply retries. Keep the
DIRECTORY hardening async + path-cached for the process lifetime (that is what
killed the #4901/#5006 main-thread storm). The read path's existing-file
re-harden stays async + metadata-cached (fires at most once per file, no storm).

Also:
- Document the dir-path cache process-lifetime known limitation (deleted+
  recreated dir not re-hardened until restart).
- Remove the redundant double dir-cache write in writeSecureFile.
- Add docs/windows-secure-file-acl-hardening.md describing the sync-file/
  async-dir model and a manual Windows e2e test plan (the cross-platform
  Playwright harness runs on Linux and cannot reach the PowerShell path).

Tests (src/shared/secure-file.test.ts, 13 passing): credential file hardened
synchronously while dir stays async (no async file-ACL window); failed sync
file-ACL apply is not cached and retries; dir hardened exactly once across many
writes despite mtime churn; no PowerShell spawned on non-win32.

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

* fix: keep POSIX secure directory hardening metadata-aware

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-09 01:47:29 -07:00
.github Gate releases on terminal rendering golden 2026-06-08 20:49:17 -07:00
.husky
Casks release: add Homebrew RC cask channel (#3462) 2026-05-29 22:34:44 -07:00
config fix: support windows ssh hosts (#5004) 2026-06-09 01:17:34 -07:00
docs fix(windows): stop main-thread PowerShell ACL storm on env-store reads (#5011) 2026-06-09 01:47:29 -07:00
mobile Fix mobile markdown actions above keyboard (#4945) 2026-06-08 21:27:33 -07:00
native Harden computer use runtime and CLI (#4705) 2026-06-07 17:49:01 -07:00
notes Persist orca serve terminal sessions 2026-06-04 16:37:57 -04:00
resources Add app icon switcher to appearance settings (#4600) 2026-06-03 17:14:50 -07:00
skills Add mobile emulator (#4754) 2026-06-08 00:08:57 -07:00
src fix(windows): stop main-thread PowerShell ACL storm on env-store reads (#5011) 2026-06-09 01:47:29 -07:00
tests Gate releases on terminal rendering golden 2026-06-08 20:49:17 -07:00
tools Suppress macOS renderer teardown crash reports (#4655) 2026-06-04 13:02:51 -07:00
.env.e2e
.gitignore Remove H1/H2/H3 badges from markdown TOC (#4832) 2026-06-07 16:45:18 -07:00
.npmrc Add mobile emulator (#4754) 2026-06-08 00:08:57 -07:00
.oxfmtrc.json
.oxlintrc.json Adjust max-lines lint budgets (#4515) 2026-06-02 15:22:17 -07:00
AGENTS.md Update AGENTS.md 2026-06-08 22:32:42 -07:00
CLAUDE.md
LICENSE
README.md Use dynamic README metadata badges 2026-06-09 00:52:26 -07:00
components.json
electron.vite.config.ts Add early macOS startup diagnostics (#4504) 2026-06-02 14:02:19 -07:00
orca.yaml
package.json release: v1.4.54-rc.0 2026-06-09 07:15:26 +00:00
pnpm-lock.yaml Fix terminal table rendering after workspace restore (#4877) 2026-06-08 03:25:55 -07:00
tsconfig.json
vite.web.config.ts Update onboarding feature wall experience (#2652) 2026-05-23 12:21:13 -07:00

README.md

Orca Orca

GitHub stars

English · Español · 中文 · 日本語 · 한국어

The AI Orchestrator for 100x builders.
Run Claude Code, OpenClaude, Codex, Grok, Antigravity, or OpenCode side-by-side across repos — each in its own worktree, tracked in one place.
Available for macOS, Windows, and Linux.

Download 🐋

Latest stable release License Supported platforms: macOS, Windows, and Linux

Orca feature showcase cycling through parallel worktrees, terminal splits, design mode, GitHub and Linear workflows, CLI agents, and SSH worktrees

Supported Agents

Orca supports any CLI agent (not just this list).

Claude Code   OpenClaude   Codex   Grok   Gemini   Antigravity   Pi   oh-my-pi   Hermes Agent   OpenCode   Goose   Amp   Auggie   Autohand Code   Charm   Cline   Codebuff   Command Code   Continue   Cursor   Droid   GitHub Copilot   Kilocode   Kimi   Kiro   Mistral Vibe   Qwen Code   Rovo Dev


Features

Run agents in parallel

  • Bring your own subscription — Use Claude Code, OpenClaude, Codex, Grok, Antigravity, OpenCode, or any other CLI agent without an Orca login.
  • Worktree-native tasks — Give each task its own worktree so agents can work side-by-side without stashing or branch juggling.
  • Multi-agent terminals — Run agents in tabs and split panes, then see active, waiting, and finished sessions at a glance.

Review and ship

  • Agent-ready browser — Open local apps, inspect pages, annotate UI, and pass precise browser context back to agents.
  • Design Mode — Iterate on frontend changes with an embedded browser built for visual review and quick fixes.
  • Source control built in — Review AI-generated diffs, make quick edits, and commit without leaving Orca.
  • GitHub workflow links — Keep PRs, issues, and Actions checks connected to the worktree doing the work.

Work anywhere

  • SSH support — Connect to remote machines and run agents there directly from Orca.
  • Mobile companion — Monitor and steer agents from your phone, with emulator-friendly mobile workflows.
  • 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.

Install

Mac, Linux, Windows

Alternatively, install from a package manager:

macOS (Homebrew)

brew install --cask stablyai/orca/orca

Arch Linux (AUR)

# Precompiled binary
yay -S stably-orca-bin

# Build from GitHub source
yay -S stably-orca-git

Mobile Companion App

Control your agents from your phone.

Orca desktop with the mobile companion app


Feature Showcase

Click any tile to explore the workflow.

Parallel Worktrees

Parallel worktree orchestration
   Terminal Splits

Ghostty-class terminal splits


Design Mode

Embedded browser and Design Mode
   GitHub & Linear, Native

GitHub and Linear task workflows in Orca


Every CLI Agent

Works with every CLI agent
   SSH Worktrees

Remote worktrees over SSH


Drag Files to Agents

Drag files and images into an agent prompt
   Annotate AI Diffs

Annotate AI-generated diffs


Orca CLI

Script Orca from the CLI
   Native Search

Native search across Orca workflows


Account Switcher & Usage Tracking

Account switching and usage tracking
   Rich Repo Previews

Markdown, images, PDFs, and repo document previews


Split Anything

Split panes for agents, terminals, browsers, and files


Community & Support

  • Discord: Join the community on Discord.
  • Twitter / X: Follow @orca_build for updates and announcements.
  • 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.