---
title: "Skills、Hooks、Plugins"
description: "區分 Copilot skills、hooks 和 plugins：哪些是能力包，哪些是生命週期控制，哪些是分發載體。"
verifiedAt: "2026-05-06"
---

Skills（技能包）、Hooks（生命週期鉤子）、Plugins（外掛）都能擴充套件 Copilot，但職責完全不同：

- **Skill** 教 Copilot 如何完成一類專業任務（"會做什麼"）。
- **Hook** 在 agent 生命週期的固定節點執行 shell 命令（"什麼時候必須做"）。
- **Plugin** 把 skills、hooks、custom agents、MCP servers 等打包分發（"怎麼發給團隊"）。

不要把它們混成一個"高階功能"入口。商業專案裡，職責混亂比功能缺失更危險。

> [!WARNING]
> Skills 可能引用指令碼和資源，Hooks 會執行命令，Plugins 可能安裝一整組能力。把它們當程式碼審查，不要當普通文件審查。

## 1. 先做選擇

```mermaid
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. 商業級落地順序

推薦順序：

1. 先寫最小 instructions。
2. 把重複任務沉澱成 prompt files。
3. 當 prompt file 需要指令碼、示例、資源時，升級成 skill。
4. 當必須強制執行校驗、日誌、阻斷或審批時，加入 hook。
5. 當需要跨團隊安裝和更新時，打成 plugin。

每一步都要保留刪除路徑。擴充套件能力不是越多越好；能被審計、驗證、回復的能力才適合上線。

<details>
<summary>深讀：為什麼 hook 不能替代 skill</summary>

Skill 是告訴 agent 怎麼完成任務；hook 是在固定時機執行命令。前者解決知識和流程複用，後者解決確定性控制。

如果你用 hook 寫一大段業務邏輯，後續維護會變成隱藏自動化；如果你用 skill 假裝阻止危險命令，模型仍可能繞過。兩者應該互補，而不是互相替代。
</details>

## 本章自檢

上線前逐項檢查：

1. 這個能力有沒有明確 owner 和版本？
2. 它是否只在合適入口載入，而不是汙染所有請求？
3. 它是否可能執行 shell 命令、訪問網路或讀取敏感檔案？
4. 它是否有最小許可權和失敗策略？
5. 它是否能用一個真實任務證明有效？
6. 它是否能被解除安裝、停用或回復？

透過標準：每個 skill、hook、plugin 都能說明職責、觸發條件、風險邊界和驗證證據。

## 官方來源

- [Use Agent Skills in VS Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills) —— VS Code 官方 Agent Skills 定義、位置和 `SKILL.md` 格式。
- [Agent hooks in Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/hooks) —— VS Code 官方 hooks 說明和 Preview 邊界。
- [Agent plugins in VS Code](https://code.visualstudio.com/docs/copilot/customization/agent-plugins) —— VS Code 官方 agent plugins 說明。
- [Comparing GitHub Copilot CLI customization features](https://docs.github.com/en/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/comparing-cli-features) —— GitHub 官方 CLI 定製能力對比。

## 接下來去哪

<Cards>
  <Card title="Prompt Files" description="回到更輕量的重複任務入口。" href="/zh-Hant/docs/github-copilot/official/06-context-customization/prompt-files" />
  <Card title="MCP 與外部工具" description="當任務需要外部系統資料和動作時再接 MCP。" href="/zh-Hant/docs/github-copilot/official/07-mcp" />
</Cards>
