Community코딩 & 개발github.com

hwipit/plugin

시간 제한이 있는 자율 작업 세션 — 탐색 → 계획 → 구현 → 검증 → 커밋을 반복하며 시간 예산이 소진될 때까지 진행합니다. 모든 결정은 hwip_ask를 통해 이루어지며 타임아웃 시 대체 동작으로 작업이 멈추지 않습니다. 사용자의 명시적 요청(/hwip-auto 2h)이 있어야만 시작됩니다. Hook ID가 필요합니다.

plugin란 무엇인가요?

Hwip Auto는 개발자가 설정한 시간 예산 내에서 AI 에이전트가 완전 자율적으로 작업을 수행할 수 있게 해주는 스킬입니다. 에이전트는 탐색, 계획, 구현, 검증, 커밋의 단위 작업을 반복하면서 각 결정마다 hwip_ask를 통해 사용자에게 확인을 요청하고, 사용자가 응답하지 않을 경우 미리 정의된 기본값으로 진행하여 작업이 중단되지 않도록 합니다. Claude Code, Cursor, Codex 등 hwip 알림/질문 시스템과 통합된 모든 개발 환경에서 사용할 수 있으며, hook ID가 설정되어 있어야 합니다. 주요 기능으로는 보호 브랜치 자동 체크아웃, 프로젝트 검증기 자동 발견, 타임아웃 기반 질문 프로토콜, 각 단위 작업의 최대 3회 검증 시도, 작업 완료 후 상세 보고서 제공 등이 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hwipit/plugin/tree/HEAD/skills/hwip-auto

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

문서

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 정리)을 제안합니다.

설정

  1. 마감 시간 기록 (상태 파일은 컨텍스트 압축을 견딥니다 — 남은 시간이 확실하지 않으면 다시 읽습니다):

    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
    
  2. 보호 브랜치 가드 — 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
    
  3. 검증기 발견 — 코드를 작성하기 전에 프로젝트의 결정적 검사(테스트/린트/타입체크/빌드 명령어, package.json, Makefile, CI 구성에서)를 찾습니다. 이 검사가 모든 커밋의 관문입니다. 프로젝트에 검사가 없으면 시작 질문에서 그 사실을 알리고 "코드가 컴파일/실행됨"을 최소 관문으로 간주합니다.

  4. 시작 질문 — 어떤 작업보다 먼저 한 번의 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분). 그런 다음 각 단위에 대해:

  1. 시간 확인 (각 단위를 시작하기 전):

    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분) 미만이면 새 단위를 시작하지 말고 마무리 단계로 이동합니다.

  2. 탐색 → 계획 해당 단위(먼저 관련 코드를 읽습니다. 맹목적 편집 금지).

  3. 구현 해당 단위.

  4. 검증 결정적 검사로 확인합니다. 녹색만이 통과 신호입니다 — "맞는 것 같다"는 검증자가 아니며, 실패하는 테스트를 통과시키기 위해 약화시키거나 삭제하지 마십시오. 실패 시 수정하고 다시 검증하며, 최대 3회 시도합니다. 여전히 빨간색이면 해당 단위의 변경 사항을 되돌리고(git checkout -- <files> / git stash) 트리를 깨끗하게 유지한 후 건너뛴 것으로 기록하고 다음 단위로 이동합니다.

  5. 커밋 녹색 단위를 명확한 컨벤셔널 메시지로 커밋합니다. 푸시하지 마십시오.

  6. 하트비트 — 커밋 후 짧은 hwip_notify("✅ — m left"), 하지만 ~15분에 최대 한 번. 작은 단위는 일괄 처리합니다. 차단기는 예외: 발생 즉시 priority: "high" 알림을 보냅니다.

단위가 완료되거나 마무리 임계값에 도달할 때까지 반복합니다.

질문 프로토콜 — 멈추지 말고, 파괴하지 말 것

실행 중 질문은 hwip_ask를 통해 전달합니다(AskUserQuestion이나 일반 텍스트 사용 금지 — CORE_RULES 규칙 3/10 적용):

  • 권장 기본값을 먼저 제시하고, 본문에 타임아웃 시 자동 진행됨을 명시하며, timeout: 180(진정으로 큰 결정의 경우 최대 600) 및 fallback을 해당 기본값의 ID로 설정합니다.
  • 폴백으로 해결된 모든 결정을 기록 — 최종 보고서에 나열하여 사용자가 자신 없이 결정된 사항을 감사할 수 있도록 합니다.
  • 모든 응답은 직접 명령입니다: 즉시 적용합니다. stop 응답(또는 자유 텍스트 세션 종료)은 지금 마무리함을 의미합니다.
  • 되돌릴 수 없거나 외부 지향적인 작업은 폴백 대상이 될 수 없습니다: 푸시, PR/게시, 배포, 데이터 삭제, 스키마 삭제, 강제 작업, 작업 트리 외부의 모든 것. 이러한 경우 폴백은 반드시 skip이어야 합니다 — 타임아웃 시 작업을 건너뛰고 기록하며, 수행하지 않습니다. 명시적인 버튼 탭만이 이를 승인합니다.

마무리

  1. 진행 중인 단위를 완료하거나 되돌립니다(동일한 3회 시도 규칙 — 트리를 빨간색이나 더티 상태로 두지 마십시오).
  2. 상태 파일을 제거합니다: rm -f "${XDG_STATE_HOME:-$HOME/.local/state}/hwip/auto-$HASH".
  3. 응답 텍스트에 최종 보고서를 작성합니다: 완료된 단위(커밋 해시 포함), 건너뛴 단위와 이유, 모든 폴백 결정, 남은 작업.
  4. 최종 질문:
    • 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")로 차단기로 보고하고 다음 단위로 이동합니다.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬