Loop It
將一個開放式的編碼目標轉變為有邊界、可驗證的循環。Loop It 同時也是一個循環庫:選擇合適的入門循環,根據使用者的情境進行調整,並追蹤進度,讓下一步循環顯而易見。
決策
首先決定使用者需要哪種模式:
- 從庫中尋找:為使用者的目標選擇一個預設的循環。
- 從進度中尋找下一步:檢查
.loop-it/progress.json或.loop-it/LOOP.md,並推薦下一步應循環的內容。 - 僅設計:產生一個可重複使用的循環提示或專案本機的循環檔案。
- 立即執行:一次執行一個有邊界的迭代,進行驗證,並決定是否需要進行下一次迭代。
- 導出/安裝:將同一個循環調整為適用於 Codex、Claude Code、Cursor 或其他相容 SKILL.md 的代理。
如果任務描述模糊,不要提出廣泛的探索性問題。首先推薦最可能適用的庫循環並說明你的假設。僅在目標、成功檢查、程式庫範圍或審批邊界確實無法確定時,才提出最多三個針對性問題。
契約
每次執行前,每個循環都需要包含以下欄位:
- 目標:具體的成果,而非主題。
- 範圍:程式庫、檔案、功能區域、資料來源或環境。
- 成功檢查:指令、基準、手動檢查、審查標準或可衡量的門檻。
- 迭代上限:最大次數或時間預算。
- 停止條件:成功、無顯著改善、重複失敗、存取受阻、不安全操作或需要審批。
- 證據:每次迭代後應記錄的內容。
- 審批閘門:生產環境寫入、外部訊息、付款、破壞性 Git 操作、憑證、部署或不可逆的資料變更。
如果請求的循環只是「不斷改進」而沒有檢查點,應予以拒絕。提供一個帶有明確檢查點的較小循環作為替代方案。
選擇循環
優先使用預設庫中的循環,而非從頭創造一個。
在可用的情況下使用選擇腳本:
node <skill-dir>/scripts/select-loop.mjs list
node <skill-dir>/scripts/select-loop.mjs search "failing ci"
node <skill-dir>/scripts/select-loop.mjs recommend --goal "fix failing checkout test"
node <skill-dir>/scripts/select-loop.mjs next --cwd <project>
請將 <skill-dir> 解析為此技能所在的資料夾。在 Claude Code 中,可以使用 ${CLAUDE_SKILL_DIR}。在其他代理中,請找到包含此 SKILL.md 的目錄。
選擇時:
- 當使用者詢問下一步循環時,優先檢查
.loop-it/progress.json。 - 如果沒有進度記錄,則將使用者的目標與
references/library/loops.json進行比對。 - 推薦一個循環,最多提供兩個替代方案。
- 用一句話說明比對的理由。
- 僅在必要時提出該循環的主要問題。
- 如果庫中沒有適合的循環,請設計一個自訂循環,並說明在其證明了實用性後應考慮將其加入庫中。
僅在選擇腳本不可用或需要手動檢查時,才讀取 references/library/loops.json。當任務需要通用的持久化狀態結構時,請讀取 references/loop-template.md。
目前的庫分類包括:
- 從問題單到已驗證修復:重現、診斷、修補、加入回歸測試、驗證。
- 修復失敗的 CI:檢查失敗輸出、重現、修補、重新執行失敗的檢查。
- 文件同步:將文件與實作進行比對、更新過時的文件、驗證範例或連結。
- 產品評估:定義情境與標準、測試、修復遺漏、重新執行受影響及完整檢查。
- 性能循環:測量基準、進行一次專注的變更、重新測量、僅保留已證實有效的改進。
- 審查修復循環:審查差異修訂、修復阻礙性發現、重新執行檢查、重複直到僅剩下可接受的風險。
- 全新設定循環:從一個乾淨的環境開始、遵循文件中的設定、修復隱藏的假設、乾淨地重試。
- 發布就緒:在發布前驗證套件、部署或公開安裝路徑。
- UX 優化、依賴升級、安全性強化、重構隔離以及測試覆蓋率缺口循環。
草擬循環
對於循環提示和狀態檔案,請使用以下結構:
- 說明目標及非目標。
- 在一個緊湊的週期中定義重複的動作:檢查、行動、驗證、記錄、決定。
- 指定確切的驗證指令或手動檢查。
- 定義迭代上限和停止條件。
- 定義最終報告必須包含的內容。
保持第一版範圍狹窄:一個程式庫、一個主要角色、一個主要的成功檢查。延遲排程、儀表板、多代理協調以及生產環境自動化等,直到手動循環已被證實有用後再考慮。
如果需要持久化的狀態檔案,請從 references/loop-template.md 建立 .loop-it/LOOP.md,或執行:
node <skill-dir>/scripts/create-loop.mjs --name "Loop name" --objective "Concrete outcome" --check "Verification command or criterion"
node <skill-dir>/scripts/create-loop.mjs --from failing-ci-repair
基於庫的循環檔案也會建立 .loop-it/progress.json,除非指定了 --no-progress 參數。
執行循環
每次迭代:
- 重新閱讀目標、成功檢查、上限以及審批閘門。
- 僅檢查下一個有邊界行動所需的上下文。
- 做出最小且可信的變更。
- 首先執行最狹窄的相關驗證,僅在必要時才進行更廣泛的檢查。
- 如果狀態檔案存在,將證據記錄在
.loop-it/LOOP.md中;如果存在進度檔案,則更新.loop-it/progress.json。 - 決定:停止、繼續、請求審批或報告受阻。
當繼續執行需要對安全性、憑證、生產資料、計費、使用者訊息、破壞性 Git 操作或部署審批做出隱含假設時,應立即停止。
不要將已耗盡、受阻或僅部分驗證的循環描述為完成。請確切說明是哪個條件導致了停止,以及存在哪些證據。
導出
在不同工具間使用相同的循環文字,僅改變呼叫方式:
- Codex:安裝到
.agents/skills/loop-it/或作為 Codex 外掛,然後使用$loop-it呼叫。 - Claude Code:安裝到
.claude/skills/loop-it/,然後使用/loop-it呼叫。 - Cursor:安裝到
.cursor/skills/loop-it/,然後在代理對話中使用/loop-it或要求一個循環來呼叫。對於始終有效的專案慣例,請使用 Cursor 規則,而非此程序性循環。
導出時,請保持一個權威的循環主體,並避免使用特定於工具的語法,除非該工具強制要求。