這篇文章適合三類團隊:允許 AI Coding Agent 修改程式碼、打包或準備 npm 版本,但必須限制最終發布權限的開源維護者;正在重整長期令牌、OIDC 與人工審批流程的平台工程團隊;以及需要用遠端 Mac 建置原生依賴、跨平台二進位檔或 Apple 工具鏈的交付團隊。
最後更新於 2026 年 9 月 19 日;資料核實自 GitHub 官方 Stage-only Token 變更記錄、npm staged publishing 文件及 npm Trusted Publishing 文件。npm 將 2027 年 1 月列為移除 bypass-2FA 令牌直接發布能力的目標時間,但這是官方規劃,不是不可變更的承諾。
1先把「寫程式」與「公開發布」拆成不同責任
Stage-only Token 的價值,在於把 AI Agent 從正式公開發布的最後一步移開;它不是把 Agent 變成唯讀使用者,也不是自動證明暫存包沒有問題。依 npm 對存取令牌的說明,Read and write(stage only)令牌可以提交待審核版本,但直接執行 npm publish 會被拒絕,最後仍要由維護者完成 2FA 批准。相關權限名稱與行為應以 npm 存取令牌文件為準。
因此,一個可追責的發布時間線應該長這樣:
| 里程碑 | 執行者 | 必須留下的證據 | 不通過時的動作 |
|---|---|---|---|
| 修改程式碼 | AI Agent | 工作區識別、提交雜湊、工具呼叫紀錄 | 停止後續建置 |
| 產生套件 | 隔離建置環境 | 測試結果、打包清單、版本號 | 回退到人工建置 |
| 提交暫存版本 | Agent 或 CI | 暫存版本識別、令牌使用範圍、時間紀錄 | 撤銷令牌並調查 |
| 審核產物 | 維護者 | tarball、來源提交、變更範圍對照 | 不批准、不公開 |
| 正式發布 | 維護者 2FA | 批准者身份與批准時間 | 保留暫存,不進入公開版本 |
你不能把「已進入暫存區」寫成「版本已安全」。維護者仍要獨立檢查版本號、套件內檔案、安裝腳本、來源提交、產物差異與變更範圍;如果這些項目只由產生該版本的 Agent 自己報告,流程仍然缺少獨立驗證。
2對 AI Coding 團隊而言,Stage-only 不是完整權限邊界
AI Agent 的任務應限於修改程式碼、執行測試、產生 tarball、整理變更摘要及發起暫存發布。它不應持有維護者 2FA,也不應取得可以在另一個步驟完成正式批准的身份。更重要的是,團隊要檢查提示詞、Shell 腳本、MCP 工具或子 Agent 是否仍能執行超出「準備版本」的操作。
Stage-only Token 仍可能保留部分寫入權限,官方已確認的例子包括移動 dist-tag 與棄用版本。這代表一次驗收不能只執行一個被拒絕的 npm publish;安全團隊還要測試 Agent 是否能改變 latest 或其他標籤、標記某個版本為 deprecated,以及令牌是否能接觸目標套件以外的資源。
每次任務至少要綁定以下邊界:
- 一個獨立工作區,不與其他發布任務共用未清理的檔案。
- 一個可追蹤的 Git 提交,暫存版本必須能回到該提交。
- 一筆獨立的暫存紀錄,包含執行時間、套件名稱、版本和產物摘要。
- 一個短時或可快速撤銷的憑據上下文,避免令牌流入快取、日誌、工作區快照或子 Agent 對話。
- 一個明確的失敗路徑:測試失敗、產物不一致或權限測試異常時,不能自動進入 2FA 批准。
你也可以參考 vpstix 的 AI Agent 憑據隔離指南,把 Agent 的工具權限、工作區和憑據注入方式分開檢查;但不要把任何建置主機的隔離能力當成 npm 帳戶權限控制的替代品。
3Stage-only 與 Trusted Publishing 的選擇條件
兩條路徑解決的問題並不完全相同。Stage-only Token 主要是把自動化流程限制在暫存發布,保留維護者作為最後批准者;Trusted Publishing 則透過 OIDC 工作流身份取得發布授權,目標是減少長期保存寫入令牌的需要。npm 的支援範圍、CI/CD 類型與必要前提,應直接對照 Trusted Publishing 官方文件,不能簡化為「OIDC 等於免審批」。
| 方案 | 適合條件 | 主要風險 | 2026 年建議 |
|---|---|---|---|
| Stage-only Token | CI/CD 尚未符合 OIDC,仍需要自動準備暫存版本 | 仍保留部分套件寫入權限,令牌可能外洩 | Agent 只暫存,維護者獨立 2FA |
| Trusted Publishing | 工作流身份、Runner、套件授權均符合官方支援條件 | 工作流遭竄改或身份範圍配置錯誤 | 先在低影響套件試點並保留審計 |
| 雙軌運行 | 團隊需要逐步遷移,或不同套件的 CI/CD 條件不一致 | 兩條流程規則不一致,容易誤用舊令牌 | 固定一個新套件驗收矩陣再擴大 |
| 暫緩自動化 | 無法隔離令牌、來源或批准身份 | 人工成本較高,但責任邊界清楚 | 先修復治理缺口,不強行啟用 |
GitHub 已公布 npm Trusted Publishing 可用多個配置的更新,但這不代表所有自託管 Runner、分支策略或工作流都自然符合條件;你仍要驗證工作流身份、套件級授權、分支保護和失敗後的撤銷程序。若目前 CI/CD 不符合條件,Stage-only 可以作為過渡方案,但要設定遷移期限與重新驗收條件。
4各角色的驗收清單與保存證據
這份清單不是「勾完就安全」,而是每一項都應該能由另一位工程師重現或抽查。若任何一項無法保存證據,發布負責人應把結果標示為暫緩,而不是以口頭確認取代測試。
開源維護者:確認暫存版本值得批准
- [ ] 對照來源提交檢查版本號、變更檔案與套件內檔案。
- [ ] 解開暫存 tarball,確認沒有意外納入憑據、工作區設定或未追蹤檔案。
- [ ] 用獨立環境執行安裝與測試,不只閱讀 Agent 產生的摘要。
- [ ] 由維護者本人使用 2FA 批准,不把批准密鑰交給 Agent 或建置主機。
- [ ] 保存批准者、批准時間、版本和提交雜湊的對照記錄。
AI Coding 團隊:確認 Agent 沒有越權
- [ ] 將提示詞、工具清單和 Shell 腳本列入審查範圍。
- [ ] 測試直接
npm publish是否被拒絕。 - [ ] 另外測試
dist-tag移動、版本棄用及非目標套件存取是否被限制。 - [ ] 讓每次任務使用獨立工作區,任務結束後刪除產物與憑據痕跡。
- [ ] 將提交、測試、暫存與批准事件串成同一條可追溯記錄。
平台工程團隊:確認 CI/CD 身份可控
- [ ] 核對 Runner 類型、工作流來源、分支條件與 OIDC 支援範圍。
- [ ] 記錄令牌存放位置、注入步驟、遮罩方式和撤銷流程。
- [ ] 將 Trusted Publishing 與 Stage-only 流程分開命名,避免誤把一條流程的權限套到另一條。
- [ ] 在低影響套件完成成功、失敗、取消和重試測試後,才擴大套件範圍。
- [ ] 設定令牌輪換和事件調查的責任人,而不是只依賴平台預設保留期。
建立令牌時,應以 npm 建立與檢視存取令牌文件核對目前介面與權限名稱;不要把舊版 CLI 行為、社群文章或 Agent 的自動提示當作權限事實。
5遠端 Mac 建置與批准身份必須分離
如果 npm 套件包含 macOS 原生依賴、跨平台二進位檔或 Apple 工具鏈,遠端 Mac 可以負責建置與驗證,但不應同時保存維護者 2FA 或正式發布憑據。遠端主機的角色是產生可核驗的暫存產物,不是把「能完成建置」延伸成「能代表維護者公開發布」。
你可以參考 vpstix 的遠端 Mac 建置環境隔離方案,把建置工作區、任務身份和批准身份分開規劃,然後把以下證據加入交付包:
| 證據項目 | 建置主機應提供什麼 | 批准者要核對什麼 |
|---|---|---|
| 來源 | Git 提交、分支、工作樹狀態 | 是否與批准版本一致 |
| 建置 | Node.js、npm、原生工具鏈與測試記錄 | 是否在預期環境產生 |
| 產物 | 暫存 tarball、檔案清單、摘要 | 是否含入不應公開的檔案 |
| 憑據 | 注入時間、作用範圍、清理結果 | 是否沒有落入快取或日誌 |
| 恢復 | 失敗後的撤銷、清理與重建記錄 | 是否能在不批准的情況下停止 |
交付前應實際解開暫存 tarball,將它與來源提交和測試結果對照;不能只因 Agent 回報「建置成功」就放行。任務結束後要清理令牌、Shell 歷史、工作區快照、暫存檔和可能包含環境變數的記錄。這也是為什麼遠端 Mac 隔離方案要同時處理建置主機與批准身份,而不是只開一台獨立伺服器。
6發布負責人用四類證據決定是否擴大
對低風險、可快速回復的套件,你可以先採用 Agent 暫存加人工批准;對高影響套件,則應加入獨立復測和雙人審核。若團隊無法還原產物來源、隔離憑據或確認剩餘寫入權限,就不要因為 Stage-only 名稱看起來收窄而啟用。
| 驗收類別 | 最低可接受證據 | 缺少時的結論 |
|---|---|---|
| 直接發布被拒絕 | 使用 Stage-only Token 執行直接發布,保存失敗結果 | 暫停啟用 |
| 暫存包可復核 | tarball、版本、提交與測試結果可互相對應 | 不進入人工批准 |
| 2FA 批准可追責 | 批准者身份、時間、版本和理由可查 | 保持人工發布 |
| 失敗可撤銷 | 可撤銷令牌、停止工作流、清理工作區並重建 | 不擴大套件範圍 |
最後可形成三種決策:低風險套件採取有限開放;CI/CD 條件逐步成熟的團隊採用 Stage-only 與 Trusted Publishing 雙軌遷移;無法隔離身份或產物來源的團隊繼續人工發布。這比單純比較「Token 是否能 publish」更接近真正的供應鏈風險。
7常見驗收問題
上述 FAQ 的重點,是把長尾搜尋意圖轉換成可執行的權限與責任判斷,而不是把 npm staged publishing、Trusted Publishing 或 GitHub Actions 當成互相替代的關鍵字。尤其在使用 GitHub Actions 時,工作流身份與套件授權仍需逐項核對;在使用遠端 Mac 時,建置方便也不能改變批准身份必須獨立的原則。
如果你現在的方案是「Agent 在同一台主機修改、建置、保存長期令牌,再由腳本自動發布」,它至少有三個實際缺點:程式碼來源與公開動作難以分段取證、長期憑據可能進入日誌或快取,而且建置失敗時缺少獨立的人工作止點。相較之下,租用 vpstix 的 Mac 建置環境可把原生建置與維護者批准身份分開,讓你先完成暫存、驗收和清理,再決定是否公開發布;若你只是需要臨時的 macOS 原生建置或隔離測試,這通常比把正式憑據長期放在現有工作主機更容易控制。
8常見問題
Stage-only Token 可以阻止 AI Agent 直接執行 npm publish 嗎?
可以。依 npm 目前的 staged publishing 設計,Read and write(stage only)令牌不能直接完成正式 npm publish,最終發布仍需要維護者完成 2FA。不過它並非唯讀憑據,仍可能保留移動 dist-tag、棄用版本等部分套件寫入能力,因此不能把它視為完整安全邊界。
npm 暫存發布與 Trusted Publishing 應該怎樣選?
若你的 CI/CD 環境符合 npm 支援的 OIDC 條件,應優先評估 Trusted Publishing,因為它可減少長期寫入令牌的保存與暴露。若 Runner、工作流身份或套件授權尚未符合條件,可先採用 npm staged publishing,再保留人工批准與隔離執行環境,不要因為改用 OIDC 就取消審計。
AI Coding Agent 發布 npm 套件還需要人工 2FA 嗎?
需要。AI Agent 可以負責修改程式碼、執行測試、產生套件並送入暫存流程,但正式公開發布仍應由能核對版本號、產物內容、來源提交與變更範圍的維護者使用 2FA 批准。若團隊無法保留獨立批准身份,就不應把流程標示為可安全自動發布。
遠端 Mac 建置 npm 套件時,令牌應該放在哪裡?
不要把維護者 2FA、正式發布憑據或長期寫入令牌放進遠端 Mac 的固定工作區、映像檔、快取或 Agent 上下文。建置主機只應取得完成當次暫存所需的短時憑據,並在任務結束後清理環境;正式批准應在另一個可追責的維護者身份中完成。
Stage-only Token 還保留哪些 npm 套件寫入權限?
官方資料確認這類令牌雖然會阻止直接正式發布,仍保留部分套件寫入能力,包含移動 dist-tag 與棄用版本等操作。實際驗收不能只測試 npm publish 是否被拒絕,還要逐項測試標籤、棄用、目標套件範圍、日誌暴露及撤銷輪換,避免把暫存權限誤判成最小權限。
9延伸閱讀
vpstix M4 遠端節點
為 AI Agent 配備穩定可靠的遠端 Mac
使用 vpstix 遠端 Mac,讓 AI Coding Agent 在獨立且可控的 macOS 環境中執行建置與套件發佈流程。