Community程式設計與開發github.com

medjbilou/claude-skill-router

技能路由器。僅在使用者訊息中包含「/route」時使用(開頭、結尾,或請求後單獨發送);切勿自行啟動。從所有已安裝技能中選出最適合的 1 到 5 個技能來處理使用者的請求,顯示載入了哪些技能及其原因,執行工作,然後建議接下來應該執行哪些技能以及何時執行。「/route build」建立個人技能目錄(執行一次),「/route refresh」在安裝或移除技能後重新同步目錄。

claude-skill-router 是什麼?

此技能路由器會解析使用者的請求及任何與其相關的對話脈絡,將「/route」從請求中移除,並從所有已安裝技能中動態選出 1 到 5 個最相關的技能。它會先理解目標,利用「inventory.py」腳本檢查個人技能目錄(位於 ~/.claude/route-catalog/),讀取類別索引與使用者設定檔,並遵守任何使用者自訂的置換規則。路由器的輸出包含一個詳細的規劃表格,列出每個選擇的技能及選擇原因,按順序載入技能,協調它們的執行(處理衝突與新增的需求),檢查結果,記錄日誌,最後以一個摘要表格和最多三個後續建議結尾特別指令包含「build」、「refresh」,或用於在請求中間重新路由一段工作。對於不使用「/route」的簡單查詢,它會直接跳過所有技能。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/medjbilou/claude-skill-router/tree/HEAD/skills/route

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

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. 尋找候選技能

  1. 從目前目錄執行 python3 <base>/scripts/inventory.py --check。
    • NO CATALOG:告訴使用者路由器需要一次性執行 /route build,提議立即執行,同時使用您自己的技能清單中可見的技能來處理請求。
    • 否則,它會輸出 catalog in sync,或是 NEW 技能(已安裝但不在目錄中,附有其描述)和 GONE 項目(已不再安裝)。NEW 技能是有效的候選技能。切勿選擇 GONE 的技能。
  2. 如果 --check 報告存在覆寫檔案,請先讀取該檔案。它包含使用者自己的路由規則(例如「UI polish -> better-ui, never impeccable」)。符合請求的覆寫規則優先於目錄、其預設選擇以及您自己的判斷。在 Why 欄位中提及此覆寫規則。
  3. 在 --check 輸出的第一行列出的目錄資料夾中,讀取 INDEX.md,如果有的話,也讀取 PROFILE.md(使用者的技術棧與習慣)。
  4. 選出 1 到 3 個符合請求的類別,並僅讀取那些類別檔案。 每個技能行格式為:- `name` [load] USE: ... | NOT: ... | NEXT: ... | NEEDS: ...

3. 選擇技能組合

  • 選出能涵蓋整個請求的最小組合:通常 1 到 3 個技能,絕不超過 5 個。
  • 每個工作一個技能。絕不載入兩個做相同工作的技能;遵循類別的「預設選擇」。
  • 遵守每個技能的 NOT 欄位。如果 NOT 為此請求指定了更好的技能,則選用那個技能。
  • 對於相同的工作,優先選擇專案技能([project],來自此儲存庫的 .claude/skills)或使用者自訂的技能,而非通用技能。
  • 如果某個技能列出了此處缺少的 NEEDS,請說明原因並選擇次佳技能。
  • 如果沒有技能能帶來真正的價值,請輸出「無需技能」並執行任務。
  • 如果對請求有兩種非常不同的解讀,導致選擇不同的技能,請在載入任何技能之前提出一個簡短的問題,並附上選項。

4. 顯示計畫,然後載入

在第一次技能呼叫之前,以可見文字輸出此表格。這是必需的輸出,而非敘述:即使處於簡潔或「工具呼叫前無文字」的模式,也必須輸出。

#技能選擇原因載入方式
1skill-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 要求的步驟(例如推送前執行完整測試)中選取。僅保留那些符合實際情況的技能,並且不要執行它們。此部分也適用於未載入任何技能的情況。

重新整理

當使用者安裝、移除或更新技能或外掛程式時執行。

  1. 執行 python3 <base>/scripts/inventory.py --check。如果輸出 NO CATALOG,則改為執行建置。
  2. 對於每個 NEW 技能:讀取其 SKILL.md(frontmatter 和前約 80 行),選擇 Scope 相符的類別檔案(inventory.py 在其 TAXONOMY 中列出固定的類別),並在該檔案中以與其他行相同的格式附加一行。當前端的 frontmatter 中有 disable-model-invocation: true 時,使用 [read <絕對路徑>];當其位於儲存庫的 .claude/skills 中時,使用 [project]。如果該類別檔案尚不存在,則以相同的標頭(# name、Scope:、Default picks:)建立它。
  3. 對於每個 GONE 項目:刪除其行,並將其從任何「Default picks」文字中移除。
  4. 執行 inventory.py --index,然後再次執行 --check,直到輸出 catalog in sync。報告新增和移除了哪些內容。

相關技能