Skills、Hooks、Plugins
區分 Copilot skills、hooks 和 plugins:哪些是能力包,哪些是生命週期控制,哪些是分發載體。
Skills(技能包)、Hooks(生命週期鉤子)、Plugins(外掛)都能擴充套件 Copilot,但職責完全不同:
- Skill 教 Copilot 如何完成一類專業任務("會做什麼")。
- Hook 在 agent 生命週期的固定節點執行 shell 命令("什麼時候必須做")。
- Plugin 把 skills、hooks、custom agents、MCP servers 等打包分發("怎麼發給團隊")。
不要把它們混成一個"高階功能"入口。商業專案裡,職責混亂比功能缺失更危險。
Skills 可能引用指令碼和資源,Hooks 會執行命令,Plugins 可能安裝一整組能力。把它們當程式碼審查,不要當普通文件審查。
1. 先做選擇
flowchart TD
Need["定製需求"] --> Always{"每次請求都要遵守?"}
Always -->|是| Instructions["Custom instructions"]
Always -->|否| Repeat{"是否重複呼叫同一任務?"}
Repeat -->|否| Prompt["普通 Chat prompt"]
Repeat -->|是| Multi{"是否需要指令碼、示例、資源?"}
Multi -->|否| PromptFile["Prompt file"]
Multi -->|是| Skill["Agent skill"]
Skill --> Lifecycle{"是否必須在固定生命週期執行?"}
Lifecycle -->|是| Hook["Hook"]
Lifecycle -->|否| Share{"是否要跨團隊安裝更新?"}
Hook --> Share
Share -->|是| Plugin["Plugin"]
Share -->|否| Local["專案內維護"]
style Skill fill:#dcfce7,stroke:#16a34a,stroke-width:2px
style Hook fill:#fef3c7,stroke:#d97706,stroke-width:2px
style Plugin fill:#dbeafe,stroke:#2563eb,stroke-width:2px
簡單判斷:
- 只是規則:用 custom instructions。
- 只是重複 prompt:用 prompt file。
- 有多檔案說明、指令碼、示例、資源:用 skill。
- 需要強制阻止、記錄、格式化、審批:用 hook。
- 需要安裝、更新、分發一組能力:用 plugin。
2. Agent Skills
VS Code 官方定義的 Agent Skills 是一組資料夾:裡面可以有 instructions、scripts、examples 和 resources。Copilot 會在相關任務里載入它們,用來完成特定能力。
適合做 skill 的場景:
- 測試工作流:包含測試命令、樣例、失敗排查指令碼。
- 安全審計:包含檢查清單、敏感路徑、報告模板。
- 文件釋出:包含 frontmatter 規範、截圖流程、連結檢查指令碼。
- 遷移任務:包含分階段步驟、驗證命令、回復策略。
VS Code 預設支援這些位置:
- 專案級:
.github/skills/ - 專案級:
.claude/skills/ - 專案級:
.agents/skills/ - 個人級:
~/.copilot/skills/ - 個人級:
~/.claude/skills/ - 個人級:
~/.agents/skills/
一個 skill 目錄至少要有 SKILL.md。如果 SKILL.md 想讓 Copilot 使用旁邊的指令碼或示例,必須在正文裡用相對連結引用出來,否則 agent 可能不會載入。
3. Hooks
Hooks 適合做確定性控制。VS Code hooks 目前處於 Preview;GitHub Copilot CLI 也提供 hooks 能力。核心思想一致:在 agent session 的某些生命週期點執行你定義的 shell 命令。
典型用途:
PreToolUse:命令執行前檢查 allowlist,阻止危險路徑。PostToolUse:檔案編輯後跑 formatter、lint 或日誌記錄。UserPromptSubmit:記錄使用者請求,或注入可審計上下文。SessionStart:建立會話記錄,檢查專案狀態。PreCompact:在上下文壓縮前儲存關鍵狀態。Stop/SubagentStop:會話或子 agent 結束時做收尾記錄。
Hook 的風險也更高:
- 命令會在本機或開發環境執行。
- 錯誤配置可能影響每一次 agent session。
- hook 輸出可能把敏感資訊帶回上下文。
- preview 能力的配置格式和行為可能變化。
上線前至少驗證:命令可重複執行、失敗路徑可解釋、日誌不含金鑰、受保護路徑不會被繞過。
4. Plugins
Plugin 是分發載體。GitHub 官方 CLI 文件把 plugin 定義為可安裝包,可以包含 skills、custom agents、hooks、MCP server configurations 等組合;VS Code 的 agent plugins 也用於從 marketplace 安裝預打包的 chat customizations。
適合做 plugin 的場景:
- 公司級工程規範包。
- 多儲存庫共用的測試和釋出工具。
- 包含 skill、hook、MCP server 的完整工作臺。
- 需要安裝、更新、解除安裝、版本管理的能力集合。
不適合一上來就做 plugin 的場景:
- 還在試驗 prompt。
- 只有一個很小的 workflow。
- 沒有 owner、版本號和回復計劃。
- 外掛來源不可信或無法審查。
Plugin 裡可能包含 hooks 和 MCP servers,它們能執行本機程式碼或連線外部系統。安裝前必須檢查釋出者、manifest、指令碼、許可權、網路目標和更新機制。
5. 商業級落地順序
推薦順序:
- 先寫最小 instructions。
- 把重複任務沉澱成 prompt files。
- 當 prompt file 需要指令碼、示例、資源時,升級成 skill。
- 當必須強制執行校驗、日誌、阻斷或審批時,加入 hook。
- 當需要跨團隊安裝和更新時,打成 plugin。
每一步都要保留刪除路徑。擴充套件能力不是越多越好;能被審計、驗證、回復的能力才適合上線。
深讀:為什麼 hook 不能替代 skill
Skill 是告訴 agent 怎麼完成任務;hook 是在固定時機執行命令。前者解決知識和流程複用,後者解決確定性控制。
如果你用 hook 寫一大段業務邏輯,後續維護會變成隱藏自動化;如果你用 skill 假裝阻止危險命令,模型仍可能繞過。兩者應該互補,而不是互相替代。
本章自檢
上線前逐項檢查:
- 這個能力有沒有明確 owner 和版本?
- 它是否只在合適入口載入,而不是汙染所有請求?
- 它是否可能執行 shell 命令、訪問網路或讀取敏感檔案?
- 它是否有最小許可權和失敗策略?
- 它是否能用一個真實任務證明有效?
- 它是否能被解除安裝、停用或回復?
透過標準:每個 skill、hook、plugin 都能說明職責、觸發條件、風險邊界和驗證證據。
官方來源
- Use Agent Skills in VS Code —— VS Code 官方 Agent Skills 定義、位置和
SKILL.md格式。 - Agent hooks in Visual Studio Code —— VS Code 官方 hooks 說明和 Preview 邊界。
- Agent plugins in VS Code —— VS Code 官方 agent plugins 說明。
- Comparing GitHub Copilot CLI customization features —— GitHub 官方 CLI 定製能力對比。