Goal Loop
결정 문서를 세 가지 계층의 아티팩트로 컴파일합니다:
implementation-plan.md: 안정적인 Gate 계약으로, 무엇을 할지, 경계는 무엇인지, 어떻게 검증할지, 언제 중단할지를 정의합니다.goal-runbook.md: 유일한 실행 상태 및 증거 원장으로, 현재 실행 위치와 확보된 증거만을 기록합니다.goal-prompt.md: 수동 복사가 용이한 고정 진입점으로, 앞의 두 문서만을 참조하며 Gate에 바인딩되거나 계약을 반복하지 않습니다.
이 스킬은 실행 제어 평면을 구축하거나 검증할 뿐, Gate를 구현하지 않으며 승인된 결정을 다시 수행하지 않습니다.
입력 위치 파악
사용자는 effort 디렉토리, map.md, ADR/스펙, 또는 기존 implementation-plan.md를 제공합니다. Git 저장소 루트를 파싱하여 effort를 찾습니다. 유일하게 위치를 특정할 수 없으면 중단하고 확인된 경로를 나열합니다.
적용 가능한 CLAUDE.md, AGENTS.md, CONTEXT.md / CONTEXT-MAP.md, 그리고 effort 내의 map, 스펙, 구현 계획과 그들이 링크한 로컬 ADR, decision, issue 및 수락 종속성을 읽습니다. CONTEXT.md는 용어와 도메인 사실만 제공하며, 단독으로 Gate를 생성하지 않습니다.
두 가지 컨버전스된 진입점을 지원합니다:
- Decision-only: Gate, 범위, 검증 및 Exit이 수락된 ADR, 스펙 또는 해결된 이슈에서 도출 가능합니다.
- Wayfinder: map의
Not yet specified이 비어 있거나 명시적으로 "없음"이며, 실행 순서와 수락에 참여하는 decision이 모두 해결되었습니다.
로컬 결정 링크가 누락되었거나, ADR이 수락되지 않았거나, decision이 해결되지 않았거나, 문서에 TBD, TODO, 열린 질문, 미결정 사항이 있는 경우 중단하고 항목별로 격차를 보고합니다. 경험을 통해 제품 결정, 수락 정책 또는 롤백 경계를 보충하지 않습니다.
계획 컴파일
implementation-plan.md가 존재하지 않으면 references/implementation-plan-schema.md를 전체 읽고, 컨버전스된 결정에서 계획을 생성합니다. 이미 존재하면 읽고 검증만 하며 덮어쓰지 않습니다.
계획은 모든 안정적인 Gate 계약(Objective, Inputs, Scope boundary, Constraints, Slice policy, Verification, Evidence rule, Stop conditions, Rollback 및 Exit conditions)을 독점합니다. 프로젝트 명령어와 기술적 제약은 계획에만 기록되며 고정 프롬프트에는 포함되지 않습니다.
기존 계획에 Current Execution State가 포함된 경우, runbook 초기화 시 한 번 가져올 수 있습니다. Gate 이름, 순서 및 상태가 일치해야 하며, passed / blocked에는 해당 증거가 이미 있어야 합니다. 가져온 후에는 계획을 업데이트하지 않습니다.
원장 컴파일 또는 검증
references/runbook-schema.md를 전체 읽습니다.
goal-runbook.md가 존재하지 않는 경우:
- 계획에서 Gate 번호, 이름, 종속성 및 계약 위치를 읽습니다.
- 소스 코드 기준선, 유일한 Goal 원장 및 각 Gate의 진행 로그를 기록합니다.
- 가져올 상태가 없으면 G0만
active로 표시하고 나머지는planned으로 표시합니다. - 계획의 Objective, Constraints, Verification 또는 기타 Gate 계약을 복사하지 않습니다.
goal-runbook.md가 이미 존재하는 경우:
- 소스 경로 집합과 SHA-256을 비교합니다. 계획이나 결정이 변경된 경우 원장을 그대로 유지하고 중단합니다.
- Gate 순서, 계획 참조, 엄격한 선형 종속성, 상태 머신 및 진행 로그 증거를 검증합니다.
- 원장은
passed* active planned*,passed* blocked planned*또는passed+만 나타낼 수 있습니다.
계획은 계약의 유일한 출처입니다. 원장은 상태와 증거의 유일한 출처입니다. 둘은 서로 필드를 복사하거나 상태를 이중으로 기록하지 않아야 합니다.
고정 프롬프트 기록
references/goal-prompt-template.md를 전체 읽고, {{EFFORT_PATH}}만 교체하여 goal-prompt.md에 기록하거나 교체합니다.
고정 프롬프트는 반드시:
- 동일한 effort의 모든 Gate에서 완전히 동일해야 합니다.
- G0/G1 등 구체적인 Gate, Gate 이름 또는 Objective가 나타나지 않아야 합니다.
- Inputs, Constraints, Verification, Stop conditions, Rollback 또는 Exit conditions을 전개하지 않아야 합니다.
- 프로젝트 간에 안정적인 실행 루프와 동작 제약(최소 슬라이스, 범위 제어, 검증 실패 폐쇄 루프, 책임 분할, 무관한 구현 유지, 테스트 약화 금지, 수동 수락 인계 종료 및 push 금지)을 유지해야 합니다.
- Goal 시작 시 현재 유일한 활성 Gate를 잠그고 해당 Gate만 실행해야 합니다. 수동 수락 시에는 한 번만 확인을 요청하고, 먼저 인계 증거를 기록한 후, 호스트 에이전트가 제공한 성공 종료 상태를 사용하여 이번 Goal을 종료해야 합니다(
blocked,paused로 표시하거나 계속 실행하지 않음). 마지막으로 Gate, 자동화 결과, 수락 진입점, 최소 체크리스트, 명확한 응답 형식과 "Goal 종료, Gate는 여전히 active"를 포함한 인계 결과를 출력하고 일반 세션을 종료합니다. 이때 Gate는active상태를 유지해야 하며, 이후에는 사용자가 명확한 수락 결과를 가지고 수동으로 새로운 Goal을 다시 트리거해야 합니다. Goal 상태 메커니즘이 없으면 현재 태스크를 즉시 종료하고 대기 루프를 생성하지 않습니다. Gate가 통과하면 현재 Gate를passed로 표시하고 직접 후속 Gate를active로 표시하며 증거를 집계하고 전체 Goal을 명시적으로 종료합니다. 후속 Gate를 동일한 Goal에 포함시키지 않습니다.
goal-prompt.md는 삭제 및 재생성이 가능한 복사 편의 파일입니다. 소스 코드 기준선에 속하지 않으며, 계획이나 runbook에서 참조되지 않고 상태 검증에 참여하지 않습니다.
최종 응답에서는 컴파일 또는 검증 여부를 설명하고, 계획, runbook 및 고정 프롬프트의 경로를 제공하며 프롬프트 내용을 출력합니다. 아티팩트만 최적화할 때는 Gate를 구현하지 않습니다.