G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
444 lines
28 KiB
Markdown
444 lines
28 KiB
Markdown
---
|
|
name: harness
|
|
description: "하네스를 구성합니다. 전문 에이전트를 정의하며, 해당 에이전트가 사용할 스킬을 생성하는 메타 스킬. (1) '하네스 구성해줘', '하네스 구축해줘' 요청 시, (2) '하네스 설계', '하네스 엔지니어링' 요청 시, (3) 새로운 도메인/프로젝트에 대한 하네스 기반 자동화 체계를 구축할 때, (4) 하네스 구성을 재구성하거나 확장할 때, (5) '하네스 점검', '하네스 감사', '하네스 현황', '에이전트/스킬 동기화' 등 기존 하네스 운영/유지보수 요청 시 사용."
|
|
---
|
|
|
|
# Harness — Agent Team & Skill Architect
|
|
|
|
도메인/프로젝트에 맞는 하네스를 구성하고, 각 에이전트의 역할을 정의하며, 에이전트가 사용할 스킬을 생성하는 메타 스킬.
|
|
|
|
**핵심 원칙:**
|
|
1. 에이전트 정의(`.claude/agents/`)와 스킬(`.claude/skills/`)을 생성한다.
|
|
2. **에이전트 팀을 기본 실행 모드로 사용한다.**
|
|
3. **CLAUDE.md에 하네스 포인터를 등록한다.** — 새 세션에서 오케스트레이터 스킬이 트리거되도록 최소한의 포인터(트리거 규칙 + 변경 이력)만 기록한다.
|
|
4. **하네스는 고정물이 아니라 진화하는 시스템이다.** — 매 실행 후 피드백을 반영하고, 에이전트·스킬·CLAUDE.md를 지속 갱신한다.
|
|
|
|
## 워크플로우
|
|
|
|
### Phase 0: 현황 감사
|
|
|
|
하네스 스킬이 트리거되면 가장 먼저 기존 하네스 현황을 확인한다.
|
|
|
|
1. `프로젝트/.claude/agents/`, `프로젝트/.claude/skills/`, `프로젝트/CLAUDE.md`를 읽는다
|
|
2. 현황에 따라 실행 모드를 분기한다:
|
|
- **신규 구축**: 에이전트/스킬 디렉토리가 없거나 비어있음 → Phase 1부터 전체 실행
|
|
- **기존 확장**: 기존 하네스가 있고 새 에이전트/스킬 추가 요청 → 아래 Phase 선택 매트릭스에 따라 필요한 Phase만 실행
|
|
- **운영/유지보수**: 기존 하네스의 감사·수정·동기화 요청 → Phase 7-5 운영/유지보수 워크플로우로 이동
|
|
|
|
**기존 확장 시 Phase 선택 매트릭스:**
|
|
| 변경 유형 | Phase 1 | Phase 2 | Phase 3 | Phase 4 | Phase 5 | Phase 6 |
|
|
|----------|---------|---------|---------|---------|---------|---------|
|
|
| 에이전트 추가 | 건너뜀 (Phase 0 결과 활용) | 배치 결정만 | 필수 | 전용 스킬 필요 시 | 오케스트레이터 수정 | 필수 |
|
|
| 스킬 추가/수정 | 건너뜀 | 건너뜀 | 건너뜀 | 필수 | 연결 변경 시 | 필수 |
|
|
| 아키텍처 변경 | 건너뜀 | 필수 | 영향받는 에이전트만 | 영향받는 스킬만 | 필수 | 필수 |
|
|
3. 기존 에이전트/스킬 목록과 CLAUDE.md 기록을 대조하여 불일치(drift)를 감지한다
|
|
4. 감사 결과를 사용자에게 요약 보고하고, 실행 계획을 확인받는다
|
|
|
|
### Phase 1: 도메인 분석
|
|
1. 사용자 요청에서 도메인/프로젝트 파악
|
|
2. 핵심 작업 유형 식별 (생성, 검증, 편집, 분석 등)
|
|
3. Phase 0 감사 결과를 기반으로 기존 에이전트/스킬과의 충돌/중복 분석
|
|
4. 프로젝트 코드베이스 탐색 — 기술 스택, 데이터 모델, 주요 모듈 파악
|
|
5. **사용자 숙련도 감지** — 대화의 맥락 단서(사용 용어, 질문 수준)로 기술 수준을 파악하고, 이후 커뮤니케이션 톤을 조절한다. 코딩 경험이 적은 사용자에게는 "assertion", "JSON schema" 같은 용어를 설명 없이 쓰지 않는다.
|
|
|
|
### Phase 2: 팀 아키텍처 설계
|
|
|
|
#### 2-1. 실행 모드 선택
|
|
|
|
**에이전트 팀이 최우선 기본값이다.** 2개 이상의 에이전트가 협업할 때는 반드시 에이전트 팀을 먼저 검토한다. 팀원 간 직접 통신(SendMessage)과 공유 작업 목록(TaskCreate)으로 자체 조율하며, 발견 공유·상충 토론·누락 보완이 결과 품질을 높인다.
|
|
|
|
| 모드 | 언제 사용 | 특성 |
|
|
|------|----------|------|
|
|
| **에이전트 팀** (기본) | 2명 이상 협업, 실시간 조율·피드백 교환이 필요, 중간 산출물 상호 참조 | `TeamCreate` + `SendMessage` + `TaskCreate`로 자체 조율 |
|
|
| **서브 에이전트** (대안) | 단일 에이전트 작업, 결과만 메인에 반환하면 충분, 팀 통신 오버헤드가 과할 때 | `Agent` 도구 직접 호출, `run_in_background`로 병렬 |
|
|
| **하이브리드** | Phase마다 특성이 다를 때 — 예: 병렬 수집(서브) → 합의 기반 통합(팀) | Phase 단위로 팀/서브를 섞어 구성 |
|
|
|
|
**의사결정 순서:**
|
|
1. 먼저 에이전트 팀으로 설계 가능한지 검토한다 — 2명 이상이면 기본값
|
|
2. 팀 통신이 구조적으로 불필요하고(결과 전달만), 팀 오버헤드가 이득보다 클 때만 서브 에이전트 선택
|
|
3. Phase별 특성이 확연히 다르면 하이브리드 고려 — 각 Phase의 실행 모드를 오케스트레이터에 명시
|
|
|
|
> 상세 비교표와 패턴별 의사결정 트리는 `references/agent-design-patterns.md`의 "실행 모드" 참조.
|
|
|
|
#### 2-2. 아키텍처 패턴 선택
|
|
|
|
1. 작업을 전문 영역으로 분해
|
|
2. 에이전트 팀 구조 결정 (아키텍처 패턴은 `references/agent-design-patterns.md` 참조)
|
|
- **파이프라인**: 순차 의존 작업
|
|
- **팬아웃/팬인**: 병렬 독립 작업
|
|
- **전문가 풀**: 상황별 선택 호출
|
|
- **생성-검증**: 생성 후 품질 검수
|
|
- **감독자**: 중앙 에이전트가 상태 관리 및 동적 분배
|
|
- **계층적 위임**: 상위 에이전트가 하위에 재귀적 위임
|
|
|
|
#### 2-3. 에이전트 분리 기준
|
|
|
|
전문성·병렬성·컨텍스트·재사용성 4축으로 판단한다. 상세 기준표는 `references/agent-design-patterns.md`의 "에이전트 분리 기준" 참조.
|
|
|
|
### Phase 3: 에이전트 정의 생성
|
|
|
|
**모든 에이전트는 반드시 `프로젝트/.claude/agents/{name}.md` 파일로 정의한다.** 에이전트 정의 파일 없이 Agent 도구의 prompt에 역할을 직접 넣는 것은 금지한다. 이유:
|
|
- 에이전트 정의가 파일로 존재해야 다음 세션에서 재사용 가능
|
|
- 팀 통신 프로토콜이 명시되어야 에이전트 간 협업 품질 보장
|
|
- 하네스의 핵심 가치는 에이전트(누가)와 스킬(어떻게)의 분리
|
|
|
|
빌트인 타입(`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/로 이동한다. |
|
|
| **일반화하라** | 특정 예시에만 맞는 좁은 규칙보다, 원리를 설명하여 다양한 입력에 대응할 수 있게 한다. 오버피팅 금지. |
|
|
| **반복 코드는 번들링** | 테스트 실행에서 에이전트들이 공통으로 작성하는 스크립트가 발견되면 `scripts/`에 미리 번들링한다. |
|
|
| **명령형으로 작성** | "~한다", "~하라" 형태의 명령형/지시형 어조를 사용한다. |
|
|
|
|
#### 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. 데이터 전달 프로토콜
|
|
|
|
오케스트레이터 내에 에이전트 간 데이터 전달 방식을 명시한다:
|
|
|
|
| 전략 | 방식 | 적용 모드 | 적합한 경우 |
|
|
|------|------|----------|-----------|
|
|
| **메시지 기반** | `SendMessage`로 팀원 간 직접 통신 | 팀 | 실시간 조율, 피드백 교환, 가벼운 상태 전달 |
|
|
| **태스크 기반** | `TaskCreate`/`TaskUpdate`로 작업 상태 공유 | 팀 | 진행상황 추적, 의존 관계 관리, 작업 자체 요청 |
|
|
| **파일 기반** | 약속된 경로에 파일을 쓰고 읽음 | 팀 + 서브 | 대용량 데이터, 구조화된 산출물, 감사 추적 필요 |
|
|
| **반환값 기반** | `Agent` 도구의 반환 메시지 | 서브 | 서브 에이전트 결과를 메인이 직접 수집 |
|
|
|
|
**권장 조합 (팀 모드):** 태스크 기반(조율) + 파일 기반(산출물) + 메시지 기반(실시간 소통)
|
|
**권장 조합 (서브 모드):** 반환값 기반(결과 수집) + 파일 기반(대용량 산출물)
|
|
**하이브리드:** 각 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 템플릿:**
|
|
|
|
````markdown
|
|
## 하네스: {도메인명}
|
|
|
|
**목표:** {하네스의 핵심 목표 한 줄}
|
|
|
|
**트리거:** {도메인} 관련 작업 요청 시 `{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. 스킬 실행 테스트
|
|
|
|
생성된 각 스킬에 대해 실제 실행 테스트를 수행한다:
|
|
|
|
1. **테스트 프롬프트 작성** — 각 스킬에 대해 2~3개의 현실적인 테스트 프롬프트를 작성한다. 실제 사용자가 입력할 법한 구체적이고 자연스러운 문장으로 작성한다.
|
|
|
|
2. **With-skill vs Without-skill 비교 실행** — 가능하면 스킬 있는 실행과 없는 실행을 병렬로 수행하여 스킬의 부가가치를 확인한다. 에이전트를 두 개씩 스폰한다:
|
|
- **With-skill**: 스킬을 읽고 작업 수행
|
|
- **Without-skill (baseline)**: 같은 프롬프트를 스킬 없이 수행
|
|
|
|
3. **결과 평가** — 산출물의 품질을 정성적(사용자 리뷰) + 정량적(assertion 기반) 으로 평가한다. 산출물이 객관적으로 검증 가능한 경우(파일 생성, 데이터 추출 등) assertion을 정의하고, 주관적인 경우(문체, 디자인) 사용자 피드백에 의존한다.
|
|
|
|
4. **반복 개선 루프** — 테스트 결과에서 문제가 발견되면:
|
|
- 피드백을 **일반화**하여 스킬을 수정한다 (특정 예시에만 맞는 좁은 수정 금지)
|
|
- 수정 후 재테스트한다
|
|
- 사용자가 만족하거나 의미 있는 개선이 더 이상 없을 때까지 반복한다
|
|
|
|
5. **반복 패턴 번들링** — 테스트 실행에서 에이전트들이 공통으로 작성하는 코드(예: 모든 테스트에서 동일한 헬퍼 스크립트를 생성)가 발견되면, 해당 코드를 `scripts/`에 미리 번들링한다.
|
|
|
|
#### 6-4. 트리거 검증
|
|
|
|
각 스킬의 description이 올바르게 트리거되는지 검증한다:
|
|
|
|
1. **Should-trigger 쿼리** (8~10개) — 스킬을 트리거해야 하는 다양한 표현 (공식적/캐주얼, 명시적/암시적)
|
|
2. **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. 피드백 반영 경로
|
|
|
|
피드백 유형에 따라 수정 대상이 다르다:
|
|
|
|
| 피드백 유형 | 수정 대상 | 예시 |
|
|
|-----------|----------|------|
|
|
| 결과물 품질 | 해당 에이전트의 스킬 | "분석이 너무 피상적" → 스킬에 깊이 기준 추가 |
|
|
| 에이전트 역할 | 에이전트 정의 `.md` | "보안 검토도 필요" → 새 에이전트 추가 |
|
|
| 워크플로우 순서 | 오케스트레이터 스킬 | "검증을 먼저 해야" → Phase 순서 변경 |
|
|
| 팀 구성 | 오케스트레이터 + 에이전트 | "이 둘은 합쳐도 될 듯" → 에이전트 병합 |
|
|
| 트리거 누락 | 스킬 description | "이 표현으로 하면 작동 안 함" → description 확장 |
|
|
|
|
#### 7-3. 변경 이력
|
|
|
|
모든 변경은 CLAUDE.md의 **변경 이력** 테이블에 기록한다 (Phase 5-4 템플릿의 "변경 이력" 섹션과 동일 테이블):
|
|
|
|
```markdown
|
|
**변경 이력:**
|
|
| 날짜 | 변경 내용 | 대상 | 사유 |
|
|
|------|----------|------|------|
|
|
| 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/` — **에이전트 정의 파일 필수 생성** (빌트인 타입이라도 파일 생성 필수)
|
|
- [ ] `프로젝트/.claude/skills/` — 스킬 파일들 (SKILL.md + references/)
|
|
- [ ] 오케스트레이터 스킬 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 에이전트 가이드**: `references/qa-agent-guide.md` — 빌드 하네스에 QA 에이전트를 포함할 때 참조. 통합 정합성 검증 방법론, 경계면 버그 패턴, QA 에이전트 정의 템플릿 포함. 실제 프로젝트에서 발견된 7개 버그 사례 기반.
|