Orca
Audited from github.com/stablyai/orca
Orca is an open-source agentic development environment (ADE) for running Claude Code, Codex, OpenCode or Pi side by side, each in its own git worktree and terminal. It ships as an Electron desktop app with a mobile companion and a cloud relay.
- Language
- TypeScript
- Database
- PostgreSQL
- Hosting
- Google Cloud
- License
- MIT
- Running for
- 6 months
- Team
- 6-20 people
Why this architecture
Agent CLIs stay the user's own. Orca adds the orchestration layer around them: isolated git worktrees, a PTY daemon that outlives the UI, and a relay for mobile steering. It can support new agents without bundling them.
Tech stack by layer
17 technologies · audited Sep 25, 2026- ElectronDesktop shell for macOS, Windows and Linux built with electron-vite and electron-builder
- ReactRenderer UI (src/renderer) for worktrees, terminals and agent panes, audited with react-doctor
- ZustandRenderer state stores, with a selector fan-out benchmark enforced as a check
- ViteBundler for the renderer and a browser build of the UI (vite.web.config.ts)
- ExpoiOS and Android companion app (Expo Router, xterm webview, notifications) released with fastlane
- PostgreSQLRelay and push state accessed with pg, with shared schema in cloud/packages/postgres-schema
- TerraformInfrastructure as code for the relay under cloud/infra, also bundled into the fence-broker image
- Google CloudRelay deploy target (Cloud SQL, GCE candidates) driven by many cloud-* workflows
- DockerContainer images for relay, push and fence-broker plus daemon lifecycle test images
- VitestUnit, contract and performance-contract tests (config/vitest.config.ts)
- PlaywrightEnd-to-end desktop and packaged-browser tests in tests/e2e
- GitHub Actions60+ workflows for PR checks, per-OS builds, mobile releases and relay operations
- Claude Agent SDKDrives Claude Code sessions using the user's own installed Claude CLI binary
- Git worktreesEach agent runs in its own isolated git worktree so parallel attempts can be compared and merged
Orca architecture diagram
Open SVGDiagram as text
- Desktop app (Electron · React) → orcad (Node.js · node-pty): terminals
- Mobile companion (Expo) → Cloud relay (Hono): sync
- Desktop app (Electron · React) → Cloud relay (Hono): sync
- orcad (Node.js · node-pty) → Agent sessions (one git worktree each): PTYs
- Agent sessions (one git worktree each) → Agent CLIs (Claude Code · your own): run
- Cloud relay (Hono) → PostgreSQL (relay · push state): pg
Key architectural decisions
5 decisions- 01
One git worktree per agent, orchestrated from one desktop app
The README and skill-guides/orchestration.md describe fanning one prompt across several agents (Claude Code, Codex, OpenCode, Pi), each in its own isolated git worktree, then comparing results and merging the winner.
- 02
Bring-your-own agent CLIs instead of bundling them
pnpm-workspace.yaml lists every @anthropic-ai/claude-agent-sdk platform binary under ignoredOptionalDependencies, so Orca always launches the user's own resolved Claude CLI instead of shipping about 95 MB per platform.
- 03
A separate runtime daemon hosts terminals
build:orcad and the smoke:orcad-terminal script build a daemon (orcad) that owns the node-pty sessions, and config/docker has test images for daemon scope, lifetime and shutdown of descendant processes, so terminals survive UI restarts and updates.
- 04
Cloud relay for the mobile companion, on its own pnpm workspace
cloud/ is a separate pnpm workspace with relay, push, relay-ops and relay-fence-broker apps (Hono, pg, ws, tweetnacl, jose), deployed to Google Cloud with Terraform through dozens of cloud-deploy/monitor/operate workflows.
- 05
Lint ratchets and reliability gates as policy
package.json lint chains oxlint configs (anti-slop, type-aware, design-system, dead classes) with ratchet checks on max lines, ts-nocheck and runtime-electron baselines stored in config/*-baseline.txt, plus config/reliability-gates.jsonc.
How Orca is built
How Orca is structured
Orca's repository holds three separately installed projects:
- Desktop app (root):
src/main(Electron main process),src/preload,src/renderer(React UI),src/cli(theorcabinary,bin.orcainpackage.json),src/relayandsrc/shared. The build is configured inelectron.vite.config.ts,vite.web.config.tsandconfig/electron-builder.config.cjs. The rootpnpm-workspace.yamlonly linksnative/windows-registry. mobile/: an Expo app with its ownpnpm-workspace.yaml, lockfile and fastlane setup.cloud/: a pnpm workspace withapps/relay,apps/push,apps/relay-ops,apps/relay-fence-broker, shared contract packages andinfra/.
native/ contains platform code for computer use (macOS, Linux, Windows), macOS keyboard layout and notification status, a Windows CLI launcher and a registry reader. This is why the language stats include Swift, C++, C# and PowerShell. skills/, skill-guides/ and skill-stubs/ hold agent skills bundled with the app, and Casks/ holds the Homebrew casks.
Frontend
The renderer is React with Zustand state, bundled by Vite through electron-vite. shadcn is configured in components.json. React quality is enforced with react-doctor and a dedicated oxlint config, and design-system rules have their own lint config (config/oxlint-design-system.json). The same UI can be served in a browser with dev:web for development. Localization has its own verification scripts and a coverage allowlist in config/.
Backend & APIs
Inside the desktop app, the Electron main process and the orcad daemon own the heavy work:
- PTYs through
node-pty, compiled natively at install time (allowBuildsinpnpm-workspace.yaml), - git worktree management per agent,
- an RPC layer whose parameter catalog is generated and verified (
generate:rpc-params-catalog), - skill installation and sharing (
src/main/skills).
The cloud services are small Hono apps on Node 24. relay uses ws for live connections, jose for tokens and tweetnacl for encryption. push sends mobile notifications with google-auth-library. relay-fence-broker wraps Terraform and the gcloud CLI for controlled infrastructure changes.
Data & persistence
Desktop state is stored locally. No embedded database appears in the audited manifests. Cloud state lives in PostgreSQL, accessed with pg, and the schema is shared through cloud/packages/postgres-schema. Workflow names such as production-cloud-sql-rollout-lock and the Cloud SQL connection-budget scripts in cloud/package.json point to Google Cloud SQL.
Build, test & deploy
- Tests: Vitest (
config/vitest.config.ts, plusconfig/vitest.performance.config.tsfor performance contracts) and Playwright (tests/playwright.config.ts). - Lint: oxlint with several configs, oxfmt for formatting, and husky pre-commit hooks.
- GitHub Actions: 60+ workflows. They cover PR checks, hourly, daily and release macOS builds, Windows update and crash-survival end-to-end tests, Linux Wayland GPU sandbox tests, iOS and Android releases, Homebrew bumps, and many
cloud-*workflows that deploy, monitor and operate the relay across regions. - Docker images are built for the cloud apps and for daemon lifecycle tests under
config/docker/.
Self-hosting notes
The desktop app is downloaded per OS or installed with Homebrew (Casks/orca.rb). Contributors need pnpm and a native toolchain for node-pty and the platform modules (build:native). Self-hosting the relay is possible with the cloud/ workspace, Terraform and Google Cloud. cloud/README.md documents that setup.
What to copy (and what not to)
What to copy
- Leaving agent binaries out and running whatever the user has installed. It keeps the app small and agent-agnostic.
- Running terminals in a daemon separate from the UI process, with Docker-based tests for process lifetime.
- Ratchet files (
max-lines-baseline.txt,ts-nocheck-baseline.txt) that stop code quality from regressing without forcing a big-bang cleanup.
What not to copy
- With 60+ workflows, many of them for relay operations, CI becomes an operations console. A small team should keep deployment runbooks outside the product repository's CI.
- Three separately locked pnpm projects in one repository avoid dependency conflicts but triple the dependency upkeep.
Sources & repo audit
- package.json (scripts, lint and ratchet gates, orcad build)
- pnpm-workspace.yaml (native builds, Claude Agent SDK exclusion)
- cloud/apps/relay/package.json (Hono, pg, ws)
- mobile/package.json (Expo companion app)
Independent analysis of repository at github.com/stablyai/orca. Spotted an inaccuracy? Use the claim form to request a correction.
Maintainer? Add the architecture badge to your README
[](https://stackitfast.com/project/orca) Scaffold it with your agent
Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with Orca's architecture.
- 1Copy the promptThe full markdown spec, with every layer and decision.
- 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
- 3Paste and scaffoldUse it as the first instruction; review before you ship.
# MISSION: Scaffold "Orca" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **Orca**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: Orca
- **What It Does**: Orca is an open-source agentic development environment (ADE) for running Claude Code, Codex, OpenCode or Pi side by side, each in its own git worktree and terminal. It ships as an Electron desktop app with a mobile companion and a cloud relay.
- **Domain & Category**: Agentic Development Environment for Parallel Coding Agents
- **Production Scale**: 6-20 people
- **Development Mode**: HYBRID
- **Architectural Rationale**: Agent CLIs stay the user's own. Orca adds the orchestration layer around them: isolated git worktrees, a PTY daemon that outlives the UI, and a relay for mobile steering. It can support new agents without bundling them.
- **Live Website Reference**: https://onOrca.dev
- **Source Repository**: https://github.com/stablyai/orca
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: TypeScript, Electron, React, Zustand, Vite, Node.js, Expo, React Native, Hono, PostgreSQL, Terraform, Google Cloud, Docker, Vitest, Playwright, pnpm, GitHub Actions
- **Primary Language(s)**: TypeScript, JavaScript, Swift, CSS, HCL, Kotlin
- **License of the reference repo**: MIT
- **Frontend**: Electron — Desktop shell for macOS, Windows and Linux built with electron-vite and electron-builder; React — Renderer UI (src/renderer) for worktrees, terminals and agent panes, audited with react-doctor; Zustand — Renderer state stores, with a selector fan-out benchmark enforced as a check; Vite — Bundler for the renderer and a browser build of the UI (vite.web.config.ts); Expo — iOS and Android companion app (Expo Router, xterm webview, notifications) released with fastlane
- **Backend & APIs**: Node.js — Electron main process, the orca CLI (src/cli) and the orcad runtime daemon that hosts PTYs; node-pty — Native pseudo-terminals for each agent session (built during install); Hono — HTTP layer of the cloud relay and push services in cloud/apps
- **Data & persistence**: PostgreSQL — Relay and push state accessed with pg, with shared schema in cloud/packages/postgres-schema
- **Infrastructure & deploy**: Terraform — Infrastructure as code for the relay under cloud/infra, also bundled into the fence-broker image; Google Cloud — Relay deploy target (Cloud SQL, GCE candidates) driven by many cloud-* workflows; Docker — Container images for relay, push and fence-broker plus daemon lifecycle test images; Vitest — Unit, contract and performance-contract tests (config/vitest.config.ts); Playwright — End-to-end desktop and packaged-browser tests in tests/e2e; GitHub Actions — 60+ workflows for PR checks, per-OS builds, mobile releases and relay operations
- **Tooling, testing & ops**: Claude Agent SDK — Drives Claude Code sessions using the user's own installed Claude CLI binary; Git worktrees — Each agent runs in its own isolated git worktree so parallel attempts can be compared and merged
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/stablyai/orca @ 646e9a5)
1. **One git worktree per agent, orchestrated from one desktop app**: The README and skill-guides/orchestration.md describe fanning one prompt across several agents (Claude Code, Codex, OpenCode, Pi), each in its own isolated git worktree, then comparing results and merging the winner.
2. **Bring-your-own agent CLIs instead of bundling them**: pnpm-workspace.yaml lists every @anthropic-ai/claude-agent-sdk platform binary under ignoredOptionalDependencies, so Orca always launches the user's own resolved Claude CLI instead of shipping about 95 MB per platform.
3. **A separate runtime daemon hosts terminals**: build:orcad and the smoke:orcad-terminal script build a daemon (orcad) that owns the node-pty sessions, and config/docker has test images for daemon scope, lifetime and shutdown of descendant processes, so terminals survive UI restarts and updates.
4. **Cloud relay for the mobile companion, on its own pnpm workspace**: cloud/ is a separate pnpm workspace with relay, push, relay-ops and relay-fence-broker apps (Hono, pg, ws, tweetnacl, jose), deployed to Google Cloud with Terraform through dozens of cloud-deploy/monitor/operate workflows.
5. **Lint ratchets and reliability gates as policy**: package.json lint chains oxlint configs (anti-slop, type-aware, design-system, dead classes) with ratchet checks on max lines, ts-nocheck and runtime-electron baselines stored in config/*-baseline.txt, plus config/reliability-gates.jsonc.
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
- Structure as a Turborepo monorepo with strict package boundaries:
- `apps/web`: Application UI, routing, layouts, and server endpoints.
- `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
- `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
- `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
- Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
- Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
- Utilize Vite 6 with TanStack Router for fully type-safe routing. Manage server state and caching via TanStack Query v5 with optimistic UI updates.
4. **Design System & Aesthetics**:
- Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
- Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
- Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
- Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer (PostgreSQL): client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.Copied 1 time · 1 of 1 reported launches succeeded (100%)
Frequently asked about Orca
What is Orca built with?
Orca is a TypeScript Electron desktop app with a React renderer using Zustand and Vite. Terminals run on node-pty inside a separate orcad daemon. A companion mobile app is built with Expo, and a cloud relay runs on Hono and PostgreSQL on Google Cloud, provisioned with Terraform.
How does Orca run several coding agents in parallel?
Each agent (for example Claude Code, Codex, OpenCode or Pi) runs in its own git worktree with its own terminal, so several attempts at the same task proceed in isolation and the best result can be merged.
Does Orca include its own AI models?
No. Orca orchestrates agent CLIs the user already has installed, and it deliberately excludes the Claude Agent SDK's bundled CLI binaries so it always runs the user's own Claude installation.
Is there a mobile app for Orca?
Yes. The mobile/ workspace contains an Expo app for iOS and Android that monitors agents, sends notifications when they finish and accepts follow-up prompts, connected through Orca's cloud relay.
One email a month: new deep dives and stack trends
New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.
Similar architectures
- Supabase StudioClassicDeveloper Tool · 20+ peopleShares React · TypeScript · PostgreSQL
- Bluesky AppClassicMobile App · 20+ peopleShares TypeScript · React Native · Expo
- PrismaClassicNext-Generation Node.js & TypeScript ORM · 1M+ MAUShares TypeScript · PostgreSQL · pnpm
- OpenMAICClassicMulti-Agent Interactive AI Classroom · 6-20 peopleShares TypeScript · React · Zustand
- GotifyClassicSelf-Hosted Real-Time Push Server · 2-5 PeopleShares TypeScript · React · PostgreSQL
- PenpotClassicDesign & Prototyping Platform · 20+ peopleShares TypeScript · PostgreSQL · Docker