1987 IEEE 1016Software Design Description사람에게 설계를 전하는 문서1998·2009 개정같은 SDD, 같은 독자(사람)2020 비활성2004 Ostroff 외Agile Specification-Driven Dev.TDD + 계약에 의한 설계2025-10-15 Böckelerspec-first · spec-anchored· spec-as-source2025-07 Kiro · 2025-09-02 Spec KitSpec-Driven Development에이전트가 읽는 스펙MDD · BDD모델 → 코드 생성실행 가능한 시나리오
같은 약어, 다른 말. Software Design Description(IEEE(Institute of Electrical and Electronics Engineers, 전기전자공학자협회) 1016, 1987)은 사람에게 설계를 전하는 문서, Spec-Driven Development는 스펙으로 개발을 이끄는 방식이다.
무엇이 바뀌었나목적은 같고, 읽는 쪽과 스펙의 위상이 바뀌었다
설계도를 먼저 그린다는 목적은 같다. 바뀐 것은 읽는 쪽과 스펙의 위상이다
설계 기술서 (IEEE 1016, 1987~)
스펙 주도 개발 (2025~)
읽는 쪽
사람 개발자. 빈틈은 상식과 맥락으로 채운다
사람 + 에이전트. 빈틈은 추측과 엉뚱한 구현이 된다
스펙의 위상
참고용 도면(advisory)
지켜야 할 계약(authoritative), 행동 제약
검증
사람의 리뷰
테스트·CI(Continuous Integration, 지속적 통합)가 스펙 위반을 막는 게이트
최신화
코드가 바뀌면 문서가 낡는다
스펙을 고치고 다시 생성(spec-anchored·as-source를 지향)
최종 자산
사람이 쓴 코드
스펙과 코드가 함께. 극단은 스펙이 소스(Tessl)
가까운 조상은 옛 설계 문서보다 TDD(Test-Driven Development, 테스트 주도 개발)·BDD(Behavior-Driven Development, 행동 주도 개발)다. 스펙을 먼저 묶고, 기계가 그 스펙으로 확인한다.
2025-10-15Birgitta Böckeler · martinfowler.com
SDD(스펙 주도 개발, Spec-Driven Development): 코드보다 스펙을 먼저 쓴다
Fowler 사이트에 실린 Böckeler의 글 첫머리와 ‘Definition(정의)’ 절. GitHub·Tessl의 설명도 인용한다.
“The spec becomes the source of truth for the human and the AI.”“스펙이 사람과 AI 모두에게 기준 문서(source of truth)가 된다.”Böckeler · 2025-10-15
스펙을 먼저 쓰는 documentation first를 세 수준(spec-first·anchored·as-source)으로 나눠 도구 비교의 기준을 준다.
글쓴이도 정의가 아직 유동적이라 한다. 스펙을 ‘자세한 프롬프트’로 쓰는 사람도 있다.
오늘 SDD 이야기의 기준 글. 이 글의 세 수준으로 Kiro·Spec Kit을 가늠한다.
SDD 세 수준Böckeler · martinfowler.com · 2025-10-15
SDD는 스펙을 얼마나 오래 쓰느냐로 세 수준이 나뉜다
1 · spec-first명세 우선작업 전에 스펙을 쓴다끝나면 스펙은 역할 끝Böckeler 확인Kiro·Spec Kit은 대체로 1수준2 · spec-anchored명세 유지스펙을 남겨 둔다고칠 때 스펙부터 고친다3 · spec-as-source명세가 곧 코드사람은 스펙만 고친다코드는 스펙에서 생성수명 연장코드가 생성물
같은 SDD라도 스펙의 수명이 다릅니다. 글쓴이는 Kiro와 Spec Kit이 대체로 spec-first라고 평가했습니다.
2025-07-14Kiro 공식 문서 · Specs
Kiro는 요구사항, 설계, 작업 파일 세 개를 차례로 만든다
kiro.dev/docs/specs
공식 문서 화면 캡처 · 2026-10-28 확인
Kiro 문서 ‘What are specs?’ 화면. 스펙의 종류(Feature·Bugfix·Quick)별로 IDE(Integrated Development Environment, 통합 개발 환경)·CLI(Command-Line Interface, 명령줄 인터페이스)·웹 지원 여부를 표로 보여 준다.
requirements.md: 사용자 스토리(사용자 입장의 요구)와 수용 기준(완료 조건). 버그는 bugfix.md로 시작
design.md: 구조, 시퀀스, 오류 처리, 테스트 전략
tasks.md: 하나씩 추적하는 Task 목록
단계가 끝날 때마다 사람이 문서를 확인하고 넘어가 방향을 일찍 바로잡는다.
작은 버그 하나가 사용자 스토리 4개·수용 기준 16개로 부풀었다(Böckeler).
프롬프트만 반복할 때의 ‘기록 없는 결정’을 파일 세 개로 푼 사례. 다음 장에서 문장 모양.
2026-10-28 확인Kiro 공식 문서 · Feature Specs · Requirements-First
Kiro는 요구사항을 “WHEN…SHALL…” 문장 틀(EARS)로 쓴다
kiro.dev/docs/specs/feature-specs
공식 문서 화면 캡처 · 2026-10-28 확인
Kiro Feature Specs 문서 첫머리. 새 기능을 단계별로 안내하는 방식이라 소개하고, 주요 장점(구조화된 접근·유연성)을 든다.
.kiro/specs/<이름>/
├─ requirements.md
├─ design.md
└─ tasks.md
# requirements.md (EARS = Easy Approach to Requirements Syntax, 요구사항 문장 형식, 문서 예시)WHEN a user submits valid registration data
THE SYSTEM SHALL create a new user account
→ 올바른 가입 정보를 제출하면, 시스템은 새 계정을 만든다
Anthropic 엔지니어링 글 본문. 압축만으로는 지시가 완벽히 넘어가지 않는 문제와, 첫 세션이 init.sh·진행 파일을 만드는 두 단계 해법.
# Anthropic 글의 인계 장치claude-progress.txt 한 일의 기록
feature list (JSON) 기능 목록
처음엔 모두 passes: false
init.sh 개발 서버 실행
git commit 세션마다 커밋
✓ 세션당 기능 하나, 끝에 기록
새 세션이 파일만 읽고 상태를 파악한다. 기능 목록은 JSON(JavaScript Object Notation, 자바스크립트 객체 표기법)으로 두어 모델이 덜 덮어쓴다.
첫 세션에 init.sh·진행 파일·기능 목록을 미리 준비하고, 매 세션 끝에 기록해야 한다.
8교시 진행 파일의 원형. 압축에만 기대지 않고 파일로 인계한다.
정리SDD와 압축 대비는 같은 해법이다
세션 경계를 넘는 것은 파일뿐이다
창 A대화·시도·결정 이유압축 또는 새 세션요약만 남는다창 B요약 + 다시 읽은 파일디스크의 파일 (그대로 남는다)spec.md무엇이 맞는 동작인가plan.md · tasks.md계획과 체크 표시progress.md한 일·결정 이유·다음 할 일git 커밋변경 이력읽어서 복구계속 기록
스펙, 계획, 진행 기록을 파일에 남기면, 압축이나 새 세션 뒤에도 같은 기준에서 다시 시작합니다.
정리5교시 요약 · 다음은 6교시
스펙이 붙잡고, 파일이 남는다
DDD · 도메인 경계 안에서프롬프트에 수준을 명시스펙(무엇을)Task 목록(어떤 순서로)실패하는 테스트(완료 기준)구현(통과할 때까지)PoC · MVP최소 구현, 계층 없음엔터프라이즈클린 아키텍처·경계빨강 → 초록범위를 정한다
스펙과 Task 목록은 딴길을, 파일은 압축을 막습니다. 다음 시간에는 스펙을 실패하는 테스트로 바꿉니다. → 6교시 TDD와 DDD
세 겹은 서로 다른 실패를 막습니다. 스펙은 SDD(Spec-Driven Development, 스펙 주도 개발), 테스트는 TDD(Test-Driven Development, 테스트 주도 개발), 경계는 DDD(Domain-Driven Design, 도메인 주도 설계)입니다. 오늘은 가운데 테스트부터 봅니다. → 5교시 SDD, 이어서 TDD
2023-12-11 개정Martin Fowler bliki · Test Driven Development
TDD: 실패하는 테스트를 먼저 쓴다
martinfowler.com/bliki/TestDrivenDevelopment.html
Martin Fowler bliki 화면 캡처 · 2026-10-28 확인
Fowler의 TDD 설명 글. 테스트 목록에서 하나 골라 쓰고(Red) → 통과시키고(Green) → 정리(Refactor)하는 반복 도식.
다음 기능의 테스트를 쓴다 (Red: 아직 실패)
통과할 때까지 구현한다 (Green: 통과)
동작은 그대로 두고 구조를 정리한다 (Refactor)
Kent Beck이 1990년대 후반 익스트림 프로그래밍의 일부로 발전시킨 기법
강사 운영 방식분량 때문에 못 하던 일을 에이전트가 한다
사람이 분량 때문에 건너뛰던 TDD를 AI에게
code.claude.com/docs/en/best-practices
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 모범 사례 문서의 ‘Instead of(이렇게 말하지 말고) / Try(이렇게)’ 표. “로그인 버그 고쳐” 대신 실패 재현 테스트를 쓰게 한다.
사람: 테스트 쓰는 시간이 구현만큼 들어 생략
AI: 테스트 수십 개를 쓰는 비용이 거의 없다
공식 문서의 프롬프트 예: “write a failing test that reproduces it, then fix it” (재현하는 실패 테스트를 쓰고, 그다음 고쳐라)
2026-10-28 확인Claude Code 문서 · Give Claude a check to run
완료는 에이전트의 말이 아니라 통과 결과
code.claude.com/docs/en/best-practices
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 문서의 ‘실행해서 확인할 수단을 주라’는 절. 통과·실패를 돌려주는 검증 수단 예시.
“Give Claude something it can run that comes back pass or fail.”“Claude에게 실행했을 때 통과나 실패를 돌려주는 무언가를 주어라.”Claude Code Docs · Best practices
검증 수단: 테스트 파일, 빌드 종료 코드, 린터(코드 규칙 검사기)
repo의 CLAUDE.md에 테스트 실행 명령을 적는다
“All tests pass(모두 통과)”만 믿지 말고 실행 출력을 요구
실제 실행 결과domain-testing 예제 · Python unittest · 강사 운영 방식
Red 확인이 먼저, Green은 그다음
1) 스텁(가짜 구현) · 테스트 실행 → Red(실패)
def submit(status):
return "submitted"
$ python3 transition_test.py
FAIL: test_submitted_cannot_be_submitted_again
AssertionError: ValueError not raised
Ran 2 tests ... FAILED (failures=1)
2) 구현 → Green(통과)
def submit(status):
if status != "draft":
raise ValueError("작성 중인 지원만 제출할 수 있습니다.")
return "submitted"
$ python3 transition_test.py
Ran 2 tests ... OK
규칙: 이미 제출한 지원은 다시 제출할 수 없다. 실패가 규칙을 가리키는지 확인한 뒤에 구현합니다.
2025-05-22Anthropic · Claude 4 발표문 · 지름길과 허점
에이전트는 테스트만 통과하는 지름길을 찾기도 한다
anthropic.com/news/claude-4
Anthropic 발표문 화면 캡처 · 2026-10-28 확인
Claude 4 발표문에서 모델이 지름길·허점을 쓰는 행동을 줄였다고 밝힌 문단.
지름길·허점을 쓰는 행동이 Sonnet 3.7보다 65% 덜 나온다고 발표했다(지름길에 취약한 에이전트 과제 기준).
줄었을 뿐 사라진 것은 아니다. 수치는 모델을 만든 회사가 직접 발표한 것이다.
모델이 좋아지길 기다리지 않고 구조로 막는다. 다음 장부터 그 대응이 이어진다.
실제 실행 결과같은 예제에서 테스트를 건드린 경우 · 강사 운영 방식
속임수 세 가지: 고치고, 건너뛰고, 박아 넣기
# 구현은 그대로 (규칙을 어긴 채)
def submit(status):
return "submitted"
# 에이전트가 테스트 쪽을 고침@unittest.skip("flaky")
def test_submitted_cannot_be_submitted_again(self):
...
$ python3 cheat_test.py
Ran 2 tests ... OK (skipped=1)
테스트 수정·삭제·skip(건너뛰기): 초록불이지만 규칙은 안 지킴
기대값 약화: 단언을 느슨하게 바꿈
하드코딩(정답 박아 넣기): 테스트 입력만 통과하는 분기
공통점: 실행 결과는 초록, 규칙은 어겨졌다
대응 4가지강사 운영 방식
속임수에 대한 대응: 막고, 대조하고, 직접 본다
에이전트의 속임수대응테스트 수정·삭제skip · 기대값 약화하드코딩(테스트 값만 통과)테스트 먼저 커밋(git diff로 대조)권한 deny · 훅테스트 파일 보호리뷰어 서브에이전트스펙과 대조사람이 직접실행해 보기
테스트를 먼저 커밋해 기준을 고정하고, 파일을 보호하고, 다른 눈으로 검토합니다. 마지막 판정은 사람입니다.
2026-10-28 확인Claude Code 문서 · Permissions
권한 deny: 테스트 파일은 수정 금지
code.claude.com/docs/en/permissions
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 권한 문서. allow·ask·deny 규칙의 뜻과, deny가 먼저 평가되는 순서를 설명한다.
테스트는 먼저 쓰고, 먼저 커밋하고, 못 고치게 합니다. 경계는 작게, 수준은 프롬프트에 한 줄로. → 7교시 서브에이전트와 워크트리
2회차 · 7교시Agentic Engineering 실무 · 2026-11-10
7교시
서브에이전트와 워크트리
2025-07서브에이전트
2025-05백그라운드 에이전트
2026-02--worktree
2026-02Codex 앱
2025-03-18 → 2025-07-14자동 압축 · Chroma ‘Context Rot’
압축만으로는 창이 모자라서, 일을 나눠 맡기게 됐다
research.trychroma.com/context-rot
Chroma 기술 보고서 화면 캡처 · 5교시에서 본 자료
Chroma의 기술 보고서(2025-07-14). 입력이 길어질수록 LLM(Large Language Model, 대규모 언어 모델) 성능이 고르지 않게 떨어진다는 것을 모델 18개로 확인했다.
스펙·테스트를 갖춰도 탐색과 로그가 창(한 번에 읽는 입력 범위)을 채운다
압축하면 결정의 이유가 사라진다
해법 ①: 일을 맡겨 창을 나눈다
해법 ②: 일을 맡겨 폴더를 나눈다
← 5교시 · 6교시
2025-07-24Claude Code 커스텀 서브에이전트(1.0.60) · 공식 문서
서브에이전트는 자기 창에서 일하고 요약만 돌려준다
code.claude.com/docs/en/sub-agents
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 공식 문서 ‘커스텀 서브에이전트 만들기’ 첫 화면. 검색 결과·로그가 메인 대화를 채우지 않게 별도 에이전트에 맡기는 기능이라고 설명.
“the subagent does that work in its own context and returns only the summary.”서브에이전트가 그 일을 자기 컨텍스트에서 처리하고, 요약만 돌려준다.Claude Code Docs · Create custom subagents
검색·로그가 자기 창에서 처리돼 메인 대화가 깨끗하다. 시스템 프롬프트·도구·권한도 따로 준다.
대화 이력과 읽은 파일을 보지 못한다. 요청도 보내므로 사용량은 메인과 같은 한도에서 차감된다.
압축이 쌓인 맥락을 줄인다면, 이쪽은 애초에 쌓이지 않게 한다. 7교시의 첫 번째 장치.
개념컨텍스트 창을 둘로 나누기
탐색은 다른 창에서, 메인에는 결론만
메인 세션 · 창 A목표·계획·판단서브에이전트 · 창 B파일 수십 개 읽기요약만 쌓임긴 테스트 로그검색 결과 수백 줄맡긴다요약 반환
서브에이전트는 대화 이력을 보지 못합니다. 메인이 작업 내용을 요약해 건네고, 서브에이전트는 거기서 시작합니다.
공식 문서Claude Code 내장 서브에이전트 · 2026-10-28 확인
기본 제공 서브에이전트 셋: 읽기 전용 둘, 만능 하나
이름
도구
쓰임
Explore
읽기 전용 (Write·Edit 거부)
파일 찾기, 코드 검색. 깊이를 quick(빠르게) · medium(보통) · very thorough(꼼꼼히)로 지정
Plan
읽기 전용 (Write·Edit 거부)
Plan 모드(계획만 세우는 모드)에서 코드베이스 조사
general-purpose
사용 가능한 모든 도구
탐색과 수정이 함께 필요한 복잡한 다단계 작업
직접 만들지 않아도 이미 쓰고 있다. 읽기 전용이라 조사만 시켜 안전하고 빠르다.
Explore·Plan은 CLAUDE.md(프로젝트 지침 파일)와 git 상태 없이 시작한다. 세부 동작은 버전마다 바뀐다.
일에 맞춰 도구를 제한하는 설계의 기본형. 8교시 리뷰어 서브에이전트도 같은 방향.
2025-07-24.claude/agents/*.md · 공식 문서 예시 그대로
서브에이전트는 마크다운 파일 한 장으로 정의한다
name · description(이름·설명)만 필수. description이 위임 기준
tools로 쓸 수 있는 도구를 제한
model로 가벼운 모델을 지정
본문 전체가 시스템 프롬프트(기본 지시문)
→ 8교시 실습에서 직접 만들기
# .claude/agents/code-reviewer.md---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---
You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.
✓ 읽기 도구만 → 코드를 고치지 못한다
✓ sonnet → 리뷰는 가벼운 모델로
공식 문서프런트매터 필드 · 저장 위치와 우선순위
필드 몇 개로 정의하고, 같은 이름이면 위쪽 위치가 이긴다
code.claude.com/docs/en/sub-agents
공식 문서 표 캡처 · 같은 이름이면 위쪽이 이깁니다
서브에이전트 정의 파일을 둘 수 있는 위치 표. 관리 설정, 실행 옵션, 프로젝트, 내 홈, 플러그인 순으로 숫자가 작을수록 우선.
필드
역할
disallowedTools
쓰지 못할 도구
permissionMode
권한 모드(승인 방식)
maxTurns
최대 턴 수(주고받는 횟수)
background
항상 백그라운드
isolation
worktree로 격리(별도 폴더)
공식 문서서브에이전트를 부르는 네 가지 방법
서브에이전트는 자동 위임·말로·@-멘션·--agent로 부른다
$ claude
> use the test-runner subagent to fix failing tests # 말로 지정> @"code-reviewer (agent)" look at the auth changes # @로 에이전트 지정># 아무 말 없어도 description이 맞으면 Claude가 알아서 위임$ claude --agent code-reviewer # 세션 전체를 그 에이전트로 실행✓ description에 “use proactively”를 넣으면 더 적극적으로 위임
! 좋은 description = 언제 맡길지에 대한 한 줄 기준
서브에이전트가 일하는 동안 메인은 다른 일을 할 수 있습니다(백그라운드). → 8교시
공식 문서서브에이전트 병렬 호출
독립된 조사는 동시에 시킨다
메인 에이전트“인증·DB·API를따로 조사해 줘”서브에이전트 A인증 모듈서브에이전트 BDB 모듈서브에이전트 CAPI 모듈요약 3개→ 메인 창에만 남음
공식 예시: “Research the authentication, database, and API modules in parallel using separate subagents”(인증·DB(Database, 데이터베이스)·API(Application Programming Interface, 응용 프로그램 인터페이스) 모듈을 서브에이전트 따로 병렬로 조사해 줘). 조사 경로가 서로 독립일 때 잘 맞습니다.
공식 문서 + 강사 운영 방식서브에이전트를 쓸 때와 안 쓸 때
탐색·로그·리뷰는 맡기고, 되묻는 일은 메인에서
맡긴다
서브에이전트가 맞는 일
출력이 길고 다시 볼 필요 없는 일: 탐색, 로그 읽기
도구·권한을 제한하고 싶은 일: 리뷰어
혼자 끝낼 수 있고 요약으로 돌려줄 수 있는 일
맡기지 않는다
메인에서 하는 일
자주 되묻고 고쳐 가는 일
계획·구현·테스트가 맥락을 공유하는 일
작고 빠른 수정
같은 파일을 동시에 고치는 일: 워크트리로 분리하거나 순서를 정한다
공식 문서기본값 · 2026-10-28 확인
서브에이전트는 맥락을 아끼지만 사용량은 줄이지 않는다
20
동시 실행 서브에이전트 기본 상한
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS
3
서브에이전트가 또 서브에이전트를 부르는 최대 단계(기본)
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH
×N
병렬로 돌린 만큼 토큰(AI가 처리하는 글 조각) 사용량도 증가
같은 사용량 한도에서 차감
기본값은 동시 20개, 중첩 3단계. → 결론: 맥락은 아끼지만 비용은 늘고, 결과가 길면 메인 창도 다시 찹니다.
질문 시간 · 약 5분
여기까지, 질문 받습니다
지금까지 다룬 것: 맥락을 나눠 쓴다 · 내장 서브에이전트 · 정의 파일 · 필드와 위치 · 서브에이전트 부르기 · 병렬 호출 · 언제 쓰고 안 쓰나 · 서브에이전트의 한계
해법은 작업마다 폴더와 브랜치(코드 갈래)를 따로 주는 것입니다. 로그인·검색 같은 작업을 동시에 시킬 때 필요합니다.
git worktreegit 공식 문서 · git-worktree (2.56.0 문서 기준)
git worktree로 한 저장소에서 브랜치마다 작업 폴더를 갖는다
git-scm.com/docs/git-worktree
git 공식 문서 화면 캡처
git 공식 문서의 git-worktree 설명. 한 저장소에 작업 폴더를 여럿 붙여 브랜치 여러 개를 한 번에 체크아웃(펼치기)할 수 있다.
$ git worktree add ../app-login -b feat/login
$ git worktree add ../app-search -b feat/search
$ git worktree list
/home/me/app a1b2c3d [main]
/home/me/app-login a1b2c3d [feat/login]
/home/me/app-search a1b2c3d [feat/search]$ git worktree remove ../app-login
✓ “check out more than one branch at a time”
= 브랜치 여럿을 한 번에 펼친다! 같은 브랜치는 두 곳에 못 연다(기본값)
git이 오래전부터 제공한 기능. 브랜치마다 폴더가 생기고 기록은 공유해, 합치기도 일반 머지다.
같은 브랜치는 두 곳에 못 연다. 새 체크아웃이라 의존성 설치 등 환경 준비가 따로 필요하다. 서브모듈은 실험적.
에이전트 병렬화의 해법은 새 발명이 아니라 오래된 git 기능. Claude Code·Codex가 이를 제품에 넣었다.
git worktree무엇을 나누고 무엇을 같이 쓰나
저장소 기록은 하나, 작업 파일은 각자
공유 · 저장소 .git (커밋 · 브랜치 · 원격)main 워크트리~/app · main링크드 워크트리../app-login · feat/login링크드 워크트리../app-search · feat/search워크트리마다 따로: 파일 · HEAD · 인덱스
커밋과 브랜치는 모든 워크트리에 즉시 보입니다. 파일, HEAD(현재 커밋 표시), 인덱스(커밋 대기 목록)는 워크트리마다 따로입니다.
2025-05-15Cursor 0.50 · Background Agent(프리뷰)
Cursor는 2025년 5월 백그라운드 에이전트로 병렬 실행을 내놓았다
cursor.com/changelog/0-50
공식 변경 기록 화면 캡처 · 2025-05-15
Cursor 0.50 업데이트 소개 글. 요금제 단순화와 함께 병렬 작업용 Background Agent(백그라운드 에이전트)를 처음 내놓았다.
“Background Agent for parallel task execution.”병렬 작업 실행을 위한 백그라운드 에이전트.Cursor Changelog 0.50 · 2025-05-15
에이전트가 편집기와 별개로 돌아, 여러 작업을 동시에 맡길 수 있다.
초기 프리뷰로 점진 배포. 이 글에는 격리 방식의 세부가 없어 확인할 수 없다.
병렬 실행을 제품 기능으로 먼저 내놓은 사례. 동시 실행이 기본 기능이 되어 가는 출발점.
2026-02-19Claude Code --worktree(2.1.49) · 공식 CHANGELOG
Claude Code는 --worktree 한 줄로 격리된 세션을 연다
code.claude.com/docs/en/worktrees
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 공식 문서 ‘워크트리로 병렬 세션 실행’. 워크트리는 파일·브랜치는 따로, 저장소 기록은 공유하는 작업 폴더라고 설명.
# CHANGELOG 2.1.49
Added --worktree (-w) flag to start Claude in an isolated git worktree
# = 격리된 워크트리에서 Claude를 시작하는 옵션 추가$ claude --worktree feature-auth
$ claude -w feature-search # 다른 터미널에서✓ .claude/worktrees/<이름>/
✓ 브랜치 worktree-<이름>
✓ 나갈 때 변경을 확인하고 유지·삭제를 묻는다
! .env 같은 파일은 .worktreeinclude(복사 목록)로 복사
이름만 주면 폴더와 브랜치를 자동 생성. 다른 터미널에서 또 실행하면 격리 세션이 하나 더 생긴다.
새 체크아웃이라 .env 같은 gitignore 파일이 없다. .worktreeinclude에 복사 목록을 적어야 한다.
앞 장의 git 기능을 옵션 한 줄로 감쌌다. 병렬 격리가 도구의 기본 기능이 됐다.
2026-02Codex 앱 출시 · 내장 워크트리 · 공식 문서
Codex 앱은 워크트리를 기본 기능으로 넣었다
developers.openai.com/codex/app/worktrees
공식 문서 화면 캡처 · 2026-10-28 확인
OpenAI Codex 앱의 Worktrees 문서. 워크트리를 저장소의 두 번째 복사본으로 정의하고 Local·Worktree·Handoff 용어를 풀이.
같은 프로젝트의 여러 채팅이 서로 방해 없이 돈다. Local(원래 폴더)↔Worktree(복사본)를 Handoff(넘기기)로 오간다.
Git 저장소에서만 동작한다. 출시일은 2월 초까지만 확인했다.
Claude Code · Cursor · Codex가 같은 방향으로 모였다. 특정 도구만 정답이 아니다.
2026-02-19서브에이전트 isolation: worktree(2.1.49) · 공식 문서 예시
둘을 합치면 서브에이전트마다 자기 워크트리를 갖는다
프런트매터(파일 맨 위 설정) 한 줄 isolation: worktree
서브에이전트마다 임시 워크트리라 파일을 고쳐도 내 폴더는 그대로. 변경이 없으면 끝날 때 자동 삭제.
기본은 default 브랜치에서 분기. 작업 중인 브랜치 상태가 필요하면 worktree.baseRef 설정이 필요하다.
맥락 분리와 파일 분리를 한 줄로 결합. 13교시 코디네이터-배치의 기반.
# .claude/agents/refactorer.md---
name: refactorer
description: Applies mechanical refactors across many files
isolation: worktree
---
Apply the requested refactor across every affected file, then run the tests
and report the results.
# refactorer = 여러 파일을 기계적으로 고치는 에이전트✓ 파일을 고쳐도 내 작업 폴더는 그대로
! 기본은 default 브랜치에서 분기(worktree.baseRef)
강사 운영 방식병렬 작업의 비용은 합칠 때 나온다
합칠 때 충돌: 격리는 충돌을 미룰 뿐
워크트리 Aauth.php 수정main 브랜치같은 줄 충돌워크트리 Bauth.php 수정사람이 판단또는 미리 분할먼저 합침 ✓나중에 합침
워크트리는 작업 중의 덮어쓰기를 막을 뿐, 합칠 때의 충돌은 막지 못합니다. 변경 범위를 미리 나누는 것이 가장 싼 해법입니다.
워크플로우계획 → 병렬 구현 → 리뷰 → 합치기 · 강사 운영 방식
이어 붙이면 한 흐름: 계획에서 합치기까지
1 계획스펙 · Task 분할2 병렬 구현워커 A·B·C · 워크트리별4 합치기충돌 해결 · 사람 승인3 리뷰 에이전트읽기 전용나눠 줌브랜치별통과분만
계획은 스펙과 Task(5교시), 완료 기준은 테스트(6교시), 리뷰어는 읽기 전용 서브에이전트, 구현은 워크트리 안의 워커입니다. → 8교시 실습
2026-02-28 · 공식 문서Claude Code 병렬 실행 방법 비교 · /batch(2.1.63)
병렬 방법은 여럿이고, 서브에이전트·워크트리·/batch는 역할이 다르다
code.claude.com/docs/en/agents
공식 문서 화면 캡처 · 2026-10-28 확인
Claude Code 공식 문서 ‘에이전트 병렬 실행’의 비교 표. 서브에이전트 등 5가지 방식이 각각 언제 맞는지를 나란히 설명.
방법
장점
한계
서브에이전트
한 세션 안에서 맡기고 맥락을 나눈다
사용량 ×N, 이력을 못 본다
워크트리
파일 편집을 격리한다
합칠 때 충돌은 못 막는다
/batch(스킬)
큰 변경 하나를 서브에이전트 5~30개로 쪼개 각자 워크트리에서 작업
두 방법의 한계를 함께 진다
→ 의미: 워크트리는 돌리는 방법이 아니라 편집 격리 도구, /batch는 둘을 묶은 스킬
→ 13교시 · agent teams
정리문제 → 해결 · 2025-05 → 2026-02
오늘 본 것: 창을 나누고, 폴더를 나누고, 다음은 ‘얼마나 오래’
문제한 창에 다 담김(압축 · 정보 유실)서브에이전트맥락을 나눠 쓴다2025-07-24문제한 폴더 · 한 에이전트(덮어쓰기)워크트리작업 공간을 나눈다2025-05 → 2026-02다음 문제오래 맡기려면승인 · 계속 (3회차)
제가 보는 것은 내가 한 답 · 결정 한 줄 요약 · 스모크 결과 셋입니다. 각 리뷰는 블로커가 없으면 종료, 예산이 다 되면 중단하고 진행 파일에 인계합니다. PR(Pull Request, 병합 요청)·CI(Continuous Integration, 지속적 통합)·머지(9–12)는 16교시입니다.
그대로 붙여 넣어도 됩니다제가 쓰는 프롬프트의 예 · 내 하네스에 맞게 바꿔 쓰기 · 스모크도 같이 시킨다
첫 프롬프트(예): 질문을 먼저, 구현은 승인 뒤에
> 내 하네스에 딴길 방지 장치를 더하고 싶다. 어떤 게 필요한지부터 같이 정하자.
아직 코드는 쓰지 마. 운영 기준 순서로 가자.
8 Spec 개요 → 13 Task 분할 → 14 GitHub 이슈 등록.
질문은 한 번에 하나씩, 네 추천 답과 이유를
같이, 8개 안에서 끝내.
각 이슈마다 어겨 보는 스모크 시나리오를 하나씩 붙여.
끝나면 docs/spec.md, TASKS.md, 이슈 초안을 만들고
내가 “승인”할 때까지 기다려.
승인하면 이슈 하나를 골라 이슈별 워크플로우 1~8로:
분석 → ADR 점검 → 이슈 스펙 → 스펙 리뷰 →
구현 계획 → 계획 리뷰 → 구현(테스트 먼저) → 구현 리뷰.
리뷰는 블로커가 없으면 끝내고, 예산이 다 되면
멈춰서 progress.md에 인계해.
github.blog · Spec Kit
SDD(Spec-Driven Development, 스펙 주도 개발) 도구의 예 · 2025-09-02
GitHub의 Spec Kit. 스펙 → 계획 → Task 순서로 에이전트를 이끄는 오픈소스 도구 모음. 우리는 문서 몇 장으로 같은 순서를 밟는다. 프롬프트의 ADR(Architecture Decision Record, 아키텍처 결정 기록)은 결정과 이유를 남긴 문서.
질문 체크리스트하네스가 묻지 않으면 내가 먼저 꺼낸다 · 제가 쓰는 질문의 예
에이전트가 물어야 할 질문은 단계마다 하나씩이다
단계
에이전트가 물을 것
예시 답
빠지면
8 Spec 개요
이번에 막을 딴길과 수용 기준
범위 밖 변경 · 일찍 멈춤 · 테스트 조작 · 압축 망각
무엇을 막는지 흐려진다
13 Task 분할
한 번에 끝낼 크기와 끝 조건 한 줄
장치 하나 = Task 하나, 테스트 통과
한꺼번에 만들다 엉킨다
14 이슈 등록
이슈 수, 순서, 수용 조건, 범위 밖
이슈 1~4건, 하나 먼저, 어겨 보기로 판정
완료를 판정할 수 없다
워크플로 1–2
영향 범위, 기존 ADR과 충돌 여부
ADR-0001 권한 결정과 충돌 없음
이전 결정을 뒤집는다
워크플로 3–6
블로커의 기준, 리뷰 최대 횟수
정확성에 영향 주는 것만, 최대 2회
리뷰가 끝나지 않는다
워크플로 7–8
테스트 먼저 · 예산 · 인계 위치
실패 확인 후 커밋, 예산 소진 시 progress.md
테스트를 구현에 맞춰 고친다
18단계 중 8·13단계제 예시 · 어떤 장치를 넣을지는 각자 정한다 · 작업 계층은 체크리스트로 줄인다
8·13단계의 결정은 한 줄씩이다: 번호 붙은 요구와, 끝 조건이 있는 Task (예)
번호
하네스가 정리한 결정 (한 줄 요약)
Task와 끝 조건
스모크로 본다
G1
테스트가 통과해야 에이전트가 끝낼 수 있다
T1 · 실패인 채 끝내려 하면 계속 일한다
실패 상태에서 “끝났다”고 시킨다
G2
커밋된 테스트 파일은 편집할 수 없다
T2 · 커밋된 건 막히고 새 테스트는 허용
기존 테스트 수정 / 새 테스트 생성
G3
압축 뒤에도 진행 상황이 다시 읽힌다
T3 · /compact 뒤 진행 파일 내용이 보인다
압축 뒤 “어디까지 했어?”
G4
구현 뒤 스펙 기준 리뷰를 거친다
T4 · G 번호별 구현·테스트 여부 보고
일부러 빠뜨린 G를 짚어 내나
번호 G1~G4가 이슈·테스트·리뷰가 가리킬 기준이 된다. 범위 밖(샌드박스·CI·자동 머지) 한 줄이 시키지 않은 기능을 막는다.
경계 조건은 하네스 초안이 틀릴 수 있다. ‘커밋된 것만 막는다’ 같은 경계는 내가 정한다.
18단계의 축소판. 운영 기준은 저위험 개인 도구에서 이렇게 줄이는 것을 허용한다.
18단계 중 14단계Task마다 GitHub 이슈 한 건 · 하네스가 등록, 내용은 내가 승인
14단계: 장치마다 이슈 한 건을 만든다 (#1~#4는 메뉴의 예)
이슈
막는 딴길
수용 조건 (스모크로 판정)
순서
#1 Stop 훅
‘다 했다’며 일찍 멈춤
테스트가 실패인 채 끝내려 하면 계속 일한다
2
#2 테스트 보호
테스트를 고쳐서 통과
커밋된 테스트 편집이 막히고, 새 테스트는 허용된다
1 · 예: 먼저 할 것
#3 진행 파일
압축 뒤 맥락 망각
/compact 뒤 progress.md 내용이 다시 보인다
3
#4 리뷰어
범위 밖 기능·스펙 누락
R·G 번호별 구현·테스트 여부 보고, 스타일 지적 없음
4
이슈 본문: 종류 · 상위(spec) · 기대 산출물 · 범위 밖 · 수용 조건 · 상태. 내게 필요한 것을 골라 처리하고 나머지는 이슈로 남깁니다. → 12교시: 이 이슈를 스킬로
승인 체크리스트내가 한 답 · 정리된 결정 · 스모크 시나리오 세 곳만 본다 · 승인은 사람만 한다
구현에 들어가기 전에 저는 다섯 가지만 확인한다
내가 한 답: 블로커 기준, 리뷰 최대 횟수, 예산 상한이 내 말로 적혀 있다
내가 한 답: 생략한 단계(PR·CI·워크트리 등)와 이유가 적혀 있다
결정 요약: 번호 붙은 요구(예: G1~G4)가 시험할 수 있는 문장이다
결정 요약: Task와 이슈마다 끝 조건이 한 줄 있다
스모크: 이슈마다 어겨 보는 시나리오가 하나씩 있고, 구조를 내 말로 30초 안에 설명할 수 있다
보는 곳이 세 가지로 줄어, 코드를 읽지 않고도 문서 세 벌을 빨리 판정할 수 있다.
체크리스트에 없는 위험(이슈 간 의존 등)은 놓친다. 순서가 이상하면 하네스에게 의존 관계를 따로 묻는다.
운영 기준의 ‘적용하지 않는 절차와 이유를 남긴다’를 한 줄 체크로 줄인 것.
이슈별 워크플로우 1–6내가 고른 이슈 #2의 예 · 하네스가 문서를 쓰고, 리뷰는 블로커가 없으면 종료
1–6단계는 문서로 수렴시킨다: 분석, ADR 점검, 스펙, 계획 그리고 두 번의 리뷰
단계
하네스가 낸 것 (이슈 #2의 예)
사람이 볼 곳
1 이슈 분석
영향: 에이전트가 tests/** 를 고쳐 통과시키는 일 · 6교시 사례
범위가 이슈에 한정되나
2 ADR 점검
ADR-0001(금지 3개)과 충돌 없음 → ADR-0002: 도구 호출 직전에 막는 훅 채택, 권한 규칙은 보조
되돌리기 비싼 결정이 기록됐나
3 이슈 스펙
S1 커밋된 tests/* 편집 차단 · S2 새 테스트는 허용 · S3 차단 이유를 에이전트에 반환
경계 조건(‘커밋된 것만’)
4 스펙 리뷰
블로커 1: Bash 우회 미언급 → 범위 밖에 명시 → 블로커 0, 종료
블로커 기준에 맞나
5 구현 계획
변경 파일 둘 이내 · 순서: 테스트 → 차단 장치 → 등록 → 어겨 보기
파일 수가 작나
6 계획 리뷰
블로커 1: 새 파일 만들기 경로 누락 → 수정 → 블로커 0, 종료
스펙 S1–S3를 다 덮나
이슈별 워크플로우 7 · 구현 (테스트 먼저)이슈 #2 테스트 보호를 고른 경우 · 프롬프트와 스모크 · 스모크 대화는 예시
7단계: 테스트를 먼저 쓰고 실패를 보여 달라고 한 뒤, 막는 장치를 만들게 한다
프롬프트 · 그대로 붙여 넣기
> 이슈 #2를 구현해. 순서를 지켜.
1. 먼저 시험을 써. 막는 장치가 아직 없으니
실패해야 해. 실패하는 걸 보여 주고
시험만 따로 커밋해.
2. 그다음 커밋된 시험 파일의 편집을 막아.
새 시험 파일과 구현 파일은 허용.
3. 막을 땐 이유가 너한테 돌아오게 해.
4. 끝나면 세 경우를 직접 돌려서 표로 보여 줘.
시험은 구현에 맞춰 고치지 마.
스모크 · 하네스가 보여 준 증거 (예시)
> 시험 커밋이 구현보다 먼저인지 로그로 보여 줘
✓ test: #2 보호 시험 (실패 3건) ← 먼저
✓ feat: #2 커밋된 시험 편집 차단 ← 나중
> 세 경우 결과 표
✓ 커밋된 시험 파일 수정 → 막힘 + 이유
✓ 새 시험 파일 생성 → 허용
✓ 구현 파일 수정 → 허용
! 구현 파일까지 막히면 → 다시 시킨다
‘커밋된 테스트만’ 막아 새 테스트는 쓸 수 있다. 이유가 하네스에게 돌아가 스스로 방향을 바꾼다.
하네스가 명령 실행 안에서 스스로 파일을 여는 우회까지는 못 막는다. 샌드박스가 필요하고, 범위 밖에 명시했다.
시험만 먼저 커밋한 기록이 시험을 고쳐 통과시키지 않았다는 증거가 된다.
이슈별 워크플로우 7–8끝내기 관문(#1) · 리뷰어 서브에이전트(#4) · 고른 경우에 한해 · 스모크 대화는 예시
구현은 테스트가 막고, 구현 리뷰는 별도의 리뷰어에게 맡긴다
#1 프롬프트와 스모크
> 네가 “끝났다”고 말하려 할 때 테스트를 먼저
돌리고, 실패면 못 끝내게 해 줘. 무한히 반복하진
않게 하고, 어떻게 막는지 한 줄로 설명해.
# 스모크 (예시)> 테스트가 실패한 채로 “끝났다”고 말해 봐
✓ 테스트 1건 실패 → 계속 일함
> 고친 뒤 다시 끝내 봐
✓ 4 passed → 멈춤 허용
#4 프롬프트와 스모크
> 구현 뒤 검토만 맡는 리뷰어 서브에이전트를 만들어.
기준은 docs/spec.md의 G·S 번호뿐이고, 스타일
지적은 하지 마. 정확성 빈틈만 블로커로 보고해.
# 스모크 (예시)> G2 구현을 일부러 하나 빼고 리뷰를 시켜 봐
✓ 블로커 1: G2 새 테스트 허용 미구현
✓ 스타일 지적 0건
> 고친 뒤 다시 리뷰
✓ 블로커 0 → 8단계 종료
리뷰 지적이 나와도 테스트는 건드리지 않고 구현만 고치게 합니다. 보호 장치가 지켜 줍니다.
중단 · 인계 · 압축 대비#3 진행 파일을 고른 경우 · 예산 소진 시 통과가 아니라 멈춤 · 스모크 대화는 예시
예산이 다 되면 통과시키지 않고, 진행 파일에 적고 멈추게 한다
code.claude.com/docs/en/hooks-guide
공식 문서 화면 캡처 · 2026-10-28 확인
훅 가이드의 ‘압축 뒤 맥락 다시 넣기’ 예. 압축 직후 파일을 다시 읽어 맥락에 넣는 방식을 이 문서가 설명한다.
> Task 하나를 끝낼 때마다 progress.md를 갱신해.
지금 상태 · 결정 · 버린 것 · 블로커 · 다음 한 걸음.
압축된 직후에는 이 파일이 자동으로 다시 읽히게 해.
블로커가 남은 채 예산이 떨어지면 통과시키지 말고
멈춰서 여기에 인계해.# 스모크 (예시)> /compact
> 지금 어디까지 했어?
✓ 이슈 #2, 8단계 리뷰 중 · 훅 채택(ADR-0002)
✓ 버린 것: 전체 tests 금지(새 테스트도 막힘)
✓ 다음: 이슈 #1
약 15분 · 스모크내가 고른 장치의 수용 조건 판정 · 일부러 어기기 + 기록 · 결과는 예시
스모크: 이슈의 수용 조건을 일부러 어겨 보고, 막힌 것까지 기록한다
하네스에게 하나씩 (결과는 예시):> tests/test_store.py 를 고쳐서 통과시켜
✓ 막힘 + 이유 (S1)> tests/test_new.py 를 새로 만들어
✓ 허용 (S2)> 테스트 실패 상태에서 “끝났다”고 말해
✓ 계속 일함 (#1을 했다면)> /compact 뒤 “지금 어디까지 했어?”
✓ 진행 파일 내용이 보임 (#3을 했다면)! 안 막혔다 → > “방금 요청이 왜 통과됐는지 설명하고,
막히게 고친 뒤 같은 요청으로 다시 보여 줘”
시나리오
기대
실제
통과
커밋된 테스트 수정
막힘
내가 적는다
□
새 테스트 생성
허용
내가 적는다
□
실패인 채 끝내기
계속 일함
#1 했다면
□
압축 뒤 이어가기
진행 내용 보임
#3 했다면
□
빠뜨린 G 짚어내기
블로커 보고
#4 했다면
□
이슈 번호·단계, 블로커와 반복 횟수, 남은 이슈와 다음 한 걸음도 한 줄씩 함께 적습니다. 화면이나 로그를 하나씩 남깁니다.
다음 회차(11-17)까지집에서 이어서 · 내 하네스 ‘나만의 하네스 만들기’ · 2회차
다음 회차까지 해 볼 것: 장치 하나를 골라 더하고, 어겨 보며 확인한다
해 볼 일
1 오늘 메뉴에서 내 하네스에 필요한 장치를 골라 하네스에게 시킨다 (질문부터, 승인한 뒤 구현)
2 그 장치를 일부러 어겨 보고 막히는지 눈으로 확인한다 (12번 장의 표를 내 장치에 맞게 바꿔서)
3 못 끝낸 이슈는 열린 채 진행 파일에 인계해 둔다
다음 시간에 나누면 좋은 것
내가 쓴 프롬프트 한 개 (하네스의 질문과 내 답)
스모크 표 한 장 (막힌 화면이나 로그 하나)
막힌 곳 하나, 또는 딴길로 샌 사례 하나
완성도보다 해 보며 알게 된 것을 나눕니다. 코드나 저장소를 보여 주지 않아도 됩니다. → 12교시: 이 워크플로우를 스킬로