에이전트 다섯을 동시에 굴리는 작업대: stablyai/orca v1.4.229의 워크트리 네이티브 모델·orcad 런타임 분리·오케스트레이션 심층 해부

코딩 에이전트 하나를 터미널에서 돌리는 단계는 이미 지났다. 요즘 실무자들의 고민은 “Claude Code·Codex·OpenCode를 동시에 여러 개 돌릴 때 파일 충돌, 브랜치 정리, 누가 끝났는지 추적, 노트북을 덮어도 계속 돌게 하기”를 어떻게 처리하느냐다. 오늘(2026-10-19) GitHub Trending 전체 일간 7위(오늘 +1,146 stars), TypeScript 일간 4위에 오른 stablyai/orca는 이 문제를 “에이전트마다 자기 git 워크트리를 하나씩 주고, 그 위에 IDE·런타임 서버·CLI·모바일을 얹는다”는 방식으로 푼다. README의 한 줄 소개도 “Codex, Claude Code, OpenCode, Pi를 나란히 실행하되 각자 자기 워크트리에서, 추적은 한곳에서”다.

Orca 한눈에: 에이전트(claude·codex·opencode·pi)마다 자기 git 워크트리와 터미널을 주고, 하나의 저장소·여러 브랜치를 한 화면에서 추적한다
Orca 한눈에: 에이전트(claude·codex·opencode·pi)마다 자기 git 워크트리와 터미널을 주고, 하나의 저장소·여러 브랜치를 한 화면에서 추적한다

이 글은 기능 목록을 옮기는 대신 세 가지를 확인한다. ① 워크트리 네이티브 모델과 orca.yaml·.worktreeinclude가 실제로 무엇을 보장하고 무엇을 보장하지 않는지, ② UI와 분리된 orca serve/orcad 런타임·터미널 데몬·오케스트레이션 계층이 어떻게 생겼는지, ③ 텔레메트리·원격 페어링·에이전트 “폴더 신뢰” 사전 기록 같은 신뢰 경계다. 그리고 박스(리눅스 VM)에서 공식 AppImage v1.4.229를 받아 GUI 없이 헤드리스 서버로 띄워, 워크트리 생성부터 서버 재시작 후 터미널 생존까지 직접 돌려 봤다. 수치는 모두 2026-10-19 11:50~12:00 KST 기준이다.

한눈에 보기: 오늘 기준 스냅숏

항목 값
저장소 github.com/stablyai/orca (생성 2026-03-17 12:28 KST) · 홈페이지 onorca.dev
라이선스 MIT (루트 LICENSE, README 명시). Windows 코드 서명은 SignPath Foundation 후원
최신 릴리스 v1.4.229 (2026-10-17 15:54 KST). 직전 v1.4.227(10-16 12:42 KST), v1.4.224(10-10 13:30 KST) — 사실상 매일 배포
모바일 Android 프리릴리스 mobile-android-v0.0.57 (10-17 11:16 KST), iOS는 App Store/TestFlight
main HEAD 19e45b7 · 2026-10-19 11:49 KST (sidebar 기능 PR #30461 머지)
규모 추적 파일 37,575개, TS/TSX 33,870개, 그중 *.test.ts(x) 13,629개. src/ TS 총 약 485만 줄(테스트 포함)
GitHub 지표 96,839 stars · 6,183 forks · 열린 이슈+PR 8,483건 · 기여자 약 450명(익명 포함, API 11:59 KST)
Trending 전체 일간 #7(+1,146), TypeScript 일간 #4
스택 Electron + React, Node 24, pnpm 12.14, 런타임 의존성 28개(node-pty, ssh2, @xterm/headless, @anthropic-ai/claude-agent-sdk, posthog-node, tweetnacl 등), dev 의존성 121개
배포물 macOS dmg/zip, Windows exe, Linux AppImage·deb·rpm, Homebrew cask, AUR(stably-orca-bin)

왜 지금 트렌딩인가

Orca는 3월에 공개돼 이미 10만 스타에 가까운 저장소라 신작은 아니다. 오늘 다시 상위권에 오른 데는 “에이전트를 몇 개 굴리느냐”가 이번 주 개발자 커뮤니티의 공통 화두라는 배경이 있다. 같은 날 Trending에는 opencode(전체 #3), cursor/plugins(#4), ruflo(#5), ai-memory(#6)처럼 에이전트 런타임·하네스·메모리 저장소가 몰려 있고, Orca는 그 에이전트들을 담는 그릇 역할을 한다.

신호 내용
빠른 릴리스 리듬 10/10 → 10/16 → 10/17로 1.4.224~1.4.229가 연속 배포. v1.4.229에서 Native chat(실험), 20개 에이전트 추가 지원 공유 스킬, Jira 보드·스프린트, SSH 재연결 수정
에이전트 무관(agent-agnostic) README의 지원 목록이 Claude Code·Codex·Grok·Cursor·Copilot·OpenCode·Pi·Amp·Goose·Kiro·Qwen Code 등 30여 종 + “터미널에서 돌면 무엇이든”
구독 그대로 사용 저장소 설명이 “Run any coding agent with your own subscription”. API 키 중개가 아니라 각 CLI의 로그인을 그대로 씀
원격·모바일 노트북을 덮어도 계속 도는 Remote Orca Server, 휴대폰에서 상태 확인·답장하는 모바일 컴패니언
CLI로 에이전트가 Orca를 조종 orca worktree create, orca orchestration worker-start 등 281개 명령을 에이전트가 직접 호출

문제 정의: 병렬 에이전트의 네 가지 마찰

마찰 증상 Orca의 답
파일 충돌 한 체크아웃에서 두 에이전트가 같은 파일을 고침 작업마다 git worktree 하나 → 디렉터리·브랜치가 물리적으로 분리
환경 재현 새 워크트리엔 node_modules·.env 같은 gitignore 파일이 없음 orca.yaml의 setup 스크립트·sharedDirectories, .worktreeinclude 복사
관찰·개입 탭 수십 개 중 누가 끝났고 누가 질문 중인지 모름 에이전트 상태 훅(working/waiting/done), 알림, 모바일, orca worktree ps
수명 노트북이 잠들면 에이전트도 멈춤, 앱 재시작 시 PTY 유실 UI와 분리된 런타임 서버 + 별도 터미널 데몬, 하이버네이션 후 --resume 재개

핵심 설계 판단은 “에이전트를 직접 만들지 않는다”는 것이다. Orca는 모델 호출·프롬프트 루프를 소유하지 않고, 각 에이전트 CLI를 PTY 안에서 실행하며 작업 공간(워크트리)·터미널·리뷰·알림을 소유한다. 그래서 새 에이전트 CLI가 나와도 터미널에서 돌기만 하면 바로 붙고, 반대로 에이전트 내부 품질에는 관여하지 않는다.

저장소 구조: 거대한 단일 모노레포

경로 역할 층
src/main/ Electron 메인 프로세스 겸 런타임 로직. 에이전트별 어댑터(claude, codex, cursor, copilot, amp, devin…), 계정 전환, 워크트리 신뢰, 훅, 자동화, 브라우저, ephemeral VM, daemon 런타임
src/renderer/ React UI(사이드바, 탭·분할, Monaco 에디터, diff 주석, 디자인 모드) UI
src/cli/ orca CLI. 명령 사양·디스패치·핸들러(worktree, terminal, orchestration, computer, jira, linear…)와 대량의 단위 테스트 CLI
src/packages/ @orca/process-host 등 내부 패키지(pnpm 워크스페이스) 공유
native/ OS별 컴퓨터 유즈 헬퍼(macOS/Windows/Linux), Wayland 클립보드, Windows 레지스트리·보안 모듈 네이티브
cloud/ 모바일↔데스크톱 페어링 릴레이(별도 pnpm 워크스페이스·인프라) 클라우드
mobile/ iOS·Android 컴패니언(별도 워크스페이스) 모바일
skills/, skill-guides/ 에이전트용 SKILL.md 10종: orca-cli, orchestration, computer-use, orca-per-workspace-env, jira/linear 등 스킬
docs/site/ onorca.dev 문서(Next.js, MDX 66개) 문서
config/scripts/ 175개 npm 스크립트 뒤의 래칫(ratchet) 검사·벤치마크·빌드 스크립트 품질

눈에 띄는 것은 품질 장치의 밀도다. package.json 스크립트 175개 중 상당수가 check:*-ratchet(최대 줄 수, @ts-nocheck 수, 경로 리터럴, 동기 spawn 금지 등을 “늘어나지 못하게” 고정하는 검사)와 bench:*(유휴 CPU, 메인 스레드 jank, 터미널 타이핑 지연)다. 또 pnpm-workspace.yaml에 minimumReleaseAge: 4320(분, 즉 3일)을 걸어 새로 올라온 npm 버전은 3일이 지나야 설치되게 했다. 공급망 공격의 “첫 며칠”을 피하는 실용적인 방어다. 저장소 루트에 AGENTS.md(13.8KB)를 두고 CLAUDE.md는 그 파일을 가리키게 한 것도, 이 코드베이스 자체가 에이전트로 대량 개발되고 있음을 보여 준다.

런타임 아키텍처: UI는 손님, 서버와 터미널 데몬이 주인

런타임 구조: 데스크톱·모바일·CLI는 손님이고, orca serve/orcad(WebSocket :6768, Node 24)가 상태를, 별도 터미널 데몬이 PTY를 소유한다
런타임 구조: 데스크톱·모바일·CLI는 손님이고, orca serve/orcad(WebSocket :6768, Node 24)가 상태를, 별도 터미널 데몬이 PTY를 소유한다

릴리스 AppImage를 풀어 보면 구조가 그대로 드러난다. resources/ 아래에 Electron 앱 번들(app.asar 72MB + unpacked 102MB) 외에 별도 Node 런타임(121MB), orcad-template(85MB: orcad-server.js·daemon-entry.js 등), 브라우저 자동화용 agent-browser, ripgrep, 컴퓨터 유즈 헬퍼가 따로 들어 있다. 헤드리스로 orca serve를 띄우면 Electron 프로세스가 번들 Node 24로 orcad 서버를 띄우고, 그 서버가 다시 PTY를 소유하는 터미널 데몬을 별도 프로세스로 둔다.

층 구성 설계 포인트
클라이언트 데스크톱 UI, 모바일 앱, 웹 클라이언트, orca CLI 모두 같은 런타임에 붙는 “손님”. Linux에선 CLI 이름이 orca-ide(GNOME 스크린리더 Orca와 충돌 회피)
런타임 서버 orca serve / orcad, WebSocket 기본 포트 6768 프로젝트·워크트리·탭·오케스트레이션 상태를 소유. 상태 저장은 SQLite(“profile_state_authority … sqlite” 로그)
터미널 데몬 daemon-entry.js, 프로토콜 v48 에이전트 PTY를 보유. 서버가 죽어도 데몬과 셸은 살아남아 재부착(아래 스모크에서 확인)
에이전트 프로세스 claude, codex, opencode … 원래 CLI 그대로 Orca가 상태 훅을 주입해 working/waiting/done을 수집. 엔드포인트는 {userData}/agent-hooks/endpoint.env에 써 두고 매 훅마다 다시 읽음
실행 대상 로컬 · SSH 호스트 · Remote Orca Server · Cloud VM 레시피 레시피는 Vercel Sandbox·Fly·Modal·SSH·로컬 Docker 등 내 계정의 자원을 씀(Orca가 VPS를 팔지 않음)

CLI의 구현도 흥미롭다. Linux 런처 셸 스크립트는 별도 Node를 깔지 않고 ELECTRON_RUN_AS_NODE=1로 앱 실행 파일을 Node처럼 돌려 app.asar.unpacked/out/cli/index.js를 실행한다. 덕분에 orca-ide --version이 0.1초 만에 응답하고, 앱과 CLI 버전이 항상 일치한다. 모든 명령이 --json에서 {id, ok, result, _meta} 봉투를 돌려주며, orca agent-context --json은 281개 명령의 기계 판독용 스키마(v1)를 출력한다. 에이전트가 Orca를 “도구”로 쓰도록 처음부터 설계된 셈이다.

워크트리 네이티브 모델: 무엇을 보장하나

워크트리 한 개의 일생(생성→셋업→ignored 파일 복사→에이전트→diff 리뷰→정리)과 Run·Task·Dispatch·Gate 오케스트레이션 계층
워크트리 한 개의 일생(생성→셋업→ignored 파일 복사→에이전트→diff 리뷰→정리)과 Run·Task·Dispatch·Gate 오케스트레이션 계층

문서의 첫 문장이 “Orca is worktree-native”다. 작업 하나 = 워크트리 하나 = 브랜치 하나이며, 각 워크트리가 자기 에이전트 터미널·에디터 탭·브라우저 탭을 가진다. 생성은 백그라운드에서 git fetch와 git worktree add를 돌리고, 삭제는 디렉터리와 브랜치를 함께 지운다(병합 안 된 커밋이 있으면 브랜치를 보존하고 “Review N Branches”로 알린다). 모든 워크트리는 진짜 git 워크트리라 터미널에서 git rebase를 해도 Orca가 다음 갱신 때 반영한다.

메커니즘 대상 결과 전형적 용도
Settings → Worktree Shared Paths 개인 설정, 파일·디렉터리 macOS APFS면 clone-copy, 아니면 링크 개인 캐시
orca.yaml worktree.sharedDirectories gitignore된 디렉터리만, 최대 100개 항상 링크(Windows는 junction 우선) — 수정이 원본에 반영 node_modules, .cache
.worktreeinclude gitignore된 파일·디렉터리, 리터럴 경로만(glob·부정 무시) 개별 복사, 링크로 대체하지 않음. 워크트리당 2GiB·50,000개 예산 .env, .vscode/settings.json

orca.yaml은 생각보다 엄격하다. 파일 전체 256KiB, 문자열 필드 64KiB 상한이 있고, 중복 키가 하나라도 있으면 파일 전체를 거부한다(“마지막 값 우선”을 기대하면 안 된다). 또 어떤 설정을 어느 체크아웃에서 읽는지가 갈린다. setup 스크립트·defaultTabs는 새 워크트리의 orca.yaml에서, 공유 디렉터리·복사 규칙·archive 스크립트는 기본(primary) 체크아웃에서 읽는다. 기능 브랜치에서 .worktreeinclude를 고쳐도 다음 워크트리에 반영되지 않는 이유다. setup 러너에는 ORCA_ROOT_PATH·ORCA_WORKTREE_PATH와 함께 CONDUCTOR_ROOT_PATH 호환 별칭이 들어가는데, 비슷한 워크트리 기반 도구에서 넘어오는 사용자를 의식한 흔적이다.

# orca.yaml (repo root)
scripts:
  setup: |
    pnpm install
  archive: |
    echo Workspace archived
setupAgentStartupPolicy: wait-for-setup   # 셋업 성공 후 에이전트 시작
defaultTabs:
  - title: Agent                           # 첫 탭은 에이전트 몫(템플릿 명령 무시)
  - title: Git status
    command: git status --short
worktree:
  sharedDirectories:
    - .cache                               # 존재 + gitignore된 디렉터리만

# .worktreeinclude (repo root) — 한 줄에 리터럴 경로 하나
.env
.env.local

오케스트레이션 계층: Run · Task · Dispatch · Gate

여러 에이전트를 “나란히” 띄우는 것과 “조율”하는 것은 다르다. Orca의 오케스트레이션(설정 → Experimental에서 활성화)은 코디네이터 에이전트가 CLI로 작업을 쪼개 워커 에이전트에게 맡기고, 완료·질문·하트비트를 메일함으로 받는 구조다. 메시지 큐를 따로 띄우지 않고 런타임 서버가 상태를 들고 있다.

개념 의미 대표 명령
Run 코디네이터의 지속 네임스페이스 + 수신함. 스케줄링은 하지 않음 orchestration run-create --objective …
Task spec·deps·status(pending/ready/dispatched/completed/failed/blocked)를 가진 작업 단위, DAG 가능 task-create --spec … --task-title …
Dispatch 한 터미널에서의 한 번의 시도. 완료 권한의 주체 worker-start --task … --worktree new-child --agent codex
Message status·worker_done·escalation·question·heartbeat 등. FIFO, --ack 전까지 재전달 check --wait --types worker_done,question
Decision gate 코디네이터가 소유한 질문. 해결될 때까지 task를 막음 gate-create --question … --options '["yes","no"]'

설계에서 좋은 점은 완료 권한을 Dispatch ID에 묶은 것이다. 워커는 worker_done을 정확히 한 번, --outcome succeeded|failed와 task·dispatch ID를 함께 보내야 하므로, 재시도된 오래된 워커가 엉뚱한 작업을 “완료” 처리하는 사고를 막는다. 반면 보낸 쪽 터미널을 식별해야 하므로 Orca 터미널 밖에서 부르면 거부된다(스모크에서 no_active_sender_terminal 확인). 즉 오케스트레이션은 “Orca 안에서 도는 에이전트를 위한 API”이지 범용 워크플로 엔진이 아니다.

설치와 실행: 문서에 있는 명령 그대로

# 데스크톱 (macOS / Linux AUR)
brew install --cask stablyai/orca/orca
yay -S stably-orca-bin

# Linux AppImage를 직접 받는 경우
curl -LO https://github.com/stablyai/orca/releases/latest/download/orca-linux.AppImage
chmod +x orca-linux.AppImage

# CLI 등록은 앱 Settings → General → Orca CLI (Linux 명령은 orca-ide)
orca status --json
orca worktree create --repo id:<repoId> --name my-task --issue 123 --json
orca terminal wait --for tui-idle --timeout-ms 30000 --json

# 헤드리스 서버 (Linux)
orca-ide serve --pairing-address 100.64.1.20

# 에이전트에게 Orca 사용법 스킬 설치
npx skills add https://github.com/stablyai/orca --skill orca-cli
orca skills install --skill orca-cli --skill orchestration

# 소스에서 (CONTRIBUTING: Node 24 + pnpm + Bun)
pnpm install && pnpm dev

박스 스모크 테스트: 헤드리스 serve로 끝까지 돌려 보기

박스 스모크(AppImage v1.4.229, 헤드리스 serve, 로그인·텔레메트리 없음): serve 약 3초, 워크트리 0.34초, 병렬 3개 OK, 재시작 후 터미널 12/12 생존
박스 스모크(AppImage v1.4.229, 헤드리스 serve, 로그인·텔레메트리 없음): serve 약 3초, 워크트리 0.34초, 병렬 3개 OK, 재시작 후 터미널 12/12 생존

박스는 Node 20이라 소스 빌드(Node 24 + pnpm 12 필요)는 하지 않고, 공식 릴리스 orca-linux.AppImage(265,301,177바이트, sha256 033e947e…7da0)를 --appimage-extract로 풀어 썼다. 격리된 HOME/XDG 디렉터리, DO_NOT_TRACK=1·ORCA_TELEMETRY_DISABLED=1, 페어링 끔(--no-pairing), 에이전트 로그인 없음 조건이다. “에이전트” 자리에는 파일을 수정하는 파이썬 한 줄짜리 가짜 에이전트를 넣었다.

항목 결과 판정
CLI 기본 orca-ide --version → 1.4.229 (0.10초), status --json → runtime not_running, agent-context → 281개 명령 스키마 v1, skills list → 10개 토픽 통과
serve 기동 serve --port 16768 --no-pairing --json → 약 3초 만에 orca_server_ready. orcad 0.1.0, 번들 Node 24.21.0, 터미널 데몬 PTY 자체 시험 healthy(9ms) 통과
저장소 등록 repo add --path demo 0.22초. 기본 setupRunPolicy는 run-by-default 통과
병렬 워크트리 3개 worktree create 3개 동시 실행 → 모두 ok. 경로 ~/orca/workspaces/demo/<이름>, 브랜치 t/<이름>(git user.name 접두어) 통과
셋업·복사 --setup run이면 orca.yaml setup 실행(SETUP_OK 생성), --setup skip이면 미실행. .worktreeinclude의 .env는 두 경우 모두 별도 inode로 복사 통과
단일 생성 지연 작은 저장소 기준 worktree create 0.34초. defaultTabs로 워크트리당 터미널 3개(Agent·Git status·Setup) 정보
가짜 에이전트 terminal create --command … 0.15초 → terminal read에 AGENT_DONE, terminal send 'git diff --stat' → calc.py +3줄. 메인 체크아웃은 깨끗 통과
메타데이터 worktree set --comment … --workspace-status in-review 정상 반영, worktree ps에 미리보기·터미널 수 표시 통과
오케스트레이션 Orca 터미널 밖: no_active_sender_terminal 거부. Orca 터미널 안: run-create(run_…)·task-create(status ready)·task-list 정상(헤드리스 serve에선 별도 Experimental 토글 없이 동작) 통과(조건부)
서버 재시작 serve에 SIGINT → 터미널 데몬과 셸 12개 생존. 재기동 약 3초, terminal list 12개·같은 핸들 재부착, 오케스트레이션 task도 그대로 통과
정리 worktree rm --force 0.24초 → 디렉터리와 브랜치 t/fix-b 함께 삭제 통과
자원 RSS: orcad 서버 약 290MB + Electron 런처 약 108MB + 터미널 데몬 약 86MB 정보
스모크에서 눈에 띈 기본값 세 가지. ① orca serve는 0.0.0.0에 바인드하며 스스로 “이 포트에 닿는 누구나 페어링을 시도할 수 있다”고 경고한다. ② 헤드리스 서버는 자격 증명을 “같은 디렉터리에 둔 키 + 머신 ID”로 봉인한다고 밝힌다. 그 계정 파일(또는 백업)을 읽을 수 있으면 풀 수 있다는 뜻이다. ③ 기동 시 에이전트 상태 규칙 다운로드가 HTTP 404로 실패했지만 기능에는 영향이 없었다. 돌리지 않은 것: 데스크톱 GUI, 실제 Claude/Codex 로그인, 모바일 페어링·릴레이, SSH 호스트, Cloud VM 레시피, 컴퓨터 유즈, 소스 빌드·단위 테스트.

신뢰 경계와 보안: 편의를 위해 넓힌 곳

경계 현재 동작 권장 대응
텔레메트리 패키지 빌드는 익명 사용 통계를 PostHog Cloud(미국)로 전송, 기본 켜짐. 파일·프롬프트·경로·브랜치명은 보내지 않는다고 문서화 Settings → Privacy 끄기, 또는 DO_NOT_TRACK=1 / ORCA_TELEMETRY_DISABLED=1
에이전트 폴더 신뢰 사전 기록 agent-trust-presets.ts가 cursor-agent·Copilot CLI·Codex의 “이 폴더를 신뢰하나요?” 메뉴가 뜨지 않도록 신뢰 파일을 미리 써 둠(붙여넣기 키 입력이 메뉴에 먹히는 문제 회피용이라고 주석에 설명) 신뢰하지 않는 저장소는 Orca 워크트리로 열지 말 것. 에이전트 자체 승인 정책은 따로 엄격하게
repo 훅 실행 .claude/·.codex/ 설정의 훅과 orca.yaml setup이 워크트리 생성 시 실행됨(스모크에서 --setup run 시 확인) 남의 저장소는 setup을 skip/ask로, 명령 소스 정책을 local-only로
원격 서버 페어링 페어링 URL은 비밀번호와 같고, 클라이언트별 철회 가능 토큰 발급. 문서가 “포트를 인터넷에 직접 열지 말라”고 명시(베타) Tailscale/WireGuard/SSH 포워딩 뒤에 두고 ACL을 좁게. --grant-desktop-control는 꼭 필요할 때만
모바일 릴레이 Orca Relay 경유 페어링은 Orca 계정 로그인 필요, LAN 직결은 주소만 민감 저장소는 LAN/Tailscale 직결 선호
계정 핫스왑 Claude/Codex 계정을 재로그인 없이 전환·사용량 추적 → 여러 자격 증명이 한 호스트에 모임 공용 서버에선 계정 분리, 백업 대상에서 자격 증명 디렉터리 관리
아티팩트 공유 orca artifacts share는 HTML/Markdown을 공개 링크로 게시(옵트인) 사내 정책상 기본 꺼둔 채 유지

비슷한 도구와 비교

도구 라이선스·언어 형태 강점 한계
stablyai/orca MIT · TypeScript/Electron IDE형 데스크톱 + 헤드리스 서버 + 모바일 + CLI 워크트리·SSH·원격 서버·VM 레시피, 오케스트레이션, diff 주석, 브라우저 디자인 모드 무겁다(AppImage 265MB, 서버 RSS 수백 MB), 텔레메트리 기본 ON
smtg-ai/claude-squad AGPL-3.0 · Go (8,620★) 터미널 TUI로 여러 에이전트 세션 관리 가볍고 터미널 친화적 IDE·원격 런타임·모바일 같은 상위 기능은 범위 밖
BloopAI/vibe-kanban Apache-2.0 · Rust (28,390★) 칸반 보드로 코딩 에이전트 작업 관리 작업 보드 중심 흐름 터미널·에디터를 한 앱에서 쓰는 IDE 경험은 Orca 쪽이 넓음
stravu/crystal → Nimbalyst MIT · TypeScript (3,134★) 병렬 워크트리에서 Codex·Claude Code 세션 같은 문제의식의 초기 구현 저장소 설명상 Nimbalyst로 이전, 마지막 푸시 2026-02-27 KST
manaflow-ai/cmux 라이선스 API상 NOASSERTION · Swift (28,250★) Ghostty 기반 macOS 터미널, 에이전트 알림 네이티브 터미널 성능 macOS 전용, 워크트리 관리보다 터미널에 집중
git worktree + tmux 직접 — 스크립트로 직접 구성 의존성·텔레메트리 0, 완전 통제 상태 추적·알림·리뷰·재개를 모두 직접 만들어야 함

이 블로그에서 앞서 다룬 도구와도 위치가 다르다. trycua/cua(2245)는 에이전트가 GUI를 조작하는 컴퓨터 유즈 인프라, ECC(2884)와 CLI-Anything(3030)은 에이전트 안쪽의 하네스·도구층이다. Orca는 그 바깥에서 여러 에이전트 프로세스의 작업 공간과 수명을 관리하는 층으로, 위 도구들과 경쟁하기보다 함께 쓰이는 관계다.

평가 방법: 우리 팀에 맞는지 재는 법

지표 측정 방법 판단 기준
워크트리 생성 비용 실제 모노레포에서 orca worktree create + setup 완료까지 시간, 디스크 증가량 setup이 매번 수 분이면 sharedDirectories로 node_modules 링크 검토
병렬 처리량 같은 이슈를 에이전트 3~5개에 fan-out → 머지 가능한 결과 수, 리뷰 시간 “5개 중 1개 채택”이 비용 대비 의미 있는지 판단
복원력 앱/서버 재시작, 노트북 슬립, SSH 끊김 후 터미널·세션 재부착 여부 스모크처럼 serve 재시작으로 간단히 재현 가능
자원 상한 에이전트 N개일 때 메모리·CPU, ORCA_TERMINAL_MEMORY_MAX·ORCA_TERMINAL_PROCESS_CEILING(Linux, 실험) 효과 공용 서버라면 터미널별 메모리 상한부터
거버넌스 텔레메트리 끄기 적용 여부, 페어링 토큰 목록, 신뢰 사전 기록 대상 저장소 도입 전 보안팀과 체크리스트 합의

트레이드오프와 주의점

이슈 내용 대응
무게 Electron + 별도 Node 런타임 + 데몬. 작은 노트북에서 에이전트 여럿과 함께면 메모리 압박 무거운 작업은 Remote Orca Server/SSH로 넘기기
변화 속도 거의 매일 릴리스, 열린 이슈+PR 8천 건 이상. 기능이 빨리 늘지만 동작도 자주 바뀜 팀 단위로 버전 고정 후 주기적 업그레이드
실험 기능 비중 오케스트레이션·하이버네이션·Native chat·Cloud VM이 Experimental 핵심 워크플로를 실험 기능에 걸지 말 것
설정 함정 orca.yaml 중복 키 → 전체 무시, primary vs 새 워크트리 읽기 위치 차이, .worktreeinclude glob 미지원 git check-ignore로 대상 확인, YAML 린트에 중복 키 검사 추가
플랫폼 차이 Linux CLI 이름 orca-ide, Windows setup은 .cmd 러너, macOS 전용 네이티브 헬퍼 크로스 플랫폼 팀은 setup 스크립트를 양쪽에서 시험
에이전트 품질은 별개 Orca는 그릇일 뿐, 결과 품질·비용은 각 에이전트와 구독에 좌우 병렬화 전에 단일 에이전트 성공률부터 확인

누가 도입하면 좋은가

대상 얻을 것 우선순위
에이전트 여러 개를 매일 병렬로 돌리는 개인 개발자 워크트리 격리·상태 추적·알림·diff 리뷰가 한 화면에 높음
원격 GPU/개발 서버를 쓰는 팀 SSH 워크트리·Remote Orca Server로 노트북 슬립과 무관하게 실행 높음
에이전트 오케스트레이션을 실험하는 플랫폼 엔지니어 Run/Task/Dispatch/Gate와 281개 CLI로 코디네이터-워커 패턴 구현 중간(실험 기능)
보안 요구가 엄격한 조직 텔레메트리·신뢰 사전 기록·페어링 경계를 정책으로 통제해야 도입 가능 신중
에이전트를 가끔 하나만 쓰는 사용자 터미널 하나로 충분, Orca의 무게가 이득보다 큼 낮음
도입 체크리스트. ① 첫 실행 전 ORCA_TELEMETRY_DISABLED=1 또는 Privacy 토글 ② 저장소별 setup 정책을 ask로 시작 ③ 신뢰할 수 없는 저장소는 Orca로 열지 않기(폴더 신뢰 사전 기록) ④ orca serve는 Tailscale 등 사설망 뒤에만, 페어링 토큰 정기 점검 ⑤ orca.yaml·.worktreeinclude를 저장소에 커밋하고 primary 체크아웃에 반영 ⑥ 팀 공통 버전 고정.

정리

Orca의 본질은 “에이전트 IDE”라기보다 에이전트 프로세스를 위한 작업 공간·수명 관리 런타임이다. 작업마다 git 워크트리를 주고, setup·복사 규칙으로 환경을 재현하고, PTY를 별도 데몬에 맡겨 UI·서버 재시작과 분리했으며, 그 전부를 281개 명령의 JSON CLI로 에이전트에게도 열어 두었다. 박스에서 헤드리스로 돌려 보니 워크트리 생성 0.34초, 병렬 3개 생성, 서버 재시작 후 터미널 12개 재부착까지 문서대로 동작했다. 반면 0.0.0.0 바인드, 기본 켜진 텔레메트리, 에이전트 폴더 신뢰 사전 기록처럼 편의를 위해 넓힌 경계도 분명하다. 워크트리 모델과 런타임 분리는 적극적으로 쓰되, 네트워크·텔레메트리·신뢰 경계는 내 기준으로 좁혀서 도입하는 것이 지금 시점의 합리적인 사용법이다.