pnpm 12.11.0 Skills 權限實測:批准一次,究竟意味著什麼?

**描述:**根據 pnpm v12.11.0 原始碼與固定版本文件,梳理 Skills 的探索範圍、審批與連結行為,並以獨立合成模型檢驗關鍵分支,協助開發者評估依賴升級與權限管理方式。

探索與權限邊界

我一開始把問題想得比較簡單:依賴中多了個 SKILL.md,pnpm 要嘛在安裝時就把它放進 Agent 目錄,要嘛完全不管。順著 pnpm 12.11.0 的固定版本原始碼追下去,我發現中間還隔著探索、權限判斷和連結幾個步驟;這些邊界,才是判斷「批准一次」意味著什麼的關鍵。

我當時先追查探索邏輯,以為只要依賴樹中出現 Skill 檔案,就會進入審批流程。結果發現掃描範圍更窄:pnpm 會檢查 lockfile 中各個 workspace importer 的直接依賴,而且只掃描一層 Skills 目錄。間接依賴不在這條探索路徑中,不能把「依賴樹中有檔案」和「pnpm 會探索到它」畫上等號。

接著我把安裝、連結和 Agent 載入拆開來看。套件中的檔案可以已經放在依賴目錄中;權限狀態則決定 pnpm 是否為它建立指向目標目錄的符號連結;之後 Claude Code 或其他 Agent 是否讀取、如何處理,則由各自的用戶端決定。pnpm 原始碼處理的是連結,不會解析或執行 Skill 內容。

權限分支包括待批准、拒絕和批准幾種狀態。批准由套件層級的操作處理,pnpm approve 同時涉及建置指令碼與 Skills 權限;這不等於逐一審閱檔案。建置指令碼權限和 permissions.skills 是不同的權限面,套件的建置指令碼獲准,不代表 Skill 內容經過了個別審查。

最讓我停下來確認的是批准的涵蓋範圍。v12.11.0 的官方文件說明,一次套件層級的批准涵蓋該依賴的所有 Skills,並且延續至之後的版本。升級時要留意新版本帶來的指令變動:舊的批准狀態可能仍然適用,但新版本可以新增或改寫 Skill。

workspace 中同時出現多個可用版本時,原始碼會為已安裝且符合條件的 registry 版本選擇最高版本。這會影響實際連結到哪一份內容,因此只看 package.json 中的版本範圍並不足夠。要判斷升級後 Agent 可能讀到什麼,還得檢查實際選中的套件版本及其包含的 Skill。

目標目錄也有明確條件。v12.11.0 會參考 CLAUDECODE、CURSOR_AGENT、GEMINI_CLI 環境變數,或 workspace 中已存在的 Agent Skills 目錄;skills.dirs 可以明確覆寫。明確設定為空會停用 Skills;批准時若未自動偵測到目標目錄,則會觸發無目標錯誤。

# pnpm-workspace.yaml
skills:
  dirs:
    - .claude/skills
    - .cursor/skills

我當時還以為,撤銷權限會一併刪除相關目錄中的內容。原始碼和獨立檔案系統模型呈現的邊界更窄:模型觀察到由它建立的連結會被移除,手動建立的本機 Skill 則保持不動;目標路徑若已被真實目錄占用,也不會遭到取代。套件刪除、目標目錄不存在等分支,也要依照各自的連結清理與錯誤處理邏輯來理解。

合成模型與測試結果

為了具體呈現這些分支,我使用 Node 22.16.0 標準函式庫撰寫了獨立的合成檔案系統模型:建立暫存假依賴、合成 SKILL.md 和符號連結,再計算內容指紋。八組情境分別涵蓋待批准、拒絕、批准、升級後新增 Skill、撤銷、路徑衝突、僅有間接依賴,以及沒有自動偵測到目標目錄。

模型涵蓋的八組情境都通過了;其中升級情境觀察到內容指紋變化,並出現第二個 Skill 連結。第一次執行模型時,有一組因為我用「預期連結數量為零」來判斷是否存在已批准的 Skill 而失敗,誤把「沒有目標目錄」判錯。找出問題後,我改為單獨檢查已批准的 Skill 數量,再次執行後八組情境均通過。

儲存庫檢查與適用範圍

實際檢查儲存庫時,可以先用 pnpm permissions 或 pnpm permissions list 查看權限,再對照 workspace 設定。依賴升級後,檢查新版本中的 Skills 檔案及其差異;更在意指令漂移的專案,可以固定依賴版本,並在 CI 中比較 SKILL.md。

pnpm permissions
pnpm permissions list

邊界 / 限制

這次分析以 pnpm v12.11.0 原始碼和固定版本文件為基準,測試使用由 Node 獨立執行的合成模型,涵蓋範圍為檔案系統行為。模型沒有接入 pnpm CLI、真實安裝更新或 Agent;用戶端的探索與執行規則也會隨各自版本變動。pnpm 12.11.1 的環境識別變更不應倒推為 12.11.0 的功能。套件層級批准所帶來的後續版本信任範圍,是升級審查時需要考量的設計邊界。

參考連結:pnpm v12.11.0 原始碼 · pnpm v12.11.0 文件