용어 사전
워크트리 격리란?
TL;DR
워크트리 격리란 각 AI 에이전트가 자체 코드 사본을, 자체 브랜치에서, 자체 폴더로 받는 방식입니다. 그러면 에이전트들이 같은 파일을 동시에 고쳐도 서로 덮어쓰지 않습니다. 병합할 때까지 메인 체크아웃은 그대로입니다. Pane은 모든 pane에 이 구성을 자동으로 해 줍니다.
워크트리 격리란 모든 AI 에이전트가 각자 코드 사본에서, 각자 브랜치로, 각자 폴더에서 작업하는 방식입니다. 그러면 여러 에이전트가 같은 파일을 동시에 고쳐도 서로 덮어쓰지 않고, 병합할 때까지 메인 체크아웃은 그대로 유지됩니다.
문제
폴더 하나를 함께 쓰는 에이전트들은 결국 서로의 작업을 덮어씁니다.
에이전트 A에게 로그인 페이지를 다시 작성하게 하고, 에이전트 B에게 회원가입 흐름을 추가하게 했다고 해 봅시다. 둘 다 auth.ts을 바꿔야 합니다. 폴더 하나를 같이 쓰면 에이전트 B가 자기 버전을 저장하면서 에이전트 A의 수정을 조용히 덮어씁니다. 두 에이전트 모두 알아채지 못하고, 당신은 나중에야 알게 됩니다.
그래서 한 디렉터리에서 여러 에이전트를 돌리는 건 도박입니다. 두 에이전트가 같은 파일을 건드리기 전까지는 잘 돌아가다가, 그 순간 누군가의 작업이 사라집니다.
해결 방법
에이전트마다 워크트리 하나. 파일과 브랜치는 따로, 기록은 공유합니다.
에이전트마다 자체 git 워크트리를 주세요. 같은 기록을 공유하면서 브랜치와 폴더는 따로 쓰는 방식입니다. 에이전트 A는 한쪽에서, 에이전트 B는 다른 쪽에서 작업합니다. 서로 다른 사본을 고치므로 둘 다 auth.ts을 수정할 수 있습니다.
my-project/ ← main branch, untouched
my-project/worktrees/
├─ login-rewrite/ ← agent A, branch login-rewrite
└─ signup-flow/ ← agent B, branch signup-flow격리되는 것
파일, 브랜치, 셸은 분리됩니다. 기록, 원격 저장소, git 객체는 공유됩니다.
| 격리됨 | 공유됨 |
|---|---|
| 파일과 커밋하지 않은 변경 사항 | git 기록과 커밋 |
| 브랜치 | 원격 저장소(origin) |
| 셸 상태와 환경 변수 | git 설정 |
| 작업 디렉터리 | 객체 저장소(디스크 공간 절약) |
Pane의 처리 방식
Pane이 모든 pane의 워크트리를 자동으로 만들고 정리합니다.
pane을 만들면 Pane이 미리 준비해 둔 워크트리를 넘겨주고, 새 브랜치를 만들고, .env 파일과 에이전트 설정, node_modules를 복사한 뒤 그곳에서 에이전트를 시작합니다. pane을 보관하면 Pane이 저장되지 않은 작업이 있는지 확인하고 워크트리를 제거합니다. git worktree add를 직접 입력할 일이 없습니다.
격리가 다루지 않는 것
워크트리는 에이전트의 파일을 분리할 뿐, 에이전트가 할 수 있는 일을 샌드박스로 막지는 않습니다.
워크트리는 폴더일 뿐 샌드박스가 아닙니다. 에이전트는 여전히 사용자 권한으로 실행되므로, 경로로 다른 워크트리의 파일을 읽거나, 네트워크에 접근하거나, 저장소 밖의 것을 바꿀 수 있습니다. 실제로는 에이전트가 작업 폴더 안에 머물지만, 확실한 제한이 필요하다면 컨테이너나 VM에서 실행하세요.
git 밖에서 공유되는 것도 있습니다. 앱이 쓰는 데이터베이스, 개발 서버 포트, 전역 패키지 캐시 같은 것들입니다. Pane은 각 pane에 PANE_PORT로 별도 포트 블록을 줍니다. 데이터베이스는 setup 스크립트나 워크트리마다 하나씩 만들어 주는 도구를 쓰세요.
관련 문서
출처
- 정정
- 틀렸거나 오래된 내용이 있으면 알려 주세요. 수정하고 맨 위의 날짜를 갱신하겠습니다. GitHub에 이슈 열기
- 출처
자주 묻는 질문
작성자 Parsa Khazaeepoul, Pane 공동 창업자. .