Route
引數:$ARGUMENTS
以下 <base> 指「此技能的基礎目錄」,即上方向您顯示的路徑。腳本位於
<base>/scripts/inventory.py。個人目錄位於 ~/.claude/route-catalog/(或
$ROUTE_CATALOG_DIR),絕不放在外掛程式內。
0. 找出請求
使用者撰寫一般提示,並在結尾加上 /route。從他們自己的文字中找出請求:
/route與提示在同一則訊息中(之前或之後):請求是整則訊息,減去/route這個詞。/route是單獨發送的:請求是使用者的上一則訊息(或多則訊息,如果它們屬於同一項任務),並與對話一起解讀。切勿將孤立的「/route」視為請求。- 上面的引數包含文字:將其視為請求或請求的一部分,但如果使用者自己的訊息不同,則以使用者的訊息為準。
- 如果您在
/route送達前已開始處理該請求,請檢視已完成的部分,並僅路由剩餘的工作。不要重做已完成的步驟。 - 如果請求是
build,請閱讀<base>/BUILD.md並遵循其指示。如果是refresh,請跳到重新整理。
將使用者的提示保留為任務。不要將其縮小到某個技能涵蓋的範圍:提示的每個部分都必須由已載入的技能或您自己的工作涵蓋。
1. 理解請求
為自己寫一行文字:目標、交付物、涉及的技術或檔案,以及階段 (規劃、建置、除錯、審查、驗證、發布、文件、媒體、維運)。使用對話:像「修好它」或「製作影片」這樣的請求指的是剛才討論的內容。暫時不要探索程式碼庫。
提早退出:如果請求很簡單(重新命名、一行修復、簡單問題),請輸出「無需技能:<原因>」並執行任務。不要閱讀目錄。
如果專案的 CLAUDE.md 要求在執行任何工作前先執行某個步驟(例如「在診斷前先搜尋錯誤文字的 Runbook」),請立即執行該步驟。其結果可能會改變所需的技能。
2. 尋找候選技能
- 從目前目錄執行
python3 <base>/scripts/inventory.py --check。NO CATALOG:告訴使用者路由器需要一次性執行/route build,提議立即執行,同時使用您自己的技能清單中可見的技能來處理請求。- 否則,它會輸出
catalog in sync,或是 NEW 技能(已安裝但不在目錄中,附有其描述)和 GONE 項目(已不再安裝)。NEW 技能是有效的候選技能。切勿選擇 GONE 的技能。
- 如果
--check報告存在覆寫檔案,請先讀取該檔案。它包含使用者自己的路由規則(例如「UI polish -> better-ui, never impeccable」)。符合請求的覆寫規則優先於目錄、其預設選擇以及您自己的判斷。在 Why 欄位中提及此覆寫規則。 - 在
--check輸出的第一行列出的目錄資料夾中,讀取INDEX.md,如果有的話,也讀取PROFILE.md(使用者的技術棧與習慣)。 - 選出 1 到 3 個符合請求的類別,並僅讀取那些類別檔案。
每個技能行格式為:
- `name` [load] USE: ... | NOT: ... | NEXT: ... | NEEDS: ...
3. 選擇技能組合
- 選出能涵蓋整個請求的最小組合:通常 1 到 3 個技能,絕不超過 5 個。
- 每個工作一個技能。絕不載入兩個做相同工作的技能;遵循類別的「預設選擇」。
- 遵守每個技能的 NOT 欄位。如果 NOT 為此請求指定了更好的技能,則選用那個技能。
- 對於相同的工作,優先選擇專案技能(
[project],來自此儲存庫的.claude/skills)或使用者自訂的技能,而非通用技能。 - 如果某個技能列出了此處缺少的 NEEDS,請說明原因並選擇次佳技能。
- 如果沒有技能能帶來真正的價值,請輸出「無需技能」並執行任務。
- 如果對請求有兩種非常不同的解讀,導致選擇不同的技能,請在載入任何技能之前提出一個簡短的問題,並附上選項。
4. 顯示計畫,然後載入
在第一次技能呼叫之前,以可見文字輸出此表格。這是必需的輸出,而非敘述:即使處於簡潔或「工具呼叫前無文字」的模式,也必須輸出。
| # | 技能 | 選擇原因 | 載入方式 |
|---|---|---|---|
| 1 | skill-name | 一行與請求相關的說明 | skill / read / builtin / project |
某一列可能有條件:在 Why 欄位中寫入「僅當 <條件>」,並僅在條件成立時載入。
在表格下方為每個會發送訊息、部署、刪除資料、花費付費額度或寫入生產環境的步驟(無論是技能還是工作本身執行)添加「副作用」備註。請在該步驟之前請求許可。否則,繼續執行無需等待。
依表格順序載入技能(先規劃,然後建置,最後驗證):
[skill],[builtin],[project]:使用確切名稱呼叫技能工具,並將該技能應處理的請求部分作為args傳遞。[read <path>]:技能工具拒絕此技能(僅限使用者)。讀取<path>處的檔案,並如同已載入般遵循其指示。- 如果技能呼叫失敗,請改為讀取該技能的 SKILL.md(不帶標誌的
inventory.py會輸出每個路徑)並說明原因。
5. 執行工作
一起遵循已載入的技能。當兩個技能衝突時,對於該任務部分,更具體的技能優先。使用者的 CLAUDE.md 檔案和明確指示優先於所有技能。
如果中途出現新的需求(例如修復需要遷移),請載入一個額外的技能,並用一行文字宣告:「同時載入 x:<原因>」。
6. 檢查、記錄、報告,並建議下一步要執行的技能
結束檢查:當載入了兩個或兩個以上的技能,或請求包含多個部分時,請在最終回覆前檢查每個部分。對於每個已載入的技能,以及請求中沒有技能涵蓋的每個部分,判斷其狀態為完成 / 部分完成 / 受阻,並附上證據(檔案:行號、測試結果、指令輸出)。將其以簡短表格的形式放入最終回覆:
| 部分 | 技能 | 狀態 | 證據 |
|---|
如果某個部分狀態為部分完成或受阻,請說明缺少的內容,而不是將任務標記為完成。對於單一技能、單一部分的請求,請跳過此表格。
記錄:執行一次 python3 <base>/scripts/inventory.py --log '<json>',傳入一個 JSON 物件:
request(請求,最多 160 個字元,不含機密資訊)、loaded(載入的技能)、used(載入且其指示實際影響了工作的技能)、unused(已載入但未使用)、skipped(規劃中但未執行的列)、next(您建議的下一步技能)、no_skill(當不需要技能時為 true)、check(「done」、「partial」、「blocked」或「n/a」)。記錄是路由的一部分,並非可選。如果指令失敗,用一行文字說明原因並繼續。
inventory.py --report 稍後會顯示 /route 載入了什麼、工作使用了什麼,以及使用者遵循了多少個 Next 技能的建議。
以一行文字開始最終回覆,說明哪些技能已執行,以便使用者即使表格已滾動也能看到:已使用技能:a,b(當規劃的列未執行時,加上 跳過 c:<原因> ``,或 已使用技能:無 (<原因>))。
以以下部分結束最終回覆:
下一步技能
skill-name:何時執行(現在 / 提交前 / 推送前 / 部署後 / 每週一次),以及原因。
最多給出 3 個。從已載入技能的 NEXT 欄位、您所讀取類別的「預設選擇」,以及專案 CLAUDE.md 要求的步驟(例如推送前執行完整測試)中選取。僅保留那些符合實際情況的技能,並且不要執行它們。此部分也適用於未載入任何技能的情況。
重新整理
當使用者安裝、移除或更新技能或外掛程式時執行。
- 執行
python3 <base>/scripts/inventory.py --check。如果輸出NO CATALOG,則改為執行建置。 - 對於每個 NEW 技能:讀取其 SKILL.md(frontmatter 和前約 80 行),選擇 Scope 相符的類別檔案(
inventory.py在其 TAXONOMY 中列出固定的類別),並在該檔案中以與其他行相同的格式附加一行。當前端的 frontmatter 中有disable-model-invocation: true時,使用[read <絕對路徑>];當其位於儲存庫的.claude/skills中時,使用[project]。如果該類別檔案尚不存在,則以相同的標頭(# name、Scope:、Default picks:)建立它。 - 對於每個 GONE 項目:刪除其行,並將其從任何「Default picks」文字中移除。
- 執行
inventory.py --index,然後再次執行--check,直到輸出catalog in sync。報告新增和移除了哪些內容。