4장 §2-A · Claude-Focused Multi-Agent Team Practice
빈 실습 폴더에서 시작해 Claude Desktop App/Claude Code 위주로 시나리오를 따라해보는 실습 가이드 — Desktop 앱을 기준으로 안내하고 CLI 대응을 이어서 소개한다 | ← 4장 §1 레퍼런스 문서로 돌아가기 | 4장 §2-B Antigravity 중심 →
AGENTS.md 명세로 적고, 그 명세를 Claude 계열에서는 사전 정의 서브에이전트 파일로 "구현"하는 순서를 따른다(2장 §5 AGENTS.md 참고). 정의는 하나, 실행 방식만 도구별로 다르다는 원칙을 손으로 확인하는 것이 이 실습의 핵심 목표다. Antigravity에서의 대응 방법은 4장 §2-B를 참조한다.
준비: 필요한 프로그램 설치
아래 실습은 Claude Desktop App과 Claude Code(CLI) 위주로 진행된다. 로컬 환경에 이 도구들이 아직 없다면, 이 핸드북에 함께 담아 둔 환경 설정 자동화 도구인 setup 가이드가 이 장의 실습에 정확히 필요한 구성을 자동으로 설치해준다. 안내에 따라 스크립트를 내려받아 로컬에서 실행하면 된다.
스크립트를 실행하기 전에 사전 설치 체크리스트를 먼저 읽어본다. 이 문서에는 다음 전제 조건이 정리되어 있다.
- 활성 상태의 Claude Pro/Max 구독 그리고 Antigravity 사용을 위한 Google 계정 (개별 API 키가 아니라 구독제/계정 기반 플랜이어야 한다)
gh auth login을 진행할 수 있는 GitHub 계정- 최소 5GB의 여유 디스크 공간
- 관리자(admin) 또는 sudo 권한
① 브라우저에서 github.com/signup에 접속한다.
② 이메일 주소, 비밀번호, 사용자 이름(username)을 입력한다 — username은 나중에 저장소 URL(
github.com/<username>/...)에 그대로 쓰이므로 신중히 정한다.③ 자동 가입 방지를 위한 퍼즐/코드 인증을 통과한다.
④ 가입 시 입력한 이메일로 온 인증 메일을 열어 이메일 인증을 완료한다 — 이 단계를 건너뛰면 이후
gh auth login이나 저장소 생성이 막힐 수 있다.⑤ 무료(Free) 플랜으로 가입하면 충분하다 — 이 핸드북의 실습·PR 연습에는 유료 플랜이 필요 없다.
가입이 끝나면 GitHub CLI(
gh)가 위 설치 스크립트에 포함돼 함께 설치되고, 아래 gh auth login 명령으로 터미널을 그 계정과 연결한다.
gh auth login # 안내에 따라: GitHub.com 선택 → HTTPS 선택 → 브라우저로 로그인(권장) 선택 # 브라우저가 열리면 방금 만든 계정으로 로그인하고 인증 코드를 확인한다
Windows에서 설치하기
이 핸드북의 경로 표기가 Windows 기준이므로, Windows 사용자는 아래 명령으로 5throck/setup 저장소를 클론한 뒤, PowerShell을 관리자 권한으로 실행해서 이어지는 명령을 돌린다.
① 시작 메뉴를 열고
PowerShell을 검색한다.② 검색 결과의 "Windows PowerShell"을 마우스 우클릭한다.
③ 나오는 메뉴에서 "관리자 권한으로 실행"을 선택한다.
④ 사용자 계정 컨트롤(UAC) 창이 뜨면 "예"를 눌러 승인한다.
창 제목 표시줄에
관리자: Windows PowerShell처럼 "관리자"가 붙어 있으면 제대로 연 것이다. winget 설치 등 일부 단계는 관리자 권한 없이 실행하면 오류가 나거나 조용히 건너뛰어질 수 있다.
git clone https://github.com/5throck/setup.git cd ./setup powershell -ExecutionPolicy Bypass -File .\setup-windows.ps1 # 선택 옵션: -WSL2, -WezTerm, -Docker, -Force (이미 설치된 도구도 재설치)
스크립트가 끝나면 터미널을 완전히 닫았다가 다시 열어야 PATH 변경 사항이 적용된다.
macOS / Linux에서 설치하기
아래 명령으로 5throck/setup 저장소를 클론해서 사용한다. macOS는 setup-mac.sh, Linux는 setup-linux.sh를 실행하며, 둘 다 --wezterm, --docker 선택 플래그를 지원한다.
git clone https://github.com/5throck/setup.git # macOS cd ./setup && bash setup-mac.sh # Linux cd ./setup && bash setup-linux.sh
설치 검증하기
운영체제와 무관하게 setup-common.ts를 bun으로 실행하면 설치 상태를 점검하는 체크리스트 표가 출력된다. 모든 항목이 ✅로 표시되면 아래 실습을 진행할 준비가 된 것이다.
cd ./setup && bun setup-common.ts
이 프로젝트가 설치하는 도구 중 이 장의 4도구 실습과 직접 관련된 것은 다음과 같다. Claude Desktop App, claude(Claude Code CLI), Antigravity(Desktop), agy(Antigravity CLI), 그리고 .claude/agents/*.md 기반 서브에이전트 실행에 필요한 bun, 이후 장에서 쓰이는 gh(GitHub CLI)까지 함께 설치된다.
agy)는 별도 런타임 설치가 필요 없는 단일 컴파일 바이너리다 — 압축 해제 후 PATH에 넣기만 하면 바로 실행된다. 옛 자료에 남아 있는 "Gemini 명령줄 인터페이스(CLI)를 npm으로 전역 설치" 같은 안내는 더 이상 유효하지 않다. 최신 설치 방법은 antigravity.google/docs/cli/getting-started에서 확인한다.
%USERPROFILE%\workshop-setup-logs\ 폴더에 로그가 남는다. 문제를 해결할 때 이 로그부터 확인한다.
harness-lab/를 새로 만들고, reviewer 역할을 도구 중립적인 AGENTS.md 명세로 먼저 적어 둔 뒤, Claude Desktop App에서 사전 정의 서브에이전트로 "구현"해 호출해본다. 이 폴더는 실습 전용이므로 다른 프로젝트 파일과 섞이지 않는다.
-
① 실습 폴더 생성 및 진입
현재 폴더 아래
harness-lab폴더를 새로 만들고 그 안으로 이동한다. 이후 모든 명령은 이 폴더 안에서 실행한다.mkdir -p harness-lab cd harness-lab
-
② 공통 역할 명세 작성 —
AGENTS.mdClaude나 Antigravity, 그 외 AGENTS.md 표준을 지원하는 어떤 도구로 열어도 같은 의미로 읽히도록,
reviewer역할을 도구 종속적인 표현 없이 순수 텍스트로 적는다. 이 파일 하나가 "무엇을 하는 역할인가"의 유일한 원본이 되고, 아래 두 도구는 각자의 방식으로 이 원본을 구현할 뿐이다. macOS/Linux/Git Bash에서는 아래 명령을 그대로 쓴다.cat > AGENTS.md << 'EOF' ## Agent: reviewer 역할: 텍스트 파일의 오탈자, 논리적 허점, 개선점을 검토한다. 입력: 검토 대상 텍스트 파일 경로 출력: 오탈자 · 논리적 허점 · 개선점 목록 권한: 읽기 전용 — 파일을 직접 수정하지 않는다. EOF
Windows PowerShell에서는
cat명령 자체는Get-Content의 별칭으로 파일 읽기에 그대로 쓸 수 있다. 다만<< 'EOF'처럼 여러 줄을 직접 넣는 heredoc 문법은 지원하지 않으므로, 같은 내용은 따옴표 있는 here-string(@'...'@)으로 만들어Set-Content로 파일에 쓴다.@' ## Agent: reviewer 역할: 텍스트 파일의 오탈자, 논리적 허점, 개선점을 검토한다. 입력: 검토 대상 텍스트 파일 경로 출력: 오탈자 · 논리적 허점 · 개선점 목록 권한: 읽기 전용 — 파일을 직접 수정하지 않는다. '@ | Set-Content AGENTS.md
터미널이나 별도 에디터에서 미리 파일을 만들지 않는다. 아래 세 단계를 그대로 따라간다 — 회색 코드 상자는 전부 "복사" 버튼으로 그대로 복사해서 붙여넣으면 되는 내용이다.
-
① Claude Desktop App에서 프로젝트 열기
Claude Desktop App을 실행하고, 방금 만든
harness-lab/폴더를 프로젝트로 연다. -
② 서브에이전트 생성 요청 — 채팅창에 아래 문장을 그대로 붙여넣고 전송
AGENTS.md에 적힌 reviewer 역할 명세를 그대로 따라서, .claude/agents/reviewer.md에 reviewer 서브에이전트를 만들어줘. tools는 Read, Grep만 허용하고 model은 sonnet으로 설정해줘.
Claude Desktop App이 AGENTS.md의 "역할/입력/출력/권한" 명세를 읽고, 그 내용을.claude/agents/reviewer.md의 YAML frontmatter(description,tools)와 시스템 프롬프트로 옮겨 Write 도구로 직접 생성한다. 명세는 그대로고 표현 형식만 도구에 맞게 바뀐 것이다 — 생성이 끝나면 채팅에 표시된 파일 내용을 AGENTS.md와 비교해본다. -
③ 검토 대상 파일 생성 + 서브에이전트 호출 — 같은 채팅창에 이어서 붙여넣고 전송
notes.txt 파일을 만들고 "이 프로젝트는 매우 좋다. 이것은 아주 좋다."라고 써넣은 뒤, reviewer 서브에이전트로 notes.txt를 검토해줘.
Claude Desktop App이Agent(Task) 툴을description="notes.txt 검토",subagent_type="reviewer"로 호출한다. 화면에는 서브에이전트가 스폰되는 과정과, 작업을 마친 뒤 메인 세션으로 돌아오는 요약 결과가 순서대로 표시된다.
Claude Code(CLI)에서도 동일하게 — 터미널에서 claude를 실행한 뒤 ②③의 문장을 그대로 채팅으로 붙여넣으면, 명령줄 인터페이스(CLI)가 똑같이 AGENTS.md 명세를 읽고 .claude/agents/reviewer.md를 직접 생성·호출한다. CLI에는 추가로 PostToolUse 등 자동화 훅이 발화한다는 차이가 있다(App에서는 훅이 발화하지 않는다).
harness-lab/.claude/agents/reviewer.md 파일이 실제로 생성됐는지, 그 안의 description·tools·model 필드가 요청한 대로인지 확인한다. 마지막 응답에는 오탈자·논리적 허점·개선점을 나눈 목록이 보여야 정상이다 — reviewer가 "수정했습니다" 같은 답을 하면 tools 제한이 잘못 적용된 것이다.
reviewer 서브에이전트로라는 표현이 빠졌거나 .claude/agents/reviewer.md 생성이 먼저 완료되지 않은 채로 ③을 요청한 경우다. ②의 응답에서 파일 생성이 끝났는지 먼저 확인한 뒤 ③을 보낸다.
harness-lab/ 폴더에서, 두 번째 역할 writer도 G-1과 같은 방식으로 AGENTS.md에 먼저 명세한 뒤, Claude Desktop App에 사전 정의 서브에이전트로 구현한다. writer가 먼저 초안을 쓰고 reviewer가 그 결과를 비평하는 파이프라인을 순서를 지켜 지휘하게 한다.
-
공통 역할 명세 추가 —
AGENTS.md에 writer 항목 이어쓰기G-1에서 만든 같은
AGENTS.md에writer역할을 이어서 적는다. reviewer 항목은 그대로 두고 아래 내용만 추가한다. macOS/Linux/Git Bash에서는 아래 명령을 그대로 쓴다.cat >> AGENTS.md << 'EOF' ## Agent: writer 역할: 주어진 주제로 3~5문장 분량의 짧은 초안을 작성한다. 입력: 주제, 저장할 파일 경로 출력: 초안 텍스트 파일 권한: 쓰기 허용 — 지정된 파일에만 저장한다. handoff_to: reviewer (초안 완료 후 검토로 이어짐) EOF
Windows PowerShell에서는 here-string을
Add-Content로 이어붙인다(Set-Content는 파일을 덮어쓰므로 반드시Add-Content를 써야 reviewer 항목이 지워지지 않는다).@' ## Agent: writer 역할: 주어진 주제로 3~5문장 분량의 짧은 초안을 작성한다. 입력: 주제, 저장할 파일 경로 출력: 초안 텍스트 파일 권한: 쓰기 허용 — 지정된 파일에만 저장한다. handoff_to: reviewer (초안 완료 후 검토로 이어짐) '@ | Add-Content AGENTS.md
G-1과 마찬가지로 파일을 미리 준비하지 않는다. G-1에서 열어 둔 같은 harness-lab/ 채팅에서 이어서 진행한다.
-
① writer 서브에이전트 생성 요청 — 채팅창에 그대로 붙여넣고 전송
AGENTS.md에 적힌 writer 역할 명세를 그대로 따라서, .claude/agents/writer.md에 writer 서브에이전트를 만들어줘. tools는 Write, Read를 허용하고 model은 sonnet으로 설정해줘.
Claude Desktop App이 AGENTS.md의 writer 명세를 읽고 Write 도구로.claude/agents/writer.md를 직접 생성한다. G-1에서 이미 만들어 둔reviewer.md와 같은.claude/agents/폴더 안에 나란히 놓인다 — AGENTS.md의handoff_to: reviewer가 다음 단계에서 실제로 이어진다. -
② writer → reviewer 순차 파이프라인 실행 요청 — 같은 채팅창에 이어서 붙여넣고 전송
writer 서브에이전트로 draft.txt에 '원격 근무의 장점' 주제 초안을 쓰게 하고, 완료되면 reviewer 서브에이전트로 draft.txt를 검토해줘. 두 단계를 순서대로 진행해.
메인 세션은 먼저subagent_type="writer"로Agent를 호출해draft.txt를 생성시키고, 그 결과가 돌아온 뒤에야subagent_type="reviewer"호출을 보낸다. 두 전문가 사이의 의존 관계를 조율하는 것은 서브에이전트가 아니라 메인 세션의 몫이다.
writer 호출 → 완료 → reviewer 호출 → 완료 순서로 두 번의 서브에이전트 스폰이 표시되어야 정상이다. 한 번만 표시된다면 오케스트레이터가 파이프라인을 한 단계로 합쳐버린 것이니, 요청 문장에 "순서대로"가 명시됐는지 다시 확인한다. 완료 후 harness-lab/draft.txt를 열어 초안이 실제로 저장돼 있는지도 확인한다.
Claude Code(CLI)에서도 동일하게 — 같은 writer.md/reviewer.md를 그대로 쓰고, 터미널에서 ①②의 문장을 그대로 붙여넣으면 동일하게 순차 디스패치된다.
writer·reviewer 두 서브에이전트는 그대로 두고, 요청의 성격만 바꿔가며 오케스트레이터가 실제로 누구를, 몇 번, 어떤 순서로 호출하는지 관찰한다 — 서브에이전트 정의는 한 번도 새로 만들지 않는다는 점이 핵심이다.
D-1을 마친 같은 채팅에서 이어서 진행한다. 매번 어떤 서브에이전트가 몇 번 호출되는지 화면에 표시되는 과정을 눈여겨본다.
-
① 단순 요청 — reviewer 하나만 필요한 경우
draft.txt의 오탈자만 훑어봐줘.
오케스트레이터는 이번 요청에writer가 필요 없다고 판단해reviewer하나만 호출한다. 같은 팀(writer+reviewer)이 정의돼 있어도, 실제로 투입되는 인원은 요청마다 오케스트레이터가 그때그때 결정한다는 것을 보여주는 가장 단순한 예다. -
② 복합 요청 — writer와 reviewer를 두 관점으로 조합
draft2.txt에 '4일 근무제' 주제로 새 초안을 써줘. 초안이 완료되면, 그 초안을 문법 관점과 논리 관점 두 가지로 각각 독립적으로 동시에 검토해줘.
이번에는writer한 번(파이프라인의 첫 단계) 이후에reviewer가 "문법 관점"과 "논리 관점"이라는 서로 다른 지시를 받아 두 번 동시에(팬아웃) 호출된다. 파이프라인(writer → reviewer)과 팬아웃(reviewer ×2 동시 실행)이라는 두 오케스트레이션 패턴이 한 요청 안에서 조합되는 것을 확인할 수 있다 — 같은 두 서브에이전트로 ①과는 완전히 다른 모양의 워크플로우가 만들어졌다.
.claude/agents/에 미리 고정돼 있지만, 후자는 매 요청마다 새로 결정된다.
Claude Code(CLI)에서도 동일하게 — 같은 writer.md/reviewer.md를 그대로 쓰고, 터미널에서 ①②의 문장을 그대로 붙여넣으면 동일하게 동작한다.
topic-a.txt, topic-b.txt 초안 작성)을 Claude Code Agent Teams로 병렬로 돌려본다.
같은 harness-lab/ 폴더에서 실험적 기능인 Agent Teams를 활성화한다. Desktop App에서는 teammateMode가 반드시 in-process여야 한다(tmux는 지원되지 않는다).
-
① 설정 파일 작성 (터미널) —
.claude/settings.json이 없다면 새로 만들고, 있다면 아래 두 키를 병합macOS/Linux/Git Bash에서는 아래 명령을 그대로 쓴다.
이 명령은.claude/settings.json파일 전체를 덮어씁니다. 이미 다른 설정이 들어있는 파일이라면 기존 내용이 모두 사라지므로, 필요한 설정이 있다면 미리 백업하거나 아래 내용을 수동으로 병합하세요.cat > .claude/settings.json << 'EOF' { "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }, "teammateMode": "in-process" } EOFWindows PowerShell에서는 here-string으로 같은 파일을 만든다.
@' { "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }, "teammateMode": "in-process" } '@ | Set-Content .claude/settings.json -
② Claude Desktop App 재시작
설정을 적용하려면 Claude Desktop App을 완전히 종료했다가 다시 연다.
-
③ 팀메이트 병렬 스폰 요청 — 채팅창에 아래 문장을 그대로 붙여넣고 전송
writer 팀메이트 두 명을 병렬로 스폰해서 하나는 topic-a.txt에 '재택근무', 다른 하나는 topic-b.txt에 '4일 근무제' 초안을 동시에 쓰게 해줘. 각 파일이 완료되면 reviewer 팀메이트가 검토하게 하고, 공유 작업 목록도 보여줘.
topic-a.txt/topic-b.txt 사이에 의존성이 없으므로 동시에 진행되고, 팀메이트 간에는 SendMessage로 직접 메시지를 주고받을 수도 있다. 다만 Desktop App에서는 일부 키보드 내비게이션(Shift+Down 등)이 제한된다.
.claude/settings.json이 harness-lab/ 폴더 기준으로 저장됐는지(다른 폴더에 저장하면 인식되지 않는다), ② ②에서 Claude Desktop App을 완전히 재시작했는지 두 가지를 놓친 경우다. JSON 문법 오류(쉼표 누락 등)로 설정 파일 자체가 무시되는 경우도 흔하니, 편집기로 열어 문법을 다시 확인한다.
Claude Code(CLI)에서도 동일하게 — 같은 설정과 같은 요청 문장이 그대로 동작한다. CLI에서만 teammateMode: "tmux"를 추가로 선택할 수 있어, tmux 분할 창으로 각 팀메이트의 화면을 나란히 볼 수 있다는 점이 Desktop App과 다르다.
G-1의 notes.txt보다 조금 더 복잡한, 논리적 허점이 있는 글을 준비한다. 채팅창에 아래 문장을 그대로 붙여넣는다.
-
① 검토 대상 파일 준비
argument.txt 파일을 만들고 다음 내용을 써줘: "재택근무는 항상 사무실 근무보다 생산적이다. 왜냐하면 재택근무를 하는 사람들이 재택근무가 좋다고 말하기 때문이다. 따라서 모든 회사는 재택근무만 해야 한다."
-
② haiku 티어로 검토
채팅창에 아래 문장을 그대로 붙여넣는다. Claude Desktop App이
reviewer.md의model필드를haiku로 바꾼 뒤 검토를 수행한다..claude/agents/reviewer.md의 model 필드를 haiku로 바꿔줘. 그리고 argument.txt를 reviewer 서브에이전트로 검토해줘.
-
③ sonnet 티어로 같은 요청 반복
같은 방식으로
model을sonnet으로 바꾼 뒤 검토한다. 순환 논증(circular reasoning) 같은 논리적 허점을 정확히 짚어내는지 haiku 결과와 비교한다..claude/agents/reviewer.md의 model 필드를 sonnet으로 바꿔줘. 그리고 argument.txt를 reviewer 서브에이전트로 검토해줘.
-
④ opus 티어로 같은 요청 반복
같은 방식으로
model을opus로 바꾼 뒤 검토한다. 응답 시간과 지적의 깊이가 ②③과 어떻게 다른지 기록한다..claude/agents/reviewer.md의 model 필드를 opus로 바꿔줘. 그리고 argument.txt를 reviewer 서브에이전트로 검토해줘.
.claude/agents/reviewer.md를 직접 열어 model: 값이 haiku/sonnet/opus 중 의도한 값과 정확히 일치하는지 확인한다.
실습 마무리 정리
5개 시나리오를 모두 마쳤다면, harness-lab/ 폴더를 어떻게 할지 정리한다. 다음 장(5장)에서 새 실습 폴더를 쓰기 때문에 반드시 남겨둘 필요는 없지만, 지금까지 만든 AGENTS.md·서브에이전트 정의를 비교해보고 싶다면 삭제 전에 한 번 훑어보는 것을 권장한다.
더 이상 필요 없다면 폴더 전체를 삭제한다. macOS/Linux/Git Bash에서는 아래 명령을 그대로 쓴다.
cd .. rm -rf harness-lab
Windows PowerShell에서는
cd .. Remove-Item -Recurse -Force harness-lab
git init && git add -A && git commit -m "harness-lab 실습 기록"으로 로컬 커밋만 남겨두는 방법도 있다. 이후 참고자료로 두고, 다음 장 실습은 별도의 새 폴더에서 시작해도 된다.
.claude/settings.json에 켜둔 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 플래그는 harness-lab/ 폴더에만 적용되는 설정이므로, 폴더를 삭제하면 함께 사라진다. 다른 프로젝트에서도 Agent Teams를 계속 쓰고 싶다면 그 프로젝트의 .claude/settings.json에 같은 설정을 별도로 추가해야 한다.
참고 영상
- ENIntroducing Claude Code — Anthropic 공식 Claude Code 소개 영상
- ENUltimate Claude Code Guide: How to Use Claude Code for Beginners in 2026 — Claude Code 사용법 상세 가이드
Claude Code/App 2026-07 기준 | 2026년 7월 14일 작성
← 4장 §1 멀티 에이전트 팀 활용 레퍼런스 · 4장 §2-B Antigravity 중심 실습 · 5장 ai-workspace-standards 소개 →