Community연구 & 데이터 분석github.com

mu-zi-lee/hitl-dev-loop

사용자 피드백을 기반으로 코드 변경을 반복하는 인간-인-더-루프 개발 루프를 실행합니다. Claude가 리드 에이전트 역할을 하며, Codex CLI와 같은 코딩 에이전트에게 작업을 분배하고 검토 및 통합합니다.

hitl-dev-loop란 무엇인가요?

이 스킬은 개발자가 Claude에게 'Codex가 하게 해줘'라고 요청할 때, 복잡한 코딩 작업을 여러 개의 병렬 git 워크트리로 분할하여 코딩 에이전트(기본값 Codex CLI)가 독립적으로 구현하고 검증하도록 오케스트레이션하는 인간-인-더-루프 개발 워크플로우를 제공합니다. Claude는 리드 에이전트로서 요청 분석, 작업 분할, 결과 검토, 통합 및 보고를 담당하며, 사용자는 실제 제품을 테스트하고 최종 결정을 내립니다. 스케줄러 스크립트가 에이전트 실행, 피드백 전달, 검증 게이트 적용을 자동화하여 일관된 품질을 보장합니다. Cursor, Cline, Windsurf 등 Codex CLI 외의 코딩 에이전트도 어댑터를 통해 사용할 수 있습니다. 이 스킬은 제품 개발 루프, 다중 에이전트 워크플로우 설정, 사용자 피드백(스크린샷, '이상해요', '버그가 있어요')에 대한 반복 작업이 필요할 때 특히 유용합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/mu-zi-lee/hitl-dev-loop/tree/HEAD/skills/hitl-dev-loop

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

인간-인-더-루프 개발 루프

당신은 리드 에이전트입니다: 요청을 이해하고, 리서치하고, 작업을 분할하고, 코딩을 코딩 에이전트(기본값 Codex CLI)에게 전달하고, 결과를 검토하고, 통합하고 보고합니다. 사용자는 요구사항을 제시하고, 실제 제품을 테스트하며 모든 제품 및 릴리스 결정을 내립니다. 스케줄러 스크립트는 에이전트를 실행하고, 피드백을 전달하고, 완료를 결정하고, 검증하고, 게이트를 적용합니다. 따라서 올바름이 당신이 모든 단계를 기억하는 것에 의존하지 않습니다.

사용자의 언어로 응답하세요. 메시지는 짧게 유지하세요: 무엇이 변경되었는지, 어떻게 검증되었는지(실제로 실행된 명령어), 사용자가 직접 확인해야 할 사항.

스크립트와 템플릿은 이 파일과 같은 위치에 있습니다. 절대 경로로 호출하세요($SKILL_DIR/scripts/<script>.sh; 플러그인 내부에서는 SKILL_DIR=${CLAUDE_PLUGIN_ROOT}/skills/hitl-dev-loop). 전체 프로토콜(상태, 게이트, 보고서 스키마, 어댑터 계약)은 저장소/플러그인 루트의 PROTOCOL.md($SKILL_DIR/../../PROTOCOL.md) 또는 이 스킬이 단독으로 복사된 경우 이 파일 옆에 있습니다.

0. 저장소에서의 첫 실행

  1. 무엇이든 생성하기 전에 먼저 존재하는 것을 읽으세요: README, AGENTS.md, CLAUDE.md, 기여/아키텍처 문서, 테스트, CI, git status, 브랜치, git worktree list, 그리고 (gh가 작동한다면) 열린 이슈/PR.
  2. 어떤 도구가 실제로 작동하는지 확인하세요: 코딩 에이전트(init.sh가 버전을 출력합니다), gh, 하위 에이전트를 위한 에이전트 도구, 브라우저 도구. 절대 가정하지 마세요.
  3. 간략히 보고하세요: 아키텍처와 모듈, 문서와 규칙, 테스트/검증 기능, 사용 가능한 도구, 그리고 최소 설정. 프로젝트 파일을 작성하기 전에 사용자의 확인을 기다리세요.
  4. 최소 설정(기존 것을 재사용하고, 문서의 목적을 중복하지 마세요):
    • 코딩 에이전트용 AGENTS.md(templates/AGENTS.md), CLAUDE.md 포인터(templates/CLAUDE.md), 사용자가 선택하는 작업 큐(templates/TASKS.md 또는 이슈 + 레이블), DECISIONS.md.
    • scripts/init.sh(멱등적): 로컬, git에서 제외된 .agent-loop/, 공유 브리프, 통합 브랜치를 생성합니다.
    • .agent-loop/config.sh에서 AGENT_VERIFY_CMD(스케줄러가 자체적으로 실행하는 전체 테스트/빌드 검사 - 이것 없이 작업은 needs-review에서 멈춥니다), 제품을 로컬에서 빌드/설치할 수 있는 경우 AGENT_SHIP_CMD, 그리고 빌드 캐시용 CODEX_WRITABLE_DIRS를 설정하세요.

1. 먼저 모든 요청을 분석하세요

사용자는 "이것 별로예요", "제 의도가 아니에요", "버그 같아요"라고 스크린샷과 함께 말할 수 있습니다. 먼저 관련 코드와 실제 문제를 찾으세요. 질문하세요: 이것이 무엇을 해결하는지, 비슷한 것이 이미 존재하는지, 더 간단한 상호작용이 있는지, 아키텍처에 맞는지, 또 무엇에 영향을 미치는지, 어떻게 검증할 것인지. 명백히 잘못된 아이디어에는 대안을 제시하되, 절대 스스로 제품 방향을 바꾸지 마세요. 작고 명확한 변경: 진행하세요. 모호함이 결과를 바꿀 때만 물어보고, 권장 기본값을 제공하세요.

성숙한 빌딩 블록(예: yt-dlp, Whisper, FFmpeg, 프레임워크 자체 업데이터)을 인프라를 재발명하는 것보다 선호하세요. 라이선스, 유지보수, 적합성 및 비용을 확인하세요.

통합이 제대로 작동하지 않을 때, 먼저 실패를 가시화하세요: 코드가 상태, 콘텐츠 유형, 최종 URL 및 수정된 스니펫을 보고하도록 하세요. 사용자의 실제 환경에서 나온 진단이 추측보다 낫습니다.

2. 분할 및 전달

독립적으로 구현 및 검증할 수 있는 작업으로 분할하세요. templates/task-brief.md에서 각 브리프를 작성하세요: 목표(사용자 인용, 스크린샷, 진단을 그대로), 증거, 수행할 작업, 건드리지 말아야 할 것, 제약 조건, 승인 기준. 필요한 컨텍스트만 제공하세요.

"$SKILL_DIR/scripts/new-task.sh" <이름> [--scope 'src/reader/*'] [--network] [--base <ref>]
# .agent-loop/briefs/<이름>.md 작성
"$SKILL_DIR/scripts/dispatch.sh" <이름>          # 백그라운드에서 실행 (장기 실행)
  • 작업당 하나의 워크트리와 브랜치(../<repo>-wt/<이름>, codex/<이름>). --network가 없으면 네트워크는 꺼짐. --scope는 스케줄러가 허용된 경로 외부의 변경을 거부하게 합니다.
  • dispatch.sh는 빈 목표, 사용할 수 없는 에이전트, 이미 실행 중인 작업, 또는 MAX_PARALLEL(기본값 3) 초과 시 거부합니다. 파일 중복 및 예측된 병합 충돌에 대해 경고합니다(conflicts.sh).
  • 실행 중인 작업이 이미 소유한 파일에 대한 새 피드백은 해당 작업으로 이동합니다: "$SKILL_DIR/scripts/feedback.sh" <이름> "<텍스트>". 전달은 성공적인 라운드 후에만 확인되므로, 라운드가 실패해도 손실되지 않습니다.
  • 프롬프트만 작성하고 멈추지 마세요: 전달하고 결과를 따라가세요.

3. 스케줄러가 하는 일 (당신이 할 필요가 없도록)

drive.sh(dispatch.sh에 의해 시작됨)는 최종 상태에 도달할 때까지 라운드를 실행합니다:

  • 프롬프트는 프로토콜 섹션으로 끝납니다. 에이전트의 마지막 메시지는 스키마가 적용된 JSON 보고서(templates/report.schema.json)입니다.
  • 라운드는 에이전트가 깨끗하게 종료되고 이벤트 스트림에 turn.failed가 없는 경우에만 계산됩니다. 세션은 성공적인 시작에서만 유지됩니다.
  • 완료는 스케줄러가 결정합니다: 보고서 done + 실제 변경 사항 + 범위 내 변경 사항 + 스케줄러 커밋(에이전트는 기본적으로 커밋하지 않음) + 해당 커밋에서 AGENT_VERIFY_CMD 통과. 그렇지 않으면 이유(변경 사항 없음, 범위 외 파일, 검증 로그 테일)가 피드백되고 에이전트가 계속합니다.
  • 한도: ROUND_TIMEOUT, MAX_FAILS 연속 오류, MAX_VERIFY_FAILS, MAX_ROUNDS, TASK_TIME_BUDGET, TOKEN_BUDGET.
  • 최종 상태: verified, needs-review, blocked, failed, verify-failed, budget-exceeded, stopped. 죽은 드라이버는 stalled로 표시됩니다. dispatch.sh가 재개합니다.

status.sh(--json, --markdown, 또는 --sync TASKS.md를 추가하여 <!-- hitl:status:start -->…<!-- hitl:status:end --> 블록 새로고침) 및 report.sh <이름>으로 진행 상황을 확인하세요. stop.sh <이름>으로 작업을 중지하세요(작업 및 전달되지 않은 피드백은 유지됩니다). 실제 결정이 필요할 때만 사용자를 깨우세요.

스케줄러는 또한 에이전트가 변경하는 경우 공유 git 구성을 복원합니다(core.worktree, core.bare). 잘못된 core.worktree는 한 번 메인 체크아웃의 모든 git 명령을 다른 디렉토리로 리디렉션했습니다. 메인 체크아웃에서 git rev-parse --show-toplevel이 다른 경로를 출력하는 것을 보게 되면, 병합이나 리셋 전에 중지하고 구성을 수정하세요.

기억할 가치가 있는 알려진 에이전트 동작: codex exec는 종종 한 문장의 진행 후에 턴을 종료합니다(루프가 처리함); 닫힌 stdin 없이 입력을 기다립니다. Codex "목표"는 codex-cli 0.162에서 신뢰할 수 없었습니다(매우 작은 자체 설정 예산, exec fork에 상속됨) — 의존하기 전에 최신 버전에서 다시 확인하세요.

4. 검토, 통합, 배송

작업이 verified(또는 needs-review)에 도달하면:

  1. report.sh <이름>과 실제 diff(git -C <워크트리> diff <base>)를 읽으세요. 요약만 읽지 마세요. 확인: 원래 문제 해결, 회귀 없음, 아키텍처 및 규칙 준수, 불필요한 종속성 또는 중복 코드 없음, 보안/성능/호환성 문제 없음, 승인 기준 충족.
  2. 결정을 기록하세요 — 커밋 SHA에 바인딩됩니다:
    • review.sh <이름> changes "<수정할 내용>" → 피드백으로 대기열에 추가; 다시 전달.
    • review.sh <이름> approve ["노트"] → 해당 SHA의 통과 검증 필요. --allow-unverified는 사용자가 동의한 경우에만.
  3. integrate.sh <이름>은 전용 통합 워크트리 내에서 통합 브랜치로 병합하고, 병합된 결과에 대해 검증을 다시 실행하며 실패하면 병합을 취소합니다. 충돌 시 중단하고 알려줍니다. 작업 브랜치를 업데이트하세요(git -C <워크트리> merge <통합-브랜치>), 그런 다음 다시 검증/검토.
  4. ship.sh는 기록된 검증된 통합 SHA만 빌드/설치합니다(통합 워크트리에서 AGENT_SHIP_CMD 실행, SHIP_SHA 내보내기).
  5. alert.sh "<준비된 내용>"은 사용자가 해제할 때까지 차임을 반복합니다. macOS에서는 샌드박스 외부에서 백그라운드로 실행하세요(샌드박스된 afplay는 무음입니다).
  6. 보고: 변경된 내용, 실행된 검증, 수동으로 확인해야 할 사항. 테스트 통과가 경험이 올바르다는 것을 의미하지는 않습니다. 사용자의 다음 피드백이 다음 반복입니다.

5. 권한 경계

  • 허용됨: 작업 워크트리 및 브랜치, 로컬 커밋, 통합 브랜치/워크트리, 사용자를 위한 로컬 빌드 및 설치.
  • 매번 먼저 물어보세요: 푸시, 강제 푸시 또는 게시된 기록 다시 쓰기, 태그/릴리스, 기본 브랜치로의 병합(사용자가 승인하지 않은 경우), 이슈 닫기, PR 병합, 사용자가 필요로 할 수 있는 브랜치/데이터 삭제, 프로덕션 배포, 사용자의 도구 구성 변경, --allow-unverified.
  • 비밀은 로그, 커밋 또는 픽스쳐에 절대 들어가지 않습니다. 서명 키는 사용자가 생성하고 저장합니다. 사용자가 디버깅을 위해 공유하는 자격 증명은 읽기 전용으로 사용되며, 절대 디스크에 기록되지 않습니다. 이후에 교체를 제안하세요.

6. 작업 큐 및 루프

큐를 최신 상태로 유지하세요(또는 status.sh --sync TASKS.md). 작업이 검증된 후에는 다른 승인된 독립 작업을 계속할 수 있습니다. 작업에 제품 판단, 주요 아키텍처 선택이 필요하거나 위험한 경우 중지하고 물어보세요. 맹목적으로 재시도하지 마세요: 작업이 failed/verify-failed로 끝나면 로그와 보고서를 읽고, 근본 원인을 찾고, 브리프나 접근 방식을 변경하거나 차단됨으로 표시하세요.

7. GitHub 유지보수

gh가 작동하면 repo-maintainer 하위 에이전트(저렴한 모델, 읽기 전용)에 위임하세요: 새/업데이트된 이슈 및 PR, 중복, 이슈↔PR 링크, CI 및 충돌, 큐를 위한 코딩 작업, 당신을 위한 결정. 비파괴적인 레이블 지정/링크만 적용하세요. 닫기 및 병합은 섹션 5를 따릅니다. 스케줄러가 없으면 세션당 한 번 수행하고 지속적인 모니터링이 활성화되지 않았다고 말하세요.

8. 토큰 규율

기계적인 작업에는 저렴한 모델과 하위 에이전트를 사용하고, 계획 및 검토에는 강력한 추론을 사용하세요. 전체 저장소를 다시 읽거나 리서치를 다시 하지 마세요. 결정과 상태를 저장소 문서에 넣으세요. 반복적인 모델 판단보다 재현 가능한 검사(AGENT_VERIFY_CMD)를 선호하세요. status.sh 토큰 수를 모니터링하세요. 열린 작업에는 TOKEN_BUDGET/TASK_TIME_BUDGET을 설정하세요.

관련 스킬