Claude Code의 harness(에이전트 팀 구조)가 순수 Claude Code 대화보다 실제로 얼마나 빠르고 좋은 결과를 낼까?
직접 실험해봤다.
실험 배경
Claude Code를 쓰다 보니 자연스럽게 생기는 의문이 있었다.
"harness(CLAUDE.md + 에이전트 팀 + 스킬)를 미리 잘 설계해두면 진짜 더 잘 만들어줄까? 아니면 그냥 프롬프트 한 방이 낫나?"
이 질문에 답하기 위해 동일한 앱을 두 가지 방식으로 동시에 만들어보는 실험을 설계했다.
마침 만들고 싶었던 앱이 있어서 같은 앱을 어떻게 만들어내는지 비교하고자 했다.
harness Github 주소: https://github.com/revfactory/harness
GitHub - revfactory/harness: A meta-skill that designs domain-specific agent teams, defines specialized agents, and generates th
A meta-skill that designs domain-specific agent teams, defines specialized agents, and generates the skills they use. - revfactory/harness
github.com
만들려고 한 것
macOS 노치 위에 Dynamic Island 스타일 AI 상태 오버레이
- 노치 위에 검정색 NSWindow
- Claude 활성 시 compact 인디케이터 상시 표시
- 마우스 호버 → spring 애니메이션으로 확장
- 마우스 이탈 → 자동 축소
- 확장 시 Claude 사용량(%), 티어(MAX/PRO), 새로고침 버튼 표시
- Claude뿐 아니라 Codex, Cursor 등 다양한 AI Provider를 추가할 수 있는 플러그인 구조
마일스톤은 M1(빌드 성공)부터 M7(MockCodexProvider로 확장성 검증)까지 7단계로 정의했다.
두 가지 접근 방식
vanilla
- 순수 Claude Code CLI (claude --dangerously-skip-permissions)
- CLAUDE.md 없음, 에이전트 정의 없음, 스킬 없음
- 빈 SPM 프로젝트에서 시작
revfactory (harness)
- CLAUDE.md에 7개 에이전트 팀 사전 정의
- notch-orchestrator, swift-architect, plugin-engineer, animation-engineer, ui-composer, system-integrator, qa-verifier
- 6개 도메인별 스킬 파일 (build-run, plugin-scaffold, animation-design 등)
- 동일한 SPM 구조에서 시작 (스캐폴드 포함)
두 세션을 동시에 실행해서 총 소요 시간을 실시간으로 비교했다.
결과
타임라인 비교
| 이벤트 | vanilla | revfactory |
| 세션 시작 | 15:59:30 | 15:59:34 |
| M1 첫 빌드 성공 | 16:09:23 (+9분 53초) | 15:59:49 (+15초) |
| M2~M7 전부 달성 | 16:25:58 | 16:07:55 |
| 육안 확인 완료 | 16:25:58 | 16:27:56 |
| 총 소요 시간 | 26분 28초 | 28분 22초 |
revfactory는 기존 스캐폴드 코드 덕분에 첫 빌드를 15초 만에 성공했다. 반면 vanilla는 약 10분이 걸렸다.
하지만 결승선을 통과한 건 vanilla가 먼저였다. 육안 확인까지 포함하면 총 시간 차이는 2분도 안 된다.
코드 규모
| 항목 | vanilla | revfactory |
| 총 LOC | 293줄 | 1,272줄 |
| Swift 파일 수 | 7개 | 20개 |
| 빌드 에러 | 2건 | 1건 |
| 구현 중 버그 수정 | 2건 | 4건 |
에이전트 팀이 역할별로 파일을 분리하고 프로토콜·레이어를 추가해서 revfactory가 4.3배 더 많은 코드를 생성했다.
버그 내역
vanilla (빌드 에러 2건)
| 회차 | 원인 | 해결 |
| #1 | Swift 6 concurrency — any AIProvider가 non-Sendable로 Task 클로저에 전달 불가 | AIProvider에 @MainActor 추가 |
| #2 | Info.plist를 .copy 리소스로 등록 시 SPM이 거부 | .exclude로 전환 |
revfactory (구현 중 버그 4건)
- AnimationStateMachine 알림 미발송 → $overlaySize.sink 추가
- NSWindowController cascade 덮어쓰기 → shouldCascadeWindows = false + 지연 재배치
- NSHostingView 불투명 배경 → wantsLayer = true, layer.backgroundColor = .clear
- compact view usage 변경 미반영 → @ObservedObject 래퍼 추가
최종 결과물 비교
vanilla


- 창 형태: 전체 너비 검정 바 (pill 미구현)
- compact 상태: 흰 점 인디케이터
- 확장 UI: Usage/Tier/Window/새로고침 버튼 — 실제 Claude 데이터 연동
- 기능 완성도: 높음
- 시각 디자인: 다소 아쉬움
revfactory

- 창 형태: 완벽한 pill 형태 (Dynamic Island처럼 둥근 모양)
- compact 상태: 오렌지 점 + 73% 사용량 표시
- 확장 UI: 구현됨
- 시각 디자인: 높음
- 기능 완성도: 낮음(창 위치와 마우스 호버시 확장되는 윈도우 깨짐)
분석
harness가 빠른 건 맞다 — 단, 초반에만
revfactory의 첫 빌드 15초는 인상적이다. 하지만 그건 스캐폴드가 이미 존재했기 때문이고, 이후 4건의 버그 수정이 그 시간을 잡아먹었다. 총합이 거의 같아진 이유이다.
많은 코드 ≠ 좋은 코드
revfactory는 293줄짜리 문제를 1,272줄로 풀었다.
에이전트 팀이 역할을 분리하고 추상화 레이어를 추가한 결과다.
이게 좋은 설계일 수도 있지만, 단기 실험 기준으론 오버엔지니어링이다.
각자 잘하는 게 달랐다
- revfactory → UI/UX 형태 (pill 디자인, 컬러 인디케이터)
- vanilla → 실제 기능 연동 (Claude API 데이터 끌어오기)
harness가 UI 컴포넌트 설계에 더 집중하고, vanilla는 "어쨌든 동작하게" 만드는 방향으로 수렴한 것 같다.
결론
| 상황 | 추천 방식 |
| 빠르게 PoC 만들기 | vanilla |
| 팀 규모 확장, 장기 프로젝트 | revfactory (harness) |
| 반복 작업, 패턴이 명확한 도메인 | revfactory (스킬 재사용 효과) |
| 기능 연동, 데이터 파이프라인 | vanilla |
harness의 진짜 가치는 속도보다 재사용성에 있는 것 같다.
이번처럼 단발성 실험에서는 vanilla와 큰 차이가 없지만, 동일한 스킬과 에이전트 정의를 여러 프로젝트에 반복 적용하면 누적 이득이 커질 수 있지 않을까 예상한다.
'Develop > 기타' 카테고리의 다른 글
| [Claude Code] AI와 함께 macOS 알림 배너 툴 만들기 — 실패와 재시도에서 배운 것들 (0) | 2026.05.27 |
|---|