← 플랜 파이프라인 개요
소비자 스킬

/sub-follow-plan

PLAN.md를 끝까지 자율 진행한다. 리드(세션 모델)가 각 태스크를 하위 모델 서브에이전트로 spawn해 구현·검증시키고, 리드가 결과를 직접 검토하고 커밋한다. 사용자 질문은 모아서 마지막에 보고한다.

BashReadEditWriteGlobGrepAgentTaskCreateTaskUpdateTaskListAskUserQuestion

/sub-follow-plan

PLAN.md 또는 PLAN_*.md 의 모든 미완료 태스크를 의존 순서를 지키며 끝까지 자율 수행한다.

핵심 원칙

1.리드(세션 모델) = 오케스트레이터 — PLAN 해석, 의존 그래프 구축, 서브에이전트 스폰, 결과 검토·통합·커밋, PLAN 상태 갱신.
2.워커(하위 모델, 기본 sonnet) = 구현 — 한 태스크의 구현과 로컬 검증만 수행하고 결과를 보고. 커밋·PLAN/AGENTS/README 수정은 하지 않는다.
3.자율 진행 — 사용자에게 중간에 묻지 않는다. 판단이 필요한 항목은 가장 안전·보수적인 선택을 하고 "decisions" 큐에 누적해 종료 시 일괄 보고.
4.리드 검토 후 커밋 — 한 태스크 = 한 커밋. 리드가 변경 파일을 직접 읽고 검증한 뒤 커밋. PLAN 상태 갱신도 동일 커밋에 포함.

/follow-plan 과의 차이: 본 스킬은 구현을 하위 모델 서브에이전트에 위임하고 리드는 오케스트레이션·검토·통합에 집중한다. /parallel-plan 과의 차이: 본 스킬은 worktree를 쓰지 않고 in-place로 진행하며, PR이 아니라 main(현재 브랜치)에 직접 커밋한다.


0. 사전 확인

현재 디렉토리에 PLAN.md 또는 PLAN_*.md 가 있는지 확인.

·없으면 "PLAN 파일이 없습니다. /make-a-plan 으로 먼저 작성하세요." 로 안내하고 중단.
·여러 개면 가장 최근 수정 파일을 사용하되 어떤 파일을 쓸지 한 번 사용자에게 알린다.

1. 태스크 추출 + 의존 그래프

PLAN ID 체계를 본문에서 직접 감지한다 (T1, 1., NU-3 등). 추측 금지.

"아이디어 (보류)" 섹션 제외: PLAN 에 I-1, I-2...(표준 I-N; 구식 플랜은 ID-N 표기일 수도 있다) 로 넘버링된 "아이디어 (보류)" 섹션이 있으면 이는 착수 전 보류 후보이므로 태스크로 추출하지 않는다(구현·디스패치 대상 아님). 태스크(T번호 등)만 추출한다. 사용자가 특정 I-N 착수를 지시하면 그때 상세 인터뷰를 거쳐 정식 태스크로 편입한 뒤 진행한다.

각 미완료 태스크에 대해 다음을 수집한다.

·id (PLAN 표기 그대로), title, status (TODO / IN_PROGRESS), excerpt (해당 태스크 섹션 전문)
·dependencies: 표준 필드 의존: 이 있으면 그 값만 쓴다(의존: 없음 이면 의존 없음 확정). 표준 필드가 없는 구식 플랜에서만 Depends on:, 선행: 등 본문 표기를 쓰고, 명시가 없어도 PLAN의 절차상 직전 태스크 산출물을 명백히 전제로 한다면 의존으로 간주한다 (예: T0 삭제 → T1 재작성). /parallel-plan 과 동일 규칙.
·scope hint: 변경 대상 파일·모듈 (있으면)

TaskCreate로 모든 미완료 태스크를 등록한 뒤 TaskUpdate addBlockedBy 로 의존성을 표현한다.


2. 디스패치 사이클 (모든 태스크 완료까지 반복)

2-1. 라운드 산출

TaskList로 의존성이 모두 해소된 (blockedBy 비어 있음) pending 태스크 집합 = 이번 라운드의 후보.

병렬 안전성 점검: 같은 파일을 광범위하게 수정할 가능성이 명백한 쌍이 있으면 한쪽만 이번 라운드에 포함하고 나머지는 다음 라운드로 미룬다. 모호하면 그대로 병렬로 보낸다 (리드 검토 단계에서 충돌이 잡힌다).

2-2. 서브에이전트 스폰

한 메시지에서 Agent 도구를 라운드 후보 수만큼 동시 호출한다.

·subagent_type: general-purpose
·model: sonnet (기본. 특별히 무거운 태스크만 리드 재량으로 그 태스크에 한해 상향)
·description: {TASK_ID} 자율 구현
서브에이전트 프롬프트 템플릿
당신은 PLAN의 {TASK_ID} 태스크 하나만 끝까지 처리하는 워커 서브에이전트입니다.

## 컨텍스트
- 저장소: {ABS_REPO_PATH}
- PLAN 파일: {PLAN_FILE}
- 태스크 ID: {TASK_ID}
- 태스크 제목: {title}
- PLAN 발췌 (해당 태스크 섹션 전문):
  {plan excerpt}
- AGENTS.md(또는 CLAUDE.md) 관례를 따르세요.

## 절차

1. 변경 대상 파일을 먼저 읽어 컨텍스트 파악.
2. 구현 (작고 안전한 변경 단위로).
3. 스택에 맞는 로컬 검증(테스트/빌드/lint, 관련 범위 한정)을 시도. 적용되지 않으면 건너뛰고 그 이유를 보고.
4. **커밋하지 마세요.** 메인 에이전트(리드)가 검토 후 일괄 커밋합니다.
5. **PLAN.md / AGENTS.md / CLAUDE.md / README.md 는 수정하지 마세요.** (메인 에이전트가 통합 시 일괄 갱신)

## 자율 실행 규칙
- 사용자에게 묻지 마세요. 판단 사항은 가장 보수적·안전한 선택을 하고 `decisions` 에 기록.
- destructive 명령(파일 대량 삭제 외 — PLAN이 명시한 삭제는 OK), 외부 네트워크 호출은 회피.
- 실패해도 부분 변경은 그대로 두고 보고만 합니다.

## 결과 보고 (마지막 메시지에 반드시 포함)

RESULT

·task: {TASK_ID}
·status: success | partial | failed
·changed_files:
·<path>
·created_files:
·<path>
·deleted_files:
·<path>
·summary: <2\~5줄, 무엇을 했는지>
·decisions:
·q: <자율 판단 항목> a: <선택> why: <근거>
·followups:
·<후속 권장 작업>
·verification: <이번 세션에서 실제 실행한 명령과 그 결과만. 돌리지 않은 검증을 통과로 적지 말 것>
·blockers: <실패/막힌 부분이 있다면 진단>

2-3. 리드 검토 + 커밋

각 서브에이전트가 반환되면 리드가 다음 순서로 처리한다.

1.보고된 changed_files / created_files / deleted_files 를 Read·ls 로 직접 확인. 보고와 실제가 다르면 진단.
2.변경이 PLAN의 의도를 충족하는지 sanity check (핵심 파일 일부 읽기).
3.필요한 추가 검증을 리드가 직접 수행 (짧은 import / 빌드 / 문법 체크 정도). 워커의 verification 에 근거(실행 명령·결과)가 없는 항목은 통과로 치지 않고 리드가 직접 돌려 확인한다.
4.OK면 리드가 직접 커밋한다:
·변경 파일을 명시적으로 git add <files>.
·PLAN.md 의 해당 태스크 상태 라인을 완료로 갱신하고 같이 add.
·메시지: 첫 줄 [{TASK_ID}] 한국어 요약 (≤72자), 빈 줄, * 목록.
5.decisions / followups 가 있으면 세션 큐에 누적 (종료 시 사용자에게 일괄 보고).
6.TaskUpdate status=completed → 의존하던 후속 태스크들이 자동으로 풀린다.

2-4. 실패/블록 처리

·status == failed 면 리드가 진단 후 한 번 재시도(같은 서브에이전트 패턴으로 재스폰, 진단 결과를 프롬프트에 추가).
·재시도도 실패하면 해당 태스크를 블록 으로 표시(TaskUpdate metadata.blocked=true), 진단을 큐에 누적, 다음 후보로 진행.
·블록된 태스크에 의존하는 태스크들은 자동으로 진행 불가 → 종료 시 같이 보고.

3. 종료 보고

모든 태스크가 completed / blocked 가 되면 한 번에 보고한다.

·완료된 태스크 목록 ({TASK_ID} 제목 — {commit SHA})
·누적된 decisions (자율 판단 사항) — 사용자가 다른 선택을 원할 수 있는 항목
·누적된 followups (후속 권장 작업)
·블록된 태스크 + 진단 발췌
·PLAN 에 완료([x]) 태스크가 3개 이상 쌓여 있으면 /cleanup-plan 실행 권장

종료 시 사용자에게 별도 액션을 요청하지 않는다 (필요하면 followups 로 정리만).


주의사항

·한 태스크 = 한 커밋. 여러 태스크를 한 커밋에 묶지 않는다.
·서브에이전트는 절대 커밋하지 않는다. 모든 커밋·푸시는 리드가 한다.
·PLAN.md / AGENTS.md / CLAUDE.md / README.md 갱신은 리드 전담. 서브에이전트 프롬프트에 금지 명시.
·사용자가 /goal 등으로 끝까지 진행을 지시한 경우 중간에 멈추지 않는다.
·worktree·브랜치 분기 없음. 현재 브랜치에 직접 커밋한다. (분기·PR이 필요하면 /parallel-plan / /scopic-deep-pr 사용)
·푸시는 PLAN 또는 사용자 지시에 따라 결정. 기본은 로컬 커밋까지만.