harness
하네스를 구성합니다. 전문 에이전트를 정의하며, 해당 에이전트가 사용할 스킬을 생성하는 메타 스킬. (1) '하네스 구성해줘', '하네스 구축해줘' 요청 시, (2) '하네스 설계', '하네스 엔지니어링' 요청 시, (3) 새로운 도메인/프로젝트에 대한 하네스 기반 자동화 체계를 구축할 때, (4) 하네스 구성을 재구성하거나 확장할 때, (5) '하네스 점검', '하네스 감사', '하네스 현황', '에이전트/스킬 동기화' 등 기존 하네스 운영/유지보수 요청 시 사용.
git clone https://github.com/revfactory/harness
T=$(mktemp -d) && git clone --depth=1 https://github.com/revfactory/harness "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/harness" ~/.claude/skills/revfactory-harness-harness && rm -rf "$T"
skills/harness/SKILL.mdHarness — Agent Team & Skill Architect
도메인/프로젝트에 맞는 하네스를 구성하고, 각 에이전트의 역할을 정의하며, 에이전트가 사용할 스킬을 생성하는 메타 스킬.
핵심 원칙:
- 에이전트 정의(
)와 스킬(.claude/agents/
)을 생성한다..claude/skills/ - 에이전트 팀을 기본 실행 모드로 사용한다.
- CLAUDE.md에 하네스 포인터를 등록한다. — 새 세션에서 오케스트레이터 스킬이 트리거되도록 최소한의 포인터(트리거 규칙 + 변경 이력)만 기록한다.
- 하네스는 고정물이 아니라 진화하는 시스템이다. — 매 실행 후 피드백을 반영하고, 에이전트·스킬·CLAUDE.md를 지속 갱신한다.
워크플로우
Phase 0: 현황 감사
하네스 스킬이 트리거되면 가장 먼저 기존 하네스 현황을 확인한다.
-
,프로젝트/.claude/agents/
,프로젝트/.claude/skills/
를 읽는다프로젝트/CLAUDE.md -
현황에 따라 실행 모드를 분기한다:
- 신규 구축: 에이전트/스킬 디렉토리가 없거나 비어있음 → Phase 1부터 전체 실행
- 기존 확장: 기존 하네스가 있고 새 에이전트/스킬 추가 요청 → 아래 Phase 선택 매트릭스에 따라 필요한 Phase만 실행
- 운영/유지보수: 기존 하네스의 감사·수정·동기화 요청 → Phase 7-5 운영/유지보수 워크플로우로 이동
기존 확장 시 Phase 선택 매트릭스:
변경 유형 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 에이전트 추가 건너뜀 (Phase 0 결과 활용) 배치 결정만 필수 전용 스킬 필요 시 오케스트레이터 수정 필수 스킬 추가/수정 건너뜀 건너뜀 건너뜀 필수 연결 변경 시 필수 아키텍처 변경 건너뜀 필수 영향받는 에이전트만 영향받는 스킬만 필수 필수 -
기존 에이전트/스킬 목록과 CLAUDE.md 기록을 대조하여 불일치(drift)를 감지한다
-
감사 결과를 사용자에게 요약 보고하고, 실행 계획을 확인받는다
Phase 1: 도메인 분석
- 사용자 요청에서 도메인/프로젝트 파악
- 핵심 작업 유형 식별 (생성, 검증, 편집, 분석 등)
- Phase 0 감사 결과를 기반으로 기존 에이전트/스킬과의 충돌/중복 분석
- 프로젝트 코드베이스 탐색 — 기술 스택, 데이터 모델, 주요 모듈 파악
- 사용자 숙련도 감지 — 대화의 맥락 단서(사용 용어, 질문 수준)로 기술 수준을 파악하고, 이후 커뮤니케이션 톤을 조절한다. 코딩 경험이 적은 사용자에게는 "assertion", "JSON schema" 같은 용어를 설명 없이 쓰지 않는다.
Phase 2: 팀 아키텍처 설계
2-1. 실행 모드 선택
에이전트 팀이 최우선 기본값이다. 2개 이상의 에이전트가 협업할 때는 반드시 에이전트 팀을 먼저 검토한다. 팀원 간 직접 통신(SendMessage)과 공유 작업 목록(TaskCreate)으로 자체 조율하며, 발견 공유·상충 토론·누락 보완이 결과 품질을 높인다.
| 모드 | 언제 사용 | 특성 |
|---|---|---|
| 에이전트 팀 (기본) | 2명 이상 협업, 실시간 조율·피드백 교환이 필요, 중간 산출물 상호 참조 | + + 로 자체 조율 |
| 서브 에이전트 (대안) | 단일 에이전트 작업, 결과만 메인에 반환하면 충분, 팀 통신 오버헤드가 과할 때 | 도구 직접 호출, 로 병렬 |
| 하이브리드 | Phase마다 특성이 다를 때 — 예: 병렬 수집(서브) → 합의 기반 통합(팀) | Phase 단위로 팀/서브를 섞어 구성 |
의사결정 순서:
- 먼저 에이전트 팀으로 설계 가능한지 검토한다 — 2명 이상이면 기본값
- 팀 통신이 구조적으로 불필요하고(결과 전달만), 팀 오버헤드가 이득보다 클 때만 서브 에이전트 선택
- Phase별 특성이 확연히 다르면 하이브리드 고려 — 각 Phase의 실행 모드를 오케스트레이터에 명시
상세 비교표와 패턴별 의사결정 트리는
의 "실행 모드" 참조.references/agent-design-patterns.md
2-2. 아키텍처 패턴 선택
- 작업을 전문 영역으로 분해
- 에이전트 팀 구조 결정 (아키텍처 패턴은
참조)references/agent-design-patterns.md- 파이프라인: 순차 의존 작업
- 팬아웃/팬인: 병렬 독립 작업
- 전문가 풀: 상황별 선택 호출
- 생성-검증: 생성 후 품질 검수
- 감독자: 중앙 에이전트가 상태 관리 및 동적 분배
- 계층적 위임: 상위 에이전트가 하위에 재귀적 위임
2-3. 에이전트 분리 기준
전문성·병렬성·컨텍스트·재사용성 4축으로 판단한다. 상세 기준표는
references/agent-design-patterns.md의 "에이전트 분리 기준" 참조.
Phase 3: 에이전트 정의 생성
모든 에이전트는 반드시
파일로 정의한다. 에이전트 정의 파일 없이 Agent 도구의 prompt에 역할을 직접 넣는 것은 금지한다. 이유:프로젝트/.claude/agents/{name}.md
- 에이전트 정의가 파일로 존재해야 다음 세션에서 재사용 가능
- 팀 통신 프로토콜이 명시되어야 에이전트 간 협업 품질 보장
- 하네스의 핵심 가치는 에이전트(누가)와 스킬(어떻게)의 분리
빌트인 타입(
general-purpose, Explore, Plan)을 사용하더라도 에이전트 정의 파일은 생성한다. 빌트인 타입은 Agent 도구의 subagent_type 파라미터로 지정하고, 에이전트 정의 파일에는 역할·원칙·프로토콜을 담는다.
모델 설정: 모든 에이전트는
model: "opus"를 사용한다. Agent 도구 호출 시 반드시 model: "opus" 파라미터를 명시한다. 하네스의 품질은 에이전트의 추론 능력에 직결되며, opus가 최고 품질을 보장한다.
팀 재구성: 에이전트 팀은 세션당 한 팀만 활성화할 수 있지만, Phase 간에 팀을 해체하고 새 팀을 구성할 수 있다. 파이프라인 패턴처럼 Phase별로 다른 전문가 조합이 필요하면, 이전 팀의 산출물을 파일로 저장한 뒤 팀을 정리하고 새 팀을 생성한다.
각 에이전트를
프로젝트/.claude/agents/{name}.md에 정의한다. 필수 섹션: 핵심 역할, 작업 원칙, 입력/출력 프로토콜, 에러 핸들링, 협업. 에이전트 팀 모드에서는 ## 팀 통신 프로토콜 섹션을 추가하여 메시지 수신/발신 대상과 작업 요청 범위를 명시한다.
정의 템플릿과 실제 파일 전문은
의 "에이전트 정의 구조" +references/agent-design-patterns.md참조.references/team-examples.md
QA 에이전트 포함 시 필수 사항:
- QA 에이전트는
타입을 사용하라 (general-purpose
는 읽기 전용이므로 검증 스크립트 실행 불가)Explore - QA의 핵심은 "존재 확인"이 아니라 "경계면 교차 비교" — API 응답과 프론트 훅을 동시에 읽고 shape을 비교
- QA는 전체 완성 후 1회가 아니라, 각 모듈 완성 직후 점진적으로 실행 (incremental QA)
- 상세 가이드:
참조references/qa-agent-guide.md
Phase 4: 스킬 생성
각 에이전트가 사용할 스킬을
프로젝트/.claude/skills/{name}/SKILL.md에 생성한다. 상세 작성 가이드는 references/skill-writing-guide.md 참조.
4-1. 스킬 구조
skill-name/ ├── SKILL.md (필수) │ ├── YAML frontmatter (name, description 필수) │ └── Markdown 본문 └── Bundled Resources (선택) ├── scripts/ - 반복/결정적 작업용 실행 코드 ├── references/ - 조건부 로딩하는 참조 문서 └── assets/ - 출력에 사용되는 파일 (템플릿, 이미지 등)
4-2. Description 작성 — 적극적 트리거 유도
description은 스킬의 유일한 트리거 메커니즘이다. Claude는 트리거를 보수적으로 판단하는 경향이 있으므로, description을 **적극적("pushy")**으로 작성한다.
나쁜 예:
"PDF 문서를 처리하는 스킬"
좋은 예: "PDF 파일 읽기, 텍스트/테이블 추출, 병합, 분할, 회전, 워터마크, 암호화, OCR 등 모든 PDF 작업을 수행. .pdf 파일을 언급하거나 PDF 산출물을 요청하면 반드시 이 스킬을 사용할 것."
핵심: 스킬이 하는 일 + 구체적 트리거 상황을 모두 기술하고, 유사하지만 트리거하면 안 되는 경우와 구분되도록 작성.
4-3. 본문 작성 원칙
| 원칙 | 설명 |
|---|---|
| Why를 설명하라 | "ALWAYS/NEVER" 같은 강압적 지시 대신, 왜 그렇게 해야 하는지 이유를 전달한다. LLM은 이유를 이해하면 엣지 케이스에서도 올바르게 판단한다. |
| Lean하게 유지 | 컨텍스트 윈도우는 공공재다. SKILL.md 본문은 500줄 이내를 목표로, 무게를 벌지 않는 내용은 삭제하거나 references/로 이동한다. |
| 일반화하라 | 특정 예시에만 맞는 좁은 규칙보다, 원리를 설명하여 다양한 입력에 대응할 수 있게 한다. 오버피팅 금지. |
| 반복 코드는 번들링 | 테스트 실행에서 에이전트들이 공통으로 작성하는 스크립트가 발견되면 에 미리 번들링한다. |
| 명령형으로 작성 | "~한다", "~하라" 형태의 명령형/지시형 어조를 사용한다. |
4-4. Progressive Disclosure (단계적 정보 공개)
스킬은 3단계 로딩 시스템으로 컨텍스트를 관리한다:
| 단계 | 로딩 시점 | 크기 목표 |
|---|---|---|
| Metadata (name + description) | 항상 컨텍스트에 존재 | ~100단어 |
| SKILL.md 본문 | 스킬 트리거 시 | <500줄 |
| references/ | 필요할 때만 | 무제한 (스크립트는 로딩 없이 실행 가능) |
크기 관리 규칙:
- SKILL.md가 500줄에 근접하면 세부 내용을 references/로 분리하고, 본문에 "언제 이 파일을 읽으라"는 포인터를 남긴다
- 300줄 이상의 reference 파일에는 상단에 **목차(ToC)**를 포함한다
- 도메인/프레임워크별 변형이 있으면 references/ 하위에 도메인별로 분리하여, 관련 파일만 로드한다
cloud-deploy/ ├── SKILL.md (워크플로우 + 선택 가이드) └── references/ ├── aws.md ← AWS 선택 시만 로드 ├── gcp.md └── azure.md
4-5. 스킬-에이전트 연결 원칙
- 에이전트 1개 ↔ 스킬 1~N개 (1:1 또는 1:다)
- 여러 에이전트가 공유하는 스킬도 가능
- 스킬은 "어떻게 하는가"를 담고, 에이전트는 "누가 하는가"를 담는다
상세 작성 패턴, 예시, 데이터 스키마 표준은
참조.references/skill-writing-guide.md
Phase 5: 통합 및 오케스트레이션
오케스트레이터는 스킬의 특수한 형태로, 개별 에이전트와 스킬을 하나의 워크플로우로 엮어 팀 전체를 조율한다. Phase 4에서 생성한 개별 스킬이 "각 에이전트가 무엇을 어떻게 하는가"를 정의한다면, 오케스트레이터는 "누가 언제 어떤 순서로 협업하는가"를 정의한다. 구체적 템플릿은
references/orchestrator-template.md 참조.
기존 확장 시 오케스트레이터 수정: 신규 구축이 아닌 기존 확장일 때는 오케스트레이터를 새로 생성하지 않고 기존 오케스트레이터를 수정한다. 에이전트 추가 시 팀 구성·작업 할당·데이터 흐름에 새 에이전트를 반영하고, description에 새 에이전트 관련 트리거 키워드를 추가한다.
Phase 2-1에서 선택한 실행 모드에 따라 오케스트레이터 패턴이 달라진다:
5-0. 오케스트레이터 패턴 (모드별)
에이전트 팀 패턴 (기본): 오케스트레이터가
TeamCreate로 팀을 구성하고, TaskCreate로 작업을 할당한다. 팀원들은 SendMessage로 직접 통신하며 자체 조율한다. 리더(오케스트레이터)는 진행 상황을 모니터링하고 결과를 종합한다.
[오케스트레이터/리더] ├── TeamCreate(team_name, members) ├── TaskCreate(tasks with dependencies) ├── 팀원들이 자체 조율 (SendMessage) ├── 결과 수집 및 종합 └── 팀 정리
서브 에이전트 패턴 (대안): 오케스트레이터가
Agent 도구로 서브 에이전트를 직접 호출한다. 병렬 실행은 run_in_background: true, 결과는 메인에게만 반환된다. 팀 통신이 불필요하고 오버헤드를 줄이고 싶을 때 사용.
[오케스트레이터] ├── Agent(agent-1, run_in_background=true) ├── Agent(agent-2, run_in_background=true) ├── 결과 대기 및 수집 └── 통합 산출물 생성
하이브리드 패턴: Phase마다 다른 모드를 섞어 구성한다. 자주 쓰이는 조합:
- 병렬 수집(서브) → 합의 통합(팀): Phase 2에서 서브 에이전트로 독립 자료를 병렬 수집 → Phase 3에서 팀을 만들어 토론·합의 기반 통합
- 팀 생성(팀) → 검증(서브): Phase 2에서 팀이 초안 생성 → Phase 3에서 단일 서브 에이전트가 독립 검증
- Phase 간 팀 재구성: 각 Phase마다
후 새TeamDelete
, 사이에 서브 에이전트 호출 삽입TeamCreate
하이브리드 선택 시 오케스트레이터의 각 Phase 섹션 상단에 해당 Phase의 실행 모드를 명시한다 (예:
**실행 모드:** 에이전트 팀).
5-1. 데이터 전달 프로토콜
오케스트레이터 내에 에이전트 간 데이터 전달 방식을 명시한다:
| 전략 | 방식 | 적용 모드 | 적합한 경우 |
|---|---|---|---|
| 메시지 기반 | 로 팀원 간 직접 통신 | 팀 | 실시간 조율, 피드백 교환, 가벼운 상태 전달 |
| 태스크 기반 | /로 작업 상태 공유 | 팀 | 진행상황 추적, 의존 관계 관리, 작업 자체 요청 |
| 파일 기반 | 약속된 경로에 파일을 쓰고 읽음 | 팀 + 서브 | 대용량 데이터, 구조화된 산출물, 감사 추적 필요 |
| 반환값 기반 | 도구의 반환 메시지 | 서브 | 서브 에이전트 결과를 메인이 직접 수집 |
권장 조합 (팀 모드): 태스크 기반(조율) + 파일 기반(산출물) + 메시지 기반(실시간 소통) 권장 조합 (서브 모드): 반환값 기반(결과 수집) + 파일 기반(대용량 산출물) 하이브리드: 각 Phase의 실행 모드에 맞춰 해당 조합 적용
파일 기반 전달 시 규칙:
- 작업 디렉토리 하위에
폴더를 만들어 중간 산출물 저장_workspace/ - 파일명 컨벤션:
(예:{phase}_{agent}_{artifact}.{ext}
)01_analyst_requirements.md - 최종 산출물만 사용자 지정 경로에 출력, 중간 파일(
)은 보존 (사후 검증·감사 추적용)_workspace/
5-2. 에러 핸들링
오케스트레이터 내에 에러 처리 방침을 포함한다. 핵심 원칙: 1회 재시도 후 재실패 시 해당 결과 없이 진행(보고서에 누락 명시), 상충 데이터는 삭제하지 않고 출처 병기.
에러 유형별 전략표와 구현 상세는
의 "에러 핸들링" 참조.references/orchestrator-template.md
5-3. 팀 크기 가이드라인
| 작업 규모 | 권장 팀원 수 | 팀원당 작업 수 |
|---|---|---|
| 소규모 (5~10개 작업) | 2~3명 | 3~5개 |
| 중규모 (10~20개 작업) | 3~5명 | 4~6개 |
| 대규모 (20개+ 작업) | 5~7명 | 4~5개 |
팀원이 많을수록 조율 오버헤드가 커진다. 3명의 집중된 팀원이 5명의 산만한 팀원보다 낫다.
5-4. CLAUDE.md 하네스 포인터 등록
하네스 구성 완료 후, 프로젝트의
CLAUDE.md에 최소한의 포인터를 등록한다. CLAUDE.md는 새 세션마다 로딩되므로, 하네스 존재와 트리거 규칙만 기록하면 오케스트레이터 스킬이 나머지를 처리한다.
CLAUDE.md 템플릿:
## 하네스: {도메인명} **목표:** {하네스의 핵심 목표 한 줄} **트리거:** {도메인} 관련 작업 요청 시 `{orchestrator-skill-name}` 스킬을 사용하라. 단순 질문은 직접 응답 가능. **변경 이력:** | 날짜 | 변경 내용 | 대상 | 사유 | |------|----------|------|------| | {YYYY-MM-DD} | 초기 구성 | 전체 | - |
CLAUDE.md에 넣지 않는 것: 에이전트 목록, 스킬 목록, 디렉토리 구조, 실행 규칙 상세. 이유: 에이전트/스킬 목록은 오케스트레이터 스킬과
.claude/agents/, .claude/skills/에서 관리하므로 중복이다. 디렉토리 구조는 파일 시스템에서 직접 확인 가능하다. CLAUDE.md는 포인터(트리거 규칙) + 변경 이력만 담는다.
5-5. 후속 작업 지원
오케스트레이터는 초기 실행뿐 아니라 후속 작업도 처리해야 한다. 다음 세 가지를 보장하라:
1. 오케스트레이터 description에 후속 키워드 포함: 초기 생성 키워드만으로는 후속 요청이 트리거되지 않는다. description에 반드시 포함할 후속 표현:
- "다시 실행", "재실행", "업데이트", "수정", "보완"
- "{도메인}의 {부분작업}만 다시"
- "이전 결과 기반으로", "결과 개선"
2. 오케스트레이터 Phase 1에 컨텍스트 확인 단계 추가: 워크플로우 시작 시 기존 산출물 존재 여부를 확인하여 실행 모드를 결정한다:
존재 + 사용자가 부분 수정 요청 → 부분 재실행 (해당 에이전트만 재호출)_workspace/
존재 + 사용자가 새 입력 제공 → 새 실행 (기존 _workspace를_workspace/
로 이동)_workspace_prev/
미존재 → 초기 실행_workspace/
3. 에이전트 정의에 재호출 지침 포함: 각 에이전트
.md 파일에 "이전 산출물이 있을 때의 행동"을 명시한다:
- 이전 결과 파일이 존재하면 읽고 개선점을 반영
- 사용자 피드백이 주어지면 해당 부분만 수정
오케스트레이터 템플릿의 "Phase 0: 컨텍스트 확인" 섹션 참조:
references/orchestrator-template.md
Phase 6: 검증 및 테스트
생성된 하네스를 검증한다. 상세 테스트 방법론은
references/skill-testing-guide.md 참조.
6-1. 구조 검증
- 모든 에이전트 파일이 올바른 위치에 있는지 확인
- 스킬의 frontmatter(name, description) 검증
- 에이전트 간 참조 일관성 확인
- 커맨드가 생성되지 않았는지 확인
6-2. 실행 모드별 검증
- 에이전트 팀: 팀원 간 통신 경로, 작업 의존성, 팀 크기 적정성 확인
- 서브 에이전트: 각 에이전트의 입출력 연결,
설정, 반환값 수집 로직 확인run_in_background - 하이브리드: 각 Phase의 실행 모드가 오케스트레이터에 명시되었는지, Phase 경계에서 데이터 전달이 끊기지 않는지 확인 (팀 → 서브 전환 시 팀의 산출물이 서브의 입력으로 연결되는지)
6-3. 스킬 실행 테스트
생성된 각 스킬에 대해 실제 실행 테스트를 수행한다:
-
테스트 프롬프트 작성 — 각 스킬에 대해 2~3개의 현실적인 테스트 프롬프트를 작성한다. 실제 사용자가 입력할 법한 구체적이고 자연스러운 문장으로 작성한다.
-
With-skill vs Without-skill 비교 실행 — 가능하면 스킬 있는 실행과 없는 실행을 병렬로 수행하여 스킬의 부가가치를 확인한다. 에이전트를 두 개씩 스폰한다:
- With-skill: 스킬을 읽고 작업 수행
- Without-skill (baseline): 같은 프롬프트를 스킬 없이 수행
-
결과 평가 — 산출물의 품질을 정성적(사용자 리뷰) + 정량적(assertion 기반) 으로 평가한다. 산출물이 객관적으로 검증 가능한 경우(파일 생성, 데이터 추출 등) assertion을 정의하고, 주관적인 경우(문체, 디자인) 사용자 피드백에 의존한다.
-
반복 개선 루프 — 테스트 결과에서 문제가 발견되면:
- 피드백을 일반화하여 스킬을 수정한다 (특정 예시에만 맞는 좁은 수정 금지)
- 수정 후 재테스트한다
- 사용자가 만족하거나 의미 있는 개선이 더 이상 없을 때까지 반복한다
-
반복 패턴 번들링 — 테스트 실행에서 에이전트들이 공통으로 작성하는 코드(예: 모든 테스트에서 동일한 헬퍼 스크립트를 생성)가 발견되면, 해당 코드를
에 미리 번들링한다.scripts/
6-4. 트리거 검증
각 스킬의 description이 올바르게 트리거되는지 검증한다:
- Should-trigger 쿼리 (8~10개) — 스킬을 트리거해야 하는 다양한 표현 (공식적/캐주얼, 명시적/암시적)
- Should-NOT-trigger 쿼리 (8~10개) — 키워드가 유사하지만 이 스킬이 아닌 다른 도구/스킬이 적합한 "near-miss" 쿼리
near-miss 작성 핵심: "피보나치 함수 작성" 같이 명백히 무관한 쿼리는 테스트 가치가 없다. "이 엑셀 파일의 차트를 PNG로 추출해줘" (xlsx 스킬 vs 이미지 변환)처럼 경계가 모호한 쿼리가 좋은 테스트 케이스다.
기존 스킬과의 트리거 충돌도 이 단계에서 확인한다.
6-5. 드라이런 테스트
- 오케스트레이터 스킬의 Phase 순서가 논리적인지 검토
- 데이터 전달 경로에 빈 구간(dead link)이 없는지 확인
- 모든 에이전트의 입력이 이전 Phase의 출력과 매칭되는지 확인
- 에러 시나리오별 폴백 경로가 실행 가능한지 확인
6-6. 테스트 시나리오 작성
- 오케스트레이터 스킬에
섹션 추가## 테스트 시나리오 - 정상 흐름 1개 + 에러 흐름 1개 이상 기술
Phase 7: 하네스 진화
하네스는 한 번 만들고 끝나는 정적 산출물이 아니다. 사용자 피드백에 따라 계속 진화하는 시스템이다.
7-1. 실행 후 피드백 수집
매 하네스 실행 완료 후, 사용자에게 피드백을 요청한다:
- "결과에서 개선할 부분이 있나요?"
- "에이전트 팀 구성이나 워크플로우에 바꾸고 싶은 점이 있나요?"
피드백이 없으면 넘어간다. 강요하지 않되, 반드시 기회를 제공한다.
7-2. 피드백 반영 경로
피드백 유형에 따라 수정 대상이 다르다:
| 피드백 유형 | 수정 대상 | 예시 |
|---|---|---|
| 결과물 품질 | 해당 에이전트의 스킬 | "분석이 너무 피상적" → 스킬에 깊이 기준 추가 |
| 에이전트 역할 | 에이전트 정의 | "보안 검토도 필요" → 새 에이전트 추가 |
| 워크플로우 순서 | 오케스트레이터 스킬 | "검증을 먼저 해야" → Phase 순서 변경 |
| 팀 구성 | 오케스트레이터 + 에이전트 | "이 둘은 합쳐도 될 듯" → 에이전트 병합 |
| 트리거 누락 | 스킬 description | "이 표현으로 하면 작동 안 함" → description 확장 |
7-3. 변경 이력
모든 변경은 CLAUDE.md의 변경 이력 테이블에 기록한다 (Phase 5-4 템플릿의 "변경 이력" 섹션과 동일 테이블):
**변경 이력:** | 날짜 | 변경 내용 | 대상 | 사유 | |------|----------|------|------| | 2026-04-05 | 초기 구성 | 전체 | - | | 2026-04-07 | QA 에이전트 추가 | agents/qa.md | 산출물 품질 검증 부족 피드백 | | 2026-04-10 | 톤 가이드 추가 | skills/content-creator | "너무 딱딱하다" 피드백 |
이 이력을 통해 하네스가 어떤 방향으로 진화했는지 추적하고, 퇴행(regression)을 방지한다.
7-4. 진화 트리거
사용자가 명시적으로 "하네스 수정해줘"라고 할 때만이 아니라, 다음 상황에서도 진화를 제안한다:
- 같은 유형의 피드백이 2회 이상 반복될 때
- 에이전트가 반복적으로 실패하는 패턴이 발견될 때
- 사용자가 오케스트레이터를 우회하여 수동으로 작업하는 것이 관찰될 때
7-5. 운영/유지보수 워크플로우
기존 하네스의 점검·수정·동기화를 체계적으로 수행한다. Phase 0에서 "운영/유지보수" 분기로 진입했을 때 이 워크플로우를 따른다.
Step 1: 현황 감사
파일 목록과 오케스트레이터 스킬의 에이전트 구성 비교 → 불일치 목록 생성.claude/agents/
디렉토리 목록과 오케스트레이터 스킬의 스킬 구성 비교 → 불일치 목록 생성.claude/skills/- 감사 결과를 사용자에게 보고한다
Step 2: 점진적 추가/수정
- 사용자 요청에 따라 에이전트 추가/수정/삭제, 스킬 추가/수정/삭제를 수행한다
- 변경은 한 번에 하나씩, 각 변경 후 즉시 Step 3(동기화)을 실행한다
Step 3: CLAUDE.md 변경 이력 갱신
- 변경 이력 테이블에 날짜, 변경 내용, 대상, 사유를 기록한다
Step 4: 변경 검증
- 수정된 에이전트/스킬의 구조 검증 (Phase 6-1 기준)
- 수정 범위가 트리거에 영향을 주면 트리거 검증 (Phase 6-4 기준)
- 대규모 변경(아키텍처 변경, 에이전트 3개 이상 추가/삭제) 시 Phase 6-3(실행 테스트), 6-5(드라이런)까지 수행
- CLAUDE.md와 실제 파일의 일치 여부 최종 확인
산출물 체크리스트
생성 완료 후 확인:
-
— 에이전트 정의 파일 필수 생성 (빌트인 타입이라도 파일 생성 필수)프로젝트/.claude/agents/ -
— 스킬 파일들 (SKILL.md + references/)프로젝트/.claude/skills/ - 오케스트레이터 스킬 1개 (데이터 흐름 + 에러 핸들링 + 테스트 시나리오 포함)
- 실행 모드 명시 (에이전트 팀 / 서브 에이전트 / 하이브리드 중 선택, 하이브리드면 Phase별 모드 기재)
- 모든 Agent 호출에
파라미터 명시model: "opus" -
— 아무것도 생성하지 않음.claude/commands/ - 기존 에이전트/스킬과 충돌 없음
- 스킬 description이 적극적("pushy")으로 작성됨 — 후속 작업 키워드 포함
- SKILL.md 본문이 500줄 이내, 초과 시 references/ 분리
- 테스트 프롬프트 2~3개로 실행 검증 완료
- 트리거 검증 (should-trigger + should-NOT-trigger) 완료
- CLAUDE.md에 하네스 포인터 등록 (트리거 규칙 + 변경 이력)
- CLAUDE.md 변경 이력에 에이전트/스킬 추가/삭제/수정 기록
- 오케스트레이터 Phase 1에 컨텍스트 확인 단계 (초기/후속/부분 재실행 판별)
참고
- 하네스 패턴:
references/agent-design-patterns.md - 기존 하네스 예시 (실제 파일 전문 포함):
references/team-examples.md - 오케스트레이터 템플릿:
references/orchestrator-template.md - 스킬 작성 가이드:
— 작성 패턴, 예시, 데이터 스키마 표준references/skill-writing-guide.md - 스킬 테스트 가이드:
— 테스트/평가/반복 개선 방법론references/skill-testing-guide.md - QA 에이전트 가이드:
— 빌드 하네스에 QA 에이전트를 포함할 때 참조. 통합 정합성 검증 방법론, 경계면 버그 패턴, QA 에이전트 정의 템플릿 포함. 실제 프로젝트에서 발견된 7개 버그 사례 기반.references/qa-agent-guide.md