gangjaeyu/harness-loop-fullstack
아이디어 구체화 → PRD/TRD → 아키텍처 → 마스터 플랜 → 검증 하네스 → 개발 루프까지, 풀스택 프로젝트를 한 흐름으로 설계하고 구현하게 하고, 완료 뒤의 코드→문서·리팩토링·기능 추가·버그 수정까지 잇는 한글 스킬 13개. 각 레이어는 앞 레이어의 '파일'만 입력으로 받아 세션이 끊겨도 이어서 진행할 수 있다. / Korean agent skills for Claude Code & Codex: idea → PRD/TRD → architecture → task plan → verification harness → autonomous dev loop, plus post-launch refactor, feature and bug-fix flows.
변경 기록
1.15.5
병렬 루프(Orca 모드)의 구동 스크립트를 안전하게 멈추는 방법을 정했습니다(loop-setup·loop-update). 전에는 프로세스를 끄는 것뿐이라, 판단 담당(코디네이터)이 STATE.md 를 고치거나 커밋하는 도중에 끊길 수 있었습니다.
--stop으로 멈춥니다. 정지 요청 파일을 남기면 구동 스크립트가 단계 사이에서 스스로 멈춥니다. 쉬는 단계(대기 등)인데 150초 안에 안 멈추면 그때만 끕니다.- 판단 담당이 일하는 중에는 끄지 않습니다. 판단 담당·앱 전환·e2e 가 도는 중이면 끝날 때까지 기다립니다. 어느 단계든 끄려면
--stop --force를 씁니다. - 다시 시작할 때 앞 실행의 판단 담당을 기다립니다. 아직 돌고 있으면 끝난 뒤 시작해,
STATE.md를 쓰는 쪽이 둘이 되지 않습니다. - 사람이 멈춘 루프는 질문이 걸려 있어도 "정지 — 사람 요청" 으로 기록돼 다시 알리지 않습니다
- 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 옮깁니다(옮기려고 멈출 때는 상태판 단계가 "대기" 일 때)
1.15.4
병렬 루프(Orca 모드)에서 워커를 띄우는 도중 구동 스크립트를 멈추면, 그 워커가 구동 스크립트의 기록 없이 남아 다시 띄울 때 같은 워크트리에 워커가 하나 더 뜰 수 있던 문제를 고쳤습니다(loop-setup·loop-update).
- 워커 기록을 바로 남깁니다. 전에는 워커가 실제로 시작됐는지 확인한 뒤(30초~몇 분)에 기록했습니다. 이제 Orca 가 워커 ID 를 주는 즉시 기록합니다.
- 다시 시작할 때 기록 없는 워커를 정리합니다. Orca 에 살아 있는 워커 가운데 구동 스크립트 기록에 없는 것을 찾아 정리합니다. 정리가 안 되면 그 태스크만 세워 둡니다.
- 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 옮깁니다
1.15.3
병렬 루프(Orca 모드)에서 워커 하나가 시작에 실패하자 도는 워커와 무관하게 루프 전체가 섰고, 그 정지를 알림 한 번 뒤 아무도 다시 알리지 않아 1시간 넘게 놀던 문제를 고쳤습니다(loop-setup·loop-update).
- 시작 실패는 그 행만 세웁니다. 워커가 끝내 뜨지 않으면 그 태스크에 "중단" 을 남기고 루프는 계속 돕니다. 다음 라운드에 한 번 더 띄우고, 두 번째도 실패하면 그 태스크만 질문으로 올리고 슬롯을 비웁니다.
- 지시문이 Orca 쪽에 남은 경우를 가릅니다.
terminal read의draft는 Orca 입력칸의 글이라 Enter 를 보내도 빈 줄만 제출됩니다. 에이전트 입력 줄이 비어 있으면 그 글을 다시 보냅니다(에이전트 입력창에 남은 경우는 전처럼 Enter). - 멈추지 않는 워커를 끝까지 정리합니다.
worker-stop뒤 멈춤이 확인되지 않으면worker-abandon→ 터미널 닫기 → 닫힘 확인까지 갑니다. 정리가 안 되면 그 슬롯만 비워 둡니다(한 워크트리에 워커가 둘 뜨지 않게). - 멈춘 루프를 다시 알립니다. 전부 끝났거나 사람이 멈춘 경우가 아니면 30분·2시간·8시간에 다시 알리고, 다시 띄우는 명령을 함께 보여 줍니다. 그래서 손으로 멈출 때는
loop-exit.txt에 "정지 — 사람 요청" 을 먼저 적습니다. - Orca 전용 내용을 따로 뺐습니다.
loop-setup의 Orca 모드 내용(구동 스크립트·감시·상태판·답하기 템플릿, 스모크, 점검)을skills/loop-setup/references/orca.md로 옮겼습니다. 만들어지는LOOP.md는 전과 같습니다. - 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 옮깁니다
1.15.2
phase 의 태스크가 다 끝났는데 phase 가 완료로 찍히지 않고, "묶음 검사를 직접 돌리고 결과를 알려 달라" 는 질문이 사람에게 넘어오던 문제를 고쳤습니다(harness-setup·harness-update·loop-setup·loop-update).
- phase 완료 묶음을 구동 스크립트가 돌립니다. 전에는 판단 담당(코디네이터)이 돌리게 되어 있었습니다. 그런데 판단 담당에게 허용된 명령은 정해진 모양뿐이라 슬롯 환경변수를 먼저 정하는 명령이 거부됐고, 명령 하나도 10분까지만 기다릴 수 있어 긴 e2e 묶음이 돌지 못했습니다. 이제 판단 담당은
묶음 대기: phase-NN한 줄만 적습니다. 구동 스크립트가 창 없이 묶음을 돌려 결과를 파일로 남기고, 다음 라운드의 판단 담당이 그 결과로 phase 를 완료로 찍거나 실패를 분류합니다 - 묶음 명령은 하네스 한 곳에 둡니다.
e2e.md에## phase 완료 묶음 명령절이 생겼고(한 줄에 명령 하나, 활성인 흐름만), 구동 스크립트가 돌 때마다 이 절을 읽습니다. 절이 비어 있으면 통과가 아니라 미활성으로 봅니다 - 이전 버전으로 세운 하네스·루프는 "루프 업데이트해줘" 로 옮깁니다(하네스에 그 절이 없으면 함께 만듭니다). 지금 "결과를 알려 달라" 질문이 서 있으면 옮기면서
묶음 대기:로 바꿉니다
1.15.1
병렬 루프(Orca 모드)에서 1.15.0 의 죽은 워커 감시에 걸리지 않는 정지 둘과, 구동 스크립트를 멈춘 동안 감시가 꺼지는 공백을 고쳤습니다(loop-setup·loop-update).
- 모델 오류로 입력창에 선 워커를 깨웁니다. codex 워커가 "Selected model is at capacity" 오류를 받고 입력창에서 30분 넘게 서 있었습니다. 살아 있어서 죽음 판정에는 걸리지 않았습니다. 이제 5분마다 하는 확인 때 워커 화면 끝을 보고, 모델 오류 문구가 있으면 "계속하라"를 입력합니다. 다음 확인에도 그대로면 멈추고 같은 자리에서 다시 띄웁니다. 사용량 한도 화면은 지금처럼 기다립니다
- 제출되지 않은 지시문에 Enter 를 보냅니다. 워커를 띄울 때 지시문이 입력창에 초안으로 남는 경우(codex 0.162 는
[Pasted Content N chars]로 접어 보입니다)를 알아보고 Enter 를 한 번 보냅니다. 그래도 안 뜨면 멈춘 것을 확인한 뒤 한 번 더 띄웁니다. 전에는 이 경우 "시작 실패" 로 루프가 섰습니다 - 구동 스크립트를 고칠 때 감시를 오래 끄지 않습니다. 스크립트만 고칠 때는 워커가 끝나기를 기다리지 않고, 고친 파일을 커밋해 코디네이터 워크트리에 들인 뒤 곧바로 다시 띄웁니다. 다시 뜬 스크립트가 돌던 워커를 이어받아 지켜봅니다
- 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 옮깁니다
1.15.0
병렬 루프(Orca 모드)에서 워커 하나가 오류 기록 없이 사라진 채 한 시간 반 아무도 몰랐고, 같은 시각 질문 하나가 알림 한 번 뒤 답을 기다리며 슬롯을 차지하던 문제를 고쳤습니다(harness-setup·harness-update·loop-setup·loop-update).
- 워커가 죽지 않게 합니다(예방). 원인은 에이전트가 아니라 다른 슬롯의 게이트 스크립트였습니다. 검사가 띄운 프로세스 번호를 모아 두었다가 끝날 때 전부 껐는데, Windows 가 그 번호를 곧바로 다른 프로세스에 다시 주면서 옆 슬롯의 워커가 함께 꺼졌습니다. 이제 하네스 스크립트는 프로세스를 이름으로 끄지 않고, 자기가 띄운 것인지 시작 시각까지 대조한 뒤에만 끕니다. 이미 세운 하네스는 "하네스 업데이트해줘 — 워커가 사라진다" 로 고칩니다
- 그래도 죽으면 정리합니다. 워커가 도는 동안 5분마다 생존을 확인합니다. Orca 가 생존을 확인하지 못하고 그 워커의 화면·기록이 20분째 멈춰 있으면, 멈춘 것을 확인한 뒤 같은 자리에서 다시 띄웁니다. 사람의 답이나 사용량 한도를 기다리는 워커는 건드리지 않습니다. 오래 도는 워커(구현 90분·검증 45분)는 알리기만 합니다
- 질문이 화면에 뜹니다. 질문이 생기면 Orca 에 "답하기" 탭이 뜨고, 거기에 답하면 코디네이터 워크트리의
STATE.md에답:이 적힙니다. 루프가 멈춰 있었으면 그 탭에서 바로 다시 띄웁니다. 답이 없으면 30분·2시간·8시간에 다시 알립니다 - 질문으로 멈춘 태스크가 슬롯을 놓습니다. 작업 중이던 변경을
park/<태스크 ID>브랜치에 보관하고 슬롯을 다른 태스크에 줍니다. 답이 오면 빈 슬롯에 그대로 되살려 이어 갑니다 - 워커가 결과를 쓴 뒤 완료 신호가 늦게 오면, 이미 반영된 결과가 "중단" 으로 한 번 더 세어지던 일을 막았습니다
- 이전 버전으로 세운 루프는 "하네스 업데이트해줘"(프로세스 정리) 뒤 "루프 업데이트해줘" 로 옮깁니다
1.14.0
병렬 루프에서 질문 하나가 무관한 슬롯까지 전부 멈추게 하던 문제를 고쳤습니다(loop-setup·loop-update). 한 태스크가 사람 판단을 기다리는 동안, 이미 성공한 다른 슬롯의 결과까지 반영·검증되지 않은 채 서 있었습니다.
- 태스크 질문은 그 태스크만 세웁니다.
질문: <태스크 ID> — …로 올라온 질문(3회 소진·판정 불가·워커가 물었는데 문서로 답할 수 없는 것 등)은 그 행만 멈추고, 나머지 슬롯은 계속 반영·검증·배정됩니다. 그 태스크에 기대는 태스크와 phase 완료만 기다리고, 더 할 일이 없어지면 그때 "질문 대기" 로 멈춥니다 - 전역 질문은 지금처럼 멈춥니다. 병합 충돌·같은 실패의 반복·phase 완료 묶음·미활성 승인·하네스·환경 문제처럼 여러 태스크에 걸리는 질문은 태스크 ID 가 아닌 머리로 적히고, 새로 띄우기를 멈춥니다
- 질문이 여럿이면 답에 그 질문의 머리를 붙입니다(
답: phase-01-task-07 — 넣는다). 루프가 도는 중이면답:만 적으면 다음 라운드에 반영됩니다 - 상태판에 "태스크 질문 대기 — 그 행만 서고 나머지는 계속 돈다" 가 따로 표시됩니다
- 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 옮길 수 있습니다
1.13.0
Orca 모드에서 루프가 살아 있는지 볼 곳이 없던 문제를 고쳤습니다. 구동 스크립트는 터미널 밖에서 돌고 판단은 화면 없는 세션이 해서, Orca 사이드바에는 워커 카드만 보이고 코디네이터는 어디에도 없었습니다(loop-setup·loop-update).
- 상태판
loop-status. 구동 스크립트 생존·지금 단계(판단 중이면 "판단 중")·질문 대기·phase 진행·슬롯별 워커(도는 중·끝·정지)·사람에게 걸린 질문·최근 기록을 10초마다 다시 그립니다. 구동 명령을 친 터미널에 바로 뜨고, 아무것도 쓰지 않으므로 아무 터미널에서나 띄우고 닫아도 루프에 영향이 없습니다.--once로 한 번만 볼 수 있고,main의 세션에 "루프 상태 보여줘" 라고 해도 됩니다 - 완료 알림. 태스크가 검증까지 통과해 완료될 때와 phase 가 끝날 때 OS 알림이 한 번씩 옵니다. 지금까지 알림은 문제가 있을 때만 와서, 재부팅처럼 구동 스크립트와 감시가 함께 꺼지면 조용함과 잘 돎을 구별할 수 없었습니다. 완료 소식이 한동안 없으면 상태판을 보세요
- Orca 1.4.222 사이드바는 워커 이름을 붙여도
worker-task_<내부 ID>로 보여 줍니다. 어느 슬롯이 어느 태스크를 하는지는 상태판에서 봅니다 - 이전 버전으로 세운 루프는 "루프 업데이트해줘" 로 상태판과 완료 알림을 더할 수 있습니다. 상태판은 읽기만 하므로 루프를 멈추지 않고 더합니다
1.12.0
뒤 단계에서 생긴 변경이 앞 문서에 돌아가지 않아, 단계마다 같은 모순 경고가 반복되고 흐름이 끊기던 문제를 고쳤습니다.
- 앞 문서까지 고치고 이어 갑니다. 아키텍처·플랜·하네스·루프 세팅 중 PRD·TRD 등과 어긋나는 것을 찾으면, 결정이 필요한 것만 선택지로 묻고 답을 받은 뒤 가장 앞 문서부터 고칩니다. 그 사이 문서를 맞춘 다음 하던 일로 돌아갑니다. 예전에는 보고하고 "앞 스킬을 다시 부르라"고 멈췄습니다
- PRD·TRD·IDEA 를 다시 불러도 처음부터 쓰지 않습니다. "이미 있을 때" 단계를 새로 두어, 번호를 유지한 채 바뀐 항목만 고치거나 남은 미결만 풉니다
- 문서 머리에
변경 이력한 줄씩. 고칠 때마다 버전을 올리고 무엇을 왜 바꿨는지 남깁니다. 뒤 스킬은 이 버전을 보고 무엇이 낡았는지 압니다. 손으로 고칠 때도 버전과 한 줄을 남겨 주세요 - 기능 추가·리팩토링으로 바뀐 기존 항목의 제목 아래에
> 대체됨 — '## 추가 N'한 줄이 붙습니다. 본문만 읽어도 옛 내용임을 알 수 있습니다 - 루프가 도는 동안에는 앞 문서를 고치지 않고 질문으로 멈춥니다. 질문에 어느 스킬로 고치면 되는지 적히고, 반영한 뒤
답: 반영함으로 알리면 이어 갑니다(이전LOOP.md는loop-update가 옮겨 줍니다)
1.11.1
loop-setup본문 세 곳(병렬 운용 설명·자체 점검·에이전트별 참고)에 남아 있던 "구동 스크립트는 Orca 터미널 안에서 돈다" 를 1.11 의 분리 실행(Orca 터미널에서 띄운 뒤 터미널 밖에서 돈다)과 같은 말로 고쳤습니다. 루프가 만드는LOOP.md와 동작은 그대로입니다
1.11.0
1.10 구동 스크립트를 실전 프로젝트로 옮겨 돌리고 일부러 사고를 일으켜 본 결과로 고쳤습니다(loop-setup·loop-update).
- 멈춘 루프를 알립니다(정지 감시). Orca 모드에서 진행할 수 있는데 멈춘 상태를 두 자리에서 봅니다.
구동 스크립트 안: 백그라운드 알림을 놓치거나 Orca 재시작으로 끊긴
ask뒤 잠든 워커를 한 번 깨우고, 시작에 실패한 워커를 복구대로 한 번 다시 띄우고, 사용량 한도면 재설정까지 쉬고, 과부하로 실패한 판단 세션을 1·5·15분 뒤 다시 돌리고, PC·Orca 재시작 뒤 끊긴 워커를 찾아 멈춥니다. 스크립트 밖의 작은 감시: 스크립트가 죽었거나 한 단계에 묶였거나, 워커가 사람의 답을 기다리거나, 새 질문이 생기면 OS 알림(Windows 토스트·macOS·Linux)과loop-alerts.log로 알립니다. 일하는 워커는 건드리지 않고, 같은 상태는 한 번만 알립니다 - 구동 스크립트를 터미널 밖으로 분리해 띄웁니다. 띄운 Orca 터미널을 닫아도 루프가 돕니다(
Start-Process로 띄운 것은 터미널과 함께 죽어 쓰지 않습니다). 이미 돌고 있으면 두 번째를 띄우지 않습니다 - 모든 정지에 종료 사유가 남습니다("질문 대기"·"배정 없음"·"전체 완료"·그 밖의 원인)
- 고친 결함: Orca 의 여러 줄 JSON 응답을 한 줄로 읽던 문제, 첫 워커가
main워크트리에 뜨던 문제(--worktree current→ 코디네이터 트리 경로), 판단 세션이 임시 폴더의 결과 파일을 지우지 못해 루프가 서던 문제, Orca 재시작 뒤 워커가ask --resume없이 잠들던 문제, 재생된 이미 답한 질문에 판단 세션이질문:을 남겨 루프가 서던 문제, 답 전송이 연결 끊김으로 실패해도 질문을 닫던 문제, 배정이 세팅 때의 폭 표를 근거로 하던 문제(지금의 완료 상태로 다시 셈) - Windows 의 Node 24 에서 경로에 한글이 있으면
fs.rmSync가 파일을 조용히 지우지 않습니다 — 구동 스크립트는unlinkSync로 지웁니다 - 이전 버전의 구동 스크립트는
loop-update가 옮깁니다(옛 스크립트를 멈춘 뒤에)
1.10.1
- Orca 워커 이름: 에이전트 목록에 워커가
worker-task_<내부 ID>대신worker1_<태스크 ID>(검증 워커는 끝에_검증)로 보이게, 태스크를task-create --display-name으로 만든 뒤worker-start --task로 띄웁니다. 이미 세팅한 프로젝트는loop-update가 구동 스크립트를 같은 식으로 고칩니다
1.10.0
실사용 프로젝트의 세션 기록을 집계해 나온 비용·정지 문제를 고쳤습니다.
- 코디네이터를 상주시키지 않습니다 (
loop-setup·loop-update). Orca 모드에서 대화형 코디네이터가 phase 내내 살아 있던 구조를 없앴습니다. Orca 터미널 안의 구동 스크립트가 워커를 띄우고 기다리고, 판단은 라운드마다 새로 여는 코디네이터 세션이 합니다. 워커의 질문은 별도 세션이 문서를 보고 답하거나 사람에게 올립니다 - 트리거를 실행 단계로 넣었습니다. 여러 태스크에 걸친 같은 실패를 코디네이터가 매 라운드 세고(
LOG.md의- 실패:줄),알림:에 처리 주체와 기한을 붙이고, phase 를 열 때 기한이 지난 알림과 판단 시점이 온 미결을 묻습니다 - 이전 버전의
LOOP.md는loop-update가 새 구조로 옮깁니다 - 테스트가 DB 를 쓰면 슬롯별 DB 격리를 추천합니다
- 워커 워크트리 청소 명령을
git reset --hard coordinator로 고쳤습니다(이전 명령은 다른 워크트리에 체크아웃된 브랜치라 git 이 거부했습니다) harness-setup·harness-update— e2e 흔들림 규칙을 출처가 붙은 표로 두고 흔들림을 고칠 때마다 한 줄씩 늘립니다.HARNESS.md에 공유 DB 를 쓰는 게이트와 슬롯 변수를 적습니다
1.9.0
프로젝트 완료 뒤를 다루는 스킬 넷을 더했습니다. 1.6.0~1.8.0 은 개발 저장소에서만 거친 중간 단계라 이 저장소에는 따로 없습니다.
code-to-docs— 문서 없는 코드베이스를 현재 동작 기준 문서·테스트 phase·하네스·루프로 올립니다refactor-plan— 범위 셋, 고칠 목록,## 리팩토링 N후미 절, 리팩토링 phasefeature-add— 앞 스킬을 후미 절 모드로 불러## 추가 N절과 기능 phasebug-fix— 버그/요구 변경 판정, 재현 기록 먼저, 즉시 활성 회귀 검사, 게이트 통과 뒤 커밋 1회plan-generator— 현재 동작 문서의구현됨 (as-is)행은 담당 태스크가 붙어도 상태를 올리지 않습니다
1.5.3 이하
태그와 커밋 메시지를 보세요.