你準備替團隊裝一個新的 AI agent skill。README 寫得很完整,GitHub stars 看起來也不低,掃描器沒有亮紅燈,demo 影片甚至剛好解決你們這週卡住的工作流。

這時最容易出現的錯覺是:既然掃描器沒擋,應該可以裝了。

但 AI agent skill 的風險,常常不只藏在安裝那一刻。它真正有能力造成影響的地方,是被 agent 呼叫之後:它能不能讀檔?能不能連網?能不能拿到 token?能不能把結果寫回專案?能不能在你看不到的步驟中,把資料帶到外面?

近期 SkillCloak 相關研究提醒了一件事:只靠安裝前的靜態掃描,可能看不到某些執行時才展開的行為。研究中提到的 self-extracting packing、跳過特定目錄、執行時還原 payload 等手法,重點不在某一篇論文有多驚人,而在它把一個長期問題講得更明白:第三方 skill 不能只問「掃描器有沒有過」,還要問「它跑起來時被允許碰什麼」。

這堂微課要處理的就是這個卡點:AI agent skill 安裝前,團隊要怎麼檢查掃描器看不到的風險?

In this lesson

  1. 為什麼通過掃描仍然不能直接安裝
  2. 一張 AI agent skill 安裝前 go/no-go 表
  3. 如何用隔離試跑補上 runtime 觀察
  4. 團隊明天可以加上的最小放行步驟
  5. 可交給 AI 幫忙整理的 handoff prompt

先把 skill 當成「會被 agent 代你執行的外部同事」

agent 可以先理解成「會自己連續執行幾步任務的 AI 助手」。skill 則像是這個助手可以臨時學會的一組工具、指令或工作流。

問題是,很多團隊在審第三方 skill 時,還停留在審一般套件的習慣:

  • 看 repo 來源是否可信。
  • 跑一次 scanner。
  • 看 README 是否合理。
  • 確認安裝指令沒有明顯可疑內容。

這些都該做,但不夠。

一般套件的風險多半集中在安裝、build、import 或執行特定函式。AI agent skill 多了一層:它可能在 agent 覺得「下一步需要它」時才被呼叫,而且呼叫時帶著任務上下文、檔案、工具權限與使用者意圖。也就是說,skill 不只是一段程式,它會進入一條工作流:一連串固定交接步驟。

如果你們還沒有把 agent 的授權邊界拆開,可以先回頭看這篇:AI agent 授權四問表:身份、權限、理由、後果。那篇處理的是 agent 做動作前要問什麼;這篇則把焦點放在 skill 安裝前,怎麼決定能不能讓它進入環境。

廣告

掃描器負責找線索,放行流程負責決定風險能不能被承擔

掃描器很重要。它可以幫你找 prompt injection、資料外洩、權限升級、工具誤用、MCP 風險等常見問題。MCP 可以先理解成「讓 AI 工具用同一種方式接資料與工具的協定」。

但掃描器通常比較擅長回答這些問題:

  • repo 裡有沒有可疑字串?
  • 檔案結構裡有沒有常見惡意模式?
  • prompt 是否試圖覆蓋原本指令?
  • 有沒有明顯要求讀取敏感檔案或外送資料?

它比較難獨自回答:

  • 這個 skill 在你們的專案脈絡下,會拿到哪些實際資料?
  • 它被 agent 連續呼叫三步後,會不會組合出新的風險?
  • 它是否需要寫入權限,還是只要讀取就夠?
  • 它連網的目的地是否能被限制?
  • 它出錯時,誰負責停止、回收 token、清掉暫存資料?

這也是為什麼「掃描器通過」比較適合當成入口條件,不適合當成最終放行。類似地,安全掃描器指出問題後,也不該讓工具自動亂改生產設定;可以對照這篇:AI 安全掃描器說要修,先讓人類決定能不能改。同樣的邏輯放在 skill 安裝前,就是:掃描器可以提示,人要負責決策。

AI agent skill 安裝前 go/no-go 表

下面這張表的用法很簡單:每一列都要能回答「現在是否足以進入隔離試跑」。如果任一列落在 no-go,就不要裝進日常工作環境;如果落在 conditional go,先補上限制,再進沙盒試跑。

檢查項目Go:可以進隔離試跑Conditional go:補限制後才試跑No-go:今天不要裝
來源與維護狀態來源 repo、發布者、版本紀錄可追;最近一次更新與 issue 回覆顯示仍有人維護來源可信但維護訊號弱;先固定 commit hash,不用浮動版本只有壓縮檔、匿名來源、無法追版本,或 README 與實際檔案差異明顯
權限需求skill 說明清楚列出需要讀哪些目錄、用哪些工具;最小權限即可完成任務權限需求偏大,但可以用唯讀目錄、單一測試 repo、一次性 token 限縮一開始就要求全專案寫入、系統層 shell、瀏覽器登入狀態或長效 token,且沒有合理理由
敏感資料邊界試跑資料可去識別化;不需要讀 .env、金鑰、客戶原文、內部合約需要部分真實資料;先建立 20 筆以內的脫敏樣本,並禁止讀取 secret 目錄必須直接讀 production secret、客戶完整資料或未遮罩憑證才會動
網路行為預期目的地少於 3 個,且能用 allowlist 控制;離線模式也能完成主要功能需要連外 API;先限制網域、記錄 request metadata,不傳 payload 全文會連到不明 endpoint、動態下載執行內容,或拒絕說明資料送往哪裡
執行沙盒可以在 container、臨時工作目錄或測試 VM 跑;試跑結束能完整清掉檔案與 token只能在本機跑;先建立新使用者、唯讀 mount、無持久化憑證的環境必須在工程師主力工作機、登入狀態瀏覽器或 production workspace 才能跑
可觀測性能記錄檔案讀寫、網路連線、工具呼叫與輸出摘要;log 不含敏感全文只能記部分事件;先補 wrapper 或代理層,至少記錄時間、工具、目標路徑、目的網域跑完只看到最終答案,無法知道讀了什麼、連到哪裡、改了什麼
失敗處理有明確 owner;試跑若異常,可在 15 分鐘內撤 token、刪工作目錄、回報影響範圍owner 已指定但撤回步驟未演練;先做一次 dry-run,確認 rollback 路徑沒有人負責收尾,或一旦出事只能靠「大家記得不要再用」

這張表刻意把「掃描結果」放在表外。原因是:掃描器應該先跑,而且沒過就不用進表;但進表後,決策重點會變成「即使它看起來乾淨,我們是否知道它執行時會碰到什麼」。

用 30 分鐘做一次隔離試跑

dry-run 是「先試跑但不真的改資料或發布」。對第三方 skill 來說,dry-run 不只是看它能不能完成任務,也是在觀察它如何完成任務。

換句話說,這一段不是額外測試,而是在補掃描器看不到的 runtime 邊界:skill 實際跑起來時讀了什麼、連到哪裡、用了哪些工具、最後把資料帶到哪個輸出。

你可以用下面這個順序跑一次小型檢查。

1. 準備一個假的但像真的任務

不要拿 production 專案當第一個測試對象。比較好的方式是準備一個小型 fixture:

  • 10 到 20 個檔案,結構模仿真實 repo。
  • 2 到 3 個故意放進去的邊界案例,例如假 .env、假客戶資料、假 API key。
  • 1 個明確任務,例如「幫我整理 changelog」或「找出設定檔不一致的地方」。
  • 1 個明確禁止事項,例如「不得讀取 secrets/ 目錄」。

這樣做的好處是,你不是只看 skill 有沒有完成任務,也能看它有沒有碰不該碰的地方。

2. 把權限切成三層,不要一開始全開

第一次試跑時,建議照這個順序開權限:

  1. 第一層: 唯讀檔案權限,無網路。
  2. 第二層: 唯讀檔案權限,限制網域連線。
  3. 第三層: 需要時才加入寫入權限,而且只允許寫到 output/ 或暫存目錄。

如果 skill 在第一層就能完成主要任務,就不要升到第三層。權限升級要有理由,不要因為安裝教學寫了「建議給 full access」就照做。

3. 記四種 runtime 訊號

runtime 可以先理解成「程式真的跑起來的那段時間」。隔離試跑至少要記這四種訊號:

  • 檔案:讀了哪些路徑?寫了哪些路徑?有沒有碰 forbidden directory?
  • 網路:連到哪些網域?request 大小是否異常?是否有動態下載內容?
  • 工具:呼叫了哪些 shell、瀏覽器、API 或 MCP tool?順序是否合理?
  • 輸出:最終答案是否引用了不該知道的資料?是否把內部內容貼進外部服務?

不用一開始就做很重的安全平台。小團隊可以先用 container log、proxy log、檔案系統 audit、agent tool-call log 拼出第一版觀察。重點是讓試跑留下可回看的痕跡。

4. 把結果寫成 go/no-go,而不是「感覺可用」

試跑結束後,不要只在 Slack 留一句「看起來 OK」。請把結果收斂成三種狀態:

  • go:可裝進限定工作流,保留相同權限限制與監控。
  • conditional go:只能給特定 owner、特定 repo、特定任務使用,並在 2 週內複查。
  • no-go:不安裝;記下原因,避免下次另一位同事重走一次。

如果 conditional go 太多,代表這個 skill 目前還不適合變成團隊共用工具。它也許可以留在個人實驗環境,但不要進正式工作流。

一個常見錯誤:把 skill 衝突當成安裝後才處理的問題

很多 skill 風險不是單一 skill 自己造成,而是跟既有工具組合後才出現。

例如:

  • 一個 skill 只負責整理 issue,看起來只需要讀取權限。
  • 另一個 skill 會根據 issue 自動開 PR。
  • agent 在同一條工作流裡連續呼叫兩者後,讀取、判斷、寫入就被串起來了。

這時風險不在單點功能,而在來源設計與權限交接。從 runtime 邊界來看,問題不是「這個 skill 自己會不會越界」,而是「agent 連續呼叫多個 skill 後,讀取、判斷、寫入、連網會不會被串成新的路徑」。若團隊已經開始累積多個 skill,可以延伸看這篇:衝突的根本解法不在仲裁,而在源頭設計。安裝前的檢查不只是在審「這個 skill 安不安全」,也是在審「它進入現有 agent 生態後,會不會跟其他能力組出新路徑」。

明天可以先加的一個最小步驟

如果你們現在沒有完整流程,不用等資安平台建好才開始。明天先加這一步:

每次有人要安裝第三方 AI agent skill,都必須附上一張 6 行安裝申請卡:

  1. 來源版本: skill 來源 URL、版本或 commit hash。
  2. 單一任務: 這個 skill 要解決的單一任務。
  3. 資料權限: 它需要讀取的目錄與工具。
  4. 連網需求: 它是否需要連網;若需要,列出預期網域。
  5. 試跑資料: 第一次 dry-run 用哪個假資料集。
  6. 異常收尾: 異常時誰是 owner,如何撤 token 或停用。

owner 是「負責最後判斷與收尾的人」。這張卡不需要很漂亮,但要讓下一個人看得懂:為什麼要裝、打算給它什麼、如果它越界誰會處理。

有了這張卡,掃描器才會變成放行流程的一部分,而不是放行流程的替代品。

AI 整理卡

用這篇資安停手檢查整理你的下一步 這不是摘要指令,而是把本文方法套回你的流程。貼到自己的 AI 工具後,先讓它問清楚你的限制、資料與決策目標。

我想把這篇 BMC 微課套用到自己的情境:為什麼 AI agent skill 掃描通過,安裝前還是要再看一次執行邊界?

這篇處理的具體問題:第三方 AI agent skill 通過掃描,不代表執行時一定安全。這堂微課用一張 go/no-go 表,把來源、權限、沙盒、網路與敏感資料邊界檢查清楚。
文章連結:https://boosterminiclass.com/posts/ai-agent-skill-install-runtime-risk-checklist/

請不要只摘要文章。請先問我 3 個問題,確認:
1. 我現在要處理的實際流程或決策是什麼;
2. 這個流程會碰到哪些資料、權限、帳號、成本或對外動作;
3. 我希望今天得到的是停手判斷、試用清單、交接模板,還是風險分級。

接著用這篇文章的框架檢查我的情境:

請輸出:
- 一句話判斷:我現在應該直接做、先限縮試做,還是暫停;
- 對照表:把本文框架逐項套到我的情境,列出已具備/缺證據/需要人工確認;
- 今天可做的一個最小步驟;
- 需要負責人、日誌、回退或人工審核的地方。

如果 AI 沒有問清楚限制或資料來源,先補問,不要直接採用清單。

用日常來理解

四格漫畫:新的 AI agent skill 先進入檢查托盤,再看來源與權限,接著在沙盒試跑,最後由 owner 決定 go、conditional go 或 no-go。

  1. 第三方 skill 進來時,先把它當成需要被檢查的外部能力,不要直接放進日常工作流。
  2. 檢查來源、版本、權限、敏感資料與網路需求,確認哪些條件還缺證據。
  3. 用假資料與隔離環境試跑,觀察檔案、網路、工具呼叫與輸出是否越界。
  4. 試跑結果只收斂成 go、conditional go 或 no-go,並由 owner 負責停用、撤 token 或補限制。
廣告

Share

分享這篇微課

如果這篇剛好解開一個工作卡點,可以分享給也在判斷 AI 怎麼用的人。

參考來源

arXiv:Cloak and Detonate: Scanner Evasion and Dynamic Detection of Agent Skill Malware — https://arxiv.org/pdf/2607.02357(2026-07-02)

The Hacker News:SkillCloak Lets Malicious AI Agent Skills Evade Static Scanners with Self-Extracting Packing — https://thehackernews.com/2026/07/new-skillcloak-technique-lets-malicious.html(2026-07-06)

NVIDIA SkillSpector:SkillSpector README — https://github.com/NVIDIA/SkillSpector(2026-07-06)