0005. 앱 밖에서 한 git 변경은 메타데이터 감시와 초점 복귀로 따라가고, 외부 worktree는 모두 보여 준다
- 상태: 채택
- 날짜: 2026-09-24
- 관련: gitMetaWatcher.ts, gitMetaChange.ts
사이드바의 저장소와 worktree는 앱이 뜰 때와 앱 안의 단추로 worktree를 만들거나 지운 직후에만 다시 훑었다. 그래서 다른 터미널 앱이나 앱 안의 터미널에서 git checkout이나 git worktree add를 해도 사이드바는 옛 브랜치와 옛 목록을 보여 줬다. 에이전트가 앱 안의 터미널에서 worktree를 직접 만드는 흐름에서 특히 자주 일어난다.
이것을 고치려면 두 가지를 정해야 했다. 변화를 언제 알아챌지, 그리고 앱이 만들지 않은 worktree를 보여 줄지다.
감지는 두 시점으로 나눈다. 저장소마다 공통 git 디렉터리와 그 안의 worktrees 폴더를 감시하다가, HEAD와 worktree 폴더가 바뀐 알림을 받으면 이미 아는 저장소에 worktree 목록만 다시 묻는다. 창에 초점이 돌아오면 연결 목록 전체를 다시 훑어 새 저장소까지 잡는다.
앱이 만들지 않은 worktree도 모두 보여 준다. 앱을 다시 켜면 이미 모두 보였으므로 그 동작을 그대로 잇는다.
근거 / 검토한 대안
섹션 제목: “근거 / 검토한 대안”- 초점 복귀만 쓴다. 고칠 곳이 가장 적다. 그러나 앱 안의 터미널에서 한 일은 창을 한 번 벗어났다 돌아와야 보여, 에이전트가 앱 안에서 worktree를 만드는 주된 쓰임새를 놓친다.
HEAD파일 자체를 감시한다. 대상이 가장 작다. 그러나 git은 잠금 파일에 쓴 뒤 이름을 바꿔HEAD를 교체하므로 첫 교체 뒤에 감시가 끊긴다. 그래서HEAD를 담은 폴더를 보고 이름으로 거른다.- 기존 파일 감시(
watcher.ts)에.git을 섞는다. 파일이 하나 덜 생긴다. 그러나 그 감시가.git을 거르는 이유가 git 명령마다 바뀌는 인덱스와 잠금 파일이 다시 묻고 또 바뀌는 고리를 만들기 때문이라, 섞으면 그 고리가 되살아난다. - Orca처럼 외부 worktree를 기본으로 숨기고 골라 보이게 한다. 에이전트가 worktree를 많이 만드는 환경에서 목록이 짧아진다. 그러나 앱이 만든 worktree를 따로 기록하고, 설정과 골라 보이기 화면을 새로 만들어야 해 규모가 커진다. 지금은 그만큼 목록이 길어지는 불편을 겪지 않아 미뤘다.
- 앱 안이든 밖이든 브랜치 전환과 worktree 추가·삭제가 곧바로 사이드바에 반영된다. 새 저장소는 창에 초점이 돌아올 때 나타난다.
- worktree 단위에서 앱 밖에서 지운 worktree의 묶음은 앱 안에서 지웠을 때처럼 셸과 문서까지 정리된다. 그 worktree 안의 터미널에서 직접 지우면 그 터미널도 함께 닫힌다.
- 연결 목록 요청은 한 줄로 세워 차례로 처리한다. 겹쳐 돌리면 옛 값으로 읽은 결과가 새 결과를 덮어쓸 수 있어서다.
worktrees폴더는 재귀로 감시하므로 macOS와 Windows를 전제로 한다. 기존 파일 감시와 같은 전제다.- 외부 worktree가 너무 많아지면 숨기기를 다시 검토한다. 그때는 이 기록을 대체하는 새 기록을 쓴다.
- 앱이 띄우지 않은 Claude 세션의 감지는 이 결정과 별개로 계속 MVP 이후로 둔다.