fork
Claude Code의 서브에이전트는 최근 몇 달 사이에 꽤 많이 바뀌었습니다. 6월에 서브에이전트가 또 다른 서브에이전트를 만들 수 있게 됐고(최대 5단계), 7월부터는 서브에이전트가 기본으로 백그라운드에서 실행됩니다. 그리고 8월에 fork mode가 기본으로 켜졌습니다.
먼저 이름 있는 서브에이전트(named subagent)와 fork의 차이부터 보면, 가장 큰 차이는 context를 어떻게 넘기느냐입니다. 이름 있는 서브에이전트는 새로 시작해서 메인 Claude가 써준 위임 프롬프트만 받습니다. 시스템 프롬프트와 도구는 정의 파일을 따르는데, 프로젝트용은 .claude/agents/test-writer.md, 사용자 공용은 ~/.claude/agents/test-writer.md처럼 둡니다. 모델도 그 파일의 model 필드를 쓰고 프롬프트 캐시도 메인 세션과 별도입니다. 반면 fork는 대화 전체를 물려받고 시스템 프롬프트, 도구, 모델 모두 메인 세션과 같습니다. 프롬프트 캐시도 메인 세션과 공유합니다.
그래서 이름 있는 서브에이전트는 독립 작업이나 도구 제한, 전문 역할이 필요할 때 맞고 fork는 지금까지 나눈 대화가 필요한 곁가지 작업에 맞습니다. 예를 들어 대화 중에 parser 규칙 세 개(슬래시 날짜 지원, 빈 문자열은 None, 오류 메시지에 원문 포함)를 정했는데 이 규칙이 아직 코드엔 없고 대화에만 있다고 해보겠습니다. fork는 상속받은 맥락만으로 바로 이 규칙들을 테스트할 수 있습니다. 이름 있는 서브에이전트도 위임 프롬프트에 세 규칙을 넣어주면 테스트할 수 있지만 전체 대화를 자동으로 받지는 않습니다.
fork를 쓰는 명령어는 /subtask와 /fork 두 가지입니다. /subtask는 이 세션 안에 fork 서브에이전트를 만들고 결과가 내 대화로 돌아옵니다. 코드 변경도 같은 체크아웃에서 일어납니다. /fork는 세션 전체를 복사해서 새 백그라운드 세션을 만들고 결과는 그 세션에 남습니다. 결과는 claude agents에서 확인하고 코드 변경은 별도 worktree에서 일어납니다.
# Start a fork subagent; its result comes back to this conversation
/subtask draft unit tests for the parser changes so far
# Copy this whole session into a separate background session
/fork
fork가 돌고 있으면 프롬프트 아래에 fork 패널이 뜹니다. ↑/↓로 이동하고 Enter로 transcript를 열고 x로 중지, Esc로 돌아갑니다. fork mode 자체를 끄고 싶으면 CLAUDE_CODE_FORK_SUBAGENT=0을 설정하면 됩니다.
Permission 처리도 바뀌었습니다. 예전엔 백그라운드 서브에이전트가 권한이 필요하면 조용히 자동 거절됐는데 이제는 그 권한 요청이 메인 세션에 표시됩니다.
마지막으로 정리하자면 **"이 작업에 지금까지 나눈 대화가 필요한가?"**를 스스로 물어보면 됩니다. 필요하면 /subtask로 fork를 띄우고, 필요 없거나 도구 제한이나 다른 모델, 전문 역할이 필요하면 이름 있는 서브에이전트를 씁니다. 아예 다른 방향으로 가보고 싶을 때는 /fork입니다.