Hwip Auto — 시간 제한 자율 작업 모드
고정된 시간 예산 내에서 자율적으로 작업합니다: 탐색 → 계획 → 구현 → 검증 → 커밋을 한 단위씩 반복합니다. 사용자는 hwip_ask 버튼을 통해 휴대폰으로 방향을 제시하며, 응답이 없으면 명시된 안전 기본값에 따라 진행되어 멈추지 않습니다. 전체 실행은 단일 응답 내에서 이루어집니다 — 사용자의 턴이 종료되면 모드가 종료됩니다.
시작 전제 조건 — 충족되지 않으면 시작 거부
- Hook ID가 설정되어 있어야 함 —
~/.hwip/config.json에hookId가 구성되어 있거나(hwip install이 작성하는 파일)HWIP_HOOK_ID환경 변수로 재정의되어 있어야 합니다. SessionStart 컨텍스트가Mode: two-way (notify + ask)로 끝나면 설정된 것입니다.Mode: one-way는 제어 채널이 없음을 의미하므로 거부하고 사용자에게/hwip-config를 안내합니다. - 음소거 상태가 아니어야 함.
/hwip-mode가NOTIFICATIONS: muted를 보고하면 거부합니다: 알림 없는 자율 모드는 제어 없는 무인 작업입니다./hwip-mode unmute를 제안합니다. - 명시적 사용자 호출. 작업이 "길어 보인다"는 이유로 이 모드를 스스로 트리거하지 마십시오. 사용자는
/hwip-auto ...로 옵트인합니다.
인수
/hwip-auto [duration] [task description...]
- duration —
2h,90m,1h30m또는 숫자만 입력하면 분 단위로 처리됩니다. 기본값:1h. 최소 10분, 최대 8시간으로 제한됩니다. - task — duration 이후의 모든 텍스트. 생략되면 지금까지의 대화 컨텍스트에서 유도하며, 컨텍스트가 없으면 시작 질문에서 2~3개의 후보 작업(예: 실패하는 테스트 수정, 린트 경고 정리, TODO 정리)을 제안합니다.
설정
-
마감 시간 기록 (상태 파일은 컨텍스트 압축을 견딥니다 — 남은 시간이 확실하지 않으면 다시 읽습니다):
HASH=$(printf '%s' "${CLAUDE_PROJECT_DIR:-$(pwd)}" | cksum | cut -d' ' -f1) STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/hwip" mkdir -p "$STATE_DIR" MINUTES=120 # duration 인수에서 파싱 DEADLINE=$(( $(date +%s) + MINUTES * 60 )) printf '%s %s\n' "$DEADLINE" "$MINUTES" > "$STATE_DIR/auto-$HASH" date -r "$DEADLINE" 2>/dev/null || date -d "@$DEADLINE" # macOS | Linux -
보호 브랜치 가드 —
main/master/develop에서 직접 작업하지 않습니다:BRANCH=$(git branch --show-current 2>/dev/null) case "$BRANCH" in main|master|develop) git checkout -b "auto/$(date +%Y%m%d)-<task-slug>" ;; esac -
검증기 발견 — 코드를 작성하기 전에 프로젝트의 결정적 검사(테스트/린트/타입체크/빌드 명령어, package.json, Makefile, CI 구성에서)를 찾습니다. 이 검사가 모든 커밋의 관문입니다. 프로젝트에 검사가 없으면 시작 질문에서 그 사실을 알리고 "코드가 컴파일/실행됨"을 최소 관문으로 간주합니다.
-
시작 질문 — 어떤 작업보다 먼저 한 번의
hwip_ask:title: "Auto mode: ()"body: 2~3줄 계획 + 어떤 검증기가 커밋을 관문으로 하는지 + 브랜치 이름actions:[{id:"start", label:"Start", style:"primary"}, {id:"stop", label:"Cancel"}](작업이 모호한 경우 "Start"를 2~3개의 후보 작업 버튼으로 대체)placeholder: "adjust the plan or scope..."timeout: 180,fallback:"start"(또는 추천 후보)
자유 텍스트 응답은 계획을 수정하고,
stop은 모드를 취소합니다(상태 파일 제거).
루프
작업을 단위로 분할합니다: 가장 작은 독립적으로 검증 가능하고 커밋 가능한 청크(1545분). 그런 다음 각 단위에 대해:
-
시간 확인 (각 단위를 시작하기 전):
HASH=$(printf '%s' "${CLAUDE_PROJECT_DIR:-$(pwd)}" | cksum | cut -d' ' -f1) read -r DEADLINE MINUTES < "${XDG_STATE_HOME:-$HOME/.local/state}/hwip/auto-$HASH" echo "remaining: $(( (DEADLINE - $(date +%s)) / 60 ))m of ${MINUTES}m"남은 시간이 마무리 임계값(예산의 10%, 최소 5분) 미만이면 새 단위를 시작하지 말고 마무리 단계로 이동합니다.
-
탐색 → 계획 해당 단위(먼저 관련 코드를 읽습니다. 맹목적 편집 금지).
-
구현 해당 단위.
-
검증 결정적 검사로 확인합니다. 녹색만이 통과 신호입니다 — "맞는 것 같다"는 검증자가 아니며, 실패하는 테스트를 통과시키기 위해 약화시키거나 삭제하지 마십시오. 실패 시 수정하고 다시 검증하며, 최대 3회 시도합니다. 여전히 빨간색이면 해당 단위의 변경 사항을 되돌리고(
git checkout -- <files>/git stash) 트리를 깨끗하게 유지한 후 건너뛴 것으로 기록하고 다음 단위로 이동합니다. -
커밋 녹색 단위를 명확한 컨벤셔널 메시지로 커밋합니다. 푸시하지 마십시오.
-
하트비트 — 커밋 후 짧은
hwip_notify("✅ — m left"), 하지만 ~15분에 최대 한 번. 작은 단위는 일괄 처리합니다. 차단기는 예외: 발생 즉시priority: "high"알림을 보냅니다.
단위가 완료되거나 마무리 임계값에 도달할 때까지 반복합니다.
질문 프로토콜 — 멈추지 말고, 파괴하지 말 것
실행 중 질문은 hwip_ask를 통해 전달합니다(AskUserQuestion이나 일반 텍스트 사용 금지 — CORE_RULES 규칙 3/10 적용):
- 권장 기본값을 먼저 제시하고, 본문에 타임아웃 시 자동 진행됨을 명시하며,
timeout: 180(진정으로 큰 결정의 경우 최대 600) 및fallback을 해당 기본값의 ID로 설정합니다. - 폴백으로 해결된 모든 결정을 기록 — 최종 보고서에 나열하여 사용자가 자신 없이 결정된 사항을 감사할 수 있도록 합니다.
- 모든 응답은 직접 명령입니다: 즉시 적용합니다.
stop응답(또는 자유 텍스트 세션 종료)은 지금 마무리함을 의미합니다. - 되돌릴 수 없거나 외부 지향적인 작업은 폴백 대상이 될 수 없습니다: 푸시, PR/게시, 배포, 데이터 삭제, 스키마 삭제, 강제 작업, 작업 트리 외부의 모든 것. 이러한 경우 폴백은 반드시
skip이어야 합니다 — 타임아웃 시 작업을 건너뛰고 기록하며, 수행하지 않습니다. 명시적인 버튼 탭만이 이를 승인합니다.
마무리
- 진행 중인 단위를 완료하거나 되돌립니다(동일한 3회 시도 규칙 — 트리를 빨간색이나 더티 상태로 두지 마십시오).
- 상태 파일을 제거합니다:
rm -f "${XDG_STATE_HOME:-$HOME/.local/state}/hwip/auto-$HASH". - 응답 텍스트에 최종 보고서를 작성합니다: 완료된 단위(커밋 해시 포함), 건너뛴 단위와 이유, 모든 폴백 결정, 남은 작업.
- 최종 질문:
actions:[{id:"extend", label:"+30m"}, {id:"review", label:"Review"}, {id:"done", label:"Done", style:"primary"}]timeout: 300,fallback:"done"extend→ 상태 파일에 새 마감 시간(+30m)을 기록하고 루프에 재진입합니다.review→ diff를 검토합니다.done→ 종료합니다.
문제 발생 시
- Hook ID 없음 (
Mode: one-way) — 양방향 도구를 사용할 수 없습니다. 자동 모드를 실행할 수 없습니다. 설정하려면/hwip-config를 실행하십시오. - 실행 중 상태 파일 누락(예: 상태 디렉터리 초기화): 마감 시간을 지금으로 간주합니다 — 남은 예산을 추측하는 대신 마무리합니다.
- 사용자가 실행 중 터미널에 입력: 해당 메시지는
hwip_ask응답과 동일한 제어 입력입니다. 적용하고 루프를 계속합니다. - 검증기가 불안정함(동일 명령어가 변경 없이 녹색/빨간색을 번갈아 표시): 재실행에 시도를 낭비하지 마십시오 —
hwip_notify(priority: "high")로 차단기로 보고하고 다음 단위로 이동합니다.