Community程式設計與開發github.com

hwipit/plugin

限時自主工作模式 — 在時間預算內循環執行:探索 → 規劃 → 實作 → 驗證 → 提交。每個決策都透過 hwip_ask 進行,並設有超時回退機制,確保工作不會因使用者缺席而停滯。僅在使用者明確要求時啟動(例如 /hwip-auto 2h)。需要 hook id。

plugin 是什麼?

Hwip Auto 是一種為 AI 代理(如 Claude Code)設計的自主工作模式,允許其在固定的時間預算內,以「探索 → 規劃 → 實作 → 驗證 → 提交」的循環自動工作。使用者可透過手機上的 hwip_ask 按鈕進行引導;若使用者未回應,代理將依據預設的安全選項繼續執行,而非停滯不前。此模式支援 Claude Code、Codenovice 等平台,並透過狀態檔案記錄截止時間,以應對上下文壓縮。其主要優勢在於透過明確的問答協議(hwip_ask)而非傳統的 AskUserQuestion 來管理所有決策,並為不可逆的操作(如推送、部署)設定禁止回退的嚴格規則,確保工作安全。整體工作流程包含啟動條件檢查、循環執行單元、以及結束後的摘要報告。

相容平台✓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 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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 個候選任務(例如:修復失敗的測試、清除 lint 警告、清理 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 設定的測試 / lint / typecheck / 建置指令)。這些檢查是每次提交的關卡。若專案沒有這類檢查,請在啟動詢問中說明,並將「程式碼能編譯/執行」視為最低關卡。

  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 則取消此模式(刪除狀態檔案)。

循環

將任務拆分為單元:最小的、可獨立驗證且可提交的區塊(每個約 15–45 分鐘)。接著對每個單元執行:

  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 → 將新的截止時間(+30 分鐘)寫入狀態檔案並重新進入循環;review → 檢視差異;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.

相關技能