Claude Code v2.1.49 신기능 리뷰 : --worktree로 멀티 에이전트 안전하게 쓰기, 병렬 작업 환경 구축 하기
- -
안녕하세요! 갓대희 입니다.
오늘은 Git Worktree 지원 기능에 대해 알아보려고 한다.

Claude Code로 여러 작업을 동시에 진행하다 보면 한 세션의 변경사항이 다른 세션과 충돌하거나, 실험적인 코드가 메인 브랜치를 오염시키는 경험을 해봤을 것이다. --worktree 플래그는 이런 문제를 근본적으로 해결해주는 기능이다.
목차
- Git Worktree란 무엇인가
- 기존 방식의 문제점
- Worktree가 해결해주는 것
- --worktree 플래그 기본 사용법
- 워크트리 생성 위치 및 브랜치 네이밍
- 자동 이름 생성
- 워크트리 정리(Cleanup) 동작
- 서브에이전트 Worktree 격리
- agent frontmatter isolation 설정
- WorktreeCreate / WorktreeRemove 훅
- --dangerously-skip-permissions와 조합
- 플래그 동작 방식과 위험성
- Worktree와 조합하는 이유
- 완전 자동화 패턴
- 병렬 에이전트 Bash 스크립트
- 모델별 조합 및 환경변수 설정
- .gitignore 설정
- 실전 활용 시나리오
- 보안 고려사항
- 트러블슈팅 및 FAQ
- 실제 검증 결과 (직접 실행)
- 참고 자료
Git Worktree는 하나의 저장소에서 여러 작업 디렉토리를 독립적으로 운용하는 Git 기능이다. Claude Code의
--worktree 플래그(v2.1.49+)를 사용하면 에이전트 세션마다 격리된 브랜치가 자동 생성되어, 병렬 작업 시 코드 충돌이 발생하지 않는다. --dangerously-skip-permissions와 조합하면 완전 자동화 파이프라인 구축도 가능하다.
1. Git Worktree란 무엇인가
기존 방식의 문제점
Claude Code로 여러 작업을 병렬로 진행하려고 하면 이런 상황이 발생한다:
- 터미널 A에서 기능 개발 중, 터미널 B에서 버그 수정 → 같은 파일을 동시에 수정하다 충돌 발생
- 실험적인 리팩토링을 진행하다가 메인 브랜치가 불안정한 상태가 됨
- 서로 다른 작업을 위해
git stash를 반복하다 작업 내용을 잃어버림 - 병렬 에이전트를 실행하면 서로의 변경사항이 뒤섞임
Worktree가 해결해주는 것
Git Worktree는 하나의 저장소에서 여러 개의 독립된 작업 디렉토리를 운용하는 기능이다. 각 워크트리는 자신만의 파일과 브랜치를 가지면서, 저장소의 히스토리와 리모트 연결은 공유한다.
┌─────────────────────────────────────────────┐
│ Git Repository │
│ (히스토리, 리모트 공유) │
└──────────────┬──────────────────────────────┘
│
┌─────────┴─────────┐
│ │
┌────▼────────┐ ┌──────▼──────────┐
│ main 브랜치 │ │ worktree 브랜치 │
│ /project │ │ /worktrees/auth │
│ │ │ │
│ 개발자 작업 │ │ Claude 에이전트 │
└─────────────┘ └─────────────────┘
| 구분 | 기존 방식 (단일 체크아웃) | Worktree 방식 |
|---|---|---|
| 병렬 작업 | 파일 충돌 위험 | 완전 독립 실행 |
| 브랜치 전환 | git stash 필요 | 동시에 여러 브랜치 유지 |
| 실험적 작업 | 메인 브랜치에 영향 | 격리된 브랜치에서 시도 |
| 에이전트 실행 | 서로 뒤섞임 | 각자 독립된 환경 |
| 정리 | 수동 정리 | 변경 없으면 자동 삭제 |
2. --worktree 플래그 기본 사용법
--worktree 플래그(단축형 -w)는 Claude Code v2.1.49에서 추가된 기능이다. (출처: 공식 CHANGELOG)
claude --worktree feature-auth
claude -w feature-auth
claude --worktree
claude -w
claude --worktree feature-auth # 터미널 1: 새 기능 개발
claude --worktree bugfix-123 # 터미널 2: 버그 수정
워크트리 생성 위치 및 브랜치 네이밍
공식 문서에 따르면 워크트리는 다음 경로에 생성된다:
- 디렉토리:
<repo>/.claude/worktrees/<name>/ - 브랜치명:
worktree-<name> - 분기 기준: 기본 리모트 브랜치에서 분기
예) claude -w feature-auth 실행 시:
→ 디렉토리: .claude/worktrees/feature-auth/
→ 브랜치: worktree-feature-auth (❓ 브랜치 네이밍 패턴은 공식 문서에 명시되지 않음 — 실제 동작은 버전에 따라 다를 수 있음)
자동 이름 생성
이름을 생략하면 Claude가 랜덤 이름을 자동 생성한다 (예: bright-running-fox).
claude -w
# → .claude/worktrees/bright-running-fox/
# → 브랜치: worktree-bright-running-fox
CLI 플래그 없이도 세션 진행 중에 Claude에게 직접 요청할 수 있다:"워크트리에서 작업해줘" 또는 "새 worktree를 시작해줘"라고 하면 Claude가 자동으로 워크트리를 생성하고 해당 환경에서 작업한다.
3. 워크트리 정리(Cleanup) 동작
워크트리 세션을 종료하면 Claude가 변경사항 유무에 따라 자동으로 정리를 처리한다. (출처: 공식 Common Workflows 문서)
| 세션 종료 시 상태 | 동작 |
|---|---|
| 변경사항 없음 | 워크트리 디렉토리 및 브랜치 자동 삭제 |
| 변경사항 또는 커밋 존재 | 사용자에게 유지/삭제 여부 프롬프트 표시 |
세션 종료
│
├─ 변경사항 없음? ─→ 워크트리 + 브랜치 자동 삭제
│
└─ 변경사항 있음? ─→ 프롬프트 표시
│
┌─────────┴─────────┐
│ │
유지 선택 삭제 선택
│ │
디렉토리 + 브랜치 디렉토리 + 브랜치
보존 (나중에 복귀) 삭제 (커밋 포함)
Claude 세션 외부에서 직접 워크트리를 관리하려면 Git 명령을 사용한다:
git worktree list
git worktree remove .claude/worktrees/feature-auth
git worktree prune
4. 서브에이전트 Worktree 격리
CLI 플래그 외에도, 서브에이전트 정의 파일에 isolation: worktree를 선언하여 해당 에이전트가 항상 격리된 워크트리에서 실행되도록 설정할 수 있다. (v2.1.49+) (출처: 공식 Sub-agents 문서)
agent frontmatter isolation 설정
---
name: isolated-refactor
description: 격리된 워크트리에서 안전하게 리팩토링 작업을 수행하는 에이전트.
대규모 코드 변경이나 실험적 리팩토링 요청 시 자동으로 사용됨.
tools: Read, Edit, Bash, Grep, Glob
model: sonnet
isolation: worktree
---
격리된 git 워크트리에서 코드 리팩토링을 수행합니다.
메인 브랜치에 영향을 주지 않고 변경사항을 시도한 후,
검토 후 선택적으로 병합할 수 있습니다.
| Frontmatter 필드 | 값 | 효과 |
|---|---|---|
isolation |
worktree |
에이전트 실행 시 임시 git 워크트리 자동 생성, 변경 없으면 자동 정리 |
permissionMode |
bypassPermissions |
에이전트 수준에서 권한 확인 건너뜀 (isolation과 조합 가능) |
maxTurns |
숫자 (예: 50) | 에이전트 최대 실행 턴 수 제한 |
WorktreeCreate / WorktreeRemove 훅
v2.1.50 CHANGELOG에 WorktreeCreate와 WorktreeRemove 훅 이벤트가 추가된 것으로 기록되어 있다. 워크트리 격리 환경이 생성/삭제될 때 커스텀 명령을 자동 실행할 수 있다.
| 훅 이벤트 | 트리거 시점 | 활용 예시 |
|---|---|---|
| WorktreeCreate | isolation 에이전트가 워크트리를 생성할 때 | 의존성 설치, 환경 초기화, 로그 기록 |
| WorktreeRemove | isolation 에이전트가 워크트리를 제거할 때 | 임시 파일 정리, 알림 발송, 로그 기록 |
{
"hooks": {
"WorktreeCreate": [
{
"hooks": [
{
"type": "command",
"command": "npm install && echo '워크트리 환경 초기화 완료' >> ~/.claude/worktree.log"
}
]
}
],
"WorktreeRemove": [
{
"hooks": [
{
"type": "command",
"command": "echo '워크트리 제거됨: $(date)' >> ~/.claude/worktree.log"
}
]
}
]
}
}
5. --dangerously-skip-permissions와 조합
공식 Permissions 문서의 경고:
bypassPermissions모드는 모든 권한 체크를 비활성화한다- Docker 컨테이너나 VM 같은 격리된 환경에서만 사용해야 한다
- 일반 개발 로컬 환경에서는 사용을 강력히 비권장
- 관리자는 managed settings로 이 모드를 완전히 차단할 수 있다
Worktree와 조합하는 이유
--worktree와 함께 사용하면 리스크가 현저히 줄어든다. 그 이유는:
- 브랜치 격리: Claude의 모든 변경이 별도 브랜치(
worktree-*)에만 적용됨 → 메인 브랜치는 안전 - 결과 검토 후 병합: 작업 완료 후 결과를 검토하고 선택적으로 merge
- 자동 정리: 문제가 있으면 워크트리를 삭제하면 그만
- 병렬 독립성: 여러 에이전트가 서로의 작업을 방해하지 않음
단, 워크트리 격리는 완전한 샌드박스가 아니다. Bash 명령은 여전히 시스템 전체에 영향을 줄 수 있으므로, 완전한 격리를 위해서는 Docker/VM을 사용해야 한다.
완전 자동화 패턴
-p (--print 모드, 비대화형 출력 모드)와 함께 조합하면 완전 비대화형 자동화가 가능하다.
claude -w feature-payment \
--dangerously-skip-permissions \
-p "결제 모듈을 리팩토링하고 테스트를 통과시켜라" \
--output-format json
claude -w debug-session \
--dangerously-skip-permissions \
-p "에러 로그를 분석하고 원인을 수정하라" \
--output-format stream-json \
--verbose
병렬 에이전트 Bash 스크립트
여러 워크트리를 동시에 실행하는 병렬 파이프라인 예시.
#!/bin/bash
# 각 작업 정의 (이름 → 프롬프트)
declare -A tasks
tasks["auth"]="인증 모듈 리팩토링: JWT 토큰 처리 개선 및 보안 강화"
tasks["db"]="데이터베이스 레이어 최적화: N+1 쿼리 해결 및 인덱스 추가"
tasks["api"]="API 엔드포인트 타입 안전성 강화: TypeScript 타입 추가"
mkdir -p output
# 모든 작업을 병렬로 실행
for name in "${!tasks[@]}"; do
claude -w "refactor-${name}" \
--dangerously-skip-permissions \
-p "${tasks[$name]}" \
--model claude-sonnet-4-6 \
--max-turns 30 \
--output-format json \
> "output/${name}.json" 2>&1 &
echo "시작: refactor-${name} (PID: $!)"
done
# 모든 병렬 작업 완료 대기
wait
echo "✅ 모든 병렬 작업 완료"
# 결과 요약
for name in "${!tasks[@]}"; do
echo "=== ${name} 작업 결과 ==="
jq -r '.result // "오류 발생"' "output/${name}.json" 2>/dev/null
done
병렬 실행 흐름:
터미널 (메인 프로세스)
│
├─→ claude -w refactor-auth ... & (PID 1234)
│ └─ .claude/worktrees/refactor-auth/
│ └─ worktree-refactor-auth 브랜치
│
├─→ claude -w refactor-db ... & (PID 1235)
│ └─ .claude/worktrees/refactor-db/
│ └─ worktree-refactor-db 브랜치
│
├─→ claude -w refactor-api ... & (PID 1236)
│ └─ .claude/worktrees/refactor-api/
│ └─ worktree-refactor-api 브랜치
│
└─ wait → 모든 작업 완료 후 결과 수집
6. 모델별 조합 및 환경변수 설정
모델별 조합
작업 복잡도에 따라 적절한 모델을 선택하면 비용과 성능의 균형을 맞출 수 있다.
claude -w quick-fix \
--dangerously-skip-permissions \
-p "타입 오류를 모두 수정하라" \
--model claude-haiku-4-5
claude -w feature-impl \
--dangerously-skip-permissions \
-p "로그인 기능 구현" \
--model claude-sonnet-4-6
claude -w arch-refactor \
--dangerously-skip-permissions \
-p "마이크로서비스 아키텍처로 전환 계획 수립 및 구현" \
--model claude-opus-4-6
환경변수를 통한 설정
export ANTHROPIC_MODEL="claude-sonnet-4-6"
# 이후 실행부터 자동으로 sonnet 사용
claude -w my-feature --dangerously-skip-permissions -p "기능 구현"
# API 키 설정
export ANTHROPIC_API_KEY="sk-ant-..."
# 백그라운드 작업 비활성화 (CI에서 유용)
export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1
# 자동 압축 임계값 조정 (기본 95%)
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50
# 실험적 에이전트 팀 기능 활성화
export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
--dangerously-skip-permissions 대신 필요한 도구만 선택적으로 허용하는 방법도 있다:
# 테스트 실행과 수정만 허용
claude -w test-fix \
-p "테스트 실패를 모두 수정하라" \
--allowedTools "Bash(npm run test)" "Bash(npm run build)" Read Edit
# git 관련 작업만 허용
claude -w git-tasks \
-p "변경사항을 커밋하고 PR을 생성하라" \
--allowedTools "Bash(git diff *)" "Bash(git log *)" "Bash(git commit *)" "Bash(gh pr *)"
7. .gitignore 설정
공식 문서에서 워크트리 사용 시 .gitignore에 추가하도록 강력히 권장하는 설정이다. (출처: 공식 Common Workflows Tip)
.claude/worktrees/
워크트리 디렉토리(.claude/worktrees/)가 .gitignore에 없으면, 메인 저장소에서 git status 실행 시 워크트리 내용이 추적되지 않은 파일(untracked files)로 표시되어 혼란을 줄 수 있다. 이 한 줄로 깔끔하게 해결된다.
8. 활용 시나리오 예시
시나리오 1: 기능 개발과 버그 수정 동시 진행
"로그인 기능 개발"과 "결제 버그 수정"을 동시에 Claude에게 맡기는 상황:
# 터미널 1: 로그인 기능 개발 (대화형)
claude -w login-feature
# 터미널 2: 결제 버그 수정 (헤드리스 자동화)
claude -w payment-bugfix \
--dangerously-skip-permissions \
-p "결제 실패 시 오류 메시지가 표시되지 않는 버그를 수정하라"
시나리오 2: 대규모 리팩토링 자동화
레거시 JavaScript 코드베이스를 TypeScript로 마이그레이션하는 작업을 모듈별로 병렬 처리:
- 각 모듈이 독립된 워크트리에서 작업 → 충돌 없음
- 각 워크트리의 결과를 개별 검토 후 메인 브랜치에 병합
- 문제 있는 모듈만 워크트리 삭제하고 재시도 가능
#!/bin/bash
MODULES=("auth" "payment" "notification" "user")
for module in "${MODULES[@]}"; do
claude -w "ts-migrate-${module}" \
--dangerously-skip-permissions \
-p "src/${module}/ 디렉토리의 JS 파일을 TypeScript로 마이그레이션하고,
타입 오류 없이 빌드가 통과되도록 완성하라." \
--model claude-sonnet-4-6 \
--max-turns 40 \
> "migrate-${module}.log" 2>&1 &
done
wait
echo "마이그레이션 완료! 각 worktree-ts-migrate-* 브랜치를 검토하세요."
시나리오 3: CI/CD 파이프라인 통합
GitHub Actions에서 Claude Code를 활용하는 공식 통합 방법: (출처: 공식 GitHub Actions 문서)
name: Claude Code Auto Fix
on:
pull_request:
types: [opened]
jobs:
auto-fix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "PR의 코드를 검토하고 타입 오류 및 린트 오류를 수정하라"
claude_args: |
--max-turns 20
--model claude-sonnet-4-6
--allowedTools "Bash(npm run *)" Read Edit Grep Glob
GitHub Actions 환경은 이미 격리된 runner에서 실행되므로, --dangerously-skip-permissions 대신 --allowedTools로 필요한 도구만 허용하는 것이 더 안전하고 감사(audit) 추적에 유리하다.
9. 보안 고려사항
권한 계층 구조
Claude Code의 권한 설정은 다음 우선순위로 적용된다: (출처: 공식 Permissions 문서)
우선순위 (높음 → 낮음)
1. managed settings (관리자 설정)
/Library/Application Support/ClaudeCode/managed-settings.json
↓
2. CLI 인수 (--dangerously-skip-permissions 등)
↓
3. 로컬 프로젝트 설정
.claude/settings.local.json
↓
4. 공유 프로젝트 설정
.claude/settings.json
↓
5. 사용자 설정
~/.claude/settings.json
10. 트러블슈팅 및 FAQ
Q1: git worktree 명령이 실패
확인사항:
- Git 저장소 안에서 실행하고 있는지 확인 (
git status) - Git 버전이 2.5+ 이상인지 확인 (
git --version) - 동일한 이름의 워크트리가 이미 존재하는지 확인 (
git worktree list)
Q2: 워크트리에서 .claude/agents/가 인식되지 않아요
v2.1.47 버그 수정 내용: 이전 버전에서는 git 워크트리에서 실행 시 커스텀 에이전트 및 스킬이 발견되지 않는 문제가 있었다. v2.1.47에서 수정되어 메인 저장소의 .claude/agents/와 .claude/skills/가 워크트리에서도 자동으로 포함된다. (출처: 공식 CHANGELOG #25816)
claude update
Q3: 워크트리가 너무 많이 쌓였어요
일괄 정리 방법:
git worktree list | grep ".claude/worktrees"
git worktree list --porcelain | grep "worktree.*\.claude/worktrees" | \
awk '{print $2}' | xargs -I{} git worktree remove --force {}
git branch | grep "worktree-" | xargs git branch -D
Q4: --dangerously-skip-permissions가 작동하지 않아요
조직/팀 환경이라면 관리자가 managed settings로 이 기능을 비활성화했을 가능성이 있다. 시스템 설정 파일을 확인해보자.
cat "/Library/Application Support/ClaudeCode/managed-settings.json" 2>/dev/null
cat /etc/claude-code/managed-settings.json 2>/dev/null
- WorktreeCreate / WorktreeRemove 훅 이벤트는 CHANGELOG에서 추가가 확인되었으나, 2026년 2월 기준 공식 Hooks Reference 문서에는 아직 등재되어 있지 않다 — 동작 확인은 직접 테스트 또는 CHANGELOG를 통해 검증 권장
- Agent Teams 기능은 현재 실험적(experimental) 상태로 기본 비활성화
- 심볼릭 링크가 포함된 작업 디렉토리에서 세션이 보이지 않는 버그가 수정됨 (정확한 수정 버전은 CHANGELOG에서 확인 권장)
11. 실제 검증 결과
이 가이드의 내용이 실제로 동작하는지 직접 실행하여 검증한 결과다. Claude Code v2.1.50, macOS 26.1 (Apple Silicon) m2max 환경에서 테스트 한 내용
- Claude Code 버전:
2.1.50 - OS: macOS 26.1
- 검증일: 2026-02-21
- 검증 방법:
git worktree명령어 직접 실행
검증 1: Claude Code 버전 확인
$ claude --version
2.1.50 (Claude Code)
검증 2: 워크트리 생성 — 경로 및 브랜치 패턴 확인
claude -w <name>이 내부적으로 사용하는 방식과 동일하게 git worktree add .claude/worktrees/<name> -b worktree-<name>을 실행해 경로와 브랜치명을 직접 확인했다.
$ git worktree add .claude/worktrees/verify-test -b worktree-verify-test
Preparing worktree (new branch 'worktree-verify-test')
HEAD is now at 88e452f feat: Gemini 3.1 Pro comprehensive guide
$ git worktree list
/Users/.../dev-blog 88e452f [main]
/Users/.../dev-blog/.claude/worktrees/verify-test 88e452f [worktree-verify-test]
- 워크트리 경로:
.claude/worktrees/<name> - 브랜치 패턴:
worktree-<name>
ex) claude -w worktree-verify-test

- sourcetree에서도 확인

검증 3: 워크트리 내부 .git 파일 구조
$ cat .claude/worktrees/verify-test/.git
gitdir: /Users/.../dev-blog/.git/worktrees/verify-test
$ cat .git/worktrees/verify-test/HEAD
ref: refs/heads/worktree-verify-test
워크트리 내부의 .git은 디렉토리가 아닌 일반 파일이며, 메인 저장소의 .git/worktrees/를 가리키는 포인터 역할을 한다. 이는 표준 Git Worktree 동작 방식이며, 이력과 객체를 공유하면서도 독립된 작업 디렉토리를 제공한다.
검증 4: 정리(Cleanup) 동작 — 변경사항 없을 때 자동 제거
$ git worktree remove .claude/worktrees/verify-test
$ git worktree list
/Users/.../dev-blog 88e452f [main]
# → 워크트리 디렉토리와 브랜치가 정상 제거됨
- 작업 종료시 해당 worktree 삭제 여부 확인

검증 5: .gitignore 현황
현재 이 저장소의 .gitignore에 .claude/worktrees/ 항목이 없음을 확인했다. 실제로 워크트리를 생성하면 해당 디렉토리가 Git에 추적될 수 있으므로, 이 가이드에서 권장하는 대로 .gitignore에 다음을 추가하는 것이 좋다.
.claude/worktrees/
12. 참고 자료
| 자료 | 링크 |
|---|---|
| 공식 Common Workflows (Worktree) | code.claude.com/docs/en/common-workflows |
| 공식 Sub-agents 문서 | code.claude.com/docs/en/sub-agents |
| 공식 Permissions 문서 | code.claude.com/docs/en/permissions |
| 공식 CLI Reference | code.claude.com/docs/en/cli-reference |
| 공식 Headless / Agent SDK | code.claude.com/docs/en/headless |
| 공식 GitHub Actions 통합 | code.claude.com/docs/en/github-actions |
| CHANGELOG (v2.1.49 ~ v2.1.50) | github.com/anthropics/claude-code/CHANGELOG.md |
| Git Worktree 공식 문서 | git-scm.com/docs/git-worktree |
| Boris Cherny 공식 발표 (Threads) | threads.com/@boris_cherny (worktree 발표) |
Claude Code의 --worktree 기능은 단순한 편의 기능이 아니라, 멀티 에이전트 협업의 핵심 인프라다. 각 에이전트가 독립된 브랜치에서 작업하고, 결과를 검토한 후 선택적으로 병합하는 워크플로우는 AI 기반 개발의 안전성과 생산성을 동시에 높여준다.
특히 --dangerously-skip-permissions와의 조합은 신뢰할 수 있는 격리 환경에서만 사용해야 하지만, 올바르게 설정하면 대규모 리팩토링이나 병렬 기능 개발을 크게 가속화할 수 있다. 한 번 써보면 돌아오기 어려운 강력한 기능이니, 한 번 도전해보자.
'AI > Claude' 카테고리의 다른 글
당신이 좋아할만한 콘텐츠
-
Claude Code Desktop 사용방법 (2026-2월업데이트) - App Preview(브라우저를 대체), PR Auto-fix/merge, 크로스플랫폼 세션 등 2026.02.22
-
Claude Code Security 핵심 기능과 제한사항 리뷰 - 보안팀이 주목할 도구, 취약점 발견에서 패치까지(기존 보안 도구 vs Claude Code Security) 2026.02.21
-
Claude Sonnet 4.6 출시 리뷰 - 신규 기능, 벤치마크, 시장 반응, 개발자 후기 등 2026.02.18
-
Claude Code Agent Teams - Claude Code 신기능 'Agent Teams' vs 'Subagent' 차이점 살펴보기(AI 개발 팀을 내 터미널로) 2026.02.11
소중한 공감 감사합니다