---
name: hai-build
description: "hai-shell ZSH 플러그인의 전체 빌드를 조율하는 오케스트레이터. 'hai-shell 구현해줘', 'hai-shell 빌드', 'MVP 만들어줘', 'hai-shell 개발 시작' 등 hai-shell 프로젝트의 구현을 요청하면 반드시 이 스킬을 사용할 것. PRD 기반으로 에이전트 팀을 구성하여 코어 플러그인과 AI 백엔드를 병렬 구현하고 QA를 수행한다."
---

# hai-build — hai-shell 빌드 오케스트레이터

hai-shell ZSH 플러그인의 MVP를 에이전트 팀으로 구현하는 통합 스킬.

## 실행 모드: 에이전트 팀

## 에이전트 구성

| 팀원 | 에이전트 타입 | 역할 | 스킬 | 출력 |
|------|-------------|------|------|------|
| core-dev | 커스텀 (`core-dev`) | 코어 플러그인 | zsh-plugin-dev | `hai.plugin.zsh`, `lib/*.zsh` |
| api-dev | 커스텀 (`api-dev`) | AI 백엔드 | ai-api-curl | `lib/api.zsh`, `lib/backends/*.zsh`, `lib/tools.zsh` |
| qa-engineer | general-purpose | QA | — | `tests/*.zsh`, `_workspace/qa_report.md` |

## 워크플로우

### Phase 1: 준비

1. PRD 읽기: `docs/PRD.md`
2. 작업 디렉토리에 `_workspace/` 생성
3. 프로젝트 디렉토리 구조 생성:
   ```
   mkdir -p lib/backends tests docs
   ```
4. 기본 설정 디렉토리 구조 정의: `~/.config/hai/config.yaml` 템플릿

### Phase 2: 팀 구성

1. 팀 생성:
   ```
   TeamCreate(
     team_name: "hai-build-team",
     members: [
       {
         name: "core-dev",
         agent_type: "core-dev",
         model: "opus",
         prompt: "PRD(docs/PRD.md)를 읽고 hai-shell의 코어 모듈을 구현하라.
           스킬 zsh-plugin-dev를 Skill 도구로 참조하라.
           구현 순서: 1) hai.plugin.zsh 엔트리포인트 2) lib/classifier.zsh 3) lib/mode.zsh 4) lib/config.zsh 5) lib/prompt.zsh
           api-dev와 __hai_query 함수 인터페이스를 먼저 합의하라.
           모듈 하나 완성할 때마다 qa-engineer에게 알려라."
       },
       {
         name: "api-dev",
         agent_type: "api-dev",
         model: "opus",
         prompt: "PRD(docs/PRD.md)를 읽고 hai-shell의 AI 백엔드 모듈을 구현하라.
           스킬 ai-api-curl을 Skill 도구로 참조하라.
           구현 순서: 1) lib/api.zsh (라우터) 2) lib/backends/anthropic.zsh 3) lib/backends/openai.zsh 4) lib/backends/copilot.zsh 5) lib/backends/ollama.zsh 6) lib/tools.zsh
           core-dev와 __hai_query 함수 인터페이스를 먼저 합의하라.
           모듈 하나 완성할 때마다 qa-engineer에게 알려라."
       },
       {
         name: "qa-engineer",
         agent_type: "qa-engineer",
         model: "opus",
         prompt: "hai-shell의 QA를 담당한다. core-dev와 api-dev가 모듈을 완성할 때마다 알림을 받으면 즉시 해당 모듈을 검증하라.
           검증 항목: 1) 함수 시그니처 정합성 2) 변수명 컨벤션 3) 에러 경로 4) 경계면 교차 비교
           테스트 스크립트를 tests/에 작성하라.
           이슈 발견 시 해당 담당자에게 직접 SendMessage.
           최종 QA 리포트를 _workspace/qa_report.md에 작성하라."
       }
     ]
   )
   ```

2. 작업 등록:
   ```
   TaskCreate(tasks: [
     { title: "인터페이스 합의", description: "__hai_query 함수 시그니처와 응답 형식 합의", assignee: "core-dev" },
     { title: "엔트리포인트 구현", description: "hai.plugin.zsh 로더", assignee: "core-dev", depends_on: ["인터페이스 합의"] },
     { title: "분류기 구현", description: "lib/classifier.zsh — is_shell_command", assignee: "core-dev", depends_on: ["엔트리포인트 구현"] },
     { title: "모드 시스템 구현", description: "lib/mode.zsh — auto/shell + Ctrl+Space", assignee: "core-dev", depends_on: ["엔트리포인트 구현"] },
     { title: "설정 파서 구현", description: "lib/config.zsh — YAML 경량 파서", assignee: "core-dev" },
     { title: "프롬프트 통합", description: "lib/prompt.zsh — Starship 호환 모드 표시", assignee: "core-dev", depends_on: ["모드 시스템 구현"] },
     { title: "API 라우터 구현", description: "lib/api.zsh — 백엔드 감지 + fallback", assignee: "api-dev", depends_on: ["인터페이스 합의"] },
     { title: "Anthropic 백엔드", description: "lib/backends/anthropic.zsh — tool use", assignee: "api-dev", depends_on: ["API 라우터 구현"] },
     { title: "OpenAI 백엔드", description: "lib/backends/openai.zsh — function calling", assignee: "api-dev", depends_on: ["API 라우터 구현"] },
     { title: "Copilot 백엔드", description: "lib/backends/copilot.zsh", assignee: "api-dev", depends_on: ["API 라우터 구현"] },
     { title: "Ollama 백엔드", description: "lib/backends/ollama.zsh", assignee: "api-dev", depends_on: ["API 라우터 구현"] },
     { title: "Tool use 핸들러", description: "lib/tools.zsh — execute_command, read_file, edit_file", assignee: "api-dev", depends_on: ["Anthropic 백엔드"] },
     { title: "점진적 QA", description: "각 모듈 완성 시 경계면 검증", assignee: "qa-engineer" },
     { title: "통합 테스트 작성", description: "tests/ 디렉토리에 테스트 스크립트", assignee: "qa-engineer", depends_on: ["Tool use 핸들러", "프롬프트 통합"] },
     { title: "설치 스크립트", description: "install.sh + README.md", assignee: "core-dev", depends_on: ["통합 테스트 작성"] }
   ])
   ```

### Phase 3: 구현 (팀 자체 조율)

**실행 방식:** 팀원들이 자체 조율

1. core-dev와 api-dev가 **인터페이스 합의**를 최우선으로 수행 (SendMessage)
   - `__hai_query "$prompt"` → stdout으로 JSON 반환
   - 공통 응답 형식: `{"type": "text|tool_use|error", "content": "...", "tool": {...}}`
2. 합의 후 core-dev는 코어 모듈, api-dev는 백엔드 모듈을 **병렬 구현**
3. qa-engineer는 모듈 완성 알림을 받으면 **즉시 해당 모듈 검증**
4. 이슈 발견 시 qa-engineer가 담당자에게 직접 SendMessage

**팀원 간 통신 규칙:**
- core-dev ↔ api-dev: 인터페이스 변경 시 반드시 상대방에게 SendMessage
- core-dev/api-dev → qa-engineer: 모듈 완성 시 알림
- qa-engineer → core-dev/api-dev: 이슈 발견 시 파일명+줄번호와 함께 알림

**산출물 저장:**

| 팀원 | 출력 경로 |
|------|----------|
| core-dev | `hai.plugin.zsh`, `lib/classifier.zsh`, `lib/mode.zsh`, `lib/config.zsh`, `lib/prompt.zsh` |
| api-dev | `lib/api.zsh`, `lib/backends/*.zsh`, `lib/tools.zsh` |
| qa-engineer | `tests/*.zsh`, `_workspace/qa_report.md` |

**리더 모니터링:**
- TaskGet으로 전체 진행률 확인
- 팀원 유휴 알림 수신 시 다음 작업 안내
- 인터페이스 합의가 10분 이상 지연되면 개입

### Phase 4: 통합 및 마무리

1. 모든 팀원의 작업 완료 대기 (TaskGet)
2. qa-engineer의 최종 QA 리포트 (`_workspace/qa_report.md`) Read
3. 미해결 이슈가 있으면 해당 팀원에게 수정 요청
4. install.sh 작성 (core-dev)
5. README.md 생성:
   - 설치 방법 (`source hai.plugin.zsh`)
   - 설정 방법 (`~/.config/hai/config.yaml`)
   - 사용법 (`hai "질문"`, Ctrl+Space)
6. 기본 설정 파일 템플릿 생성: `config.yaml.example`

### Phase 5: 정리

1. 팀원들에게 종료 요청 (SendMessage)
2. 팀 정리 (TeamDelete)
3. `_workspace/` 보존
4. 사용자에게 결과 요약 보고:
   - 생성된 파일 목록
   - 설치 방법
   - 알려진 제한사항

## 데이터 흐름

```
[리더] → TeamCreate → [core-dev] ←SendMessage→ [api-dev]
                          │                        │
                          ↓                        ↓
                    hai.plugin.zsh            lib/api.zsh
                    lib/classifier.zsh        lib/backends/*.zsh
                    lib/mode.zsh              lib/tools.zsh
                    lib/config.zsh
                    lib/prompt.zsh
                          │                        │
                          └──── [qa-engineer] ─────┘
                                    │
                                    ↓
                          tests/*.zsh + qa_report.md
                                    │
                                    ↓
                          [리더: 통합 + README + install.sh]
```

## 에러 핸들링

| 상황 | 전략 |
|------|------|
| 팀원 1명 실패 | 리더가 SendMessage로 상태 확인 → 재시작 또는 리더가 직접 구현 |
| 인터페이스 합의 교착 | 리더가 표준 형식을 확정하고 양쪽에 전달 |
| QA에서 심각한 경계면 불일치 | 해당 팀원에게 수정 요청, 수정 후 재검증 |
| jq 미설치 환경 | 에러 메시지에 설치 안내 포함 (`brew install jq`) |

## 테스트 시나리오

### 정상 흐름
1. 사용자가 "hai-shell MVP 구현해줘"를 요청
2. Phase 1에서 PRD 분석, 디렉토리 구조 생성
3. Phase 2에서 3명 팀원 구성, 15개 작업 등록
4. Phase 3에서 core-dev/api-dev 병렬 구현, qa-engineer 점진적 검증
5. Phase 4에서 통합, README/install.sh 생성
6. Phase 5에서 팀 정리
7. 예상 결과: `source hai.plugin.zsh`로 동작하는 완전한 플러그인

### 에러 흐름
1. Phase 3에서 api-dev가 Anthropic API 호출 구현 중 에러로 중지
2. 리더가 유휴 알림 수신
3. SendMessage로 상태 확인 → 재시작 시도
4. 재시작 실패 시 리더가 직접 anthropic.zsh 구현
5. 나머지 백엔드는 api-dev 없이 리더가 완성
6. QA 리포트에 "api-dev 중단으로 리더가 일부 구현" 명시
