Community生產力與協作github.com

Wolftux/checklist

在當前目錄安裝缺少的檢查清單檔案,然後在專屬聊天中顯示。不會覆蓋或修改任何既有內容。

checklist 是什麼?

這個技能會自動在專案中安裝缺失的檢查清單元件,包括:文件註冊表(documenti/lavori.yaml)、進度腳本(strumenti-locali/avanzamento/stato.mjs)、CLAUDE.md 中的規則區塊,以及 git 排除檔案的對應行。安裝完成後,它會開啟一個名為「Checklist: 專案名稱」的獨立聊天視窗,其中包含互動式小工具,顯示專案進度。 Wolftux/checklist 支援 Claude Code 和任何使用 CLAUDE.md 規則的 AI 編碼代理。它被設計為非破壞性的(絕不覆蓋既有檔案)並且完全自動化——只需輸入 /checklist 即可獲得完整的功能檢查。該技能會智慧地偵測哪些元件已存在,只新增缺失的部分。 對於已有檢查清單且使用不同檔案格式(例如 jobs.json)的專案,它會禮貌地要求確認後才建立預設的 YAML 註冊表,從而避免與現有工作流程衝突。該技能同時支援互動式和非互動式模式,並能在工作樹和沒有 git 的資料夾中優雅降級。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Wolftux/checklist/tree/HEAD/plugins/checklist/checklist

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

/checklist:專案進度檢查清單

/checklist 在當前目錄安裝缺少的檢查清單檔案,然後在專屬聊天中顯示。不會覆蓋或修改任何既有內容。

運作方式:

  • 專案目錄即為當前目錄。所有指令都從此目錄執行。
  • <base> 為此技能頂端顯示的「Base directory」。範本位於 <base>/modelli/。
  • 所有指令中的路徑都需加上引號:基礎目錄和專案目錄可能包含空格。
  • 按順序執行各步驟,無需確認,除非步驟中明確要求。
  • 每個 grep 都使用 -a,因為在 Claude Code 中 grep 可能將非 UTF-8 檔案視為二進位檔,而無法找到實際存在的行。

步驟 1:前置檢查

  1. 執行 command -v node。若無輸出,寫一行文字(「需要 Node.js 18 或更新版本:請安裝後重新執行 /checklist」)並停止。
  2. 執行 git rev-parse --path-format=absolute --git-dir 和 git rev-parse --path-format=absolute --git-common-dir。若兩者結果不同,表示你位於次要工作樹:寫一行文字(「你位於工作樹中:註冊表會隨之消失。請從專案主目錄執行 /checklist」)並停止。若兩個指令都失敗,代表沒有 git:繼續進行。
  3. 執行 pwd -P 和 (cd ~ && pwd -P)。若結果相同,表示你位於家目錄:寫一行文字(「你位於家目錄:CLAUDE.md 中的區塊會影響所有專案。請在專案目錄中執行 /checklist」)並停止。

當 node 存在且當前目錄既非次要工作樹也非家目錄時,此步驟即完成。

步驟 2:檢查四個元件

不要寫任何東西。記錄每個元件是否存在:

  • 註冊表:documenti/lavori.yaml 存在;
  • 腳本:strumenti-locali/avanzamento/stato.mjs 存在;
  • 區塊:grep -aqx '## 進度檢查清單' CLAUDE.md 成功(若 CLAUDE.md 不存在,則區塊缺失);
  • 排除行(僅在有 git 時):git rev-parse --is-inside-work-tree 印出 true,則 git rev-parse --git-path info/exclude 輸出的檔案應包含精確行 **/documenti/lavori.yaml 和 **/strumenti-locali/avanzamento/。這些僅為技能本身的檔案:專案中其他 documenti/ 目錄仍對 git 可見。使用 grep -aqxF '**/documenti/lavori.yaml' "<exclude file>" 和 grep -aqxF '**/strumenti-locali/avanzamento/' "<exclude file>" 分別檢查。若檔案不存在,則兩行都缺失。

當你知道哪些元件缺失時,此步驟即完成。

步驟 3:專案名稱

  1. 若 CLAUDE.md 中存在區塊,則名稱為第一次出現的「更新檢查清單於」之後、關閉引號 » 之前的內容。指令:grep -ao '更新檢查清單於 [^»]*' CLAUDE.md | head -1,不含前綴。若名稱存在,則不詢問。若指令無輸出或名稱為空白(使用者已修改此行),則前往第 2 點。
  2. 否則,使用 AskUserQuestion 提問。第一個選項(建議):目錄名稱。第二個選項:變體,即 README 中的標題 # (若存在且與目錄名稱不同),否則為目錄名稱,可能使用不同的大小寫或空格。使用者可自行輸入其他名稱。
  3. 若無法提問(例如在非互動模式中),則使用目錄名稱並寫一行文字說明。

當你獲得名稱(以下稱為 <PROJECT>)時,此步驟即完成。

步驟 4:安裝缺失的元件

僅執行步驟 2 中發現缺失的項目。絕不覆蓋或修改任何既有內容。

  1. 註冊表。 若缺失:執行 mkdir -p documenti 和 [ -e documenti/lavori.yaml ] || sed "s/<TODAY>/$(date +%F)/g" "<base>/modelli/lavori.yaml" > documenti/lavori.yaml(保護條件可防止覆蓋現有註冊表,即使步驟 2 判斷錯誤)。 然而,若腳本已存在,專案可能已有自己的檢查清單,並使用不同的註冊表(例如 lavori.json):請先用 AskUserQuestion 詢問是否要建立 documenti/lavori.yaml。第一個選項(建議):不建立。若答案為否,或無法提問,則不建立,寫一行文字說明,並跳過排除行(第 4 點),因為這些行會向 git 隱藏專案本身的檢查清單檔案。
  2. 腳本。 若缺失:執行 mkdir -p strumenti-locali/avanzamento 和 cp -n "<base>/modelli/stato.mjs" strumenti-locali/avanzamento/stato.mjs。
  3. CLAUDE.md 中的區塊。 若缺失:
    • 讀取 <base>/modelli/claude-md.md 並將所有 <PROJECT> 替換為專案名稱;
    • 執行 mktemp -d 並使用檔案寫入工具將替換後的區塊寫入 <tmp>/blocco.md(<tmp> 為輸出的目錄);
    • 若 CLAUDE.md 存在且非空,準備以下兩個指令作為後續動作(不讀取也不重新寫入檔案): if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(若缺少結尾換行則補上) if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(若最後一行非空則補上空白行)
    • 附加區塊:cat "<tmp>/blocco.md" >> CLAUDE.md(若檔案不存在則建立)。使用者的文字絕不會被重新寫入。
    • 不要使用 sed:名稱可能包含 / 或 &。
  4. 排除行(僅在有 git 時)。令 <exclude> 為 git rev-parse --git-path info/exclude 輸出的路徑。
    • 執行 mkdir -p "$(dirname "<exclude>")"。
    • 若缺少結尾換行則補上:if [ -s "<exclude>" ] && [ -n "$(tail -c1 "<exclude>")" ]; then printf '\n' >> "<exclude>"; fi。
    • 對於 **/documenti/lavori.yaml 和 **/strumenti-locali/avanzamento/ 中缺失的行:執行 printf '%s\n' '**/documenti/lavori.yaml' >> "<exclude>"(或 '**/strumenti-locali/avanzamento/')。
  5. 若無 git,寫一行警告:「此處沒有 git:小工具中的儲存庫行將保持空白。」

當每個缺失的元件都已建立時,此步驟即完成。若沒有任何缺失,則此步驟立即完成。

步驟 5:開啟檢查清單聊天

無論是安裝後還是已全部存在,都執行此步驟。

  1. 若 mcp__ccd_session__start_session 和 mcp__ccd_session_mgmt__detach_session 存在於延遲工具中,使用 ToolSearch 載入它們。
  2. 使用以下參數呼叫 start_session:
    • initiation: user_asked
    • context: fresh
    • use_worktree: false
    • effort: low(聊天將執行腳本並組成小工具:無需與發起階段相同的工作量)
    • title: 「檢查清單:」
    • prompt: 「執行 node strumenti-locali/avanzamento/stato.mjs 並按照 CLAUDE.md 的說明顯示檢查清單」
    • background: 「專案 的進度檢查清單:腳本為 strumenti-locali/avanzamento/stato.mjs。專案的 CLAUDE.md 說明了註冊表的位置、如何顯示檢查清單以及何時更新註冊表。」
  3. 緊接著使用返回的 id 呼叫 detach_session:這是一個主聊天,而非子聊天。
  4. 若 start_session 不存在(CLI)或拒絕:執行 node strumenti-locali/avanzamento/stato.mjs 並按照 <base>/modelli/claude-md.md 的說明在此聊天中顯示檢查清單:使用 show_widget,若 show_widget 不存在則使用 Markdown 表格。
  5. 若 start_session 成功但分離步驟缺失或拒絕,寫一行文字:「請從側邊欄使用「Detach to top level」將其分離。」
  6. 每次執行都會開啟一個新的聊天:不要尋找先前的聊天。

當聊天已開啟並分離,或檢查清單已在此聊天中顯示時,此步驟即完成。

步驟 6:最終訊息

寫兩到三行:

  • 你添加了什麼,或者「全部已存在」;
  • 警告(若有);
  • 檢查清單聊天的位置。

同時說明,若要添加或關閉工作項目,只需在聊天中提及即可:CLAUDE.md 中的規則將負責更新註冊表。

當訊息已寫入時,此步驟即完成。

相關技能