코딩 에이전트 하나를 터미널에서 돌리는 단계는 이미 지났다. 요즘 실무자들의 고민은 “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.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는 손님, 서버와 터미널 데몬이 주인

릴리스 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를 “도구”로 쓰도록 처음부터 설계된 셈이다.
워크트리 네이티브 모델: 무엇을 보장하나

문서의 첫 문장이 “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로 끝까지 돌려 보기

박스는 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 바인드, 기본 켜진 텔레메트리, 에이전트 폴더 신뢰 사전 기록처럼 편의를 위해 넓힌 경계도 분명하다. 워크트리 모델과 런타임 분리는 적극적으로 쓰되, 네트워크·텔레메트리·신뢰 경계는 내 기준으로 좁혀서 도입하는 것이 지금 시점의 합리적인 사용법이다.