一键导入
orchestrator
자연어 요청을 받아 전체 개발 사이클을 자동 처리해야 할 때. — MUST TRIGGER: /nova:auto 호출, 사용자가 '전체 알아서 해줘' 유형의 요청을 할 때, 다중 에이전트 편성이 필요한 복합 작업.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
자연어 요청을 받아 전체 개발 사이클을 자동 처리해야 할 때. — MUST TRIGGER: /nova:auto 호출, 사용자가 '전체 알아서 해줘' 유형의 요청을 할 때, 다중 에이전트 편성이 필요한 복합 작업.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
세션 간 맥락을 연결해야 할 때. — MUST TRIGGER: 세션 시작 시 NOVA-STATE.md 읽기, 커밋 후 상태 갱신, 스프린트 전환 시.
Nova 자체를 진화시킬 때 사용한다. — MUST TRIGGER: /nova:evolve 호출, 외부 기술 동향을 Nova에 반영해야 할 때, Nova 메타-개선(규칙/스킬/훅 구조 변경) 작업.
단일 Evaluator의 편향이 우려되는 중요 판단일 때 여러 관점으로 재검토한다. — MUST TRIGGER: 아키텍처 결정, 릴리스 게이트 의심 케이스, 사용자가 /nova:ask 또는 다관점 평가를 요청할 때.
새 Nova 스킬을 작성하거나 기존 스킬 description을 수정할 때. — MUST TRIGGER: skills/ 하위 신규 SKILL.md 생성, 기존 SKILL description 리팩터, 사용자가 'Nova 스킬 추가/수정' 요청 시.
Nova 방법론을 실제 프로젝트에서 검증해 개선 포인트를 찾을 때. — MUST TRIGGER: 신규 Nova 기능 검증, 사용자가 실전 피드백을 요청할 때, 워크트리 격리 환경에서 방법론을 리허설할 때.
Plan 문서의 탐색 폭/검증 깊이가 부족할 때 깊이 있는 Plan을 생성한다. — MUST TRIGGER: 복잡도 8+ 작업, 아키텍처 분기 결정, /nova:plan 결과가 얕다고 판단되는 경우, 사용자가 /nova:deepplan 호출.
| name | orchestrator |
| description | 자연어 요청을 받아 전체 개발 사이클을 자동 처리해야 할 때. — MUST TRIGGER: /nova:auto 호출, 사용자가 '전체 알아서 해줘' 유형의 요청을 할 때, 다중 에이전트 편성이 필요한 복합 작업. |
| description_en | Use when a natural-language request needs the entire development cycle auto-handled. — MUST TRIGGER: /nova:auto invocation, 'just handle everything' requests, or complex tasks requiring multi-agent formation. |
| user-invocable | false |
docs/nova-rules.md §2 Generator-Evaluator 분리 + 핸드오프 (self_verify 필드)docs/nova-rules.md §6 복잡한 작업의 스프린트 분할 (각 스프린트 완료 = Evaluator 필수)docs/nova-rules.md §10 관찰성 계약 — Phase 전이·스프린트 전환 시 이벤트 기록Phase 전이 시 (예: Phase A→B, pending→running→completed) 이벤트 기록:
bash hooks/record-event.sh phase_transition "$(jq -cn \
--arg oid "$ORCHESTRATION_ID" \
--arg phase "$PHASE_NAME" \
--arg from "$FROM_STATUS" \
--arg to "$TO_STATUS" \
'{orchestration_id:$oid, phase_name:$phase, from_status:$from, to_status:$to}')"
Sprint 전환 시:
bash hooks/record-event.sh sprint_started "{...}" # 착수
bash hooks/record-event.sh sprint_completed "{...}" # 종료 (verdict 포함)
블로커 감지/해소 시 (§7 분류):
bash hooks/record-event.sh blocker_raised "$(jq -cn --arg t \"$BTYPE\" --arg c \"$CAUSE\" '{blocker_type:$t, cause:$c}')" 2>/dev/null || true
bash hooks/record-event.sh blocker_resolved "$(jq -cn --arg t \"$BTYPE\" --arg r \"$RESOLUTION\" '{blocker_type:$t, resolution:$r}')" 2>/dev/null || true
Safe-default: 실패는 exit 0, 상위 파이프라인 영향 없음.
자연어 한 줄을 받아서 설계→구현→검증→수정 전체 파이프라인을 자동 실행한다.
이 섹션은 soft 권고가 아니라 계약이다. 각 Phase 진행 상황은 반드시 MCP 도구로 추적한다. 세션 중단 시 .nova-orchestration.json으로 복구 지점이 되며, 누락 시 Evolve 피드백 루프의 관찰 데이터가 공백이 된다.
| 시점 | MCP 도구 호출 | 누락 시 영향 |
|---|---|---|
| Phase 0: 오케스트레이션 등록 | orchestration_start — task, complexity, phases 전체 등록 | 세션 끊기면 복구 불가 + 외부에서 진행 조회 불가 |
| Phase N 시작 | orchestration_update — status: "running" | 어느 Phase에서 끊겼는지 모름 |
| Phase N 완료 | orchestration_update — status: "completed" + result | Phase 소요 시간·산출물 메트릭 공백 |
| Phase N 실패 | orchestration_update — status: "failed" + result | 실패 패턴 분석 불가 |
| 상태 확인 | orchestration_status — 현재 진행 상황 조회 | (조회용, 선택) |
요청 분석(Phase 1) 직전에 반드시 실행한다. 분기 매트릭스 평가·Architect spawn·Design 재사용 판단 등 어떤 다른 스텝보다 먼저.
orchestration_start({
task: "사용자 프로필 페이지 구현",
complexity: "medium",
phases: [
{ name: "설계", role: "Architect" },
{ name: "구현", role: "Generator" },
{ name: "검증", role: "Evaluator" }
]
})
→ orch-abc123 # 이 ID를 이후 모든 update에서 참조
이후 Phase마다:
orchestration_update({ orchestration_id: "orch-abc123", phase_name: "설계", status: "running" })
# ... Architect 실행 ...
orchestration_update({ orchestration_id: "orch-abc123", phase_name: "설계", status: "completed", result: "CPS 설계서 작성 완료" })
orchestration_update({ orchestration_id: "orch-abc123", phase_name: "구현", status: "running" })
# ...
MCP 도구 호출이 실제로 에러를 반환한 경우에만 추적 없이 진행한다. "가볍게 스킵"하거나 "이번은 필요 없을 것 같아서 생략"은 계약 위반이다.
호출 시도 후 에러 발생 시:
[Orchestrator] orchestration_start 호출 실패 — 추적 없이 진행: <에러 메시지> 기록사용 불가 환경이라는 추정만으로 호출 자체를 생략하지 않는다. 반드시 시도한다.
세션 종료 시 hooks/audit-orchestration.sh가 이 계약 준수 여부를 자동 검사한다. Generator/Evaluator Task 호출이 있었는데 .nova-orchestration.json에 오늘자 기록이 없으면 orchestration_missing 이벤트가 기록되고, 다음 세션 Evaluator가 이를 사용자에게 보고한다.
요청을 받자마자 Phase 1 분석 이전에 orchestration_start를 호출한다. 초기에 phases 구성이 불확실하면 최소 골격(Architect/Generator/Evaluator)으로 등록 후 orchestration_update로 필요 시 보완한다. 호출 자체를 스킵하지 않는다.
등록 없이 Phase 1 이후로 넘어가면 관찰성 계약을 위반한 것이며, 사후 감사(hooks/audit-orchestration.sh)가 orchestration_missing 이벤트를 기록한다.
사용자 요청에서 다음을 추출한다:
NOVA-STATE.md가 있으면 현재 스프린트 컨텍스트와 Phase를 참고한다.
요청 분석 직후, Phase 2 진입 전에 기존 산출물을 확인하고 분기한다.
slug 추출 규칙:
' 또는 ") 안의 텍스트를 추출한다. 따옴표가 없으면 플래그(--xxx)를 제외한 전체 요청 텍스트를 사용한다.-로 치환한다."건폐율 시각화 추가" → 건폐율-시각화-추가"add carousel" → add-carousel/nova:auto --fresh --design-only), 재사용 분기를 건너뛰고 fresh 동작으로 진입한다. 경고 로그: [Orchestrator] slug 추출 실패 — fresh 모드로 진행. 요청에 플래그가 없고 텍스트도 비어 있는 경우에만 요청 첫 단어를 slug로 사용한다.후보 매칭 규칙:
docs/plans/{slug}.md — exact match 우선startsWith) 파일을 fuzzy 후보로 수집다음 기존 Plan 중 재사용할 것을 선택하세요:
[1] {후보1}.md
[2] {후보2}.md
[f] fresh로 처음부터
분기 매트릭스:
우선순위: 위에서 아래로 순차 평가한다. 먼저 매칭되는 행이 적용된다. 특히 Plan과 Design이 모두 존재하면 Design 행이 우선(Phase 2·3 스킵).
| 조건 | 동작 |
|---|---|
--fresh + --deep 동시 있음 | 기존 Plan/Design 무시 + deepplan 스킬 호출로 Plan 생성 → PlanReuseFlow로 진입. 로그: [Orchestrator] fresh+deep 모드 — deepplan 호출 후 파이프라인 진입 |
--fresh 플래그 있음 (--deep 없음) | 재사용 무시 → fresh Architect (escape hatch). 로그: [Orchestrator] fresh 모드 — 기존 Plan/Design 무시 |
docs/designs/{slug}.md 존재 | Phase 2·3 스킵 → Phase 4(Generator) 직행. Dev 프롬프트 기반으로 Design 파일 내용을 사용. 로그: [Orchestrator] Design 재사용: docs/designs/{slug}.md — Phase 2·3 스킵 |
docs/plans/{slug}.md만 존재 + --deep | --deep 무시 + 경고 + Plan 재사용. 로그: [Orchestrator] --deep 무시 — 기존 Plan 존중. 재실행하려면 --fresh --deep |
docs/plans/{slug}.md만 존재 (Design 없음, --deep 없음) | Phase 2 Architect 실행. 단, Architect 프롬프트에 Plan 경로와 내용을 반드시 포함하여 fresh 설계를 금지한다. 로그: [Orchestrator] Plan 재사용: docs/plans/{slug}.md — Architect가 Plan 기반 설계 |
둘 다 없음 + --deep | deepplan 스킬 호출 → docs/plans/{slug}.md 생성 → PlanReuseFlow로 진입. 로그: [Orchestrator] deepplan 호출 — Plan 생성 후 파이프라인 진입 |
| 둘 다 없음 | 기존 동작 유지 (fresh Architect) |
--deep 처리 의사코드:
if flags.fresh and flags.deep:
log("[Orchestrator] fresh+deep 모드 — deepplan 호출 후 파이프라인 진입")
run_deepplan(request) # docs/plans/{slug}.md 생성
return PlanReuseFlow(plan_path)
if flags.fresh:
log("[Orchestrator] fresh 모드 — 기존 Plan/Design 무시")
return FreshFlow()
if exists(design_path):
log("[Orchestrator] Design 재사용: {design_path} — Phase 2·3 스킵")
return DesignReuseFlow(design_path)
if exists(plan_path) and flags.deep:
warn("[Orchestrator] --deep 무시 — 기존 Plan 존중. 재실행하려면 --fresh --deep")
return PlanReuseFlow(plan_path)
if exists(plan_path):
log("[Orchestrator] Plan 재사용: {plan_path} — Architect가 Plan 기반 설계")
return PlanReuseFlow(plan_path)
if flags.deep:
log("[Orchestrator] deepplan 호출 — Plan 생성 후 파이프라인 진입")
run_deepplan(request) # docs/plans/{slug}.md 생성
return PlanReuseFlow(plan_path)
return FreshFlow() # 기존 동작
Design 재사용 시 Phase 3 처리:
Phase 2·3을 스킵하므로, Phase 4 Dev 프롬프트는 Architect 설계서 대신 docs/designs/{slug}.md 내용을 기반으로 생성한다. Phase 3 프롬프트 변환 항목 표의 "Architect 설계서" 출처를 Design 파일로 대체한다.
Plan 재사용 시 Phase 2 처리: Architect 서브에이전트 컨텍스트에 다음을 추가한다:
기존 Plan 파일: docs/plans/{slug}.md
아래 Plan 내용을 기반으로 설계하라. 처음부터 새로 작성하지 않는다.
Plan 내용에 없는 내용을 발명하지 말고, Plan의 Solution·Sprints 구조를 설계서에 반영하라.
---
{Plan 파일 전체 내용}
---
UI 변경 사전 감지 (선택적): bash scripts/detect-ui-change.sh --planning 호출 → likely_ui 결과 표시. "UI 변경 가능성: {Yes/No}" 1줄 출력 (사용자 인지 목적, 분기 결정 X).
| 복잡도 | 기준 | 에이전트 편성 |
|---|---|---|
| 간단 | 1~2 파일, 단일 프로젝트 | Dev 1 → QA 1 |
| 보통 | 3~7 파일, 단일 프로젝트 | Architect 1 → Dev 1 → QA 1 |
| 복잡 | 8+ 파일 또는 멀티 프로젝트 | Architect N → Dev N → QA N → Fix N |
인증/DB/결제/보안 관련 변경은 파일 수와 무관하게 한 단계 상향한다.
간단 복잡도는 이 단계를 건너뛴다.
Architect 에이전트를 spawn하여 CPS 설계를 수행한다.
Architect 에이전트 지시 원칙:
멀티 프로젝트면 각 프로젝트별 Architect를 병렬 실행한다 (run_in_background: true).
Architect 서브에이전트에 반드시 포함할 컨텍스트:
작업 디렉토리: {프로젝트_경로}
작업 목표: {사용자 요청}
역할: 구현하지 않는다. 설계서만 작성한다.
산출물: CPS 설계서 (Context/Problem/Solution + 구현 체크리스트)
--design-only 플래그가 있으면 Phase 2 완료 후 설계 결과를 사용자에게 보여주고 종료한다.
Phase 3 이후는 실행하지 않는다.
복잡(8+파일) 이상에서 병렬 에이전트 투입 시 다음을 적용한다:
스프린트 내 태스크 간 선후 관계를 명시하여 병렬 실행을 최적화한다:
[독립] A: DB 스키마 ─┐
[독립] B: API 타입 ─┤── [의존] C: API 구현 ── [의존] D: 프론트엔드
[독립] E: 테스트 셋업 ─┘
병렬 에이전트에게 "이 파일은 다른 에이전트가 수정 중"이라는 컨텍스트를 제공한다:
주의: 다음 파일은 다른 에이전트가 수정 중입니다. 읽기만 하세요:
- src/types.ts (Agent A가 수정 중)
- src/db/schema.ts (Agent B가 수정 중)
3개의 전문화된 에이전트가 1개의 범용 에이전트보다 일관되게 더 나은 결과를 낸다. 에이전트 편성 시 역할별 전문 에이전트(architect, senior-dev, qa-engineer)를 투입한다.
병렬 sub-agent 실행 시 lead는 다음 시점에 진행 점검 SendMessage를 1회 권장한다 (Anthropic Managed Agents — Multiagent Orchestration 2026-05-06 패턴 흡수):
너무 잦은 점검은 sub-agent의 작업 흐름을 방해하므로 위 3 조건 외에는 발송하지 않는다. 점검 메시지는 짧게: "현재 진행 단계와 막힌 부분이 있다면 한 줄로 보고하라"로 충분. 점검 후 응답이 없으면 lead가 hang 가능성을 평가해 작업 분할 또는 회수를 결정한다. (참조: https://claude.com/blog/new-in-claude-managed-agents)
에이전트 간 전달 시 구조화된 아티팩트를 사용하여 컨텍스트 손실을 방지한다. (Anthropic 3-Agent Harness 패턴 적용)
| 전달 구간 | 아티팩트 형식 | 내용 |
|---|---|---|
| Architect → Generator | CPS 설계서 + 구현 체크리스트 | 기존 방식 유지 |
| Generator → Evaluator | 구조화된 변경 요약 | 변경 파일, 의도, 주요 결정 |
| Evaluator → Generator (Fix) | 구조화된 이슈 목록 | 파일:라인, 심각도, 수정 방향 |
Generator 완료 시 다음 정보를 Evaluator에게 전달한다:
## 변경 요약
- 변경 파일: {파일 목록}
- 변경 의도: {한줄 요약}
- 주요 결정: {트레이드오프 선택 이유}
- 알려진 제한: {미구현/의도적 생략 항목}
- self_verify: (선택 — Sprint 1부터 권장)
- confident: {확신 영역 + 한줄 근거(테스트/로직 단순성 등)}
- uncertain: {불확실 영역 + 사유(경계값/에러 처리/동시성/외부 의존)}
- not_tested: {실행 검증 미수행 영역 + 사유}
Evaluator는 코드 diff뿐 아니라 이 핸드오프 아티팩트를 참조하여, Generator의 의도와 실제 구현의 정합성을 검증한다.
self_verify 필드 원칙 (Sprint 1부터):
Orchestrator 수신 시 관측 (Sprint 1 채택률 측정):
self_verify 필드 유무를 한 줄로 로그한다:
[Handoff] self_verify: present — confident={N}/uncertain={N}/not_tested={N}
[Handoff] self_verify: absent — Generator에게 필드 포함 재요청 (Sprint 1은 재요청만, 차단 X)
absent인 경우 Evaluator 전달 전 Generator에게 한 번 재요청한다 (루프 금지 — 2회차도 absent면 그대로 진행).Evaluator 전달 시 메타 필드 (absent 구분):
재요청 시도 후에도 self_verify가 없으면 Evaluator에게 아래 메타 필드를 명시적으로 포함시킨다. Evaluator는 "원래 누락"과 "재요청도 실패한 누락"을 구분해 Sprint 1 관측 데이터 품질을 유지한다.
## self_verify_meta (Orchestrator가 Evaluator에게 전달)
- status: {present | absent_initial | absent_after_retry}
- retries: {0 | 1}
present: Generator가 1차에 포함 → Evaluator는 필드 내용을 그대로 사용absent_initial: 1차 누락 (재요청 전). 보통 Orchestrator가 재요청하여 이 상태로는 Evaluator에 도달하지 않음absent_after_retry: 재요청도 실패. 채택률 통계에서 "강한 미채택 시그널"로 집계FAIL 판정 시 수정 지시를 구조화하여 전달한다:
## 수정 지시
[1] {파일:라인} — {심각도} — {이슈} → {수정 방향}
[2] ...
수정 범위: 위 항목에만 한정. 다른 코드 수정 금지.
조건부 실행: Phase 1의 Design 재사용 분기에서는 이 Phase 전체가 스킵된다. 아래 표의 "Architect 설계서" 출처는 그 경로에서
docs/designs/{slug}.md로 대체되어 Phase 4 Dev 프롬프트에 직접 주입된다.
Architect의 설계서를 Dev 에이전트 프롬프트로 변환한다. 이 단계가 품질의 핵심이다 — 설계서의 구체적 정보가 구현 지침으로 주입된다.
Dev 프롬프트에 반드시 포함할 항목:
| 항목 | 출처 |
|---|---|
| 프로젝트 경로 (절대 경로) | 요청 분석 |
| 기술 스택 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| 파일/컴포넌트 구조 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| 디자인 토큰 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| 데이터 흐름 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| 구현 순서 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| 빌드 검증 명령 | Architect 설계서 (Design 재사용 시: docs/designs/{slug}.md) |
| "구현만 해, 검증은 별도" 명시 | 항상 포함 |
간단 복잡도는 Architect 없이 사용자 요청에서 직접 Dev 프롬프트를 생성한다.
Dev 에이전트를 spawn한다 (senior-dev 타입).
run_in_background: true로 비동기 실행모든 Dev 에이전트 완료 대기 후 구현 결과를 수집한다.
구현 결과 요약을 사용자에게 보고한다:
--skip-qa 플래그가 있으면 Phase 5~6을 건너뛰고 Phase 7로 이동한다.
QA 에이전트를 spawn한다 (qa-engineer 타입).
QA 프롬프트에 반드시 포함할 항목:
--strict 플래그가 있으면 Full 검증(Layer 1~3)을 강제한다.
기본은 Standard 검증이다.
멀티 프로젝트면 프로젝트별 QA를 병렬 실행한다.
| 항목 | 기본 | --strict |
|---|---|---|
| 빌드 성공 | 필수 | 필수 |
| TypeScript 타입 에러 | 필수 | 필수 |
| 파일 구조 (설계서 대조) | 필수 | 필수 |
| 실제 동작 (curl/playwright) | 생략 | 필수 |
| 경계값 시나리오 | 생략 | 필수 |
Phase 5가 PASS면 다음을 수행한다.
Phase 5.5는 5.5a (코드 기반 ux-audit Lite, 기존)와 5.5b (시각 기반 visual-self-verify, 신규) 두 단계로 구성된다.
docs/plans/{slug}-intent.json 존재 시 추가 수행 — 시각 기반 G3 차단 게이트Phase 5가 PASS면 다음을 수행한다:
result = bash scripts/detect-ui-change.sh --post-impl
result.is_ui == false → 즉시 Phase 7으로 (메트릭 기록 없음)
result.cache_hit == true:
bash scripts/log-metric.sh --event ui_audit_triggered --cache_hit 1--no-ux-audit 플래그 OR (nova-config.json 존재 AND .auto.uiAudit == false):
bash scripts/log-metric.sh --event ui_audit_opt_out --reason flag (또는 --reason config)사전 고지:
.nova/ui-state.json 미존재 또는 .first_ui_audit_shown == false:
다음 자세한 안내 출력 (첫 트리거 템플릿):
[Nova] UI 변경이 감지되었습니다. ux-audit Lite(3인 평가자)를 자동 실행합니다.
- 평가자: Newcomer · Accessibility · Cognitive Load
- 대상 파일: {result.files}
- 이 자동화를 끄려면: --no-ux-audit 플래그 또는 nova-config.json { "auto": { "uiAudit": false } }
.nova/ui-state.json 갱신: first_ui_audit_shown = trueux-audit Lite 실행 (Newcomer + Accessibility + Cognitive Load 3인, 5인 Full 아님):
target = result.files완료 후 메트릭 기록 및 캐시 갱신:
bash scripts/log-metric.sh --event ui_audit_completed \
--critical N --high N --medium N --low N
.nova/last-audit.json 갱신: hash, ts, result, files, stats
result.critical >= 1 AND (nova-config.json 미존재 OR .auto.uiAuditBlockOnCritical != false):
--no-ux-audit / 수동 fix그 외: Phase 5.5b 진입 (intent.json 존재 시) 또는 Phase 7으로
Phase 5.5a PASS 후 다음을 수행한다 (intent.json 존재 시만):
intent_path = docs/plans/{slug}-intent.json 확인
vsv = bash scripts/visual-self-verify.sh --intent <intent_path> --output .nova/visual-audit/{ts}.json
vsv.cache_hit == true:
bash scripts/log-metric.sh --event visual_verify_cache_hitvsv.skipped == true:
Agent 서브에이전트 spawn (vision-capable Claude — Anthropic API 키 불필요):
Agent({
description: "Visual Intent Verifier",
subagent_type: "general-purpose",
model: vsv.agent_model_hint == "opus" ? "opus" : undefined,
prompt: vsv.evaluator_prompt + (vsv.screenshot_paths 존재 시 첨부)
})
{verdict, overall_score, mismatches, strengths, rationale}차단 정책 적용:
verdict == fail → 커밋 차단 + 사용자에게 mismatches 보고. Phase 6 (Auto-Fix) 진입 가능verdict == degraded → 경고만, 차단 X. "[Nova] 시각 검증 폴백 — 사용자 수동 확인 권장" 안내verdict == pass → 캐시 갱신 (.nova/last-visual-audit.json — hash + verdict + ts), Phase 7으로메트릭 기록:
bash scripts/log-metric.sh --event visual_verify_completed \
--verdict <pass|fail|degraded> --critical N --high N --medium N --source <source>
QA 결과에서 FAIL/Critical/HIGH 이슈를 추출한다.
이슈가 없으면 이 단계를 건너뛴다.
Fix 에이전트를 spawn한다 (senior-dev 타입):
Fix 완료 후 Phase 5(검증)를 재실행한다. 재시도는 최대 1회. 2번째 FAIL 시 즉시 중단하고 사용자에게 에스컬레이션한다.
Fix 에이전트에 반드시 포함할 컨텍스트:
작업 디렉토리: {프로젝트_경로}
수정 대상: QA가 지적한 {N}건
[1] {파일:라인} — {이슈 설명} → {수정 방향}
[2] ...
주의: 지적된 항목 외 다른 코드는 수정하지 않는다.
전체 프로세스 결과를 요약하여 보고한다.
━━━ Nova Orchestrator — 완료 ━━━━━━━━━━━━━━━━━
요청: {원본 요청}
투입 에이전트: Architect {N} / Dev {N} / QA {N} / Fix {N}
## 프로젝트별 결과
| 프로젝트 | Dev | QA | 판정 |
|----------|-----|-----|------|
| {경로} | 완료 | PASS | ✓ |
## 수정 필요 항목
(CONDITIONAL 또는 FAIL 시 목록)
## 다음 단계
- {배포 가능 / 수동 확인 필요 항목}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
에이전트 상태 추적: Claude Code의 TeammateIdle/TaskCompleted 훅 이벤트가 가용하면, 에이전트 완료를 자동 감지하여 다음 의존 태스크를 트리거한다. 가용하지 않으면 폴링으로 대기한다.
CRITICAL: 팀원 종료 의무 (idle ≠ shutdown). TeamCreate 또는 Agent(team_name=...)로 teammate를 spawn 했다면, Phase 7 결과 보고 직후 lead가 각 teammate에게 명시적으로 SendMessage({type:"shutdown_request"}) 발송한다. teammate의 idle notification은 종료 신호가 아니며, lead가 shutdown_request를 보내고 teammate가 approve할 때까지 process가 살아 있어 tmux pane·세션 비용을 점유한다. 발송 직후 다음 단계로 진행하고 자동 idle/shutdown_response 알림으로 종료를 확인한다. 모든 teammate가 shutdown 응답한 뒤 필요 시 TeamDelete로 팀 디렉토리를 정리한다. (참조: MEMORY feedback_shutdown_idle_agents.md. v5.47.x 자기-발견 갭 — orchestrator/evolution skill에 본 의무 부재로 4 스캐너가 idle 점유한 사례)
CRITICAL: 결과 보고 직후, 반드시 NOVA-STATE.md를 갱신한다. 이 단계를 건너뛰지 마라.
NOVA-STATE.md가 있으면 Last Activity를 갱신한다:
- /nova:auto → {PASS/FAIL} — {프로젝트명} | {ISO 8601 타임스탬프}
- /nova:auto → UI 감지 → ux-audit Lite PASS — Critical N / High N / Medium N / Low N | {ISO 8601 타임스탬프}
시계열은 events.jsonl 단일 진실원 (v5.44.0+): NOVA-STATE.md의 Recent Activity / Recently Done 표에 행 추가 X. 활동 기록은 hooks/record-event.sh(자동 호출)가 .nova/events.jsonl에, v3 marker 영역은 Stop hook이 scripts/registry-render-state.sh로 자동 갱신. AI는 Current/Phase/Refs/Risks 본문 스냅샷만 손편집 — 트림 의무 없음. (상세: skills/context-chain/SKILL.md)
Phase 7 결과 보고 직후, orchestrator(메인 컨텍스트)가 직접 registry-write.sh 호출한다. Evaluator sub-agent는 verdict만 stdout 출력 — orchestrator가 받아 처리:
evaluator-pass 호출 (원자적 status=done + review_required=false + evidence)
bash "$NOVA_PLUGIN_PATH/scripts/registry-write.sh" evaluator-pass "$WI_ID" \
--commit-sha="$(git rev-parse HEAD)" \
--test-output="<verification path>"
transition <wi> blocked --blocked-reason="..."권한 경계 (Sprint 0 spec docs/specs/registry-write-authority-v3.md):
| 플래그 | 동작 |
|---|---|
| (없음) | 전체 사이클 (설계→구현→검증→수정) |
--design-only | 설계까지만 (구현 전 확인용) |
--skip-qa | QA 생략 (빠른 프로토타이핑) |
--strict | QA를 Full 검증으로 강제 |
--fresh | 기존 Plan/Design 무시, 강제 fresh Architect (escape hatch) |
--deep | Plan 없을 때 deepplan 스킬(Explorer×3→Synth→Critic→Refiner) 호출 후 파이프라인 진입. 아키텍처 전환·대형 마이그레이션에 권장 |
--fresh --deep | 기존 Plan 무시 + deepplan으로 새 Plan 생성 후 파이프라인 진입 |
$ARGUMENTS